als Intel Architecture Code Analyzer bekannt, ist IACA ein erweitertes Tool zur Bewertung der Codeplanung gegen Intel CPUs. Es arbeitet in drei Modi:
c/c:
geben den notwendigen IACA -Header (iacamarks.h) ein und platzieren Sie Start- und Endmarker um Ihre Zielschleife:/ * Nasm Usage *//////// MOV EBX, 111; Start Marker -Bytes DB 0x64, 0x67, 0x90; Start Marker -Bytes .inner MostLooplabel: ; Schleifenkörper ; ... JNE .inner MOSTLOOPLABEL; Bedingter Zweig nach hinten bis zur Schleife Mov Ebx, 222; Endmarker -Bytes DB 0x64, 0x67, 0x90; Endmarker -Bytes
Befehlszeile Invocation:
icaica aus der Befehlszeile mit entsprechenden Parametern wie:
iaca.sh -64 -arch -Grafe InnDeps.DOT FOOSEM. Eine Haswell -CPU, die einen Analysebericht und eine GraphViz -Visualisierung generiert. Betrachten Sie zum Beispiel den folgenden Assembly -Snippet:
/* C or C Usage */ while(cond){ IACA_START /* Innermost Loop Body */ /* ... */ } IACA_END
Durch Einfügen von Markierungen in diesen Code und analysieren, kann IACA melden (gekürzt): Durchsatzanalysebericht ------------------------------ Blockdurchsatz: 1,55 Fahrraddurchsatz Engpass: Frontend, Port2_agu, port3_agu [Portdruckausfall] | Anweisung -------------------------- | ----------------- | | 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 | Fügen Sie Rax, 0x20 hinzu | 0 cp | Jnz 0xffffffffffffffeC
Aus dieser Ausgabe identifiziert IACA den Haswell -Frontend und den AGU von Port 2 und 3 als Engpässe. Es deutet darauf hin, dass die Optimierung der von Port 7 zu verarbeitenden Speicheranweisung die Leistung verbessern könnte.
/* 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 bytesEinschränkungen:
iaca hat einige Einschränkungen:
Es unterstützt bestimmte Anweisungen, die in Analyse ignoriert wurden. Ausschließen älterer Modelle.
/* 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 bytesDer Durchsatzmodus ist auf innerste Schleifen beschränkt, da er keine Verzweigungsmuster für andere Schleifen schließen kann.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3