Выполняя некоторые базовые примеры CUDA, сделанные NVIDIA, я скопировал некоторый код, чтобы протестировать ускорение с CPU на вычисления GPU для матричного умножения.cudaEventRecord() Неправильно верен код процессора Visual Studio
После 30 минут просмотра результатов и просмотра моего процессора (да CPU), выполняющего вычисления в 1000 раз быстрее, чем мой GPU, я понял, что время не работает правильно. Отрезала кода выглядит (это код от NVIDIA):
//Create timers
cudaEvent_t start;
cudaEvent_t stop;
float simpleKernelTime;
float optimisedKernelTime;
//start timer
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
matrixMultKernel<<<grid, block >>>(a_d, b_d, c_d, N);
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&elapsedTime, start, stop);
// Print time and do other things
cudaEventRecord(start, 0);
matrixMultCPU(a_h, b_h, d_, N);
cudaEventRecord(stop, 0)
cudaEventSynchronize(stop);
cudaEventElapsedTime(&elapsedTime, start, stop);
// Print time
Этот код прекрасно работает на машине Linux (я скопировал один и тот же код, что и человек рядом со мной, и он получал хорошие сроки), но на машине с Windows 8 с Visual Studio 2013 время на процессорной части (вторая половина отрезки) не работало (всегда давало ~ 0,003 мс).
Почему это происходит? Я исправил его с помощью <time.h>
(удаление cudaEventRecord()
звонков и использование стандартных подходов синхронизации кода C), поэтому я не хочу знать, как это исправить, но еще больше, почему это происходит.
"Я установил его с помощью' '" Что ...? Вы говорите, что время неверно, без этого, и исправить это? –
@buttifulbuttefly nononono, я удалил вызовы cudaEventRecord и использовал стандартное время C. –
О закрытом голосовании: «Этот код * работает *, и я знаю, как заставить его работать должным образом. Я не прошу помощи по отладке кода, это хороший теоретический вопрос, который я считаю. –