MPI并行编程传递多维数组需要注意的若干问题

本文介绍了作者在MPI并行编程中遇到的一个关于传递多维数组的难题。由于二维数组的地址空间不连续,导致MPI通信出现问题。解决方案是将多维数组转换为一维数组进行传递。调试过程耗时,强调理解MPI原理的重要性。
摘要由CSDN通过智能技术生成

MPI并行编程传递多维数组需要注意的若干问题


最近很郁闷的是花了近一个多星期的时间才调试出MPI程序的BUG。由于自己是刚开始接触MPI并行编程,对MPI的通信原理的内部机制以及原理理解不是很深入,导致了写程序过程中出现了一个难以理解的BUG:当MPI_Send在传递一个二维数组时,子进程的接收总是错误。这个BUG在调试上没有任何问题,也能正常运行,但是接收到的数据却是乱码,根本不是父进程发送的数据。

首先贴一下我最初的代码

父进程发送

                    int *buffer = new int[ rand_sub_dim ];
                    double **sub_population = new double*[ Population_size ];
                    double **sub_personal_best = new double*[ Population_size ];

                    for( j =0; j < Population_size; ++ j )
                    {
                        sub_population[j] = new double [rand_sub_dim];

                        sub_personal_best[j] = new double [rand_sub_dim];
                    }
                    for( i = 0 ; i< group_size; ++i )
                    {

                        for( j=0; j<rand_sub_dim; ++j )
                            buffer[j] = dim_index[ j+rand_sub_dim*i ];


                        MPI_Send( buffer, rand_sub_dim, MPI_INT, i, i + DIM_INDEX_TAG, intercomm );


                        for( j = 0; j<Population_size; ++j )
                            for( a = 0; a<rand_sub_dim; ++a )
                            {
                                sub_population[j][a] = population[j][buffer[a]];
                                sub_personal_best[j][a] = personal_best[j][buffer[a]];
                
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值