답변:
일반적으로 이러한 각 작업은 인수가 파이프 라인의 다양한 단계에서 레지스터에있는 경우 단일 클럭주기를 실행하여 실행됩니다.
대기 시간이란 무엇입니까? 작업이 ALU에서 얼마나 많은주기를 소비합니까?
이 테이블이 유용 할 수 있습니다. http://www.agner.org/optimize/instruction_tables.pdf
최신 프로세서는 수 스칼라이고 순서가 잘못 실행될 수 있으므로주기 당 총 명령어 수는 1을 초과 할 수 있습니다. 매크로 명령에 대한 인수가 가장 중요하지만 나누기가 XOR보다 길기 때문에 연산도 중요합니다 (<1 사이클 대기 시간).
많은 x86 명령어는 복잡한 경우 일부 단계를 완료하는 데 여러 번의주기가 걸릴 수 있습니다 (예 : REP 명령 또는 더 나쁜 MWAIT).
div
및 idiv
)은 더 나쁩니다. 마이크로 코드화되어 있고 또는 보다 대기 시간이 훨씬 길며 CPU에서 완전히 파이프 라인되지 않습니다. 이 모든 것은 Agner Fog의 지시 테이블에서 나온 것이므로 연결하는 것이 좋습니다. add
shr
어셈블리 코드의 효율성을 계산하는 것이 요즘 고장난 수퍼 스칼라 파이프 라인의 가장 좋은 방법은 아닙니다. 프로세서 유형에 따라 다릅니다. 이전과 이후의 지침에 따라 다릅니다 ( 추가 코드를 추가 하고 때로는 더 빠르게 실행할 수 있습니다). 일부 연산 (특히 분할)은 더 예측 가능한 구형 칩에서도 다양한 실행 시간을 가질 수 있습니다. 실제로 많은 반복 타이밍이 유일한 방법입니다.
인텔 소프트웨어 개발자 매뉴얼 에서 인텔 CPU에 대한 정보를 찾을 수 있습니다 . 예를 들어 대기 시간은 정수 더하기의 경우 1주기이고 정수 곱셈의 경우 3주기입니다.
곱셈에 대해서는 모르지만 덧셈은 항상 한주 기가 걸릴 것으로 예상합니다.