Perspektif Sejarah
Sangat tidak mungkin mengatakan seperti apa paradigma baru di masa depan, misalnya perspektif sejarah yang baik yang saya sarankan untuk membaca Ken Kennedy's Rise and Fall of HPF . Kennedy memberikan laporan tentang dua pola yang muncul, MPI versus kompiler pintar, dan merinci bagaimana MPI memiliki jumlah pengguna awal yang tepat dan fleksibilitas untuk mendominasi. HPF akhirnya memperbaiki masalahnya tetapi sudah terlambat.
Dalam banyak hal, beberapa paradigma, seperti PGAS dan OpenMP, mengikuti tren HPF yang sama. Kode awal belum cukup fleksibel untuk digunakan dengan baik dan meninggalkan banyak kinerja di atas meja. Tetapi janji untuk tidak harus menulis setiap sedikitpun dari algoritma paralel adalah tujuan yang menarik. Jadi pengejaran model baru selalu dikejar.
Hapus Tren di Perangkat Keras
Sekarang keberhasilan MPI sering dikutip karena terkait erat dengan bagaimana memodelkan perangkat keras yang digunakannya. Secara kasar setiap node memiliki beberapa proses dan meneruskan pesan ke point-to-point lokal atau melalui operasi kolektif terkoordinasi dengan mudah dilakukan di ruang cluster. Karena itu, saya tidak percaya siapa pun yang memberikan paradigma yang tidak mengikuti tren perangkat keras baru, saya benar-benar yakin dengan pendapat ini dari karya Vivak Sarakar .
Sesuai dengan itu di sini adalah tiga tren yang jelas membuat kemajuan dalam arsitektur baru. Dan saya jelaskan, sekarang ada dua belas arsitektur berbeda yang dipasarkan di HPC. Ini naik dari kurang dari 5 tahun yang lalu hanya menampilkan x86, sehingga beberapa hari mendatang akan melihat banyak peluang untuk menggunakan perangkat keras dengan cara yang berbeda dan menarik
- Chip Tujuan Khusus: Pikirkan unit vektor besar seperti akselerator (lihat didukung oleh Bill Dally dari Nvidia)
- Chip Daya Rendah: Cluster berbasis ARM (untuk mengakomodasi anggaran daya)
- Tiling of Chips: think tiling of chips dengan spesifikasi berbeda (karya Avant Argwal )
Model saat ini
Model saat ini sebenarnya dalam 3 level. Meskipun ada banyak kode yang menggunakan dua level ini dengan baik, tidak banyak yang muncul menggunakan ketiganya. Saya percaya bahwa untuk pertama-tama mencapai exascale, seseorang perlu berinvestasi dalam menentukan apakah kode Anda dapat dijalankan pada ketiga level. Ini mungkin jalan paling aman untuk beralih dengan baik dengan tren saat ini.
Biarkan saya beralih pada model dan bagaimana mereka perlu berubah berdasarkan pada perkiraan perangkat keras baru.
Didistribusikan
Para pemain di tingkat terdistribusi sebagian besar jatuh ke bahasa MPI dan PGAS. MPI adalah pemenang yang jelas saat ini, tetapi bahasa PGAS seperti UPC dan Chapel sedang menuju kemajuan. Salah satu indikasi yang baik adalah Tantangan Benchmark HPC. Bahasa PGAS memberikan implementasi tolok ukur yang sangat elegan.
Poin paling menarik di sini adalah bahwa sementara model ini saat ini hanya berfungsi pada level node, itu akan menjadi model penting di dalam node untuk arsitektur Tiled. Salah satu indikasi adalah chip Intel SCC, yang secara fundamental bertindak seperti sistem terdistribusi. Tim SCC menciptakan implementasi MPI mereka sendiri dan banyak tim yang berhasil memindahkan perpustakaan komunitas ke arsitektur ini.
Tapi jujur saja, PGAS benar-benar punya cerita bagus untuk masuk ke ruang ini. Apakah Anda benar-benar ingin memprogram MPI internode dan kemudian harus melakukan trik intranode yang sama? Satu masalah besar dengan arsitektur ubin ini adalah bahwa mereka akan memiliki kecepatan clock yang berbeda pada chip dan perbedaan besar dalam bandwidth ke memori sehingga kode pemain harus mempertimbangkan ini.
Memori bersama on-node
Di sini kita melihat MPI sering "cukup baik", tetapi PThreads (dan perpustakaan yang berasal dari PThreads seperti Intel Parallel Building Blocks) dan OpenMP masih sering digunakan. Pandangan umum adalah bahwa akan ada waktu di mana ada cukup memori bersama thread yang model soket MPI akan rusak untuk RPC atau Anda membutuhkan proses yang lebih ringan berjalan pada inti. Anda sudah dapat melihat indikasi sistem IBM Bluegene mengalami masalah dengan MPI memori bersama.
Seperti komentar Matt, peningkatan kinerja terbesar untuk kode intensif komputasi adalah vektorisasi kode serial. Sementara banyak orang menganggap ini benar dalam akselerator, itu juga penting untuk mesin on-node juga. Saya percaya Westmere memiliki 4 FPU lebar, jadi kita hanya bisa mendapatkan seperempat dari flops tanpa vektorisasi.
Sementara saya tidak melihat OpenMP saat ini melangkah ke ruang ini dengan baik, ada tempat untuk chip bertenaga rendah atau ubin untuk menggunakan lebih banyak utas yang ringan. OpenMP memiliki kesulitan menggambarkan bagaimana aliran data bekerja dan karena lebih banyak utas digunakan, saya hanya melihat tren ini menjadi lebih berlebihan, lihat saja contoh-contoh apa yang harus dilakukan untuk mendapatkan prefetching yang tepat dengan OpenMP.
OpenMP dan PThread pada tingkat yang cukup dapat mengambil keuntungan dari vektorisasi yang diperlukan untuk mendapatkan persentase puncak yang baik, tetapi melakukan hal itu membutuhkan penguraian algoritma Anda sedemikian rupa sehingga vektorisasi itu alami.
Prosesor bersama
Akhirnya kemunculan co-prosesor (GPU, MIC, Cell acclerators) telah berlangsung. Menjadi jelas bahwa tidak ada jalan menuju exascale akan lengkap tanpa mereka. Di SC11, setiap kontestan hadiah Bell menggunakannya dengan sangat efektif untuk mencapai petaflops rendah. Sementara CUDA dan OpenCL telah mendominasi pasar saat ini, saya memiliki harapan untuk kompiler OpenACC dan PGAS memasuki ruang.
Sekarang untuk mencapai exascale, satu proposal adalah memasangkan chip bertenaga rendah ke banyak co-prosesor. Ini akan cukup mematikan lapisan tengah tumpukan saat ini dan menggunakan kode yang mengelola masalah keputusan pada chip utama dan mengalihkan pekerjaan ke co-prosesor. Ini berarti bahwa agar kode berfungsi cukup efektif seseorang harus memikirkan kembali algoritma dalam hal kernel (atau codelet), yaitu potongan paralel tingkat instruksi tanpa cabang. Sejauh yang saya tahu, solusi untuk evolusi ini cukup terbuka lebar.
Bagaimana ini memengaruhi pengembang aplikasi
Sekarang untuk menjawab pertanyaan Anda. Jika Anda ingin melindungi diri dari kerumitan mesin exascale yang akan datang, Anda harus melakukan beberapa hal:
- Kembangkan algoritme Anda agar sesuai dengan setidaknya tiga level hierarki paralel.
- Rancang algoritma Anda dalam hal kernel yang dapat dipindahkan di antara heirarki.
- Santai kebutuhan Anda untuk setiap proses berurutan, semua efek ini akan terjadi secara tidak sinkron karena eksekusi sinkron tidak mungkin.
Jika Anda ingin menjadi pemain hari ini, MPI + CUDA / OpenCL sudah cukup baik tetapi UPC sedang menuju ke sana sehingga bukan ide yang buruk untuk mengambil beberapa hari dan mempelajarinya. OpenMP membantu Anda memulai tetapi mengarah ke masalah begitu kode perlu di refactored. PThreads membutuhkan penulisan ulang kode Anda sepenuhnya sesuai gayanya. Yang menjadikan MPI + CUDA / OpenCL model terbaik saat ini.
Apa yang tidak dibahas di sini
Sementara semua pembicaraan tentang exascale ini bagus, sesuatu yang tidak benar-benar dibahas di sini adalah mendapatkan dan mematikan data dari mesin. Meskipun ada banyak kemajuan dalam sistem memori, kami tidak melihatnya di cluster komoditas (terlalu mahal). Sekarang komputasi intensif data menjadi fokus besar dari semua konferensi komputasi super, pasti akan ada pergerakan yang lebih besar ke ruang bandwidth memori yang tinggi.
Ini membawa ke tren lain yang mungkin terjadi (jika agen pendanaan yang tepat terlibat). Mesin akan menjadi semakin khusus untuk jenis komputasi yang dibutuhkan. Kita sudah melihat mesin "data-intensif" didanai oleh NSF, tetapi mesin ini berada di jalur yang berbeda dari 2019 Exascale Grand Challenge.
Ini menjadi lebih lama dari yang diharapkan, minta referensi di mana Anda membutuhkannya di komentar