Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么opencl中存在缓冲区内存分配错误_C_Memory Management_Opencl_Nvidia - Fatal编程技术网

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

为什么opencl中存在缓冲区内存分配错误,c,memory-management,opencl,nvidia,C,Memory Management,Opencl,Nvidia,我在NDRange上执行OpenCL程序,工作组大小为16*16,工作全局大小为1024*1024。应用是矩阵乘法。 当两个输入矩阵的大小都很小时,它工作得很好。但当输入矩阵的大小变大,例如大于20000*20000时,它会在EnqueuendRangeKernerl函数中报告错误“CL_MEM_OBJECT_ALLOCATION_FAILURE” 我很困惑。我不熟悉内存分配。原因是什么?使用clGetDeviceInfo,您可以使用CL\u device\u global\u MEM\u si

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


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

使用clGetDeviceInfo,您可以使用CL\u device\u global\u MEM\u size查询设备全局内存大小,以及使用CL\u device\u MAX\u MEM\u alloc\u size在单个内存对象中可以分配的最大大小。三个20000*20000*sizeof(float)=1.6GB的矩阵可能超过这些限制。

那么,您是否创建了一个内存(20000*20000)*(16*16)字节?原因是什么?我检查了clEnqueueNDRangeKernel的返回值,它是CL_MEM_OBJECT_ALLOCATION_FAILURE。我仍然感到困惑,我认为它是200000*200000*4字节,类型是浮点型,gpu地址是32位。因此,总存储容量超过1 Gb。所以它太大了,不会导致这个错误,所以你已经知道什么是错的了。而且mult需要有三个矩阵。这使得超过4GB,这太大了。你应该把矩阵分成子矩阵,然后一部分一部分地计算。