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
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_CSaya 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