# برنامج واحد متعدد البيانات

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

## SPMD مقابل SIMD

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

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

يشير SPMD عادة إلى برمجة تمرير الرسائل على بنيات ذاكرة الحاسوب الموزعة. يتكون حاسوب الذاكرة الموزعة من مجموعة من الحواسيب المستقلة، تسمى بالعقد. تبدأ كل عقدة برنامجها الخاص وتتواصل مع العقد الأخرى عن طريق إرسال واستقبال الرسائل، استدعاء إجراءات الإرسال والتلقي لهذا الغرض. يمكن أيضًا تنفيذ التزامن في الحاجز بواسطة الرسائل. يمكن إرسال الرسائل بواسطة عدد من آليات الاتصال، مثل TCP / IP عبر الإيثرنت، أو الوصلات المتخصصة عالية السرعة مثل Myrinet وSupercomputer Interconnect . يتم تنفيذ المقاطع التسلسلية للبرنامج عن طريق حساب متطابق على جميع العقد بدلاً من حساب النتيجة على عقدة واحدة وإرسالها إلى الآخرين.
في الوقت الحاضر، يتم عزل المبرمج عن تفاصيل الرسالة التي تمر عبر واجهات قياسية، مثل PVM و MPI.
الذاكرة الموزعة هي أسلوب البرمجة المستخدم على أجهزة الكمبيوتر العملاقة المتوازية من مجموعات بيولف محلية المنشأ إلى أكبر المجموعات على Teragrid.

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

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

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

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

## التاريخ

تم اقتراح SPMD (برنامج واحد متعدد البيانات) لأول مرة في عام 1983 من قبل ميشيل أوغوين (جامعة نيس صوفيا-أنتيبوليس) وفرانسوا لاربي (طومسون / سينترا) في كمبيوتر OPSILA الموازي ثم في عام 1984 من قِبل فريديريكا داريما في شركة آي بي أم لأجهزة متوازية للغاية مثل RP3 ( النموذج الأولي لمعالج أبحاث IBM) في مذكرة IBM غير منشورة. بحلول أواخر ثمانينيات القرن العشرين، كان هناك العديد من أجهزة الكمبيوتر الموزعة التي تحتوي على رسائل مملوكة للمكتبات. أول SPMD قياسي كان PVM (آلة افتراضية موازية). المعيار الفعلي الحالي هو واجهة تمرير الرسائل (MPI).
كانت توجيهات كراي الموازية سابقة مباشرة لبرنامج OpenMP.