다음 코드를 사용하여 cudaMalloc()
으로 전화를 걸었습니다. 저는 궁금합니다. CUDA 이벤트는 우리 커널에만 시간을 내주 는가, 아니면 "내장 된 커널"에 시간을 둡니다. 즉, cudaMalloc()
의 유효한 다음과 같은 방법이 있습니까?CUDA 이벤트 시간에 cudaMalloc 및 cudaMemcpy가 실행됩니까?
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
for(int t =0 ; t < 100 ; t++){
float* test;
cudaMalloc((void**)&test, 3000000 * sizeof(float));
cudaFree(test);
}
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("time elapsed on the GPU: %f ms", elapsedTime/100);
하지만 시간이 cudaMalloc입니까? 즉, 커널 실행 시간 만 필요할 때 cudaMalloc, cudaMemcpy 또는 cudaFree와 같은 다른 것이 첫 번째 cudaEventRecord와 두 번째 사이에 호출되지 않도록해야합니까? – user2023370
비동기 CUDA memcpy는 공정한 게임이지만 드라이버가 페이지 테이블을 뒤지는 동안 cudaMalloc()/cudaFree()가 GPU를 멈출 수 있습니다. CUDA 이벤트는 여전히 해답을 설명하는대로 타이밍을 기록하지만 타이밍 정보는 유용하지 않습니다. – ArchaeaSoftware