OpenMP Tutorial学习笔记(3)OpenMP指令之指令格式和指令范围

OpenMP Tutorial:https://computing.llnl.gov/tutorials/openMP/#Directives

OpenMp Directives


(1)OpenMP指令格式


指令基本规则:

大小写敏感;每个指令只能指定一个directive-name(指令名称);每一个指令最多应用于一个后继语句,语句必须是一个结构块(structured block);长指令可以使用反斜线("\")分行书写。


(2)OpenMP指令作用范围

为何要讨论指令范围?看下面的例子:

foo()
{
	#pragma omp parallel
	{
	#pragma omp do
	...
	sub1();
	...
	sub2();
	...
	}
}

sub1() 
{
	...
	#pragma omp critical
	{
	}
	...
}

sub2() 
{
	...
	#pragma omp section
	{
	}
	}
	...
}
函数foo()调用函数sub1和sub2。三个函数都是用了OpenMP指令,所以存在指令的嵌套,如果不符合OpenMP的规则,那么就会导致指令被忽略或出现错误。

1. Static(Lexical)Extent:静态扩展。如上面的例子foo()中do指令出现在parallel的并行块中,就属于静态扩展。这样的指令不能跨函数或者跨文件。

2. Orphaned Directive:孤立指令。如上面例子中的critical和section,都是孤立存在的,不存在于任何并行区域中,它属于静态扩展区域之外的部分。会跨函数或文件。

3. Dynamic Extent:动态扩展。对于OpenMP,上面的foo函数,由于调用了子函数,结合起来,critical和section就出现在了do和parallel的动态扩展范围内。

这里的三种情况是比较容易理解的,OpenMP之所以这样区分,是为了更好的描述其嵌套规则。具体规则参考:

https://computing.llnl.gov/tutorials/openMP/#BindingNesting


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值