CUDA: использование cudaEvent_t и cudaThreadSynchronize - PullRequest
6 голосов
/ 27 апреля 2011

Я немного озадачен использованием cudaEvent_t.В настоящее время я использую вызов clock(), подобный этому, чтобы определить продолжительность вызова ядра:

cudaThreadSynchronize();
clock_t begin = clock();

fooKernel<<< x, y >>>( z, w );

cudaThreadSynchronize();
clock_t end = clock();

// Print time difference: ( end - begin )

Ищу таймер с более высоким разрешением, который я рассматриваю с помощью cudaEvent_t.Нужно ли мне звонить cudaThreadSynchronize(), прежде чем я записываю время, используя cudaEventRecord() или это избыточно?

Причина, по которой я спрашиваю, заключается в том, что есть другой звонок cudaEventSynchronize(), который, кажется, ожидаетсобытие записывается.Если запись задерживается, не будет ли вычисленная разница во времени показывать дополнительное время после завершения работы ядра?

1 Ответ

13 голосов
/ 27 апреля 2011

На самом деле есть еще больше функций синхронизации (cudaStreamSynchronize).Руководство по программированию имеет подробное описание того, что делает каждый из них.Использование событий в качестве таймеров в основном сводится к следующему:

//create events
cudaEvent_t event1, event2;
cudaEventCreate(&event1);
cudaEventCreate(&event2);

//record events around kernel launch
cudaEventRecord(event1, 0); //where 0 is the default stream
kernel<<<grid,block>>>(...); //also using the default stream
cudaEventRecord(event2, 0);

//synchronize
cudaEventSynchronize(event1); //optional
cudaEventSynchronize(event2); //wait for the event to be executed!

//calculate time
float dt_ms;
cudaEventElapsedTime(&dt_ms, event1, event2);

Важно синхронизировать на event2, потому что вы хотите убедиться, что все выполнено, прежде чем вычислять время.Поскольку оба события и ядро ​​находятся в одном потоке (порядок сохранен), event1 и kernel также были выполнены.

Вместо этого вы можете вызвать cudaStreamSynchronize или даже cudaThreadSynchronize, но оба излишниэто дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...