문제

프로그램을 평가할 때, 나는 어떤 시점에서 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();를 사용하여 위에서 수행했을 때).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top