В программировании на CUDA предположим, что я вызываю функцию ядра с хоста.
Предположим, функция ядра:
my_kernel_func(){
doing some tasks utilizing multiple threads
}
Теперь с хоста, который я вызываю с помощью,
my_kernel_func<<<grid,block>>>();
В примерах NVDIA после этого они вызвали еще три функции:
cudaGetLastError()
CUDA Doc: Возвращает последнюю ошибку, сгенерированную любой изво время выполнения вызывает тот же хост-поток и сбрасывает его на cudaSuccess.
cudaMemcpy()
CUDA Doc: Копирует количество байтов из области памяти, на которую указывает src в область памяти, на которую указывают dst, , где kind указывает направление копирования и должен быть одним из cudaMemcpyHostToHost, cudaMemcpyHostToDevice, cudaMemcpyDeviceToHost, cudaMemcpyDeviceToDevice, или cudaMemcpyDefault. Передача cudaMemcpyDefault рекомендуется, если в качестве значения указывается тип переноса, в качестве которого указывается тип переноса. Однако cudaMemcpyDefault разрешено только в системах, поддерживающих унифицированную виртуальную адресацию. Вызов cudaMemcpy () с dst и src указателями, которые не соответствуют направлению копирования, приводит к неопределенному поведению.
, а затем
cudaDeviceSynchronize()
CUDA Doc: Блокирует до тех пор, пока устройство не выполнит все предыдущие запрошенные задачи. cudaDeviceSynchronize () возвращает ошибку в случае сбоя одной из предыдущих задач. Если для этого устройства был установлен флаг cudaDeviceScheduleBlockingSync , поток хоста будет блокироваться до тех пор, пока устройство не завершит свою работу.
Теперь я попытался поместить оператор печати в конец ядрафункция
my_kernel_func(){
doing some tasks utilizing multiple threads
print D
}
а также распечатывается в разных местах последовательного потока:
cudaGetLastError()
print A
cudaMemcpy()
print B
cudaDeviceSynchronize()
print C
Эта вещь печатается в следующем порядке
A
D
B
C
В основном,Мне нужно время, когда ядро выполнит свою задачу. Теперь я смущен, чтобы взять время окончания. Потому что на копирование данных должно уйти много времени. Теперь, если после этого я поставлю отметку времени окончания, она также может включать время копирования.
Есть ли какая-либо другая функция для определения окончания?