делать события CUDA время выполнения cudaMalloc и cudaMemcpy? - PullRequest
3 голосов
/ 21 января 2012

Я использую следующий код для определения времени звонков на cudaMalloc().Мне любопытно: события CUDA влияют только на наше ядро, или же на «встроенные ядра».Другими словами, является ли следующий метод для синхронизации cudaMalloc() действительным?

cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
for(int t =0 ; t < 100 ; t++){
    float* test;
    cudaMalloc((void**)&test, 3000000 * sizeof(float));
    cudaFree(test);
}
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime; 
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("time elapsed on the GPU: %f ms", elapsedTime/100);

1 Ответ

2 голосов
/ 21 января 2012

cu (da) EventRecord () делает не что иное, как отправку команды в графический процессор, которая говорит графическому процессору записать метку времени, когда графический процессор обрабатывает команду.Отметка времени - это просто встроенный счетчик высокого разрешения.Таким образом, события CUDA наиболее полезны, когда используются как асинхронный механизм для синхронизации событий на GPU, например, сколько времени требуется конкретному ядру для запуска.Управление памятью CUDA в основном происходит на процессоре, поэтому события CUDA не идеальны для определения времени распределения CUDA и свободных операций.

Вкратце: лучше использовать синхронизацию на основе ЦП, например, gettimeofday ().

...