OpenMp 个人笔记(一)

1先来个HelloWorld

OpenMP是一个非常好用的并行编程的库,在我们的Windows平台上,只要下载了mingw(gomp)就可以使用了,可以说配置起来很方便,配合GCC来进行C语言的并行程序开发也是一件非常爽的事情啦。下面给出一个在网上找到的OpenMP的代码,并且用GCC编译来看看效果如何。

Noname1.c代码:

#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void test()
{
	int a=0;
	clock_t t1=clock();
	for(int i=0;i<100000000;i++)
	{
		a=i+1;
	}
	clock_t t2=clock();
	printf("Time = %d\n",t2-t1);
}
int main(int argc, char* argv[]) {
	clock_t t1=clock();
	#pragma omp parallel for 
	for(int j=0;j<2;j++)
	{
		test();
	}
	clock_t t2= clock();
	printf("Total time: %d\n",t2-t1);

	test();
	return 0;
}

编译的命令行:

gcc -std=c99 -fopenmp Noname1.c -o hello.exe
pause

这里要加上-fopenmp,-o可以指定输出的文件名,默认的是a.exe。

在笔者的破机子上这个代码跑出来的结果是

time=600

time=690

totaltime=700

time=660

totaltime 是两个test并行执行的时间,最后一个time是一个test执行的时间,可以看到这个效果还是不错的。关键我们几乎什么都没干,只不过在for循环上加了一条类似注释而已。因为笔者还要写论文,靠着并行计算的名头来忽悠毕业,所以还是先扯一点OpenMP的概念吧。

2 fork/join模式

openmp是的卖点是“共享式存储”并行,笔者现在还不是非常明白她的运作机理。而所谓的fork/join模式是说要等并行程序执行完成之后才能执行后面的非并行部分,不知道这和fork,join有什么关系? 相当于主线程创建的线程是不会和主线程一起并行执行的。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麦麦大

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

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

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

打赏作者

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

抵扣说明:

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

余额充值