赞
踩
编译指导语句
和运行时库函数
。openmp.c
文件内容如下,使用 gcc -fopenmp openmp.c -o openmp
进行编译。
#include<stdio.h>
#include"omp.h"
int main(int argc, char * argv[]) {
omp_set_num_threads(3);
#pragma omp parallel for
for (int i = 0; i < 3; i++)
printf("i = %d, I am Thread %d\n", i, omp_get_thread_num());
getchar();
}
上述代码同:
#include<stdio.h>
#include"omp.h"
int main(int argc, char * argv[]) {
#pragma omp parallel for num_threads(3)
for (int i = 0; i < 3; i++)
printf("i = %d, I am Thread %d\n", i, omp_get_thread_num());
getchar();
}
从结果可以看出,开了三个线程进行计算。库函数omp_set_num_threads(3);
表示开启3个进程数。编译指令#pragma omp parallel for
表对for开启多线程并行计算。
lmz@X280-1:~/桌面/code/c/test/openmp$ gcc -fopenmp openmp.c -o openmp
lmz@X280-1:~/桌面/code/c/test/openmp$ ./openmp
i = 1, I am Thread 1
i = 0, I am Thread 0
i = 2, I am Thread 2
#pragma omp 指令 [子句[子句]…]
指令 | 解释 |
---|---|
parallel | 用在一个代码段之前,表示这段代码将被多个线程并行执行 |
for | 用于for循环之前,将循环分配到多个线程中并行执行,必须保证每次循环之间无相关性。 |
parallel for | parallel 和 for语句的结合,也是用在一个for循环之前,表示for循环的代码将被多个线程并行执行 |
sections | 用在可被并行执行的代码段之前,用于实现多个结构块语句的任务分担,可并行执行的代码段各自用section指令标出(注意区分sections和section); |
parallel sections | parallel和sections两个语句的结合,类似于parallel for |
critical | 用在一段代码临界区之前 |
single | 用在一段只被单个线程执行的代码段之前,表示后面的代码段将被单线程执行。 |
flush | 保证各个OpenMP线程的数据影像的一致性 |
barrier | 用于并行区内代码的线程同步,所有线程执行到barrier时要停止,直到所有线程都执行到barrier时才继续往下执行。 |
atomic | 用于指定一块内存区域被自动更新 |
master | 用于指定一段代码块由主线程执行 |
ordered | 用于指定并行区域的循环按顺序执行 |
threadprivate | 用于指定一个变量是线程私有的。 |
子句 | 解释 |
---|---|
private | 指定一个或多个变量在每个线程中都有它自己的私有副本; |
firstprivate | 指定一个或多个变量在每个线程都有它自己的私有副本,并且私有变量要在进入并行域或任务分担域时,继承主线程中的同名变量的值作为初值; |
lastprivate | 是用来指定将线程中的一个或多个私有变量的值在并行处理结束后复制到主线程中的同名变量中,负责拷贝的线程是for或sections任务分担中的最后一个线程; |
reduction | 用来指定一个或多个变量是私有的,并且在并行处理结束后这些变量要执行指定的归约运算,并将结果返回给主线程同名变量; |
nowait | 指出并发线程可以忽略其他制导指令暗含的路障同步; |
num_threads | 指定并行域内的线程的数目; |
schedule | 指定for任务分担中的任务分配调度类型; |
shared | 指定一个或多个变量为多个线程间的共享变量; |
ordered | 用来指定for任务分担域内指定代码段需要按照串行循环次序执行; |
copyprivate | 配合single指令,将指定线程的专有变量广播到并行域内其他线程的同名变量中; |
copyin | 用来指定一个threadprivate类型的变量需要用主线程同名变量进行初始化; |
default | 用来指定并行域内的变量的使用方式,缺省是shared。 |
库函数 | 解释 |
---|---|
omp_get_num_procs | 返回运行本线程的多处理机的处理器个数。 |
omp_get_num_threads | 返回当前并行区域中的活动线程个数。 |
omp_get_thread_num | 返回线程号 |
omp_set_num_threads | 设置并行执行代码时的线程个数 |
omp_init_lock | 初始化一个简单锁 |
omp_set_lock | 上锁操作 |
omp_unset_lock | 解锁操作,要和omp_set_lock函数配对使用。 |
omp_destroy_lock | omp_init_lock函数的配对操作函数,关闭一个锁 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。