0

構造体配列を定数メモリに渡そうとしましたが、同じ問題があります。まず、私の構造体は次のとおりです。

#define point_size 1024

struct Point {
    short x;
    short y;

    Point (short xx, short yy){
        x = xx;
        y = yy;
    }

    Point (){
        x = 0;
        y = 0;
   }
};

次の宣言を使用すると、コンパイル エラーが発生します:デバイス上の空でないコンストラクタまたはデストラクタのコードを生成できません

__constant__ Point points_once[point_size];

次の宣言を使用すると、これの奇妙な側面はなくなりました。しかし、それは私には有効ではありません。

__constant__ Point *points_once[point_size];

どうすればこの問題を解決できますか。お手伝いありがとうございます。最新のドライバーと、compute_30 および sm_30 構成の Visual Studio 2010 を使用しています。

4

1 に答える 1

1

この質問は本質的にこの質問の複製です。これが起こっている理由の説明については、そこの回答を確認してください。

回避策として、他の回答で説明されているように、定義済みの定数を直接割り当てて (つまり、コンストラクターではなく) 使用するか、単にコンストラクターの初期化を省略し、別のホスト ベースのルーチンを使用して__constant__領域を初期化することができます。 cudaMemcpyToSymbolを使用して必要な値。

ポインターの配列は実際には構造ストレージを割り当てないため、2 番目の例ではコンストラクターが呼び出されず、問題がないため、エラー メッセージは表示されません。

于 2013-04-19T13:56:26.027 に答える