CUDA 타이머 (이벤트)와 일반적인 CPU 타이밍 방법 (Linux의 경우 gettimeofday
등)을 사용하여 타이밍 커널 실행의 차이점을 이해하려고합니다.CUDA 타이머 - CPU 대 GPU?
http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/ 섹션 8.1에서 유일한 차이점은 호출이 비동기이기 때문에 CPU 타이머를 사용할 때 GPU를 동기화하는 것을 기억해야한다는 것입니다. 아마도 CUDA 이벤트 API가이를 수행합니다.
그래서이 정말 문제입니다 : 당신은 본질적으로 플랫폼 독립적 인 타이밍 API를 얻을 명시 적으로 GPU 이벤트와 cudaDeviceSynchronize
- 는 CPU와 동안 OS 당 별도의 API를 사용해야합니다.
?
미리 감사드립니다.
일반적으로 귀하의 답변에 동의하며 OP가 기본적으로 올바른 개념을 가지고 있다는 데 동의합니다. 그러나 나는이 문장에 동의하지 않는다 : "cuda 타이머 이벤트는 GPU 코드에만 의존하는 반면". 리눅스에서는 적어도 호스트 코드 인 코드 주위에 큐다 타이머 이벤트를 래핑 할 수 있습니다 (심지어 cudaEvents 타이밍 메커니즘 이외에도 내 프로그램에 CUDA가 필요하지 않음). 호스트 코드의 지속 시간을 정확하게 나타납니다. , 내가 말할 수있는 것에서. 따라서 cudaEvents는 경과 시간을 목적으로 발생하는 CPU와 GPU 코드의 상위 집합을 시간이 지날 것입니다. –
좋은 지적. 당신이 그 사실을 발견 한 유일한 사람이 아닌 것 같습니다. 해당 SO 질문 [여기] (http://stackoverflow.com/a/5846331/832648)를 참조하십시오. – Justin