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
- 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 |
- 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.
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.