2

次のように、両方ともデバイス定数メモリに格納されている別の定数に関して定数を定義しようとすると、次のようになります。

__device__ __constant__ float x=0.1;
__device__ __constant__ float y=2*x;

エラーが発生します:

エラー:デバイス上で空でないコンストラクタまたはデストラクタのコードを生成できません

ヒントはありますか?

4

1 に答える 1

6

__constant__と同じではありませんconst。特に、__constant__オブジェクトはホストから変更できます。したがって、コンパイラはコンパイル時の評価を適用できません。実行時にデバイスコード内から__constant__オブジェクトを書き込むことはできないため、実行時の初期化もできません。さらに、実際のカーネルコードが実行を開始する前に、このような初期化を実行できるデバイスのinitルーチンはありません。コンパイラによって生成されたエラーメッセージは、その最後の事実をほのめかしているようです。

次に、定義された定数を使用できます。

#define MAGIC_NUMBER_1  (0.1f)
#define MAGIC_NUMBER_2  (2.0f * MAGIC_NUMBER_1)

__constant__ float x = MAGIC_NUMBER_1;
__constant__ float y = MAGIC_NUMBER_2;
于 2012-08-25T01:30:24.787 に答える