2016-04-18 9 views
0

多くのOpenACCチュートリアルでは、依存関係を自動的に検査し、ループが実際に並列化できることを確認することで、コンパイラ/アクセラレータが正確性をチェックすることを前提としています。しかし、OpenACC仕様では、必須の正しさ分析について何も言及していないようです。 OpenACCコンパイラは、ループが実際に並列化可能かどうかを確認し、そうでない場合は放棄しますか?OpenACCコンパイラの依存解析は必須ですか?

答えて

2

コンパイラは、ループを解析して、 "loop"ディレクティブの "auto"句が使用されているとき、それらがデータに依存しないかどうかを判断する必要があります。 (OpenACC標準のセクション2.9.6参照)。

"カーネル"構造内のループでは、 "auto"句は、 "independent"句または "seq"句を使用しない限り、デフォルトで有効になっています。

"並列"構成の "loop"ディレクティブの場合、 "auto"はデフォルトでは有効になっていないため、装飾ループは独立していると見なされます。

+1

これより少し強くなっています。並列化された領域内では、装飾されたループは暗黙的に「独立」節を持ち、コンパイラは分析を行う必要はありません。パラレル領域内の装飾されていないループの場合、コンパイラまでです。コンパイラーは、並列リージョン内のデコレートされていないループを分析する必要はありませんが、頻繁に行います。 – jefflarkin

関連する問題