2016-10-07 16 views
0

私は現在、PGI(15.10)コンパイラでOpenACCを使用して、ほとんどのルーチンをGPGPUに移植することによって、スペクトル要素流体ソルバーを加速しようとしています。ソースコードはOO-Fortranで書かれています。このソフトウェアには、他の関数やサブルーチンを呼び出すサブルーチンの「レイヤー」があります。 openaccを使ってGPUにコードを渡すには、移植する必要がある各ルーチンに "$ accルーチン"を置くことを最初に試みてきました。コンパイル時には、 "pgf90 -acc -Minfo =加速" を使用して、私は次のエラーが表示されますFortran-OpenACCルーチンは、別のFortran-OpenACCルーチンをどのように呼び出すことができますか?

nvvmCompileProgram error: 9.

Error: /tmp/pgacc2lMnIf9lMqx8.gpu (146, 24): parse invalid forward reference to function 'innerroutine_' with wrong type!

PGF90-S-0155-Compiler failed to translate accelerator region (see -Minfo messages): Device compiler exited with error status code (Test.f90: 1)

これと同じ問題は、以下の簡単なFORTRANのプログラムで再現することができます:コンパイル、

再び
PROGRAM Test 
IMPLICIT NONE 

CONTAINS 

SUBROUTINE OuterRoutine(sol, xF, N) 
!$acc routine 
    IMPLICIT NONE 
    INTEGER :: N 
    REAL(KIND=8) :: sol(0:N,1:3) 
    REAL(KIND=8) :: xF(0:N,1:3) 
    ! LOCAL 
    INTEGER :: i 

     DO i = 0, N 
     xF(i,1:3) = InnerRoutine(sol(i,1:3)) 
     ENDDO 

END SUBROUTINE OuterRoutine 
FUNCTION InnerRoutine(sol) RESULT(xF) 
!$acc routine 
    IMPLICIT NONE 
    REAL(KIND=8) :: sol(1:3) 
    REAL(KIND=8) :: xF(1:3) 

     xF(1) = sol(1)*sol(2) 
     xF(2) = sol(1)*sol(3) 
     xF(3) = sol(1)*sol(1) 

END FUNCTION InnerRoutine 

END PROGRAM Test 

上記の "pgf90 -acc -Minfo = accel"プログラムは問題を引き起こします。

openaccは他のacc対応ルーチンを呼び出すacc対応ルーチンをサポートしていますか?

もしそうなら、私は間違っていますか?

答えて

1

あなたはOpenACCの "ルーチン"指示文を正しく使用しています。ここでの問題は、私たち(PGI)がまだ配列値関数で「ルーチン」を使用することをサポートしていないことです。問題は、このサポートではコンパイラが戻り値を保持する一時配列を作成する必要があるということです。すべてのスレッドがこの一時配列を割り当てる必要があり、パフォーマンスが著しく低下することを意味します。悪いのは、ギャングやワーカーレベルのルーチンがある場合に、temp配列の共有を処理する方法です。

私たちはこの機能のためにオープンリクエストをしていますが、それが解決するまでにはしばらく時間がかかるかもしれません。その間、ルーチンをインライン展開することができますか?すなわち " - Minline"でコンパイルする。

+0

ありがとうございます。インラインフラグを追加すると、コンパイルはテストコードで問題なく進行し、作業していた元のコードでこの問題が解決されたようです。 –

+0

質問と回答に挨拶を残すことはお勧めしません。とにかくあなたの名前はすでに投稿の下にあります。 http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts http://meta.stackoverflow.com/questions/251077/my-opening -hi-everyone-in-my-questions-keeping-disappearing通常、私もそれらを削除します。 –

+0

オフィー・オフィサー。あなたの声明はこのスレッドに必要な詳細を追加しました。これも。 –

関連する問題