使用OpenMPI在c ++中运行循环

时间:2017-09-21 17:12:32

标签: c++ parallel-processing openmpi

我有一个用c ++编写的淡化代码。它的作用是计算数组w,t和程序运行所花费的总时间。我已经在代码下面包含了输出内容的照片。平均时间是t阵列的平均值。

我想使用OpenMPI并行化代码。我已经开始初始化并获取proc ID和proc数量。我已经在线搜索并观看了youtube vids来学习命令,但我无法获得有关实现for循环的任何信息。我假设平均时间和经过的时间我会使用MPI发送和接收?但是对于forloop我假设处理器应该单独运行迭代并以某种方式在最后收集它?

已经坚持了一段时间......帮助

// number of iterations. Change accordingly 
int iteration = 10;

// Record start time
auto start = std::chrono::high_resolution_clock::now();

// Toughness array
double w[iteration];

// Time array;
double time[iteration];

//time interval
double delta_t = 1e-6;

int main() {
    // Call MPI initialization
    MPI_Init(NULL, NULL);

    // Get my processor ID and number of processor
    int myProcID;
    int numProcs;
    MPI_Comm_rank(MPI_COMM_WORLD, &myProcID);
    MPI_Comm_size(MPI_COMM_WORLD, &numProcs);

    for (int i = 0; i < iteration; i++){

    ...
        if (...){
            w[i] = ...
            time[i] = ...
            t = ...
        }
t = t + delta_t;
}
    cout << setprecision(13)<< time_sum/iteration <<endl;

    cout << setw(20) << left << "Time"<< setw(10) << left << "Toughness" <<endl;

    for(int i=0; i<10 ; i++){
        cout<< setw(20) << left <<setprecision(13)<<time[i]<< setw(10) << left <<setprecision(13)<<w[i]<<endl;
    }

    auto finish = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double> elapsed = finish  - start;
    std::cout << "Elapsed time: " << elapsed.count() << " s\n";
}

enter image description here

0 个答案:

没有答案