c-使用OMP计算燃料



所以这只是一个基本程序,它从文件中读取值,然后为每个值计算所需的燃料量。f=(m/4(-3。我有它的工作,但我觉得如果有更多的线程可以同时做这些事情,我会有更好的时机。目前,如果没有关键部分,我会得到不正确或不断变化的结果。我想知道是否有一种方法可以减少关键部分的数量,或者以其他方式优化这个部分。提前感谢您的帮助!

#pragma omp parallel for  reduction(+:fuelUnits) schedule(dynamic) 
for (int j = 0; j < count; j++) {
#pragma omp critical
{
i = arr[j];
//printf("i = %dn", i);
mass += i;
printf("i = %dn", i);
fuel2 = fuel(i);
}
fuelUnits += fuel2;
printf("fuel is %dn", fuel2);

}

如果删除mass+=i会发生什么?它是否需要包含在您的还原操作中:(例如:reduction(+:fuelUnits, mass)

这应该在没有关键部分的情况下工作:

// somewhere globally:
int fuelUnits = 0;
// your fuel function here:
int fuel(int m) {
return (m/4)-3 
}

-- snip --
#pragma omp parallel for reduction(+:fuelUnits) schedule(dynamic)
for (int j = 0; j < count; j++)) {
int i = arr[j];
fuelUnits += fuel(i);
}

最新更新