AVX-512: Bitler Gerçekten Sayıldığında


İş yüklerinin çoğu için montaj talimatlarıyla uğraşmak buna değmez. Eklenen karmaşıklık ve kod gizleme, genellikle nispeten mütevazı kazançlardan daha ağır basar. Temel olarak, derleyiciler kod oluşturmada oldukça harika hale geldiğinden ve işlemciler çok daha hızlı olduğundan, küçük bir kod bölümünde ince ayar yaparak anlamlı bir hızlanma elde etmek zordur. Bu, SIMD talimatlarını tanıttığınızda ve çok sayıda bit kümesinin kodunu hızlı bir şekilde çözmeniz gerektiğinde değişir. Intel’in süslü AVX-512 SIMD talimatları, nispeten düşük özel montaj ile bazı anlamlı performans kazanımları sunabilir.

Birçok yazılım mühendisi gibi, [Daniel Lemire] birçok bit kümesine sahipti (bir ikili sayıya kodlanmış bir dizi int/sayı, her bit farklı bir tamsayıya veya numaralandırmaya karşılık gelir). Yalnızca belirli bir bayrağın olup olmadığını kontrol etmek yerine (biraz ve), [Daniel] belirli bir bit kümesindeki tüm bayrakları bilmek istedi. En kolay yol, hepsini şu şekilde yinelemek olacaktır:

while (word != 0) {
  result[i] = trailingzeroes(word);
  word = word & (word - 1);
  i++;
}

Bu görünümün naif versiyonunun bir dal yanlış tahmini olması çok muhtemeldir ve siz ya da derleyici döngüyü açarak onu hızlandırır. Ancak, en yeni Intel işlemcilerde ayarlanan AVX-512 talimatı, sadece bu tür şeyler için bazı kullanışlı talimatlara sahiptir. talimat vp sıkıştırılmış ve Intel, adı verilen kullanışlı ve akılda kalıcı bir C/C++ işlevi sağlar. _mm512_mask_compressstoreu_epi32.

İşlev bir dizi tamsayı üretir ve rezil olanı kullanabilirsiniz. popcnt olanların sayısını almak için talimat. Bazı erken kıyaslama testleri, AVX-512 sürümünün %45 daha az döngü kullandığını gösteriyor. Merak ediyor olabilirsiniz, geniş 512 bitlik kayıtlar kullanıldığında işlemci hızını düşürmez mi? Evet. Ama hız aşırtma ile bile SIMD versiyonu %33 daha hızlı. bu Github’da kod var kendin denemek istersen



Kaynak : https://hackaday.com/2022/05/09/avx-512-when-the-bits-really-count/

Yorum yapın