我最近一直在玩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)
如果这个例子不能轻易转换成显示如何使用本地内存的东西,那么任何其他简单的例子都可以.
请考虑以下代码:
__global__ void kernel(int *something) {
extern __shared__ int shared_array[];
// Some operations on shared_array here.
}
Run Code Online (Sandbox Code Playgroud)
是否可以将整个shared_array设置为某个值 - 例如0 - 而无需在某个线程中明确地寻址每个单元格?
我是OpenCl的新手.
我需要在一维双精度数组上运算减少(求和运算符).
我一直在网上徘徊,但我发现的例子很混乱.任何人都可以发布易于阅读(并且可能有效)的教程实现吗?
附加信息: - 我可以访问一个GPU设备; - 我使用C作为内核代码