2 puan yazan GN⁺ 2024-10-07 | 1 yorum | WhatsApp'ta paylaş

Hedef okur

  • SIMD CPU programlamayla ilgilenenler
  • Bir Amiga programcısı olarak "minterm" blitter değerlerinin nasıl hesaplandığını öğrenmek isteyenler

AVX-512 bit düzeyinde mantıksal üçlü işlem komutu

  • Tom Forsyth'in AVX-512 ISA tasarımına ilişkin sunumundan ilham alındı
  • vpternlogd komutu, üç giriş kaynağını kullanarak bit düzeyinde mantıksal işlem yapan bir komuttur
  • 512 bitlik register'ları girdi olarak kullanarak karmaşık mantıksal işlemleri tek komutta gerçekleştirebilir
  • Belirli bit düzeyinde mantıksal işlemleri tanımlamak için 8 bitlik anlık bir değer kullanır

Amiga blitter özel çipi

  • 1980'lerdeki bilgisayarlar grafik işleme için özel çiplere sahipti
  • Commodore Amiga 500'ün blitter çipi bitmap grafikleri taşır ve mantıksal işlemler gerçekleştirirdi
  • Mantıksal birleşimleri kontrol etmek için 8 bitlik bir "minterm" değeri ayarlanırdı
  • Birçok Amiga programcısı minterm değerlerinin nasıl hesaplandığını bilmiyordu

minterm değerini kolay hesaplama yöntemi

  • 8 bitlik değeri bir mantıksal işleçler kümesi olarak anlamak gerekmez
  • Onu basitçe bir lookup table olarak düşünebilirsiniz
  • Örneğin, üç giriş bitinden tam olarak ikisi 1 olduğunda sonucun 1 olması için ayarlanabilir
  • 8 bitlik değer aşağıdan yukarı okunarak 0x68 elde edilir

Eğlenceli bir tesadüf

  • Amiga'da sık kullanılan 0xE2 minterm değeri, maskelenmiş 2D sprite render işlemi için kullanılır
  • Intel belgelerinde #imm8 değeri örneği olarak 0xE2'nin seçilmesi bir rastlantı olabilir

Sonuç

  • Intel belge örnekleri ekibinde bir Amiga hayranı olabilir
  • Biraz retro etkinin kimseye zararı olmaz

GN⁺ özeti

  • AVX-512'nin vpternlogd komutu, karmaşık bit düzeyinde mantıksal işlemleri tek komutta gerçekleştirebilen güçlü bir araçtır
  • Amiga'nın blitter çipiyle olan benzerlik tarihsel açıdan ilgi çekicidir
  • Bu yazı, modern programlama ile retro teknoloji arasındaki bağlantıyı göstererek programcılara faydalı içgörüler sunuyor
  • Benzer yeteneklere sahip projeler arasında Intel'in AVX-512'si ve AMD'nin Zen mimarisi bulunur

1 yorum

 
GN⁺ 2024-10-07
Hacker News görüşleri
  • Belirli bir ifadeyi hesaplamanın basit bir yolu var. Örneğin (NOT A) OR ((NOT B) XOR (C AND A)) ifadesini hesaplamak istiyorsanız, ifadeyi _MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C sabitlerini kullanarak yazabilirsiniz

    • GCC ve Clang'de intrinsic başlıklarında tanımlanan sabitler kullanılarak anında hesaplama yapılabiliyor
    • MSVC'de sabitleri doğrudan tanımlamak gerekiyor
  • Başlığın, komutun düzgün çalışmadığını söylediğini sanmıştım; ama aslında nasıl çalıştığını açıklıyor

  • Donanım kılavuzunu anlamaya çalışıp başarısız olduğum bir deneyimim var. Daha sonra üniversitede hesaplama mantığı dersinden A+ aldım

  • "Üçlü mantık" genelde üç doğruluk değerine sahip mantığı ifade eder, ancak bu yazı üç girişe sahip tüm ikili mantık kapılarını işleyen bir derleyici komutunu ele alıyor

  • Belgelerdeki örnek işlev "E2", 3 girişli en temel Boole işlevi; A, B olduğunda C'yi seçen ve MUX olarak adlandırılan yapı. Evrensel

  • FPGA'lerin rastgele bir mantık işlevini gerçekleştirme yöntemiyle aynı şekilde, arama tablosu (LUT) kullanıyor

  • Lisans dönemimde ayrık matematik dersine odaklanmış gibiyim

  • sandpile.org üzerinde VPTERNLOG aratılırsa, bayt ve word maskeleme (AVX512BITALG2) ile ilgili Intel'in geçmiş planları görülebilir

  • Nvidia SASS'ta da benzer bir komut var: LOP3.LUT

  • Bit işlemlerinin tamsayılara paketlenmesine başka bir örnek olarak win32'nin GDI ROP kodları verilebilir