عملية الضرب والتجميع

في مجال الحوسبة ، وخاصةً معالجة الإشارات الرقمية ، تُعدّ عملية الضرب والتجميع ( MAC ) أو الضرب والجمع ( MAD ) خطوةً شائعةً لحساب حاصل ضرب عددين وإضافة هذا الناتج إلى مُجمِّع . تُعرف وحدة الأجهزة التي تُنفِّذ هذه العملية باسم وحدة الضرب والتجميع ( وحدة MAC )؛ وتُسمى العملية نفسها غالبًا بعملية MAC أو MAD. تُعدّل عملية MAC قيمة المُجمِّع a : أأ+(ب×ج){\displaystyle a\gets a+(b\times c)}

عند التعامل مع الأعداد العشرية ، قد يتم ذلك بتقريبين ( وهو أمر شائع في العديد من معالجات الإشارات الرقمية )، أو بتقريب واحد. وعند إجراء العملية بتقريب واحد، تُسمى عملية الضرب والجمع المدمجة ( FMA ) أو عملية الضرب والتجميع المدمجة ( FMAC ).

قد تحتوي الحواسيب الحديثة على وحدة ضرب وتجميع مخصصة (MAC)، تتألف من مُضاعِف مُنفَّذ باستخدام المنطق التوافقي، يليه جامع ومسجل تراكمي لتخزين النتيجة. يُعاد تغذية خرج المسجل إلى أحد مدخلات الجامع، بحيث يُضاف خرج المُضاعِف إلى المسجل في كل دورة ساعة. تتطلب المُضاعِفات التوافقية قدرًا كبيرًا من المنطق، لكنها تُحسِّن سرعة حساب الناتج بشكل ملحوظ مقارنةً بطريقة الإزاحة والجمع الشائعة في الحواسيب القديمة. كان بيرسي لودجيت أول من ابتكر وحدة الضرب والتجميع في آلته التحليلية عام 1909، [ 1 ] وأول من استغلها في القسمة (باستخدام الضرب المُعتمد على المقلوب، عبر المتسلسلة المتقاربة (1+ x ) −1 ). كانت معالجات الإشارات الرقمية أول المعالجات الحديثة المُجهزة بوحدات الضرب والتجميع ، لكن هذه التقنية شائعة الآن أيضًا في المعالجات العامة. [ 2 ] [ 3 ] [ 4 ] [ 5 ]

في الحساب ذي الفاصلة العائمة

عند إجراء العمليات الحسابية على الأعداد الصحيحة ، تكون العملية دقيقة عادةً (محسوبة بتردد قوة معينة للعدد اثنين ). مع ذلك، تتمتع الأعداد العشرية بدقة رياضية محدودة . أي أن العمليات الحسابية الرقمية العشرية لا تعتمد عمومًا على التجميع أو التوزيع . (انظر قسم مشاكل الدقة في العمليات الحسابية العشرية  ). لذا، يختلف الناتج باختلاف ما إذا كانت عملية الضرب والجمع تتم بتقريبين، أو في عملية واحدة بتقريب واحد (عملية ضرب وجمع مدمجة). ينص معيار IEEE 754-2008 على وجوب إجرائها بتقريب واحد، مما ينتج عنه نتيجة أكثر دقة. [ 6 ]

الضرب والجمع المدمج

عملية الضرب والجمع المدمجة ( FMA أو fmadd ) [ 7 ] هي عملية ضرب وجمع للأعداد العشرية تُنفذ في خطوة واحدة ( عملية مدمجة )، مع تقريب واحد فقط. بمعنى آخر، بينما تحسب عملية الضرب والجمع غير المدمجة حاصل ضرب b × c ، ثم تقربه إلى N بتًا معنويًا، ثم تضيف النتيجة إلى a ، ثم تقربها مرة أخرى إلى N بتًا معنويًا، فإن عملية الضرب والجمع المدمجة تحسب التعبير الكامل a + ( b × c ) بدقته الكاملة قبل تقريب النتيجة النهائية إلى N بتًا معنويًا.

يمكن لخوارزمية FMA السريعة تسريع وتحسين دقة العديد من العمليات الحسابية التي تتضمن تجميع المنتجات:

يمكن الاعتماد عادةً على دمج عمليتي الضرب والجمع للحصول على نتائج أكثر دقة. مع ذلك، أشار ويليام كاهان إلى أن استخدامهما دون تفكير قد يُسبب مشاكل. [ 8 ] إذا تم حساب - على النحو (( x × x ) - y × y ) ( وفقًا للصيغة التي اقترحها كاهان حيث تُوجه الأقواس الزائدة المُصرّف لتقريب الحد ( x × x ) أولًا) باستخدام دمج عمليتي الضرب والجمع، فقد تكون النتيجة سالبة حتى عندما x = وذلك لأن عملية الضرب الأولى تتجاهل البتات ذات الأهمية المنخفضة. قد يؤدي هذا إلى خطأ، على سبيل المثال، إذا تم حساب الجذر التربيعي للنتيجة بعد ذلك.

عند تطبيقها داخل معالج دقيق ، يمكن أن تكون عملية FMA أسرع من عملية الضرب متبوعة بعملية الجمع. ومع ذلك، تتطلب التطبيقات الصناعية القياسية القائمة على تصميم IBM RS/6000 الأصلي جامعًا من 2N بت لحساب المجموع بشكل صحيح. [ 9 ]

ومن الفوائد الأخرى لإدراج هذه التعليمات أنها تسمح بتنفيذ برمجي فعال لعمليات القسمة (انظر خوارزمية القسمة ) والجذر التربيعي (انظر طرق حساب الجذور التربيعية )، مما يلغي الحاجة إلى أجهزة مخصصة لتلك العمليات. [ 10 ]

تعليمات الضرب النقطي

تقوم بعض الآلات بدمج عمليات الضرب والجمع المتعددة في خطوة واحدة، على سبيل المثال إجراء عملية ضرب نقطي لأربعة عناصر على سجلين SIMDa0×b0 + a1×b1 + a2×b2 + a3×b3 128 بت بمعدل إنتاجية دورة واحدة.

يدعم

تم تضمين عملية FMA في معيار IEEE 754-2008 .

يدعم معيار لغة البرمجة C لعام 1999 عملية FMA من خلال دالة مكتبة الرياضيات القياسية والتحويل التلقائي لعملية الضرب متبوعة بالجمع (اختصار تعابير الفاصلة العائمة)، والذي يمكن تفعيله أو تعطيله صراحةً باستخدام توجيهات برمجية قياسية (pragmas ). يقوم مُجمِّعا لغة C ، GCC و Clang، بإجراء هذه التحويلات افتراضيًا لبنى المعالجات التي تدعم تعليمات FMA. أما في GCC، الذي لا يدعم التوجيه البرمجي المذكور، [ 11 ] فيمكن التحكم في ذلك بشكل عام عبر خيار سطر الأوامر. [ 12 ]fma()#pragma STDC FP_CONTRACT-ffp-contract

تم تقديم عملية الضرب والجمع المدمجة باسم "الضرب والجمع المدمج" في معالج IBM POWER1 (1990)، [ 13 ] ولكن تمت إضافتها إلى العديد من المعالجات:

وحدات معالجة الرسومات ولوحات GPGPU:

أشكال تتضمن تقريبين أو أكثر

حذف MAD

تتضمن إحدى الطرق الأبسط لتنفيذ عملية الجمع والطرح المتعدد (MADD) اقتطاع ناتج الضرب قبل الجمع. لا تُحسّن هذه الطريقة الدقة (بل إنها في الواقع أقل دقة)، ولكنها كانت، قبل عام 2010، أكثر شيوعًا في وحدات معالجة الرسومات (GPUs) من عملية الجمع والطرح السريع الدقيقة (FMA). يُمكن رؤية مثال على ذلك في تعليمة "FMAD" الخاصة بمعالج Nvidia PTX. [ 18 ]

-cl-mad-enableيُمكّن خيار تحسين OpenCL من a * b + cاستبدال mad(a, b, c)الدالة التي تحسب التعبير المكافئ "بدقة مُخفّضة" في OpenCL 1.0. [ 19 ] وقد أصبحت دقة هذا الخيار، بالإضافة إلى mad()الدالة الأخرى، أكثر دقة في الإصدارات الأحدث من OpenCL، حيث لا تسمح إلا بالدقة المُخفّضة في "الملف التعريفي المُضمّن" بدءًا من الإصدار 3.0. [ 20 ]

التقريب بدقة متوسطة إضافية

تُستخدم تعليمة VAX من شركة Digital Equipment Corporation (DEC) لتقييم كثيرات الحدود باستخدام قاعدة هورنر عبر سلسلة من خطوات الضرب والجمع. لا تُحدد أوصاف التعليمة ما إذا كان الضرب والجمع يتمان باستخدام خطوة FMA واحدة. كانت هذه التعليمة جزءًا من مجموعة تعليمات VAX منذ تطبيقها الأصلي في معالج 11/780 عام 1977. [ 21 ] وفقًا لبوب سوبنيك، يُجري الجهاز داخليًا عمليتي الضرب والجمع بدقة مُوسّعة، ثم يُحوّل الناتج إلى الصيغة المستهدفة. [ 22 ] لذلك، توجد خطوة تقريب بعد الضرب. ونتيجةً لذلك، على الرغم من أن هذه العملية أكثر دقة من العملية البسيطة في الصيغة المستهدفة، إلا أنها لا تُطابق تعريف IEEE لتقنية FMA.POLYa * b + c

هذا السلوك قابل للمقارنة أيضًا بالاستخدام FLT_EVAL_METHOD == 2على x87 .

انظر أيضاً

مراجع

  1. "جدوى آلة لودجيت التحليلية" . مؤرشف من الأصل بتاريخ 7 أغسطس 2019. تم الاطلاع عليه بتاريخ 30 أغسطس 2020 .
  2. لياخوف، بافيل؛ فالويفا، ماريا؛ فالويف، جورجي؛ ناغورنوف، نيكولاي (يناير 2020). "طريقة لزيادة أداء المرشح الرقمي تعتمد على وحدات الضرب والتجميع المقتطعة" . العلوم التطبيقية . 10 (24): 9052. doi : 10.3390/app10249052 .
  3. تونغ ثانه هوانغ؛ سجالاندر، م.؛ لارسون-إديفورس، ب. (مايو 2009). "وحدة الضرب والتجميع ذات الإنتاجية المزدوجة لتحسينات معالج FlexCore". ندوة IEEE الدولية لعام 2009 حول المعالجة المتوازية والموزعة . الصفحات 1-7 . doi : 10.1109/IPDPS.2009.5161212 . ISBN  978-1-4244-3751-1. S2CID 14535090 . 
  4. كانغ، جونغسونغ؛ كيم، تايوهان (2020-03-01). "PV-MAC: بنية وحدة الضرب والتجميع التي تستغل تباين الدقة في الشبكات العصبية الالتفافية على الجهاز" . التكامل . 71 : 76-85 . doi : 10.1016/j.vlsi.2019.11.003 . ISSN 0167-9260 . S2CID 211264132 .  
  5. "mad - ps" . 20 نوفمبر 2019. تم الاسترجاع في 14 أغسطس 2021 .
  6. وايت هيد، ناثان؛ فيت-فلوريا، أليكس (2011). "الدقة والأداء: التوافق مع معيار الفاصلة العائمة ومعيار IEEE 754 لوحدات معالجة الرسومات من إنفيديا" (ملف PDF) . إنفيديا . تاريخ الاسترجاع: 31 أغسطس 2013 .
  7. "fmadd instrs" . IBM .
  8. كاهان، ويليام (31-05-1996). "معيار IEEE 754 للحساب الثنائي ذي الفاصلة العائمة" .
  9. كوينيل، إريك (مايو 2007). بنى الضرب والجمع المدمجة ذات الفاصلة العائمة (ملف PDF) (أطروحة دكتوراه) . تم الاسترجاع في 28 مارس 2011 .
  10. ماركشتاين، بيتر (نوفمبر 2004). قسمة البرمجيات والجذر التربيعي باستخدام خوارزميات غولدشميت (ملف PDF) . المؤتمر السادس للأعداد الحقيقية والحواسيب. CiteSeerX 10.1.1.85.9648 . 
  11. "الخطأ رقم 20785 - Pragma STDC * (C99 FP) غير مُنفَّذ" . gcc.gnu.org . تم الاطلاع عليه بتاريخ 2022-02-02 .
  12. "تحسين الخيارات (باستخدام مجموعة مترجمات جنو (GCC))" . gcc.gnu.org . تم الاطلاع عليه بتاريخ 2022-02-02 .
  13. مونتوي، آر كيه؛ هوكينيك، إي؛ رونيون، إس إل (يناير 1990). "تصميم وحدة تنفيذ الفاصلة العائمة لنظام IBM RISC/6000". مجلة IBM للبحوث والتطوير . 34 (1): 59-70 . doi : 10.1147/rd.341.0059 .رمز الوصول المغلق
  14. "Godson-3 يحاكي x86: معالج صيني جديد متوافق مع MIPS يحتوي على ملحقات لترجمة x86" .
  15. "دليل برمجة وحدات التحكم الدقيقة STM32 Cortex-M33" (ملف PDF) . ST . تم الاطلاع عليه بتاريخ 2024-05-06 .
  16. هولينغسورث، برنت (أكتوبر 2012). "تعليمات جديدة لـ "الجرافة" و "المطرقة"" . مركز مطوري AMD.
  17. «إنتل تضيف معالج هاسويل ثماني النواة بتقنية 22 نانومتر إلى خارطة طريق تصميم المعالجات المركزية» . ذا ريجستر . مؤرشف من الأصل بتاريخ 17 فبراير 2012. تم الاطلاع عليه بتاريخ 19 أغسطس 2008 .
  18. إنفيديا (14 فبراير 2011). "دليل أفضل ممارسات OpenCL" (ملف PDF) . developer.download.nvidia.com . تم الاطلاع عليه بتاريخ 27 سبتمبر 2025 .
  19. "مواصفات OpenCL الإصدار: 1.0 مراجعة المستند: 43" (PDF) .
  20. "مواصفات OpenCL™ الإصدار 3.0.19 (5.8.6.3. خيارات التحسين)" . registry.khronos.org .
  21. "تعليمات فاكس لهذا الأسبوع: بولي" . مؤرشف من الأصل بتاريخ 13 فبراير 2020.
  22. بوب سوبنيك. "كيف فقدت VAX خاصية البولي" (ملف PDF) .