Thrust::Sort очень долго компилирует

Я пытаюсь скомпилировать блок примера кода с помощью Thrust, чтобы помочь изучить CUDA.

Я использую Visual Studio 2010, и у меня есть другие примеры для компиляции. Однако, когда я компилирую этот пример, компиляция занимает более 10 минут. Я выборочно закомментировал строки и выяснил, что это строка Thrust::sort, которая выполняется вечно (с этой одной закомментированной строкой компиляция занимает около 5 секунд).

Я нашел где-то сообщение, в котором говорилось о медленной компиляции sort в Thrust, и это было решение, которое приняла команда разработчиков Thrust (в 3 раза быстрее во время выполнения, но компилируется дольше). Но тот пост был в конце 2008 года.

Любая идея, почему это занимает так много времени?

Кроме того, я компилирую на машине со следующими характеристиками, так что это не медленная машина.

i7-2600k @ 4,5 ГГц
16 ГБ DDR3 @ 1833 МГц
RAID 0 из дисков 6 ГБ/с 1 ТБ

В соответствии с запросом это строка сборки, которую, похоже, вызывает Visual Studio.

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\bin\nvcc.exe" -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" -I"C:\ Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\include" -G0 --keep-dir "Debug\" -maxrregcount=32 --machine 64 --compile -D_NEXUS_DEBUG -g -Xcompiler "/EHsc /nologo/ Od /Zi /MTd " -o "Debug\kernel.obj" "C:\Users\Rob\Desktop\VS2010Test\VS2010Test\VS2010Test\kernel.cpp" -clean

Пример

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sort.h>
int main(void)
{
    // generate 16M random numbers on the host
    thrust::host_vector<int> h_vec(1 << 24);
    thrust::generate(h_vec.begin(), h_vec.end(), rand);
    // transfer data to the device
    thrust::device_vector<int> d_vec = h_vec;
    // sort data on the device
    thrust::sort(d_vec.begin(), d_vec.end());
    // transfer data back to host
    thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
    return 0;
}

person Veaviticus    schedule 19.05.2011    source источник
comment
Похоже, существует похожая известная проблема. для Thrust sort_by_key, хотя лично я не помню, чтобы сортировка занимала столько времени. Возможно, было бы полезно предупредить их об этих крайностях? Но если это проблема компилятора, они могут мало что сделать.   -  person Bart    schedule 19.05.2011
comment
Это занимает много времени, но 10 минут кажутся слишком большими. Можете ли вы также опубликовать параметры компиляции, которые вы используете?   -  person Pavan Yalamanchili    schedule 19.05.2011
comment
Я сейчас не за компьютером, но я просто использовал настройки по умолчанию в Visual Studio. Я только что установил Nvidia CUDA SDK и набор инструментов, установил компилятор VC90 (экспресс-выпуск VS2008), скопировал код из примера Thrust с веб-сайта Nvidia и попытался его скомпилировать. Я опубликую точные флаги компилятора позже   -  person Veaviticus    schedule 19.05.2011
comment
Нет ответа?! Ну, я тоже столкнулся с длительным временем компиляции после того, как начал использовать тягу в своей программе. Я на Ubuntu и использую CUDA 4.0.   -  person Nils    schedule 05.06.2011
comment
На CUDA 4.1 требуется чуть больше минуты, чтобы скомпилировать программу с в ней Thrust::sort на моем компьютере с 2 ГГц, 4 ГБ, Q6600, Windows 7. Вы можете переместить заголовки Thrust в предварительно скомпилированный заголовок или поместить всю функцию сортировки в отдельный файл .cu.   -  person Roger Dahl    schedule 31.01.2012


Ответы (1)


Компилятор в CUDA 3.2 не был оптимизирован для компиляции длинных сложных программ, таких как sort, с использованием режима отладки (т.е. nvcc -G0). Вы обнаружите, что CUDA 4.0 в этом случае намного быстрее. Удаление параметра -G0 также должно значительно сократить время компиляции.

person wnbell    schedule 15.06.2011