一个简单的MPI+C语言编程实例

本在做地震勘探数值模拟,由于大计算量的问题,试着探索MPI并行计算。小有收获,在此给出一个简单的例子,希望对大家有益处。


#include <stdio.h>
#include "time.h"

#include "par.h"
#include "su.h"
#include "segy.h"

#include <mpi.h>

int main(int argc, char **argv)
{
    int verbose;
    int ix,iz,it,is,igrid; 	/* counters 	*/
   
    int nx,nz;				/* x,z,t,tsizes */
  
    float *wavelet;
    float *xs;              /* array of source x coordinates */
    float *zs;              /* array of source z coordinates */
    float **h_s;
    
    /************** MPI parameters **************/
    int myid,npros;
    int dblock;
    char proname[20];
    int resultlen;
    MPI_Comm comm;
    int s_beg,s_end;

    /* hook up getpar to handle the parameters */
    initargs(argc,argv);
    requestdoc(0);

    /* MPI initializing */
    MPI_Init(&argc, &argv);
    MPI_Comm_dup(MPI_COMM_WORLD,&comm);
    MPI_Comm_size(comm,&npros);
    MPI_Comm_rank(comm,&myid);
    MPI_Get_processor_name(proname,&resultlen);

    /* get required parameters */
    if (!getparint("verbose",&verbose))   	  	err(" must specify verbose!");
    if (!getparint("nx",&nx))           	  	err(" must specify nx!");
    if (!getparint("nz",&nz))         	      	err(" must specify nz!");
    
    MPI_Barrier(comm);

	if (myid==0 )
    {
    	warn(" ***************** Parameters *********************** ");
    	warn(" nz=%d; dz=%f; fz=%f",nz,dz,fz);
    	warn(" nx=%d; dx=%f; fx=%f",nx,dx,fx);
    }

    /* allocate memory space on host */	    
    xs = alloc1float(ns);
    zs = alloc1float(ns);;
    h_s = alloc2float(nz,nx);
    wavelet = alloc1float(nt);

    memset((void *) h_s[0],0,FSIZE*nz*nx);
   
    /* determine source coordinates */
    for (is=0;is<ns;is++) 
    {
		xs[is] = fxs+dxs*is;
		zs[is] = fzs+dzs*is;
	}
	
    MPI_Barrier(comm);

    /* delete host memory */
    free1float(xs);
    free1float(zs);
    free2float(h_s);
    free1float(wavelet);


    MPI_Barrier(comm);
    MPI_Finalize();
    return(0);
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder802

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值