12 puan yazan GN⁺ 2024-11-06 | 6 yorum | WhatsApp'ta paylaş
  • Modern yüksek seviyeli programlama dilleri ve gelişmiş derleyiciler, yazılım geliştirmeyi büyük ölçüde basitleştirip maliyeti düşürse de, API verimsizlikleri nedeniyle modern donanımın performans yeteneklerini gizleme eğiliminde
  • FFmpeg geliştiricilerine göre, assembly kodu kullanımı iş yüküne bağlı olarak performansı 3 kat ile 94 kat arasında artırabiliyor
  • FFmpeg içindeki belirli işlevleri hızlandırmak için AVX-512 komut setini kullanan optimize edilmiş kod yolları oluşturuldu ve standart uygulamaya kıyasla çok daha yüksek performans elde edildi
  • AVX-512, 512 bitlik register'lar kullanarak tek işlemde 16 tek duyarlıklı FLOP veya 8 çift duyarlıklı FLOP işleyebildiği için büyük miktarda veriyi paralel olarak işleyebiliyor
  • Benchmark sonuçlarına göre yeni elle yazılmış AVX-512 kod yolu, referans C kodu ile AVX2 ve SSE3 gibi daha düşük SIMD komut setlerini kullanan diğer uygulamalardan belirgin biçimde daha hızlı
  • Bu geliştirme, özellikle AVX-512 destekli donanım kullanan kullanıcılar için faydalı ve medya içeriklerini çok daha verimli işlemeyi mümkün kılıyor
  • Ancak Intel, 12., 13. ve 14. nesil Core işlemcilerde AVX-512'yi devre dışı bıraktığı için bu CPU'ların sahipleri bu özelliği kullanamıyor
  • Buna karşılık AMD'nin Ryzen 9000 serisi CPU'ları tamamen etkin AVX-512 FPU ile geliyor; bu sayede bu işlemcilerin sahipleri FFmpeg'in bu kazanımlarından yararlanabiliyor
  • Ne yazık ki AVX-512'nin karmaşıklığı ve uzmanlık gerektiren yapısı nedeniyle bu tür optimizasyonlar genellikle performansın kritik olduğu uygulamalarla sınırlı kalıyor ve düşük seviyeli programlama ile işlemci mikro mimarisi konusunda uzmanlık gerektiriyor
    ( Bu içerik, Tom's Hardware'deki FFmpeg devs boast of up to 94x performance boost after implementing handwritten AVX-512 assembly code yazısından alınmıştır )

6 yorum

 
gurugio 2024-11-08

Eskiden bununla ilgili kısa bir çalışma yapmış biri olarak söyleyebilirim ki, öncelikle 94 sayısı clickbait.
Yorumlarda da belirtildiği gibi, performans farkının büyük görünmesinin nedeni skaler/vektör kod farkı.
Ama ticari codec'lerin çoğu optimizasyonu assembly yazarak yapar.
"C kodlarının çoğu en iyi assembly koduna derlenir" ifadesi doğru sayılır, ancak ticari ürün geliştirmek için o "çoğu" seviyesinin üstüne çıkmak gerekir. Özellikle embedded tarafında bu daha da önemlidir.

 
GN⁺ 2024-11-06
Hacker News yorumları
  • FFmpeg'in belirli bir filtresinde performansın 94 kat arttığı iddiası yanıltıcı. Kullanıcıların çoğu zaten AVX/SSE kullanıyordu, bu yüzden C kodu optimizasyonuna ihtiyaç yoktu
    • FFmpeg'te CPU'yu asıl kullanan işler kodlama ve kod çözmedir; bu iyileştirme bunları etkilemiyor
  • Bu, elle yazılmış assembly kodu ile yazılmamış kodun karşılaştırması değil; skaler kod ile vektör kodun karşılaştırması
    • AVX intrinsics kullanarak C kodu yazılırsa, assembly kodu olmadan da benzer hız artışları elde edilebilir
  • Bazı durumlarda elle yazılmış assembly kodu avantajlı olabilir
    • Video decoder'ları çok sıkı döngüler içerir; performans tutarlılığını korumak için assembly kodu gerekebilir
  • FFmpeg ekibi intrinsics kullanımını yasaklıyor ve platforma özel tüm kodların assembly ile yazılmasını istiyor
    • Yeterli emek verildiğinde assembly kodu her zaman daha hızlıdır, ancak intrinsics ile çok daha az çabayla buna çok yakın performans alınabilir
  • 94 katlık artış, FFmpeg'e değil dav1d optimizasyonuna ait; FFmpeg dışında başka programlarda da kullanılabilir
    • RISC-V (64 bit) optimizasyonu için bir talep var; ilgilenenler için iyi bir fırsat
  • LuaJIT'ten Mike Pall daha önce assembly kodu yazmanın faydalarını açıklamıştı
  • Mikro benchmark'ta tek bir fonksiyon, C kodundan 94 kat daha hızlı hale geldi
  • Intel, Core 12., 13. ve 14. nesil işlemcilerde AVX-512'yi devre dışı bıraktı
    • Bunun için net bir neden bulunamadı
  • Performans sorunlarını çözmeden önce darboğazları belirleme işi çoğu zaman yeterince yapılmıyor
    • C kodlarının çoğu en iyi assembly koduna derleniyor
  • Performans artışının nedeni elle yazılmış assembly kodu değil, AVX-512 SIMD komutlarının kullanılması
    • Bunu gcc'nin AVX-512 vektörleştirmesiyle karşılaştırmak isterdim
 
maclier 2024-11-06

Intel’in yeni Downfall AVX2/AVX-512 açığı ve bunun yol açtığı devasa performans etkisi

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

 
cosine20 2024-11-08

Ah, demek Intel AVX-512’yi bu yüzden geri çekmiş.

 
shlee1503 2024-11-10

Sanırım asıl neden bu değil; E-core'lar AVX-512'yi desteklemediği için bunun yazılım düzeyinde engellendiğini biliyorum.
P-core'lar ise gayriresmî olarak AVX-512 desteğine sahipti.

 
cosine20 2024-11-11

Anladım. Haber verdiğiniz için teşekkürler :)