Почему время планирования CUFFT больше в CUDA 5.5, чем в CUDA 4

В рамках моей исследовательской работы мне нужно измерить время планирования библиотеки CUFFT в разных версиях CUDA (особенно в CUDA 4 и CUDA 5.5). Давайте посмотрим на один из результатов одномерного БПФ размером 4096, как показано ниже,

CUDA 5.5 и GeForede GTX 770

Размер БПФ: 4096

Время планирования: 96322,7 мс (микросекунды)

Загрузка данных: 36,6 мс (микросекунды)

Время исполнения: 135,9 мкс (микросекунды)

Выборка данных: 42,5 мс (микросекунды)

CUDA 4 и GeForce GTX 560

Размер БПФ: 4096

Время планирования: 102,7 мс (микросекунды)

Загрузка данных: 26,4 мс (микросекунды)

Время исполнения: 72,0 мкс (микросекунды)

Выборка данных: 27,3 мс (микросекунды)

Я действительно шокирован, увидев, что время планирования CUFFT на CUDA 5.5 и GeForede GTX 770 почти в 900 раз медленнее, чем на CUDA 4 и GeForce GTX 560.

Вместо этого, он должен быть быстрее в CUDA 5.5 и GeForede GTX 770 по следующим двум причинам: 1) CUDA 5.5 является последней версией, обычно последние версии быстрее, и 2) GPU GTX 770 имеют лучшие характеристики, чем у GTX. 560.

Мой вопрос заключается в том, почему такая разница во времени планирования?

Для получения более подробной информации, пожалуйста, смотрите код ниже, о том, как я измерил время, используя события cuda,

   /* creates 1D FFT plan */

cudaEventRecord(start0, 0);
    cufftPlan1d(&plan, NX, CUFFT_C2C, BATCH);
cudaEventRecord(stop0, 0);
cudaEventSynchronize(stop0);

     /* transfer to GPU memory */

     cudaEventRecord(start1, 0);
    cudaMemcpy(devPtr, data, sizeof(cufftComplex)*NX*BATCH, cudaMemcpyHostToDevice);
cudaEventRecord(stop1, 0);
cudaEventSynchronize(stop1);


cudaEventRecord(start2, 0);

    /* executes FFT processes */
    cufftExecC2C(plan, devPtr, devPtr, CUFFT_FORWARD);
cudaEventRecord(stop2, 0);
cudaEventSynchronize(stop2);

    /* transfer results from GPU memory */

    cudaEventRecord(start3, 0);
cudaMemcpy(data, devPtr, sizeof(cufftComplex)*NX*BATCH, cudaMemcpyDeviceToHost);
    cudaEventRecord(stop3, 0);
cudaEventSynchronize(stop3);

Буду признателен за ваши комментарии. Заранее спасибо.

0 ответов

Другие вопросы по тегам