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
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_Csabitlerini kullanarak yazabilirsinizBaş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.LUTBit işlemlerinin tamsayılara paketlenmesine başka bir örnek olarak win32'nin GDI ROP kodları verilebilir