1

こんにちは、CAPS OpenACC コンパイラを使用していましたが、コンパイラは関数を標準の math.h にリンクできないようです。

実際、私の場合、加速ループ内のコードで sqrt 関数が使用されています。コードをコンパイルすると、以下のエラーがスローされます。

/tmp/cc8L0aKZ.o:compute_fluxes_XrxAnW.translated.i:function _flux_function_central: error: undefined reference to 'sqrt'

誰かがいくつかの解決策を得ますか?

ありがとう!

4

2 に答える 2

1

すべてのアクセラレータ コードは、ルーチン ディレクティブを使用してそのようにマークする必要があります。そうしないと、コンパイラはそのデバイス コードを生成しません。PGI には、これに対処する方法を説明する記事があります。

記事を読むか、コード内の他の最上位宣言に次のコードを追加してみてください。

#pragma acc routine(sqrt) seq
于 2016-07-16T17:21:36.810 に答える
0

で再試行してください

caps capsmc --openacc-target CUDA --io-report -Xnvcc -arch=sm_13 -c --force gcc -std=c99 -L/usr/include/math.h **-lm** compute_fluxes.c -o cf.13

(-lm実際には標準数学ライブラリとリンクしています )

于 2013-03-20T16:10:06.013 に答える