| ナビゲーションリンクをスキップ | |
| 印刷ビューの終了 | |
|   | Oracle Solaris Studio 12.3: OpenMP API ユーザーガイド Oracle Solaris Studio 12.3 Information Library (日本語) | 
自動スコープ宣言の結果を確認したり、自動スコープ宣言が失敗したために直列化した並列領域の有無を確認したりするには、コンパイラのコメントを使用します。
コンパイルで -g が付けられていると、コンパイラはインラインコメントを生成します。このコメントは、次の例に示すように、er_src を使って表示できます。er_src コマンドは、Oracle Solaris Studio ソフトウェアの一部として提供されています。詳細は、er_src(1) のマニュアルページまたは『Oracle Solaris Studio パフォーマンスアナライザ』マニュアルを参照してください。
-xvpara コンパイルオプションを使用することからスタートすることを推奨します。—xvpara を使用してコンパイルすると、特定の構文の自動スコープ宣言が成功したかどうかを把握することができます。
例 6-1 -vpara による自動スコープ宣言
%cat source1.f
      INTEGER X(100), Y(100), I, T
C$OMP PARALLEL DO DEFAULT(__AUTO)
      DO I=1, 100
         T = Y(I)
         X(I) = T*T
      END DO
C$OMP END PARALLEL DO
      END
%f95 -xopenmp -xO3 -vpara -c -g source1.f
"source1.f", line 2: Autoscoping for OpenMP construct succeeded. 
Check er_src for details
特定の構文の自動スコープ宣言が失敗すると、次の例に示すような警告メッセージが (-xvpara によって) 発行されます。
例 6-2 -vpara による自動スコープ宣言の失敗
%cat source2.f
      INTEGER X(100), Y(100), I, T
C$OMP PARALLEL DO DEFAULT(__AUTO)
      DO I=1, 100
         T = Y(I)
         CALL FOO(X)
         X(I) = T*T
      END DO
C$OMP END PARALLEL DO
      END
%f95 -xopenmp -xO3 -vpara -c -g source2.f
"source2.f", line 2: Warning: Autoscoping for OpenMP construct failed. 
 Check er-src for details. Parallel region will be executed by
 a single thread.
詳細は、er_src で表示される、コンパイラコメントに示されます。
例 6-3 er_src の使用
% er_src source2.o
Source file: source2.f
Object file: source2.o
Load Object: source2.o
     1.         INTEGER X(100), Y(100), I, T
        
   Source OpenMP region below has tag R1
   Variables autoscoped as SHARED in R1: y
   Variables autoscoped as PRIVATE in R1: t, i
   Variables treated as shared because they cannot be autoscoped in R1: x
   R1 will be executed by a single thread because 
     autoscoping for some variable s was not successful
   Private variables in R1: i, t
   Shared variables in R1: y, x
     2. C$OMP PARALLEL DO DEFAULT(__AUTO)
   Source loop below has tag L1
   L1 parallelized by explicit user directive
   L1 autoparallelized
   L1 parallel loop-body code placed in function _$d1A2.MAIN_ 
      along with 0 inne r loops
   L1 could not be pipelined because it contains calls
     3.         DO I=1, 100
     4.                 T = Y(I)
     5.                 CALL FOO(X)
     6.                 X(I) = T*T
     7.         END DO
     8. C$OMP END PARALLEL DO
     9.         END
    10.