Тяга :: Сортировка очень долгое время компиляции - PullRequest
3 голосов
/ 19 мая 2011

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

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

Я нашел где-то пост, в котором говорилось о том, как сортировка медленно компилируется в 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 --машина 64 --компилировать -D_NEXUS_DEBUG-g -Xcompiler "/ EHsc / nologo / Od / Zi / MTd" -o "Отладка \ 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;
}

1 Ответ

1 голос
/ 15 июня 2011

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

...