برنامج واحد متعدد البيانات
{{تصنيف فلين}}
في [[حوسبة|الحوسبة]]، '''SPMD''' ('''برنامج واحد، متعدد البيانات''') هي تقنية تستخدم لتحقيق [[حوسبة متوازية|التوازي]]. وهي فئة فرعية من [[تعليمات متعددة بيانات متعددة|تعليمات متعددة بيانات متعددة MIMD]]. يتم تقسيم المهام وتشغيلها في وقت واحد على معالجات متعددة ذات مدخلات مختلفة من أجل الحصول على النتائج بطريقة أسرع. ويُعد SPMD النمط الأكثر شيوعًا في البرمجة المتوازية.<ref>[https://xlinux.nist.gov/dads/HTML/singleprogrm.html single program multiple data<!-- عنوان مولد بالبوت -->] {{Webarchive|url=https://web.archive.org/web/20181013022708/https://xlinux.nist.gov/dads/HTML/singleprogrm.html |date=13 أكتوبر 2018}}</ref> كما أنه شرط أساسي لمفاهيم البحث مثل الرسائل النشطة [[ذاكرة مشتركة موزعة|والذاكرة المشتركة الموزعة]].

[[ملف:SPMD Model.png|يسار|250بك]]
== 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 الموازي <ref>M. Auguin، F. Larbey، OPSILA : SIMD المتقدمة للتحليل العددي ومعالجة الإشارات ، في الحواسيب الصغيرة : التطورات في الصناعة والأعمال والتعليم / ندوة يوروميكو التاسعة حول المعالجة الدقيقة والبرمجة الصغرية ، ص 311-318 مدريد ، 13-16 سبتمبر 1983</ref> ثم في عام 1984 من قِبل فريديريكا داريما في [[آي بي إم|شركة آي بي أم]] لأجهزة متوازية للغاية مثل RP3 ( النموذج الأولي لمعالج أبحاث IBM) في مذكرة IBM غير منشورة.<ref>F. Darema ، ''نموذج SPMD: الماضي والحاضر والمستقبل'' ، التطورات الحديثة في الجهاز الظاهري الموازي وواجهة تمرير الرسائل: الاجتماع الثامن لمجموعة مستخدمي PVM / MPI الأوروبي ، سانتوريني / ثيرا ، اليونان ، 23-26 سبتمبر 2001.</ref> بحلول أواخر ثمانينيات القرن العشرين، كان هناك العديد من أجهزة الكمبيوتر الموزعة التي تحتوي على رسائل مملوكة للمكتبات. أول SPMD قياسي كان PVM (آلة افتراضية موازية). المعيار الفعلي الحالي هو [[واجهة تمرير الرسائل|واجهة تمرير الرسائل (MPI)]].

كانت توجيهات [[كراي (شركة)|كراي]] الموازية سابقة مباشرة لبرنامج [[أوبن أم بي|OpenMP]].

== المراجع ==
{{مراجع}}
{{مراجع}}

== روابط خارجية ==

* [https://web.archive.org/web/20061207085642/http://www.cisl.ucar.edu/docs/ibm/ref/parallel.html Parallel job management and message passing][http://www.cisl.ucar.edu/docs/ibm/ref/parallel.html]
* [https://web.archive.org/web/20040604110624/http://www.llnl.gov/casc/Overture/henshaw/documentation/App/manual/node36.html Single Program Multiple Data stream][http://www.llnl.gov/casc/Overture/henshaw/documentation/App/manual/node36.html]
* [https://web.archive.org/web/20150802043058/http://web0.tc.cornell.edu/Services/Education/Topics/Parallel/Design/SPMD.aspx SPMD][http://web0.tc.cornell.edu/Services/Education/Topics/Parallel/Design/SPMD.aspx]
* [https://web.archive.org/web/20170217064322/https://math.nist.gov/~KRemington/Primer/distrib.html Distributed-memory programming][https://web.archive.org/web/20170217064322/http://math.nist.gov/~KRemington/Primer/distrib.html]
{{حوسبة متوازية}}
{{شريط بوابات|تقنية المعلومات}}

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

يسار|250بك
 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 الموازي M. Auguin، F. Larbey، OPSILA : SIMD المتقدمة للتحليل العددي ومعالجة الإشارات ، في الحواسيب الصغيرة : التطورات في الصناعة والأعمال والتعليم / ندوة يوروميكو التاسعة حول المعالجة الدقيقة والبرمجة الصغرية ، ص 311-318 مدريد ، 13-16 سبتمبر 1983 ثم في عام 1984 من قِبل فريديريكا داريما في شركة آي بي أم لأجهزة متوازية للغاية مثل RP3 ( النموذج الأولي لمعالج أبحاث IBM) في مذكرة IBM غير منشورة.F. Darema ، نموذج SPMD: الماضي والحاضر والمستقبل ، التطورات الحديثة في الجهاز الظاهري الموازي وواجهة تمرير الرسائل: الاجتماع الثامن لمجموعة مستخدمي PVM / MPI الأوروبي ، سانتوريني / ثيرا ، اليونان ، 23-26 سبتمبر 2001. بحلول أواخر ثمانينيات القرن العشرين، كان هناك العديد من أجهزة الكمبيوتر الموزعة التي تحتوي على رسائل مملوكة للمكتبات. أول SPMD قياسي كان PVM (آلة افتراضية موازية). المعيار الفعلي الحالي هو واجهة تمرير الرسائل (MPI).

كانت توجيهات كراي الموازية سابقة مباشرة لبرنامج OpenMP.

 المراجع 

 روابط خارجية 

 Parallel job management and message passing
 Single Program Multiple Data stream
 SPMD
 Distributed-memory programming

تصنيف:أصناف الحواسيب
تصنيف:تصنيف فلين
تصنيف:حوسبة متوازية