هل يؤثر لي في ظهور البنية متعددة النسكنات كمطور برمجيات؟

StackOverflow https://stackoverflow.com/questions/567528

  •  05-09-2019
  •  | 
  •  

سؤال

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

سؤالي لذلك:
How to deal with increasing multicore presence in day-by-day hacking?

هل كانت مفيدة؟

المحلول

نصائح أخرى

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

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

تعلم فوائد التزامن والحدود (مثل قانون امدح).

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

انتهى الغداء المجاني، لكن هذا لا يعني أنه لا يوجد شيء استغلاله.

بشكل عام، تصبح ودية للغاية مع الخيوط. إنها آلية رهيبة للتوازي، لكن هذا ما لدينا.

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

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

أعتقد أنه سيعتمد على أي نوع من التطبيقات التي تكتبها.

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

تعلم Erlang / f # (اعتمادا على منصتك)

  • تفضل هياكل بيانات ثابتة، واستخدامها يجعل البرامج أسهل لفهمها ليس فقط في البرامج المتزامنة.

  • تعلم أدوات التزامن بلغتك (مثل Java.util.concurrent، jcip.).

  • تعلم لغة وظيفية (على سبيل المثال haskell.).

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

تعلم OpenMP و MPI ل C و C ++ Code.

ينطبق OpenMP أيضا على لغات أخرى مثل Fortran أفترض.

اكتب برامج أصغر.

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

لذلك، احصل على عادة كسر مشاكلك إلى مكونات مستقلة يمكن تشغيلها كلما أردت.

ستقوم ببناء برنامج أكثر صراحة أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top