【发布时间】:2015-07-22 17:03:16
【问题描述】:
我正在使用 Apple here 提供的 OpenCL 缩减示例
经过几天的剖析,我了解了基础;我已将其转换为在 c++ (Openframeworks) 上或多或少可靠运行的版本,并在输入集中找到最大的数字。
但是,在这样做的过程中,出现了如下几个问题:
-
为什么要使用多个通道?我能够使减少要求的最多是两个;后一个 pass 只占用非常少的元素,因此非常不适合 openCL 进程(即,坚持一个 pass 然后在 cpu 上处理结果不是更好吗?)
当我将元素的“计数”数量设置为非常高的数字(24M 及以上)并将类型设置为 float4 时,我得到的结果不准确(或完全错误)。这是为什么呢?
在 openCL 内核中,谁能解释这里正在做什么:
while (i < n){
int a = LOAD_GLOBAL_I1(input, i);
int b = LOAD_GLOBAL_I1(input, i + group_size);
int s = LOAD_LOCAL_I1(shared, local_id);
STORE_LOCAL_I1(shared, local_id, (a + b + s));
i += local_stride;
}
与这里正在做的事情相反?
#define ACCUM_LOCAL_I1(s, i, j) \
{ \
int x = ((__local int*)(s))[(size_t)(i)]; \
int y = ((__local int*)(s))[(size_t)(j)]; \
((__local int*)(s))[(size_t)(i)] = (x + y); \
}
谢谢! S
【问题讨论】:
标签: opencl