저는 CUDA 응용 프로그램을 프로파일 링 중이며 비주얼 프로파일 러에있는 "제어 흐름 발산 (Control Flow Divergence)"메트릭에 대해 잘 모릅니다. 사용 설명서에 따르면CUDA - 비주얼 프로파일 러 및 제어 흐름 발산
:
제어 흐름의 차이는 따라서 차이를 일으키는 원인이되는 워프에서 모든 스레드에 의해 실행되지 않은 스레드 지침의 비율을 제공합니다.
다음int var; var = tex2D(texture, x, y); // texture fetch if(var < 0) { var *= -1; results[(blockIdx.x*blockDim.x) + threadIdx.x] = var; // global memory array }
이 발생 내용은 다음과 같습니다 :
내 CUDA 커널에 다음 코드를 가지고 있지 단일 스레드 분기 (나는 글로벌 메모리의 값을 확인)에 진입하지만, 프로파일 러 제어 흐름의 발산은 34 %이다. 동일한 브랜치에서 printf를 삽입하면 stdout에서 아무 일도 일어나지 않았지만 값이 43 %로 점프됩니다 (이상하게도 실행 시간이 증가합니다). 이것은 메트릭이 모든 스레드의 실행을 고려하지 않고 모든 커널의 명령어를 고려한다는 것을 의미합니까? (워프 발산을 효과적으로 효과적으로 갖지 않음)
두 경우 모두 발산 분기 메트릭은 0 %입니다.
4.0을 사용하고 있습니다. 5.0으로 업데이트하려고 노력할 것입니다. –