سؤال

لقد واجهت وقتًا عصيبًا في إعداد تجربة حيث أقوم بتخصيص الذاكرة مع CUDA على الجهاز ، وأخذ هذا المؤشر إلى الذاكرة على الجهاز ، واستخدامها في OpenCL ، وإرجاع النتائج. أريد أن أرى ما إذا كان هذا ممكنًا. لقد واجهت وقتًا عصيبًا في الحصول على مشروع CUDA للعمل ، لذا استخدمت للتو مشروع قالب NVIDIA في SDK. في makefile أضفت -lopencl إلى قسم libs من common.mk. كل شيء على ما يرام عندما أفعل ذلك ، لكن عندما أضيف #include <CL/cl.h> إلى template.cu حتى أتمكن من البدء في إجراء مكالمات OpenCL ، أحصل على أكثر من 100 خطأ. تبدو جميعها مشابهة لهذا ، ولكن مع أسماء وظائف مختلفة في النهاية:

/usr/lib/gcc/x86_64-linux-gnU/4.1

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

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

المحلول

لم أعمل حقًا مع CUDA ، لذلك لا أعرف مدى فائدة إجابتي.

من ما أفهمه ، تحاول استخدام OpenCL مباشرة من رمز HostCode CUDA الخاص بك ، وهو إذا كنت أتذكر بشكل صحيح تم تجميعه باستخدام بعض التحويل البرمجي من NVIDIA بدلاً من ذلك GCC القياسي. لذا فإن المشكلة هي على الأرجح أن هذا المترجم لا ينفذ المدمجات الضرورية للعمل مع الرؤوس المذكورة. انظر هنا لمشكلة مماثلة وحلها:http://forums.nvidia.com/lofiversion/index.php؟t88573.html

يبدو أنه يجب عليك وضع كل ما يحتاج إلى API OpenCL في وحدة تجميع مختلفة (غير CUDA) بحيث يتم تجميعها بواسطة برنامج التحويل البرمجي غير NVIDIA.

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

ما يمكن أن تجربه إذا كنت تريد حقًا استخدام OpenGL لـ Interop ، نظرًا لأن كل من OpenCl و CUDA لديهما امتدادات للسماح بإنشاء مخازن مؤقتة من مخازن المؤقتة OpenGL.

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

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