當計算並行循環內的最大減少量循環執行期間中間時間最大減少變量的值是多少?它是僅針對特定線程的最大值還是它是所有線程的最大值?C++ openmp用於循環執行期間的循環最大減少值
我問的原因是我想使用循環內的當前最大值來執行計算,我希望它是所有線程的當前最大值,而不僅僅是執行循環的線程。
例如:
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[]) {
double randomarray[10];
//initialize the random array
double outputarray[10];
double currentmax = 0;
#pragma omp parallel for reduction(max:currentmax)
for(i=0;i<10; i++) {
if(randomarray[i] > currentmax)
{
currentmax = randomarray[i];
}
output[i]=randomarray[i]/currentmax;
// is this current max for the currently
// executing thread or all threads?
}
}
您當前密碼過於簡單,內存帶寬的限制。 – 2014-11-05 10:02:28
@Zboson我有一個具體的問題,我試圖解決的地方,我需要知道目前的最大值之前已計算全局最大值;因此,您的兩次通過建議與我試圖解決的問題無關。如果你知道更好的解決方案,而不是「內存帶寬限制」,請分享。 – zimzam 2014-11-07 18:45:18