C++ الموازاة المكتبات:OpenMP مقابلموضوع اللبنات [مغلقة]

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

سؤال

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

يبدو لي أن كلا OpenMP و إنتل موضوع اللبنات هي مناسبة بشكل جيد للغاية لهذا المنصب.أيضا, وكلاهما معتمدة من قبل Visual Studio C++ compiler والأكثر شعبية أخرى المجمعين.و كل المكتبات تبدو على التوالي إلى الأمام لاستخدام.

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

شكرا

أدريان

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

المحلول

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

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

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

نصائح أخرى

من إنتل بلوق البرمجيات: قارن ويندوز* المواضيع ، OpenMP* Intel® خيوط لبنات البرمجة المتوازية

بل هو أيضا مسألة أسلوب - بالنسبة لي TBB جدا C++ مثل, بينما أنا لا أحب OpenMP pragmas كثيرا (أدخنة ج قليلا, ولكن إذا كان لي أن أكتب في ج).

وأود أن تنظر أيضا في القائمة المعرفة والخبرة من الفريق.التعلم مكتبة جديدة (خصوصا عندما يتعلق الأمر خيوط/التزامن) يستغرق بعض الوقت.أعتقد أن الآن ، OpenMP هو معروف على نطاق واسع ونشر من TBB (ولكن هذا مجرد لي رأي).

ولكن هناك عامل آخر - ولكن بالنظر الأكثر شيوعا منصات ربما لا مشكلة - قابلية.ولكن الترخيص قد يكون مشكلة.

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

وأيضا، TBB وقانون الزواج لا يتعارضان.

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

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

وكان عموما بلدي تفضيل شخصي لقانون الزواج، لا سيما في ضوء زيادة التعبير مع المهام.

وViva64 الروابط: بالتوازي البرمجة

نعم، TBB هو أكثر C ++ ودية مع قانون الزواج هو أكثر ملاءمة لرمز على غرار FORTRAN C نظرا تصميمه بكثير. ميزة مهمة جديدة في قانون الزواج تبدو مثيرة جدا للاهتمام، بينما في الوقت نفسه الكائن امدا وظيفة في C ++ 0X قد تجعل TBB أسهل للاستخدام.

وفي Visual Studio 2008، يمكنك إضافة السطر التالي إلى أي بشكل مواز "ل" الحلقة. بل انه يعمل مع متعددة متداخلة لحلقات. هنا مثال:

#pragma omp parallel for private(i,j)
for (i=0; i<num_particles; i++)
{
  p[i].fitness = fitnessFunction(p[i].present);
  if (p[i].fitness > p[i].pbestFitness)
  { 
     p[i].pbestFitness = p[i].fitness;
     for (j=0; j<p[i].numVars; j++) p[i].pbest[j] = p[i].present[j];
  }
}  
gbest = pso_get_best(num_particles, p);

وبعد أن أضاف بالتوازي #pragma المرصد المغربي للسجون، سواء النوى على بلدي كور 2 ديو استخدمت لأقصى قدراتها، لذلك ذهب إجمالي استخدام وحدة المعالجة المركزية من 50٪ إلى 100٪.

وبقدر ما أعرف، TBB (هناك هو النسخة مفتوحة المصدر تحت GLPv2 بشكل افايابلي) عناوين أكثر من C ++ C ثم منطقة. هذه الأوقات فإنه من الصعب أن تجد C ++ وOOP العام الموازاة Informations.The محددة أكثر ادريسيس الاشياء الفنية مثل ج (نفسه على CUDA أو OpenCL). إذا كنت بحاجة إلى دعم C ++ ليذهب الموازاة لTBB!

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