2 poin oleh GN⁺ 2024-10-07 | 1 komentar | Bagikan ke WhatsApp

Pembaca sasaran

  • Orang yang tertarik pada pemrograman CPU SIMD
  • Programmer Amiga yang ingin tahu cara menghitung nilai blitter "minterm"

Instruksi operasi logika ternary bit AVX-512

  • Terinspirasi oleh presentasi Tom Forsyth tentang desain ISA AVX-512
  • Instruksi vpternlogd adalah instruksi yang melakukan operasi logika bit menggunakan tiga sumber input
  • Dapat menjalankan operasi logika yang kompleks dalam satu instruksi dengan menggunakan register 512-bit sebagai input
  • Mendefinisikan operasi logika bit yang spesifik menggunakan nilai immediate 8-bit

Chip kustom blitter Amiga

  • Komputer pada era 1980-an memiliki chip kustom untuk pemrosesan grafis
  • Chip blitter pada Commodore Amiga 500 memindahkan grafis bitmap dan menjalankan operasi logika
  • Kombinasi logika dikendalikan dengan menetapkan nilai 8-bit "minterm"
  • Banyak programmer Amiga tidak mengetahui cara menghitung nilai minterm

Cara mudah menghitung nilai minterm

  • Tidak perlu memahami nilai 8-bit sebagai himpunan operator logika
  • Ini bisa dipahami sekadar sebagai tabel lookup
  • Misalnya, atur agar hasil menjadi 1 saat tepat dua dari tiga bit input bernilai 1
  • Baca nilai 8-bit dari bawah ke atas untuk mendapatkan 0x68

Kebetulan yang menarik

  • Nilai minterm 0xE2 yang sering digunakan di Amiga dipakai untuk rendering sprite 2D bertopeng
  • Dipilihnya 0xE2 sebagai contoh nilai #imm8 dalam dokumentasi Intel mungkin hanya sebuah kebetulan

Kesimpulan

  • Mungkin ada penggemar Amiga di tim contoh dokumentasi Intel
  • Sedikit pengaruh retro tidak ada salahnya

Ringkasan GN⁺

  • Instruksi vpternlogd di AVX-512 adalah alat yang kuat untuk menjalankan operasi logika bit kompleks dalam satu instruksi
  • Kemiripannya dengan chip blitter Amiga menarik dilihat dari perspektif sejarah
  • Tulisan ini menunjukkan keterkaitan antara pemrograman modern dan teknologi retro, serta memberi wawasan yang berguna bagi programmer
  • Proyek dengan fungsi serupa mencakup AVX-512 milik Intel dan arsitektur Zen milik AMD

1 komentar

 
GN⁺ 2024-10-07
Komentar Hacker News
  • Ada cara sederhana untuk mengevaluasi ekspresi tertentu. Misalnya, jika ingin menghitung (NOT A) OR ((NOT B) XOR (C AND A)), cukup tulis ekspresinya dengan menggunakan konstanta _MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C

    • Di GCC dan Clang, bisa langsung dihitung menggunakan konstanta yang didefinisikan di header intrinsic
    • Di MSVC, konstanta harus didefinisikan sendiri
  • Saya sempat mengira judulnya mengatakan instruksinya tidak bekerja dengan benar, padahal sebenarnya ini menjelaskan cara kerjanya

  • Saya pernah berusaha memahami manual perangkat keras, tetapi gagal. Belakangan saya mendapat A+ di mata kuliah logika komputasi di kampus

  • "Logika ternary" biasanya berarti logika dengan tiga nilai kebenaran, tetapi tulisan ini membahas instruksi kompiler yang menangani semua gerbang logika biner dengan tiga input

  • Fungsi contoh "E2" di dokumen adalah fungsi Boolean paling dasar dengan 3 input, disebut MUX yang memilih C saat A sama dengan B. Bersifat universal

  • Ini menggunakan tabel pencarian (LUT), sama seperti cara FPGA mengimplementasikan fungsi logika arbitrer

  • Sepertinya saya memang fokus saat kuliah matematika diskrit di masa S1

  • Jika mencari VPTERNLOG di sandpile.org, Anda bisa melihat rencana lama Intel terkait masking byte dan word (AVX512BITALG2)

  • Nvidia SASS juga punya instruksi serupa (LOP3.LUT)

  • Contoh lain pengemasan operasi bit ke dalam integer adalah kode GDI ROP di win32