OpenACC中是否有更快的argmin/argmax实现



在OpenACC中计算argmin有没有比将工作拆分到最小约简循环和另一个循环中以实际找到最小值的索引更快的替代方案?

这看起来非常浪费:

float minVal = std::numeric_limits<float>::max();
#pragma acc parallel loop reduction(min: minVal)
for(int i = 0; i < arraySize; ++i) {
minVal = fmin(minVal, array[i]);
}
#pragma acc parallel loop
for(int i = 0; i < arraySize; ++i) {
if(array[i] == minVal){
minIndex = i;
}
}

事实上,这成为了我当前项目的一个瓶颈。

我们收到了minloc/maxroc的请求,但这很困难,很可能不会有性能,所以没有添加任何内容。您正在使用的方法是建议的解决方案。

最新更新