基准测试问题:C++/MPI/OpenMP应用执行时间在两值间波动
C++ MPI+OpenMP应用基准测试:环境配置与归约测试代码
我正在对三个不同的应用做基准测试,这些应用全部用C++编写,采用MPI与OpenMP组合的并行框架,编译工具用的是gcc 7.1搭配OpenMPI 3.0。
测试环境细节
- 运行平台:多节点集群
- 单节点硬件:2颗24核Intel CPU
- 并行执行策略:每个节点运行1个MPI进程,节点内部通过OpenMP实现线程级并行加速
自定义归约操作的最简基准测试代码
这里是我用来测试自定义归约操作的代码片段(原片段未完整,我补充了基础可运行逻辑):
#include <mpi.h> #include <omp.h> #include <vector> #include <chrono> int main(int argc, char** argv) { int process_rank, process_count; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &process_rank); MPI_Comm_size(MPI_COMM_WORLD, &process_count); // 初始化测试用的局部数据 const int local_data_size = 1000000; std::vector<double> local_data(local_data_size, 1.0); double local_sum = 0.0; // OpenMP线程并行计算局部和 #pragma omp parallel for reduction(+:local_sum) for (int i = 0; i < local_data_size; ++i) { local_sum += local_data[i]; } // MPI跨节点归约,汇总所有节点的局部和 double global_sum; MPI_Reduce(&local_sum, &global_sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); // 主进程输出结果 if (process_rank == 0) { printf("Global sum from all nodes: %f\n", global_sum); } MPI_Finalize(); return 0; }
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

