これが私のコードです:
struct S {
int a, b;
float c, d;
};
class A {
private:
S* d;
S h[3];
public:
A() {
cutilSafeCall(cudaMalloc((void**)&d, sizeof(S)*3));
}
void Init();
};
void A::Init() {
for (int i=0;i<3;i++) {
h[i].a = 0;
h[i].b = 1;
h[i].c = 2;
h[i].d = 3;
}
cutilSafeCall(cudaMemcpy(d, h, 3*sizeof(S), cudaMemcpyHostToDevice));
}
A a;
実際、これは CUDA と OpenGL を含む複雑なプログラムです。このプログラムをデバッグすると、cudaMemcpy で実行すると失敗し、エラー情報が表示されます
cudaSafeCall() ランタイム API エラー 11: 引数が無効です。
実際、このプログラムは、正しく実行できる別のプログラムから変換されています。しかし、その例では、クラスではなくメイン関数で 2 つの変数 S* d と S h[3] を使用しました。さらに奇妙なのは、このクラス A を小さなプログラムに実装したことです。問題なく動作します。そして、ドライバーを更新しましたが、エラーがまだ存在します。
なぜこれが起こるのか、そしてそれを解決する方法について誰かが私にヒントを与えることができますか. ありがとう。