12 poin oleh GN⁺ 2024-11-06 | 6 komentar | Bagikan ke WhatsApp
  • Bahasa pemrograman tingkat tinggi modern dan compiler canggih modern sangat menyederhanakan pengembangan perangkat lunak serta menurunkan biaya, tetapi karena inefisiensi API, keduanya cenderung menyembunyikan kemampuan performa perangkat keras modern
  • Menurut para pengembang FFmpeg, penggunaan kode assembly dapat meningkatkan performa dari 3 kali hingga 94 kali, tergantung pada bebannya
  • Untuk mempercepat fungsi tertentu di dalam FFmpeg, mereka membuat jalur kode yang dioptimalkan menggunakan set instruksi AVX-512, dan mampu mencapai performa yang jauh lebih cepat dibanding implementasi standar
  • AVX-512 menggunakan register 512-bit sehingga dapat memproses 16 single-precision FLOP atau 8 double-precision FLOP dalam satu operasi, memungkinkan pemrosesan data dalam jumlah besar secara paralel
  • Hasil benchmarking menunjukkan bahwa jalur kode AVX-512 baru yang ditulis tangan jauh lebih cepat dibanding kode C acuan maupun implementasi lain yang memakai set instruksi SIMD yang lebih rendah seperti AVX2 dan SSE3
  • Pengembangan ini sangat berguna khususnya bagi pengguna yang menjalankan perangkat keras dengan dukungan AVX-512, karena dapat memproses konten media dengan jauh lebih efisien
  • Namun, Intel menonaktifkan AVX-512 pada prosesor Core generasi ke-12, ke-13, dan ke-14, sehingga pemilik CPU ini tidak dapat menggunakannya
  • Sebaliknya, CPU AMD Ryzen 9000 series memiliki AVX-512 FPU yang aktif sepenuhnya, sehingga pemilik prosesor ini dapat memanfaatkan hasil kerja FFmpeg tersebut
  • Sayangnya, karena kompleksitas dan sifat khusus AVX-512, optimasi seperti ini umumnya terbatas pada aplikasi yang sangat mementingkan performa dan memerlukan keahlian dalam pemrograman tingkat rendah serta mikroarsitektur prosesor
    ( Konten ini diambil dari Tom's Hardware, FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code )

6 komentar

 
gurugio 2024-11-08

Saya pernah sempat mengerjakan hal terkait sebelumnya, jadi menurut saya angka 94 itu pada dasarnya clickbait.
Seperti yang disebutkan di komentar, perbedaan performa yang besar muncul dari perbedaan antara kode skalar dan vektor.
Namun, sebagian besar codec komersial melakukan optimisasi dengan pemrograman assembly.
Pernyataan bahwa "sebagian besar kode C dikompilasi menjadi kode assembly yang optimal" memang benar, tetapi untuk mengembangkan produk komersial Anda harus melampaui tingkat "sebagian besar" itu. Terutama di ranah embedded, hal ini lebih penting.

 
GN⁺ 2024-11-06
Komentar Hacker News
  • Klaim bahwa kinerja meningkat 94x pada filter tertentu di FFmpeg agak menyesatkan. Sebagian besar pengguna sudah memakai AVX/SSE, jadi optimisasi kode C tidak terlalu diperlukan
    • Pengguna CPU utama FFmpeg adalah untuk encoding dan decoding, dan peningkatan kali ini tidak memengaruhi hal tersebut
  • Ini bukan perbandingan antara kode assembly yang ditulis tangan dan yang tidak, melainkan perbandingan antara kode skalar dan kode vektor
    • Jika menulis kode C dengan intrinsic AVX, peningkatan kecepatan serupa bisa didapat bahkan tanpa kode assembly
  • Dalam kasus tertentu, kode assembly yang ditulis tangan bisa menguntungkan
    • Decoder video memiliki loop yang sangat ketat, sehingga kode assembly dibutuhkan untuk menjaga konsistensi performa
  • Tim FFmpeg melarang penggunaan intrinsic dan mengharuskan semua kode spesifik platform ditulis dalam assembly
    • Kode assembly selalu bisa lebih cepat jika diberi upaya yang cukup, tetapi intrinsic dapat menghasilkan performa yang sangat mendekati dengan usaha yang jauh lebih sedikit
  • Peningkatan 94x adalah optimisasi dav1d, dan bisa digunakan bukan hanya di FFmpeg tetapi juga di program lain
    • Ada permintaan untuk optimisasi RISC-V (64-bit), dan ini peluang bagus bagi orang yang tertarik
  • Mike Pall dari LuaJIT pernah menjelaskan manfaat menulis kode assembly
  • Dalam microbenchmark, satu fungsi tunggal menjadi 94x lebih cepat dibanding kode C
  • Intel menonaktifkan AVX-512 pada prosesor Core generasi 12, 13, dan 14
    • Belum ditemukan alasan yang jelas untuk hal itu
  • Sebelum menyelesaikan masalah performa, sering kali tidak cukup banyak upaya dilakukan untuk mengidentifikasi bottleneck
    • Sebagian besar kode C dikompilasi menjadi kode assembly yang optimal
  • Penyebab peningkatan performa bukanlah kode assembly yang ditulis tangan, melainkan penggunaan instruksi SIMD AVX-512
    • Ingin melihat perbandingannya dengan vektorisasi AVX-512 milik gcc
 
maclier 2024-11-06

Kerentanan baru Intel Downfall AVX2/AVX-512 dan dampak performa besar yang ditimbulkannya

https://tuxcare.com/ko/blog/…

 
cosine20 2024-11-08

Ah, jadi karena inilah Intel menarik AVX-512.

 
shlee1503 2024-11-10

Seingat saya, alasannya bukan itu; karena E-core tidak mendukung AVX-512, dukungan tersebut diblokir lewat software.
P-core sebelumnya secara tidak resmi memang mendukung AVX-512.

 
cosine20 2024-11-11

Begitu ya. Terima kasih sudah memberi tahu saya :)