تشغيل opencl على الأجهزة من البائعين المختلطين

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

  •  21-09-2019
  •  | 
  •  

سؤال

لقد كنت ألعب مع تطبيق ATI Opencl في Beta Stream 2.0. يستخدم OpenCL في الإصدار التجريبي الحالي فقط وحدة المعالجة المركزية في الوقت الحالي ، ومن المفترض أن يدعم الإصدار التالي نواة GPU. قمت بتنزيل Stream لأن لدي GPU ATI في آلة عملي.

أكتب برامج من شأنها أن تستفيد بشكل كبير من المكاسب باستخدام وحدة معالجة الرسومات. ومع ذلك ، يعمل هذا البرنامج على آلات العملاء ، فليس لدي الرفاهية (مثل العديد من بيئات الحوسبة العلمية) لاختيار الأجهزة الدقيقة التي يجب تطويرها لذلك. لذا فإن سؤالي هو ، إذا قمت بتوزيع تطبيق ATI Opencl مع طلبي ، فهل يعني ذلك أنه لن يتمكن أبدًا من استخدام بطاقات الفيديو على سبيل المثال؟ وإذا استخدمت NVIDIA OPENCL SDK ، فلن يتم تشغيله على النحو الأمثل على رقائق AMD (بالنظر إلى رابط ATI/AMD)؟

بعبارة أخرى ، من هو المسؤول عن توفير تطبيق OpenCL؟ هل سيتمكن المستخدمون من تثبيت "برنامج تشغيل" opencl لبطاقة فيديو NVIDIA الخاصة بهم ، إلى جانب "برنامج تشغيل" يمنحهم الأداء الأمثل على وحدة المعالجة المركزية AMD الخاصة بهم؟

جانبا ، هل هناك أي منتديات دعم جيدة/نشطة لـ Opencl بصرف النظر عن لوحات رسائل Khronos ، أم أن هذا هو المكان المناسب للذهاب؟ لقد رأيت أن ATI لديها لوحة ، ويفترض أن NVIDIA لديها خاصة بها ، أين يتسكع مجتمع مستخدم/مطور OpenCL؟ هل تم دمجها بالفعل في مكان واحد؟

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

المحلول

في النهاية ، ستعمل OpenCl بنفس طريقة OpenGL. أي أن المستخدمين سيقومون بتثبيت برامج التشغيل الحالية من بائعي الأجهزة (ATI ، NVIDIA ، Intel). أنت كمطور سوف يرتبط ببساطة مع مكتبة OpenCl عند إنشاء طلباتك. عندما يقوم المستخدمون بتشغيل التطبيق الخاص بك ، سيتم إعادة توجيه التطبيق إلى مكتبات محددة للبائع المناسبة التي توفرها برامج التشغيل.

هذه هي الطريقة التي ستعمل بها ، لكنها لا تعمل بعد بهذه الطريقة.

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

نصائح أخرى

أعلم أن هذا سؤال قديم مع إجابات قديمة أعلاه. اعتقدت أنني سأقوم بتحديثه بإجابة محدثة.

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

يمكن للناس أن يحصلوا على أكثر من منصة واحدة. على سبيل المثال ، يحتوي نظامي على GTX 580 SLI ، لذلك يحتوي على جهازين في منصة NVIDIA. كما أنه يحتوي على Intel Opencl SDK ، لذا فإن وحدة المعالجة المركزية Corei7 990X Extreme تأتي أيضًا كجهاز في منصة Intel.

نعم ، ستعمل ثنائي تم تطويره وبنته باستخدام ، على سبيل المثال ، NVIDIA Opencl SDK ، على ATI أو Intel Opencl ، والعكس بالعكس. لا داعي للقلق بشأن ذلك بعد الآن.

من الواضح أن المستخدم النهائي قد لا يحتوي على opencl على الإطلاق ، لذلك قد تحتاج إلى تأخير أو تحميل OpenCl.dll و Dynamic Link.

أقترح فقط اختبار الكود الخاص بك مقابل Intel Opencl SDK ، على وحدات معالجة الرسومات Nvidia ، وعلى وحدات معالجة الرسومات AMD. من المحتمل أن تجد الأخطاء التي تسبب مشاكل على منصة واحدة ، ولكنها تعمل بشكل جيد على الآخرين. من المحتمل أيضًا أن تجد أن الرمز الرائع تمامًا في ظروف غامضة لا يعطي نتائج صحيحة على أحد تلك المنصات ، بسبب أخطاء السائقين.

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