【问题标题】:Using OMP to calculate fuel使用 OMP 计算燃料
【发布时间】:2020-12-06 03:35:18
【问题描述】:

所以这只是一个基本程序,它从文件中读取值,然后为每个值计算所需的燃料量。 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 = %d\n", i);

            mass += i;
            printf("i = %d\n", i);
            fuel2 = fuel(i);
        }
            fuelUnits += fuel2;
            printf("fuel is %d\n", fuel2);
        
    }

【问题讨论】:

    标签: c openmpi


    【解决方案1】:

    如果删除 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多