在正式编写并行程序前,需要先了解一下共享任务结构。所谓共享任务结构,即将结构中所包含的代码分给线程组中各个线程去执行。第一个线程为0,也即主线程,在共享任务结构的入口没有路障,而出口(即结束处)有一个隐含的路障,只有线程0可以从头执行到尾。
OpenMP有3种典型的共享任务结构,for 语句、sections 语句和 single 语句,此外还有 parallel for 语句和 parallel sections 语句。
1. for语句
for语句的一般格式如下:([ ]表示可选可不选,| 表示或者)
#pragma omp for [schedule(static|dynamic[,CHUNKSIZE]) | ordered | private(var) | firstprivate(var) |
lastprivate(var) | shared(var) | reduction(operator:var) | nowait] newline
最后的newline指换行,具体可以看一下例子
#include<stdio.h>
#include<omp.h>
#include<time.h>
#define CHUNKSIZE 100
#define N 10000
int main(){
int i;
float a[N], b[N], c[N];
clock_t t=0;
for (i = 0; i < N; i++)
a[i] = b[i] = i*1.0;
t -= clock();
#pragma omp parallel shared(a,b,c) private(i) //一定要换行,即newline的意思
{
#pragma omp for schedule(static,CHUNKSIZE) //for语句只能作用于一个for循环,for循环可以嵌套,但不能用{}套住for循环
for (i = 0; i < N; i+