0

共有メモリ配列を次のように宣言する簡単なカーネルを作成しました。

extern __shared__ float As[100];

カーネルの起動時に、共有メモリの number_of_bytes を指定します。カーネルを (PTX に) コンパイルしているときに、「予期しないアドレス空間」というエラーが表示されます。私はsvn(進行中の3.3)からLLVMのかなり新しいバージョンを使用しています。ここで私が間違っていることはありますか?問題は extern キーワードにあるようですが、他にどのように指定すればよいでしょうか (共有メモリ)。別の LLVM ビルドを使用する必要がありますか?

構成 CUDA 5.0 、Nvidia Tesla C1060

4

2 に答える 2

1

さて、Nvidia フォーラムの Gert-Jan によると、この場合 extern キーワードは実際には必要ありません。彼のIDがSOにあるのかわかりません。

彼の返事は――

「共有メモリ配列の要素数がわかっている場合 (例: 100 要素)、extern キーワードを使用しないでください。また、カーネルの起動時に共有メモリのバイト数を指定する必要はありません (コンパイラが計算できます)。必要な要素の数がわからない場合にのみ、カーネルの起動時にこれを指定する必要があり、カーネルに「extern shared float *As」と記述する必要があります。

これが他のユーザーに役立つことを願っています。

于 2013-03-08T16:12:43.873 に答える
0

CUDA-C/C++ がこれをサポートしているかどうかはわかりませんが、回避策としてアドレス空間属性を設定してみてください。

__attribute__((address_space(3)))
extern __shared__ float As[100];

これにより、llvm はそれを共有アドレス空間に強制的に配置する必要があります.... 頑張ってください!

于 2013-03-18T20:24:40.830 に答える