NPS ، الناقل ، الحوسبة التلقائية ومرة ​​أخرى ... coroutines

1. مرة أخرى حول coroutines


في مقالتي السابقة ، عزيزي هابر ، تطرقت فقط إلى مشاكل المعرفة بالبرمجة الحديثة. أكدت المناقشة التي تلت ذلك فقط المخاوف العفوية التي نشأت: أصبحت "الأسس النظرية" سيئة السمعة على الفور مصدرًا للخلاف. حقيقة أنها (الخلافات) قد لا تكون موجودة أو أنها ستكون ذات طبيعة مختلفة لا يبدو أنها تزعج معظم المبرمجين "الحقيقيين". علاوة على ذلك ، ربما أنها ليست مثيرة للاهتمام بشكل خاص ، لأنه يتم تحفيز المبرمجين بشكل رئيسي من خلال مصلحة واحدة - رمز ، رمز ، ورمز فقط. حسنًا ، تقريبًا "كما وصفه الطبيب" [1] ...

فيما يتعلق بموضوع الكوروتين في مقالتي وتعليقاتي ، لم أحلم على الإطلاق بمدى ما هي عليه في الاتجاه "الحالي". مندهش ، مع ذلك ، "مسارات الدعم" لتعليقاتي مع أو بدون. لماذا يقولون المبرمجين؟ ومع ذلك ، يبدو لي أن كل شيء أصبح واضحًا بعد قراءة المقالة حول C ++ 20 المعتمدة حديثًا واحتمالات تطويرها الإضافي [2]. لدهشتي ، اتضح أن coroutines في طليعة الابتكارات الحالية والمستقبلية من بلدي المحبوب C ++ (انظر أيضا مكتبة CppCoro ).

حسنًا ، أخبرني ، هل من الممكن أن تأخذ جبينًا و / أو بهدوء جبينًا ، على ما يبدو ، يتخيل نفسه على أنه أي شخص؟ ضرب ما يسمى! :(

خلفية معرفتي بالكوروتينات (سأدعوهم جميعا بالطريقة القديمة) هي كما يلي. كانت هناك حاجة للتوازي ، ولكن لم يكن هناك شيء مناسب. اضطررت إلى اختراع ودراسة الأدبيات المتاحة. ونتيجة لذلك ، تم رفض coroutines على الفور ، والخيوط في وقت لاحق. والسبب هو أن كلاهما طرق هيكلية لموازاة البرامج ، وليس نماذج حسابية. لكني لم أرد ذلك.

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

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

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

2. أشكال التوازي وخطوط الأنابيب المتوازية


افترض أنك بحاجة إلى حساب التعبير:

y = (((a + b) * (c + d)) + ((e * f) + (q + h))).

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

t1 = a + b؛ t2 = c + d ؛ t3 = e * f ؛ t4 = q + h ؛
المستوى 0: t1 ؛ t2 ؛ t3 ؛ t4 ؛
المستوى 1: t5 = t1 * t2 ؛ t6 = t3 + t4 ؛
المستوى 2: t7 = t5 + t6 ؛

بيانياً ، يظهر هذا في الشكل. 1 ، الذي يوضح خيارين لتوزيع الحسابات في المستويات ووقت الحساب الملصق في القراد. تشير المقارنة إلى أنه في الحالة العامة ، لا يعني انخفاض عدد المستويات تلقائيًا انخفاضًا في وقت الحساب.

صورة
تين. 1. شكل متوازي المستوى لحساب التعبير.

ولكن يمكن النظر في خيار آخر ، والذي يمثله بالفعل العديد من الأشكال المتوازية المستوى التي تحل مشكلة واحدة. في التين. يوضح الشكل 2 مثل هذا الحل. لقد انخفض وقت الحساب. موازاة مصادر القدرة النووية يمكن أن تكون جذابة أيضًا مع مراعاة تنفيذها على أنظمة متعددة المعالجات.

صورة
تين. 2. NPS الموازية

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

صورة
تين. 3. نموذج خط الأنابيب

نظرًا لأن هذا المثال المنفصل عن هذا المثال هو 5 دورات ساعة ، فإن وقت الحساب سيكون أسوأ من أسوأ إصدار من NPS. مزايا خط الأنابيب فقط في استمرارية الحسابات.

3. نموذج آلي لحساب التعبيرات


إذا قمت بإزالة القيود المفروضة على مزامنة العمليات ، فيمكن تحويل NPS إلى دائرة ستولد النتيجة كخط أنابيب ، ولكن دون قيود تتعلق بتسلسل العمليات ووقتها. يوضح الشكل التالي مخطط الشبكة المنطقي مع توضيح لعملية الإضافة (تنفيذ الضرب مشابه) في شكل نموذج لشبكة مركبة فضائية. 4.

صورة
الشكل. 4. حسابات التعبيرات القائمة على شبكة من أجهزة الحالة المحدودة

يمكنك أن ترى أن الشبكة ستنتج باستمرار نتيجة مع تأخير 7 دورات ساعة ، أي وكذلك أسرع نموذج NPS (الشكل 7). تشمل عيوبه عدم استقرار المخرجات المرتبطة بسباقات البيانات. على سبيل المثال ، سيؤدي التغيير المتزامن في قيمة المتغيرات في أزواج المتغيرات g و h و e و f إلى تغيير في t4 في دورة الساعة التالية ، بعد دورة ساعة واحدة إلى تغيير في المتغير t6 ودورة ساعة أخرى إلى متغير الإخراج t7 (انظر الشكل 1 والشكل 4) . في نفس الوقت ، بعد 5 دورات ساعة ، سيتغير المتغير t3 ، مما سيؤدي إلى التغيير وإخراج القيم المحددة أخيرًا للمتغيرات t6 ، t7.

صورة
تين. 5. نمذجة NPS مع شبكة من الأتمتة

في التين. يوضح الشكل 5 كيف أن إدخال كتلة إضافية يجعل من الممكن محاكاة حساب NPS. وبالمثل ، يمكنك محاكاة نموذج الحوسبة عبر خط الأنابيب ، وكذلك منع التغيير في الناتج المرتبط بسباقات البيانات.

3. الاستنتاجات


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

لن أتعب من تكرار أنني منجذب إلى مفهوم البرمجة المرئية المنفذة في حزمة Stateflow في MATLAB. هنا يمكنك أيضًا إنشاء عمليات التشغيل الآلي اللازمة ، وبعد ذلك ، باستخدامها ، مثل الكتل القياسية ، "ارسم" مخطط حساب لأي تعبير ، والذي سيتحول بعد التجميع إلى برنامج عمل (على سبيل المثال ، في نفس لغة C ++). في نفس الوقت ، أثناء عملية التصميم ، ستكون أدوات التصور والتصحيح متاحة خاصة بتكنولوجيا البرمجة الآلية.

صحيح ، قد يطرح السؤال - لماذا الروابط الدائمة لبيئة غير معروفة معينة من CPSU ، إذا كان هناك تدفق الدولة؟ لكننا سنتحدث عن هذا بشكل منفصل حتى الآن ...

إنه شيء ناكر للجميل أن أقوم بالتنبؤات ، ولكن مع ذلك ، استنادًا إلى تجربتي ، سأعبر عن تفكير مثير للفتن: كلغات عالية المستوى تُستخدم لرفض برمجة لغة التجميع ، لذلك البرمجة المرئية عاجلاً أم آجلاً وليس أقل مزاحمة البرمجة بلغات عالية المستوى.

الأدب

1. المبرمجون ، دعنا ندرس مصادر البرامج الكلاسيكية. [المصدر الإلكتروني] ، وضع الوصول: habr.com/en/post/488808 مجانًا. ياز. الروسية (تاريخ العلاج 02.22.2020).
2. تمت الموافقة على C ++ 20! ما يمكن توقعه وما يجب الاستعداد له لمطوري C ++ 23. [المورد الإلكتروني] ، وضع الوصول:habr.com/en/company/yandex/blog/488588 مجانًا. ياز. الروسية (تاريخ العلاج 02.20.2020).

All Articles