1

私のアルゴリズムでは、配列の約 10000 要素を追跡する必要があります。そのため、レコードごとにブール値が必要です。char 配列を使用して 10000 個の配列を (0/1 として) 追跡すると、多くの時間がかかります。メモリー。

各ビットが対応する配列レコードを表すCudaで10000ビットのビット配列を作成できますか?

4

1 に答える 1

1

Roger が言ったように、答えはイエスです。CUDA は通常の C と同じビット単位の操作 (つまり>><<および&) を提供するため、ビット配列を基本的に通常どおりに実装できます (ほとんどの場合、以下のスレッド同期の問題を参照してください)。


ただし、あなたの状況では、それはほぼ確実に良い考えではありません。

スレッドの同期に問題があります。GPU 上の 2 つのスレッドが、配列の 1 つのエントリの 2 ビットを反転しているとします。各スレッドはメモリから同じ値を読み取り、その操作をそれに適用しますが、その値を最後にメモリに書き戻すスレッドは、他のスレッドの結果を上書きします。(注: ビット配列が GPU コードによって変更されていない場合、これは問題ではありません。)

また、これが明示的に必要とされない限り、メモリ使用を最適化するべきではありません。10K 要素の配列はメモリをまったく消費しません。各ブール値を 64 ビット整数で格納したとしても、80 KB しかありません。そして明らかに、それらをより小さなデータ型に格納できます。(数千万、あるいは数億の要素を取得している場合にのみ、配列を可能な限り圧縮することについて心配し始める必要があります。)

また、GPU の動作方法は、各ブール値 (ほとんどの場合 32 ビット) にかなり大きなデータ型を使用することで最高のパフォーマンスが得られることを意味します。これにより、たとえば、メモリ結合がより適切に機能します。(このアサーションはテストしていません。確認するには、いくつかのベンチマークを実行する必要があります。)

于 2012-06-15T13:49:36.567 に答える