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



معرفة نقاط القوة والضعف في الشخصية (4)

تقريبا أي لغة يمكن أن تكون متوازية. في بعض اللغات يكون الأمر بسيطًا ، وفي لغات أخرى يكون الألم في المؤخر ، لكن يمكن القيام به. إذا كنت ترغب في تشغيل برنامج C ++ عبر 8000 وحدة المعالجة المركزية في شبكة ، والمضي قدما! تستطيع فعل ذلك. لقد تم ذلك من قبل.

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

ما يفعله إرلانج هو جعل هذا النوع من التوازي سهل التعامل معه . أنه يوفر وقت المطور ويقلل من فرصة الخلل.

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

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

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

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

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

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

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

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


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

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

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

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


هناك ضغط لجعل 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