Berasal dari melihat biner enkode video x264 yang dihasilkan dan beberapa ketidakefisienan kinerja, para insinyur SUSE telah mengembangkan dukungan vektorisasi AVX-512 yang sepenuhnya tertutup untuk kode pengembangan GCC 14.
Kembali pada bulan Januari SUSE compiler engineer Jan Hubicka membuka bug ini di sekitar tolok ukur x264 dengan loop rata-rata tidak dioptimalkan dengan baik untuk AVX-512.
“tolok ukur x264 memiliki loop rata-rata dua larik karakter tak bertanda tangan yang dijalankan dengan jumlah perjalanan yang relatif rendah yang tidak sesuai dengan kode vektor kami. Untuk AVX512 sebagian besar waktu dihabiskan dalam varian tak bervektor sejak jumlah rata-rata iterasi terlalu kecil untuk mencapai kode vektor.
…
Untuk ukuran 12-16 vektorisasi 128bit menang, 20-28 berperilaku lucu. Namun vektorisasi avx512 adalah kerugian besar untuk semua ukuran hingga 31 bytes. aocc tampaknya menang untuk 16 byte.
…
Satu masalah adalah bahwa kami paling banyak melakukan satu vektorisasi loop epilog, jadi dengan AVX512 kami membuat vektor epilog dengan AVX2 tetapi epilognya tetap tidak divektor. Dengan AVX512 kami Saya ingin menggunakan epilog yang sepenuhnya disamarkan menggunakan AVX512 sebagai gantinya.Saya mulai mengerjakan dukungan vektorisasi yang disamarkan sepenuhnya untuk AVX512 tetapi terganggu.”
Maju cepat hampir enam bulan, kompiler SUSE insinyur Richard Biener telah mendaratkan implementasi awal vektorisasi AVX-512 yang sepenuhnya disamarkan dalam basis kode GNU Compiler Collection untuk membantu kasus uji x264 dan kasus vektor lain yang kurang lengkap.
“Ini mengimplementasikan vektorisasi sepenuhnya bertopeng atau epilog bertopeng untuk topeng gaya avx512 yang menonjol dengan merepresentasikan setiap jalur dengan satu bit dan dengan menggunakan mode bilangan bulat untuk topeng (keduanya sangat mirip dengan gcn).
avx512 juga istimewa karena tidak memiliki instruksi apa pun untuk menghitung topeng dari skalar iv seperti yang dimiliki sve dengan while_ult. Sebagai gantinya, topeng dihasilkan oleh perbandingan vektor dan kontrol loop mempertahankan skalar iv (terutama untuk menghindari ketergantungan pada pembuatan topeng, tersedia instruksi pengujian topeng yang sesuai).
seperti pembuatan kode rvv lebih suka pengurangan iv meskipun ivopts mengacaukan segalanya dalam beberapa kasus menghapus iv itu untuk menghilangkannya dengan peningkatan yang digunakan untuk pembuatan alamat.
salah satu kasus uji yang memotivasi adalah dari pr108410 yang pada gilirannya diekstraksi dari x264 di mana vektorisasi ukuran besar menunjukkan masalah dengan loop perjalanan kecil. Waktu eksekusi di sana meningkat dibandingkan dengan avx512 klasik dengan epilog avx2 untuk kasus kurang dari 32 iterasi.”
Dukungan vektorisasi AVX-512 yang sepenuhnya tertutup mendarat pagi ini di GCC 14 Git melalui komit ini.