3

たまにしか繰り返されない多くの異なるキーを使用して、配列のキー付きリダクションを行う必要があります。

keys =  {1,2,3,3,4,5,6,7,7, 8, 9, 9,10,11,...}
array = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,...}

// after reduction
result = {1,2,7,5,6,7,17,10,23,13,14}

thrust::reduce_by_keyほとんどの操作は実際にはある配列から別の配列にコピーするだけなので、(または他のセグメント化された削減方法)を使用することは、ここでは最速のオプションではありません。

この問題に対するより良いアプローチは何でしょうか?

4

1 に答える 1

3

実際にreduce_by_key 、ここで使用する適切なアルゴリズムです。ただ、Thrust の現在の実装はそれほど高速ではありません。詳しく説明reduce_by_keyすると、memcpy の速度で実行することを妨げるものは何もなく、他の実装では既にその速度を達成していると思います。Thrust v1.7 の暫定的な計画には、関連するback40computingプロジェクトreduce_by_keyのコードを使用して、およびその他のスキャンベースのアルゴリズムのパフォーマンスを改善することが含まれます。

セグメントが (1) 長いか、(2) 均一な長さの場合は、 よりもうまくいく可能性があることに注意してくださいreduce_by_key。たとえば、ある時点で、キーやヘッド フラグよりもオフセット ベースのセグメント記述子を使用する方が経済的です。ただし、セグメントが短い場合 (あなたの場合のように)、または長さが非常に可変である場合、最適なreduce_by_key実装は実際にはジョブに最適なツールです。

于 2012-02-23T19:55:52.190 に答える