2016-11-21 5 views
0

私はCUDAの初心者です。ダブルデータ型の共有メモリとダブルデータ型のポインタを割り当てようとしています。私は特定の場所 CUDAでデータの配列とデータへのポインタのための共有メモリの動的割り当て

int v = threadIdx.x; 
dataShared[v] = &dataShared[v + (v+1)*data.V]; 

私は共有2D arrayinの各列を指す2Dダブル・データ・アレイと1dのポインタ配列をしたい時にこのデータへのポインタを望んでここ

extern __shared__ double dataShared[]; 

を使用してデータを割り当てていますメモリ。ここで私はパフォーマンスの影響のためにポインタ配列の動的割り当てを避けています。ここでポインタ配列は、2d配列が結果として列シフトされるように、カラムにアクセスするためにシフトされ使用されます。

ただし、これは許可されていません。これを達成できる方法は他にあります。現在、私はcuda 7.5を使って作業しています。これを達成するために何か新しいことがあれば、誰かが提案することができるでしょう。

+1

あなたが何を求めているのかは不明です。次の行: 'dataShared [v] =&dataShared [...]'は、double型の配列要素にポインタ型の値を代入しているので意味がありません。 CUDAに問題があることを真剣に疑う。最初にC言語の解を思いついてみてください。確かにCUDAでもうまくいくでしょう。意味のある回答を得るためには、より多くのコードを投稿したり、あなたの意図をよりよく説明したりする必要があります。 [XY問題](http://xyproblem.info/)でもかまいませんので、解決しようとしている問題のコンテキストに関する情報を追加したい場合があります – Drop

答えて

2

あなたが共有メモリの同じブロックを指すように、さまざまな種類の、2つの異なるポインタを使用することができます。

extern __shared__ char dataShared[]; 
double ** columns = (double **) dataShared; //Here you can store pointers to columns 
double * realData = (double *) (dataShared + N * sizeof(double *)); //N is the number of columns 

ここでは、共有メモリの一つのブロックを使用しますが、それの2つの領域に異なるオフセットを使用(列へのポインタの場合はオフセット0、実際のデータの場合はオフセットN * sizeof(double *))。

関連する問題