GPUに cl_mem バッファーを割り当てて作業していますが、これは特定のサイズを超えるまで正常に動作します。その場合、割り当て自体は成功しますが、実行またはコピーは成功しません。より高速な操作のためにデバイスのメモリを使用したいので、次のように割り当てます。
buf = clCreateBuffer (cxGPUContext, CL_MEM_WRITE_ONLY, buf_size, NULL, &ciErrNum);
今私が理解していないのはサイズ制限です。約 16M バイトをコピーしていますが、約 128M バイトを使用できるはずです (「参考文献」を参照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