CUDA : CUTIL TIMER - 경과 시간에 혼란
-
13-12-2019 - |
문제
프로그램을 평가할 때, 나는 어떤 시점에서 100msec 시간 경과를 얻었습니다.나는 모든 조작을 수색했지만 이번에는 개별적으로 조작이 없었습니다.그런 다음 CudathReadSynchronize 호출을 어디에서 왔는지 알아 차리고 첫 번째 호출은 100 msec이 걸립니다.그런 다음 아래의 예를 작성했습니다.cudathreadsynchronize가 첫 번째 행에서 호출되면 끝에있는 경과 시간 값이 1msec 미만으로 발견됩니다.그러나 불리지가 아니라면 평균적으로 110msec이 필요합니다.
int main(int argc, char **argv)
{
cudaThreadSynchronize(); //Comment out it then get 110msec as elapsed time..
unsigned int timer;
cutCreateTimer(&timer);
cutStartTimer(timer);
float *data;
CUDA_SAFE_CALL(cudaMalloc(&data, sizeof(float) * 1024));
cutStopTimer(timer);
printf("CUT Elapsed: %.3f\n", cutGetTimerValue(timer));
cutDeleteTimer(timer);
return EXIT_SUCCESS;
}
.
CUDATHReadSynchronize ()가 CUDA 라이브러리의 초기화를 처리합니다.커널을 완전히 초기화하는 올바른 방법이므로 다른 작업 평가에는 영향을 미치지 않습니다.시작할 수 있으며 처음에 cudathreadsynchronize를 호출하거나 올바른 방법이 있습니다 ..
해결책
CUDA를 사용하려면 'CUDA 컨텍스트'가 GPU에서 처음 생성되어야합니다. 이는 약 70-100ms가 필요합니다.예제에서 cudaThreadSynchronize();
가 컨텍스트를 만들고 있습니다.컨텍스트는 응용 프로그램에 대해 한 번만 생성됩니다.타이밍 분석을 수행 할 때 나는 또한 더미 메모리 복사본을 수행하여 컨텍스트를 생성합니다 (cudaThreadSynchronize();
를 사용하여 위에서 수행했을 때).
제휴하지 않습니다 StackOverflow