Bahasa pemrograman untuk akselerator perangkat keras

Bahasa pemrograman untuk akselerator perangkat keras

Akselerator perangkat keras : Hukum Moore membutuhkan pelukan. Hari-hari memasukkan transistor pada chip komputer silikon kecil diberi nomor, dan rakit kehidupan mereka – akselerator perangkat keras – ada harganya.

Saat memprogram akselerator — proses di mana aplikasi menurunkan tugas tertentu ke perangkat keras sistem terutama untuk mempercepat tugas itu — Anda harus membangun dukungan perangkat lunak yang sama sekali baru. Akselerator perangkat keras dapat menjalankan tugas-tugas tertentu dengan urutan besarnya lebih cepat daripada CPU, tetapi mereka tidak dapat digunakan di luar kotak. Perangkat lunak perlu menggunakan instruksi akselerator secara efisien agar kompatibel dengan seluruh sistem aplikasi. Ini berarti banyak pekerjaan rekayasa yang kemudian harus dipertahankan untuk chip baru yang Anda kompilasi kodenya, dengan bahasa pemrograman apa pun.

Sekarang, para ilmuwan dari MIT Computer Science and Artificial Intelligence Laboratory (CSAIL) menciptakan bahasa pemrograman baru yang disebut “Exo” untuk menulis kode kinerja tinggi pada akselerator perangkat keras. Exo membantu insinyur kinerja tingkat rendah mengubah program yang sangat sederhana yang menentukan apa yang ingin mereka hitung, menjadi program yang sangat kompleks yang melakukan hal yang sama seperti spesifikasi, tetapi jauh lebih cepat dengan menggunakan chip akselerator khusus ini. Insinyur, misalnya, dapat menggunakan Exo untuk mengubah perkalian matriks sederhana menjadi program yang lebih kompleks, yang menjalankan orde besarnya lebih cepat dengan menggunakan akselerator khusus ini.

Tidak seperti bahasa pemrograman dan kompiler lainnya, Exo dibangun di sekitar konsep yang disebut “Exocompilation.” “Secara tradisional, banyak penelitian berfokus pada otomatisasi proses pengoptimalan untuk perangkat keras tertentu,” kata Yuka Ikarashi, seorang mahasiswa PhD di bidang teknik elektro dan ilmu komputer dan afiliasi CSAIL yang merupakan penulis utama makalah baru tentang Exo. “Ini bagus untuk sebagian besar programmer, tetapi untuk insinyur kinerja, kompiler menghalangi sesering itu membantu. Karena pengoptimalan kompiler bersifat otomatis, tidak ada cara yang baik untuk memperbaikinya ketika melakukan hal yang salah dan memberi Anda efisiensi 45 persen alih-alih 90 persen.”

Dengan Exocompilation, insinyur kinerja kembali ke kursi pengemudi. Tanggung jawab untuk memilih pengoptimalan mana yang akan diterapkan, kapan, dan dalam urutan apa dieksternalkan dari kompiler, kembali ke insinyur kinerja. Dengan cara ini, mereka tidak perlu membuang waktu melawan kompiler di satu sisi, atau melakukan semuanya secara manual di sisi lain. Pada saat yang sama, Exo bertanggung jawab untuk memastikan bahwa semua pengoptimalan ini benar. Akibatnya, insinyur kinerja dapat menghabiskan waktu mereka untuk meningkatkan kinerja, daripada men-debug kode yang kompleks dan dioptimalkan.

“Bahasa Exo adalah kompiler yang diparameterisasikan pada perangkat keras yang ditargetkan; kompiler yang sama dapat beradaptasi dengan banyak akselerator perangkat keras yang berbeda,” kata Adrian Sampson, asisten profesor di Departemen Ilmu Komputer di Cornell University. “ Daripada menulis sekumpulan kode C++ yang berantakan untuk dikompilasi untuk akselerator baru, Exo memberi Anda cara yang abstrak dan seragam untuk menuliskan ‘bentuk’ perangkat keras yang ingin Anda targetkan. Kemudian Anda dapat menggunakan kembali kompiler Exo yang ada untuk beradaptasi dengan deskripsi baru tersebut alih-alih menulis sesuatu yang sama sekali baru dari awal. Dampak potensial dari pekerjaan seperti ini sangat besar: Jika inovator perangkat keras dapat berhenti mengkhawatirkan biaya pengembangan kompiler baru untuk setiap ide perangkat keras baru, mereka dapat mencoba dan mengirimkan lebih banyak ide. Industri ini dapat mematahkan ketergantungannya pada perangkat keras lama yang berhasil hanya karena penguncian ekosistem dan terlepas dari inefisiensinya.”

Chip komputer berperforma tertinggi yang dibuat saat ini, seperti TPU Google, Neural Engine Apple, atau Tensor Cores NVIDIA, mendukung komputasi ilmiah dan aplikasi pembelajaran mesin dengan mempercepat sesuatu yang disebut “sub-program utama”, kernel, atau komputasi kinerja tinggi (HPC ) subrutin.

Selain jargon yang kikuk, programnya sangat penting. Misalnya, sesuatu yang disebut Subrutin Aljabar Linier Dasar (BLAS) adalah “perpustakaan” atau kumpulan subrutin semacam itu, yang didedikasikan untuk perhitungan aljabar linier, dan memungkinkan banyak tugas pembelajaran mesin seperti jaringan saraf, prakiraan cuaca, komputasi awan, dan penemuan obat. . (BLAS sangat penting sehingga memenangkan Penghargaan Turing Jack Dongarra pada tahun 2021.) Namun, chip baru ini — yang membutuhkan ratusan insinyur untuk mendesain — hanya sebaik yang diizinkan oleh perpustakaan perangkat lunak HPC ini.

Namun, saat ini, pengoptimalan kinerja semacam ini masih dilakukan dengan tangan untuk memastikan bahwa setiap siklus terakhir komputasi pada chip ini digunakan. Subrutin HPC secara teratur berjalan pada 90 persen-plus efisiensi teoritis puncak, dan insinyur perangkat keras berusaha keras untuk menambahkan tambahan lima atau 10 persen kecepatan ke puncak teoritis ini. Jadi, jika perangkat lunak tidak dioptimalkan secara agresif, semua kerja keras itu akan sia-sia — itulah yang harus dihindari oleh Exo.

Bagian penting lain dari Exocompilation adalah bahwa insinyur kinerja dapat menggambarkan chip baru yang ingin mereka optimalkan, tanpa harus memodifikasi compiler. Secara tradisional, definisi antarmuka perangkat keras dipertahankan oleh pengembang kompiler, tetapi dengan sebagian besar chip akselerator baru ini, antarmuka perangkat keras adalah milik. Perusahaan harus memelihara salinan (garpu) mereka sendiri dari keseluruhan kompiler tradisional, yang dimodifikasi untuk mendukung chip khusus mereka. Ini membutuhkan perekrutan tim pengembang kompiler selain insinyur kinerja.

“Di Exo, kami malah mengeksternalisasi definisi backend khusus perangkat keras dari exocompiler. Ini memberi kita pemisahan yang lebih baik antara Exo — yang merupakan proyek sumber terbuka — dan kode khusus perangkat keras — yang seringkali merupakan hak milik. Kami telah menunjukkan bahwa kami dapat menggunakan Exo untuk menulis kode dengan cepat yang berkinerja sebaik Perpustakaan Kernel Matematika yang dioptimalkan dengan tangan Intel. Kami secara aktif bekerja dengan para insinyur dan peneliti di beberapa perusahaan,” kata Gilbert Bernstein, seorang postdoc di University of California di Berkeley.

Masa depan Exo memerlukan penjelajahan bahasa meta penjadwalan yang lebih produktif, dan memperluas semantiknya untuk mendukung model pemrograman paralel untuk menerapkannya ke lebih banyak akselerator, termasuk GPU.

Ikarashi dan Bernstein menulis makalah bersama Alex Reinking dan Hasan Genc, ​​keduanya mahasiswa PhD di UC Berkeley, dan Asisten Profesor MIT Jonathan Ragan-Kelley.

Pekerjaan ini sebagian didukung oleh pusat Applications Driving Architectures, salah satu dari enam pusat JUMP, program Semiconductor Research Corporation yang disponsori bersama oleh Defense Advanced Research Projects Agency. Ikarashi didukung oleh Funai Overseas Scholarship, Masason Foundation, dan Great Educators Fellowship. Tim mempresentasikan karya tersebut di Konferensi ACM SIGPLAN tentang Desain dan Implementasi Bahasa Pemrograman 2022.

Perangkat Keras