工作共享構造 - For 迴圈的示例

double  res[MAX];  int i;
#pragma omp parallel 
{    
    #pragma omp for
    for (i=0;i< MAX; i++) {
        res[i] = huge();
    } 
}    

for 迴圈將並行執行。huge() 是一種可能需要很長時間才能執行的方法。OpenMP 支援將上述程式碼編寫為的快捷方式:

double  res[MAX];  int i;
#pragma omp parallel for
for (i=0;i< MAX; i++) {
    res[i] = huge();
} 

我們還可以有一個 schedule 子句,它影響迴圈迭代如何對映到執行緒。例如:

#pragma omp parallel
#pragma omp for schedule(static)
for(i=0;I<N;i++) {
    a[i] = a[i] + b[i];
}

不同風格的排程是:

schedule(static [,chunk])
對每個執行緒執行大小 chunk 的迭代塊。
如果未指定:儘可能均勻地分配給可用執行緒

schedule(dynamic [,chunk])
每個執行緒從佇列中抓取迭代,直到所有迭代都被處理完畢。

schedule(guided [,chunk])
執行緒動態地抓取迭代塊。隨著計算的進行,塊的大小開始變大並縮小到大小。

schedule(執行時)
從 OMP_SCHEDULE 環境變數獲取的計劃和塊大小。