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; }
运行结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)