سؤال

أنا أخصيص المخزن المؤقت CL_MEM على GPU والعمل عليه، والذي يعمل بشكل جيد حتى يتم تجاوز حجم معين. في هذه الحالة ينجح التخصيص نفسه، ولكن التنفيذ أو النسخ لا. أرغب في استخدام ذاكرة الجهاز لعملية أسرع حتى أخصص مثل:

buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);

الآن ما لا أفهمه هو الحد الأقصى للحجم. أنا نسخ حوالي 16 ميجابايت ولكن يجب أن تكون قادرة على استخدام حوالي 128 ميجابايت (انظر CL_DEVICE_MAX_MEM_ALLOC_SIZE ).

لماذا تختلف هذه الأرقام كثيرا؟


إليك بعض مقتطفات من Ocldevicequery:

 CL_PLATFORM_NAME:  NVIDIA
 CL_PLATFORM_VERSION:  OpenCL 1.0 
 OpenCL SDK Version:  4788711

  CL_DEVICE_NAME:          GeForce 8600 GTS
  CL_DEVICE_TYPE:          CL_DEVICE_TYPE_GPU
  CL_DEVICE_ADDRESS_BITS:              32
  CL_DEVICE_MAX_MEM_ALLOC_SIZE:  128 MByte
  CL_DEVICE_GLOBAL_MEM_SIZE:     255 MByte
  CL_DEVICE_LOCAL_MEM_TYPE:      local
  CL_DEVICE_LOCAL_MEM_SIZE:      16 KByte
  CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:  64 KByte
هل كانت مفيدة؟

المحلول

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

بالنسبة إلى الحد من 16 ميغابايت، هل تستخدم أحدث برنامج تشغيل (195.xx)؟ إذا كان الأمر كذلك يجب عليك الاتصال NVIDIA إما من خلال المنتديات أو مباشرة.

نصائح أخرى

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

(هل هناك طريقة للحصول على الذاكرة الحالية المتاحة، أو أكبر جزء، أو somesuch؟)

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