当前位置:首页 > 芯闻号 > 充电吧
[导读]研究一下如何一起使用mpi和openmp先上程序:#include#include#ifdef _OPENMP #include#endif #ifdef MPICH_CC   #include#e

研究一下如何一起使用mpi和openmp

先上程序:


#include#include#ifdef _OPENMP
#include#endif

#ifdef MPICH_CC
  #include#endif

#define SIZE 512
#define SIZEM SIZE
#define SIZEN SIZE
#define SIZEK SIZE

#define DISPLAYT 1

double mytic() 
{
	double result = 0.0;
	struct timeval tv; 
	gettimeofday( &tv, NULL );
	result = tv.tv_sec*1e6 + tv.tv_usec;
	return result;
}

int main(int argc, char** argv)
{
#ifdef MPICH_CC
	int mpirank;
	int mpisize;
	MPI_Status mpistatus;
#endif

	float *ma;
	float *mb;
	float *mc;
	int m, n, k;
	int r, s, t;
	float tsum;
	double tstart, tend;

#ifdef MPICH_CC
	MPI_Init(&argc, &argv);
	MPI_Comm_rank(MPI_COMM_WORLD, &mpirank);
#endif

#ifdef _OPENMP
	omp_set_num_threads(2);
#endif

	/*Matrx A, B, C allocation.*/
	m = SIZEM; n = SIZEN; k = SIZEK;

	ma = (float*)malloc(m*n*sizeof(float));
	if (!ma){return -1;}
	mb = (float*)malloc(n*k*sizeof(float));
	if (!mb){free(ma);return -1;}
	mc = (float*)malloc(m*k*sizeof(float));
	if (!mc){free(ma);free(mb);return -1;}

	/*Matrx A, B, C initialization.*/
	srand((unsigned int)time(0));
	tstart = mytic();
	for (r = 0; r < m; r++)
	{
		for (s = 0; s < n; s++)
		{
			ma[r*n+s] = (1.0*rand())/RAND_MAX;
		}
	}
#if DISPLAYT 
	printf("[T] ma initialization time : %.3fmsn", 1e-3*(mytic()-tstart));
#endif
	tstart = mytic();
	for (r = 0; r < n; r++)
	{
		for (s = 0; s < k; s++)
		{
			mb[r*k+s] = (1.0*rand())/RAND_MAX;
		}
	}
#if DISPLAYT 
	printf("[T] mb initialization time : %.3fmsn", 1e-3*(mytic()-tstart));
#endif
	/*Compute matrix C*/
	tstart = mytic();
#pragma omp parallel for private(r,t,s,tsum) shared(m,n,k,ma,mb,mc)
	for (r = 0; r < m; r++)
	{
		for (t = 0; t < k; t++)
		{
			tsum = 0.0f;
			for (s = 0; s < n; s++)
			{
				tsum += ma[r*n+s]*mb[s*k+t];
			}
			mc[r*m+t] = tsum;
		}
	}
#if DISPLAYT 
	printf("[T] mc computation time : %.3fmsn", 1e-3*(mytic()-tstart));
#endif

#ifdef MPICH_CC
	printf("[R] rank = %d with ", mpirank);
#pragma omp parallel 
	{
		if (0==omp_get_thread_num())
		{
			printf("omp_size = %dn", omp_get_num_threads());
		}
	}
#endif
#ifdef MPICH_CC
#endif

#ifdef MPICH_CC
	printf("MPI -- parallel n");
	MPI_Finalize();
#else
	printf("       serial   n");
#endif
	free(ma);free(mb);free(mc);
	return 0;
}


使用如下命令编译这个代码


gcc -DMPICH_CC -O0 -fopenmp test.c `pkg-config --cflags --libs mpich` -o mpiomp.exe


执行代码(我用的是mpich)


mpiexec -n 2  ./mpiomp.exe


上面启动了两个进程来执行代码。


程序中,每个进程做的是一样的事情,都是计算两个矩阵的乘积,计算矩阵乘积的时候,我用openmp将矩阵乘积的计算分配给几个不同的线程来计算,以增加并行度。

如果你想在执行的时候设置openmp的线程数,可以把代码中第50行注释掉,然后用下面的命令执行。我是在ubuntu12.04上测试的,用的gcc-4.6.3,如果先不注释执行的话,再注释后按下面的命令执行的话,可能会得到跟之前一样的结果。这个原因我不是很清楚。有知道的,烦请告知一下呀。


 mpiexec -n 2 -env OMP_NUM_THREADS 4 ./mpiomp.exe


注意几点:

因为有很多新手,可能以上来执行不出来。所以给出一下几个可能出问提的点。

* 是否安装MPICH? 没有安装的话,麻烦先安装。源码安装的看这里 点击打开链接

* pkg-config出问题。 检查下 mpich.pc是否在pkg-config的搜索路径,或者man pkg-config研究下pkg-config




本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭