سؤال

لو قانون مور يحمل صحيحا، وتصبح وحدة المعالجة المركزية / GPUs بسرعة بشكل متزايد، وستلزم البرمجيات (وعن طريق الجمعية، أنت مطوري البرامج) على دفع الحدود إلى الحد الذي لا تزال بحاجة إلى تحسين الكود الخاص بك؟ أو سوف يكون الحل الفني ساذج جيدا بما يكفي لرمزك (إلخ)؟

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

المحلول

يمكن أن تتغلب رمز ضعيف دائما سرعة وحدة المعالجة المركزية.

مثال ممتاز، انتقل إلى هذا الترميز الرعب العمود والتمرير لأسفل إلى القسم الذي يصف الكتاب لآلئ البرمجة. وبعد مستنسخة هناك رسم بياني يوضح كيف، للحصول على خوارزمية معينة، يمكن ل TRS-80 مع معالج 8 بت بقوة 4.77 ميجا هرتز بفوز رقاقة ألفا 32 بت.TRS-80 vs. Alpha

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

القول "لا توجد مشكلة في أن القوة الغاشمة والجهل لا يمكن التغلب عليها" ليست صحيحة دائما.

نصائح أخرى

2X قوة المعالجة لا تفعل الكثير لتخفيف ربح بحثك Lousy N ^ 2.

أجهزة الكمبيوتر السريعة تحصل، كلما نتوقع أن يفعلهم.

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

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

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

قانون ويرث:

البرامج أصبحت أبطأ بسرعة أكبر من الأجهزة تصبح أسرع.

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

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

  1. مشاكل مع الاحتياجات الحاسوبية المحددة.
  2. مشاكل مع الاحتياجات الحسابية غير المحدودة.

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

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

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

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

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

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

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

ستستمر الأميون في حاجة إلى حالات كثيرة، خاصة:

  • أنظمة الوقت الحقيقي، حيث يكون وقت وحدة المعالجة المركزية في قسط

  • الأنظمة المضمنة، حيث الذاكرة هي الذاكرة في قسط

  • الخوادم، حيث تتطلب العديد من العمليات الاهتمام في وقت واحد

  • الألعاب، حيث يمكن أن تجعل تتبع ثلاثي الأبعاد، الصوت، AI، والشبكات برنامجا مطالبا للغاية

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

تغيير استراتيجيات التحسين عند إضافة المزيد من السرعة / الذاكرة / الموارد للعمل معها، رغم ذلك.

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

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

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

سرعة الكمبيوتر لا يمكن دائما التغلب على الخطأ البشري. قد تكون الأسئلة صيغة "سوف تصبح وحدة المعالجة المركزية سريعة بما فيه الكفاية أن الجواطع يمكن أن تأخذ الوقت للقبض (والإصلاح) مشاكل التنفيذ. "من الواضح أنه سيكون هناك حاجة إلى تحسين الكود (للمستقبل المنظور) لإصلاحه shlemiel الرساممشاكل tetype.

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

يتمتع،

روبرت C. Cartaino.

الكمبيوتر يشبه غرفة المراهقين.

لن تكون كبيرة بما يكفي لعقد كل غير المرغوب فيه.

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

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

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

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

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

الأمثل سيكون مهما للمستقبل الفوري. لكن، التحسينات الصغيرة أقل أهمية بكثير مما كانوا عليه. الأمثل الأكثر أهمية في هذه الأيام قد يكون اختيار الخوارزمية. هل تختار O (N Log N) أو O (n ^ 2) .... إلخ.

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

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

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

نعم، نحن في النقطة التي يكون فيها الأمثل وسيكون هناك في المستقبل المنظور. لان:

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

دعونا نأمل سرعات الشبكة مواكبة حتى نتمكن من مجرفة بيانات كافية عبر السلك لمواكبة وحدات المعالجة المركزية ...

كما ذكر، سيكون هناك دائما الاختناقات

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

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

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

ليس من الصعب :-)

على الرغم من أن وحدات المعالجة المركزية تصبح أسرع وأسرع، يمكنك دائما تحسين

  • سرعة الإنتاجية،
  • يسعى القرص،
  • إستخدام القرص،
  • استخدام الذاكرة،
  • معاملات قاعدة البيانات،
  • عدد مكالمات النظام،
  • جدولة وقفل الحبيبية،
  • جمع القمامة.

(هذا هو أمثلة العالم الحقيقي الذي رأيته خلال النصف الأخير من العام).

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

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