高性能计算之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<stdio.h>
#include<omp.h>
int main()
{
	int tid, mcpu;
	tid = omp_get_thread_num();
	mcpu = omp_get_num_threads();
	printf("hello fromthread %d CPUs\n", tid, mcpu);
	printf("---------before parallel\n");
	printf("\n");
	printf("---------during parallel\n");

	#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 CPUs\n", tid, mcpu);

	}

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

运行结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值