지연 슬롯
Delay slot컴퓨터 구조에서, 지연 슬롯은 선행 명령의 영향 없이 실행되는 명령 슬롯이다.가장 일반적인 양식은 RISC 또는 DSP 아키텍처에 대한 분기 명령 직후에 위치한 단일 임의 명령이다. 이 명령은 앞의 분기를 취하더라도 실행될 것이다.따라서 설계상 지침서는 비논리적 또는 잘못된 순서로 실행되는 것으로 보인다.조립자가 조립 개발자와 컴파일러의 어색함을 감추고, 기본적으로 지시사항을 자동 재주문하는 것이 대표적이다.[citation needed]null
분기 지연 슬롯
분기 지침이 관련된 경우, 파이프라인에서 다음과 같은 지연 슬롯 지침의 위치를 분기 지연 슬롯이라고 할 수 있다.분기 지연 슬롯은 주로 DSP 아키텍처와 이전 RISC 아키텍처에서 발견된다.MIPS, PA-RISC, ETRAX CRIS, SuperH, SPARC는 각각 하나의 분기 지연 슬롯을 가진 RISC 아키텍처로, PowerPC, ARM, Alpha, RISC-V는 없다.각각 단일 분기 지연 슬롯을 가진 DSP 아키텍처는 VS DSP, μPD77230 및 TMS320C3x를 포함한다.SARC DSP와 MIPS-X는 이중 분기 지연 슬롯을 사용한다. 그러한 프로세서는 분기 명령이 발효되기 전에 한 쌍의 지시를 실행할 것이다.TMS320C4x는 트리플 분기 지연 슬롯을 사용한다.null
다음 예제는 RTS 지침 이후 쌍을 포함하여 SARC DSP의 조립 언어에서 지연된 분기를 보여준다.레지스터 R0 ~ R9는 번호순으로 0으로 삭제한다(R6 이후 삭제된 레지스터는 R9가 아니라 R7이다).어떤 명령도 두 번 이상 실행되지 않는다.null
R0 = 0; CALL fn (DB); /* call a function, below at label "fn" */ R1 = 0; /* first delay slot */ R2 = 0; /* second delay slot */ /***** discontinuity here (the CALL takes effect) *****/ R6 = 0; /* the CALL/RTS comes back here, not at "R1 = 0" */ JUMP end (DB); R7 = 0;/* first delay slot */ R8 = 0; /* second delay slot */ /***** discontinuity here (the JUMP takes effect) *****/ /* next 4 instructions are called from above, as function "fn" */ fn: R3 = 0; RTS (DB); /* return to caller, past the caller's delay slots */ R4 = 0; /* first delay slot */R5 = 0; /* 두 번째 지연 슬롯 */ /******* 여기서 불연속성(RTS가 발효됨) *****/ 끝: R9 = 0;
파이프라인 구조의 목표는 매 시계 사이클마다 지시를 완료하는 것이다.이 비율을 유지하려면 항상 파이프라인에 지침이 가득해야 한다.분기 지연 슬롯은 분기 위험으로 인한 파이프라인 아키텍처의 부작용이다. 즉, 명령이 파이프라인을 통과하기 전에는 분기가 해결되지 않을 것이라는 사실이다.간단한 설계는 새로운 분기 목표 주소가 계산되어 프로그램 카운터에 로드될 때까지 분기 지시 후 파이프라인에 스톨을 삽입할 것이다.스톨이 삽입되는 각 사이클은 하나의 분기 지연 슬롯으로 간주된다.보다 정교한 설계는 분기 지침의 결과에 의존하지 않는 프로그램 지침을 실행할 것이다.하드웨어가 이를 지원하는 경우, 명령을 메모리 내 명령 스트림의 분기 지연 슬롯으로 이동하여 컴파일 시 소프트웨어에서 최적화를 수행할 수 있다.분기 지연 슬롯 내에서 디버깅을 하면서 스텝은 물론 지시사항에 대한 중단점을 관리할 때 특별한 처리가 필요한 것도 부작용이다.null
특정 파이프라인 구현에서 분기 지연 슬롯의 이상적인 수는 파이프라인 단계 수, 레지스터 포워딩의 존재, 분기 조건이 계산되는 파이프라인의 단계, 분기 대상 버퍼(BTB)의 사용 여부 및 기타 많은 요인에 의해 결정된다.소프트웨어 호환성 요건은 아키텍처가 지연 슬롯의 수를 한 세대에서 다음 세대로 변경하지 않을 수 있다는 것을 지시한다.이것은 불가피하게 새로운 하드웨어 구현에 더 이상 관련성이 없음에도 불구하고 아키텍처 동작을 따르도록 보장하기 위한 추가 하드웨어가 필요하다.null
로드 지연 슬롯
로드 지연 슬롯은 로드 직후에 실행되지만(메모리에서 레지스터의) 로드의 결과를 볼 수 없고 기다릴 필요가 없는 명령이다.로드 지연 슬롯은 현대 하드웨어에서 로드 지연을 매우 예측할 수 없기 때문에 매우 드물다.로드는 RAM 또는 캐시에서 충족될 수 있으며 리소스 경합으로 인해 속도가 느려질 수 있다.로드 지연은 매우 초기 RISC 프로세서 설계에서 확인되었다.MIPS I ISA(R2000 및 R3000 마이크로프로세서에서 구현됨)는 이 문제로 어려움을 겪고 있다.null
다음은 부하 지연 슬롯과 분기 지연 슬롯을 모두 보여주는 MIPS I 조립 코드 입니다.null
ww v0,4(v1) # 주소 v1+4에서 v0으로 단어 로드 끄떡없다 # 낭비된 부하 지연 슬롯 주니어 v0 # v0에서 지정한 주소로 점프 끄떡없다 # 낭비된 분기 지연 슬롯