هل هناك أي تجارب مع كتل بناء الترابط من Intel؟[مغلق]

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

  •  01-07-2019
  •  | 
  •  

سؤال

إنتل خيوط البناء (TBB) المكتبة مفتوحة المصدر تبدو مثيرة للاهتمام حقًا.على الرغم من وجود حتى كتاب أورايلي حول هذا الموضوع لا أسمع عن الكثير من الناس الذين يستخدمونه.أنا مهتم باستخدامه لبعض التطبيقات المتوازية متعددة المستويات (MPI + Threads) في بيئات Unix (Mac وLinux وما إلى ذلك).بالنسبة لما يستحقه الأمر، فأنا مهتم بأنواع تطبيقات الحوسبة/الطرق العددية عالية الأداء.

هل لدى أي شخص تجارب مع TBB؟هل يعمل بشكل جيد؟هل هو محمول إلى حد ما (بما في ذلك دول مجلس التعاون الخليجي والمترجمين الآخرين)؟هل يعمل النموذج بشكل جيد مع البرامج التي كتبتها؟هل هناك مكتبات أخرى يجب أن أبحث فيها؟

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

المحلول

لقد أدخلته في قاعدة الأكواد الخاصة بنا لأننا كنا بحاجة إلى bettor malloc لاستخدامه عندما انتقلنا إلى جهاز مكون من 16 نواة.مع 8 وتحت ذلك لم تكن مشكلة كبيرة.لقد عملت بشكل جيد بالنسبة لنا.نحن نخطط لاستخدام الحاويات المتزامنة ذات الحبيبات الدقيقة بعد ذلك.ومن الناحية المثالية، يمكننا الاستفادة من الجوهر الحقيقي للمنتج، ولكن ذلك يتطلب إعادة التفكير في كيفية بناء الكود الخاص بنا.تعجبني حقًا الأفكار الموجودة في TBB، لكن ليس من السهل تعديلها على قاعدة التعليمات البرمجية.

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

نحن نعمل في Visual Studio وهو يعمل بشكل جيد.تمت كتابته في الأصل لنظام التشغيل Linux/pthreads لذا فهو يعمل بشكل جيد هناك أيضًا.

نصائح أخرى

أنا لا أقوم بالحوسبة الرقمية ولكني أعمل في مجال التنقيب عن البيانات (فكر في التجميع والتصنيف)، ومن المحتمل أن تكون أعباء العمل لدينا متشابهة:جميع البيانات ثابتة وتكون لديك في بداية البرنامج.لقد قمت بالتحقيق لفترة وجيزة في TBB من Intel ووجدت أنها مبالغة في تلبية احتياجاتي.بعد البدء بالكود الأولي المستند إلى pthread، قمت بالتبديل إلى OPENMP وحصلت على المزيج الصحيح بين سهولة القراءة والأداء.

قابلية التنقل

TBB محمول.وهو يدعم Intel و AMD (أي.x86) ومعالجات IBM PowerPC وPOWER ومعالجات ARM وربما غيرها.إذا نظرت في بناء الدليل, ، يمكنك رؤية جميع التكوينات التي يدعمها نظام البناء، والتي تتضمن مجموعة واسعة من أنظمة التشغيل (Linux، Windows، Android، MacOS، iOS، FreeBSD، AIX، وما إلى ذلك) والمترجمات (GCC، Intel، Clang/LLVM، IBM XL، الخ).لم أجرب TBB مع مترجم PGI C++ وأعلم أنه لا يعمل مع مترجم Cray C++ (اعتبارًا من 2017).

قبل بضع سنوات، كنت جزءًا من الجهود المبذولة لنقل TBB إلى أنظمة IBM Blue Gene.كان الارتباط الثابت يمثل تحديًا، ولكن تمت معالجته الآن بواسطة big_iron.inc مساعد بناء النظام.كانت المشكلات الأخرى هي دعم الإصدارات القديمة نسبيًا من دول مجلس التعاون الخليجي (4.1 و4.4) والتأكد من عمل ذرات PowerPC.أتوقع أن يكون النقل إلى أي بنية غير مدعومة حاليًا أمرًا مباشرًا نسبيًا على الأنظمة الأساسية التي توفر أو تتوافق مع دول مجلس التعاون الخليجي وPOSIX.

الاستخدام في رموز المجتمع

أنا على علم بوجود إطارين لتطبيق HPC على الأقل يستخدمان TBB:

لا أعرف كيف يستخدم MOOSE TBB، لكن MADNESS يستخدم TBB في قائمة انتظار المهام ومخصص الذاكرة.

الأداء مقابل نماذج الخيوط الأخرى

لقد استخدمت شخصيا TBB في حبات البحوث الموازية المشروع، والذي قمت من خلاله بمقارنة TBB بـ OpenMP وOpenCL وKokkos وRAJA وC++17 Parallel STL ونماذج أخرى.انظر الدليل الفرعي C++ للتفاصيل.

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

PRK stencil

الكشف الكامل:أعمل لدى شركة Intel في مجال البحث/اكتشاف المسار.

لقد استخدمت TBB لفترة وجيزة، وربما سأستخدمه أكثر في المستقبل.لقد أحببت استخدامه، والأهم من ذلك أنه ليس عليك التعامل مع وحدات الماكرو/امتدادات لغة C++، ولكنك تظل ضمن اللغة.كما أنها محمولة جدًا.لقد استخدمته على كل من ويندوز ولينكس.شيء واحد رغم ذلك:من الصعب العمل مع سلاسل الرسائل باستخدام TBB، وسيتعين عليك التفكير فيما يتعلق بالمهام (وهو أمر جيد في الواقع).لن يدعم Intel TBB استخدامك للأقفال العارية (سيجعل هذا الأمر مملاً).لكن بشكل عام، هذه هي تجربتي الأولية.

أوصي أيضًا بإلقاء نظرة على openMP 3 أيضًا.

ZThread هو LGPL، ويقتصر استخدام المكتبة في الارتباط الديناميكي إذا لم تكن تعمل في مشروع مفتوح المصدر.

The Threading Building Blocks (TBB) في الإصدار مفتوح المصدر (هناك إصدار تجاري جديد بسعر 299 دولارًا، لا تعرف الاختلافات بعد) هو الإصدار 2 من ترخيص GNU العام مع ما يسمى "استثناء وقت التشغيل" (وهذا مخصص للاستخدام فقط في إنشاء برامج مجانية.)لقد رأيت استثناءات أخرى لوقت التشغيل تحاول التعامل مع LGPL ولكنها تتيح الاستخدام التجاري والربط الثابت ليس هو الآن القضية.

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


Txs، Jihn للإشارة إلى هذا التحديث ...

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

إنه مكتمل إلى حد ما مع العديد من خيارات إرسال الخيط، وجميع فئات المزامنة المعتادة وآلية "مقاطعة" الخيط المستندة إلى الاستثناء سهلة الاستخدام للغاية.إنها قابلة للتمديد بسهولة ومكتوبة وموثقة بشكل جيد.لقد استخدمته في أكثر من 20 مشروعًا.
كما أنه يعمل بشكل جيد مع أي * NIX يدعم سلاسل POSIX بالإضافة إلى Windows.

تستحق نظرة.

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

من الجدير أن نكون واضحين ما هو TBB (Threading Building Blocks) للمقارنة مع البدائل الأخرى (على سبيل المثال.ميزات التزامن C++ 11x).TBB هي مكتبة محمولة وقابلة للتطوير (وليست امتدادًا للمترجم) تسمح لك بكتابة التعليمات البرمجية الخاصة بك في شكل مهام خفيفة الوزن ستجدول TBB تشغيلها بأسرع ما يمكن على موارد وحدة المعالجة المركزية المتاحة.لم يتم تصميم خيوط الدعم المصممة لأغراض أخرى (على سبيل المثال.الشفعة).

لقد استخدمت TBB لتسريع معالجة الصور الحالية للحلقات عبر خطوط مسح الصور في حلقات متوازية (ما لا يقل عن 2-4 خطوط مسح بحجم "الحبيبات").لقد كان هذا ناجحا جدا.إنه يتطلب (إعادة) كتابة نص الحلقة الخاص بك لمعالجة فهرس تعسفي بدلاً من افتراض معالجة كل نص حلقة بالتسلسل (على سبيل المثال.المؤشرات التي تتزايد بين كل تكرار للحلقة).

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

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

هل نظرت إلى يعزز المكتبة معها واجهة برمجة تطبيقات الموضوع?

لبنات بناء الخيوط (TBB) في الإصدار المفتوح المصدر ، (هناك نسخة تجارية جديدة ، 299 دولارًا ، لا تعرف الاختلافات بعد) هو الإصدار 2 من ترخيص GNU العام مع ما يسمى "استثناء وقت التشغيل" (وهذا هو خاص بالاستخدام فقط على إنشاء برنامج مجاني.) لقد رأيت استثناءات أخرى في وقت التشغيل تحاول التعامل مع LGPL ولكن تمكين الاستخدام comercial وربط هذا ليس هو الحال.

وفقا لهذا سؤال يمكن استخدام كتل بناء الترابط دون قيود حقوق النسخ مع الاستخدام التجاري.

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