CudaEvents를 사용하여 수행 한 타이밍을 해석하려고하는데 CudaEvents를 통한 커널 실행에 커널 시작 시간이 포함되어 있습니까?CudaEvent 커널 시작 타이밍
불행히도 Cuda 호환 GPU에 대한 액세스 권한이 없기 때문에 테스트를 수행 할 수 있습니다. 그것은 확실히 내 실험을 기반으로 오버 헤드의 일부 종류를 캡처
많은 감사
CudaEvents를 사용하여 수행 한 타이밍을 해석하려고하는데 CudaEvents를 통한 커널 실행에 커널 시작 시간이 포함되어 있습니까?CudaEvent 커널 시작 타이밍
불행히도 Cuda 호환 GPU에 대한 액세스 권한이 없기 때문에 테스트를 수행 할 수 있습니다. 그것은 확실히 내 실험을 기반으로 오버 헤드의 일부 종류를 캡처
많은 감사
.
cudaEventRecord(start);
cudaMemcpy(...); // cudaMemcpy 1
my_kernel<<<...>>>(...);
cudaMemcpy(...);
cudaEventRecord(stop);
: CPU 오버 헤드가 커널 출시의 이전 작업을 분리로
나는,이 커널이 다른 동기 활동에 의해 괄호 경우, 다음 CPU 오버 헤드 반드시 포함되어야 분명해야한다고 생각
는 물론 위에 묘사 된 타이밍이 cudaMemcpy 1 커널 호출 사이의 CPU 오버 헤드를 포착해야한다는 것을 나에게 분명한 것 같다 (커널 자체에 기인하지 다양한 시간의 기여와 함께합니다.) 그래서
빈 커널
cudaEventRecord(start);
my_kernel<<<...>>>(...);
cudaEventRecord(stop);
cudaEventSynchronize(stop);
을 위의 패턴의 내 테스트를 기반으로하고 :
__global__ void my_kernel(){
}
I가 타이밍을 관찰 커널이 단독으로 또는 다른 비동기 호출에 의해 괄호 때 덜 분명한 경우입니다 적어도 몇 마이크로 초 리눅스, 이것은 꽤 이상 내 빈 커널에서 두 개의 명령을 실행하는 데 필요한 시간보다 :
Function : _Z8mykernelv
/*0000*/ /*0x00005de428004404*/ MOV R1, c [0x1] [0x100];
/*0008*/ /*0x00001de780000000*/ EXIT;
따라서 내가 어떤 종류의 O를 주장 f 실행 설정 오버 헤드가 cudaEvent
시스템에 캡처됩니다. 누군가가이 오버 헤드가 이 아니라고 주장하고 싶다면 CPU 오버 헤드가 아니라 다른 것입니다.
필자의 주장에 따르면 어떤 형태의 오버 헤드가 캡처되고 있으며, CPU 오버 헤드로 간주하지 않을 이유가 없습니다. 또한 마커 바로 다음에 cudaEventSynchronize()
이 포함 된 일반적인 cudaEvent
타이밍의 경우 cudaEvent
시스템에서 캡처 한 지속 시간 동안 호스트 스레드가 차단되어 start
과 stop
마커 사이에 있음을 알 수 있습니다. 따라서 그 이유는 알 수 없습니다. CPU 오버 헤드로 참조하지 않는 경우입니다.
"오버 헤드 캡처"는 기본 스트림을 사용하는지 여부에 따라 다릅니다. – einpoklum