Dalam dunia pengkomputeran berprestasi tinggi, arahan SIMD (Single Instruction, Multiple Data) lama menjanjikan peningkatan kelajuan yang dramatik, tetapi untuk mencapainya selalunya memerlukan pengetahuan khusus dan pengoptimuman manual. Perbincangan terkini dalam kalangan pembangun mendedahkan bahawa dengan kematangan AVX512, janji-janji ini akhirnya ditepati dalam aplikasi praktikal, memberikan peningkatan prestasi yang suatu ketika dahulu hanyalah teori.
Kejayaan Prestasi Dunia Sebenar
Pembangun melaporkan peningkatan kelajuan yang luar biasa apabila menggunakan AVX512 untuk masalah pengaturcaraan biasa. Satu contoh yang sangat menarik melibatkan operasi jadual carian bait, di mana seorang pembangun mencapai peningkatan prestasi 32x berbanding kod skalar. Transformasi daripada memproses 2 elemen setiap kitaran kepada 64 elemen setiap kitaran mewakili jenis kecekapan pengiraan yang diimpikan oleh perintis SIMD beberapa dekad lalu. Ini bukan sekadar keputusan makmal—ia sedang berlaku dalam kod pengeluaran hari ini, dengan seorang pembangun menyatakan pengoptimuman tunggal ini menghasilkan peningkatan kelajuan global 4x untuk kernel secara keseluruhan.
Untuk setiap 64 bait, versi AVX512 mempunyai satu muat & simpan dan melakukan dua permutasi, yang Zen5 boleh lakukan pada 2 setiap kitaran. Jadi 64 elemen setiap kitaran. Kelajuan teori kami di sini adalah ~32x berbanding kod skalar!
Kunci kepada peningkatan dramatik ini terletak pada lebar 512-bit daftar AVX512 dan set arahan yang canggih, yang merangkumi operasi berkuasa seperti susunan semula bait lebar berganda yang boleh memproses 128 bait data jadual carian secara serentak. Ini mewakili evolusi ketara daripada pelaksanaan SIMD sebelumnya seperti SSE dengan daftar 128-bitnya.
Peningkatan Prestasi Yang Dilaporkan
- Operasi jadual carian byte: peningkatan kelajuan 32x dengan AVX512
- Pemprosesan buffer WebAssembly: peningkatan 20x dengan SIMD 128-bit
- Garis dasar kod skalar: 2 elemen setiap kitaran pada Zen5
- Dioptimumkan AVX512: 64 elemen setiap kitaran pada Zen5
Cabaran Pengaturcaraan Masih Berterusan
Walaupun terdapat peningkatan yang mengagumkan ini, penerimaan meluas pengoptimuman SIMD menghadapi halangan yang ketara. Seperti yang diperhatikan oleh seorang pengulas, kod biasa tidak menggunakannya. Hampir selalu seseorang perlu menulis kod SIMD secara manual untuk mencapai prestasi yang baik. Walaupun pengkompil moden kadangkala boleh mengvektorkan kod secara automatik, keupayaan ini masih terhadap dan tidak boleh dipercayai untuk operasi kompleks. Pembangun masih sebahagian besarnya perlu melaksanakan arahan SIMD secara manual, biasanya menumpukan hanya pada gelung dalaman kritikal di mana usaha itu berbaloi dengan pulangan prestasi.
Landskap pengaturcaraan secara beransur-ansur bertambah baik, bagaimanapun. Bahasa seperti C# kini menawarkan kelas Vector yang memudahkan penggunaan SIMD, dan Go sedang mempertimbangkan untuk menambah intrinsik SIMD. WebAssembly SIMD, walaupun kini terhadap kepada operasi 128-bit, sudah menunjukkan peningkatan 20x dalam tugas pemprosesan penimbal. Perkembangan ini mencadangkan masa depan di mana pengoptimuman SIMD menjadi lebih mudah diakses oleh pembangun arus perdana dan bukannya kekal sebagai domain pakar.
Evolusi Lebar Daftar SIMD
- MMX: 64 bit
- SSE: 128 bit
- AVX: 256 bit
- AVX512: 512 bit
Evolusi Perkakasan dan Arah Masa Depan
Perbincangan mengenai lebar daftar SIMD yang optimum mendedahkan perdebatan berterusan tentang seni bina perkakasan. Walaupun sesetengah pembangun berpendapat bahawa daftar 128-bit adalah kuno dan tidak mencukupi untuk beban kerja moden, yang lain menyatakan bahawa 512-bit mewakili titik manis memandangkan kekangan lebar jalur memori semasa. Melihat ke hadapan, sesetengah pembangun meminta operasi yang lebih lebar 1024 atau 2048-bit, walaupun ini memerlukan perubahan asas kepada saiz baris cache dan seni bina memori.
Hubungan antara CPU SIMD dan pengkomputeran GPU juga menonjol dalam perbincangan. Seperti yang dijelaskan oleh seorang pembangun, GPU adalah peranti SIMD literal tetapi menggunakan model pengaturcaraan yang berbeza dipanggil SIMT (Single Instruction, Multiple Threads) yang menjadikan keselarian lebih telus kepada pengaturcara. Perbezaan ini menyerlahkan cabaran berterusan untuk menjadikan pengiraan selari boleh diakses sambil memaksimumkan keupayaan perkakasan.
Pengalaman komuniti mencadangkan bahawa aplikasi SIMD yang paling berjaya berlaku di mana terdapat saluran penyebaran yang jelas untuk peningkatan prestasi, seperti dalam kriptografi, pemprosesan video, dan semakin meningkat dalam operasi rentetan dan pemprosesan data. Apabila sokongan AVX512 menjadi lebih meluas—ketika ini sekitar 20% dalam tinjauan perkakasan Steam menurut seorang pengulas—pengoptimuman ini akan memberi manfaat kepada lebih banyak pengguna secara telus, akhirnya menepati peningkatan prestasi yang lancar yang dibayangkan oleh Intel beberapa dekad lalu ketika pertama kali memperkenalkan MMX.
Perjalanan SIMD daripada set arahan khusus kepada alat prestasi praktikal menunjukkan bagaimana keupayaan perkakasan akhirnya diterjemahkan kepada manfaat dunia sebenar, walaupun laluannya sering lebih panjang daripada yang dijangkakan. Dengan AVX512 kini menunjukkan peningkatan kelajuan dramatik dalam kod pengeluaran dan menjadi lebih meluas, kita mungkin memasuki era di mana pengoptimuman SIMD beralih daripada teknik niche kepada amalan arus perdana.
Rujukan: Why We Need SIMD (The Real Reason)
