Visual Studio 2010 ، الحد الأقصى من مجموعات C ++ المتزامنة للمعالجات ذات الخيوط المفرطة

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

سؤال

أحاول تحسين وقت الترجمة لمشروع كبير VC ++. معالجي هو Core i7 950 (4 مراكز ، 8 خيوط لأنه يدعم تقنية Intel Hyper-Threading Technology).

في Microsoft Visual Studio 2010 ، إذا انتقلت إلى أدوات> خيارات> المشاريع والحلول> إعدادات مشروع VC ++> الحد الأقصى لتكميلات C ++ المتزامنة

يمكنك تحديد الحد الأقصى من أنوية وحدة المعالجة المركزية لاستخدامها في تجميع C ++ المتوازي. أختار 0 هناك (بحيث يتم استخدام جميع النوى) ، مما ينتج عنه نفس النتائج تمامًا كما هو الحال عند استخدام 4 أو 8.

الآن ، إذا فتحت مدير المهام أثناء تجميع المشروع ، فيمكنني أن أرى أنه يتم تشغيل 4 سلاسل تجميع متوازية (ضمن العمليات ، لديهم الوصف: Microsoft C / C ++ Compiler Driver) ، وأن إجمالي استخدام وحدة المعالجة المركزية هو أقل بقليل من 50٪ طوال الوقت.

إذن سؤالي هو:

هل من الممكن أن يكون لديك 8 سلاسل تجميع متوازية في معالج رباعي النواة شديد الترابط؟ إذا لم يكن ذلك ممكنًا ، فهل من الممكن بطريقة ما استخدام ما يقرب من 100٪ من طاقة المعالج أثناء التجميع؟

سيوفر هذا لي قدرًا كبيرًا من الوقت.

شكرًا جزيلاً مقدمًا ،

نيكولاس

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

المحلول

سيوفر هذا لي قدرًا كبيرًا من الوقت.

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

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


حسنًا ، ما سبق يوضح سبب عدم حصولك على مكاسب كبيرة من Hyperthreading and homogenous code الحكمة التقليدية للعملية المتوازية هي تعيين عدد الوظائف أكبر بواحد من عدد النوى ، بافتراض أن عمليات 1 / N تقوم على الأرجح بإدخال / إخراج القرص. بالطبع ، هذا من أجل Unix حيث تقوم الوظيفة بالكثير من معالجة ملفات makefile بالإضافة إلى التجميع الفعلي.

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

نصائح أخرى

ربما يرجع ذلك إلى محدودية القرص بدلاً من وحدة المعالجة المركزية المحدودة.

أعتقد أن هذه مشكلة في الاستوديو المرئي.حاول تشغيل ملفات makefiles الخاصة بك باستخدام "jom" استنساخ nmake الموازي.يجب أن تلاحظ زيادة بنسبة 35٪ عند استخدامه أكثر من msvc يسمى للتجميع باستخدام 4 مراكز.

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