2016-10-18 3 views

답변

3

, 뛰어 검토 할 것이다, 그러나 많은 현대 아키텍처에 의존는 을한다 분기 예측으로 인해 다른 데이터 종속성과 달리을 다음 지침에 전파하지 마십시오. 일반적으로는 SUB이 실행되기 전에 효과 (즉, 점프 여부를) 소요됩니다 -

입니다

는 예측과 아키텍처의 데이터 의존성 실제로 에 분기가 SUB 후에 효력을 일으킬 가능성이 없습니다 SUB의 결과를 사용할 수있을 때만 나중에 추측이 점검되고 추측이 부정확하면 지점이 롤백되기 때문에 모든 추측 실행이 수행됩니다.

그래서 조건과 목표에 대한 데이터 의존성에 관해서는 점프가 회색 영역에 존재합니다. 가장 엄격한 의미에서 그들은 의존적이지만, 예측이 작동 할 때 (그리고 대개의 경우), 그들은 그렇게 행동하지 않습니다. xor r1, r1, r1 또는 foo32bits >> 32이있는 회색 영역과 비슷합니다. 엄격한 정의에 따라 이러한 지침은 입력에 따라 다르지만 이러한 특정 경우에는 항상 대답이 동일하고 (일부) CPU가이를 인식 할 수 있습니다 일반적인 의존성 규칙을 적용합니다.

+0

점프가 예측되어 명령 이전에 발생하더라도 데이터 종속성은 여전히 ​​존재합니다. 결국 예측을 확인하기 위해 수행해야하는 비교는 여전히 SUB 명령에 종속됩니다. –

+0

@BenBurk : 예, 분명히했습니다. 분기는 기본적으로 프론트 엔드/페치에서의 예측 예측 단계와 나중에 실제로 실행될 분기 단위/ALU의 두 단계로 실행됩니다. 후반부에는 데이터 종속성이 있지만 종속성이 해당 명령어 이상으로 전달 될 수 없기 때문에 성능면에서 정말로 중요하지 않습니다. – BeeOnRope

2

예, 지침간에 데이터 종속성이 있습니다. 분기 명령어는 비교와 점프로 구분됩니다. 비교는 ALU에 의해 평가되고 그에 따라 PC를 업데이트합니다. 비교 연산에 대한 입력은 다른 연산과 동일한 방식으로 의존합니다. (가) 지점을 등록 수정 분기 명령 및 이전 명령 (이 경우 SUB) 사이의 데이터 의존성이 존재 이론적으로

+0

실제로 플래그 레지스터에서 실제로 작동하지만. 이 레지스터는 많은 명령어로 수정할 수 있습니다. –

+2

@DavidHoelzer BNZ의 레지스터 피연산자가 주어지면 플래그 레지스터가없는 MIPS 형 아키텍처 일 것이고 비교 및 ​​분기 명령어가 하나로 결합됩니다. –

+0

분기 예측이있을 경우 점프는 대개 종속성 체인의 끝이 될 것이므로 향후 명령은 BNZ에 의존하지 않습니다. 분기 예측이 없으면 * 모든 * 후속 명령어는 분기 진행에 도움이되므로 분기가 종속 (종속) 체인의 일부가 될 수 있으므로 분기에 효과적으로 의존합니다. 분기 예측을 사용하면 'BNZ'가 원칙적으로 데이터에 종속적이더라도 프로세서는 소스 데이터를 기다리지 않고 결과를 추측하여 잘못 추측하지 않는 한 효과적으로 데이터를 분리합니다. – BeeOnRope

관련 문제