我用C++包裝,並用下面的代碼創建緩衝區:爲什麼clCreateBuffer使用主機內存?
cl_int err(0);
unsigned int size;
void *data = GetData(/*out*/ size);
cl::Buffer buf(m_ctx, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
size, data, &err);
free(data);
之後工作由size
字節設定的我的應用程序的增加。而且,由於我有32位應用程序,因此總共不能分配更多的1.5 Gb,但GPU有3 Gb。
是否可以分配更多緩衝區?
PS。 size
小於128 Mb。
更新:我只使用1個設備,它是GPU。 (GeForce GTX 780 GPU NVIDIA Corporation 337.88)
我必須問:難道你有多個平臺和/或設備,並且意外地選擇了** CPU **作爲工作設備(而不是** GPU **)? – Marco13
'CL_MEM_COPY_HOST_PTR'可能會觸發某些固定的行爲。禁用它支持正常的'clEnqueueWriteBuffer()'可能會解決這個問題。如果不是這樣,那麼司機是如何在較低級別工作的,並且可能無法改變行爲。 – DarkZeros
@DarkZeros通常,'CL_MEM_COPY_HOST_PTR'不應該導致鎖定(與CL_MEM_USE_HOST_PTR'相反),但是您可能比我更瞭解細節,並且有疑問的是,這種行爲取決於OpenCL的實現。 (至少,規範中可能沒有任何內容阻止實現鎖定內存......) – Marco13