برنامج واحد، بيانات متعددة

في مجال الحوسبة ، يُستخدم مصطلح " برنامج واحد، بيانات متعددة " ( SPMD ) للإشارة إلى النماذج الحسابية التي تستغل التوازي حيث تتعاون معالجات متعددة في تنفيذ برنامج ما من أجل الحصول على نتائج أسرع.

تم تقديم مصطلح SPMD في عام 1983 وكان يستخدم للدلالة على نموذجين حسابيين مختلفين:

  1. من تأليف ميشيل أوجين (جامعة نيس صوفيا أنتيبوليس) وفرانسوا لاربي (تومسون/سينترا)، [ 1 ] [ 2 ] [ 3 ] كنهج " التفرع والدمج " ونهج متوازي للبيانات حيث يتم تقسيم المهام المتوازية ("البرنامج الواحد") وتشغيلها في وقت واحد وبشكل متزامن على معالجات SIMD متعددة بمدخلات مختلفة، و
  2. بواسطة فريدريكا داريما (IBM)، [ 4 ] [ 5 ] [ 6 ] حيث " تبدأ جميع عمليات (المعالجات)  في تنفيذ نفس البرنامج ... ولكن من خلال توجيهات التزامن ... تقوم بجدولة نفسها ذاتيًا لتنفيذ تعليمات مختلفة والعمل على بيانات مختلفة " مما يتيح التوازي MIMD لبرنامج معين، وهو نهج أكثر عمومية من التوازي على مستوى البيانات وأكثر كفاءة من التفرع والدمج للتنفيذ المتوازي على المعالجات المتعددة للأغراض العامة.

يُعدّ SPMD (من IBM) النمط الأكثر شيوعًا للبرمجة المتوازية، ويمكن اعتباره فئة فرعية من MIMD، حيث يشير إلى تنفيذ برنامج واحد (برنامج واحد) باستخدام MIMD . [ 7 ] كما أنه شرط أساسي لمفاهيم بحثية مثل الرسائل النشطة والذاكرة المشتركة الموزعة .

SPMD مقابل SIMD

في التنفيذ المتوازي SPMD، تُنفّذ معالجات مستقلة متعددة البرنامج نفسه في وقت واحد عند نقاط مستقلة، بدلاً من التنفيذ المتزامن الذي يفرضه SIMD أو SIMT على بيانات مختلفة. في SIMD، تُطبّق العملية (التعليمات) نفسها على بيانات متعددة لمعالجة تدفقات البيانات (أحد إصدارات SIMD هو معالجة المتجهات حيث تُنظّم البيانات على شكل متجهات).

على عكس SIMD، لا يتطلب SPMD دعمًا خاصًا من المعالج الذي يتم تشغيله عليه، سواء كان وحدة المعالجة المركزية أو وحدة معالجة الرسومات .

لا يُعدّ كلٌّ من SPMD وSIMD متنافيين: إذ يمكن لكل برنامج SPMD أن يتضمن معالجة فرعية بتقنية SIMD، أو معالجة متجهة، أو معالجة باستخدام وحدة معالجة الرسومات (GPU). تحتوي العديد من وحدات المعالجة المركزية (CPU) على نوى متعددة تدعم تقنية SIMD، ويمكن لكل منها المشاركة في SPMD؛ وينطبق الأمر نفسه على العديد من وحدات معالجة الرسومات (GPU) التي تحتوي على عدة "تدفقات" من SIMD. وقد استُخدمت تقنية SPMD في البرمجة المتوازية لكلٍّ من بنى تمرير الرسائل وبنى الأجهزة ذات الذاكرة المشتركة.

عملية

الذاكرة الموزعة

في بنى الحواسيب ذات الذاكرة الموزعة ، تستخدم تطبيقات SPMD عادةً برمجة تمرير الرسائل . يتكون الحاسوب ذو الذاكرة الموزعة من مجموعة من الحواسيب المستقلة والمترابطة، تُسمى العُقد. وللتنفيذ المتوازي، تبدأ كل عقدة برنامجها الخاص وتتواصل مع العُقد الأخرى عن طريق إرسال واستقبال الرسائل، مستدعيةً إجراءات الإرسال/الاستقبال لهذا الغرض. كما يمكن تنفيذ توجيهات التوازي الأخرى ، مثل مزامنة الحاجز، باستخدام الرسائل. ويمكن إرسال الرسائل عبر عدد من آليات الاتصال، مثل TCP/IP عبر الإيثرنت ، أو وصلات عالية السرعة متخصصة مثل InfiniBand أو Omni-Path . في بيئات الذاكرة الموزعة، يمكن تنفيذ الأجزاء التسلسلية من البرنامج عن طريق حساب الجزء التسلسلي نفسه على جميع العُقد، بدلاً من حساب النتيجة على عقدة واحدة وإرسالها إلى العُقد الأخرى، إذا كان ذلك يُحسّن الأداء بتقليل عبء الاتصال.

في الوقت الحاضر، يتم عزل المبرمج عن تفاصيل تمرير الرسائل بواسطة واجهات قياسية، مثل PVM و MPI .

الذاكرة الموزعة هي أسلوب البرمجة المستخدم في الحواسيب العملاقة المتوازية بدءًا من مجموعات بيوولف المحلية وحتى أكبر المجموعات على شبكة تيراغريد ، بالإضافة إلى الحواسيب العملاقة الحالية القائمة على وحدة معالجة الرسومات .

الذاكرة المشتركة

في جهاز الذاكرة المشتركة (جهاز كمبيوتر يحتوي على العديد من وحدات المعالجة المركزية المتصلة التي تصل إلى نفس مساحة الذاكرة)، يمكن تنفيذ المشاركة في سياق الذاكرة المشتركة فعليًا أو الذاكرة المشتركة منطقيًا (ولكنها موزعة فعليًا)؛ بالإضافة إلى الذاكرة المشتركة، يمكن أن تتضمن وحدات المعالجة المركزية في نظام الكمبيوتر أيضًا ذاكرة محلية (أو خاصة). في كلا السياقين، يمكن تفعيل التزامن باستخدام وظائف أساسية مدعومة بالأجهزة (مثل المقارنة والتبديل ، أو جلب البيانات وإضافتها) . أما بالنسبة للأجهزة التي لا تدعم هذه الوظائف، فيمكن استخدام الأقفال وتبادل البيانات بين المعالجات (أو بشكل أعم، العمليات أو الخيوط ) عن طريق تخزين البيانات القابلة للمشاركة في منطقة ذاكرة مشتركة. عندما لا يدعم الجهاز الذاكرة المشتركة، غالبًا ما يكون تجميع البيانات كرسالة هو الطريقة الأكثر كفاءة لبرمجة أجهزة الكمبيوتر ذات الذاكرة المشتركة (منطقيًا) والتي تحتوي على عدد كبير من المعالجات، حيث تكون الذاكرة الفعلية محلية للمعالجات ويستغرق الوصول إلى ذاكرة معالج آخر وقتًا أطول. يمكن تنفيذ SPMD على جهاز ذي ذاكرة مشتركة بواسطة عمليات قياسية (ثقيلة) أو خيوط (خفيفة).

تُتيح المعالجة المتعددة للذاكرة المشتركة (سواءً المعالجة المتعددة المتناظرة ، SMP، أو الوصول غير الموحد للذاكرة ، NUMA) للمبرمج مساحة ذاكرة مشتركة وإمكانية تنفيذ البرامج بالتوازي. في نموذج SPMD (من IBM)، تسلك المعالجات (أو العمليات) المتعاونة مسارات مختلفة خلال البرنامج، باستخدام توجيهات التوازي ( توجيهات التوازي والتزامن ، التي يمكنها استخدام عمليات المقارنة والتبديل وجلب البيانات وإضافتها على متغيرات تزامن الذاكرة المشتركة)، وتُجري عمليات على البيانات في الذاكرة المشتركة ("البيانات المشتركة"). كما يمكن للمعالجات (أو العمليات) الوصول إلى البيانات في ذاكرتها المحلية ("البيانات الخاصة") وإجراء عمليات عليها. في المقابل، في أساليب التفرع والدمج، يبدأ البرنامج بالتنفيذ على معالج واحد، ثم ينقسم التنفيذ إلى منطقة متوازية، تبدأ عند مصادفة توجيهات التوازي؛ في المنطقة المتوازية، تُنفذ المعالجات مهمة متوازية على بيانات مختلفة. من الأمثلة النموذجية حلقة DO المتوازية، حيث تعمل معالجات مختلفة على أجزاء منفصلة من المصفوفات المشاركة في الحلقة. في نهاية الحلقة، تتم مزامنة التنفيذ (باستخدام حواجز مرنة أو صلبة [ 6 ] )، وتنتقل المعالجات (العمليات) إلى القسم التالي المتاح من البرنامج للتنفيذ. تم تطبيق SPMD (من IBM) في واجهة OpenMP القياسية الحالية لمعالجة الذاكرة المشتركة المتعددة ، والتي تستخدم تعدد الخيوط، والذي يتم تنفيذه عادةً بواسطة عمليات خفيفة الوزن تُسمى الخيوط .

مزيج من مستويات التوازي

تتيح الحواسيب الحديثة استغلال العديد من أنماط المعالجة المتوازية في آنٍ واحد لتحقيق أقصى قدر من التأثير المُجتمَع. يمكن تشغيل برنامج ذاكرة موزعة باستخدام MPI على مجموعة من العُقد. قد تكون كل عُقدة حاسوبًا بذاكرة مشتركة، وتُنفَّذ بالتوازي على وحدات معالجة مركزية متعددة باستخدام OpenMP. داخل كل وحدة معالجة مركزية، تُستخدم تعليمات SIMD المتجهة (التي يُولِّدها المُصرِّف عادةً تلقائيًا) وتنفيذ التعليمات فائقة القياس (التي تُدار عادةً بشفافية بواسطة وحدة المعالجة المركزية نفسها)، مثل التجزئة واستخدام وحدات وظيفية متوازية متعددة، لتحقيق أقصى سرعة لوحدة المعالجة المركزية الواحدة.

التطبيقات

تُستخدم MPI بشكل شائع لتنفيذ SPMD. وكما ذُكر سابقًا، فهي مناسبة لأنظمة الذاكرة الموزعة (أجهزة متعددة) ولكنها تعمل أيضًا في سيناريوهات الذاكرة المشتركة (أنوية متعددة). [ 9 ]

وحدات معالجة الرسومات وغيرها من المسرعات

تُكتب معظم برامج تظليل الرسومات باستخدام نموذج برمجة SPMD: حيث يصف الكود عمليةً على عنصر واحد. ثم يُحوّل مُجمِّع التظليل هذا الكود إلى كود متوازٍ باستخدام إمكانيات التوازي التي يوفرها الجهاز (وحدات SIMD متعددة في معظم وحدات معالجة الرسومات، ووحدات SIMT متعددة في وحدات معالجة الرسومات من Nvidia). وبالمثل، يتبع CUDA نموذج SPMD/SIMT. [ 10 ] عند استهداف أجهزة SIMD، يُربط تدفق التحكم عادةً بعمليات SIMD عن طريق التنبؤ ، الذي يُقيّد أجزاء سجل المتجه التي يتم تغييرها باستخدام قناع . [ 11 ] [ 12 ] لا تمتلك وحدات معالجة الرسومات عمومًا مساحة عناوين موحدة ؛ بل تتوفر مستويات متعددة من الذاكرة، بعضها فقط مشترك بين برامج التظليل. [ 13 ]

في مكتبات التعلم الآلي Jax وPyTorch، تُستخدم خوارزمية SPMD لتوزيع العمل ( الجزء ) على أجهزة متعددة، إما تلقائيًا أو يدويًا. [ 14 ] [ 15 ] من خلال تشغيل البرنامج نفسه وظيفيًا على جميع الأجهزة، يصبح توزيع العمل التلقائي أسهل بكثير، وتقل الحاجة إلى التواصل بين الأجهزة. [ 16 ]

يُوفر Clang وضع توليد كود SPMD لدعم تفريغ OpenMP بالإضافة إلى الوضع العادي. [ 17 ] [ 18 ] يعتبر جزء OpenCL في Clang الهدف SPMD إذا كان الجهاز قادرًا على إنشاء عناصر عمل متعددة أثناء التشغيل. [ 19 ]

نواة معالج واحدة (SPMD على SIMD)

إنتل IPSC (مترجم برامج SPMD الضمني) هو مترجم مفتوح المصدر لبرامج SPMD المكتوبة بلهجة من لغة C. يحوّل هذا المترجم البرامج المدخلة، المكتوبة بنموذج SPMD أحادي الخيوط ظاهريًا، إلى كود SIMD فعال لمعالجات x86 (SSE2 إلى AVX512) أو ARM (NEON) أو Intel GPU SIMD. [ 11 ] كتب مات فار معظم أجزاء IPSC. ووفقًا له، صُمم IPSC لإنتاج مترجم يُولّد كودًا متجهيًا واسعًا جيدًا لبنى معمارية شبيهة بـ Larrabee . وقد تبيّن أن التوجيه التلقائي للمتجهات غير موثوق به، لذا تم البحث عن حل شبيه بالشيدر. [ 10 ] [ 12 ]

توفر مكتبة NSIMD واجهة SPMD، مشابهة في مفهومها لواجهة IPSC. وهي تستهدف المعالجات العددية، ومعالجات x86 (من SSE2 إلى AVX-512) SIMD، ومعالجات ARM (NEON أو SVE) SIMD، ومعالجات POWERPC VMX/VSX SIMD، وCUDA، وROCm، وOneAPI. [ 20 ]

تم إثبات SPMD-on-SIMD (على غرار IPSC) أكاديميًا على LLVM ، [ 21 ] [ 22 ] ولكن لم يتم قبول أي منها في LLVM الرسمي اعتبارًا من مارس 2026.

تاريخ

استُخدم اختصار SPMD، الذي يرمز إلى "برنامج واحد وبيانات متعددة"، لوصف نموذجين حسابيين مختلفين لاستغلال الحوسبة المتوازية، ويعود ذلك إلى كون كلا المصطلحين امتدادًا طبيعيًا لتصنيف فلين. [ 7 ] لم يكن أيٌّ من مجموعتي الباحثين على دراية باستخدام الآخر لمصطلح SPMD لوصف نماذج مختلفة من البرمجة المتوازية بشكل مستقل.

طُرح مصطلح SPMD لأول مرة عام 1983 من قِبل ميشيل أوجين (جامعة نيس صوفيا أنتيبوليس) وفرانسوا لاربي (تومسون/سينترا) في سياق حاسوب OPSILA المتوازي، وفي سياق نموذج الحوسبة المتوازية للبيانات ونموذج التفرع والدمج. [ 1 ] يتكون هذا الحاسوب من معالج رئيسي (معالج تحكم) ومعالجات SIMD (أو وضع معالج المتجهات كما اقترحه فلين). في نموذج SPMD لأوجين، تُنفَّذ المهمة نفسها (المتوازية) (" البرنامج نفسه ") على معالجات (SIMD) مختلفة (" تعمل في وضع التزامن التام ") [ 1 حيث تعمل على جزء ("شريحة") من متجه البيانات. وبالتحديد، ذكرت ورقتهم البحثية لعام 1985 [ 2 ] وأوراق أخرى [ 3 ] [ 1 ] ما يلي:

نعتمد نمط التشغيل SPMD (برنامج واحد، بيانات متعددة). يسمح هذا النمط بالتنفيذ المتزامن للمهمة نفسها (مهمة واحدة لكل معالج)، ولكنه يمنع تبادل البيانات بين المعالجات. يتم تبادل البيانات فقط في نمط SIMD عن طريق تعيينات المتجهات. نفترض أن عمليات التزامن تُختزل إلى عمليات تبديل بين نمطي التشغيل SIMD وSPMD باستخدام عمليات التفرع والدمج العامة.

في الفترة الزمنية نفسها تقريبًا (أواخر عام 1983 - أوائل عام 1984)، اقترحت فريدريكا داريما (التي كانت تعمل آنذاك في شركة IBM، وجزءًا من مجموعة RP3) مصطلح SPMD لتعريف نموذج حسابي مختلف لـ SPMD اقترحته [ 6 ] [ 5 ] [ 4 ] كنموذج برمجي طُبِّق خلال السنوات اللاحقة على نطاق واسع من الحواسيب العامة عالية الأداء (بما في ذلك RP3 - النموذج الأولي لمعالج IBM البحثي المتوازي ذي 512 معالجًا)، وأدى إلى معايير الحوسبة المتوازية الحالية. يفترض نموذج برمجة SPMD (IBM) وجود معالجات متعددة تعمل بشكل تعاوني، حيث تُنفِّذ جميعها البرنامج نفسه، ولكن يمكنها اتخاذ مسارات مختلفة خلال البرنامج بناءً على توجيهات التوازي المضمنة فيه: [ 6 ] [ 5 ] [ 4 ] [ 23 ] [ 24 ]

تُنشأ جميع العمليات المشاركة في الحوسبة المتوازية في بداية التنفيذ وتظل موجودة حتى النهاية... [المعالجات/العمليات] تُنفذ تعليمات مختلفة وتتعامل مع بيانات مختلفة... يتم تخصيص المهمة [(العمل)] التي يتعين على كل عملية القيام بها ديناميكيًا... [أي أن العمليات] تُجدول نفسها ذاتيًا لتنفيذ تعليمات مختلفة والتعامل مع بيانات مختلفة [وبالتالي تُخصص نفسها ذاتيًا للتعاون في تنفيذ المهام التسلسلية والمتوازية (وكذلك المهام المتكررة) في البرنامج].

عمّم مفهوم المعالجة مصطلح المعالج ، بحيث يمكن تنفيذ عمليات متعددة عليه (على سبيل المثال، لاستغلال درجات أكبر من التوازي لتحقيق كفاءة أعلى وتوازن أفضل للأحمال). اقترح داريما نموذج SPMD (IBM) كنهج مختلف وأكثر كفاءة من نموذج التفرع والدمج الذي كان شائعًا في ذلك الوقت؛ كما أنه أكثر شمولًا من مجرد نموذج الحوسبة "المتوازية للبيانات"، ويمكن أن يشمل نموذج التفرع والدمج (كتطبيق فرعي). كان السياق الأصلي لنموذج SPMD (IBM) هو حاسوب RP3 (النموذج الأولي لمعالج IBM البحثي المتوازي ذو 512 معالجًا)، والذي كان يدعم الحوسبة للأغراض العامة، مع ذاكرة موزعة وذاكرة مشتركة (منطقيًا). [ 23 ] قام داريما وزملاؤه في IBM بتطبيق نموذج SPMD (IBM) في بيئة EPEX (بيئة التنفيذ المتوازي)، وهي إحدى بيئات البرمجة النموذجية الأولى. [ 6 ] [ 5 ] [ 4 ] [ 23 ] [ 24 ] [ 25 ] تم إثبات فعالية (IBM) SPMD لمجموعة واسعة من التطبيقات، [ 23 ] [ 4 ] وتم تنفيذه في IBM FORTRAN في عام 1988، [ 26 ] وهو أول منتج من البائع في البرمجة المتوازية؛ وفي MPI (1991 وما بعده)، و OpenMP (1997 وما بعده)، وبيئات أخرى اعتمدت واستشهدت بنموذج (IBM) SPMD الحسابي.

بحلول أواخر ثمانينيات القرن العشرين، كان هناك العديد من الحواسيب الموزعة المزودة بمكتبات خاصة لتمرير الرسائل. وكان أول معيار لبروتوكول SPMD هو PVM ، أما المعيار الفعلي الحالي فهو MPI .

كانت توجيهات Cray المتوازية سلفًا مباشرًا لـ OpenMP .

مراجع

  1. 1 2 3 4 م. أوجين؛ ف. لاربي (1983). "أوبسيلا: نظام SIMD متقدم للتحليل العددي ومعالجة الإشارات". المعالجة الدقيقة والبرمجة الدقيقة: يوروميكرو  ؛ وقائع الندوة  ؛ الحواسيب الصغيرة: التطورات في الصناعة والأعمال والتعليم. 13-16 سبتمبر 1983. أمستردام: نورث هولاند. ISBN 0-444-86742-2.
  2. 1 2 م. أوجين؛ ف. لابري (1985). "آلة SIMD متعددة المعالجات: OPSILA". في ك. فالدشميدت؛ ب. ميرهاوغ (محرران). الحواسيب الصغيرة، الاستخدام والتصميم . أمستردام: نورث هولاند. ISBN 0-444-87835-1.
  3. 1 2 أوجين، م.؛ بويري، ف.؛ دالبان، ج.ب.؛ فنسنت-كارفور، أ. (1987). "تجربة استخدام بنية المعالج المتعدد SIMD/SPMD". المعالجة المتعددة والبرمجة الدقيقة . 21 ( 1-5 ): 171-178 . doi : 10.1016/0165-6074(87)90034-2 .
  4. 1 2 3 4 5 داريما، فريدريكا (2001). "نموذج SPMD: الماضي والحاضر والمستقبل". التطورات الحديثة في الآلة الافتراضية المتوازية وواجهة تمرير الرسائل . سلسلة محاضرات في علوم الحاسوب. المجلد 2131. ص 1. doi : 10.1007/3-540-45417-9_1 . ISBN   978-3-540-42609-7.
  5. 1 2 3 4 ف. داريما-روغرز؛ د. أ. جورج؛ ف. أ. نورتون؛ ج. ف. فايستر (23 يناير 1985). "بيئة متوازية للآلات الافتراضية". تقرير بحثي من شركة آي بي إم رقم RC 11225 (تقرير). مركز أبحاث آي بي إم تي جيه واتسون.
  6. 1 2 3 4 5 داريما، ف.؛ جورج، د.أ.؛ نورتون، ف.أ.؛ فايستر، ج.ف. (1988). "نموذج حسابي أحادي البرنامج متعدد البيانات لـ EPEX/FORTRAN". مجلة الحوسبة المتوازية . 7 : 11-24 . doi : 10.1016/0167-8191(88)90094-4 .
  7. 1 2 فلين، مايكل (1972). "بعض تنظيمات الحاسوب وفعاليتها" (ملف PDF) . معاملات IEEE في مجال الحواسيب . C-21 (9): 948-960 . doi : 10.1109/TC.1972.5009071 . S2CID 18573685 . 
  8. فلين، مايكل ج. (سبتمبر 1972). "بعض تنظيمات الحاسوب وفعاليتها" (ملف PDF) . معاملات IEEE في مجال الحواسيب . C-21 (9): 948-960 . doi : 10.1109/TC.1972.5009071 .
  9. ستراوت، إم إم؛ كريزيك، بي؛ هوفلاند، بي دي (2006). "تحليل تدفق البيانات لبرامج MPI": 175-184 . doi : 10.1109/ICPP.2006.32 .{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  10. 1 2 "قصة ISPC: الأصول (الجزء 1)" . pharr.org . 2018.
  11. 1 2 "دليل مستخدم Intel® ISPC § نموذج التنفيذ المتوازي لـ ISPC" . ispc.github.io .
  12. 1 2 فار، مات؛ مارك، ويليام ر. (مايو 2012). ispc: مُصرّف SPMD لبرمجة وحدة المعالجة المركزية عالية الأداء (ملف PDF) . مؤتمر الحوسبة المتوازية المبتكرة 2012 (InPar). الصفحات 1-13 . doi : 10.1109/InPar.2012.6339601 . 
  13. "لغة تظليل WebGPU" . www.w3.org .
  14. "دليل مستخدم PyTorch/XLA SPMD — الوثائق الرئيسية لـ PyTorch/XLA" . docs.pytorch.org .
  15. "مقدمة في البرمجة المتوازية - وثائق JAX" . docs.jax.dev .
  16. ^ شو، يوانزونغ؛ لي هيوك جونج؛ تشن، ديهاو؛ هيختمان، بليك؛ هوانغ، يانبينغ؛ جوشي، راهول. كريكون، مكسيم؛ ليبيكين، ديمتري؛ لي، آندي؛ ماجيوني، مارسيلو؛ بانغ، رومينج؛ شازير، نعوم؛ وانغ، شيبو. وانغ تاو. وو، يونغ هوي؛ تشن، زيفنغ (2021-12-23)، GSPMD: التوازي العام والقابل للتطوير للرسوم البيانية الحسابية لتعلم الآلة ، أرخايف، دوى : 10.48550/arXiv.2105.04663
  17. "دعم OpenMP - وثائق Clang 14.0.0" . releases.llvm.org .
  18. "LLVM/OpenMP Runtimes" . GitHub .
  19. "دليل مستخدم مُصرّف Clang" . بالنسبة للأهداف "غير SPMD" التي لا يمكنها إنشاء عناصر عمل متعددة أثناء التشغيل باستخدام الأجهزة، وهو ما يغطي عمليًا جميع الأجهزة غير وحدة معالجة الرسومات مثل وحدات المعالجة المركزية ووحدات معالجة الإشارات الرقمية.
  20. "وثائق NSIMD" . agenium-scale.github.io .
  21. كانديا، فيجاي؛ لوستيج، دانيال؛ فيلا، أوريستي؛ نيلانز، ديفيد؛ هاردافيلاس، نيكوس (17 فبراير 2023). الاقتصاد: تمكين برمجة SIMD/Vector في تدفقات المترجمات القياسية . CGO 2023: وقائع الندوة الدولية الحادية والعشرين لجمعية ACM/IEEE حول توليد الشفرات وتحسينها. الصفحات 186-198 . doi : 10.1145/3579990.3580019 . 
  22. كروپ، روبن؛ أوبرمان، جوليان؛ سومر، لوكاس؛ كوخ، أندرياس (فبراير 2019). توسيع LLVM لتقنية SPMD الخفيفة: استخدام تعليمات SIMD والمتجهات بسهولة من أي لغة . ندوة IEEE/ACM الدولية لعام 2019 حول توليد الشفرات وتحسينها (CGO). الصفحات 278-279 . doi : 10.1109/CGO.2019.8661165 . 
  23. 1 2 3 4 داريما، فريدريكا (1988). "بيئة تطبيقات لنموذج معالج IBM البحثي المتوازي (RP3)". الحوسبة الفائقة . سلسلة محاضرات في علوم الحاسوب. المجلد 297. الصفحات 80-95 . doi : 10.1007/3-540-18991-2_6 . ISBN   978-3-540-18991-6.
  24. 1 2 داريما، فريدريكا (1986). "تطوير التطبيقات المتوازية لأنظمة الذاكرة المشتركة". تقرير بحثي من شركة IBM رقم RC12229 (تقرير). يوركتاون هايتس، نيويورك: مركز أبحاث IBM تي جيه واتسون.
  25. جيه إم ستون؛ إف داريما-روغرز؛ في إيه نورتون؛ جي إف فايستر (30 سبتمبر 1985). "مقدمة إلى معالج فورتران المسبق VM/EPEX". تقرير بحثي من شركة آي بي إم RC11407 (تقرير). يوركتاون هايتس، نيويورك: مركز أبحاث آي بي إم تي جيه واتسون.
  26. تومي، إل جيه؛ بلاشي، إي سي؛ سكاربورو، آر جي؛ ساهولكا، آر جيه؛ شو، جيه إف؛ شانون، إيه دبليو (1988). "IBM Parallel FORTRAN". مجلة أنظمة IBM . 27 (4): 416–435 . doi : 10.1147/sj.274.0416 .