2011-09-16 41 views
0

私はCC 1.1カードを持っていて、私のプログラムでは、グローバルまたはのデバイスの関数を動的に割り当てる必要があります。__global__関数の動的メモリ割り当て

これらの配列は、実行するすべてのスレッドに対して作成されます。

mallocがエラーをスローし、Webサーフィンをすると、mallocを使用すると、2.0未満のCCでは不正です。

私は尋ねたいことはありますか?

おかげCC1.1デバイスの場合

答えて

1

私はあなたが固定サイズのメモリを使用することをお勧め:GPU上

__global__ my_kernel(...) { 

__shared__ float memory[BLOCK_SIZE]; 

}; 

動的割り当てはめったにありません必要と最も可能性の高いいくつかのパフォーマンスのボトルネックを導入することができます。特にコンピューティング機能1.1では、パフォーマンスを最大限に引き出し、ワープ内メモリの競合を避けるために、共有メモリのアライメント を調整する必要があります。

1

唯一の回避策はcudaMallocと、ホストからの十分なグローバルメモリを割り当てた後、スレッド間でそれを分割することです。

ほとんどの場合、ホストからわずか事前に割り当てるメモリはかなりうまく機能し、私は時々、このようなアイデアは良い見えた、それはすぐにそれがなかったことが判明しても1 カーネルmallocを(使用するを持っていたタスクが発生したことがありませんその古いデバイスとの互換性を損なうのも良いです。また、パフォーマンスに関して疑念がありますが、ベンチマークを実行したことはありません)。

関連する問題