performance - لديك - معرفة نقاط القوة والضعف في الشخصية




متى تتغلب توازي إرلانج على نقاط الضعف في الحوسبة الرقمية؟ (4)

هل هناك نقطة تحول حيث تتغلب قوة إرلانج على ضعف السرعة المحلي؟

حسنا، بالطبع هناك. على سبيل المثال ، عند محاولة العثور على وسيط رقم تريليون :):

http://matpalm.com/median/question.html

قبل النشر مباشرة ، لاحظت أن هذا هو المنشور رقم 1 على erlang.reddit.com.

مع كل هذه الضجة حول الحوسبة المتوازية مؤخرًا ، كنت أفكر كثيرًا في التوازي ، وعدد الأعداد ، والمجموعات ، إلخ ...

لقد بدأت القراءة تتعلم بعض Erlang . نظرًا لأن المزيد من الناس يتعلمون (من بينهم أنا شخصياً) ، فإن Erlang يتعامل مع التزامن بطريقة رائعة جدًا وأنيقة.

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

هل الأمر حقا بذلك السوء؟ هل هناك نقطة تحول حيث تتغلب قوة إرلانج على ضعف السرعة المحلي؟ هل / ما هي التدابير التي يتم اتخاذها للتعامل مع السرعة؟

أن أكون واضحا: أنا لا أحاول بدء مناقشة ؛ انا فقط اريد ان اعرف.


أعتقد أن الحاجة الأوسع هي الإشارة إلى أن التوازي لا يعني بالضرورة أو حتى السرعة.

يتعلق الأمر بكيفية التعبير عن الخوارزميات أو البرامج التي يتم فيها ترتيب تسلسل الأنشطة جزئيًا.


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

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

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

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

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


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

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

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

يجب عليك اتباع HiPe للتطوير.

يبدو لي أن أمثلة التلاعب بالصور ومضاعفات المصفوفات تطابقات سيئة للغاية مع Erlang. هذه هي الأمثلة التي تستفيد من عمليات ناقلات / SIMD. إرلانج ليس جيدًا في التوازي (حيث يفعل المرء نفس الشيء لقيم متعددة في وقت واحد).

عمليات إرلانج هي MIMD ، تعليمات متعددة بيانات متعددة. يقوم Erlang بالكثير من المتفرعة خلف مطابقة النمط والحلقات العودية. أن يقتل الأنابيب تعليمات وحدة المعالجة المركزية.

أفضل بنية للمشاكل المتشابكة بشكل كبير هي وحدات معالجة الرسومات. بالنسبة لبرمجة وحدات معالجة الرسومات بلغة وظيفية ، أرى أفضل الإمكانات في استخدام Haskell لإنشاء برامج تستهدفهم. GPU هي في الأساس وظيفة خالصة من إدخال البيانات إلى إخراج البيانات. انظر مشروع Lava في Haskell لإنشاء دوائر FPGA ، إذا كان من الممكن إنشاء دوائر نظيفة للغاية في Haskell ، فلن يكون من الصعب إنشاء بيانات برنامج لوحدات معالجة الرسومات.

بنية الخلية لطيفة جداً للمشاكل vectorizable كذلك.







erlang