高性能计算之OpenMp(二)

高性能计算之OpenMp(二),第1张

高性能计算之OpenMp(二)

C/C++格式文件需要满足以下条件:

1.#program omp作为openmp编译指导语句的标识符。
2.每个编译指导语句必须以换行符结尾,
3.长指令可以在行尾用符号""表示为下一行是续航,续航可以接其他openmp句子;
例如:

#program omp parallel for default(none) 
			private(i,j,sum) share(m,n,a,b,c)

4.openmp句子区分大小写,所有编译知道语句均用小写字母表示;
5.每条指令只能有一个指令名称。
6.注释语句和编译指令语句不能出现在同一行。

openmp主要指令

  • parallel,用在一个代码段之前,表示这段代码将被多个线程并行执行
  • for,用于for循环之前,将循环分配到多个线程中并行执行,必须保证每次循环之间无相关性。
  • parallel for, parallel 和 for语句的结合,也是用在一个for循环之前,表示for循环的代码将被多个线程并行执行。
  • sections,用在可能会被并行执行的代码段之前
  • parallel sections,parallel和sections两个语句的结合
  • critical,用在一段代码临界区之前
  • single,用在一段只被单个线程执行的代码段之前,表示后面的代码段将被单线程执行。
  • flush, 用来保证线程的内存临时视图和实际内存保持一致,即各个线程看到的共享变量是一致的
  • barrier,用于并行区内代码的线程同步,所有线程执行到barrier时要停止,直到所有线程都执行到barrier时才继续往下执行。
  • atomic,用于指定一块内存区域被制动更新
  • master,用于指定一段代码块由主线程执行
  • ordered, 用于指定并行区域的循环按顺序执行
  • threadprivate , 用于指定一个变量是线程私有的
  • copyprivate:配合single指令,将指定线程的专有变量广播到并行域内其他线程的同名变量中;
  • copyin n:用来指定一个threadprivate类型的变量需要用主线程同名变量进行初始化;
  • default:用来指定并行域内的变量的使用方式,缺省是shared。
  • test:生成一个任务结构

库函数:
运行时环境函数,锁函数,时间函数

案例:

#include
#include
int main()
{
	int tid, mcpu;
	tid = omp_get_thread_num();
	mcpu = omp_get_num_threads();
	printf("hello fromthread %d CPUsn", tid, mcpu);
	printf("---------before paralleln");
	printf("n");
	printf("---------during paralleln");

	#pragma omp parallel num_threads(3) private(tid,mcpu)
	{
		tid = omp_get_thread_num();
		mcpu = omp_get_num_threads();
		printf("hello from thread %d in %d CPUsn", tid, mcpu);

	}

	printf("n");
	printf("----------after paralleln");
	printf("hello from thread %d in %d CPUsn", tid, mcpu);
	return 0;
}

运行结果:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存