سؤال

قل أننا نريد تجميع مشروع كبير (قل دول مجلس التعاون الخليجي أو نواة Linux) بأسرع وقت ممكن. هل تم تشغيل وحدة المعالجة المركزية مع إمكانية فرط التصدير (قل INTEL CORE I7) برنامج التحويل البرمجي بشكل أسرع مع تمكين Hyperthreading أو معطيل؟ هل هناك أي معايير منشورة لاختبار هذا؟

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

لذلك للحصول على عبء عبء التحويل البرمجي، هل زيادة الأداء؟ إذا كان الأمر كذلك، كم؟

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

المحلول

تجميع COREUTILS-8.4 على Ubuntu 8.04 X86

Intel Atom 1.6 GHz مع HT ممكن:

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.375s
user    2m22.873s
sys     0m10.541s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.707s
user    3m26.121s
sys     0m13.821s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    2m33.372s
user    2m22.753s
sys     0m10.657s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    1m54.851s
user    3m26.145s
sys     0m13.685s
~/coreutils-8.4$

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

وهنا تجربة تحكم لإظهار ذلك make -j2 وحده لا يحسن السرعة لتجميع COREUTILS-8.4 على Ubuntu 8.04 X86

واحد النواة الأساسية 2 رباعية 2.5 جيجاهرتز VM (لا HT):

~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.453s
user    0m38.870s
sys     0m5.500s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.131s
user    0m40.450s
sys     0m4.580s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make > /dev/null

real    0m44.621s
user    0m39.090s
sys     0m5.340s
~/coreutils-8.4$ make clean > /dev/null
~/coreutils-8.4$ time make -j2 > /dev/null

real    0m45.165s
user    0m40.390s
sys     0m4.610s
~/coreutils-8.4$

نصائح أخرى

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

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