인텔 아키텍처 코드 분석기로 알려진 IACA는 인텔 CPU에 대한 코드 스케줄링을 평가하기 위한 고급 도구입니다. 세 가지 모드로 작동합니다.
기능 및 애플리케이션:
사용:
IACA 사용 지침은 다음에 따라 다릅니다. 프로그래밍 언어를 사용하세요.
C/C :
필요한 IACA 헤더(iacaMarks.h)를 포함하고 대상 루프 주위에 시작 및 끝 마커를 배치합니다.
/* C or C++ Usage */ while(cond){ IACA_START /* Innermost Loop Body */ /* ... */ } IACA_END
집회 (x86):
지정된 매직 바이트 패턴을 삽입하여 마커를 수동으로 지정합니다.
/* NASM Usage */ mov ebx, 111 ; Start marker bytes db 0x64, 0x67, 0x90 ; Start marker bytes .innermostlooplabel: ; Loop body ; ... jne .innermostlooplabel ; Conditional Branch Backwards to Top of Loop mov ebx, 222 ; End marker bytes db 0x64, 0x67, 0x90 ; End marker bytes
명령줄 호출:
다음과 같은 적절한 매개변수를 사용하여 명령줄에서 IACA를 호출합니다. as:
iaca.sh -64 -arch HSW -graph insndeps.dot foo
이것은 Haswell CPU에서 64비트 바이너리 foo를 분석하여 분석 보고서와 Graphviz 시각화를 생성합니다.
출력 해석:
출력 보고서는 대상 코드의 스케줄링 및 병목 현상에 대한 자세한 정보를 제공합니다. 예를 들어, 다음 어셈블리 코드 조각을 고려해보세요.
.L2: vmovaps ymm1, [rdi+rax] ;L2 vfmadd231ps ymm1, ymm2, [rsi+rax] ;L2 vmovaps [rdx+rax], ymm1 ; S1 add rax, 32 ; ADD jne .L2 ; JMP
이 코드 주위에 마커를 삽입하고 분석하여 IACA는 보고할 수 있습니다(요약).
Throughput Analysis Report -------------------------- Block Throughput: 1.55 Cycles Throughput Bottleneck: FrontEnd, PORT2_AGU, PORT3_AGU [Port Pressure Breakdown] | Instruction --------------------------|----------------- | | vmovaps ymm1, ymmword ptr [rdi+rax*1] | 0.5 CP | | 1.5 CP | vfmadd231ps ymm1, ymm2, ymmword ptr [rsi+rax*1] | 1.5 CP | vmovaps ymmword ptr [rdx+rax*1], ymm1 | 1 CP | add rax, 0x20 | 0 CP | jnz 0xffffffffffffffec
이 출력에서 IACA는 다음을 식별합니다. Haswell 프런트엔드와 포트 2 및 3의 AGU가 병목 현상을 일으킵니다. 포트 7에서 처리할 저장소 명령을 최적화하면 성능이 향상될 수 있음을 시사합니다.
제한 사항:
IACA에는 몇 가지 제한 사항이 있습니다.
위 내용은 IACA(인텔 아키텍처 코드 분석기)는 인텔 CPU의 코드 성능을 분석하고 최적화하는 데 어떻게 도움이 됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!