OpenACC 中有更快的 argmin/argmax 实现吗?
Is there a faster argmin/argmax implementation in OpenACC?
在 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/maxloc 的请求,但这很困难,而且很可能性能不佳,因此没有添加任何内容。您使用的方法是针对此问题的推荐解决方案。
在 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/maxloc 的请求,但这很困难,而且很可能性能不佳,因此没有添加任何内容。您使用的方法是针对此问题的推荐解决方案。