التوازي بين المهام
التوازي في تنفيذ المهام (المعروف أيضًا بالتوازي في تنفيذ الوظائف والتوازي في تنفيذ التحكم ) هو شكل من أشكال موازاة شيفرة الحاسوب عبر معالجات متعددة في بيئات الحوسبة المتوازية . يركز التوازي في تنفيذ المهام على توزيع المهام - التي تُنفذها العمليات أو الخيوط بشكل متزامن - عبر معالجات مختلفة. وعلى عكس التوازي في تنفيذ البيانات ، الذي يتضمن تشغيل المهمة نفسها على مكونات بيانات مختلفة، يتميز التوازي في تنفيذ المهام بتشغيل العديد من المهام المختلفة في الوقت نفسه على البيانات نفسها. [ 1 ] ومن أنواع التوازي في تنفيذ المهام الشائعة تقنية التوازي المتسلسل ، التي تتضمن نقل مجموعة بيانات واحدة عبر سلسلة من المهام المنفصلة، حيث يمكن لكل مهمة أن تُنفذ بشكل مستقل عن الأخرى.
وصف
في نظام متعدد المعالجات، تتحقق التوازي في تنفيذ المهام عندما يُنفذ كل معالج سلسلة عمليات (أو عملية) مختلفة على نفس البيانات أو بيانات مختلفة. قد تُنفذ سلاسل العمليات نفس التعليمات البرمجية أو تعليمات برمجية مختلفة. في الحالة العامة، تتواصل سلاسل العمليات المختلفة فيما بينها أثناء عملها، ولكن هذا ليس شرطًا. عادةً ما يتم التواصل عن طريق تمرير البيانات من سلسلة عمليات إلى أخرى كجزء من سير العمل . [ 2 ]
كمثال بسيط، إذا كان النظام يُشغّل برنامجًا على معالجين ( CPU "أ" و"ب") في بيئة متوازية ، ونرغب في تنفيذ المهمتين "أ" و"ب"، فمن الممكن توجيه المعالج "أ" لتنفيذ المهمة "أ" والمعالج "ب" لتنفيذ المهمة "ب" في آنٍ واحد، مما يُقلل من وقت التنفيذ. ويمكن إسناد المهام باستخدام عبارات شرطية كما هو موضح أدناه.
يركز التوازي في المهام على الطبيعة الموزعة (المتوازية) للمعالجة (أي الخيوط)، على عكس البيانات ( التوازي في البيانات ). تقع معظم البرامج الحقيقية في مكان ما على متصل بين التوازي في المهام والتوازي في البيانات. [ 3 ]
التوازي على مستوى الخيوط ( TLP ) هو التوازي المتأصل في التطبيقات التي تُشغّل خيوطًا متعددة في آنٍ واحد. ويُلاحظ هذا النوع من التوازي بشكلٍ كبير في التطبيقات المصممة للخوادم التجارية ، مثل قواعد البيانات. وبفضل تشغيل العديد من الخيوط في وقتٍ واحد، تستطيع هذه التطبيقات تحمّل الكميات الكبيرة من عمليات الإدخال/الإخراج وزمن استجابة نظام الذاكرة التي قد تتكبدها أحمال العمل الخاصة بها؛ فبينما يتأخر أحد الخيوط في انتظار الوصول إلى الذاكرة أو القرص، تستطيع الخيوط الأخرى إنجاز مهامها بكفاءة.
بدأ استغلال التوازي على مستوى الخيوط في الانتشار في سوق الحواسيب المكتبية مع ظهور المعالجات الدقيقة متعددة النوى . ويعود ذلك إلى أنه، لأسباب مختلفة، أصبح من غير العملي بشكل متزايد زيادة سرعة الساعة أو عدد التعليمات لكل دورة ساعة لنواة واحدة. إذا استمر هذا التوجه، فسيتعين تصميم تطبيقات جديدة تستخدم خيوطًا متعددة للاستفادة من الزيادة في القدرة الحاسوبية المحتملة. وهذا يختلف عن ابتكارات المعالجات الدقيقة السابقة التي كانت تُسرّع فيها التعليمات البرمجية الموجودة تلقائيًا بتشغيلها على حاسوب أحدث/أسرع.
مثال
يوضح الكود الزائف أدناه التوازي في تنفيذ المهام:
برنامج: ... إذا كانت وحدة المعالجة المركزية = "أ" قم بتنفيذ المهمة "أ" وإلا إذا كان CPU="b" قم بتنفيذ المهمة "ب" نهاية الشرط ... نهاية البرنامج
يهدف البرنامج إلى إنجاز مهمة إجمالية ("أ + ب"). إذا كتبنا الكود كما هو موضح أعلاه وشغلناه على نظام ثنائي المعالجات، فسيقوم بيئة التشغيل بتنفيذه على النحو التالي.
- في نظام SPMD (برنامج واحد، بيانات متعددة)، سيقوم كلا المعالجين بتنفيذ التعليمات البرمجية.
- في بيئة متوازية، سيتمكن كلاهما من الوصول إلى نفس البيانات.
- تُفرّق عبارة "if" بين وحدات المعالجة المركزية. ستقرأ وحدة المعالجة المركزية "a" القيمة "صحيح" في عبارة "if"، وستقرأ وحدة المعالجة المركزية "b" القيمة "صحيح" في عبارة "else if"، وبالتالي سيكون لكل منهما مهمتها الخاصة.
- الآن، يقوم كلا المعالجين بتنفيذ كتل برمجية منفصلة في وقت واحد، ويؤديان مهامًا مختلفة في نفس الوقت.
الكود الذي تم تنفيذه بواسطة وحدة المعالجة المركزية "أ":
برنامج: ... قم بتنفيذ المهمة "أ" ... نهاية البرنامج
الكود الذي تم تنفيذه بواسطة وحدة المعالجة المركزية "ب":
برنامج: ... قم بتنفيذ المهمة "ب" ... نهاية البرنامج
يمكن الآن تعميم هذا المفهوم ليشمل أي عدد من المعالجات.
الدعم اللغوي
يمكن دعم التوازي في المهام في لغات البرمجة العامة إما من خلال وظائف مدمجة أو مكتبات. ومن الأمثلة البارزة على ذلك:
- آدا: المهام (مدمجة)
- لغة سي++ (إنتل): لبنات بناء الخيوط
- سي++ (إنتل): سيلك بلس
- C++ (مفتوح المصدر/أباتشي 2.0): مكتبة RaftLib
- C، C++، Objective-C، Swift (Apple): Grand Central Dispatch
- د : المهام والألياف
- دلفي (System.Threading.TParallel)
- Go: goroutines
- جافا: التزامن في جافا
- مكتبة المهام المتوازية .NET
يمكن العثور على أمثلة للغات المتوازية ذات التفاصيل الدقيقة في مجال لغات وصف الأجهزة مثل Verilog و VHDL .
انظر أيضاً
مراجع
- ↑ ريندرز، جيمس (10 سبتمبر 2007). "فهم التوازي بين المهام والبيانات" . ZDNet . تم الاطلاع عليه بتاريخ 8 مايو 2017 .
- ↑ كوين، مايكل ج. (2007). البرمجة المتوازية بلغة C باستخدام MPI و OpenMP (تحرير تاتا ماكجرو هيل ). نيودلهي: دار نشر تاتا ماكجرو هيل. ISBN 978-0070582019.
- ↑ هيكس، مايكل. "أساسيات التزامن" (ملف PDF) . جامعة ميريلاند: قسم علوم الحاسوب . تم الاطلاع عليه بتاريخ 8 مايو 2017 .
- الحوسبة المتوازية
- الخيوط (الحوسبة)
