2016-08-29 4 views
3

Halide 언어로 작성된 코드에 성능 카운터가 있습니까? 내 코드로 얼마나 많은로드, 저장 및 ALU 연산이 수행되는지 알고 싶습니다.Halide 성능 카운터?

다단식 파이프 라인을 예약하기위한 Halide 튜토리얼은 할당 된 메모리,로드, 저장 및 호출량을 halide Funcs와 비교하여 다른 스케줄을 비교하지만이 정보가 수집 된 방법을 알지 못합니다. 이 작업 중 하나가 발생할 때마다 trace_stores, trace_loads 및 trace_realizations를 사용하여 콘솔에 인쇄하는 것이 가능할 수도 있습니다. 이것은 프로그램의 실행을 크게 늦추고로드, 저장 및 ALU 작업에 필요한 콘솔 출력의 긴 목록을 컴파일하는 일종의 카운팅 스크립트가 필요하기 때문에 좋은 옵션은 아닙니다.

답변

2

나는 단지 trace_xxx 출력을 사용하고 스크립트/프로그램을 실행했다고 확신한다.

X86 플랫폼에서 실제 성능 수치를 찾고 있다면 Intel VTune Amplifier으로 갈 것입니다. 꽤 비싸지 만, 학계 (학생, 교사, 연구원) 또는 오픈 소스 프로젝트를위한 것이라면 무료 일 수 있습니다.

그 외의 경우에는 환경에 HL_DEBUG_CODEGEN=1을 설정하여 명령문 코드를 낮추면 루프 구조와 데이터 사용에 대해 더 잘 이해할 수 있습니다. 이 출력은 stdout이 아니라 stderr로갑니다.

편집 : Linux의 경우 perf입니다.

2

현재 성능 카운터 기반 지원이 없습니다. 휴대용으로 만드는 것은 상당히 어렵습니다. (그리고 모바일 장치에서는 OS가 하드웨어에 대한 액세스를 허용하지 않는 경우가 많습니다.) Profiling.cpp 및 src/profiling.cpp의 지원은 perf 카운터 작동을 위해 사용될 수 있습니다. 프로파일 링 하강 패스는 런타임에서 Func 및 Pipeline 실행에 대한 정보를 업데이트하는 코드를 추가합니다. 이 정보는 다른 스레드가 수집하고 집계합니다.

파일에 추적을 실행하면 (예 : HL_TRACE_FILE을 사용하여) 이진 형식이 사용되며 좀 더 효율적입니다. 이진 형식으로 작업하는 도구는 utils/HalideTraceViz를 참조하십시오. 이것은 일반적으로 팀 내에서 분석이 이루어지는 방법입니다.

유망 해 보였던 OProfile에 대한 조사가 소량 있었지만 코드가 작동하지 않는다고 생각합니다.