Concurrency 对OpenCL内核参数值的并发访问

Concurrency 对OpenCL内核参数值的并发访问,concurrency,opencl,arguments,Concurrency,Opencl,Arguments,我正在研究并行应用程序,我想问一个问题,因为我有点困惑。当我有100个内核实例时,我想出售它们的价值,每个内核的价值都是一样的。我必须有一个100个相同值的数组(每个内核一个),或者对我来说足够好,所有内核只有一个值。如果我使用单个值,是否会保持对该值的并发访问?该值用于只读。如果您询问是否可以将标量作为只读参数传递给通过clEnqueueNDRangeKernel()启动的内核,如下所示: __kernel void kerncode(int cval,.....) { ... }; . .

我正在研究并行应用程序,我想问一个问题,因为我有点困惑。当我有100个内核实例时,我想出售它们的价值,每个内核的价值都是一样的。我必须有一个100个相同值的数组(每个内核一个),或者对我来说足够好,所有内核只有一个值。如果我使用单个值,是否会保持对该值的并发访问?该值用于只读。

如果您询问是否可以将标量作为只读参数传递给通过
clEnqueueNDRangeKernel()
启动的内核,如下所示:

__kernel void kerncode(int cval,.....) { ... };
.
.
.
int magiconstant = 1234567;
clSetKernelArg(kerncode, 0, sizeof(int),(void*)&magiconstant);
.
.
clEnqueueNDRangeKernel(queue, kerncode, ...);

然后回答是的,当然可以。

如果我不喜欢你写,那么值会存储在私有内存中吗?当我这样做时会发生什么:_kernelvoid kerncode(_localint cval,…){…};将保持对工作项块中此值的并发读取访问?我不相信您可以像那样使用_本地内存-不可能在内核外部初始化_本地内存..本地内存绝对不能用于此目的。本地内存只能从外部分配,但不能从主机写入。Talonmes提到了使用标量的最佳方法。全局内存太慢。常量内存可能是合适的,只要常量在大量计算中具有全局性。