2017-03-20 4 views
3

GPU의 기본 커널에서 보조 커널을 실행하면 약간의 오버 헤드가 발생합니다. 이 오버 헤드의 양에 영향을 미치는 요인은 무엇입니까? 예 : 커널 코드의 크기, 커널이 시작되는 곳의 SM 점유율, 커널 인수의 크기 등.동적 병렬 처리 커널 시작의 오버 헤드에는 어떤 요소가 영향을 줍니까?

이 질문을 위해 다음을 포함하여 "오버 헤드"를 정의하십시오. 시간 간격 :

시작 일 : SM은 발사 명령을
끝을 본다 :는 SM이 하위 커널

플러스

시작의 명령을 실행 시작 : 마지막으로 SM은 하위의 명령을 실행 커널 (또는 아마도 하위 커널 명령어에 의한 마지막 쓰기는 관련 메모리 공간에 커밋 됨)
End : 하위 커널 시작 후 상위 명령의 다음 명령 실행.

+0

언급 한 "오버 헤드"에는 시작 호출부터 자식 커널 시작까지의 기간 만 포함됩니까? – xhg

+0

@aahung : 편집을 참조하십시오. – einpoklum

답변

1

이 답변은 실험을 수행하기 위해 수행해야 할 작업에 대한 생각보다는 장치 측 런타임 구현에 대한 경험이나 지식을 기반으로 한 것이 아닙니다.

그리드 구성과 레지스터 등록 사용은 SM이 다른 커널로 옮겨 지도록 상태를 저장할 필요가 있으므로 어떤 영향을 미칩니다. 또한 장치 런타임이 모든 구성을 처리하는 방법을 알지 못하기 때문에 시작된 블록 수에 영향을 미칠 수 있습니다. 한편, 피 호출 수신자 등록/코드 크기가 왜 큰 영향을 미치는지 나는 알지 못합니다.

위의 시험 중 하나를 시험하기위한 시험/실험은 없습니다.

+0

필자는 경험적 데이터를 기반으로 한 것이 아니라 의견을 달리하는 경향이 있으며 적어도 두 가지 요인을 제안합니다. 블록 수 : 장치는 그냥 어딘가에 숫자로 유지하고 필요에 따라 더 많은 블록을 전달합니다. 모든 블록에 대해 사전 할당이 없습니다. 레지스터 수 : 새 커널을 시작하기 전에 레지스터 값이 초기화되지 않으므로 그 이유가 문제가되지는 않습니다. 물론, 나는 틀릴 수도 있지만, 실제로 이것에 대한 몇 가지 중요한 사실을 원합니다 ... – einpoklum

+0

@einpokum : 블록과 레지스터의 수를 다시 작성하십시오 : 커널을 한 번 실행하기 위해 실행중인 커널의 상태를 어딘가에 저장해야합니다. 실행 완료되었습니다. 이 상태를 저장하려면 값을 복원하는 데 사용되는 레지스터의 수와 각 블록에 대한 리소스에 의존하는 리소스가 필요합니다. 어쩌면 주 메모리에 의존하지 않는 레지스터 값을 저장하는 비밀 방법이있을 것입니다. 그런 다음 그것에 액세스하는 것이 좋을 것입니다 ... –