Исправлена ​​проблема sort_by_key при использовании значений zip_iterator - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь использовать zip_iterator с sort_by_key () в cuda, и значения внутри zip_iterator не переупорядочиваются во время сортировки (позиции данных остаются такими же, как они были изначально).

Пример кода:

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 (что он делает правильно) при сохранении порядка fooVec и barVec.Разве это не то, что делает sort_by_key?sort_by_key работает с zip_iterators?Я делаю что-то неправильно при настройке / извлечения данных из zip_iterator?Если этот метод неверен, что является правильным методом для поддержания порядка значений?

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

Использование Thrust, поставляемого с CUDA 4.1

Сведения о системе:

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

ОБНОВЛЕНИЕ: Все еще не удается заставить sort_by_key () работать с zip_iterators, но он работает правильно со стандартным итератором thrust :: device_vector <>. Begin ().

1 Ответ

3 голосов
/ 02 марта 2012

thrust::sort_by_key должна быть в состоянии сортировать zip_iterator в порядке вашего примера.

Мне не удалось воспроизвести описанное вами поведение на любой из нескольких разных платформ, но, возможно, в вашей системе есть что-то уникальное, что вызывает проблему.

Вы должны опубликовать содержимое testfile.cu и информацию о вашей системе на Система отслеживания ошибок Thrust в Google Code , чтобы разработчики могли взглянуть поближе.

...