Optimisasi SimXpert Menggunakan Intel Threading Building Blocks

Optimisasi SimXpert Menggunakan Intel Threading Building Blocks
Bagikan Artikel ini di:

Pendahuluan

Intel Software College memberikan pelatihan untuk sekelompok engineer MSC.Software tentang threading pada arsitektur multiprosesor, dan penggunaan Intel Threading Building Blocks (TBB). Pendekatan incremental threading dan multifase digunakan untuk penyelesaian tugas.

Setelah menganalisis model elemen hingga pada tugas yang diberikan, hasilnya dapat diakses oleh SimXpert untuk pengolahan akhir. Dalam SimXpert terdapat modul Post-processing Component (PPC) yang dijadikan target untuk threading. Modul ini membolehkan analis untuk melakukan hal-hal sebagai berikut:

  • Melihat hasil yang diinginkan dalam berbagai cara, seperti plot tepi, deformasi, kontur, vektor, dan tensor
  • Mengidentifikasi masalah
  • Mendesain ulang area struktur

Performa fase-fase threading diukur pada plot tepi menggunakan model simulasi yang disediakan oleh pengguna MSC.Software. Model dari pengguna berasal dari kasus di lapangan dalam industri dirgantara, otomotif, dan manufaktur. Masalah yang terjadi pada saat perhitungan numerik dan tampilan grafis disebabkan oleh beberapa faktor kritis:

  • Free face adalah muka internal dan eksternal pada model elemen hingga yang mana plot tepi di-render.

Gambar 1: Free face rendering pada model elemen hingga [1]

  • Clustering pada identifier (ID) elemen hingga untuk elemen-elemen yang free face di-render secara langsung mempengaruhi waktu pengambilan data.
  • Dimensi data (yaitu tipe data skalar, vektor, tensor) secara langsung mempengaruhi banyaknya nilai data yang diambil untuk pengolahan akhir.
  • Kompleksitas persamaan matematis yang diterapkan pada data analisis awal yang ditransformasi dari tipe data vektor atau tensor ke tipe data skalar untuk rendering plot tepi.

Metodologi dan Hasil

  1. Fase Satu

Target awal untuk threading SimXpert adalah kalkulasi dalam bagian PPC. Transformasi dibutuhkan pada kode serial asli sebelum diparalelkan menggunakan tbb::parallel_for.

for         (size_t   i=0;        i<Size;++i)           {

deriveFunc(ptr_inArray,ptr_outArray);

ptr_inArray        +=          inStride);

ptr_outArray     +=          outStride);

}

Gambar 2: Kode serial asli

for         (size_t   i=0;i<Size;           ++i)        {

deriveFunc(ptr_inArray[k*inStride], ptr_outArray[k*outStride]);

}

Gambar 3: Transformasi untuk membuat container akses acak array

Setelah transformasi selesai, tbb::parallel_for diintegrasikan ke dalam aplikasi. Kode hasil transformasi hanya representasi 7,4% dari runtime total untuk SimXpert, tapi threading yang dihasilkan mengalami peningkatan performa 4,9% dari keseluruhan. Tabel 1 memperlihatkan penskalaan yang dicapai pada platform Intel Xeon processor 5100 series 3.0 GHz/memori 8 GB menggunakan sistem operasi Red Hat Linux 4 update 3.

Tabel 1: Rangkuman plot

Plot Nama file/entitas Waktu serial (detik) Waktu parallel (detik) Faktor speedup (waktu serial/waktu paralel) Waktu proses serial (detik) Waktu proses paralel (detik) Persentase proses speedup (%)

(s-p)/s

Persentase waktu terpakai dalam operasi numerik
fringe – Stress, max Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0kst0.xdb/624924 0,765 0,196 3,903 10,22 9,65 5,579 7,48
fringe – Stress, mid Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0kst0.xdb/624924 0,763 0,195 3,904 10,209 9,635 5,623 7,47
fringe – Stress, min Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0kst0.xdb/624924 0,762 0,197 3,873 10,208 9,636 5,604 7,46
fringe – Stress, Tresca Avg meth=Avg/Derive, Extrap meth=Avg xx0kst0.xdb/624924 0,767 0,196 3,905 10,228 9,675 5,410 7,50
nfringe – Stress, max Princ Avg meth=Avg/ Derive, Extrap meth=Avg xx0ust0.xdb/605288 0,696 0,180 3,874 9,573 9,152 4,401 7,27
fringe – Stress, mid Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0ust0.xdb/605288 0,691 0,181 3,820 9,553 9,110 4,641 7,24
fringe – Stress, min Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0ust0.xdb/605288 0,693 0,179 3,879 9,556 9,114 4,626 7,25
fringe – Stress, Tresca Avg meth=Avg/Derive, Extrap meth=Avg xx0ust0.xdb/605288 0,693 0,178 3,886 9,584 9,105 4,998 7,23
fringe – Stress, max Shear Avg meth=Avg/ Derive, Extrap meth=Avg xx0ust0.xdb/605288 0,695 0,180 3,861 9,554 9,099 4,766 7,27
fringe – Stress, max Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0jst0.xdb/2394421 2,883 0,731 3,942 39,068 37,007 5,275 7,38
fringe – Stress, mid Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0jst0.xdb/2394421 2,888 0,730 3,956 39,090 36,945 5,486 7,39
fringe – Stress, min Princ Avg meth=Avg/Derive, Extrap meth=Avg xx0jst0.xdb/2394421 2,880 0,730 3,947 39,086 36,816 5,808 7,37
fringe – Stress, Tresca Avg meth=Avg/Derive, Extrap meth=Avg xx0jst0.xdb/2394421 2,874 0,730 3,937 37,996 36,833 3,061 7,56
fringe – Stress, max Shear Avg meth=Avg/ Derive, Extrap meth=Avg xx0jst0.xdb/2394421 2,894 0,732 3,952 39,433 38,277 2,932 7,34
Average 3,90 4,872 7,37
Minimum 3,82 2,932 7,23
Maximum 3,96 5,808 7,56
  1. Fase Dua

Tujuan utama pengguna SimXpert adalah pengolahan akhir yang cepat dari data hasil analisis. Analisis pengolahan akhir melibatkan transformasi data analisis awal menjadi bentuk numerik akhir yang ditentukan oleh engineer, kemudian dipetakan ke tampilan grafis. Misal, engineer ingin SimXpert me-render plot tepi warna von Mises, Maximum Principal, dan Maximum Shear stress untuk memeriksa performa model simulasi relatif terhadap pembebanan. Gambar 4 memperlihatkan plot tepi dari distribusi von Mises stress di sepanjang model batang.

Baca juga:

Gambar 4: Plot tepi dari von Mises stress [1]

Fase Dua untuk threading pada bagian kode program yang bertanggung jawab untuk produksi grafis pada plot tepi. Kode ini menyumbang 35% dari waktu plot total. Sebagai bukti konsep, MSC.Software dan Intel memprototipe kode yang di-threading dan melihat peningkatan sampai dengan 3,2 kali pada empat core multiprosesor. Metode yang digunakan melibatkan produksi dan pengemasan grafis kedalam container. Aliran program yang telah dimodifikasi seperti terlihat dalam Tabel 2.

Tabel 2: Aliran program serial versus paralel

Serial Paralel
Iterasi pada seluruh elemen/face Membagi iterasi elemen/face pada banyak thread menggunakan tbb::parallel_for
Alokasi (atau realokasi) memori sesuai kebutuhan untuk container Storage lokal menyimpan elemen dalam masing-masing task Intel TBB
Melakukan kalkulasi pada masing-masing elemen dan menghasilkan grafis Kode program serial bekerja pada container lokal tanpa modifikasi
Menyalin piksel kedalam kontainer (array) menggunakan memcpy Hasil parsial dalam masing-masing container lokal digabung dalam tbb::concurrent_vector

Peningkatan performa diamati ketika model simulasi dijalankan pada platform Intel Xeon processor 5100 series 2.66 GHz/memori 8 GB menggunakan sistem operasi Windows XP Professional X64 Edition Version 2003 SP2 (Tabel 3).

  • Model simulasi elemen hingga 3D dan solid yang menggambarkan blok mesin V6 (modelsec.xdb) dengan 98.814 free faces dan ukuran file 358,7 MB, mencapai peningkatan performa 28%.
  • Model simulasi elemen hingga 3D dan solid yang menggambarkan bilah turbin (xx0kst0.xdb) dengan 65.416 free faces dan ukuran file 513,3 MB, mencapai peningkatan performa antara 3% dan 10% untuk berbagai plot.
  • Model simulasi elemen hingga 3D dan solid yang menggambarkan housing peralatan dapur (xx0ust0.xdb) dengan 90.460 free faces dan ukuran file 281,7 MB, mencapai peningkatan performa antara 6% dan 26% untuk berbagai plot.
  • Model simulasi elemen hingga 2D dan 3D yang menggambarkan rangka mobil (xx0o.xdb) dengan 1.209.323 free faces dan ukuran file 438,8 MB, mencapai peningkatan performa antara 19% dan 27% untuk berbagai plot.
  • Model simulasi elemen hingga 3D dan solid yang menggambarkan central hub baling-baling pesawat (xx0fst0.xdb) dengan 89.935 free faces dan ukuran file 165,2 MB, mencapai peningkatan performa antara 10% dan 30% untuk berbagai plot.
  • Model simulasi elemen hingga 3D dan solid yang menggambarkan blok mesin 6 silinder (xx0jst0.xdb) dengan 461.808 free faces dan ukuran file 1028,5 MB, mencapai peningkatan performa antara 15% dan 44% untuk berbagai plot.

Pada masa mendatang (setelah SimXpert R4), tipe data plot yang tersisa akan di-thread. Intel TBB juga akan dievaluasi untuk threading pengolahan dan I/O yang tumpang tindih. Engineer Intel telah memprototipe Intel TBB yang menggunakan kalkulasi dari Fase Satu. Penyesuaian pipeline token count ke hardware thread count menghasilkan penjadwalan “laminar” dan menghilangkan sampah buffer, menghasilkan penskalaan 3,9 kali pada 4 core multiprosesor dan penskalaan 7,5-7,8 kali pada 8 core multiprosesor (Gambar 5).

Tabel 3: Speedup untuk optimisasi plot tepi (rata-rata tiga kali eksekusi)

Deskripsi Modelsec

(blok mesin)

xx0kst0

(bilah turbin)

xx0ust0

(housing)

xx0o

(rangka mobil)

xx0fst0

(propeller hub)

xx0jst0

(blok mesin 6 silinder)

Ukuran file/banyaknya free face 358,7 MB/ 98.814 513,3 MB/ 65.416 281,7 MB/ 90.460 438,8 MB/ 1.309.323 165,2 MB/ 83.935 1028,5 MB/ 461.808
Fringe – Eigen Vectors, Translational – percent speedup 28,092
Fringe – Stress, von Mises Avg Meth=Avg/derive, Extrap Meth=Avg – percent speedup 3,729 8,422 19,437 10,013 15,061
Fringe – Stress, Tresca Avg Meth=Avg/derive, Extrap Meth=Avg – percent speedup 8,968 10,733 20,03 10,73 18,988
Fringe – Stress, Octal Avg Meth=Avg/derive, Extrap Meth=Avg – % speedup 3,373 6,024 19,647 10,472 15,636
Fringe – Stress, Inv 1 Avg Meth=Avg/derive, Extrap Meth=Avg – percent speedup 2,926 6,143 19,671 10,867 15,463
Fringe – Stress, Max Shear Avg Meth=Avg/derive, Extrap Meth=Avg – percent speedup 8,199 10,628 19,902 11,007 19,585
Fringe – disp Trans, Mag –  percent speedup 10,334 26,203 27,543 29,824 43,807


Gambar 5:
Pipeline token count [1]

Kesimpulan

Penambahan threading pada SimXpert telah berhasil dilakukan, menghasilkan peningkatan performa yang signifikan dalam SimXpert dan waktu penyelesaian yang lebih cepat untuk pengguna, sehingga dapat meningkatkan produktivitas. SimXpert adalah aplikasi komersial pertama yang dirilis dengan Intel TBB. Intel TBB adalah peralatan yang ideal karena SimXpert adalah aplikasi multiplatform yang ditulis dalam C++ yang memiliki banyak fitur melebihi aplikasi komputasi performa tinggi. Selain itu, kode program SimXpert sesuai dengan pendekatan incremental threading yang dipilih oleh MSC.Software.

Pada Fase Satu, pengukuran untuk 7 model simulasi pada platform Intel Xeon 5100 series (4 thread multiprosesor) memperlihatkan penskalaan antara 3,8-3,9 kali untuk kalkulasi. Pada Fase Dua, optimisasi untuk plot tepi menghasilkan speedup antara 3%-44%. MSC.Software berencana meneruskan pendekatan incremental threading untuk tipe data plot yang tersisa, sambil meneliti Intel TBB untuk pengolahan dan I/O yang tumpang tindih.

Referensi

  • Carver, M. Lubin, B. Aona, Optimizations for MSC.Software SimXpert* Using Intel® Threading Building Blocks, The Parallel Universe, Issue 3, June 2010, hal. 24-30.
Artikel Berhubungan:

Sponsor Warstek.com:
Bagikan Artikel ini di:

Tinggalkan Balasan

twenty − thirteen =