KR20000076584A - 컴퓨터 프로세싱 시스템에서의 로드 연산을 재순서화하기위한 방법 및 장치 - Google Patents
컴퓨터 프로세싱 시스템에서의 로드 연산을 재순서화하기위한 방법 및 장치 Download PDFInfo
- Publication number
- KR20000076584A KR20000076584A KR1020000004883A KR20000004883A KR20000076584A KR 20000076584 A KR20000076584 A KR 20000076584A KR 1020000004883 A KR1020000004883 A KR 1020000004883A KR 20000004883 A KR20000004883 A KR 20000004883A KR 20000076584 A KR20000076584 A KR 20000076584A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- load
- data
- instructions
- address
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 88
- 238000012545 processing Methods 0.000 title claims abstract description 36
- 230000015654 memory Effects 0.000 claims abstract description 191
- 230000007246 mechanism Effects 0.000 claims abstract description 59
- 238000012360 testing method Methods 0.000 claims description 42
- 230000002452 interceptive effect Effects 0.000 claims description 18
- 230000002708 enhancing effect Effects 0.000 claims description 9
- 238000005728 strengthening Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 17
- 230000003068 static effect Effects 0.000 description 17
- 230000001419 dependent effect Effects 0.000 description 9
- 238000001514 detection method Methods 0.000 description 8
- 230000000694 effects Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000013459 approach Methods 0.000 description 6
- 238000006073 displacement reaction Methods 0.000 description 5
- 239000012634 fragment Substances 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 230000001427 coherent effect Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000000116 mitigating effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000002829 reductive effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
본 발명은 컴퓨터 프로세싱 시스템에서의 로드 연산들을 재순서화하기 위한 방법 및 장치를 개시한다. 본 발명의 일 태양으로서, 무순서 실행을 구현하는 컴퓨터 프로세싱 시스템에서의 실행을 위한 명령의 스케줄링 방법은, 명령 시퀀스에서 현재의 위치로부터 이전의 위치로 후속 명령을 선택하고 이동시키는 단계; 상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는지를 판정하는 단계; 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 판독 액세스에 대한 메모리 위치를 불분명하게 참조하는 비선택된 명령들이 선택된 명령에 대하여 미리 이동되었는지를 판정하는 단계; 비선택된 명령들이 선택된 명령에 대해서 이전에 이동하고, 상기 비선택된 명령들이 데이터를 판독 액세스하였던 메모리 위치들의 어드레스가 선택된 명령들이 데이터를 판독 액세스하게 될 메모리 위치들의 어드레스와 동일한 경우에, 선택된 명령의 실행 중에 수행될 바이패스 시퀀스를 성취하는 단계로서, 비선택된 명령들에 의해 이전에 판독 액세스된 데이터를 선택된 명령으로 패스시키는 단계; 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 선택된 명령이 비선택 명령들에 대해서 이전에 이동되었는지를 판정하는 단계; 비선택된 명령들에 의해 추후 참조되도록 하기 위한 선택된 명령의 레코드를 저장하기 위한 메커니즘을 부가하는 단계를 포함한다.
Description
본 발명은 컴퓨터 프로세싱 시스템에 관한 것이고, 특히 컴퓨터 프로그램내에서 로드 연산들을 재순서화하기 위한 방법 및 장치에 관한 것이다. 본 발명은, 컴퓨터 프로그램이 생성될 때의 재순서화(정적 재순서화)되는 연산들 및 실행시에 재순서화(동적 재순서화)되는 연산들에 적용될 수 있다.
현재의 고성능 프로세서는 프로그램에서 명령 레벨 병행처리성을 채용하기 위해(즉, 1 이상의 명령을 동시에 실행하기 위해) 수퍼 스칼라 기법, 수퍼 파이프라이닝 기법, 및/또는 매우 긴 명령어 기법(VLIW)에 의존한다. 일반적으로, 이러한 프로세서는 복수의 기능 유니트를 포함하고, 명령의 시퀀셜 스트림을 실행하고, 사이클 당 1 이상의 명령을 메모리로부터 인출하는 것이 가능하고, 자원들의 의존도 및 가용도에 따라 사이클 당 1 이상의 명령의 실행을 위한 디스패치하는 것이 가능하다.
프로세서가 주어진 시점에서 디스패치된 명령들을 선택하게 되는 명령들의 모임은 무순서 실행 기법을 이용함으로써 더 커지게 된다. 무순서 실행 기법에 의하면, 후에 실행될 연산에 의해 요구되는 자원이 유휴상태이면 명령의 시퀀셜 스트림 내의 연산이 재순서화됨으로써 후에 실행될 연산들이 이전에 실행되게 된다. 그래서, 무순서 실행은, 복수의 기능 유니트의 가용도를 채용함으로써, 그리고 그렇지 않으면 유휴상태에 있게 되었을 자원을 이용함으로써 프로그램의 전체적 실행시간을 감소시킨다. 연산들의 실행을 재순서화하는 것은, 이들 연산들에 의해 생성된 결과들을 재순서화하는 것을 요구하게 됨으로써, 프로그램의 기능적 동향은 명령들이 본래의 시퀀셜 순서로 실행되었다면 얻어졌을 동향과 동일하게 된다.
메모리 관계형 연산들의 경우에 있어서, 메모리 로드 연산은 메모리로부터 데이터를 판독하고, 프로세서 레지스터 내에 로드하고, 그 로드된 데이터에 의존하는 연산 시퀀스를 자주 개시한다. 그래서, 유휴 자원을 이용하는 것에 더하여, 메모리 로드 연산들의 이전의 (무순서) 초기화가 잠재적 캐시 실패를 포함하는 메모리 액세싱에서의 지연을 감출 수도 있다.
일반적으로, 무순서 실행 및 그 결과의 재순서화를 구현하는데에 2개의 기본적 접근방식으로서, 동적 재순서화 기법과 정적 재순서화 기법이 있다. 동적 재순서화 기법에 있어서, 명령들은 실행 시간에 분석되고, 명령들과 그 결과들은 하드웨어에 의해 재순서화된다. 정적 재순서화 기법에 있어서, 프로그램이 생성될 때에 컴파일러/프로그래머는 명령들과 그 명령들에 의해 생성된 결과들을 분석하고 재순서화함으로써, 정적 재순서화 작업은 소프웨어에 의해 수행된다. 이러한 2가지 접근방식을 서로 결합하여 구현될 수도 있다.
일반적으로 무순서 실행을 지원하기 위한 연구가 상당히 되고 있지만, 그러한 연구는 주로 단일프로세서 실행에 집중되어 왔다. 이러한 연구는 따라서 단일프로세서 상에서 실행되도록 설계된 단일 명령 스트림에서의 로드 연산과 (동기식) 저장 연산 사이에의 순서에 집중되게 되었다. 이러한 종래의 발명은 멀티프로세싱 환경에서 전형적으로 발견되는 비동기식 메모리 참조의 문제점을 해결하며, 단일 메모리셀로부터의 복수의 판독연산들 사이의 재순서화에 대해 집중한다. 이러한 변환들(즉, 재순서화들)은 엄격한 단일프로세서 환경에서는 안전하지만, 멀티프로세서 환경에서는 예를들면 다른 프로세서에 의해 별개의 미지의 명령 스트림으로써 수행될 수 있는 기록 가능성과 같은 것에 대해 추가적으로 고려를 해야한다.
예측가능성있고 반복가능성있는 프로그램 계산을 성취하기 위해, '시퀀셜 일치성' 에 대한 요구가 L.Lamport 의 논문 "How to Make a Multiprocessor that Correctly Executes Multiprocess Program" (IEEE Transaction on Computer, C-28(9), pp.690-91, 1979년 9월) 에 개시되어 있다. Lamport 의 논문에 따르면, "어떤 실행의 결과가 모든 프로세서의 연산들이 소정의 시퀀셜 순서로 실행된 것과 동일하고, 각각의 개별적인 프로세서의 연산들이 프로그램에 의해 정해진 순서로 그 시퀀스로 실행되는 경우에" 멀티프로세서 시스템이 '시퀀셜 일치'이라고 정의 되어 있다. 정적 스페큘러티브(speculative) 실행에 대해, 본래의 논리 프로그램 텍스트의 순서가 오서러티브(authoritive)이고, 재순서화된 프로그램 텍스트의 순서는 그렇지 않고, 컴파일러와 하드웨어 장치는 본래의 순서와 동일한 실행을 생성하도록 협동하여야 한다.
하나의 시스템에서의 멀티프로세서들 간의 코히어런스 포로토콜을 단순화하면서 적절한 성능을 성취하기 위해, 상술한 엄격한 시퀀셜 일치 순서에 대한 다수의 완화가 가능하다. 허용될 수 있는 재순서화의 타입은 특정 구현체에 의해 보장되는 메모리 일치성 모델에 의존한다. 현재 이용되고 제안된 일치성 모델들 및 그들의 특징에 대한 개관은, S.Adve 와 K.Gharachorloo 의 논문 "Shared Memory Consistency Models: A Tutorial" (Technical Reprot 9512, Dept.of Electrical and Computer Engineering, Rice University, Houston, Tx, 1979년 9월) 에 개시되어 있다.
모든 완화 모델에 있어서 기본적인 요구사항은, 메모리 코히어런스를 성취하는 기록 시리얼화, 즉 소정의 위치에의 모든 기록 연산들이 소정의 순서로 시리얼화되어 있고 어떠한 프로세서에 대해서도 그 순서로 수행되는 것이다. 이것은 Lamport 가 개시한 시퀀셜 일치성과 동등한 것이고, 여기서 각각의 메모리셀은 하나의 메모리 모듈로 고려된다. 우리는 단일 메모리셀에 대한 시퀀셜 일치성을 기록 시리얼이라고 칭하여, 더 큰 메모리 모듈에 대한 시퀀셜 일치성과 구별한다. 메모리 코히어런스는 동일한 메모리 위치에 대한 연속적인 로드 연산들이 그 메모리 위치에 존재하는 데이터 아이템의 약한 상승(weakly ascending) 순서를 유지하는 것을 보장함으로써 성취될 수 있다. 그래서, 로드 연산의 시퀀스에서 어떠한 로드라도 그 동일한 또는 다음의 데이터 아이템 만을 그 선행자로서 프리젠트한다.
예를들면, 주어진 메모리 위치에 제 2 프로세서에 의해 기록된 d1, d2, d3, d4, d5, d6, 등의 데이터 아이템의 시퀀스를 고려하자. 제 1 프로세서에의한 그 메모리 위치로부터의 연속한 로드 연산들은, 제 1 로드 연산에 의해 복귀된 동일한 데이터 아이템 또는 그 메모리셀에 프리젠트된 후속 데이터 아이템을 프리젠트할 것이다. 그래서, 제 1 로드 연산이 데이터 아이템 d2 를 복귀시킨다면, 제 2 로드 연산은 데이터 아이템 d2, d3, d4 등을 복귀시키지만, d1 은 복귀시키지 않는다. 대체적으로서, 제 1 로드 연산이 데이터 아이템 d4 를 복귀시킨다면, 제 2 로드 연산은 데이터 아이템 d4, d5, d6 등을 복귀시키지만, d1, d2, 또는 d3 는 복귀시키지 않는다.
시리얼 실행에 있어서, 이러한 문제점이 "시간은 앞으로 진행해 간다" 는 원리에 의해 자동적으로 해결된다는 것은 분명하다. 하지만, 무순서 프로세서에 관하여, 동일한 메모리 위치를 액세스하는 로드 연산은 무순서로될 수 있으므로, 정적으로 후속하는 로드 명령이 정적으로 선행하는 로드 연산보다 데이터 아이템의 시퀀스에 있어서 더 앞선 데이터 아이템을 판독할 수 있게 되고, 그 정적으로 선행하는 로드 연산은 후에 실행된다.
연산을 재순서화하는 능력을 제한하는 요소로는 '불분명한 메모리 참조' 가 있다. 이것은 메모리 로드 연산이 시퀀셜 명령 스트림에서의 다른 메모리 로드 연산 후에 나타나는 경우이고, 무순서 로드 연산 및 순서 로드 연산에 의해 액세스된 그 메모리가가 서로 다른지를 미리 결정하는 것은 불가능하다. 예를들면, 다음과 같은 코드 프래그먼트를 고려하자.
여기서 * 는 소정의 어드레스에의 메모리 액세스를 나타내고, 그래서 *Y 는 Y 에 포함되어 있는 어드레스의 메모리 위치를 나타내며, *(X + a*4 + 5)는 표현식 X + a*4 +5 에 의해 지정되는 어드레스의 메모리 위치를 나타낸다.
a 가 프로세서의 레지스터 r1 에 저장된 값이고, X 및 Y 가 레지스터 r2 및 r9 에 저장된 값이며, s, t, u, 및 v 가 레지스터 r4, r5, r6, 및 r7 에 각각 할당된 값이라고 한다면, 상술한 코드 프래그먼트는 다음의 명령 시퀀스로서 나타낼 수 있다(여기서 명령 이름의 다음에 있는 제 1 레지스터는 목적레지스터이고, 나머지 레지스터는 연산자가 된다).
x + a*4 + 5 와 Y 는 다른 어드레스들을 참조하므로, 4개의 표현식이 병렬실행에 대해 (예로서 다음과 같은 시퀀스에 따라) 스케줄링될 수 있다(예기서, ∥ 는 병렬실행을 나타낸다).
2개의 실행 유니트를 가진 머신에 있어서, 상술한 시퀀스는 (하나의 로드가 2 사이클이 걸리고 다른 연산들은 1 사이클이 걸린다고 가정하면) 완료될 때까지 6 사이클이 걸리게 된다.
한편, x + a*4 + 5 와 Y 는 항상 다른지를 결정할 수 없다면(즉, 그 어드레스들이 불분명하다면), 2개의 표현식이 본래의 순서로서 스케줄링될 것이며(하나의 로드가 2 사이클이 걸리고 다른 연산들은 1 사이클이 걸린다고 가정하면) 완료될 때가지 9 사이클이 걸리게 된다.
만약 로드 어드레스들 모두가 동일한 메모리 위치를 참조하고 그 메모리 위치는 d2 가 따라오는 d1 의 데이터 아이템 시퀀스를 수용하면, 변수 s 와 t 에 대해 총 4개 조합의 판독 액세스들이 가능하다. 이들 중에서, 앞에서 3개 조합은 다음에 나태낸 바와같이 기록 시럴화된다면, 4번째 조합은 기록 시리얼화의 요구사항을 만족시키지 못한다.
다음의 예에서는, 양쪽 로드 연산들이 동일한 메모리 위치를 참조하는 경우에, 명령의 재순서화된 기법은 변수 t 에 의해 따라오는 변수 s 를 판독하는 실제 유저 프로그램이 이전의 데이터 아이템 d1 에 선행하는 후속의 데이터 아이템 d2 의 시퀀스를 보게 한다. 이것은 멀티프로세서들을 동기시키는 것 또는 DMA 로 통신하는 것에 관해 중요한 문제점으로 된다.
이것은 d2 를 s 로, d1 을 t 로 로딩하는 알짜 효과를 가지며, 로르 연산들 모두에 의해 액세스된 메모리 위치내에 제 2 프로세서에 의해 실제로 저장되었던 값들의 기록 시리얼화된 시퀀스와 일치하지 않는다.
상술한 예는 불규칙하지 않다. 메모리 참조에 있어서의 불분명성(ambiguity)은 그렇지 않으면 병렬로 실행될 수도 있는 연산의 시퀀셜 실행을 강화해 버림으로써 시스템성능을 매우 저하시킨다. 하지만, 이러한 명령 시리얼화는, 유저 프로그램에 의해 인식된 로드 결과값의 시퀀스가 기록 시리얼화되는한은, 회피될 수 있다(즉, 논리적 후속 로드 연산이 논리적 선행 로드 연산보다 먼저 수행될 수 있다). 그래서, 순서 로드 연산보다 먼저 수행된 무순서 로드 연산은, 본래의 프로그램 순서로 로드 연산의 데이터 시퀀스가 메모리에 있어서 대응하는 데이터 시퀀스와 일치하는한(즉, 각각의 후속 로드는 동일한 값 또는 모든 선행 판독 연산들에 관한 시간적으로 후에 일어나는 값을 복귀시키는 경우), 유효하게 된다. 더나아가, 이러한 값들이 일치하는 경우에, 무순서로 로드된 데이터에 의존하는 어떤 연산이라도 또한 순서적으로 수행될 수 있다. 한편, 모든 값이 일치하지 않으면, 무순서로 로드된 데이터 및 그로부터 유도된 어떠한 결과라도 무효로 되며, 연계된 종속하는 연산들뿐만아니라 순서 시점에서 로드 연산을 재실행하는 것을 필요로 하게 한다.
프로세서들에 의한 불분명한 참조를 가진 메모리 연산들을 재순서화하는 문제에 대해 다양한 시도가 행해져 왔다. 대부분의 이러한 기법은 명령이 정적으로 재순서화되는 것(즉, 프로그램들이 생성되는 경우)를 가정한다. 이러한 모든 기법은 어드레스 비교 또는 로드 결과값 비교를 통하여 간섭을 검출하는 것에 의존한다. 만약 간섭이 검출되면, 무순서 로드 연산(및 만약 가능하다면 이미 실행된 로드에 의존하는 연산들)은 본래의 순서 시점에서 재실행되어야 한다. 즉, 이러한 메커니즘은 모든 간섭하는 로드 연산을 순서적으로 재실행함으로써 기록 시리얼화를 강화한다. 간섭 검출 및 재실행은 별도의 명령(소프트웨어에 기반을 둔 기법)에 의해서, 또는 전용의 하드웨어 자원(하드웨어에 기반을 둔 기법)으로서 때때로 소프트웨어의 도움을 받아 수행된다.
어드레스가 오버랩되는 경우에 정확성을 보장하기 위해서, 기존의 메커니즘들은: 이전에 실행된 로드 명령(즉, 무순서 로드 명령)이 다른 로드 명령(즉, 순서 로드 명령)을 간섭한다는 것을 인식하고; 이전에 실행된 무순서 로드 명령과 이미 실행된 로드 명령(즉, 무순서 로드 명령)에 의존하는 어떠한 명령이라도 재실행한다.
예를들면, 미리 주어진 코드 프래그먼트는 다음과 같이 변경될 수 있다.
정적 재순서화의 경우에, 컴파일러/프로그래머에 의해 생성된 명령 시퀀스는 제안된 다양한 기법들에 따라 상이하다. 통상적으로, 다른 로드 명령에 대한 이동될 수 있는 로드 명령은, 로드 연산을 수행하고 다른 로드 명령에 의해 사용된 어드레스들을 모니터링하는 어떤 새로운 명령(명령 시퀀스)에 의해 대체된다. 다른 명령(또는 무순서 로드 명령으로서의 명령 필드)은, 그 이동된 로드 명령이 본래 위치지정된 장소를 지시하고, 그것은 저장 연산을 간섭하기 위해 모니터링하는 범위 끝을 판정한다.
동적 재순서화의 경우에, 다양한 로드 명령이 프로그램 순서로 프로세서에 프리젠트되며, 즉 제 1 로드 명령에는 제 2 로드 명령이 후속한다. 프로세서는 그 명령들을 재순서화하고, 정적 재순서화인 경우에서 처럼, 제 1 로드 명령이 그 이미 실행되었던 제 2 무순서 로드 연산에 의해 판독된 메모리 위치를 로드하는지를 검출할 수도 있다. 그래서 프로세서는 로드 명령을 무순서 연산으로서 마크하고, 다른 로드 연산들에 관한 무순서 연산들 간의 간섭을 검출하기 위한 메커니즘을 설정하고, 간섭이 검출되는 경우에 프로세서의 상태를 복구하고, 그 무순서 로드 연산에 의존하는 어떤 다른 명령뿐만아니라 무순서 로드 명령을 재실행한다.
메모리 로드 연산들을 재순서화하는 경우에 멀티프로세서 환경에서 비동기식 메모리 연산을 처리하는 관련 기술에 대한 개요를 개시한다.
간섭의 검출에 기초한 무순서 로드 연산들에 대한 그리고 이전에 실행된 무순서 로드 명령의 재발송에 대한 지원 메커니즘과은 1997년 3월 31일 출원된 미국출원번호 08/829,669 (발명의 명칭: Support for Out-Of-Order Execution of Loads and Stores in a Processors, 본 출원의 양수인에게 양도되어 있음) 에 개시되어 있다. 이 메커니즘은 무순서 로드의 본래의 프로그램 위치가 도달할 때까지 큐(로드-히트-로드 큐) 내로 각각의 무순서 로드 연산의 어드레스를 들어가게 한다. 다른 (순서) 로드 연산들은 로드-히트-로드 큐 내의 엔트리들에 대한 어드레스들을 확인하고, 간섭이 검출되면, 간섭하는 무순서 로드 (및 모든 의존적 연산들)는 프로세서에 의해 재발송된다.
대체적인 검출 메커니즘이 1998년 3월 26일 발행된 미국특허번호 5,758,051 (발명의 명칭: Method and Apparatus for Reordering Memory Operations in a Processor, 본 출원의 양수인에게 양도되어 있음) 에 있어서, 로드 데이터 확인에 기초한 로드/저장 간섭 검출의 내용으로 개시되어 있다. 이러한 접근방식에 있어서, 무순서 로드 연산에 의해 액세스된 데이터 아이템이 순서적으로 판독되고, 순서 로드 연산의 결과가 무순서 결과와 비교된다. 이 두 값이 동일하면, 어떠한 검출가능한 간섭도 발생하지 않으며 프로그램은 실행을 계속한다. 하지만, 이 두 값이 동일하지 않으면, 순서 로드 연산에 의해 복귀된 값은 모든 종속적 연산들을 재실행하는데에 이용된다. 주목할 것은, 로드 확인에 기초한 간섭 검출에 대해서, 간섭이 검출될 수 없다면, 어떠한 간섭도 존재하지 않다라는 것이다. 이러한 접근방식은 간섭을 모니터하는데에 필요한 하드웨어의 수와 재실행의 수를 감소시키게 하지만, 부가적인 대역폭이 무순서로이동한 모든 로드 연산에 대한 제 2 순서 로드를 실행하게 하는 것을 요구한다.
1997년 4월 29일 발행된 미국특허번호 5,625,835 (발명의 명칭: Method and Apparatus for Reordering Memory Operations in a Superscalar or Very Long Instruction Word Processor", 본 출원의 양수인에게 양도되어 있음) 에는, 메모리 연산들의 재순서화와 메모리 연산들의 스펙큘러티브 실행을 결합한 것이 개시되어 있다. 메모리연산들의 재순서화는 다음 사항에 의존한다.
ㆍ 명령 레벨 병렬 처리성을 활용하기 위한 컴파일러에 의한 코드의 정적 재순서화
ㆍ 메모리 참조에서의 충돌을 검출하고 무순서로 로드된 데이터를 조작하기 위한 특별한 하드웨어 지원
ㆍ 무순서 로드된 데이터에 대한 연산을 위한 그리고 충돌의 검출로부터의 복구를 위한 컴파일러-발생 코드
특별한 하드웨어 지원은 무순서 실행된 로드 연산의 결과에 대한 목적지로 될 수 있는 각각의 레지스터에 대한 어드레스 레지스터와, 이러한 각각의 어드레스 레지스터에 연계된 비교기로 이루어진다. '특별 명령들' 은 무순서로데이터를 로드하는데에 이용되고 그러한 데이터를 기억(commit)할뿐만아니라 프로그램 내의 순서 시점에 있어서 그로부터 유도된 어떠한 다른 값들도 기억한다. 각각의 무순서 로드는 대응하는 어드레스 레지스터 내에 메모리 어드레스와 그 로드된 데이터의 사이즈를 기록하고, 각각의 저장 연산은 모든 어드레스 레지스터의 내용에 대하여 (어드레스, 사이즈) 튜플(tuple)을 트리거한다. 멀티프로세서 환경에 있어서, 메모리 불분명화 방지를 할 수 있는 프로세싱 유니트는 다른 프로세서에 의해 발송된 모든 비동기 저장 요청을 수신하고, 이러한 저장 요청을 간섭하는 모든 무순서 로드 연산을 무효화한다. 그래서, 만약 대응하는 레지스터 내의 (어드레스, 사이즈) 튜플이 다른 레지스터 내의 (어드레스, 사이즈) 튜플과 일치한다면, 대응하는 어드레스 레지스터는 무효로 마크된다. 특별 기억 명령은 순서 포인터에서 실행되고, 이는 연계된 어드레스 레지스터가 무효인지를 체크하고, 만약 그렇다면, 무순서로 로드된 데이터와 메모리내의 데이터는 코히어런트하게 된다. 한편, 어드레스 레지스터가 무효이면, 무순서 로드된 데이터와 메모리 내용은 코히어런트하지 않게 된다. 그래서 로드 연산들뿐만아니라 그에 의존하는 다른 어떤 연산이라도 재실행될 수 있게 된다. 이때 트랩이 요구되어, 그 로드 연산뿐만아니라 그의 종속적인 연산들을 재실행하는 컴파일러에 의해 생성된 코드를 복구하기 위한 실행 제어를 전송한다.
정적 무순서 실행 및 동적 무순서 실행에 대한 현재의 방식은, 간섭을 검출하기 위해 소프트웨어 또는 하드웨어로 구현되는 기법과 결합하여 연산들을 무순서로실행함으로써 기록 시리얼화한다. 간섭이 검출되면, 이러한 기법들은 프로세서가 간섭하고 있는 무순서 로드 연산 및 모든 종속적 연산들을 재실행하도록 하게 하여, 무순서 로드 연산들을 순서적으로 실행함으로써 기록 시리얼 행동을 강화한다.
이것은 가치있는 발송 밴드폭을 소모시켜, 전체적으로 소수의 명령들의 실행을 완료할 수 있게 한다. 또한, 코드를 재실행하는데 제공되어야 하는 메커니즘이 필요하다. 정적 스케줄링의 경우에, 무순서 로드 명령과 그에 종속하는 코드는 모든 코드 사이즈 및 명령 캐시 능력의 패널티를 가지고 프로그램 텍스트에서 다시 위치지정되고, 이러한 패널티는 위치지정에 수반된다. 대체로서, 동적 실행의 경우에, 명령들은 재발송 버퍼에 유지되고 다시 디스패치된다.
다음의 코드 프래그먼트는 동일한 코드가 전형적인 컴파일러에 의해 발생되는 *Y 에의 무순서 액세스를 가진 정적으로 발생된 스케줄에서 2배의 프로그램코드에 어떻게 위치되는지를 보여준다(여기서 복제된 코드 부분을 * 로 표시되고 체킹 코드는 + 로 표시된다).
상기 예에서 보는 바와 같이, 정적 코드 발생에 대하여 코드 사이즈 페널티는 매우 심각하다.
동적으로 발생된 명령 스케줄을 이용하는 프로세서에 관하여(예, 수퍼 스칼라 프로세서), 이러한 프로세서는 발송 버퍼에의 명령들을 재실행하는 결정을 통신하는 논리부를 필요로 하며, 그리고 재명명된 레지스터 테이블 내의 이전의 엔트리들을 무효로 하는 논리부를 필요로 한다.
성취가능한 성능에 대한 부가적인 페널티들은 간섭이 검출되는 경우에 이전에 실행된 명령들을 재실행해야 한다. 그래서, 상기의 두 접근방식모두는 실행면에 있어서 다른 명령들의 실행에 이용될 수 있었던 발송 슬롯들을 이용하며 명령 스트림을 재실행해야 하는 어려움을 겪는다. 상술한 논의로부터, 재실행이 재순서화된 메모리 판독 참조들의 경우에 간섭을 보정하는 것(즉, 위반적인 상황이 검출된 경우에 로드 연산 및 모든 종속적 연산들을 재실행하는 것)에 대해 효율적인 방법이 아니라는 것으로 된다.
도 1 은 메모리 연산이 아닌 연산들을 재순서화가 수행되는 경우에의 종래기술에 따른 명령의 스케줄링을 나타내는 흐름도,
도 2a 는 본 발명에 따른 본래의 명령 시퀀스로부터 연산 재순서화에 대한 처리를 나타내는 흐름도.
도 2b 는 도 2a 의 재순서화된 연산들을 실행하기 위한 처리를 나타내는 흐름도.
도 3 은 메모리 연산들에 대한 정적 재순서화와, 간섭 테스트의 소프트웨어기반 구현 및 데이터 바이패스 시퀀스를 지원하는 종래의 컴퓨터 프로세싱 시스템의 기능 블록도.
도 4 는 본 발명의 일실시예에 따른, 도 3 의 시스템에 의해 무순서 로드 연산들의 실행을 지원하는데 이용되는 하드웨어를 나타내는 기능 블록도.
도 5 는 메모리 연산들에 대한 동적 재순서화와, 간섭 테스트의 소프트웨어기반 구현 및 데이터 바이패스 시퀀스를 지원하는 종래의 컴퓨터 프로세싱 시스템의 기능 블록도.
도 6 은 본 발명의 일실시예에 따른, 도 3 또는 도 5 의 시스템에 의해 무순서 로드 연산들의 실행을 지원하는데 이용되는 하드웨어를 나타내는 기능 블록도.
*도면의 주요부분의 부호에 대한 설명*
300, 500 : 프로세서 유니트
301, 501 : 메모리 서브 시스템
302, 502 : 데이터 캐시
303, 503 : 명령 큐
304, 504 : 명령 캐시
305 : 로드 유니트
307 : 실행 유니트
309, 509 : 브랜치 유니트
311, 511 : 레지스터 파일
401, 601 : 제어 논리부
402, 603 : 어드레스 발생 논리부
403 : 로드 순서 버퍼
404 : 비교 논리부
405 : 데이터 선택 메커니즘
507 : 기능 유니트
520 : 레지스터 맵 테이블
522 : 프리 레지스터 큐
524 : 디스패치 테이블
526 : 퇴거 큐
528 : 순서 맵 테이블
605 : 로드 순서 테이블
607 : 간섭 테스트 및 우선순위 인코더
상술한 문제점뿐만아니라 종래기술과 관련된 다른 문제점을 프로세서에서의 메모리 명령들을 재순서화하기 위한 방법 및 장치에 의해서 해결한다.
본 발명의 일태양에 있어서, 무순서 실행을 구현하는 컴퓨터 프로세싱 시스템에서의 실행을 위한 명령의 스케줄링 방법은:
명령 시퀀스에서 현재의 위치로부터 이전의 위치로 후속 명령을 선택하고 이동시키는 단계;
상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는지를 판정하는 단계;
상기 선택된 명령이 상기 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 판독 액세스에 대한 메모리 위치를 불분명하게 참조하는 비선택된 명령들이 상기 선택된 명령에 대하여 미리 이동되었는지를 판정하는 단계;
상기 비선택된 명령들이 상기 선택된 명령에 대해서 이전에 이동하고, 상기 비선택된 명령들이 상기 데이터를 판독 액세스하였던 메모리 위치들의 어드레스가 상기 선택된 명령들이 상기 데이터를 판독 액세스하게 될 메모리 위치들의 어드레스와 동일한 경우에, 상기 선택된 명령의 실행 중에 수행될 바이패스 시퀀스를 성취하는 단계로서, 상기 비선택된 명령들에 의해 이전에 판독 액세스된 데이터를 상기 선택된 명령으로 패스시키는 단계;
상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 선택된 명령이 상기 비선택 명령들에 대해서 이전에 이동되었는지를 판정하는 단계;
상기 비선택된 명령들에 의해 추후 참조되도록 하기 위한 상기 선택된 명령의 레코드를 저장하기 위한 메커니즘을 부가하는 단계를 포함한다.
본 발명의 다른 태양에 있어서, 컴퓨터 프로세싱 시스템에서의 메모리 위치로부터 복수의 판독 액세스 동안에 얻어진 데이터 값들 사이에 일치성을 강화하기 위한 방법으로서, 명령 시퀀스들이 적어도 하나의 프로세서 유니트에 의해 실행되고, 복수의 판독 액세스가 무순서 로드 명령 및 적어도 하나의 다른 로드 명령에 의해 초기화되는 일치성 강화 방법은:
상기 무순서 로드 명령에 의해 식별된 상기 메모리 위치로부터 제 1 데이터를 적어도 판독 액세스하기 위한 상기 무순서 로드 명령을 실행하는 단계;
상기 적어도 하나의 다른 로드 명령에 의해 이용되기 위한 상기 무순서 로드 명령의 레코드를 생성하는 단계로서, 상기 레코드가 상기 제 1 데이터가 로드된는 상기 메모리 위치의 어드레스 및 상기 제 1 데이터에 연계된 값을 포함하고 있는 단계; 및
하기의 단계를 수행하기 위하여 상기 적어도 하나의 다른 로드 명령을 실행하는 동안에 상기 적어도 하나의 다른 로드 명령을 실행하고, 상기 적어도 하나의 프로세서 유니트를 제어하는 단계를 포함하고,
상기 하기의 단계는,
무순서 명령이 제 1 데이터를 로드한 상기 메모리 위치의 어드레스가 상기 적어도 하나의 다른 로드 명령이 데이터를 로드할 어드레스를 오버랩하는 것과 그 어드레스와 동일한 것 중의 어느 하나인지를 판정하는 단계; 및
상기 어드레스들이 각각 동일한 것과 오버랩하는 것 중의 어느 하나인 경우에, 상기 제 1 데이터 및 그 일부 중의 어느 하나를 상기 레코드로부터 상기 적어도 하나의 다른 로드 명령에 패스시키는 단계를 포함한다.
본 발명의 상술한 태양들 및 그 밖의 태양과 이점은 첨부된도면과 함께 하기된 바람직한 실시예의 상세한 설명에 의해 분명해 질것이다.
바람직한 실시예에 대한 상세한 설명
본 발명은 컴퓨터 프로세싱 시스템에서 로드 연산들을 재순서화하는 방법 및 장치에 적용된다. 이러한 컴퓨터 프로세싱 시스템에 있어서, 명령 시퀀스는 적어도 하나의 프로세서 유니트에 의해 실행을 위한 메모리에 저장된다. 본 발명은 프로그램이 발행되는 경우에 재순서화(정적 재순서화)되는 명령들뿐만아니라 실행시에 재순서화(동적 재순서화)되는 명령들에도 적용가능하다. 더나아가. 본 발명은 소프트웨어 및/또는 하드웨어 기반으로써 적절히 구현될 수 있으며, 단일프로세서 시스템(즉, 주메모리에 직접 액세스하는 주변장치를 가진 시스템)과 멀티프로세서 시스템에 적용가능하다.
본 발명의 명확한 이해를 위하여, 여기서 채용되는 용어는 정의는 다음과 같다. 로드 명령은 메모리 판독 액세스 및 로드된 값에 기초한 계산 (선택적임)을 수행하는 명령을 의미한다. 그래서 로드 명령은 연산자들로서 메모리 위치들로부터 데이터를 채용하는 예로서 논리 명령, 산술 명령, 그 밖의 다른 명령을 포함한다. 무순서 실행은, 다음에 나타나는 연산들에 의해 요구되는 자원들이 유휴상태인 경우에 다음에 나타나는 연산들을 먼저 실행되도록 명령의 시퀀셜 스트림에서의 연산이 재순서화되는 기법이다. 그래서 명령 시퀀스에서의 본래 위치로부터 명령 시퀀스에서의 앞선 위치로 이동시킴으로써 무순서 로드 명령은 동적으로 또는 정적으로 생성될 수 있다. 이러한 무순서 로드 명령은 데이터를 판독하기 위하여 메모리로부터 메모리 내의 위치와, 그 데이터가 위치되어 있는 제 1목적레지스터를 식별한다. 불분명한 메모리 참조는, 시퀀셜 명령 스트림에서 다른 메모리 연산후에 메모리 로드 연산이 나타나는 경우를 의미하고, 그래서 2개의 메모리 로드 연산들에 의해 액세스된 메모리 위치가 다른지를 미리 결정하는 것이 불가능하다. 스펙큘러티브 연산은, 예로서 위치되어 있는 실행 경로가 수반되지 않고 오히려 다른 실행 경로가 수반도기 때문에 필수적으로 실행될 필요는 없는 순서 연산을 의미한다.
다음의 상세한 설명과 대응하는 예들은 2개의 명령을 기초로 하여 이루진 것이며, 제 1 명령은 논리적으로 선행하는 제 2 명령 이전에 순서적으로 실행된 것이고, 이 제 2 명령은 순서적 명령이라고 부른다. 용어 '순서' 는 논리적으로 선행하는 순서적 명령과 제 1 무순서 명령 사이의 시퀀셜 관계만을 의미한다. 하지만, 본 발명이 복수의 무순서 및 순서 로드 연산들에 적용되도록 확장될 수 있다는 것은 당해기술분야의 전문가라면 인식할 것이다. 주목할 것은, 상술한 2가지 명령, 즉, 순서 및 무순서 로드 명령들은 제3의 또는 그 밖의 명령에 관하여 순서적으로 또는 무순서적으로 될 수도 있다는 것이다.
본 발명의 일반적인 설명은 본 발명의 개념을 소개하면서 할 것이다. 그 다음에, 본 발명의 다양한 태양에 대한 더 상세한 설명이 제공될 것이다.
그래서, 일반적으로 말하면, 본 발명은 동일한 위치에의 복수의 메모리 액세스들 사이에서 일치성을 강화하기 위하여 데이터 바이패싱을 이용하는 다양한 방법 및 장치로 구현되어, 프로세서 상에서 실행되는 프로그램에 표현되는 결과적인 데이터 시퀀스는 메모리 위치에 표현되는 데이터 시퀀스와 일치하게 된다(즉, 명령이 본래의 프로그램 순서로 실행되면, 프로그램이 그러한 데이터 시퀀스를 인식하는 것이 불가능하게 될 수 있다). 특히, 프로세서 유니트를 제어하여, 데이터를 판독하는 논리적으로 선행하는 순서 로드 연산들로부터의 어드레스들과 논리적 프로그램 순서로 순서 명령에 후속하는 무순서 로드 명령에 의해 스페큘러티브 형식으로 액세스하고 있는 어드레스들과 비교하는 간섭 테스트를 포함한다. 무순서 로드 명령에 논리적으로 선행하는 어드레스들이 일치하면, 순서 로드 명령이 무순서 로드 명령을 스페큘러브 실행하는 것에 제공되었던 것과 동일한 데이터로서 표현된다.
무순서 로드 명령으로부터 데이터를 순서 로그 연산으로 바이패싱하는 것은, 기록 시리얼화된 프로그램 실행을 유지하면서도 무순서 로드 명령 및 그에 종속하는 명령을 재실행할 필요를 없애준다.
상술한 실시예를 참조하며, 본 발명에 따른 바이패싱 메커니즘을 이용하는 효과를 설명한다. 좌측의 명령 스트림은, 이중 발송 단일프로세서에 대해 발생될 수 있는 재실행된 프로그램 스트림을 나타낸다. 본 발명의 바이패싱 메커니즘은 간섭하는 무순서 로드('*' 로 표시됨)로부터 프로그램에서 우측에 있는 순서 로드('+' 로 표시됨)로 데이터를 패스시키는데 이용된다. 이렇게 재순서화된 프로그램(좌측)의 실행은 다음의 실시예의 우측에 도시된 것과 같은 순서 프로그램의 실행과 동등하며, 그래서 정확한 기록 시리얼 실행으로 된다.
본 발명의 간섭 테스트 및 바이패싱 논리부는 프로세서내의 하드웨어 자원들, 프로세서에 의해 실행되는 명령들, 또는 혼성형 하드웨어/소프트웨어 기법에 의해 구현된다. 소프트웨어 구현의 경우에, 간섭 테스트는 새로운 단일 명령으로 이루어질 수 있고, 기존의 명령(로드 명령과, 비교 및 조건적 이동 명령, 또는 로드 명령과, 브랜치 명령 및 이동 명령 등)으로 이루어질 수도 있다. 간섭 테스트의 특정의 구현은 메모리 연산들의 재순서화가 정적 또는 동적으로 수행되는지에 의존한다. 무순서 로드 연산들에 제공되는 어드레스들과 데이터 값들이 통상적 데이터 값으로서 주메모리에, 또는 명령 스트림내에 명령으로부터 분명히 액세스가능하거나 또는 가능하지 않은 하드웨어에 내장된 테이블 구조에 저장될 수도 있다. 제안되어 있는 기법은 로드/저장 간섭을 검출하는 기법과, 다른 메모리의 일치성 모델들을 실현하기 위한 간섭의 검출시 어떤 로드 연산을 재발송하는 기법과 결합될 수 있다. 이러한 경우에, 이들 기법들에 요구되는 하나 이상의 자원이 로드 결과 바이패싱 자원과 결합하여 일반화된 무순서 실행 기법에서의 하드웨어 복잡도를 감소시킨다.
도 1 을 참조하면, 메모리 연산들이 아닌 연산 재순서화가 정적 또는 동적으로 수행되는 경우에 종래기술에 따른 명령 스케줄링을 나타내는 흐름도가 도시되어 있다. 재순서화는, 그 재순서화가 불분명가 되지 않는 경우에만 도 1 의 방법에 따라 수행된다.
단계 101 에 있어서, 하기의 이동이 이점이 있고 프로그램의 적절한 연산에 영향을 주지 않으면, 후속 연산이 선택되고 명령의 시퀀셜 스트림내의 현재의 위치로부터 이전 위치로로 이동된다(즉, 명령이 실행을 위해 "스케줄링" 된다). 즉, 선택된 명령은, 그것이 이동되게 하는 명령들중 어느 것에게도 의존하지 않는다면, 이전의 위치로 이동된다.
단계 103 에 있어서, 스케줄링되도록 남겨진 명령이 있는지를 판정한다. 만약 그렇다면, 단계 101로 복귀하는 처리를 한다. 만약 그렇지 않다면, 그 처리는 종료한다.
도 2a 는 본 발명의 실시예에 따른 본래의 명령 시퀀스들로부터의 연산들을 재순서화하기 위한 처리를 나타내는 흐름도이다. 특히, 도 2a는, 스케줄링 기법이 본 발명에 따라 불분명성 제거를 하기 위해 확장될 수 있는가를 도시한다. 주목할 것은 일반적인 기법은 (정적 또는 동적으로) 불분명성 제거를 하는 모든 기술에 제공될 수 있다는 것이다. 여기에 주어진 특정의 알고지즘은, 각각의 스케줄링된 명령이 이전에 스케줄링된 모든 명령 이후에 실행된다는 가정에 기초한다(즉, 선택된 순서는 실행 순서를 반영한다). 하지만, 당해기술분야의 전문가라면, 다른 스케줄링 방식에서 이용되도록 이러한 알고리즘의 상세한 내역을 변형하는 방법을 이해할 것이다.
단계 201 에 있어서, 후속 연산이 선택되고 명령의 시퀀셜 스트림내의 현재의 위치로부터 이전 위치로로 이동된다(즉, 명령이 실행을 위해 스케줄링된다).
단계 202 에 있어서, 선택된 명령은 로드(또는 그 밖의 다른 명령으로서 판독 액세스에 대한 메모리 위치를 참조할 수 있는 것)이었는지가 판정된다. 만약 그렇다면, (비선택된 로드 명령 또는 그 밖의 다른 명령으로서 판독 액세스에 대한 메모리 위치를 참조할 수 있는 명령등) 동일한 메모리 위치를 불분명하게 참조하는 비선택된 명령인이 선택된 로드 명령에 대해 먼저 이동되었는지가 단계 202 에서 판정될 것이다. 단계 202에서 수행된 제 2 판정은 하나 이상의 무순서 명령에 관한 순서 명령이다. 단계 202에서 수행된 2개의 판정의 결과중에 어느 하나라도 거짓이면, 처리는 단계 204 로 진행된다. 하지만, 만역 선택된 명령이 로드 명령이고 더나아가 동일한 메모리를 불분명하게 참조하게 될 수 있는 비선택된 명령이 그 선택된 로드 명령에 대해 이동된 것이라고 판정된다면, 처리는 단계 203 으로 진행된다.
단계 203 에 있어서, 불분명성 제거를 처리하는 동작이 수행된다. 이것은 다음의 것들로만 제한되지는 않지만, 선택된 로드 명령에 관하여 무순서인 로드 명령들 사이의 간섭이 존재하는지를 결정하기위한 테스트를 부가하는 단계와; 그러한 간섭이 있는 경우에 실행하개 되는 바이패싱 시퀀스를 설정하는 단계를 포함한다. 이러한 바이패싱 시퀀스는, 이전의 무순서 로드 시퀀스와 같은 동일한 값을 리던시키는 것을 보장함으로써 이벤트들의 순서를 정확한 타임 시퀀셜 (기록 시리얼) 순서를 강화한다. 바이패싱 시퀀스는, 복수의 (무순서) 로드 연산들이 그 선택된 로드 명령에 대해 이동되었다면, 복수의 바이패스 조건들을 체크할 것이다. 바이패싱 시퀀스중에 수행된 체크 단계는, 로드 명령, 부가적인 명령 또는 부가적인 명령들의 시퀀스 내로 인코딩된 플래그 또는 다른 수단, 또는 하드웨어 수단으로 구현될 수 있다.
복수의 체크가 수행되면, 마지막 결과가 그 참조된 메모리 위치에 관한 기록 시리얼로 되는 것이 보장되도록, 복수의 체크가 실행되게 된다. 이것을 보장하기 위하여, 복수의 간섭 로드 명령들은 그 선택된 순서 로드 명령에 관하여 무순서로실행된다면, 그 값은 간섭하고 있는 무순서 로드 명령을 최선행하는 논리적 후속자의 레코드로부터 바이패스되어야 한다. 바람직하게는, 2개의 방법중의 어느 하나를 이용하는 것이 바람직하다. 제 1 방법에 있어서는, 간섭 및 바이패싱 테스트는 논리적 프로그램 순서로 수행되고, 간섭이 검출된다면, 특정의 애터믹(atomic) 유니트에 대한 모든 더 이상의 테스트와 바이패싱은 스킵된다(복수의 애터믹 유니트가 하나의 로드 연산에서 참조되는 경우).
제 2 방법에 있어서, 간섭 및 바이패싱 테스트는 역순의 논리적 프로그램 순서로 수행된다. 당해기술분야의 전문가라면, 2가지 방법의 개시에 기초하여 본 발명의 사상과 범위를 벗어나지 않고 많은 변경과 변형이 가능하다는 것을 인식할 것이다.
단계 204 에 있어서, 선택된 명령이 로드인지를 판정하고, 만약 그렇다면, 그 선택된 명령이 동일안 메모리 위치를 불분명하게 참조할 수도 있는 다른 비선택된 명령(판독 액세스를 위한 메모리 위치를 참조할 수 있는 비선택된 로드 명령 또는 그 밖의 다른 명령 등)에 대해서 이전에 이동되었던 것인지를 판정한다. 단계 204에서 수행된 2개의 판정은 또한 그 선택된 명령이 하나 이상의 순서 명령에 관한 무순서 로드 명령인지 여부로서 특징지워질 수 있다. 단계 204에서 수행된 2개의 판정중의 어느 하나의 결과가 거짓이면, 처리는 단계 206으로 진행한다. 하지만, 그 선택된 명령이 로드 명령이고 더나아가 그 선택된 명령이 동일한 메모리 위치를 불분명하게 참조할 수도 있는 다른 비선택된 명령에 대해서 미리 이동되었다는 것으로 판정하였다면, 처리는 단계 205 로 진행한다.
단계 205 에 있어서, 로드 명령이 이동되었던 모든 순서 로드 명령에 의해 추가적 참조를 위한 무수선 로드 명령의 결과를 기록하기 위한 메커니즘이 부가된다. 이러한 연산을 기록하는 메커니즘은 하드웨어 수단,"플래그" (명령 비트) 또는 로드 명령에 인코딩된 다른 수단, 부가적인 명령, 또는 부가적인 명령들의 시퀀스로 이루어질 수 있다. 필요하다면, 이러한 레코드를 제거하기 위한 (그리고 이러한 정보를 저장하는데에 필요한 어떠한 자원들이라도 이용하기 위하여) 부가적인 코드가 그 이동된 로드 연산의 본래의 프로그램 위치에 삽입될 수도 있다.
단계 206 에 있어서, 스케줄링되도록 남아있는 명령들이 있는지가 판정된다. 만약 그렇다면, 처리는 단계 201로 복귀된다. 만약 그렇지 않다면, 처리는 종료한다.
도 2b 는 도 2a 의 재순서화된 연산들을 실행하기 위한 처리를 나타내는 흐름도이다. 특히, 도 2b 는 도 2a의 바이패싱 및 레코딩 단계들을 더 상세히 설명한다.
단계 251 에 있어서, 무순서 로드 연산이 실행됨으로써, 무순서 로드 명령으로 정해진 레지스터에 데이터를 판독하고 저장한다. 단계 253 에 있어서, 로드 명령에 의해 로드된 어드레스와 그 값은 추가적인 참조를 위해 레코드된다. 단계 255 에 있어서, 단계 253에서 로드된 값에 의존하는 명령들을 포함하는 다른 명령들이 선택사항으로서 실행될 수도 있다.
단계 257 에 있어서, 단계 251에서 실행된 이전의 무순서 로드 명령이 이동되어 있던 무순서 로드 명령이 실행된다. 단계 259 에 있어서, 2개의 로드 명령의 어드레스들이 간섭하고 하고 있는지를 판정하기 위한 체크가 수행된다. 만약 그 어드레스들이 간섭하고 있으면, 처리는 단계 261 로 진행한다. 하지만, 만약 어드레스들이 간섭하고 있지 않으면, 처리는 단계 262 으로 진행한다.
단계 261 에 있어서, 그 이전 무순서 로드 연산으로부터의 로드 값은 바이패스되어, 무순서 로드에 제공된(로드된) 데이터 값은 이때에 순서 로드에 제공된다(로드된다).
단계 263 에 있어서, 로드 명령들 또는 종속하는 명령들 중의 어느 하나 (또는 모두)에 종속하는 명령을 포함하는 다른 명령들이 실행될 수도 있다. 단계 265 에 있어서, 무순서로수행되었던 본래의 로드 연산의 위치에서, 로드 레코드에 대한 엔트리가 할당해제된다.
주목할 것은, 만약 복수의 로드 명령이 다른 로드 명령에 대해 이동한다면, 순서 로드 명령에 관하여 무순서로이동된 각각의 로드 명령에 대해 단계 259 및 261 을 반복함으로써 수개의 체크가 (필요한 만큼) 수행된다. 더나아가, 명령이 어떤 무순서 명령들에 관한 순서 명령 및 어떤 순서 명령들에 관한 무순서 명령이라면, 바이패싱 단계 261 은 레코딩 단계 253 이전에 수행되는 것이 바람직하다.
상술한 처리를 최적화하기 위하여, 단계 257 이 재순서화되어, 어떠한 간섭도 검출되는 않는 경우에만 순서 메모리 액세스가 수행된다.
본 발명의 방식은 정적 및 동적 기법에 이용될 수 있다. 이러한 구현은, 2개의 연산들이 서로에 관하여 순서 또는 무순서인지를, 그리고 참조들이 어떻게 생성되고 참조되는지를 식별하기 위하여 서로 다른 방식을 이용할 수도 있다.
어떤 2개의 로드 연산 사이의 순서/무순서 관계를 식별하는 방법은, 프로그램 흐름에서 이러한 순서 연산들에 관하여 무순서인 연산들을 식별하는 순서 로드 연산의 간섭 및 바이패스 테스트에 의해 이용되게 될 어떤 2개의 로드 연산에 대해 식별자를 할당하는 것이다. 이러한 식별자들은 컴파일러에 의해 정적으로 할당되거나 발송 하드웨어에 의해 동적으로 생성될 수 있다.
본 발명이 메모리 워드로 기술되어 있지만, 비트 및 바이트로 제한되지 않고 어드레스가능 메모리를 포함하여 다양한 구조 형태의 메모리 구조에도 적용될 수 있다. 더나아가, 메모리 연산들은 메모리 워드가 특별한 오버랩하는 것(즉, 2개의 메모리 워드에 의해 참조된 비트들의 서브세트만이 이들 워드에 공통인 것)을 지정할 수도 있다는 것은 이해될 수 있을 것이다. 이러한 경우에, 이들 공통 비트만이 바이패스될 수도 있다. 더나아가, 메모리 시스템은 메모리 액세스들에 대한 애터미시티(atomicity) 요구사항을 정할 수 있다. 이러한 경우에, 적절한 애터믹 유니트(전형적으로는 바이트, 워드, 또는 캐시 라인)이 순서 로드 명령으로 바이패스되도록 무순서 로드 명령에 의해 레코드될 수도 있다. 부가적으로, 다른 변형도 본 발명의 사상과 범위를 유지하면서도 다른 메모리 모델들과 본 발명에서 함께 이용될 수 있다.
간섭 및 데이터 바이패싱을 위한 동적 스케줄링 및 명령들을 이용하는 실시예
동적 스케줄링 및 명령들을 이용하는 본 발명의 간섭 테스트의 가능성있는 구현을 예시하기 위하여, 이하에서 제공되는 실시예에서는 간섭 테스트의 소망하는 기능성이 워드 레벨에서 구현된다. 하지만, 비트, 바이트, 하프 워드 또는 그밖의 다른 레벨로 메모리 판독 연산을 구현하는 프로세서가 여기에 개시되는 방법을 이용하는데에 채용될 수 있다는 것은 이해될 수 있을 것이다. 다음, 각각의 어드레싱능력을 가진 유니트에 대한 서로다른 엔트리로부터 바이패싱하기 위한 능력을 가진 독립적인 각각의 개별적 어드레싱능력을 가진 유니트에 대해 비교가 행해진다. 어떤 시스템은 바이트, 하프 워드, 워드 캐시 라인(또는 그보다 더 고급) 레벨로 애터미시티를 더욱 보장할 수도 있다. 이러한 애터미시티가 유지된다면, 본 발명은 무순서 명령에 의해 보장되는 레코드로 주변 애터믹 유니트를 기록하는데에 채용될 수 있다.
여기에 제공된 실시예는 다음의 표기를 이용한다.
ㆍRT, RA 는 범용 레지스터를 나타낸다.
ㆍ(RT), (RA) 는 범용 레지스터 RT, RA 의 각각의 내용을 나타낸다.
ㆍD, BD 는 데이터 변위(displacement)와 브랜치 변위를 각각 나타낸다.
ㆍCIA, NIA 는 현재 실행되고 있는 명명의 어드레스 및 후속하여 실행될 명령어드레스를 각각 나타낸다.
ㆍ 다른 언급이 없다면, 슈도 코드는 C 프로그래밍 언어에 대한 ISO C 표준에서 정의하고 있는 연산자와 유사한 것을 이용한다(예를들면, '[]'는 인덱스를, '.' 는 레코드 필드를 나타낸다).
정적 스케줄링의 바람직한 실시예에서는 컴파일러에 의한 각각의 무순서 로드 연산을 할당된 로드 태그 식별자를 이용한다. 로드 태그 식별자는 각각의 연산에 대한 그 로드 연산의 무순서 발송 시점 및 논리적 순서 시점 사이에 단일 무순서 로드 연산과 일의적으로 연계되어 있다.
로드 태그 식별자는 각각의 무순서 로드 연산내에 저장되고, 도 2b에서 단계 253 에 의해 생성된 레코드내에 레코드된다. 이러한 무순서 로드 명령은 그 명령 포맷으로 하나의 부가적 필드를 포함하고, 로드 태그 식별자(4)를 가진 무순서 로드 연산은 이하에서 다음과 같이 표기된다.
load_4 RT, D(RA)
로드를 수행함에 부가하여, 이러한 연산은 로드 결과(애터미시티를 보장하는 액세스를 포함하는 가장 큰 애터믹 유니트), 로드 태그 식별자, 및 어드레스를 테이블 내에 레코드한다.
dealloc_4 로 표시된 명령은 도 2에서 단계 265 에 도시된 바와같이 테이블 엔트리를 로드 태그 (id 4) 로써 할당해제하게 된다. dealloc_n 명령은 도 2b 의 처리의 선택적 단계이다. 그래서, 특정의 구현에 따라, dealloc_n 명령은 코드로부터 생략될 수도 있고, 테이블 엔트리들은 차후의 할당 요구에 의해 자동적으로 파기될 수 있다.
효율적인 구현은 무순서 로드 결과에 관한 정보를 기록하는데에 이용되는 테이블내의 실제 인덱스로서 로드 태그 식별자를 이용하는 것을 포함한다. 바이패스 조건 및 실제 바이패스 단계에 대한 간섭 테스트는 '체크 어드레스 간섭 및 조건적 로드 레지스터' 명령을 이용하여 구현될 수 있고, 그에 대한 정의는 이하에 주어진다. 이러한 명령은 무순서 로드를 지정하고, 그의 어드레스를 비교하고, 그 결과가 어드레스 간섭의 경우에 바이패스한다.
어드레스 간섭은, (이전에 실행된 무순서 로드 연산이 로드된 데이터로부터의) 어드레스가 (무순서 로드 명령에서의) 현재 지정된 어드레스를 일치(또는 서브 워드 연산에 대해 오버랩)시킨 경우에, 검출된다.
바람직하게는, 어드레스 간섭이 다음과 같은 명령에 따라 검출된다.
여기서, EA 는 순서 명령에 의해 참조된 유효 메모리 어드레스이다. 만약 계산된 유효 어드레스가 chkld 명령 (n) 에 의해 지정된 엔트리내에 레코드된 이전에 실행된 무순서 로드의 메모리 영역을 일치시키거나 오버랩시킨다면, 대응하는 값은 바이패스된다.
chkld 명령은 필수적으로 단계 259 및 261 을 단일 명령으로 구현한다.
주목할 것은, chkld 명령이, 단일 연산 로드에서 체크와 함께 단계 257, 259, 및 261 을 결합하기 위하여, 실제 로드 명령과 결합한다는 것이다.
대안으로서, 테스트 어드레스 간섭 및 브랜치 명령을 이용하는 것만이 바람직하고, 그것은 소프트웨어 기반의 간섭 및 바이패싱 테스트을 가속화하기 위해 오버랩시키는 경우에 2개의 메모리 어드레스와 그에 대응하는 사이즈 및 브랜치의 어드레스 간섭에 대한 테스트를 한다.
본 발명의 간섭 테스트 및 바이패스 연산 (체크 어드레스 간섭 및 조건적 로드 레지스터 명령(chkld)) 의 동적 생성 및 그 실행을 예시하기 위해서, 제 1 로드 명령 아래에 제 2 명령을 포함하는 좌측 열의 아래에 표시된 (본래의) 코트와, 제 2 로드 명령에 의존하는 어떤 산술 명령들을 고려한다. 본 실시예에 있어서, 그 명령의 이름 다음에의 제 1 레지스터가 목적 레지스터이고, 한편 나머지 레지스터들은 연산자들이다.
우측 열에 나타낸 바와같이, 제 2 로드 연산은 제 1 로드 연산에 대해 이동된다. 순서 로드 연산은 체크 어드레스 간섭 및 조건적 로드 레지스터 명령(chkld) 에 의해 증가되며, (무순서로이동되었던) 본래의 제 2 로드 명령은 좌측 열에 나타낸 바와같이 바이패스 레코드를 할당해제하는 명령에 의해 대체된다. 본래의 로드 명령에 후속하는 산술 명령들이 다음과 같이 재순서화될 수 있다.
이경우에, 로드 연산에 의존하는 명령들은 우측 열에 도시된 바와같이 순서 로드 명령에 대해 이동한다.
결합된 로드 및 체크 명령 (load_chk_n)을 이용하여, 다음에 도시된 바와같이, load 및 chkld 명령들을 단일 명령으로 되게 한다.
도 3 은 동적 재순서화 및 간섭 테스트 및 데이터 바이패스 시퀀스의 소프트웨어 기반 구현을 지원하는 종래의 컴퓨터 프로세싱 시스템의 기능 블록도이다. 이 시스템은, 메모리 서브 시스템(301), 데이터 캐시(302), 명령 캐시(304), 및 프로세서 유니트(300)으로 구성되어 있다. 프로세서 유니트(300)는, 명령 큐(303), 하나 이상의 로드 유니트(305)(1개만 도시됨), 정수 연산, 논리 연산, 부동소수점 연산을 실행하기 위한 복수개의 실행 유니트(307), 브랜치 유니트(309) 및 레지스터 파일(311)을 포함한다. 명령들은, 브랜치 유니트(309)의 제어하에서 명령 캐시(304)로부터(명령들이 명령 캐시(304) 내에 존재하지 않는 경우에는 메모리 서브 시스템(301)로부터) 인출되고, 명령 큐(303) 내에 위치된다. 명령들은 명령 큐(303)으로부터 로드 유니트(들)(305), 실행 유니트(307) 및 브랜치 유니트(309)로 실행을 위하여 디스패치된다. 이러한 유니트들(305, 307, 309)은, 명령에 의해 이용된 연산자들을 액세스하고 명령들의 실행에 의해 생성된 결과를 저장하기 위하여, 상호작용한다. 레지스터 파일(311)은 전형적으로 범용 레지스터들(GPS), 부동소수점 레지스터들(FRP), 및 조건 레지스터들(CR)을 포함한다. 로드 유니트(들)(305)는 또한, 실행 유니트들(307) 및/또는 브랜치 유니트(309)에 의해 실행되는 명령에 의해 이용된 데이터를 로드하고 실행 유니트들에 의해 발행된 결과를 저장하기 위해서, 데이터 캐시(302) 및 메모리 서브시스템(301)과 상호작용한다.
도 4 는 본 발명의 실시예에 따른 도 3 의 시스템에 의해 무순서 로드 연산의 실행을 지원하기 위한 하드웨어 자원들을 예시하는 블록도이다. 특히, 도사는 도 3 에 도시된 적어도 하나의 로드 유니트(305)의 상세한 블록도이다. 적어도 하나의 로드 유니트(305)는, 제어 논리부(401), 어드레스 발생 논리부(402), 로드 순서 버퍼(403), 비교 논리부(404), 및 바이패싱을 위한 데이터 선택 메커니즘(405)을 포함한다.
제 1 연산 모드에 있어서, 정규의 로드 연산을 처리하는 경우에, 어드레스 생성 논리부(402)는 데이터를 판독하는 메모리 어드레스를 생성한다. 로드 연산의 특정의 포맷에 따라, 메모리 어드레스는, 로드 연산에 지정된 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있거나, 로드 연산에 지정된 변위 정보 및 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있다. 그 다음에, 어드레스 발생 논리부(402)는 그 발생된 메모리 어드레스를 데이터 캐시(302)로 보낸다. 요청된 데이터는 데이터 캐시(302)로부터 또는 (만약 데이터 캐시(302)내에 존재하지 않는다면) 메모리 서브시스템(301)으로부터 판독되고, 그 다음에 제어 논리부(401)에 의해 제어되는 선택 메커니즘(405)을 통하여 레지스터 파일(311)내에 목적 레지스터로 복귀되고 기록된다.
제 2 연산 모드에 있어서, 무순서 로드 연산을 처리하는 경우에, 어드레스 생성 논리부(402)는 데이터를 판독하는 메모리 어드레스를 생성한다. 로드 연산의 특정의 포맷에 따라, 메모리 어드레스는, 로드 연산에 지정된 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있거나, 로드 연산에 지정된 변위 정보 및 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있다. 그 다음에, 어드레스 발생 논리부(402)는 그 발생된 메모리 어드레스를 데이터 캐시(302)로 보낸다. 요청된 데이터는 데이터 캐시(302)로부터 또는 (만약 데이터 캐시(302)내에 존재하지 않는다면) 메모리 서브시스템(301)로부터 판독되고, 그 다음에 제어 논리부(401)에 의해 제어되는 선택 메커니즘(405)을 통하여 레지스터 파일(311)내에 목적 레지스터로 복귀되고 기록된다. 동시에, 제어 논리부(401)는, 로드 순서 버퍼(403)를 지시하여, 그로부터 데이터가 로드되는 어드레스, 데이터 타입(선택사항), 그 요청된 데이터를 포함하는 하부 아키텍처에 의해 애터믹으로 되도록 보장된 가장 큰 유니트, 및 (테이블 (즉, 로드 순서 버퍼(403)) 내의 인덱스로서 도 4 에 내재적으로 저장된) 로드 테그 식별자로 이루어진 레코드를 저장하게 한다.
제 3 연산 모드에 있어서, 본 발명의 '체크어드레스 간섭 및 조건적 로드 레지스터' 명령 (간섭 테스트 및 바이패스) 을 처리하는 경우에, 어드레스 생성 논리부(402)는 데이터를 판독하는 메모리 어드레스를 생성한다. 체크 어드레스 간섭 및 조건적 로드 레지스터 명령의 특정의 포맷에 따라, 메모리 어드레스는, 체크 어드레스 간섭 및 조건적 로드 레지스터 명령에 지정된 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있거나, 체크 어드레스 간섭 및 조건적 로드 레지스터 명령에 지정된 변위 정보 및 레지스터 파일(311)의 레지스터(들)으로부터 판독된 연산자(들)에 기초하여 발생될 수 있다.
제어 논리부(401)는, 체크 어드레스 간섭 및 조건적 로드 레지스터 명령내에 지정된 로그 태그 식별자와 연계된 레코드를 액세스하고, 그 포함된 메모리 어드레스를 비교 논리부(404)로 공급한다. 그다음에, 어드레스 발생 논리부(402)는 체크 어드레스 간섭 및 조건적 로드 레지스터 명령의 결과로 발생된 메모리 어드레스를 비교 논리부(404)에 공급하고, 그것은 다음에 두 어드레드스를 비교한다. 어드레스들이 일치하거나 메모리 오버랩을 지시하는 경우에, 비교 논리부(404)는 이것이 데이터 선택 메커니즘(405)에 지시한다. 어드 일치 또는 오버립의 경우에, 로드 순서 버퍼(403) 내에 어드레스된 엔트리의 데이터 필드내에 저장된 데이터가 레지스터 파일(311)에 라이트백을 위해 저장될 것이다. 즉, 무순서 로드 명령(로드 순서 버퍼(403) 내에 저장되었던 것)에 본래 공급되었던 데이터는 이제 순서 로드 명령에 제공된다. 그렇지않으면, 순서 로드 연산에 대한 레지스터 필드(311) 내에 현재 저장된 값은 변경되지 않은채로 유지된다(즉, 무순서 로드와 순서 로드 사이에 어떠한 간섭도 검출되지 않은 것이다). 선택 메커니즘(405)은 제어 논리부(401)의 제어하에서, 로드 순서 버퍼(403)로부터의 바이패스 엔트리에 의해 공급된 비트들의 서브 세트만을 선택하고 순서 로드를 위해 레지스터 파일(311)에 기록될 수 있다. 이것은 메모리 시스템의 애터미시티 유니트들을 뒤에 있는 무순서 및 순서 명령들을 간섭하는 부분적 오버랩에 대해 적절하게 된다.
제 4 연산 모드에 있어서, 명령 dealloc_n 이 로드 순서 버퍼(403)로부터 엔트리들을 할당해제하도록 구현된다. 이러한 명령은 선택사항이고, 그래서 원한다면 생략할 수도 있다.
상술된 실시예는 무순서 로드 명령이 이동되는 각각의 로드에 대한 여분의 명령(즉, 체크 어드레스 간섭 및 조건적 로드 레지스터 명령)과, 하나 이상의 다른 로드 명령에 관하여 무순서로이동되는 각각의 로드 명령(즉, dealloc 명령)에 대한 하나의 명령을 도입한다. 비록 이것은 본래의 프로그램에 관하여 오버헤드이지만, 명령들(하나 이상)을 이용하여 바이패스 조건을 검출하고 다음에 간섭이 검출되는 경우에 복구 시퀀스를 실행하는 이전의 메커니즘에 비해 비용면에서 적절하다. 이전의 메커니즘에 의한 이러한 시퀀스는, 명령 캐시의 악영향과 복구 코드의 존재가 레지스터 할당 메커니즘사에 위치되는 제약에 부가하여, 코드를 실행하기 위한 코드 및 타임을 저장하는 이중의 공간을 요구한다. 본 발명에 관하여, 로드 연산을 무순서로이동시키는 결정이 프로그램이 생성되는 경우에 형성되므로, 오버헤드의 임팩트는 이동을 실행하는 기대되는 이득에 대항하여 가중될 수 있다.
다른 대체 실시예에 있어서, 어레이 내(예, 로드 순서 버퍼(403)) 내의 이전의 무순서 로드 연산에 대한 정보는, 메모리 오버랩에 대한 테스트를 위해 비교 명령들(또는 상술된 단일 메모리 오버랩 명령)의 시퀀스에 의해서, 그리고 어드레스 오버랩의 경우에 순서 로드 명령에 의해 지정된 목적 레지스터로 어레이 내에 저장된 값을 조건적으로 이동시키기 위해 추가적인 명령들의 시퀀스에 의해서 이용된다. 추가적인 명령들은 조건적 이동 명령 또는 추가적인 이동 명령이 따라오는 조건적 이동 명령중의 어느 하나, 또는 순서 로드 명령에 의해 지정된 목적 레지스터로 무순서 로드 명령에 의해 생성된 레코드 내에 저장된 값을 이동시키는 효과를 가진 어떠한 다른 명령 시퀀스를 포함할 수도 있다.
또 다른 대체 실시예에 있어서, 본 발명은 블록 내에 연속적으로 실행된 명령들에 대한 명령 어드레스들을 엄격하게 상승시킴으로써 어사이클릭(acyclic) 코드 블록들(예, 기본 블록들 또는 수퍼 블록들) 내의 명령을 스케줄링하기 위해 이용된다. 이러한 경우에, 무순서 로드 명령에 의해 지정된 로그 태그 식별자는 논리 프로그램 순서내의 본래의 로드 명령의 프로그램 카운터 위치이다. 도 6 은 본 발명의 실시예에 따르는 도 3 또는 도 5 의 시스템에 의한 무순서 로드 연산의 실행을 지원하기 위한 하드웨어 자원들을 나타내는 블록도이다. 특히, 도 6 은 본 발명의 실시예에 따르는 도 3 에 도시된 로드 유니트(305)를 구현한 상세한 블록도로 고려될 수 있다. 로드 유니트(305)는, 제어 논리부(601), 어드레스 발생 논리부(603), 로드 순서 테이블(605), 간섭 테스트 및 우선순위 인코더(607), 바이패싱을 위한 제 1 데이터 선택 메커니즘(609), 및 바이패싱을 위한 제 2 데이터 선택 메커니즘(611)을 포함한다.
스페큘러티브 로드 명령이 실행되는 경우에, 로드 유니트(305) 는, 데이터가 로드될 메모리어드레스, 메모리로부터 수신된 데이터 값, 및 코텐트 어드레스가능 테이블(605)내의 스페큘러티브 로드 명령(명령 번호)의 논리 프로그램 위치를 레코드한다. 논리 프로그램 위치는 많은 방식으로 지정될 수 있다. 예를들면, 명령내에 인코딩된 부가적인 명령 필드, 특정한 명령어 프레픽스, 또는 하나 이상의 부가적인 컴퓨터 명령이 이용될 수도 있다.
순서 로드 명령이 실행되는 경우에, 로드 유니트(305)는 어드레스 발생 논리부(603)에 의해서 발생된 메모리 로드 어드레스에의 CAM 액세스를 수행하고, 이러한 어드레스가 (그러한 테이블을 액세스하는 무순서 로드의 경우에, 로드 연산의 논리 프로그램 위치가 이용되는) 그 자체 보다 고급인 (테이블(605)내에 명령 번호로 저장된) 프로그램 위치를 가지고 있는 무순서 로드 연산에 의해 이전에 액세스되는지를 체크하고, '간섭 테스트 및 우선순위 인코더(607)' 내에 동일한 메모리 위치를 참조한다. 어드레스 발생 유니트(603)에 의해 발생된 메모리 로드 어드레스가 무순서 로드 연산에 의해 이전에 액세스하였다면, 이전에 처리된 무순서 로드 연산과 현재의 로드 연산이 간섭하는 것이 이루어지고, 바이패싱은 데이터 선택 메커니즘(611)내의 간섭 엔트리와 연계된 데이터로부터 인에블된다. 복수의 엔트리들이 특정의 메모리 어드레스와 연계된 테이블 (605)내에 존재하게 될 수 있고, 그중에서 하나 이상은 간섭되게 될 것이다. 복수의 엔트리가 로드 연산과 간섭하면, 간섭 테스트 및 우선순위 인코더(607)는 우선순위 인코딩 기법을 이용하여, 무순서 로드 연산에 의해 본래 지적되고 테이블(605) 내에 저장된 것으로서 (테이블(605) 내의 명령 번호로서 저장된) 최하위 논리 프로그램 어드레스와 함께 간섭 엔트리로부터 데이터가 제공되는 것을 보장한다.
테이블 엔트리는, 프로그램 카운터가 무순서 로드 연산의 본래의 논리 프로그램 순서의 값에 도달하는 경우에, 제어 논리부(601)에 의해 할당해제된다.
이러한 메커니즘은 하드웨어 복잡도에 대해 프로그램 공간을 트레이드 오프한다. 상술한 바와같이, 어떠한 부가적인 명령도 이러한 실시예를 처리하는데에 필요치 않다. 동적 스케줄링은, 테이블(605) 내의 충분하지 않은 메모리 용량에 기인하여 테이블(605) 내에 저장될 수 없는 무순서 로서 어떤한 명령도 스케줄링되지 않도록, 구현되어야 한다. 콘텐트 어드레스가능 메모리가 테이블의 바람직한 구현이지만, 당해기술분야의 전문가라면 본 발명의 사상과 범위를 유지하면서 테이블(605)와 유사한 기능을 제공하는 다른 메모리 구조를 고려할 수 있다는 것은 이해할 수 있을 것이다.
간섭 테스트 및 데이터 바이패싱을 위한 동적 스케줄링 및 하드웨어 자원을 이용하는 실시예
동적 스케줄링 명령이 가능한 프로세서(무순서 발송 프로세서)의 종래기술의 구현은 다음의 특징을 포함한다.
1. 명령들 간의 종속도를 검출하고, 하나의 명령에 의해 이용된 레지스터를 재명명하고, 하나의 명령에 의해 이용된 자원의 가용도를 검출하는 능력을 포함하는, 명령들을 무순서로발송하기 위한 메커니즘,
2. 그들이 (무순서로) 실행되는 명령의 효과를 반영하는 프로세서의 무순서 상태를 유지하기 위한 메커니즘,
3. 프로그램 순서로 명령들을 퇴거시키고, 퇴거되는 명령의 효과와 함께 순서 상태를 동시에 갱신하는 메커니즘,
4. (퇴거되는 명령의 효과를 효과적으로 제거하는) 순서 상태를 갱신하지 않고 프로그램 순서로 명령들을 퇴거시키고, (무순서 상태로 존재하는 모든 효과를 제거하는 것을 의미하는) 퇴거되는 명령에서 시작하는 프로그램의순서 실행을 재개하는 메커니즘,
상술한 리스트로부터 메커니즘 3 은 퇴거되는 명령들의 효과가 정확한 경우에 명령들을 퇴거시키는데에 이용된다. 대안으로서, 메커니즘 4 는 퇴거되는 명령의 실행으로부터 또는 어떤 외부 이벤트로부터 유래하는 어떤 비정상적 조건이 있는 경우에는 언제나 이용된다.
도 5 는 메모리 연산들의 동적 재순서화와, 간섭 테스트 및 데이터 바이패스 시퀀스의 하드웨어 기반 구현을 지원하는 종래기술의 컴퓨터 프로세싱 시스템(즉, 수퍼 스칼라 프로세서를 포함하는 것)의 기능 블록도이다. 즉, 도 5 의 시스템은 상기 리스트된 메커니즘들을 이용하여 명령들의 재순서화를 지원하는데 필요한 하드웨어 자원을 포함하지만, 순서 로드 연산들이전에의 무순서 로드 연산의 실행을 지원하는데 필요한 하드웨어 자원을 포함하지는 않는다. 그 시스템은, 메모리 서브시스템(501), 데이터 캐시(502), 명령 캐시(504), 및 프로세서 유니트(500)를 포함한다. 프로세서 유니트(500)는, 명령 큐(503), 로드 및 저장 연산들을 수행하기 위한 복수의 메모리 유니트 (MU) (505), 정수 연산, 논리 연산, 부동소수점 연산을 실행하기 위한 복수개의 실행 유니트 (FU) (507), 브랜치 유니트(BU) (509), 레지스터 파일(511), 레지스터 맵 테이블(520), 프리 레지스터 큐(522), 디스패치 테이블(524), 퇴거 큐(526), 및 순서 맵 테이블(528)을 포함한다. 이러한 예시적인 구성은 M.Moudgill, K.Pingali, 및 S.Vassiliadis 등의 논문 "Register Renaming and Dynamic Speculation: An Alternative Approach" (Proceedings of the 26th Annual International Symposium on Microarchitecture, pp.201-13, 1993년 12월)에 개시된 것을 기초로 한다.
도 5 에 도시된 프로세서에 있어서, 명령들은, 브랜치 유니트(509)의 제어하에서 명령 캐시(504)로부터(또는 명령들이 명령 캐시(504) 내에 존재하지 않는 경우에는 메모리 서브 시스템(501)로부터) 인출되고, 명령 큐(503) 내에 위치되고, 명령 큐(503)로부터 후속하여 디스패치된다. 연산자들을 지정하기 위한 명령들에 의해 이용된 레지스터 이름은 레지스터 맵 테이블(520)의 콘텐트에 따라 재명명되고, 그것은 아키텍처된 레지스터로부터 물리적 레지스터들에 현재의 매핑을 지정한다. 그 결과들에 대한 목적지를 지정하기 위한 명령들에 의해 이용되는 아키텍처된 레지스터 이름은 프로세서에 의해 현재 이용되지않는 물리적 레지스터들의 이름을 포함하는 프리 레지스터 큐(522)로부터 추출된 물리적 레지스터들에 할당된다. 레지스터 맵 테이블(520)은, 명령들에 의해 지정된 아키텍처된 레지스터 이름들에의 물리적 레지스터들의 할당으로써 갱신된다. 이들 모든 갱신된 레지스터들을 가진 명령들은 디스패치 테이블(524)내에 위치된다. 명령들은 또한, 그들의 어드레스, 및 그들의 물리적 및 아키텍처된 레지스터 이름을 포함하고 있는 퇴거 큐(526) 내에 프로그램 순서로 위치된다. 명령들은, 이러한 명령들에 의해 이용될 모든 자원이 가용한 경우에(물리적 레지스터들이 기대되는 연산자들에 할당되고 기능 유니트들이 유휴인 경우에) 디스패치 테이블(524)로부터 디스패치된다. 명령에 의해 이용된 연산자들은, 전형적으로 범용 레지스터들(GPR), 부동소수점 레지스터들(FPR), 및 조건 레지스터(CR)을 포함하는 레지스터 파일(511)로부터 판독된다. 명령들은, 대응하는 메모리 유니트(505), 기능 유니트(507) 또는 브랜치 유니트(509)내에서 잠정적으로 무순서 로서 실행된다. 실행이 완료되면, 명령들로부터의 결과들은 레지스터 파일(511)내에 위치된다. 실행을 완료하는 명령들에 의해 설정된 물리적 레지스터들을 대기하는 디스패치 테이블(524) 내의 명령들은 통고된다. 퇴거 큐(526)에게는, 명령등이 어떤한 예외를 일으키는지를 포함하는 실행을 완료하는 명령들이 통고된다. 완료된 명령들은 프로그램 순서로 퇴거 큐(526)에서 (그 큐의 헤드로부터) 제거된다. 퇴거 시에, 만약 어떠한 예외도 명령에 의해 일어나지 않으면, 순서 맵 테이블(528)이 갱신되어, 아키텍처된 레지스터 이름들이, 퇴거되는 명령들로부터의 결과를 포함하는 레지스터 파일(511)내의 물리적 레지스터들을 포인팅하고, 순서 맵 테이블(528)로부터의 이전의 레지스터 이름들은 프리 레지스터 큐(522) 로 복귀된다.
한편, 명령들이 예외를 일으키면, 프로그램 제어가 퇴거 큐(526)으로부터 퇴거되는 명령의 어드레스에 설정된다. 더나아가, 퇴거 큐(526)는 클리어(플러쉬)되고, 그래서 모든 퇴거되지 않은 명령들을 소거한다. 더나아가, 레지스터 맵 테이블(520)은 순서 맵 테이블(528)의 콘텐트에 설정되고, 순서 맵 테이블(528) 내에 있지 않은 레지스터느 프리 레지스터 큐(522)에 부가된다.
상술한 컴포넌트들에 부가하여, 수퍼 스칼라 프로세서들은 브랜치들의 결과를 예측하는 브랜치 이력 테이블들과 같은 다른 컴포넌트들을 포함할 수도 있다.
본 발명에 따르면, 도 5 에 도시된 바와같이 선행하는 로드 연산들에 관한 로드 명령들을 재순서화하는 것을 지원하는 종래기술의 수퍼 스칼라 프로세서는 다음과 같이 향상될 수 있다.
1. 선행하는 로드 연산들에 관하영 무순서 발송된 로드 연산들을 형성하기 위한 메커니즘,
2. 인출되는 명령들을 개수하고, 다른 명령에 관하여 이전 또는 이후에 발생하는 명령이 있는지를 판정하기 위하 메커니즘 (다른 명령에 관하여 이전 또는 이후에 발생하는 명령이 있는지를 판정하기 위하여 다른 메커니즘으로 대체될 수도 있음),
3. 프로그램 순서의 어드레스, 액세스의 어드레스, 및 로드된 데이터를 포함하는 최고로 보장된 애터믹 유니트에 대해 판독된 데이터 값을 포함하는, 무순서로실행된 로드 연산들에 대한 정보를 저장하기 위한 메커니즘,
4. 로드 연산이 하나 이상의 무순서 로드 연산들에 관하여 순서적으로 실행되는 경우에 간섭 테스트를 실행하고, 복수의 명령들이 로드 연산과 간섭하는 경우에 우선순위 인코딩을 수행하기 위한 메커니즘,
5. 간섭하는 로드 연산과 연계된 레코드를 검출하기 위함 메커니즘,
6. 무순서 상태가 프로그램 순서로 퇴거 큐(526)으로부터 레지스터 파일(511)로 퇴거되는 시점에서 단계 3 에서 발생된 레코드를 삭제하기 위한 메커니즘.
본 발명에 의해 제공되는 메커니즘들은 도 5 에 도시된 종래기술의 무순서 프로세서에 가용한 메커니즘과 연계하여 다음과 같이 이용된다. 각각의 명령은 명령 큐(503)으로 들어감에 따라 명령 번호로 계수된다. 로드 명령은 선행하는 로드 명령보다 이전에 디스패치 테이블(524)로부터 디스패치될 수 있다. 이러한 로드 명령은 '무순서' 로드 연산으로서 이하에서 지칭된다. 이러한 경우에, 퇴거 큐(526) 내의 엔트리는 그 로그 명령에 대응하는 무순서 로드로 마크된다.
실행을 위하여 디스패치 테이블(524)로부터 메모리 유니트(505)로의 무순서 로드 연산의 디스패치의 검출은 "로드인출 계수기" 및 "로드 디스패치 계수기" 의 2개의 계수기들과 협동하는 것이 바람직하다. 로드 인출 계수기는, 로드 연산이 디스패치 테이블(524)에 부가되는 경우에, 상승한다. 로드 디스패치 계수기는, 로드 연산이 실행을 위하여 메모리 유니트(505)에 보내지는 경우에 상승한다. 로드 인출 계수기의 현재의 콘텐트들은, 로드 명령이 로드 연산이 인출 테이블(524)에 부가되는 경우에, 로드 명령에 첨부된다. 로드 연산이 실행을 위하여 디스패치 테이블(524)로부터 메모리 유니트(505)로 디스패치되는 경우에, 만약 그때에 디스패치 테이블(524) 내의 로드 명령에 첨부된 값이 로드 디스패치 계수기의 콘텐트들과 다르다면, 로드 명령은 무순서 로드 연산으로서 식별된다. 주목할 것은, 2개의 계수기 값들 사이의 차이가 로드 연산이 무순서로발송되는 것에 관하여 로드 연산의 정확한 수에 대응한다는 것이다. 로드 순서 테이블(605)에 엔트리를 부가하기 위한 공간이 가용하다면, 무순서 로드 연산들만이 메모리 유니트(505)에 디스패치된다.
로드 순서 테이블(605)는 모든 메모리 유니트(505)에 의해 동시에 액세스되는 단일 테이블이다(즉, 비록 복수의 물리적 카피가 처리를 가속화하기 위해 유지될 지라도 단일 논리 카피만이 유지된다). 주목할 것은, 만약 복수의 물리적 카피가 이용된다면, 복수의 물리적 카피의 논리 콘텐트들은 모든 메모리 유니트(505)에 동일한 상태를 항상 반영해야 한다는 것이다.
실행되는 명령의 명령 번호와, 명령이 스페큘러티브하게 실행되는지의 사실이, 발송된 각각의 로드 연산에 대한 메모리 유니트(505)에 통신된다.
도 6 은 본 발명의 실시예에 따르는,도 5 의 시스템에 의해 무순서 로드 연산들을 지원하기 위해 이용되는 하드웨어 자원들을 나타내는 블록도이다. 특히, 도 6 은 도 5 에 도시된 메모리 유니트(505)의 상세한 블록도이다. 메모리 유니트(505)는, 제어 논리부(601), 어드레스 발생 논리부(603), 로드 순서 테이블(605), 간섭 테스트 및 우선순위 인코더(607), 바이패싱을 위한 제 1 데이터 선택 메커니즘(609), 및 바이패싱을 위한 제 2 데이터 선택 메커니즘(611)을 포함한다. 간섭 테스트 및 우선순위 인코더(607)에 의해 조정되는 제 1 데이터 선택 메커니즘(609)는, (논리적으로) 가장 먼저인 간섭 무순서 로드의 데이터 값을 로드 순서 테이블(605)로부터 선택하는데에 이용된다. 제 2 데이터 선택 메커니즘(611)는 데이터 캐시(502)(또는 캐시 실패의 경우에는 메모리 서브시스템(501))에 의해 복귀된 데이터 또는 로드 순서 테이블(605)로부터의 데이터를 선택하는데에 이용된다. 제 2 데이터 선택 메커니즘(611)에 의해 선택된 데이터는, 간섭이 간섭 테스트 및 우선순위 인코딩 논리부(607)에 의해 검출되었는지에 따라, 레지스터 파일(511)에의 지속적인 기억를 위해 이용된다. 제 1 및 제 2 데이터 선택 메커니즘에 의해 수행된 기능들이 단일의 데이터 선택 메커니즘으로 통합될 수 있다는 것을 인식할 수 있을 것이다. 로드 순서 테이블(605)의 바람직한 구현은 콘텐트 어드레스가능 메모리(CAM)이다. 하지만, 당해기술분야의 전문가라면, 실질적으로 동일한 목적에 제공되는 다른 메모리 구조로 대체될 수 있다는 것을 인식할 것이다.
로드 연산을 수신하면, 어드레스는 어드레스 발생 유니트(603)에 의해 발생되고 데이터 캐시(502)에 디스패치된다. 그다음, 데이터 캐시(502)는 액세스되어 데이터를 제공한다. 만약 데이터가 데이터 캐시(502)에서 발견되지 않으면, 메모리 서브 시스템(501)이 액세스되어 데이터를 제공한다. 동시에, 로드 순서 테이블(605)는 어드레스 발생 유니트(603)에 의해 발생된 데이터 어드레스로써 제어 논리부(601)에 의해 액세스된다. 간섭 테스트 및 우선순위 인코더(607)는 간섭을 체크하며, 그것은
데이터 캐시(502)의 현재의 어드레스와 동일한 어드레스 (또는 현재의 어드레스의 어드레스를 포함하는 애터믹 유니트의 어트레스)를 참조하는 로드 순서 테이블(605)에 존재한다면 검출되고, 그 레코드는 현재 실행되는 로드 연산보다 이후인 명령 번호와 함께 연계된다(즉, 레코드된 로드 명령은 현재 처리되고 있는 로드 명령에 관하여 무순서인 것이다). 만약 간섭이 검출된다면, 간섭 테스트 및 우선순위 인코더(607)는 로드 순서 테이블(605)로부터, 그렇지 않으면 데이터 캐시(502)로부터 레지스터 파일(511)로 정보를 패스시키도록 데이터 선택 메커니즘(611)에개 지시한다. 최적화된 실시예에 있어서, 만약 바이패싱 조건이 만족된다면, 데이터 캐시(502) 또는 메모리 서브시스템(501)이 억제될 수 있다.
복수의 일치가 만족된다면, 간섭 테스트 및 우선순위 인코더(607)는 데이터 선택 메커니즘(611)에대한 바이패스 데이터 소스로서 (현재의 명령 번호보다 이후인) 가장 먼저인 명령 번호로써 데이블을 선택하도록 데이터 선택 메커니즘에게 지시한다.
만약 실행된 로드 연산이 무순서로마크되면, 명령의 논리 프로그램 어드레스 및 데이터 메모리 어드레스와 함께 레지스터 파일(511)에 제공된 데이터 값은 로드 순서 테이블(605)내의 엔트리에 레코드된다. 주목할 것은, 로드 연산들은 어떤 무순서 로드 연산들에 관하여 순서적으로 될 수 있고, 다른 순서 로드 연산들에 관하여는 무순서적으로 될 수 있다는 것이다. 그래서, 바이패싱 논리부는 및 레코딩 논리부는의 양쪽 부분은 단일 명령에 의해서 실행될 수도 있다.
퇴거 큐(526)으로부터 무순서 로드 연산의 결과를 퇴거시키면, 명령 또는 제어 신호는 그 퇴거된 명령과 연계된 엔트리를 제거하기 위하여 메모리 유니트(503)에 보내진다(즉, 고유의 명령 번호를 명명함으로써).
만약 브랜치 예측실패가 일어나고, 하나 이상의 스페큘러티브하게 실행된 무순서 로드 연산이 퇴거 버퍼로부터 플러쉬되면, 본 발명에 따르는 메모리 유니트(505)의 바이패스 테이블 구조 내의 적절한 엔트리가 동시에 제거될 것이다.
명령 번호는, 입력 프로그램의 시퀀셜 (순서) 실행에서 명령들의 순서를 확립하기 위하여 이러한 기법에 이용된다. 명령 번호는, 어떤 주어진 시점에 프로세서에 의해 처리될 수 있는 모든 연산을 일의적으로 식별할수 있어야 하며, 어떤 주어진 시점에 프로세서에 의해 동시에 처리된 2개의 명령 사이의 관계를 확립하는데에 이용가능하여야 한다. 예를들면, 명령 번호는, 프로세서에서 시간적으로 어떤 시점에서 (처리된) 인플라이프로 될 수 있는 명령들(n)의 개수의 적어도 2배로 인코드되기에 충분하도록 와이드한 단일 번호로 이루어진다. 그러면, 모줄로 산술은 현재의 명령 번호를 선행하는 n-1 개수의 범위에서 하나의 번호를 가진 명령이 현재 명령을 논리적으로 선행해야 하는 것과, 현재의 명령 번호에 후속하는 n-1 개수의 범위에서 하나의 번호를 가진 명령이 현재 명령을 논리적으로 후속해야 하는 것을 이룰 수 있다.
교대 번호매김 기법은, 명령 어드레스와, 각각의 취해진 브랜치에 대해 부가적인 브랜치 프레픽스를 이용하는 것을 이루어질 수 있다. 브랜치 프레픽스는, 브랜치 테이블에 참조의 모줄로 계수기 등의 어떠한 개수의 폼이라도 취할 수 있다. 명령 번호매김의 대체적인 구현은 명령 스트림상에서 순서와를 하는 하드웨어 테이블이라고 할 수 있다. 이것은, 퇴거 큐(526) 등의 기존의 하드웨어 성분에, 또는 명령들을 순서화하기 위한 배타적인 목적을 위해 구현된 하드웨어 메커니즘에 기초할 수 있다. 또다른 대체적인 구현에서는, 예로서 로드 연산들을 번호매김하는 로드 인출 계수기 값을 이용함으로써 상술된 기법에 따르는 로드 명령들만을 카운트할 수 있다.
본 발명의 대체 실시예는, 명령 번호에 기초한 엔트리를 저장하는 대신에, 액세스되는 메모리 어드레스에 기초하는 로드 순서 바이패스 테이블 엔트리를 생성할 수도 있다. 이러한 실시예는 간섭 테스트 및 우선순위 인코더(607)에서 우선순위 인코딩하기 위한 요구사항을 제거하지만, 서로에 대하여 순서적으로 되어 있고 제3의 로드 연산에 대해서는 무순서적으로 되게 되는 명령들 간에 부가적인 바이패스 조건들을 형성하게 된다.
주목할 것은, 비록 이러한 경향이 바람직한 것은 아니지만 주어진 메모리 위치에의 판독을 위하여 프로세서에 의해 복귀된 값이 다른 프로세서에 의해서 표현된 값 스트림과 동기되는 속도를 감소시티기 때문에, 이러한 실행들이 여전히 기록 시리얼화되고 있다는 것이다.
본 발명의 또다른 실시예에서는, 명령을 동적으로 생성하고 명령 큐(503)에 삽입할 수도 있다. 이 실시예에서는, 간섭 테스트 및 데이터 바이패싱의 정적 실시예에 대해 상술한 것과 유사한 명령 스케줄을 동적으로 발생시킨다. 그래서, 프로세서에 의해 실행된 명령들은 정적 및 동적 실시예에 대해서 유사하고, 스케줄이 동적 실시예에서는 프로그램의 실행 시점에서 프로세서에 의해 생성되고 정적 실시예에서는 컴파일러에 의해서 생성된다는 것만이 차이점이다.
비록 예시적인 실시예들이 첨부도면과 함께 개시되었지만, 본 발명의 시스템과 방법은 그러한 실시예로만 제한되는 것이 아니며, 본 발명의 사상 내지 범위를 벗어나지 않고 많은 다양한 변경과 변형이 당해기술분야의 전문가에 의해 가능하다는 것은 이해될 것이다. 이러한 모든 변경과 변형은 다음의 특허청구범위에 의해 정해지는 발명의 범위내에 포함되는 것으로 의도된다.
본 발명에 따르면, 복수의 기능 유니트의 가용도를 채용함으로써, 그리고 그렇지 않으면 유휴상태에 있게 되었을 자원을 이용함으로써 프로그램의 전체적 실행시간을 감소시킨다. 또한, 본 발명에 따르면, 연산을 재순서화하는 능력을 제한하는 불분명한 메모리 참조를 효과적으로 피할 수 있다. 또한, 본 발명에 따르면, 어드레스가 오버랩되는 경우에도 메모리 참조의 정확성을 보장한다.
Claims (28)
- 무순서 실행을 구현하는 컴퓨터 프로세싱 시스템에서의 실행을 위한 명령의 스케줄링 방법에 있어서,명령 시퀀스에서 현재의 위치로부터 이전의 위치로 후속 명령을 선택하고 이동시키는 단계;상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는지를 판정하는 단계;상기 선택된 명령이 상기 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 판독 액세스에 대한 메모리 위치를 불분명하게 참조하는 비선택된 명령들이 상기 선택된 명령에 대하여 미리 이동되었는지를 판정하는 단계;상기 비선택된 명령들이 상기 선택된 명령에 대해서 이전에 이동하고, 상기 비선택된 명령들이 상기 데이터를 판독 액세스하였던 메모리 위치들의 어드레스가 상기 선택된 명령들이 상기 데이터를 판독 액세스하게 될 메모리 위치의 어드레스와 동일한 경우에, 상기 선택된 명령의 실행 중에 수행되고, 상기 비선택된 명령들에 의해 이전에 판독 액세스된 데이터를 상기 선택된 명령으로 패스시키는 바이패스 시퀀스를 설정하는 단계;상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 선택된 명령이 상기 비선택 명령들에 대해서 이전에 이동되었는지를 판정하는 단계; 및상기 비선택된 명령들에 의해 추후 참조되도록 하기 위한 상기 선택된 명령의 레코드를 저장하기 위한 메커니즘을 부가하는 단계를 포함하는 스케줄링 방법.
- 제 1 항에 있어서,상기 선택된 명령이 상기 비선택된 명령들에 대해 이전에 이동되었던 경우에, 상기 부가하는 단계가 수행되는 스케줄링 방법.
- 제 1 항에 있어서,상기 비선택된 명령들이 판독 액세스에 대한 상기 메모리 위치를 불분명하게 참조하는 경우에, 상기 부가하는 단계가 수행되는 스케줄링 방법.
- 제 1 항에 있어서,선택되도록 남겨진 명령들이 존재하는지를 판정하는 단계; 및선택되도록 남겨진 명령들이 존재하는 경우에, 상기 선택 단계로 복귀하는 단계를 더 포함하는 스케줄링 방법.
- 제 1 항에 있어서,다른 명령에 대해 이전에 이동되었던 제 1 명령에, 상기 다른 명령을 식별하는 로드 태그 식별자를 할당하는 단계를 더 포함하는 스케줄링 방법.
- 제 5 항에 있어서,상기 비선택된 명령들이 상기 선택된 명령에 대하여 이전에 이동하였는지를 판정하는 단계는,상기 로드 태그 식별자들이 상기 비선택된 명령들에게 할당되었는지를 판정하는 단계; 및상기 로드 태그 식별자들이 상기 선택된 명령을 식별하는지를 판정하는 단계를 포함하는 스케줄링 방법.
- 제 5 항에 있어서,상기 선택된 명령이 상기 비선택된 명령들에 대하여 이전에 이동하였는지를 판정하는 상기 단계는,상기 로드 태그 식별자들이 상기 선택된 명령에게 할당되었는지를 판정하는 단계; 및상기 로드 태그 식별자들이 상기 비선택된 명령들을 식별하는지를 판정하는 단계를 포함하는 스케줄링 방법.
- 제 5 항에 있어서무순서 로드 명령 워드를 가진 상기 로드 태그 식별자를 저장하는 단계를 더 포함하는 스케줄링 방법.
- 무순서 실행을 구현하는 컴퓨터 프로세싱 시스템에서의 실행을 위한 명령의 스케줄링 방법에 있어서,명령 시퀀스에서 현재의 위치로부터 이전의 위치로 후속 명령을 선택하고 이동시키는 단계;상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는지를 판정하는 단계;상기 선택된 명령이 상기 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 선택 명령들이 상기 판독 액세스에 대한 메모리 위치를 참조하는 비선택된 명령들에 관하여 순서 명령인지를 판정하는 단계;상기 선택된 명령들이 상기 비선택된 명령에 관하여 순서 명령이고, 상기 비선택된 명령들이 상기 데이터를 판독 액세스하였던 메모리 위치들의 어드레스가 상기 선택된 명령들이 상기 데이터를 판독 액세스하게 될 메모리 위치의 어드레스와 동일한 경우에, 상기 선택된 명령의 실행 중에 수행되고, 상기 비선택된 명령들에 의해 이전에 판독 액세스된 데이터를 상기 선택된 명령으로 패스시키는 바이패스 시퀀스를 설정하는 단계;상기 선택된 명령이 판독 액세스에 대한 메모리 위치를 참조하는 경우에, 상기 선택된 명령이 상기 비선택 명령들에 관하여 무순서 명령인지를 판정하는 단계;상기 선택된 명령이 상기 비선택 명령들에 관하여 무순서 명령인 경우에, 상기 비선택된 명령들에 의해 추후 참조되도록 하기 위한 상기 선택된 명령의 레코드를 저장하기 위한 메커니즘을 부가하는 단계를 포함하는 스케줄링 방법.
- 제 9 항에 있어서,복수의 무순서 명령들이 순서 명령과 동일한 어드레스를 참조하는 경우에, 최하위 논리 프로그램 어드레스를 가진 데이터가 상기 순서 로드 명령으로 패스되는 것을 보장하기 위하여 우선순위 인코딩을 구현하는 단계를 더 포함하는 스케줄링 방법.
- 컴퓨터 프로세싱 시스템에서의 메모리 위치로부터 복수의 판독 액세스 동안에 얻어진 데이터 값들 사이에 일치성을 강화하기 위한 방법으로서, 명령 시퀀스들이 적어도 하나의 프로세서 유니트에 의해 실행되고, 복수의 판독 액세스가 무순서 로드 명령 및 적어도 하나의 다른 로드 명령에 의해 초기화되는 일치성 강화 방법에 있어서,상기 무순서 로드 명령에 의해 식별된 상기 메모리 위치로부터 제 1 데이터를 적어도 판독 액세스하도록 상기 적어도 하나의 프로세서 유니트를 제어하기 위해 상기 무순서 로드 명령을 실행하는 단계;상기 적어도 하나의 다른 로드 명령에 의해 이용되기 위한 상기 무순서 로드 명령의 레코드를 생성하는 단계로서, 상기 레코드가 상기 제 1 데이터가 로드된는 상기 메모리 위치의 어드레스 및 상기 제 1 데이터에 연계된 값을 포함하는 생성 단계; 및하기의 단계를 수행하기 위하여 상기 적어도 하나의 다른 로드 명령을 실행하는 동안에 상기 적어도 하나의 다른 로드 명령을 실행하고, 상기 적어도 하나의 프로세서 유니트를 제어하는 단계를 포함하고,상기 하기의 단계는,무순서 명령이 제 1 데이터를 로드한 상기 메모리 위치의 어드레스가 상기 적어도 하나의 다른 로드 명령이 데이터를 로드할 어드레스를 오버랩하는 것과 그 어드레스와 동일한 것 중의 어느 하나인지를 판정하는 단계; 및상기 어드레스들이 각각 동일한 것과 오버랩하는 것 중의 어느 하나인 경우에, 상기 제 1 데이터 및 그 일부 중의 어느 하나를 상기 레코드로부터 상기 적어도 하나의 다른 로드 명령에 패스시키는 단계를 포함하는 일치성 강화 방법.
- 제 11 항에 있어서,상기 프로세싱 유니트가 상기 명령 시퀀스들에서의 상기 무순서 로드 명령의 본래 위치에 도달하는 경우에, 상기 레코드를 소거하는 단계를 더 포함하는 일치성 강화 방법.
- 제 11 항에 있어서,상기 명령 시퀀스들에서의 상기 무순서 로드 명령의 본래 위치에서 상기 레코드를 소거하기 위한 수단을 부가하는 단계를 더 포함하는 일치성 강화 방법.
- 제 11 항에 있어서,상기 무순서 명령과, 상기 무순서 명령에 관하여 순서적인 명령들을 식별하기 위하여 상기 각각의 무순서 명령에 식별자를 할당하는 단계를 더 포함하는 일치성 강화 방법.
- 제 11 항에 있어서,상기 무순서 로드 명령을 실행하는 단계가,상기 무순서 명령에 의해 식별된 제 1 목적 레지스터에 상기 제 1 데이터를 위치시키기 위한 상기 적어도 하나의 프로세서 유니트를 제어하는 단계를 더 포함하는 일치성 강화 방법.
- 제 11 항에 있어서,상기 결정하고 패스시키는 단계들이, 상기 적어도 하나의 프로세서 유니트에 의해 실행될 단일 명령을 포함하는 일치성 강화 방법.
- 컴퓨터 프로세싱 시스템의 메모리 서브시스템에서의 메모리 위치로부터 복수의 판독 액세스 동안에 얻어진 데이터 값들 사이에 일치성을 강화하기 위한 장치로서, 명령 시퀀스들이 적어도 하나의 프로세서 유니트에 의해 실행되고, 복수의 판독 액세스가 적어도 하나의 무순서 로드 명령 및 순서 로드 명령에 의해 초기화되는 일치성 강화 장치에 있어서,상기 적어도 하나의 무순서 로드 명령의 레코드를 저장하기 위한 저장 수단로서, 상기 레코드가 데이터가 판독 액세스된 상기 메모리 서브시스템에서의 상기 위치의 어드레스와, 상기 데이터에 연계된 값을 포함하는 저장 수단 ;상기 순서 명령을 처리하는 경우에, 상기 적어도 하나의 무순서 로드 명령이 상기 데이터를 판독 액세스한 상기 메모리 서브시스템에서의 상기 위치의 상기 어드레스를, 상기 순서 로드 명령이 데이터를 판독 액세스하는 상기 메모리 서브시스템에서의 상기 위치의 상기 어드레스와 비교하는 비교 논리부;상기 저장 수단에게 상기 레코드를 저장하도록 지시하고, 상기 비교 논리부는에 상기 어드레스를 공급하기 위하여 상기 적어도 하나의 무순서 명령의 레코드를 액세스하는 제어 논리부; 및상기 비교 논리부에 의해 비교된 상기 어드레스들이 각각 동일한 것과 오버랩하는 것중의 어느 하나인 경우에, 상기 제어 논리부는의 제어하에, 상기 저장 수단에 저장된 값과 그의 부분중의 어느 하나를 상기 순서 명령에 공급하는 데이터 선택 메커니즘을 포함하는 일치성 강화 장치.
- 제 17 항에 있어서,상기 저장 수단은, CAM 구조와, 상기 레코드를 저장하기 위해 미리 정해진 메모리 서브시스템의 영역 중의 어느 하나인 일치성 강화 장치.
- 제 17 항에 있어서,상기 레코드는, 상기 무순서 로드 명령에 대응하는 순서 로드 명령들을 식별하는 식별자를 더 포함하는 일치성 강화 장치.
- 제 19 항에 있어서,상기 식별자에서 식별된 상기 무순서 명령에 대응하는 순서 명령들이 실행되어 비간섭으로 판정되는 경우에, 상기 저장 수단내에 저장된 상기 레코드를 제거하는 수단을 더 포함하는 일치성 강화 장치.
- 제 17 항에 있어서,상기 적어도 하나의 무순서 로드 명령과 상기 순서 로드 명령을 처리하는 경우에, 데이터들을 판독 액세스할 상기 메모리 서브시스템에서의 위치들의 어드레스들을 발생시키는 어드레스 발생 논리부를 더 포함하는 일치성 강화 장치.
- 제 17 항에 있어서,상기 순서 로드 명령이 데이터를 판독 액세스할 메모리내의 상기 위치의 상기 어드레스로부터 데이터들을 판독 액세스했던 복수의 무순서 로드 명령들이 존재하는 경우에, 명령 시퀀스들내의 최하위 본래 위치를 가진 데이터를 검출하는 우선순위 인코딩 수단을 더 포함하는 일치성 강화 장치.
- 컴퓨터 프로세싱 시스템의 메모리 서브시스템에서의 메모리 위치로부터 복수의 판독 액세스 동안에 얻어진 데이터 값들 사이에 일치성을 강화하기 위한 장치로서, 명령 시퀀스들이 적어도 하나의 프로세서 유니트에 의해 실행되고, 복수의 판독 액세스가 적어도 하나의 이전에 실행된 로드 명령 및 현재 실행되는 로드 명령에 의해 초기화되는 일치성 강화 장치에 있어서,상기 적어도 하나의 이전에 실행된 로드 명령의 레코드를 저장하기 위한 저장 수단로서, 상기 레코드가 데이터가 판독 액세스된 상기 메모리 서브시스템에서의 상기 위치의 어드레스와, 상기 데이터를 포함하는 저장 수단 ;상기 현재 실행하는 명령을 처리하는 경우에, 상기 적어도 하나의 이전에 실행된 로드 명령이 상기 데이터를 판독 액세스한 상기 위치의 상기 어드레스를, 상기 현재 실행되는 로드 명령이 데이터를 판독 액세스하는 상기 위치의 상기 어드레스와 비교하고, 상기 적어도 하나의 이전에 실행된 명령이 상기 현재 실행하는 명령보다 더 후속하는 명령 번호와 연계되어 있는지를 판정하는 간섭 테스트 및 우선순위 인코더;상기 저장 수단에게 상기 레코드를 저장하도록 지시하고, 상기 간섭 테스트 및 우선순위 인코더에 상기 어드레스를 공급하기 위하여 상기 적어도 하나의 이전에 실행된 명령의 레코드를 액세스하는 제어 논리부; 및상기 간섭 테스트 및 우선순위 인코더에 의해 비교된 상기 어드레스들이 각각 동일한 것과 오버랩하는 것중의 어느 하나이고, 상기 적어도 하나의 이전에 실행된 명령이 그와 연계된 상기 후속하는 명령 번호를 가진 경우에, 상기 제어 논리부의 제어하에, 상기 저장 수단에 저장된 데이터와 그의 부분중의 어느 하나를 상기 현재 실행하는 명령에 공급하는 데이터 선택 메커니즘을 포함하는 일치성 강화 장치.
- 제 23 항에 있어서,상기 데이터 선택 메커니즘은, 상기 간섭 테스트 및 우선순위 인코더에 의해 비교된 어드레스들이 동일한 것과 오버립하는 것중 어느 하나도 아닌 경우에, 상기 메모리 서브시스템에 저장된 데이터를 상기 현재 실행하는 명령에 공급하는 일치성 강화 장치.
- 제 23 항에 있어서,상기 데이터 선택 메커니즘은, 상기 적어도 하나의 이전에 실행된 명령보다 더 많이 존재하는 경우에, 상기 저장 수단으로부터 논리적으로 가장 먼저인 간섭하는 이전에 실행된 명령에 대응하는 데이터를 상기 현재 실행하는 명령에 공급하는 일치성 강화 장치.
- 제 23 항에 있어서,상기 현재 실행하는 명령이 상기 데이터를 판독 액세스하는 메모리 내의 상기 위치의 상기 어드레스로부터 데이터를 판독 액세스한 상기 적어도 하나의 이전의 실행된 명령보다 더 많이 존재하는 경우에, 상기 간섭 테스트 및 우선순위 인코더가, 상기 명령 시퀀스들내의 최하위 본래 위치를 가지는 데이터를 검출하는 일치성 강화 장치.
- 제 23 항에 있어서,상기 명령 번호가 충분히 와이드하여, 주어진 시점에서 상기 프로세싱 유니트에 의해서 처리될 수 있는 명령들(n)의 적어도 2배만큼을 인코딩할 수 있는 일치성 강화 장치.
- 제 27 항에 있어서,상기 적어도 하나의 이전에 실행된 명령 번호가 상기 현재 실행하는 명령의 명령번호를 후속하는 n-1 개의 범위내에 있는 경우에, 상기 적어도 하나의 이전에 실행된 명령이 상기 현재 실행하는 명령보다 더 후속하는 명령 번호를 가지는 일치성 강화 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US9/243,721 | 1999-02-03 | ||
US09/243,721 US6189088B1 (en) | 1999-02-03 | 1999-02-03 | Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location |
US09/243,721 | 1999-02-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20000076584A true KR20000076584A (ko) | 2000-12-26 |
KR100334479B1 KR100334479B1 (ko) | 2002-04-26 |
Family
ID=22919859
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020000004883A KR100334479B1 (ko) | 1999-02-03 | 2000-02-01 | 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6189088B1 (ko) |
JP (1) | JP3488162B2 (ko) |
KR (1) | KR100334479B1 (ko) |
TW (1) | TW446912B (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100607987B1 (ko) * | 2004-06-24 | 2006-08-02 | 삼성전자주식회사 | 명령어 스케줄링을 수행하는 메모리 제어장치 및 방법 |
KR101529846B1 (ko) * | 2010-09-25 | 2015-06-17 | 인텔 코포레이션 | 원자 영역에서 조건부 커미트를 위한 결정 메카니즘 제공 장치, 방법, 및 시스템 |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089404B1 (en) * | 1999-06-14 | 2006-08-08 | Transmeta Corporation | Method and apparatus for enhancing scheduling in an advanced microprocessor |
US6484240B1 (en) * | 1999-07-30 | 2002-11-19 | Sun Microsystems, Inc. | Mechanism for reordering transactions in computer systems with snoop-based cache consistency protocols |
US6381691B1 (en) * | 1999-08-13 | 2002-04-30 | International Business Machines Corporation | Method and apparatus for reordering memory operations along multiple execution paths in a processor |
US6442522B1 (en) * | 1999-10-12 | 2002-08-27 | International Business Machines Corporation | Bi-directional natural language system for interfacing with multiple back-end applications |
US6889315B2 (en) | 1999-12-17 | 2005-05-03 | Fujitsu Limited | Processor and method of controlling the same |
US6658559B1 (en) * | 1999-12-31 | 2003-12-02 | Intel Corporation | Method and apparatus for advancing load operations |
US6725340B1 (en) | 2000-06-06 | 2004-04-20 | International Business Machines Corporation | Mechanism for folding storage barrier operations in a multiprocessor system |
US6963967B1 (en) | 2000-06-06 | 2005-11-08 | International Business Machines Corporation | System and method for enabling weak consistent storage advantage to a firmly consistent storage architecture |
US6748518B1 (en) | 2000-06-06 | 2004-06-08 | International Business Machines Corporation | Multi-level multiprocessor speculation mechanism |
US6728873B1 (en) | 2000-06-06 | 2004-04-27 | International Business Machines Corporation | System and method for providing multiprocessor speculation within a speculative branch path |
US6691220B1 (en) * | 2000-06-06 | 2004-02-10 | International Business Machines Corporation | Multiprocessor speculation mechanism via a barrier speculation flag |
US6920547B2 (en) * | 2000-12-20 | 2005-07-19 | Intel Corporation | Register adjustment based on adjustment values determined at multiple stages within a pipeline of a processor |
US6918030B2 (en) * | 2002-01-10 | 2005-07-12 | International Business Machines Corporation | Microprocessor for executing speculative load instructions with retry of speculative load instruction without calling any recovery procedures |
US20040128448A1 (en) * | 2002-12-31 | 2004-07-01 | Intel Corporation | Apparatus for memory communication during runahead execution |
US7269694B2 (en) * | 2003-02-13 | 2007-09-11 | Sun Microsystems, Inc. | Selectively monitoring loads to support transactional program execution |
US20040168045A1 (en) * | 2003-02-21 | 2004-08-26 | Dale Morris | Out-of-order processor executing speculative-load instructions |
US20050114632A1 (en) * | 2003-11-21 | 2005-05-26 | Intel Corporation | Method and apparatus for data speculation in an out-of-order processor |
JP4376692B2 (ja) * | 2004-04-30 | 2009-12-02 | 富士通株式会社 | 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ |
US20070074195A1 (en) | 2005-09-23 | 2007-03-29 | Shih-Wei Liao | Data transformations for streaming applications on multiprocessors |
US8266413B2 (en) * | 2006-03-14 | 2012-09-11 | The Board Of Trustees Of The University Of Illinois | Processor architecture for multipass processing of instructions downstream of a stalled instruction |
US7904697B2 (en) * | 2008-03-07 | 2011-03-08 | International Business Machines Corporation | Load register instruction short circuiting method |
US8756591B2 (en) | 2011-10-03 | 2014-06-17 | International Business Machines Corporation | Generating compiled code that indicates register liveness |
US9690583B2 (en) | 2011-10-03 | 2017-06-27 | International Business Machines Corporation | Exploiting an architected list-use operand indication in a computer system operand resource pool |
US20130086364A1 (en) | 2011-10-03 | 2013-04-04 | International Business Machines Corporation | Managing a Register Cache Based on an Architected Computer Instruction Set Having Operand Last-User Information |
US9354874B2 (en) | 2011-10-03 | 2016-05-31 | International Business Machines Corporation | Scalable decode-time instruction sequence optimization of dependent instructions |
US9329869B2 (en) | 2011-10-03 | 2016-05-03 | International Business Machines Corporation | Prefix computer instruction for compatibily extending instruction functionality |
US8615745B2 (en) | 2011-10-03 | 2013-12-24 | International Business Machines Corporation | Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US9697002B2 (en) | 2011-10-03 | 2017-07-04 | International Business Machines Corporation | Computer instructions for activating and deactivating operands |
US9286072B2 (en) | 2011-10-03 | 2016-03-15 | International Business Machines Corporation | Using register last use infomation to perform decode-time computer instruction optimization |
US8612959B2 (en) | 2011-10-03 | 2013-12-17 | International Business Machines Corporation | Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization |
US10078515B2 (en) | 2011-10-03 | 2018-09-18 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US9454367B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Finding the length of a set of character data having a termination character |
US9588762B2 (en) | 2012-03-15 | 2017-03-07 | International Business Machines Corporation | Vector find element not equal instruction |
US9459867B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a specified memory boundary indicated by the instruction |
US9459864B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Vector string range compare |
US9268566B2 (en) | 2012-03-15 | 2016-02-23 | International Business Machines Corporation | Character data match determination by loading registers at most up to memory block boundary and comparing |
US9710266B2 (en) | 2012-03-15 | 2017-07-18 | International Business Machines Corporation | Instruction to compute the distance to a specified memory boundary |
US9280347B2 (en) | 2012-03-15 | 2016-03-08 | International Business Machines Corporation | Transforming non-contiguous instruction specifiers to contiguous instruction specifiers |
US9715383B2 (en) | 2012-03-15 | 2017-07-25 | International Business Machines Corporation | Vector find element equal instruction |
US9454366B2 (en) | 2012-03-15 | 2016-09-27 | International Business Machines Corporation | Copying character data having a termination character from one memory location to another |
US9459868B2 (en) | 2012-03-15 | 2016-10-04 | International Business Machines Corporation | Instruction to load data up to a dynamically determined memory boundary |
US9354888B2 (en) | 2012-03-28 | 2016-05-31 | International Business Machines Corporation | Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching |
GB2514618B (en) * | 2013-05-31 | 2020-11-11 | Advanced Risc Mach Ltd | Data processing systems |
US20160026484A1 (en) * | 2014-07-25 | 2016-01-28 | Soft Machines, Inc. | System converter that executes a just in time optimizer for executing code from a guest image |
US11281481B2 (en) | 2014-07-25 | 2022-03-22 | Intel Corporation | Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture |
US9733909B2 (en) * | 2014-07-25 | 2017-08-15 | Intel Corporation | System converter that implements a reordering process through JIT (just in time) optimization that ensures loads do not dispatch ahead of other loads that are to the same address |
GB2551548B (en) * | 2016-06-22 | 2019-05-08 | Advanced Risc Mach Ltd | Register restoring branch instruction |
US10241789B2 (en) * | 2016-12-27 | 2019-03-26 | Intel Corporation | Method to do control speculation on loads in a high performance strand-based loop accelerator |
US11593117B2 (en) | 2018-06-29 | 2023-02-28 | Qualcomm Incorporated | Combining load or store instructions |
TWI767175B (zh) | 2019-01-31 | 2022-06-11 | 美商萬國商業機器公司 | 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品 |
TWI773959B (zh) | 2019-01-31 | 2022-08-11 | 美商萬國商業機器公司 | 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品 |
CN113366457B (zh) | 2019-01-31 | 2024-06-14 | 国际商业机器公司 | 处理输入/输出存储指令 |
CN113366438A (zh) | 2019-01-31 | 2021-09-07 | 国际商业机器公司 | 处理输入/输出存储指令 |
EP3699771A1 (en) * | 2019-02-21 | 2020-08-26 | CoreMedia AG | Method and apparatus for managing data in a content management system |
TWI840734B (zh) * | 2022-01-10 | 2024-05-01 | 群聯電子股份有限公司 | 指令管理方法、記憶體儲存裝置及記憶體控制電路單元 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE4237417C2 (de) | 1992-03-25 | 1997-01-30 | Hewlett Packard Co | Datenverarbeitungssystem |
JP2786574B2 (ja) | 1992-05-06 | 1998-08-13 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置 |
US5420990A (en) | 1993-06-17 | 1995-05-30 | Digital Equipment Corporation | Mechanism for enforcing the correct order of instruction execution |
US5421022A (en) | 1993-06-17 | 1995-05-30 | Digital Equipment Corporation | Apparatus and method for speculatively executing instructions in a computer system |
US5588126A (en) * | 1993-12-30 | 1996-12-24 | Intel Corporation | Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system |
US5689712A (en) | 1994-07-27 | 1997-11-18 | International Business Machines Corporation | Profile-based optimizing postprocessors for data references |
US5666506A (en) | 1994-10-24 | 1997-09-09 | International Business Machines Corporation | Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle |
US5625835A (en) | 1995-05-10 | 1997-04-29 | International Business Machines Corporation | Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor |
US5758081A (en) | 1995-12-08 | 1998-05-26 | Aytac; Haluk M. | Computing and communications transmitting, receiving system, with a push button interface, that is continously on, that pairs up with a personal computer and carries out mainly communications related routine tasks |
US5835968A (en) * | 1996-04-17 | 1998-11-10 | Advanced Micro Devices, Inc. | Apparatus for providing memory and register operands concurrently to functional units |
-
1999
- 1999-02-03 US US09/243,721 patent/US6189088B1/en not_active Expired - Fee Related
- 1999-12-23 TW TW088122701A patent/TW446912B/zh not_active IP Right Cessation
-
2000
- 2000-02-01 KR KR1020000004883A patent/KR100334479B1/ko not_active IP Right Cessation
- 2000-02-03 JP JP2000026002A patent/JP3488162B2/ja not_active Expired - Fee Related
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100607987B1 (ko) * | 2004-06-24 | 2006-08-02 | 삼성전자주식회사 | 명령어 스케줄링을 수행하는 메모리 제어장치 및 방법 |
KR101529846B1 (ko) * | 2010-09-25 | 2015-06-17 | 인텔 코포레이션 | 원자 영역에서 조건부 커미트를 위한 결정 메카니즘 제공 장치, 방법, 및 시스템 |
Also Published As
Publication number | Publication date |
---|---|
JP3488162B2 (ja) | 2004-01-19 |
JP2000222207A (ja) | 2000-08-11 |
TW446912B (en) | 2001-07-21 |
KR100334479B1 (ko) | 2002-04-26 |
US6189088B1 (en) | 2001-02-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100334479B1 (ko) | 컴퓨터 처리 시스템에서 로드 동작의 순서 변경 방법 및 장치 | |
US5758051A (en) | Method and apparatus for reordering memory operations in a processor | |
US5918005A (en) | Apparatus region-based detection of interference among reordered memory operations in a processor | |
JP6095670B2 (ja) | コンピュータ・システム内のオペランド活性情報の維持 | |
JP4578042B2 (ja) | 接近して結合される多重プロセッサのための高速マルチスレッディング | |
US6907520B2 (en) | Threshold-based load address prediction and new thread identification in a multithreaded microprocessor | |
US8024522B1 (en) | Memory ordering queue/versioning cache circuit | |
JP5894120B2 (ja) | ゼロサイクルロード | |
US8370609B1 (en) | Data cache rollbacks for failed speculative traces with memory operations | |
US5751983A (en) | Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations | |
US7600221B1 (en) | Methods and apparatus of an architecture supporting execution of instructions in parallel | |
US7877630B1 (en) | Trace based rollback of a speculatively updated cache | |
KR101355496B1 (ko) | 복수의 병렬 클러스터들을 포함하는 계층 프로세서의스케쥴링 메카니즘 | |
US7003629B1 (en) | System and method of identifying liveness groups within traces stored in a trace cache | |
US5664137A (en) | Method and apparatus for executing and dispatching store operations in a computer system | |
US7660971B2 (en) | Method and system for dependency tracking and flush recovery for an out-of-order microprocessor | |
US20140047219A1 (en) | Managing A Register Cache Based on an Architected Computer Instruction Set having Operand Last-User Information | |
US8051247B1 (en) | Trace based deallocation of entries in a versioning cache circuit | |
US8019944B1 (en) | Checking for a memory ordering violation after a speculative cache write | |
US6381691B1 (en) | Method and apparatus for reordering memory operations along multiple execution paths in a processor | |
CA2328559C (en) | Methods for renaming stack references in a computer processing system | |
US7779307B1 (en) | Memory ordering queue tightly coupled with a versioning cache circuit | |
JPH06110688A (ja) | 複数の順序外れ命令を並行処理するためのコンピュータ・システム | |
US5699538A (en) | Efficient firm consistency support mechanisms in an out-of-order execution superscaler multiprocessor | |
US8010745B1 (en) | Rolling back a speculative update of a non-modifiable cache line |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
G170 | Publication of correction | ||
FPAY | Annual fee payment |
Payment date: 20060310 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |