我最近一直在玩OpenCL,我能够编写只使用全局内存的简单内核.现在我想开始使用本地内存,但我似乎无法弄清楚如何使用get_local_size()和一次get_local_id()计算一个"块"输出.
例如,假设我想将Apple的OpenCL Hello World示例内核转换为使用本地内存的内容.你会怎么做?这是原始的内核源代码:
__kernel square(
__global float *input,
__global float *output,
const unsigned int count)
{
int i = get_global_id(0);
if (i < count)
output[i] = input[i] * input[i];
}
Run Code Online (Sandbox Code Playgroud)
如果这个例子不能轻易转换成显示如何使用本地内存的东西,那么任何其他简单的例子都可以.
看起来200万个花车应该没什么大不了的,只有8MB的1GB GPU内存.我能够有时分配那么多,有时甚至比没有麻烦.当我执行clEnqueueReadBuffer时,我得到了CL_OUT_OF_RESOURCES,这看起来很奇怪.我能够嗅出问题真正开始的地方吗?在clEnqueueReadBuffer中,OpenCL不应该像这样失败吗?应该是我分配数据的时候吗?有没有办法获得更多的细节而不仅仅是错误代码?如果我能看到当OpenCL声明CL_OUT_OF_RESOURCES时分配了多少VRAM,那将会很酷.