JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: OpenMP API ユーザーガイド     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  OpenMP API について

2.  OpenMP プログラムのコンパイルと実行

3.  実装によって定義される動作

4.  入れ子並列処理

5.  タスク化

6.  変数の自動スコープ宣言

6.1 自動スコープ宣言用データスコープ節

6.1.1 __auto

6.1.2 default(__auto)

6.2 並列構文のスコープ宣言の規則

6.2.1 スカラー変数に関するスコープ宣言規則

6.2.2 配列に関するスコープ宣言規則

6.3 task 構文のスコープ宣言規則

6.3.1 スカラー変数に関するスコープ宣言規則

6.3.2 配列に関するスコープ宣言規則

6.4 自動スコープ宣言に関する一般的な注意事項

6.5 制限事項

6.6 自動スコープ宣言結果の確認

6.7 自動スコープ宣言の例

7.  スコープチェック

8.  パフォーマンス上の検討事項

A.  指令での節の記述

索引

6.6 自動スコープ宣言結果の確認

自動スコープ宣言の結果を確認したり、自動スコープ宣言が失敗したために直列化した並列領域の有無を確認したりするには、コンパイラのコメントを使用します。

コンパイルで -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.