ذاكرة الملمس opencl
-
21-09-2019 - |
سؤال
أنا جديد إلى حد ما على Opencl ، لذا يرجى تحمل معي.
في التكرار الأول للرمز الخاص بي ، استخدمت مخازن الذاكرة الأساسية لمجموعات البيانات الكبيرة وأعلنتها عالمية. ومع ذلك ، بعد أن أتطلع إلى تحسين التوقيت ، أردت استخدام ذاكرة الملمس لهذا الغرض. في إصدار CUDA ، نستخدم CudabindTexture و Tex1DFetch للحصول على البيانات الخاصة بصفيف تعويم كبير 1D. من فهمي للمواصفات ، فإن ذاكرة الملمس هي نفس الشيء مثل ذاكرة الصورة. ومع ذلك ، نظرًا لوجود كائنات صورة ثنائية الأبعاد وثلاثي الأبعاد مع أقصى ارتفاعات وعرضها ، أواجه بعض المشكلات. صفيف بلدي أكبر من الحد الأقصى للارتفاع/العرض ، ولكن ليس الحد الأقصى للارتفاع * الحد الأقصى عرض. هل يجب أن أقوم بتحويل صفيف 1D الخاص بي إلى 2D؟ أو هل هناك طريقة أفضل للقيام بذلك؟
أم أنا خارج تماما؟
لقد قرأت http://forums.nvidia.com/index.php؟showtopic=151743 و http://forums.nvidia.com/index.php؟showtopic=150454 لكنهم لم يكونوا قاطعين تمامًا فيما إذا كانت ذاكرة الملمس المشار إليها في أفضل الممارسات ودليل البرمجة كانت في الواقع كائنات صورة.
شكرا وأي مساعدة/اقتراحات موضع ترحيب كبير!
المحلول
لقد وجدت أفضل إجابة كرد على مشاركتي في منتدى Nvidia هنا.
نصائح أخرى
صفيف بلدي أكبر من الحد الأقصى للارتفاع/العرض ، ولكن ليس الحد الأقصى للارتفاع * الحد الأقصى عرض. هل يجب أن أقوم بتحويل صفيف 1D الخاص بي إلى 2D؟
نعم ، تحتوي أجهزة الملمس على قيود على أقصى قيم الفهرس. إذا تجاوزت هذه القيم ، فستحتاج إلى تحويل إلى استخدام قيم فهرس متعددة.
ومع ذلك ، لا يعني أن التحويل إلى الوصول إلى الملمس سيؤدي إلى تسريع برنامجك.
OpenCl 1.2 يدعم القوام 1D. المشكلة هي NVIDIA تدعم OPENCL 1.1 فقط على عكس AMD أو Intel ...