动态分配空间导致 MPI 程序出错

Dynamically allocating space causing error in MPI program

提问人:nicku 提问时间:12/1/2022 更新时间:12/1/2022 访问量:25

问:

这里有一个 MPI 程序来计算两个矩阵的乘积: https://gist.githubusercontent.com/kmkurn/39ca673bb37946055b38/raw/20ed8f7a7c078b82d12b9f7ef1390b9e9c67d626/mpi_mm.c

我使用了这个确切的代码,但不是将矩阵的大小指定为常量,而是将它们作为输入参数。所以我在 main 中添加了以下代码:

 int N = atoi(argv[1]);
    int M = atoi(argv[2]);

    double(*a)[M] = malloc(sizeof(double[N][M]));
    double(*b)[1] = malloc(sizeof(double[M][1]));
    double(*c)[1] = malloc(sizeof(double[N][1]));
    int NRA = N;
    int NCA = M;
    int NCB = 1;

编译它并运行它并得到以下错误:mpiccmpiexec -n 4 ./a.out

=================================================================================== = 您的一个申请流程终止不当 = PID 4960 在桌面NHT8PTC上运行 = 退出代码:11 = 清理剩余进程 = 您可以忽略以下清理消息 ===================================================================================应用程序因退出字符串而终止: 分段错误 (信号11)这通常是指应用程序存在问题。 有关调试建议,请参阅FAQ页面

这可能是什么原因?我不确定仅动态初始化矩阵会出什么问题。

C 分段-故障 malloc MPI

评论

0赞 Eric Postpischil 12/1/2022
编辑问题以提供最小的可重现示例
3赞 Avi Berger 12/1/2022
“使用 mpiexec -n 4 ./a.out 运行” 你不需要为你的程序提供一些命令行参数,以便你在 argv[1] 和 argv[2] 中有一些东西可以访问吗?即这里提到的 pgmargs。

答: 暂无答案