Openmp

Openmp并行域内的子函数并行化

看下面这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
 
void para_print()
{
	//automatic vars in a routine called within an omp region is private implicitly
	int i,tid;
	/*if you need shared vars inside omp function call, use static vars;
	* the side effect is static vars keeps its previous value 
        * if not reset a initial value during each call*/
	static int j;
	#pragma omp single
	{
	printf(“tid: i,j\n”);
	j=10;
	}
	#pragma omp for 
	for(i=0;i<5;i++)
	{
	tid=omp_get_thread_num();
	#pragma omp critical
	{
		j++;

利用threadprivate在子函数间共享全局变量

多个并行域之间,或者并行域内部的函数调用之间如果需要在线程内部共享全局变量,必须用threadprivate。如果不将全局变量声明为threadprivate而是声明为private,则在子函数调用时子函数内的全局变量传递不到子函数外面。

比如下面程序:

聚合内容