我最近一直在玩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)
如果这个例子不能轻易转换成显示如何使用本地内存的东西,那么任何其他简单的例子都可以.
我想知道在分配缓冲区之前我的设备上有多少可用内存.这可能吗?我知道有CL_DEVICE_GLOBAL_MEM_SIZE总内存和CL_DEVICE_MAX_MEM_ALLOC_SIZE单个对象的最大大小,但我想知道当前的内存状态.
目前我可能不得不使用OpenGL特定于供应商的扩展.
我不太清楚CL_DEVICE_LOCAL_MEM_SIZE通过clGetDeviceInfo功能获得的实际意义.此值是否表示某个设备上所有可用本地内存的总和,或本地内存共享到工作组的上限?