size
カーネル関数では、両方とも長さ(実際には)の共有メモリの2つのベクトルが必要ですsizeof(float)*size
。
変数が必要な場合、カーネル関数に直接メモリを割り当てることはできないため、次のように動的に割り当てる必要がありました。
myKernel<<<numBlocks, numThreads, 2*sizeof(float)*size>>> (...);
そして、カーネル内:
extern __shared__ float row[];
extern __shared__ float results[];
しかし、これは機能しません。
これの代わりに、割り当てられextern __shared__ float rowresults[]
たメモリを使用して、すべてのデータを含む1つのベクトルのみを作成しました。2*size
したがってrow
、呼び出しは同じであり、results
呼び出しはのようになりますrowresults[size+previousIndex]
。そして、これは機能します。
とにかく期待どおりの結果が得られるので大きな問題ではありませんが、動的に割り当てられた共有メモリを2つ(またはそれ以上)の異なる変数に分割する方法はありますか?美しさのためだけに。