c-为什么opencl中存在缓冲区内存分配错误



我在NDRange上执行OpenCL程序,工作组大小为16*16,工作全局大小为1024*1024。应用程序是矩阵乘法。当两个输入矩阵的大小都很小时,它工作得很好。但当输入矩阵的大小变大时,例如大于20000*20000时,它会在enqueendrangekernrl的函数中报告错误"CL_MEM_OBJECT_ALLOCATION_FAILURE"。

我很困惑。我不熟悉内存分配。原因是什么?

使用clGetDeviceInfo,您可以用CL_device_global_MEM_size查询设备全局内存大小,用CL_device_MAX_MEM_alloc_size查询单个内存对象中可分配的最大大小。三个20000*2000*sizeof(float)=1.6 GB的矩阵可能超过了这些限制。

最新更新