Parallel processing 关于OpenCL';s clEnqueueNDRangeKernel()
假设我有以下代码:Parallel processing 关于OpenCL';s clEnqueueNDRangeKernel(),parallel-processing,opencl,Parallel Processing,Opencl,假设我有以下代码: size_t globalSize = 4294967295; // (2^(32))-1 clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &globalSize, 0, 0, NULL, NULL); 这是否意味着我希望内核执行4294967295次,OpenCL将决定最有效的工作组大小?基本上是的,不过您可能需要注意以下几点: 请注意,&globalSize后面的参数是一个NULL指针,而不是整数值0,因为该参数声
size_t globalSize = 4294967295; // (2^(32))-1
clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &globalSize, 0, 0, NULL, NULL);
这是否意味着我希望内核执行4294967295次,OpenCL将决定最有效的工作组大小?基本上是的,不过您可能需要注意以下几点:
- 请注意,
后面的参数是一个&globalSize
指针,而不是整数值0,因为该参数声明为“const size\u t*local\u work\u size”NULL
- 在所有情况下,它不一定是最有效的工作组规模;实现可能无法完全准确地预测这一点。但是,他们应该选择合适/合理的尺寸
- 实现可能具有运行时限制,这可能导致内核执行过早中止,或者设备可能不支持抢占,从而可能导致系统冻结。因此,像这样庞大的工作规模可能并不理想