openMP多线程编程

OpenMP(Open Muti-Processing)


OpenMP缺点:

1:作为高层抽象,OpenMp并不适合需要复杂的线程间同步和互斥的场合;

2:另一个缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI使用较多。



关于openMP实现 临界区 与互斥锁 可参考 reference3


windows系统下使用

==========================WINDOWS系统中使用==========================

基本使用:

在visual C++2010中使用OpenMP

1:将 Project 的Properties中C/C++里Language的OpenMP Support开启(参数为 /openmp);

2:在编写使用OpenMP 的程序时,则需要先include OpenMP的头文件:omp.h;

3:在要并行化的for循环前面加上  #pragma omp parallel for


如下简单例子:

//未使用OpenMP
#include <stdio.h>
#include <stdlib.h>

void Test(int n) {
for(int i = 0; i < 10000; ++i) 
{
      //do nothing, just waste time
}
	printf("%d, ", n);
}

int main(int argc,char* argv[]) 
{
	for(int i = 0; i < 16; ++i)
	Test(i);
	system("pause");
}
结果为:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,14,15,

//使用OpenMP
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
#include <omp.h>

void Test(int n) {
for(int i = 0; i < 10000; ++i) {
//do nothing, just waste time
}
	printf("%d, ", n);
}

int main(int argc,char* argv[]) 
{
#pragma omp parallel for
	for(int i = 0; i < 16; ++i)
	Test(i);
	system("pause");
}
 (我的笔记本为2核 4线程) 

显示结果为:

0,12,4,8,1,13,5,9,2,14,6,10,3,15,7,11,

OpenMP将循环0-15拆分成0-3,4-7,8-11,12-15四个部分来执行。

当编译器发现#pragma omp parallel for后,自动将下面的for循环分成N份,(N为电脑CP

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值