これは、プログラミングに関する概念的な質問です。
要約すると、2 つの配列/ベクトルがあり、1 つを並べ替える必要があります。そのため、arrayOne を並べ替えると、並べ替えのスワップごとに、同じことが arrayTwo に発生します。今、私は std::sort を使用すると比較関数を定義できることを知っています (私が想定しているカスタム オブジェクトの場合)。
だから私が望むのは、CUDAを使用して、ベクトルの1つの値に基づいて2つのベクトルをソートすることです。
これが私の不確実性が高まるところです。基本的には、Thrust ライブラリを使用して並べ替えを行いたいと考えています。カスタム比較関数の定義をサポートしていますか? もしそうなら、私はまだ arrayTwo の変更を伝播する方法を理解していません (CUDA ベースになるため)。
CUDA でカスタムの並列クイックソートを実装する時間がありません。
理由
基本的に、変数の配列の束に対して単一の配列に対してソートと計算を実行する必要があります (回帰木を考えてください)。当然のことながら、できるだけ早く行う必要があります。CPU ベースの並べ替えでは十分な速度が得られません。
#アップデート
ホストで2つを並べ替えるのに問題はありません.CUDAを使用するソリューションを探しています。ありがとう。
#更新 2
質問を投稿して以来、私は実際に幸運になり、解決策を見つけたと思います.Thrustは実際に私が探しているものをデフォルトで正確に提供することがわかりました:
#include <thrust/sort.h>
...
const int N = 6;
int keys[N] = { 1, 4, 2, 8, 5, 7};
char values[N] = {'a', 'b', 'c', 'd', 'e', 'f'};
thrust::sort_by_key(keys, keys + N, values);
// keys is now { 1, 2, 4, 5, 7, 8}
// values is now {'a', 'c', 'b', 'e', 'f', 'd'}
* http://code.google.com/p/thrust/wiki/QuickStartGuide#Fancy_Iteratorsから取得*
だから、今私がしなければならないのは、2 つの配列から 2 つの Thrust::device_vectors を取得することです (2D 配列から取得する必要があります)。幸せ。