在执行某个进程时,后续调用的结果是否会clGetPlatformIds()
改变?例如,平台是否会消失、出现、改变顺序或改变句柄(“id”)?
我问的当然是 OpenCL 标准保证什么或要求什么。
在执行某个进程时,后续调用的结果是否会clGetPlatformIds()
改变?例如,平台是否会消失、出现、改变顺序或改变句柄(“id”)?
我问的当然是 OpenCL 标准保证什么或要求什么。
在 CUDA 中,启动内核意味着指定其参数,通过指针数组进行编组:
CUresult cuLaunchKernel (
CUfunction f,
/* launch config stuff */,
void** kernelParams,
/* snip */ );
CUresult cuLaunchKernelEx (
const CUlaunchConfig* config,
CUfunction f,
void** kernelParams,
/* snip */ ) ;
启动后 - 您仍然拥有指向参数值的指针数组,您可以用它做任何您想做的事情:再次启动,修改然后启动等等。
然而,在 OpenCL 中,内核参数是逐个设置的,并且不透明:
cl_int clSetKernelArg(
cl_kernel kernel,
cl_uint arg_index,
size_t arg_size,
const void* arg_value);
因此,您需要设置、设置、设置几次,然后启动内核(使用clEnqueueNDRangeKernel()
)。有趣的是,它cl_kernel
不仅仅代表一段设备端可执行代码,而是额外的状态,包括您设置的参数。
我的问题是:启动内核后,我可以对此状态和我设置的参数做出哪些假设?我可以假设一切都和启动前一样吗?我可以只更改一些参数,保留其余参数,以便再次启动同一个内核吗?或者 - 它们是否以某种方式失效/丢失,必须重新完全设置?...也许这取决于实现?