我在NDRange上执行OpenCL程序,工作组大小为16 * 16,工作全局大小为1024 * 1024。应用程序是矩阵乘法。 当两个输入矩阵大小都很小时,它运行良好。但是当输入矩阵的大小变大(例如,大于20000 * 20000)时,它会在enqueuendrangekernrl的函数中报告错误“CL_MEM_OBJECT_ALLOCATION_FAILURE”。
我很困惑。我不熟悉内存分配。是什么原因?
答案 0 :(得分:2)
使用 clGetDeviceInfo ,您可以使用 CL_DEVICE_GLOBAL_MEM_SIZE 查询设备全局内存大小,并使用 CL_DEVICE_MAX_MEM_ALLOC_SIZE > CL_DEVICE_MAX_MEM_ALLOC_SIZE在单个内存对象中分配的最大大小。 20000 * 20000 * sizeof(浮点)= 1.6 GB的三个矩阵可能超出这些限制。