Question

I'm trying to use zip_iterator with a sort_by_key() in cuda and the values inside the zip_iterator are not getting re-ordered during the sort (the positions of the data stay the same as they were originally).

Example code:

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() ) ) );

What i expect this code to do is sort based on the value in keyVec (which it does properly) while maintaining the order of fooVec and barVec. Is this not what sort_by_key does? does sort_by_key work with zip_iterators? Am i doing something incorrect when setting up/pulling the data from the zip_iterator? If this method is incorrect what is the proper method to keep value ordering?

EX:

   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
   ...

Using Thrust that ships with CUDA 4.1

System Details:

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: Still cannot get sort_by_key() to work with zip_iterators but it works correctly with a standard thrust::device_vector<>.begin() iterator.

Was it helpful?

Solution

thrust::sort_by_key should be able to sort zip_iterator in the manner of your example.

I've not been able to reproduce the behavior you describe on any of several different platforms, but it's possible there's something unique about your system which causes an issue.

You should post the contents of testfile.cu and the details of your system to Thrust's bug tracker on Google Code so the developers can take a closer look.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top