Spekulasi untuk Simulasi. Inovasi dalam Verifikasi

Spekulasi untuk Simulasi. Inovasi dalam Verifikasi

Node Sumber: 2547459

Ini adalah ide yang menarik, menggunakan paralelisme spekulatif yang didukung perangkat keras untuk mempercepat simulasi, dengan perubahan yang membutuhkan perangkat keras khusus. Paul Cunningham (Senior VP/GM, Verification at Cadence), Raúl Camposano (Silicon Catalyst, entrepreneur, mantan Synopsys CTO dan sekarang Silvaco CTO) dan saya melanjutkan rangkaian ide penelitian kami. Seperti biasa, umpan balik diterima.

Spekulasi untuk Simulasi

Inovasi

Pilihan bulan ini adalah Chronos: Paralelisme Spekulatif Efisien untuk Akselerator. Para penulis mempresentasikan makalah tersebut pada Konferensi 2020 tentang Dukungan Arsitektur untuk Bahasa Pemrograman dan Sistem Operasi dan berasal dari MIT.

Memanfaatkan paralelisme menggunakan prosesor multicore adalah salah satu opsi untuk aplikasi di mana paralelisme terbukti dengan sendirinya. Algoritme lain mungkin tidak mudah dipartisi tetapi mungkin mendapat manfaat dari eksekusi spekulatif yang mengeksploitasi paralelisme intrinsik. Biasanya, eksekusi spekulatif bergantung pada koherensi cache, overhead yang tinggi khususnya untuk simulasi. Metode ini mengabaikan kebutuhan akan koherensi, secara fisik melokalkan eksekusi tugas untuk menghitung petak dengan objek baca-tulis target, memastikan bahwa deteksi konflik dapat dideteksi secara lokal, tanpa memerlukan manajemen koherensi global. Tugas dapat dijalankan secara spekulatif secara paralel; setiap konflik yang terdeteksi dapat dibuka gulungannya dari tugas melalui tugas turunannya kemudian dijalankan kembali tanpa perlu menghentikan utas lainnya.

Satu hal lagi yang perlu diperhatikan di sini. Metode ini mendukung simulasi berbasis penundaan, tidak seperti kebanyakan teknik akselerasi perangkat keras.

pandangan Paulus

Wow, kertas beroktan tinggi yang luar biasa dari MIT! Ketika ditanya tentang komputasi paralel, saya langsung berpikir tentang utas, mutex, dan koherensi memori. Ini tentu saja bagaimana CPU multi-core modern dirancang. Tapi itu bukan satu-satunya cara untuk mendukung paralelisasi di perangkat keras.

Makalah ini mengusulkan arsitektur alternatif untuk paralelisasi yang disebut Chronos yang didasarkan pada antrian tugas yang terurut. Saat runtime, tugas dijalankan dalam urutan stempel waktu dan setiap tugas dapat membuat subtugas baru yang ditambahkan secara dinamis ke antrean. Eksekusi dimulai dengan memasukkan beberapa tugas awal ke dalam antrian dan berakhir ketika tidak ada lagi tugas dalam antrian.

Tugas dalam antrean dialihkan ke beberapa elemen pemrosesan (PE) secara paralel – yang berarti Chronos secara spekulatif menjalankan tugas di masa mendatang sebelum tugas saat ini selesai. Jika tugas saat ini membatalkan tugas masa depan yang dieksekusi secara spekulatif, maka tindakan tugas masa depan tersebut "dibatalkan" dan akan diantrekan kembali. Menerapkan konsep ini dengan benar di perangkat keras tidaklah mudah, tetapi bagi pengguna luar itu indah: Anda cukup mengkodekan algoritme Anda seolah-olah antrian tugas dijalankan secara berurutan pada satu PE. Tidak perlu mengkodekan mutex apa pun atau khawatir tentang kebuntuan.

Penulis mengimplementasikan Chronos di SystemVerilog dan mengkompilasinya ke FPGA. Sebagian besar makalah ini dikhususkan untuk menjelaskan bagaimana mereka menerapkan antrean tugas dan setiap pembukaan perangkat keras yang diperlukan untuk efisiensi maksimum. Chronos mengacu pada empat algoritme yang cocok untuk arsitektur berbasis antrian tugas. Setiap algoritme diimplementasikan dengan dua cara: pertama menggunakan PE khusus algoritme khusus, dan kedua menggunakan CPU RISC-V tertanam open source 32-bit yang tersedia sebagai PE. Performa Chronos kemudian dibandingkan dengan implementasi perangkat lunak multi-utas dari algoritme yang berjalan di server Intel Xeon dengan label harga yang mirip dengan FPGA yang digunakan untuk Chronos. Hasilnya mengesankan – Skala Chronos 3x hingga 15x lebih baik daripada menggunakan server Xeon. Namun, membandingkan Tabel 3 dengan Gambar 14 membuat saya sedikit khawatir bahwa sebagian besar keuntungan ini berasal dari PE khusus algoritme daripada arsitektur Chronos itu sendiri.

Mengingat ini adalah blog verifikasi, saya secara alami memperbesar benchmark simulasi tingkat gerbang. Industri EDA telah banyak berinvestasi untuk mencoba dan memparalelkan simulasi logika dan terbukti sulit untuk melihat keuntungan besar di luar beberapa kasus penggunaan tertentu. Hal ini terutama disebabkan oleh kinerja sebagian besar simulasi dunia nyata yang didominasi oleh instruksi muat/penyimpanan yang hilang di cache L3 dan keluar ke DRAM. Hanya ada satu testcase yang dijadikan tolok ukur dalam makalah ini dan ini adalah carry save adder 32-bit kecil. Jika Anda membaca blog ini dan tertarik untuk melakukan pembandingan yang lebih menyeluruh, beri tahu saya – jika Chronos benar-benar dapat menskala dengan baik pada simulasi dunia nyata, Chronos akan memiliki nilai komersial yang sangat besar!

Pandangan Raul

Kontribusi utama dari makalah ini adalah Model eksekusi Tugas Berurutan Terletak Secara Spasial (SLOT). yang efisien untuk akselerator perangkat keras yang mengeksploitasi paralelisme dan spekulasi, dan untuk aplikasi yang menghasilkan tugas secara dinamis saat runtime. Dukungan paralelisme dinamis tidak dapat dihindari untuk simulasi dan sinkronisasi spekulatif adalah opsi yang menarik, tetapi overhead koherensi terlalu tinggi.

SLOT menghindari kebutuhan akan koherensi dengan membatasi setiap tugas untuk beroperasi (menulis) pada satu objek dan mendukung tugas yang diurutkan untuk mengaktifkan atomisitas multi-objek. Aplikasi SLOT dipesan, tugas yang dibuat secara dinamis ditandai dengan stempel waktu dan id objek. Stempel waktu menentukan batasan pesanan; id objek menentukan ketergantungan data, yaitu, tugas bergantung pada data jika dan hanya jika mereka memiliki id objek yang sama. (jika ada ketergantungan baca, tugas dapat dijalankan secara spekulatif). Deteksi konflik menjadi lokal (tanpa struktur pelacakan yang kompleks) dengan memetakan id objek ke inti atau petak dan mengirimkan setiap tugas ke tempat id objeknya dipetakan.

Grafik Chronos sistem diimplementasikan dalam kerangka kerja AWS FPGA sebagai sistem dengan 16 petak, masing-masing dengan 4 elemen pemrosesan khusus aplikasi (PE), berjalan pada 125MHz. Sistem ini dibandingkan dengan baseline yang terdiri dari Intel Xeon E20-40v2.4 5-core/2676-thread 3 GHz, dipilih secara khusus karena harganya sebanding dengan FPGA (sekitar $2/jam). Menjalankan satu tugas pada satu PE, Chronos 2.45x lebih cepat dari baseline. Saat jumlah tugas bersamaan meningkat, penerapan Chronos menskala ke percepatan relatif mandiri sebesar 44.9x pada 8 petak, sesuai dengan percepatan 15.3x selama penerapan CPU. Mereka juga membandingkan implementasi berdasarkan RISC-V tujuan umum daripada PE aplikasi khusus; PE 5x lebih cepat dari RISC-V.

Saya menemukan makalah itu mengesankan karena mencakup semuanya mulai dari konsep hingga definisi model eksekusi SLOT hingga penerapan perangkat keras dan perbandingan mendetail dengan CPU Xeon tradisional untuk 4 aplikasi. Upayanya besar, Chronos lebih dari 20,000 baris SystemVerilog. Hasilnya adalah peningkatan rata-rata 5.4x (dari 4 aplikasi) dibandingkan versi paralel perangkat lunak, karena lebih banyak paralelisme dan lebih banyak penggunaan eksekusi spekulatif. Makalah ini juga layak dibaca untuk penerapan tugas-tugas non-simulasi; kertas mencakup tiga contoh.

Bagikan postingan ini melalui:

Stempel Waktu:

Lebih dari Semiwiki