تعريفات المعالجة المسبقة للمترجم OpenCL؟
-
20-09-2019 - |
سؤال
أقوم بتطوير كود OpenCL على Snow Leopard وأدرك أن تجميع OpenCL في الوقت المناسب يتم بواسطة Clang/LLVM.هل يتم استخدام المعالج C على الإطلاق؟هل هناك طريقة لتعيين تعريفات المعالجة المسبقة مع المترجم؟ما هي التعريفات الموجودة؟
أود أن يكون الكود على علم بما إذا كان قد تم تجميعه لوحدة المعالجة المركزية أو وحدة معالجة الرسومات حتى أتمكن على سبيل المثال من استخدام عبارات printf لتصحيح الأخطاء.
المحلول
ال clBuildProgram
تأخذ واجهة برمجة التطبيقات وسيطات المترجم (ملف const char * options
معامل).
-D MYMACRO
ومن المفهوم، لذلك هو -D MYMACRO=value
.
بالنسبة لوحدات الماكرو المحددة مسبقًا، راجع مواصفات OpenCL للحصول على قائمة كاملة (القسم 6.9).قائمة غير شاملة:
__FILE__
__LINE__
__OPENCL_VERSION__
نصائح أخرى
ويمكنك أيضا استخدام OpenCL "المعالج" لتحديد التعاريف (كما هو الحال في C):
#define dot3(x1, y1, z1, x2, y2, z2) ((x1)*(x2) + (y1)*(y2) + (z1)*(z2))
و(لاحظ الأقواس، فهي مهم لأنك يمكن إدراج أي التعبير في المتغيرات والتعبير يحصل تقييمها بشكل صحيح)
وهذا يساعد على تحسين سرعة التطبيق الخاص بك.