2 पॉइंट द्वारा GN⁺ 2024-10-07 | 1 टिप्पणियां | WhatsApp पर शेयर करें

लक्षित पाठक

  • SIMD CPU प्रोग्रामिंग में रुचि रखने वाले लोग
  • Amiga प्रोग्रामर जो "minterm" blitter वैल्यू की गणना करने का तरीका जानना चाहते हैं

AVX-512 बिट लॉजिक टर्नरी ऑपरेशन इंस्ट्रक्शन

  • AVX-512 ISA डिज़ाइन पर Tom Forsyth की प्रस्तुति से प्रेरित
  • vpternlogd इंस्ट्रक्शन तीन इनपुट सोर्स का उपयोग करके बिट लॉजिक ऑपरेशन करता है
  • 512-बिट रजिस्टरों को इनपुट के रूप में इस्तेमाल कर जटिल लॉजिक ऑपरेशन एक ही इंस्ट्रक्शन में किए जा सकते हैं
  • 8-बिट immediate वैल्यू का उपयोग करके विशिष्ट बिट लॉिक ऑपरेशन परिभाषित किया जाता है

Amiga blitter custom chip

  • 1980 के दशक के कंप्यूटरों में ग्राफ़िक्स प्रोसेसिंग के लिए custom chip होते थे
  • Commodore Amiga 500 का blitter chip bitmap ग्राफ़िक्स को मूव करता था और लॉजिक ऑपरेशन करता था
  • 8-बिट वैल्यू "minterm" सेट करके लॉजिक संयोजनों को नियंत्रित किया जाता था
  • कई Amiga प्रोग्रामरों को minterm वैल्यू की गणना करने का तरीका पता नहीं था

minterm वैल्यू आसानी से गणना करने का तरीका

  • 8-बिट वैल्यू को लॉजिक ऑपरेटरों के सेट के रूप में समझने की ज़रूरत नहीं है
  • इसे बस एक lookup table की तरह समझा जा सकता है
  • उदाहरण के लिए, तीन इनपुट बिट्स में से ठीक दो 1 हों तो परिणाम 1 बने, ऐसा सेट किया जा सकता है
  • 8-बिट वैल्यू को नीचे से ऊपर पढ़ने पर 0x68 मिलता है

दिलचस्प संयोग

  • Amiga में अक्सर इस्तेमाल होने वाला minterm वैल्यू 0xE2 masked 2D sprite rendering में उपयोग होता है
  • Intel दस्तावेज़ में #imm8 वैल्यू के उदाहरण के रूप में 0xE2 चुना जाना महज़ संयोग हो सकता है

निष्कर्ष

  • Intel दस्तावेज़ उदाहरण टीम में शायद कोई Amiga प्रशंसक हो
  • थोड़ा-सा retro प्रभाव कोई बुरी बात नहीं है

GN⁺ का सार

  • AVX-512 का vpternlogd इंस्ट्रक्शन जटिल बिट लॉजिक ऑपरेशन को एक ही इंस्ट्रक्शन में करने वाला शक्तिशाली टूल है
  • Amiga के blitter chip से इसकी समानता ऐतिहासिक दृष्टि से रोचक है
  • यह लेख आधुनिक प्रोग्रामिंग और retro तकनीक के बीच के संबंध को दिखाता है और प्रोग्रामरों को उपयोगी अंतर्दृष्टि देता है
  • समान कार्यक्षमता वाले प्रोजेक्ट्स में Intel का AVX-512 और AMD की Zen architecture शामिल हैं

1 टिप्पणियां

 
GN⁺ 2024-10-07
Hacker News राय
  • किसी खास expression को evaluate करने का एक आसान तरीका है। उदाहरण के लिए, अगर आप (NOT A) OR ((NOT B) XOR (C AND A)) calculate करना चाहते हैं, तो _MM_TERNLOG_A, _MM_TERNLOG_B, _MM_TERNLOG_C constants का उपयोग करके expression लिख सकते हैं

    • GCC और Clang में intrinsic header में defined constants का उपयोग करके इसे तुरंत calculate किया जा सकता है
    • MSVC में constants को सीधे define करना पड़ता है
  • पहले मुझे लगा कि शीर्षक कह रहा है कि instruction ठीक से काम नहीं करता, लेकिन वास्तव में यह उसके काम करने का तरीका समझाता है

  • मैंने hardware manual को समझने की कोशिश की थी, लेकिन असफल रहा। बाद में कॉलेज में computational logic course में A+ मिला

  • "ternary logic" का मतलब आमतौर पर तीन truth values वाली logic होता है, लेकिन यह लेख तीन inputs वाले सभी binary logic gates को handle करने वाले compiler instruction के बारे में है

  • दस्तावेज़ में दिया गया example function "E2" तीन inputs वाला सबसे बुनियादी Boolean function है, जिसे MUX कहा जाता है जो A, B होने पर C को चुनता है। यह universal है

  • FPGA जिस तरह arbitrary logic function implement करता है, उसी तरह यह lookup table (LUT) का उपयोग करता है

  • लगता है मैंने graduation के दौरान discrete mathematics की class पर ध्यान दिया था

  • sandpile.org पर VPTERNLOG खोजने पर byte और word masking (AVX512BITALG2) से जुड़ी Intel की पुरानी योजनाएँ देखी जा सकती हैं

  • Nvidia SASS में भी ऐसा ही instruction (LOP3.LUT) है

  • bits को integer में pack करने का एक और उदाहरण win32 के GDI ROP codes हैं