Linux系统下C语言如何调用scalapack中的函数

来源:
导读 大家好,我是本期栏目编辑小友,现在为大家讲解Linux系统下C语言如何调用scalapack中的函数问题。在并行计算中

大家好,我是本期栏目编辑小友,现在为大家讲解Linux系统下C语言如何调用scalapack中的函数问题。

在并行计算中经常需要调用scalapack(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数。注意:scalapack中的函数是用fortran语言语言写的,矩阵是按列进行存储的斯卡拉帕克。的链接需要用到布拉斯,因此确保本机上安装好了布拉斯、格夫特兰下面是一个矩阵向量乘法的例子(为了简单计算,该程序中设定进程数为4): #包含stdio。h #包含字符串。h #包含stdlib。h #包含“MPI”。h ' #定义AA(i,j) AA[(i)*M (j)]int main(int argc,char **argv){int i,j,k;/* * * * * * * * * * * * MPI * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * int my rank _ MPI,NP rocs _ MPI _ Init(argc,argv);MPI_Comm_rank(MPI_COMM_WORLD,我的rank _ MPI);MPI_Comm_size(MPI_COMM_WORLD,NP rocs _ MPI);/* * * * * * * * * * * * * * BLACS * * * * * * * * * * * * * * * * * * int ictxt,nprow,npcol,myrow,mycol,nb;int info,itempint ZERO=0,ONE=1;nprow=2;npcol=2;nb=1;Cblacs_pinfo(myrank_mpi,NP rocs _ MPI);Cblacs_get(-1,0,ictxt);Cblacs_gridinit(ictxt,' Row ',nprow,npcol);Cblacs_gridinfo(ictxt,nprow,npcol,myrow,mycol);int M=4;int DeSc[9],descx[9],descy[9];int mA=numroc_(M,nb,myrow,ZERO,nprow);int nA=numroc_(M,nb,mycol,ZERO,npcol);int nx=numroc_(M,nb,myrow,ZERO,nprow);int my=numroc_(M,nb,myrow,ZERO,nprow);desc init _(DeSc,M,M,nb,nb,ZERO,ZERO,ictxt,mA,info);desc init _(desx,M,ONE,nb,ONE,ZERO,ZERO,ictxt,nx,info);descinit_(descy,M,ONE,nb,ONE,ZERO,ZERO,ictxt,my,info);double * x=(double *)malloc(NX * sizeof(double));double *y=(double*) calloc(my,sizeof(double));double * A=(double *)malloc(mA * nA * sizeof(double));int sat,SUT for(I=0;imAI)对于(j=0;jnAj)A[j * mA I]=1.0;for(I=0;inxI)x[I]=1.0;双=1.0;双=0.0;pdgemv_('N ',M,M,,A,ONE,ONE,descA,x,ONE,ONE,descx,ONE,beta,y,ONE,ONE,descy,ONE);for(I=0;imyi )printf('rank=%d,%f \n ',myrank_mpi,y[I]);MPI _ Finalize();返回0;}编译生成可执行文件: PICC-PDG ev PDG ev。c-L/opt/Scala包/Scala PK-2。0 .2/-lscala pack-lblas-lgfortran运行:mpirun -np 4 ./pdgemv

标签:

版权声明:转载此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系,我们将及时更正、删除,谢谢您的支持与理解。