سؤال

هل البرمجة الموازية == برمجة MultiThread؟

هل كانت مفيدة؟

المحلول

البرمجة المتعددة المرتبات متوازية ، لكن البرمجة الموازية ليست بالضرورة متعددة مؤشرات الترابط.

ما لم يحدث Multithreading على قلب واحد ، وفي هذه الحالة يكون متزامنًا فقط.

نصائح أخرى

لا بالضرورة. يمكنك توزيع الوظائف بين عمليات متعددة وحتى آلات متعددة - لن أقوم بتصنيف البرمجة "متعددة الخيوط" لأن كل عملية قد تستخدم فقط موضوع واحد ، لكنها بالتأكيد برمجة موازية. من المسلم به أنه يمكنك القول أنه مع وجود عمليات متعددة ، توجد مؤشرات ترابط متعددة داخل النظام ككل ...

في النهاية ، تعتبر التعريفات مثل هذه مفيدة فقط في السياق. في حالتك الخاصة ، ما الفرق الذي سيحدثه؟ أم أن هذا بدافع الاهتمام؟

لا. البرمجة المتعددة تعني أن لديك عملية واحدة ، وأن هذه العملية تولد مجموعة من المواضيع. تعمل جميع مؤشرات الترابط في نفس الوقت ، لكنها جميعها تحت نفس مساحة العملية: يمكنهم الوصول إلى نفس الذاكرة ، ولديها نفس واصفات الملف المفتوح ، وما إلى ذلك.

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

في المقابل ، يحقق OpenMP التوازي عبر multithreading و shared-memory. يمكنك تحديد توجيهات خاصة للمترجم ، ويقوم بتنفيذ متوازي تلقائيًا.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top