". "، حيث اعترف بأن النمو الأسي للكميات المادية لفترة طويلة أمر مستحيل. فقط تطور الترانزستورات وتقنيات التصنيع الخاصة بها جعل من الممكن تمديد القانون لعدة أجيال أخرى.
في عام 2007 ، صرح مور أنه من الواضح أن القانون سيتوقف عن العمل قريبًا بسبب الطبيعة الذرية للمادة وسرعة الحد من الضوء. حاليًا ، يبلغ الحد الأقصى لحجم الترانزستور في المعالج 5 نانومتر. هناك أيضًا عينات تجريبية من المعالج 3 نانومتر ، لكن إطلاقه لن يبدأ حتى عام 2021. يشير هذا إلى أن الزيادة الإضافية في عدد الترانزستورات على رقاقة ستتوقف قريبًا (حتى يتم اكتشاف مادة جديدة أو تحديث العملية التكنولوجية بشكل جذري).
أحد حلول هذه المشكلة هو الحوسبة المتوازية. يُفهم هذا المصطلح على أنه طريقة لتنظيم حسابات الكمبيوتر التي يتم فيها تطوير البرامج كمجموعة من العمليات الحسابية المتفاعلة التي تعمل بالتوازي (في وقت واحد).
الحوسبة المتوازية بطريقة المزامنة تنقسم إلى نوعين.
في المتغير الأول ، يحدث تفاعل العمليات من خلال الذاكرة المشتركة: يتم تشغيل سلسلة منفصلة للتنفيذ على كل معالج للنظام متعدد المعالجات. كل المواضيع تنتمي إلى عملية واحدة. تتبادل الخيوط البيانات من خلال منطقة ذاكرة مشتركة لعملية معينة. عدد الخيوط يتوافق مع عدد المعالجات. يتم إنشاء التدفقات إما عن طريق لغة برمجة (على سبيل المثال ، Java ، C # ، C ++ منذ C ++ 11 ، C منذ C11) ، أو باستخدام المكتبات. في هذه الحالة ، من الممكن إنشاء خيوط صريحة (على سبيل المثال ، في C / C ++ باستخدام PThreads) ، بشكل تصريحي (على سبيل المثال ، باستخدام مكتبة OpenMP) ، أو تلقائيًا - باستخدام أدوات مترجم مضمنة (على سبيل المثال ، High Performance Fortran). عادةً ما يتطلب المتغير الموصوف للبرمجة المتوازية شكلاً من أشكال التقاط التحكم (كائنات المزامنة ، إشارات ،المراقبين) لتنسيق التدفقات فيما بينهم.
في المتغير الثاني ، يتم إجراء التفاعل باستخدام إرسال الرسائل. تبدأ العملية أحادية الخيوط على كل معالج في نظام متعدد المعالجات ، والذي يتواصل مع العمليات الأخرى التي تعمل على معالجات أخرى باستخدام الرسائل. يتم إنشاء العمليات بشكل صريح عن طريق استدعاء الوظيفة المناسبة لنظام التشغيل ، ويتم تبادل الرسائل باستخدام مكتبة خاصة (على سبيل المثال ، تنفيذ بروتوكول MPI) ، أو باستخدام أدوات اللغة (على سبيل المثال ، High Performance Fortran أو Erlang أو occam).
بالإضافة إلى الخيارين الموصوفين أعلاه ، يتم استخدام الخيار المختلط أيضًا: في الأنظمة متعددة المعالجات ذات الذاكرة الموزعة (DM-MIMD) ، حيث تكون كل عقدة في النظام متعددة المعالجات بذاكرة مشتركة (SM-MIMD) ، يمكن استخدام النهج التالي. يتم تشغيل عملية متعددة الخيوط على كل عقدة في النظام ، والتي توزع الخيوط بين معالجات هذه العقدة. يتم تبادل البيانات بين الخيوط على عقدة من خلال الذاكرة المشتركة ، ويتم تبادل البيانات بين العقد من خلال نقل الرسائل. في هذه الحالة ، يتم تحديد عدد العمليات من خلال عدد العقد ، ويتم تحديد عدد الخيوط حسب عدد المعالجات في كل عقدة. تعتبر الطريقة الهجينة للبرمجة المتوازية أكثر تعقيدًا (يلزم إعادة كتابة البرنامج المتوازي بطريقة خاصة) ، ولكنها أكثر فاعلية في استخدام موارد الأجهزة لكل عقدة في النظام متعدد المعالجات.
في هذه المقالة ، أقترح تكييف مثل هذا النهج الهجين لموازنة الحسابات في بايثون. السمة الرئيسية للعمل هي استخدام تقنية حاويات الرصيف. سيكون للإطار قيد التطوير بنية خادم-عميل ، والتي تتضمن العناصر التالية.
من جانب العميل:
- Serializer: وفقًا للاسم ، يقوم بتسلسل الوظائف ومتغيراتها (أي أنه يسمح بحفظها في جهاز خارجي أو شبكة ثم تحميلها في الذاكرة على نفس العقدة أو عقدة أخرى). يجدر أيضًا إبراز أداة التزيين المتوازية ، وهي وظيفة غلاف تتيح لك استخدام جهاز التسلسل لوظائف من أنواع مختلفة.
- فئات لتكوين اتصال الخادم / الكتلة
- تسهيلات لغوية إضافية لتمييز الوظائف المراد موازنتها.
جانب الخادم:
- جهاز إلغاء التسلسل - وفقًا لذلك ، يلغي تسلسل البيانات المستلمة (انظر أعلاه)
- Executor هي فئة تعالج البيانات غير المتسلسلة (الوظائف ووسائطها) ، بالإضافة إلى تثبيت المكتبات الضرورية في البيئة الافتراضية لمترجم Python.
يظهر الشكل العام للبنية العامة للنظام الجاري تطويره.
للتواصل بين العميل والخادم ، يمكن استخدام المقابس أو الإطار الملتوي ، والذي سيتم التفاعل معه من خلال API المطور.
يفترض تنفيذ هذا النظام استخدام تقنية عامل الإرساء. يتيح لك ذلك توفير الراحة والسرعة العالية لتكوين البرنامج للبدء: ما عليك سوى بدء مجموعة docker-swarm ، ونشر صورة عامل الإرساء على الخادم المحدد وتعيين عدد التكرارات.
تتمثل المزايا المهمة الأخرى لاستخدام تقنية docker في إنشاء بيئة حوسبة متجانسة من خلال محاكاة نظام يشبه UNIX افتراضيًا (Ubuntu - خفيف الوزن Alpine Linux) ، بالإضافة إلى وجود وضع سرب ، والذي يسمح لك بتشغيل حاويات متعددة على خوادم مختلفة وموازنة الحمل بسرعة عن طريق نقل المهام إلى حاويات مجانية ...
يمكن استخدام إطار العمل المطور في مناطق مختلفة حيث يكون مطلوبًا لإجراء كميات كبيرة من العمليات الحسابية بلغة Python ، بما في ذلك التعلم الآلي ومهام تحليل البيانات العميقة ، بالإضافة إلى المهام الأبسط ، على سبيل المثال ، للتحقق من القرار الموزع أثناء مسابقات البرمجة.