مجموعه دستورهای ضرب بدون رقم نقلی

از ویکی‌پدیا، دانشنامهٔ آزاد

ضرب بدون رقم نقلی (CLMUL) یک مجموعه دستورالعمل به فرمت معماری x86 است که توسط ریزپردازنده‌های اینتل و AMD استفاده شده و توسط اینتل در مارس ۲۰۰۸ معرفی گردیده‌است[۱] و برای پردازنده‌های اینتل Westmere در اوایل سال ۲۰۱۰ در دسترس قرار گرفته‌است.

یکی از این دستورالعمل‌ها برای افزایش سرعت برنامه‌های کاربردی است که از رمزگذاری بلوک به بلوک در حالت Galois / Counter Mode استفاده می‌کنند، که به ضرب میدان محدود(GF (2 k وابستگی دارد و می‌تواند با استفاده از دستورالعمل‌های جدید ضرب بدون رقم نقلی[۲] نسبت به دستورالعمل‌های سنتی بهتر و پربازده تر پیاده‌سازی شوند. یکی دیگر از کارهایی که ممکن می‌سازد محاسبه سریع مقدار CRC است،[۳] این پیاده‌سازی تمام تابع‌های موجود در الگوریتم zlib و pngcrush در پنجره کشویی DEFLATE در LZ77 را نیز در بر می‌گیرد.[۴]

دستورالعمل جدید[ویرایش]

دستورالعمل، مقدار ضرب ۱۲۸ بیتی بدون رقم نقلی دو مقدار ۶۴ بیتی را محاسبه می‌کند. مقصد یک رجیستر XMM که ۱۲۸ بیتی است، می‌باشد. منبع ممکن است یک رجیستر XMM دیگر یا حافظه باشد. یک عملگر عددی مشخص می‌کند که کدام بخش‌های ۱۲۸ بیتی عملیاتی شده‌اند. یک یادمان که مشخص کننده مقادیر عملگرهای عددی می‌باشد نیز تعریف می‌شود:

دستورالعمل Opcode شرح
PCLMULQDQ xmmreg,xmmrm,imm [rmi: 66 0f 3a 44 /r ib] انجام یک ضرب بدون کری برای دو چند جمله ای ۶۴ بیتی در حوزهٔ محدود (GF (2 k.
PCLMULLQLQDQ xmmreg,xmmrm [rm:   66 0f 3a 44 /r 00] مقادیر نیمه پایین دو رجیستر را افزایش ضرب می‌کند.
PCLMULHQLQDQ xmmreg,xmmrm [rm:   66 0f 3a 44 /r 01] نیمه بالا رجیستر مقصد را با نیمه پایین رجیستر مبدأ ضرب می‌کند.
PCLMULLQHQDQ xmmreg,xmmrm [rm:   66 0f 3a 44 /r 10] نیمه پایین رجیستر مقصد را با نیمه بالا رجیستر مبدأ افزایش دهید.
PCLMULHQHQDQ xmmreg,xmmrm [rm:   66 0f 3a 44 /r 11] نیمه‌های بالایی دو رجیستر را در هم ضرب می‌کند.

CPUها با دستورالعمل CLMUL تنظیم شده‌است[ویرایش]

  • اینتل
    • پردازنده Westmere (مارس ۲۰۱۰).
    • پردازنده Sandy Bridge
    • پردازنده Ivy Bridge
    • پردازنده Haswell
    • پردازنده Broadwell (با افزایش کارایی و تأخیر کمتر)[۵]
    • پردازنده Skylake
    • پردازنده یاب Kaby
    • پردازشگر دریاچه قهوه
  • AMD:
    • پردازنده‌های مبتنی بر Jaguar و جدیدتر[۶]
    • پردازنده‌های مبتنی بر Puma و جدیدتر
    • «تجهیزات سنگین» پردازنده
      • پردازنده‌های مبتنی بر بولدوزر[۷]
      • پردازنده‌های مبتنی بر Piledriver
      • پردازنده‌های مبتنی بر Steamroller
      • پردازنده‌های بر پایه بیل و جدیدتر
    • پردازنده‌های مبتنی بر ذن
    • پردازنده‌های مبتنی بر Zen +

حضور مجموعه دستورالعمل ضرب بدون رقم نقلی را می‌توان با آزمایش بیت‌های ویژگی‌های CPU بررسی کرد.

جستارهای وابسته[ویرایش]

  • محاسبه فیلد محدود
  • دستورالعمل AES مجموعه
  • مجموعه دستورالعمل FMA3
  • دستورالعمل FMA4 تنظیم شده‌است
  • مجموعه دستورات AVX

منابع[ویرایش]

  1. "Intel Software Network". Intel. Archived from the original on 2008-04-07. Retrieved 2008-04-05.
  2. Shay Gueron (2011-04-13). "Intel Carry-Less Multiplication Instruction and its Usage for Computing the GCM Mode – Rev 2". Intel.
  3. "Fast CRC Computation for Generic Polynomials Using PCLMULQDQ" (PDF).
  4. Vlad Krasnov (2015-07-08). "Fighting Cancer: The Unexpected Benefit Of Open Sourcing Our Code". CloudFlare. Retrieved 2016-09-04.
  5. Johan De Gelas (2017-03-31). "The Intel Xeon E5 v4 Review: Testing Broadwell-EP With Demanding Server Workloads". Anandtech. p. 3.
  6. "Slide detailing improvements of Jaguar over Bobcat". AMD. Retrieved August 3, 2013.
  7. Dave Christie (6 May 2009). "Striking a balance". AMD Developer blogs. Archived from the original on 9 November 2013. Retrieved 2011-03-11.