【发布时间】:2016-05-09 03:01:38
【问题描述】:
我想在 radeon HD 7970 Tahiti XT 上使用 OpenCL(来自 AMD link)执行关于两阶段 Sum 减少的运行时基准测试。
最初,我采用了第一个版本的代码,其中我没有使用第一个循环,该循环执行从大小为N 的输入数组到大小为NworkItems 的输出数组的缩减。这是进入内核代码的第一个循环:
int global_index = get_global_id(0);
float accumulator = 0;
// Loop sequentially over chunks of input vector
while (global_index < length) {
float element = buffer[global_index];
accumulator += element;
global_index += get_global_size(0);
}
因此,在第一个版本中,我将运行时间测量为输入数组大小(等于线程总数)和不同大小的工作组的函数。结果如下:
现在,我想做一个基准测试,在上面使用这个初始循环。但我不知道我必须改变哪些参数。
来自this link,有人说 AMD 建议工作组大小为 64 的倍数(NVIDIA 为 32)。
此外,从this other link 的最后评论中,建议将工作组大小设置为:WorkGroup size = (Number of total threads) / (Compute Units)。
在我的 GPU 卡上,我有 32 个计算单元。
因此,为了比较第二个版本(使用第一个缩减循环)中的运行时间,我想获得一些建议,以了解哪些参数会有趣地变化。例如,我可以为比率(N size of input array) / (total NworkItems) 取不同的值,为WorkGroup size 取一个固定值(见上面的表达式),
或者相反,即我应该改变WorkGroup size的值并固定比率(N size of input array) / (total NworkItems)?
【问题讨论】:
标签: opencl benchmarking reduction