>

질문

총 GPU 시간 + 총 CPU 오버 헤드는 총 실행 시간보다 작습니다. 왜요?

세부 정보

글로벌 메모리 액세스 및 커널 시작이 얼마나 자주 성능에 영향을 미칠 수 있는지 연구하고 있으며 여러 개의 작은 커널과 총 0.1 백만 개의 커널 호출을 갖는 코드를 설계했습니다. 각 커널은 전역 메모리에서 데이터를 읽고 처리 한 다음 전역 메모리에 다시 씁니다. 예상대로 코드는 하나의 큰 커널과 아주 적은 커널 시작을 가진 원래 디자인보다 훨씬 느리게 실행됩니다.

명령 줄 프로파일 러를 사용하여"gputime"(GPU 커널 또는 메모리 복사 방법의 실행 시간) 및"cputime"(CPU 오버 헤드)를 가져 오면서 문제가 발생했습니다. 비 차단 방법의 경우 gputime과 블로킹 방법의 CPU 오버 헤드의 합). 이해할 수 있듯이 모든 gputime과 모든 cputime의 합은 전체 실행 시간 (마지막"gpuendtimestamp"에서 첫 번째"gpustarttimestamp")을 초과해야하지만 반대의 경우도 마찬가지입니다 (gputimes의 합 = 13.835064 s, cputimes의 합 = 4.547344 s, 총 시간 = 29.582793). 한 커널의 끝과 다음 커널의 시작 사이에는 종종 다음 커널의 CPU 오버 헤드보다 큰 대기 시간이 많이 있습니다. 커널의 대부분은이 문제로 인해 발생합니다 : memcpyDtoH, memcpyDtoD 및 launch_closure_by_value, fast_scan 등과 같은 스러스트 인터 널 기능. 가능한 이유는 무엇입니까?

시스템 Windows 7, TCC 드라이버, VS 2010, CUDA 4.2

도움을 주셔서 감사합니다!


  • 답변 # 1

    이것은 대기 시간을 늘리는 프로파일 링과 Windows WDDM 하위 시스템의 조합 일 수 있습니다. 후자의 높은 대기 시간을 극복하기 위해 CUDA 드라이버는 GPU 작업을 일괄 처리하고 단일 Windows 커널 호출로 그룹으로 제출합니다. CUDA API 명령이 제출되지 않은 배치에있는 경우 GPU가 오랜 시간 동안 작동하지 않을 수 있습니다.

    (투표 및 수락이 가능하도록 답변에 @talonmies의 의견을 복사했습니다.)

  • 이전 fedora 26의 nginx - 최적의 types_hash 오류 메시지를 작성할 수 없습니다
  • 다음 php - 깊이가있는 다차원 배열 용 배열