0

我不知道如何处理大小小于全局大小设置的数组clEnqueueNDRangeKernel

在我的原子计算中,全局大小由原子数设置。这是位置、速度和力的大小。然后,我进行伪归约并将数据存储在与块数相对应的大小数组中。我还有一个小数组来存储对势的参数。

我对这个职位没有任何问题,我将它们声明为__global const double4 *positions. 我的问题是关于另外两种。据我了解,线程与每个数组元素相关联,但这不是我想要的小数组。对我来说,最好的方法是将参数数组传递为__constor __private,但我不确定我是否可以传递一个数组__private(就像我使用标量一样)并将其设置为__const产生错误:

:149:80: error: invalid address space for pointee of pointer argument to __kernel function
                         __global float2 *atom_type,__global const double *atmmass, __const double8 *two_body_type,

关于我的 reduce 数组,现在我正在传递它,因为__global输出只是垃圾。当我声明它时,__const我得到与上面相同的错误,无论如何我想这将是一个问题,然后取回数据。

你们会怎么做?

4

1 回答 1

1

输入或输出数组与内核执行的全局大小之间的关系不是由 OpenCL 固定或定义的,它完全取决于您的内核。

如果您希望所有工作项都使用较大的数组,然后只使用较小的数组,您可以编写代码。只需检查 global_id 是否在较小数组的范围内。

如果数组大小之间存在某种固定关系,例如 3 比 1,则可以改为处理大数组元素和每个工作项仅处理一个小数组元素,并使用全局大小的三分之一。

于 2013-09-30T00:30:22.987 回答