تشاؤم حول multithreading

التزامن الضخمة والأجهزة هي المواضيع الساخنة في القرن 21st. هناك عدة أسباب وجيهة لهذا ، واحد حزين إلى حد ما.

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

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

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

أولاً ، عليك أن تفهم بوضوح أين تعمل التوازي مع الأجهزة بشكل أفضل ولماذا. دعونا نلقي نظرة على حسابات الرسومات والشبكات العصبية ومعالجة الإشارات وتعدين البيتكوين. هناك نمط: خوارزميات التوازي تعمل بشكل أفضل على المعدات المصممة خصيصًا لتشغيلها ؛ (ب) لا تستطيع فعل أي شيء آخر!

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

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

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

نتيجةً لذلك ، يمكننا صياغة مجريات إرشادية بسيطة: فرص استخدام الحوسبة المتوازية تتناسب عكسياً مع درجة اللامركزية الدلالة غير القابلة للاختزال في بيانات الإدخال.

من القيود الأخرى للحوسبة المتوازية أن بعض الخوارزميات المهمة لا يمكن موازنتها على الإطلاق - حتى من الناحية النظرية. عندما ناقشت هذا الموضوع لأول مرة على مدونتي ، توصلت إلى مصطلح "الخوارزمية المريضة" ، حيث يشير SICK إلى "المسلسل ، Intrinscally - Cope ، Kiddo!" من الأمثلة المهمة ما يلي: خوارزمية ديكسترا لإيجاد أقصر الطرق ؛ الكشف عن الدورات في الرسوم البيانية الموجهة (باستخدام 3-SAT في المذيبات) ؛ بحث عميق حساب العضو nth في سلسلة التجزئة التشفير ؛ تحسين دفق الشبكة ... وهذه ليست قائمة كاملة.

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

وهنا يأتي القفل: لا يمكنك موازاة أي شيء أثناء عمل خوارزمية SICK.

لم ننته هناك ما لا يقل عن فئتين من العقبات ، وتلك الشائعة جدا.

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

إذا كنت محظوظًا ، فستحصل على مجموعة أكثر استيعابًا من الأوليات ، مثل قنوات Go (المعروفة أيضًا باسم Communicating Sequences Processes) أو نظام Rust / owner / التزامن Rust. ولكن في الواقع ، لا نعرف ما هي اللغة "الصحيحة" للأولويات لتنفيذ التوازي على فن فون نيومان. ربما لا يوجد حتى مجموعة واحدة من الأوليات الصحيحة. ربما تكون مجموعتان أو ثلاث مجموعات مختلفة مناسبة لمناطق المشكلة المختلفة ، لكنها غير قابلة للاستبدال كوحدة وجذر مربع من مجموعتين. حتى الآن ، في عام 2018 لا أحد يعرف حقا.

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

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

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

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

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

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

فيما يلي أسباب هذه الشكوك:

  1. تحدث الحوسبة المتوازية الخطيرة على أجهزة كمبيوتر سطح المكتب / الكمبيوتر المحمول فقط على وحدة معالجة الرسومات.
  2. أكثر من اثنين من النوى في المعالج عادة ما تكون عديمة الفائدة. يمكن أن تقوم أنظمة التشغيل بتوزيع تدفقات التطبيقات ، لكن البرنامج العادي لا يمكنه استخدام التزامن ، ونادراً ما يتمكن معظم المستخدمين من تشغيل عدد كبير من التطبيقات المختلفة التي تستهلك الكثير من موارد وحدة المعالجة المركزية في وقت واحد لتحميل معداتهم بالكامل.
  3. وبالتالي ، فإن معظم الأنظمة رباعية النوى لا تفعل معظم الوقت سوى توليد الحرارة.

بين قرائي ، هناك العديد من الأشخاص الذين من المحتمل أن يكونوا قادرين على التعليق بشكل معقول على هذه الفرضية. ومن المثير للاهتمام أن نرى ما يقولون.

تحديث أشار المعلق على G + إلى فائدة واحدة مثيرة للاهتمام من المعالجات متعددة النواة: فهي تقوم بتجميع التعليمات البرمجية بسرعة كبيرة. تحتوي شفرة المصدر للغات مثل C على مكان جيد: هنا ، يتم تجميع الوحدات المفصولة جيدًا (الملفات المصدر) في ملفات الكائنات ، والتي يجمعها الرابط.

Source: https://habr.com/ru/post/ar434698/


All Articles