私は同じブロック内の他のスレッドとメンバーのいくつかを共有するCUDAコードでクラスをインスタンス化したいと思います。メンバー変数を共有できないのはなぜですか?
しかし、次のコードをコンパイルしようとすると、エラーが表示されます。»属性「shared」はここでは適用されません。«(nvcc version 4.2)。
class SharedSomething {
public:
__shared__ int i; // this is not allowed
};
__global__ void run() {
SharedSomething something;
}
その背後にある論理的根拠は何ですか?目的の動作(1つのブロックにまたがるクラスの共有メンバー)を実現するための回避策がありますか?
回避策をありがとう。これは、すべての共有データを保持する内部クラスFoo in Sharedを宣言することによって、より一般的にすることもできます。呼び出しコードは、共有されたFoo :: Sharedをインスタンス化し、それをFooのコンストラクタに渡します。このようにして、Foo :: Sharedが変更された場合、呼び出しコードを変更する必要はありません。 – user1716882
はいいいね。 – harrism