Berasal dari benchmark AWS Graviton3 saya baru-baru ini dan melihat Graviton3 terhadap Intel Xeon dan AMD EPYC, sejumlah pembaca Phoronix menyatakan minatnya untuk melihat beberapa benchmark tuning compiler untuk Graviton3 di sekitar inti Arm Neoverse-V1 dengan dukungan SVE. Berikut adalah beberapa tolok ukur bagi mereka yang tertarik dengan dampak penyetelan kompiler untuk prosesor cloud Arm performa tinggi baru ini.
Pengujian dalam artikel ini dilakukan dengan instans c7g.8xlarge Amazon EC2 yang menampilkan 32 core dari platform Graviton3. Ubuntu 22.04 LTS berjalan pada instans EC2 ini dengan kernel Linux 5.15 stoknya sambil memilih untuk menggunakan gcc-snapshot di Ubuntu 22.04 untuk menyediakan tumpukan kompiler berbasis GCC12 yang lebih baru.
Dari instans Graviton3 yang sama ini, sebuah nomor benchmark C/C++ open-source dilakukan saat pengujian dengan CFLAGS/CXXFLAGS berikut yang sedang diuji:
-O3-march=armv8.4-a untuk ARMv8.4 sebagai basis Neoverse-V1.
-O3 0march=armv8.4-a+sve untuk menentukan dukungan Arm SVE (Scalable Vector Extension) yang ditemukan dengan Neoverse-V1.
-O3-march-armv8.4-a+sve-mcpu=neoverse-v1 untuk juga menikmati penyetelan CPU khusus untuk Neoverse-V1.
Ditambahkan di GCC 11 adalah dukungan Arm Scalable Vector Extension (SVE) termasuk kemampuan untuk vektorisasi otomatis untuk banyak fitur SVE. Mari kita lihat untuk melihat perbedaan apa yang dimiliki flag compiler ini pada kinerja yang dihasilkan dari binari yang dihasilkan yang berjalan pada Graviton3 di cloud Amazon.
Pengujian compiler pada Graviton3 dibatasi hanya pada tiga konfigurasi tersebut untuk menghemat biaya pengoperasian di cloud.
Opsi kompiler SVE memang memberikan beberapa bantuan untuk pengujian enkoder gambar JPEG XL untuk menawarkan kinerja yang lebih baik dibandingkan penargetan Armv8.4 dasar tanpa SVE. OpenJPEG juga diuntungkan sampai batas tertentu dari SVE.
Dalam beban kerja lain, keuntungan SVE bervariasi dari sedikit hingga sedang.
Dukungan vektorisasi otomatis SVE GCC 12 memang membantu beberapa audio menyandikan tolok ukur.
Tentu saja, ini sangat bergantung pada perangkat lunak yang diuji seberapa besar pengaruhnya jika ada dari Arm SVE dan penyetelan Neoverse-V1 lainnya.
Dengan Zstd misalnya hanya penyetelan yang membantu kinerja dekompresi untuk mode lama sementara pada konfigurasi kompresi Zstd lainnya yang diuji, tidak ada perbedaan yang terukur.
Dalam kasus beberapa tolok ukur seperti Crypto++, penyetelan-mcpu=neoverse-v1 sebenarnya berdampak negatif pada kinerja.
Vektorisasi otomatis dan/atau SVE GCC berdampak negatif pada kinerja perpustakaan pemrosesan sinyal digital sumber terbuka Liquid-DSP.
Atau di tolok ukur kripto Botan, penyetelan Neoverse-V1 sangat menguntungkan untuk beberapa algoritme kripto.
Kinerja perpustakaan jaringan saraf TNN Tencent bervariasi dengan SVE.
Singkat cerita, seperti yang sering terjadi, sebagian besar bermuara pada basis kode tertentu dan beban kerja yang Anda terlibat secara aktif untuk mengetahui apakah penyetelan kompiler tambahan bermanfaat. Dalam beberapa beban kerja GCC 12 seperti yang diuji memang menunjukkan beberapa manfaat dengan dukungan vektorisasi otomatis SVE sementara dalam kasus lain tidak begitu banyak dan dalam beberapa kasus memang menurunkan kinerja. Akan menarik untuk melihat dampak penggunaan intrinsik SVE yang disetel secara manual oleh perangkat lunak sumber terbuka utama karena semakin banyak prosesor Arm yang hadir dengan dukungan SVE/SVE2 serta bagaimana kemajuan kompiler open-source terus berkembang.
Mereka yang ingin melihat semua benchmark perbandingan flag compiler yang diuji untuk instance Graviton3 dapat melihat halaman hasil ini.