コンパイラーは、OpenMP API 2.0 と 2.5 のいくつかの制限をチェックします。スタティックの検証機能が有効な場合、コンパイラーでは OpenMP API の制限に対して、次の項目を含む追加の確認を行います。
スタティックの検証機能では、並列領域内部の !$OMP PARALLEL DO や !$OMP DO など、並列宣言子を持つループにあるオブジェクト間のデータの依存関係をチェックします。
そして、依存性の解析にコンパイラーのアルゴリズムを適用し、またデータ依存解析をグローバルなプログラム・コンテキストにまで拡張する別のアルゴリズムも適用します。
例 1:
1 #include <stdio.h>
2 int
3 main() {
4 int j;
5 float a[100], b[100];
6 b[0] = 1.0;
7 a[0] = 2.0 ;
8 #pragma omp parallel shared(a,b)
9 #pragma omp for
10 for (j=1;j<100;j++) {
11 a[j] = 3.6*b[j-1];
12 b[j] = a[j-1]/3;
13 }
14 for(j=0;j<100;j++)
15 printf("%f %f\n", a[j], b[j]);
16 printf("\n");
17 return 0;
18 }
スタティックの検証機能で次の警告が発行されます。
omp.c(11): warning #12251: flow data dependence from line 11 to line 12, due to "a" may lead to incorrect program execution in parallel mode
omp.c(12): warning #12251: flow data dependence from line 12 to line 11, due to "b" may lead to incorrect program execution in parallel mode