私はデバイス上で動作するようにいくつかのCUDAコードを書いています。このコードでは、定数値のルックアップテーブルを2つ使用します。これらの最初は、256個の符号なしintの配列であり、私はとしてそれを宣言する:CUDAでdim3構造体の定数配列を定義する方法
__constant__
uint16_t edgeTable[256]={
0x000,
0x019,
... etc.
};
そして、これは罰金コンパイルするようです。
第二はDIM3の固定サイズアレイであり、私はこの試み:
__constant__
dim3 offsets[8] = {
{0, 0, 0}, {0, 0, 1}, {0, 1, 0},
... etc
};
するためにどのコンパイラ・オブジェクト。エラーメッセージが表示されて:
error: dynamic initialization is not supported for __device__, __constant__ and __shared__ variables.
はおそらく、私は、動的初期化を誤解したが、静的な初期化であるように私には思える、コンパイラは、すべてのサイズをうまくすることができ、すべての値が提供されています。
私はここで何が欠けていますか?
私は何をしようとしていますか?私はこの問題の重要な特徴は、それはCUDAはC++のコンパイルモデルを使用し、dim3
は次のように扱われているのgcc 4.8.4
おそらく愚かな質問 - C++ 11を有効にするためにフラグを渡しましたか? – Hurkyl
パラメータ化されたコンストラクタの初期化(dim3はクラスです)は、C++の前にC++ではサポートされていません – talonmies
おそらく、これは実際には動的初期化(上記のコメントを参照)のフォームであり、これらの変数型は、コンパイラが示したように、C++ 11コンパイラスイッチに関係なく、表示されます。回避策として、 'int'の配列(' __constant__ int'の静的初期化)を作成し、それをカーネルコードの 'dim3'の配列にキャストすることができます。おそらく[this](http:// pastebin .com/FrMZxL8T)。私はあなたがおそらくすでに自分でそのような回避策を見つけ出している可能性があると考えています。だから私はこれが答えだとは思わない。 –