私は、cudaでsort_by_key()を使用してzip_iteratorを使用しようとしていますが、zip_iterator内の値はソート中に並べ替えられません元々あった)。zip_iterator値を使用すると、推論sort_by_keyの問題が発生する
例コード:fooVecとbarVecの秩序を維持しながら、私はこのコードが何を期待するもの
typedef thrust::device_vector<int> IntVec;
IntVec keyVec(100);
IntVec fooVec(100);
IntVec barVec(100);
for (int z = 0; z < 100; z++)
{
keyVec[z] = rand();
fooVec[z] = z;
barVec[z] = z;
}
thrust::sort_by_key(keyVec.begin(), keyVec.end(),
thrust::make_zip_iterator(make_tuple(fooVec.begin(), barVec.begin())));
がソート(それは正しくありません)keyVecの値に基づいています。これはsort_by_keyの機能ではありませんか? sort_by_keyはzip_iteratorsで動作しますか? zip_iteratorからデータをセット/プルするときに間違ったことをしていますか?このメソッドが正しくない場合、値の順序を保持する適切なメソッドは何ですか?
EX:
OS: RHEL 6.0 x86_64
CUDA Version: 4.1 (also tested with 4.1.1.5)
Thrust Version: 1.5
GPU: 4x nVidia Corporation GF100 [GeForce GTX 480] (rev a3)
nvidia driver: 290.10
nvcc version: release 4.1, V0.2.1221
compile string: nvcc testfile.cu
UPDATE: はまだsort_by_key取得することはできません()zip_iteratorsで動作するが、それは動作するCUDA 4.1に同梱
システムの詳細は、スラストを使用し
key,foo,bar (presort)
3,1,1
2,2,2
...
key,foo,bar (what i expect post sort)
2,2,2
3,1,1
...
key,foo,bar (what i actually get)
2,1,1
3,2,2
...
標準のthrust :: device_vector <> .begin()イテレータで正しく動作します。
'make_tuple()'の代わりに 'thrust :: make_tuple()'を使うと違いがありますか? – harrism
thrust :: make_tuple()を使用しても違いはありません – NothingMore
これはうまくいくはずです。 @ NothingMore:あなたのシステムの詳細は何ですか?(OS、ハードウェア、デバッグ/リリースモードなど) –