KR19990072271A - 고성능의추론적인오정렬로드연산 - Google Patents

고성능의추론적인오정렬로드연산 Download PDF

Info

Publication number
KR19990072271A
KR19990072271A KR1019990001065A KR19990001065A KR19990072271A KR 19990072271 A KR19990072271 A KR 19990072271A KR 1019990001065 A KR1019990001065 A KR 1019990001065A KR 19990001065 A KR19990001065 A KR 19990001065A KR 19990072271 A KR19990072271 A KR 19990072271A
Authority
KR
South Korea
Prior art keywords
data
access
instruction
cache
last
Prior art date
Application number
KR1019990001065A
Other languages
English (en)
Other versions
KR100335745B1 (ko
Inventor
레이데이비드스콧
윌리엄슨베리듀엔
퉁시-셩스티븐
Original Assignee
포만 제프리 엘
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 포만 제프리 엘, 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 포만 제프리 엘
Publication of KR19990072271A publication Critical patent/KR19990072271A/ko
Application granted granted Critical
Publication of KR100335745B1 publication Critical patent/KR100335745B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing

Abstract

본 발명은 데이터 캐쉬와 레지스터 파일을 갖는 수퍼 스칼라 프로세서에서 로드 인스트럭션을 처리하기 위한 방법에 관한 것이다. 본 발명의 일 실시예에서, 로드 인스트럭션 처리 방법은 캐쉬에 오정렬된 데이터 블록을 액세스하기 위한 오정렬 로드 인스트럭션을 디스페치하는 단계; 정렬 인스트럭션을 계속해서 디스페치하는 동안 오정렬 로드 인스트럭션에 응답하여 캐쉬로 첫 번째와 마지막 액세스를 발생하는 단계; 마지막 액세스로부터의 데이터가 이용 가능할 때까지 첫 번째 액세스로부터 검색된 데이터를 저장하는 단계; 로드 인스트럭션에 의해 요구된 순서로 첫 번째와 마지막 액세스로부터의 데이터를 재결합하는 단계; 및 재결합된 데이터를 레지스터 파일에 저장하는 단계를 포함한다.

Description

고성능의 추론적인 오정렬 로드 연산 {High performance speculative misaligned load operations}
본 발명은 일반적으로 컴퓨터 프로세서(computer processor) 분야에 관한 것으로, 더욱 상세하게 말하자면, 단일 마이크로프로세서 칩(single microprocessor chip)에 집적되는 프로세서에 관한 것이다. 또한 더욱 상세하게 말하자면, 본 발명은 오정렬된(misalinged) 메모리 데이터의 추론적인 액세스(speculative access)에 관한 것이다.
좀더 빠른 마이크로 프로세서를 제공하는 것은 현재 프로세서 설계의 중요한 목표 중의 하나이다. 프로세서의 성능을 향상시키기 위해 매우 다양한 기술이 이용되어 왔다. 마이크로 프로세서의 성능을 크게 향상시키는 하나의 기술은 캐쉬 메모리(cache memory)의 사용이다. 본 발명에서 사용된 것처럼, 캐쉬 메모리는 마이크로프로세서 자체에 형성되는 한 셋트의 메모리 위치(memory location)에 관련된 것이고, 결과적으로, 마이크로프로세서 칩과는 별개로 위치하는 램(RAM)이나 자기 디스크(magnetic disk)와 같은 다른 형태의 메모리보다 매우 빠른 액세스 시간을 갖는다. 캐쉬에 자주 사용하는 데이터를 복사하여 저장하여 두므로, 상기 저장된 데이터를 필요로 할 때 정보를 얻기 위해 칩 외부(off chip)를 액세스하지 않고 캐쉬를 액세스할 수 있어, 마이크로프로세서의 성능을 크게 향상시킨다.
그러나, 캐쉬 메모리에는 문제가 있다. 하나의 문제는 캐쉬 메모리 내의 데이터가 캐쉬 경계(cache boundary)에 대해 오정렬될 때 발생한다. 비록 다수의 소프트웨어 컴파일러(compiler)가 오정렬의 문제를 피하려는 시도를 하고 있지만, 그럼에도 불구하고 포트란(FORTRAN) 프로그래밍 언어에서 볼 수 있는 커먼(COMMON) 인스트럭션문과 같은 소정 유형의 연산은 캐쉬 오정렬을 유발하며, 완벽한 소프트웨어 성능을 유지하기 위해, 프로세서는 오정렬된 캐쉬 데이터를 처리할 능력을 가져야 한다. 캐쉬 메모리에서 오정렬된 데이터의 문제는 도 1a 및 도 1b와 관련하여 좀더 상세하게 기술된다.
도 1a는 IBM사(社)가 공급하고 있는 프로세서의 파워 피씨(power PC)군에 사용된 캐쉬 메모리와 같은, 일반적인 캐쉬 메모리의 내용을 도시한 도면이다. 도시된 바와 같이, 캐쉬(100)는 다수개의 "캐쉬 라인(cache line)"을 포함하고, 각 캐쉬 라인은 128 바이트 크기(wide)이다. 그러나, 최대 8 바이트가 한번의 액세스 동안에 캐쉬로부터 판독될 수 있다. 본 명세서에서, "워드(word)"란 용어는 4 바이트의 데이터 블록을 가르킬 것이고, "더블 워드(double word)"란 용어는 8 바이트의 데이터 블록을 가르킬 것이다. 도 1a는 캐쉬 라인(0) 내의 더블 워드를 보여준다. 첫 번째 워드는 xxab이고, 두 번째 워드는 cdxx이다. 여기에서 a, b, c, d는 데이터의 필요 바이트(desired byte)이고 x는 데이터의 불필요 바이트(unneeded byte)를 의미한다. 일반적으로, 프로세서는 프로세서의 실행 유니트(execution unit)와 캐쉬 메모리 사이에 n-비트 크기의 전송이 가능하도록 설계된다. 설명 목적상, 도 1a에 도시된 캐쉬를 액세스하는 프로세서는 32 비트 또는 1 워드 크기의 데이터 전송이 가능하다고 가정한다. 캐쉬(100)의 임의의 캐쉬 라인 내의 임의의 워드는 단일 로드 인스트럭션(single load instruction)에 의해 검색(retrieve)될 수 있다. 유사하게, 임의의 캐쉬 라인 내의 임의의 워드는 단일 저장 인스트럭션(single store instruction)의 연산에 의해 기록될 수 있다. 프로세서가 바이트(a,b,c,d)를 보유하는 워드를 필요로 하는 경우, 캐쉬 라인의 단일 더블 워드 내에 필요한 모든 데이터가 존재하기 때문에, 캐쉬로부터 4 바이트의 모든 데이터를 취득하기 위해 단지 단일 로드 인스트럭션만이 필요하다는 것은 상기로부터 명백해질 것이다.
도 1b를 참조하면, 동일한 데이터가 캐쉬(100)에 저장된 것을 도시한다. 그러나, 이 때에는 캐쉬 경계에 대해 오정렬된다. 특히, 요구된 워드의 바이트(a,b,c)는 캐쉬 라인(0)에 저장되나, 바이트(d)는 캐쉬 라인(1)에 저장된 것을 보여준다. 다음으로, 프로세서는 4 바이트의 모든 데이터를 취득하기 위하여 캐쉬로 2개의 액세스를 발생시켜야 한다. 또한, 데이터가 두 개의 독립적인 액세스 동안에 캐쉬로부터 복귀하기 때문에, 프로세스의 구조화 레지스터(architected register)중 하나에 기록되기 전에 재결합(reassemble)되어야 한다.
도 1c는 캐쉬 액세스에 의해 복귀된 오정렬된 데이터를 재결합하기 위한 일반적인 회로의 블록도이다. 회로(300)는 일반적으로 로드 포맷터(formatter)라고 지칭된다. 포맷터는 회로(300)의 다른 구성 요소를 동작시키기 위한 필요 제어 신호(required control signal)를 제공하는 포맷터 제어 로직(302)을 포함한다. 또한 로테이터(rotator, 304), 머지 래치(merge latch, 306) 및 멀티플렉서(multiplexor, 308)가 포맷터(300)에 포함된다. 로테이터(304)는 캐쉬로부터 데이터를 수신하고, 포맷 제어 로직(302)으로부터 수신된 신호에 따라서, 로테이터(304)에서 임의의 요구되는 8 비트 위치로 시트프될 수 있는 8 바이트 블록으로 데이터를 배치한다. 이 경우에, 프로세서가 캐쉬의 라인(1)을 두 번째 액세스하는 동안 바이트(a, b, c)는 로테이터의 가장 좌측 위치로 회전되고 그 다음 데이터를 유지하는 머지 래치(306)로 전달된다. 프로세서가 캐쉬 라인(1)을 액세스할 때, 프로세서는 바이트(d)를 검색하고 검색된 바이트(d)를 왼쪽으로부터 네 번째 바이트 위치로 회전시키는 로테이터(304)로 전달한다. 그 후, 검색된 바이트(d)는 바이트(a, b, c)와 함께 머지 래치(306)로부터 멀티플렉서(308)로 바로 전달된다. 이러한 방법에서, 데이터는 정확하게 재결합되고 프로세서의 구조화 레지스터로 전달된다.
수퍼 스칼라 프로세서는 프로그램 순위를 벗어나서 인스트럭션을 실행시킬 수 있기 때문에 종래의 스칼라 프로세서보다 성능상 유리하다. 이런 방식으로, 하나의 느리게 실행되는 인스트럭션이 계류중인 동안 프로세서의 다른 자원(resource)을 사용하여 실행할 수 있는 후속 인스트럭션(subsequent instruction)이 실행되는 것을 방해하지 않는다.
그러나, 캐쉬 메모리로 오정렬 액세스는 데이터가 무순위의 캐쉬로부터 복귀(return)될 가능성 때문에 수퍼 스칼라 프로세싱에 알맞지 않다. 특히, 다시 상기한 예와 관련하여, 어떤 이유 때문에 첫 번째 로드 인스트럭션 전에 두 번째 로드 인스트럭션이 완료되면, 바이트(d)를 보유한 데이타가 첫 번째로 포맷터로 입력되고 바이트(a,b,c)를 보유한 데이터가 다음으로 입력된다. 이 경우에, 데이터가 재결합될 때, 바이트 순서는 부정확하게 될 것이다. 이러한 문제에 대한 하나의 해결책은 오정렬 캐쉬 액세스 인스트럭션이 추론적으로 실행되지 않도록 하는 것이다. 즉 수퍼 스칼라 프로세서가 캐쉬에 대한 오정렬 액세스가 발생할 것으로 인식할 때, 수퍼 스칼라 프로세서는 오정렬 캐쉬 액세스 인스트럭션 다음에 발생하는 인스트럭션의 발생을 멈추고, 캐쉬 액세스 인스트럭션의 완료되기 전에 발생된 인스트럭션을 기다리는 동안 중지한다. 그 다음, 수퍼 스칼라 프로세서는 순서대로 두 개의 캐쉬 액세스 인스트럭션을 처리한다. 이러한 방식으로, 오정렬 캐쉬 액세스는 확실하게 순서대로 완료된다. 비록 이것이 상기 언급된 문제를 해결할지라도, 역시 프로세서의 성능을 감소한다.
그러므로 이 발명의 목적은 오정렬된 캐쉬 액세스 인스트럭션의 추론적인 실행이 가능한 수퍼 스칼라 프로세서를 제공하는 것이다.
본 발명의 다른 목적과 장점은 다음의 기재에 의해 명확해질 것이다.
도 1a는 정렬된 데이터를 도시하는 캐쉬 메모리(cache memory)의 논리적인 내용을 도시하고,
도 1b는 두 개의 캐쉬 라인에 걸쳐 오정렬된(misaligned) 캐쉬를 갖는 캐쉬 메모리를 도시하고,
도 1c는 캐쉬 메모리로부터 검색된 오정렬된 데이터를 재결합하기 위한 포맷터(formatter)를 도시하는 개략도이고,
도 1d는 본 발명의 실시예에 따른 프로세서의 개략적인 블록도이고,
도 2는 본 발명의 실시예에 따른 오정렬 캐쉬 액세스를 실행하기 위한 회로의 개략도이고,
도 3은 본 발명의 실시예에 따른 첫 번째/마지막 태그(tag)의 동작을 도시하는 테이블이고,
도 4a 내지 도 4b는 본 발명의 실시예에 따른 정렬 캐쉬 액세스와 오정렬 캐쉬 액세스를 각각 예시하고,
도 5는 로드 인스트럭션의 디스페치(dispatch)에 응답하여 발생되는 한 쌍의 원시(primitive) 로드 인스트럭션에 첫 번째와 마지막 태그의 적용을 예시하고,
도 6은 본 발명의 실시예에 따른 미스-큐 테이블(mis-queue table)의 논리적인 내용을 예시한다.
본 발명의 한 실시예에서, 로드(load) 및 저장(store)과 같은, 캐쉬 액세스 인스트럭션은 첫 번째(first), 마지막(final), 또는 오정렬 인스트럭션이 아닌 인스트럭션(not misaligned instruction)과 같이, 각 인스트럭션에 라벨을 붙이는 태그(tag)가 제공된다. 디스페치(dispatch)시에, 인스트럭션이 오정렬 캐쉬 액세스로 인식되면, 로드/저장 유니트 제어 로직에 의해 "첫번째"로 태크될 것이다. 동시에, 로드/저장 유니트 로직에 의해 동작되는 오정렬/비지(Busy) 래치 내에 소정 비트가 설정된다. 필요한 데이터 액세스를 위해 두 번째 캐쉬 액세스 인스트럭션이 디스페치될 때, "마지막"으로 태그된다. 일단, "마지막" 캐쉬 액세스 인스트럭션이 디스페치되면, "첫번째"와 "마지막" 인스트럭션이 완료되기 전까지 더 이상의 오정렬 캐쉬 액세스 인스트럭션은 디스페치되지 않을 것이다. 그러나, 다른 오정렬 캐쉬 액세스 인스트럭션은 실행되고 완료될 수 있다. 이런 방식으로, 프로세서는 첫 번째와 마지막 캐쉬 액세스 인스트럭션이 보류되는 동안에 인스트럭션의 추론적인 실행을 여전히 가능하게 한다.
정렬 인스트럭션(aligned instruction)은 머지 래치(Mergy Latch)를 사용할 필요가 없으므로 첫 번째와 마지막 인스트럭션의 처리를 방해하지 않고 포맷터를 통해 프로세서 레지스터 내로 이동할 것이다. 첫 번째 인스트럭션이 완료될 때, 첫 번째 인스트럭션은 머지 래치에 데이터를 저장하는 포맷터로 전달된다. 다수의 정렬 캐쉬 액세스는 첫 번째 액세스로부터의 데이터가 머지 래치에 저장되는 동안 포맷터를 통해 이동될 것이다. "마지막" 인스트럭션이 완료되고 포맷터로 전달되면, 로드/저장 유니트 제어 로직은 상기 데이터가 머지 래치에 저장된 데이터와 병합(merge)된 것으로 인식한다. 병합이 실행되면 재결합된 데이터는 프로세서 내의 레지스터로 전달된다. 그 다음, 오정렬/비지 래치는 임의의 후속 오정렬 캐쉬 액세스 인스트럭션을 디스페치하도록 하기 위해 소거된다. 단지 하나의 오정렬 캐쉬 액세스 인스트럭션이 소정의 시간동안 프로세서에서 보류되도록 되기 때문에, 머지 래치의 파손 위험은 없다. 첫 번째 캐쉬 액세스 인스트럭션전에 마지막 캐쉬 액세스 인스트럭션이 완료되고 포맷터로 전달되면, 이 데이터는 간단하게 버려진다. 본 발명의 구체적인 실시예에서, 마지막 인스트럭션이 첫 번째 인스트럭션 전에 완료되면 미스-큐 테이블(mis-queue table)은 마지막 인스트럭션을 위해 데이터를 유지하기 위하여 사용된다.
도 1d는 본 발명에 따라서 정보를 처리하기 위한 프로세서 시스템(10)의 블록도이다. 바람직한 실시예에서, 프로세서(10)는 미국 텍사스주 오스틴에 소재한 IBM사의 파워 피씨 프로세서와 같은, 단일 집적 회로 수퍼 스칼라 마이크로프로세서이다. 따라서, 아래에 더 논의되는 것처럼, 프로세서(10)는 여러가지 유니트(unit), 레지스터(register), 버퍼(buffr), 메모리 및 기타 부분을 포함하고, 이러한 것들은 모두 집적 회로에 의해 형성된다. 또한, 바람직한 실시예에서, 프로세서(10)는 감소된 인스트럭션 셋트 계산(Reduced Instruction Set Computing: "RISC") 기술에 따라 동작한다. 도 1d에 도시된 것처럼, 시스템 버스(11)는 프로세서(10)의 버스 인터페이스 유니트(이하, "BIU"라 칭함, 12)에 연결된다. BIU(12)는 프로세서(10)와 시스템 버스(11) 사이의 정보 전송을 제어한다.
BIU(12)는 프로세서(10)의 인스트럭션 캐쉬(14)와 데이터 캐쉬(16)에 연결된다. 인스트럭션 캐쉬(14)는 시퀀서 유니트(sequencer unit, 18)로 인스트럭션을 출력한다. 인스트럭션 캐쉬(14)로부터의 인스트럭션에 응답하여, 시퀀서 유니트(18)는 프로세서(10)의 다른 실행 회로로 인스트럭션을 선택적으로 출력한다.
실행 유니트인 디스페치 유니트(dispatch unit, 46)와 완료 유니트(completion unit, 48)를 포함하는 시퀀서 유니트(18)에 추가하여, 바람직한 실시예에서 프로세서(10)의 실행 회로는 다수의 실행 유니트, 즉 브랜치 유니트(branch unit, 20), 고정 소수점 유니트 A(이하, "FXUA"라 칭함, 22), 고정 소수점 유니트 B(이하, "FXUB"라 칭함, 24), 복소수 고정 소수점 유니트(이하, "CFXU",26), 로드/저장 유니트(이하, "LSU"라 칭함, 28) 및 부동 소수점 유니트(이하, "FPU"라 칭함, 30)를 포함한다. FXUA(22), FXUB(24), CFXU(26) 및 LSU(28)는 범용 구조화 레지스터(general purpose architectural register, 이하, "GPRs"라 칭함, 32)와 고정 소수점 리네임(rename) 버퍼(34)로부터 자신의 소스 오퍼랜드(sourch operand) 정보를 입력받는다. 또한, FXUA(22)와 FXUB(24)는 캐리 비트 레지스터(이하, "CA"라 칭함, 42)로부터 "캐리 비트"를 입력받는다. FXUA(22), FXUB(24), CFXU(26) 및 LSU(28)는 고정 소수점 리네임 버퍼(34) 내의 선택된 엔트리(entry)에 저장하기 위해 자신들의 연산 결과(목적 오퍼랜드 정보(destination operand information))를 출력한다. 또한, CFXU(26)는 특수용 레지스터(special purpose register, 이하, "SPRs"라 칭함, 40)로부터 소스 오퍼랜드 정보(source operand information)를 입력받고, 그리고 SPRs(40)로 목적 오퍼랜드 정보를 출력한다.
FPU(30)는 부동 소수점 구조 레지스터(이하, "FPRs"라 칭함, 36)와 부동 소수점 리네임 버퍼(38)로부터 자신의 소스 오퍼랜드 정보를 입력받는다. FPU(30)는 부동 소수점 리네임 버퍼(38) 내의 선택된 엔트리에 저장하기 위해 자신의 연산 결과(목적 오퍼랜드 정보)를 출력한다.
시퀀서 유니트(18)는 GPRs(32)와 FPRs(36)로 정보를 입력받고 출력한다. 시퀀서 유니트(18)로부터, 브랜치 유니트(20)는 프로세서(10)의 인스트럭션과 현재 상태를 표시하는 신호를 입력받는다. 이런 인스트럭션과 신호에 응답하여, 브랜치 유니트(20)는 프로세서(10)에 의해 실행될 인스트럭션 시퀀스(sequence)를 저장하는 적당한 메모리 어드레스를 표시하는 신호를 (시퀀서 유니트(18)로) 출력한다. 브랜치 유니트(20)로부터의 이런 신호에 응답하여, 시퀀서 유니트(18)는 표시된 인스트럭션 시퀀스를 인스트럭션 캐쉬(14)로부터 입력받는다. 하나 이상의 인스트럭션 시퀀스가 인스트럭션 캐쉬(14)에 저장되지 않는다면, 인스트럭션 캐쉬(14)는 시스템 버스(11)에 연결된 시스템 메모리(39)로부터 (BIU(12)와 시스템 버스(11)를 통해) 저장된 인스트럭션 순서가 없다는 인스트럭션을 입력받는다.
인스트럭션 캐쉬(14)로부터의 인스트럭션 입력에 응답하여, 시퀀서 유니트(18)는 디스페치 유니트(46)를 통해 실행 유니트(20,22,24,26,28 및 30)중 선택된 한 실행 유니트로 인스트럭션을 선택적으로 디스페치한다. 각 실행 유니트는 특정 클래스(particular class)의 인스트럭션 중에서 하나 이상의 인스트럭션을 실행한다. 예를 들면, FXUA(22)와 FXUB(24)는 덧셈(addition), 뺄셈(subtraction), 논리곱(AND), 논리합(OR) 및 배타적 논리합(XOR)과 같은, 소스 오퍼랜드에 대한 고정 소수점 수학 연산(fixed point mathematical operation)의 제1 클래스를 실행한다. CFXU(26)는 고정 소수점 곱셈(multiplication)과 나눗셈(division)과 같은 소스 오퍼랜드에 대한 고정 소수점 연산의 제2 클래스를 실행한다. FPU(30)는 부동 소수점 곱셈 및 나눗셈과 같은, 소스 오퍼랜드에 대한 부동 소수점 연산을 실행한다.
프로세서(10)는 여러 가지 실행 유니트(20, 22, 24, 26, 28 및 30)에서 동시에 다수의 인스트럭션을 처리함으로써 성능이 향상된다. 따라서, 각 인스트럭션은 처리 단계(stage)의 시퀀스로 처리되고, 다른 인스트럭션의 처리 단계와 병행하여 각각 실행될 수 있다. 이러한 기술을 "파이프라인닝(pipelining)"이라고 한다. 바람직한 실시예의 중요한 특징으로, 인스트럭션은 일반적으로 불러오기(fetch), 디코드(decode), 디스페치, 실행(execute), 완료(completion) 및 재기록(writeback)의 여섯 단계로 처리된다.
바람직한 실시예에서, 각 인스트럭션은 인스트럭션 처리의 각 단계를 완료하기 위해 하나의 머신 주기(machine cycle)를 필요로 한다. 그렇지만, 예를 들면 CFXU(26)에 의해 실행되는 복소수 고정 소수점 인스트럭션과 같은 소정 인스트럭션 은 하나 이상의 주기를 필요로 할수도 있다. 따라서, 선행하는 인스트럭션이 완료되기 위해 필요한 시간 변화에 응답하여 특정 인스트럭션 실행 단계와 완료 단계 사이에 가변 지연(variable delay)이 발생할 수도 있다.
로드 인스트럭션에 응답하여, LSU(28)는 데이터 캐쉬(16)로부터 정보를 입력받고 리네임 버퍼(34, 38)중 선택된 리네임 버퍼에 이러한 정보를 복사한다. 입력된 정보가 데이터 캐쉬(16) 내에 저장되지 않는다면, 데이터 캐쉬(16)는 시스템 버스(11)에 연결된 시스템 메모리(39)로부터의 정보를 (BIU(12)와 시스템 버스(11)를 통해) 입력받는다. 더욱이, 데이터 캐쉬(16)는 데이터 캐쉬(16)로부터 시스템 버스(11)에 연결된 시스템 메모리(39)로 이러한 정보를 (BIU(12)와 시스템 버스(11)를 통해) 출력할 수 있다. 저장 인스트럭션에 응답하여, LSU(28)는 GPRs(32)와 FPRs(36)중 선택된 레지스터로부터 정보를 입력받고 데이터 캐쉬(16)나 메모리로 이러한 정보를 복사한다.
예를 들어, FXUA(22), FXUB(24)와 같은 실행 유니트, 리네임 버퍼(34), 및 디스페치 유니트(46) 사이의 상호 작용의 한 예로써, "c, a, d를 더하라"는 인스트럭션이 디스페치 유니트(46)로부터 FXUA(22)로 디스페치된다. 본 기술 분야의 당업자에 의해 잘 이해되는 것처럼, 디스페치 유니트(46)는 오퍼랜드 "a"와 "b"용 태그를 FXUA(22)에게 공급하여 오퍼랜드용 데이터를 검색하는 FXUA(22)에게 알린다. 예를 들면, 여섯 개의 리네임 버퍼를 갖는 시스템에서, 디스페치 유니트(46)는 6 비트 태그(100000)로 리네임 버퍼(1)에 위치한 "a"용의 오퍼랜드를 적절하게 태그할 수 있다. 그 다음 010000의 태그는 오퍼랜드 "b"가 리네임 버퍼(2)에 존재한다는 것을 표시하기 위해 적절하게 사용할 수 있다. FXUA(22)가 GPRs(32)에 기록하지 않기 때문에, 디스페치 유니트(46)는 리네임 버퍼(3)에 배치된 "더하기" 인스트럭션의 결과용의, 001000과 같은, 연산목표를 위한 리네임 버퍼 태그를 사용해야 한다.
도 2를 참조하면, 본 발명의 실시예에 따른 로드 인스트럭션 처리용 회로를 예시하는 개략적인 블록도를 보여준다. 회로(200)는 캐쉬(206)에 데이터를 액세스하기 위해 필요한 유효 어드레스(effective address)를 산출하기 위해 사용되는 가산기(adder,206)와 같은 로직을 포함한다. 물론, 본 발명은 본 기술 분야에 공지된 다수의 메모리 어드레싱 구조에 적합하다. 예시 목적을 위해, 본 발명의 동작은 전형적인 파워 피씨 마이크로 프로세서 구조에 관하여 기술될 것이다. 파워 피씨 구조는 다수의 공개된 문헌에 상세히 설명되어 있고, 특히 IBM 마이크로 일렉트로닉스로부터 입수할 수 있는 간행물 MPRPPCFPE-01인 Power PC Microprocessor Family: the programming Environment에 상세히 설명되어 있으며 이 내용은 본 명세서의 일부를 이룬다. 가산기(202)에 의해 발생된 유효 어드레스는 캐쉬(206)를 물리적으로 액세스하기 위해 필요한 제어 로직을 포함하는 데이터 유니트(204)로 전달된다. 또한 데이터 유니트(204)는 회로(200)가 오정렬 로드 인스트럭션을 현재 처리하고 있는지를 추적하는 오정렬/비지 래치(208)를 포함한다. 본 발명의 이러한 특징은 여기에서 좀더 상세하게 기술될 것이다.
이 경우에, 캐쉬(206)는 캐쉬(206)에서 포맷터(210)로 데이터를 전달하는 64-비트 데이터 라인에 연결된 출력 포트를 갖는다. 포맷터의 설계와 동작은 본 기술 분야에 잘 알려져 있고 여기에서는 본 발명을 예시하기 위해 필요한 정도로만 기술될 것이다. 보여진 실시예에서, 포맷터(210)는 소정의 8 비트 경계를 따라서 64-비트 데이터 라인으로부터 데이터를 재위치(re-position) 또는 "회전"시키기에 적당한 로테이터(212)를 포함한다. 즉, 64-비트 데이터 라인으로부터 수신된 임의 바이트의 데이터는 로테이터(212)에 포함된 더블 워드(double word)내에서 좀더 하위 또는 상위 차수의 위치로 재위치될 것이다. 본 명세서에서 사용된 바와 같이, "더블 워드"란 용어는 데이터의 8 바이트 세그먼트를 가르킬 것이고, "워드"란 용어는 4 바이트 세그먼트를 가르킬 것이다.
로테이터(212)의 출력은 머지 래치(214)와 멀티플렉서(216) 모두에 연결된다. 머지 래치(214)는 단지 오정렬된 데이터 로드에 관련하여 이용된다. 멀티플렉서(216)는 로테이터(212)로부터 데이터를 전달받고, 필요하다면 머지 래치(214)는 리네임 레지스터 파일(218) 내로 데이터를 전달한다. 멀티플렉서(216)는 로테이터(212)와 머지 래치(214)로부터 데이터를 동시에 전달받도록 설계된다. 따라서, 멀티플렉서(216)는 리네임 레지스터 파일(218)로 데이터를 전달하기 전에 오정렬 로드 인스트럭션에 의해 검색된 데이터를 재결합시키기 위해 동작하다.
마지막으로, 종래와 같이, 로드 인스트럭션 완료 후, 완료된 인스트럭션을 위해 리네임 레지스터 파일(218)내의 해당 레지스터로부터의 데이터는 GPR 레지스터 파일(220)내의 대응 레지스터로 전달된다. 물론, 리네임 레지스터(218)와 GPR 레지스터 파일(220)은 물리적으로 분리된 레지스터 파일일 필요는 없으나, 통합된 레지스터 파일일 수 있고 레지스터 내에 저장된 데이터는 레지스터와 관련된 상태 비트(status bit)의 상태에 따라 리네임 데이터 또는 GPR 데이터일 것이라는 것은 당업자라면 용이하게 알 수 있을 것이다.
본 발명의 실시예에 따라서, 로드/저장 유니트(도시되지 않음)가 로드 인스트럭션을 실행할 때, 회로(200)를 통하여 진행되는 것이므로 인스트럭션을 추적하기 위해 사용되는 인스트럭션과 첫 번째/마지막 태그를 관련시킨다. 특정 실시예에서, 첫 번째/마지막 태그는 인스트럭션에 부가되는 2-비트 크기의 데이터 세그먼트이다. 도 3은 본 발명의 한 실시예에 따른 첫 번째/마지막 태그의 동작을 예시한 테이블이다. 이러한 실시예에서, 첫 번째 및 마지막 바이트 모두는 로우(low)로 되지 않는다. 첫 번째 비트가 로우이고 마지막 비트가 하이(high)이면, 로드 인스트럭션은 "마지막"으로 표시되고, 오정렬 인스트럭션에 의해 요구된 캐쉬(206)로의 두 번째 데이터 액세스를 나타낼 것이다. 첫 번째 비트가 하이이고 마지막 비트가 로우이면, 인스트럭션은 "첫번째"로 표시되고, 오정렬 인스트럭션의 캐쉬(206)로의 첫 번째 데이터 액세스를 나타낼 것이다. 첫 번째 및 두 번째 비트가 모두 하이이면, 인스트럭션은 오정렬되지 않고 회로(200)에 의해 일반적으로 진행될 것이다.
본 발명의 동작은 도 4a 및 도 4b와 관련하여 좀더 상세하게 기술될 것이다. 도 4a는 캐쉬 메모리(206)의 논리적인 내용 부분을 도시하는 도이다. 이 경우에, 캐쉬 메모리(206)의 각 라인은 128 바이트 크기이고 더블 워드 어드레싱가능(addressable)이다. 단지 하나의 더블 워드가 캐쉬 라인(400) 내에 보여진다는 것은 이해된다. 이러한 실시예에서, 캐쉬 라인(400)으로부터 워드를 포함하는 바이트(a, b, c)를 액세스하는 것이 요구된다. 데이터는 캐쉬 라인(400)에서 정렬되고, 단일 로드 인스트럭션이 데이터를 검색하기 위해 발생될 것이다.
도 2와 도 4b에 관련하여, 데이터가 캐쉬 라인 경계에 걸리기 때문에 데이터는 오정렬된다. 그러나, 데이터가 더블 워드 경계에서 정렬되지 않는다면 데이터는 캐쉬 라인내에서 역시 오정렬될 수 있다는 것은 이해될 것이다. 캐쉬의 각 액세스가 파워 피씨 구조에 따라 더블 워드로 복귀한다는 것도 또한 이해될 것이다. 바이트(a, b, c, d)를 로드하기 위해 시도되는 인스트럭션이 디스페치되면, 캐쉬(206)로 두 개의 액세스가 필요하다는 것이 보여진다. 이 때 하나의 액세스는 캐쉬 라인(400)으로의 액세스이고 다른 액세스는 캐쉬 라인(402)으로의 액세스이다. 이 경우에, 데이터 유니트(204)의 로직은 인스트럭션에 의해 요구된 데이터가 오정렬된 것으로 인식한다. 차례로, 로직은 데이터를 취득하기 위해 필요한 두 개의 "원시(primitive)" 인스트럭션(LD1, LD2)을 발생한다. 프리미티브 인스트럭션은 필요한 캐쉬 액세스를 실행하기 위해 LSU에 의해 단지 내부적으로 이용된다. 도 5에 도시된 것처럼 LD1은 "첫번째"로 표시되고 LD2는 "마지막"으로 표시될 것이다. 동시에, 데이터 유니트(204)는 오정렬/비지 래치(208)에 한 비트를 유효하게 한다. 이것은 더 이상의 어떤 오정렬 인스트럭션의 발생을 중지(halt)하기 위한 디스페치 유니트 때문이다. 그러나, 정렬 로드 인스트럭션을 포함하는 다른 인스트럭션은 회로(200)에 의해 여전히 디스페치되고 처리될 것이다. 이것은 정렬 인스트럭션이 머지 래치(214)의 사용을 필요로하지 않기 때문이다. 그래서, 오정렬 인스트럭션이 첫 번째 캐쉬 액세스로부터의 데이터를 머지 래치(214)로 이전부터 기록해왔었고, 두 번째 액세스에 의해 검색되는 데이터를 기다리고 있었다면, 정렬 인스트럭션은 머지 래치(214)에 저장된 데이터를 교란시키지 않고 여전히 멀티플렉서(216)를 통해 로테이터(212)에서 리네임으로 상기 데이터를 전달할 수 있을 것이다. 다른 실시예에서, 본 발명의 이러한 특징이 달성되므로 다수의 머지 래치가 제공되어 다수의 오정렬 인스트럭션이 프로세서에 동시에 계류되고 있도록 한다. 물론, 각 오정렬 인스트럭션을 위한 첫 번째와 마지막 태그를 추적하기 위한 수단이 유사하게 확장될 수 있을 것이다.
LD1으로부터의 데이터가 포맷터(210)에 의해 수신될 때, 데이터는 로테이터(212)에서 필요한 만큼 회전되고, 마지막 로드 인스트럭션으로부터의 데이터를 대기하면서 저장되는 머지 래치(214)에 배치된다. 이전에 언급된 것처럼, 정렬 인스트럭션은 상기 정렬 인스트럭션의 데이터를 처리하기 위해 포맷터(210)를 계속 사용할 수 있다. LD2로부터의 데이터가 포맷터(210)에 의해 수신될 때, 데이터는 로테이터(212)에서 회전되고 멀티플렉서(216)로 전달된다. 이 때에, 머지 래치(214)로부터의 데이터는 멀티플렉서(216)로 역시 전달되고, 멀티 플렉서(216)에서 상기 데이터가 바이트(a, b, c, d)로 구성된 필요 워드로 재결합된다. 그 다음 데이터는 종래의 수퍼 스칼라 기술에 따라 리네임 레지스터 파일(218)과 GPR(220)로 전달된다.
프로세서가 무순위 처리 인스트럭션(out of order processing instruction)을 제공하기 때문에, 마지막 로드 인스트럭션으로부터의 데이터가 첫 번째 인스트럭션으로부터의 데이터 전에 포맷터(210)로 전송되는 것이 가능하다. 이 경우에, 포맷터(210) 내의 로직은 머지 래치(214)가 어떤 유효한(valid) 데이터를 포함하지 않으므로, 마지막 로드 인스트럭션에 의해 포맷터(210)로 전송된 데이터를 버리는 것으로 인식한다. 첫 번째 인스트럭션으로부터의 데이터가 머지 래치 안에 저장된 후, 마지막 인스트럭션으로부터의 데이터는 포맷터로 다시 전달된다. 물론, 프로세서는 원래의 오정렬 로드 인스트럭션을 재 발생시키기(re-issue)위해 디스페치 유니트를 필요로 하지 않는 상황에서 마지막 인스트럭션으로부터 데이터를 재전송(resending)하기 위한 어떤 수단을 가지고 있어야 한다. 이것을 실현하기 위한 많은 적당한 방식은 당업자에 의해 실현될 것이다. 예를 들면, 본 발명의 한 실시예에서, 첫 번째 인스트럭션으로부터의 데이터가 머지 래치에서 존재하지 않는다면 "미스-큐(mis-queue)" 테이블은 마지막 인스트럭션으로부터의 데이터를 재전송하기 위해 사용된다. 이것은 도 6과 관련하여 좀더 상세하게 기술될 것이다.
도 6은 본 발명의 실시예에 따른 미스-큐 데이터의 논리적인 내용을 도시하는 블록도이다. 도시된 것처럼, 미스-큐 테이블의 각 엔트리는 인스트럭션의 실제 어드레스뿐만 아니라 인스트럭션을 위한 첫 번째/마지막 태그를 포함한다. 유효 비트(validity bit), 상태 비트 등과 같은 다른 정보는 설계시의 선택 사항으로 제공될 수 있다. 본 발명의 한 실시예에서, 인스트럭션이 디스페치되는 각각의 시간에 미스-큐 테이블(600) 내에 엔트리가 발생된다. 인스트럭션이 데이터 캐쉬에 히트(hit)하면, 다음 사이클에서 상기 인스트럭션을 위한 엔트리가 미스-큐 테이블(600)에서 제거된다. 그러나, 인스트럭션이 데이터 캐쉬에 미스(miss)하면, 인스트럭션의 실제 어드레스와 다른 정보는 미스-큐 테이블(600) 내에 존재한다. 프로세서는 계속해서 미스-큐 테이블의 엔트리를 스캔하고, 각 주기에서 프로세서는 테이블 내에 저장된 실제 어드레스에서 캐쉬를 액세스하기 위해 시도한다. 실제로, 데이터는 미스-큐 테이블 내의 각 엔트리를 위해 캐쉬 내에서 이용할 수 있고 레지스터 파일로 전달된다.
본 발명의 한 실시예에 따라서, 첫 번째 액세스로부터의 데이터 전에 마지막 액세스로부터의 데이터가 포맷터로 전달되는 것은 캐쉬로의 도달 실패와 유사하게 처리된다. 그래서, 각 주기에서, 프로세서는 미스-큐 테이블(600)을 스캔하고, 미스-큐 테이블(600) 내에 저장된 마지막 인스트럭션의 어드레스를 위한 캐쉬 데이터를 액세스하고, 포맷터로 상기 캐쉬 데이터를 전달한다. 포맷터는 캐쉬 제어 로직으로부터 수신된 유효 신호(validity signal)에 응답한다. 첫 번째 인스트럭션으로부터의 데이터가 이용되기 전에 캐쉬가 포맷터로 마지막 인스트럭션을 위한 데이터를 전달하면, 상기 데이터를 위한 유효 신호는 유효하지 않는다. 따라서, 포맷터는 상기 데이터를 버릴 것이고 마지막 인스트럭션을 위한 엔트리는 미스-큐 테이블(600) 내에 존재할 것이다. 첫 번째 인스트럭션으로부터의 데이터가 이용되고 포맷터로 전달된 후, 다음 주기에서 마지막 인스트럭션으로부터의 데이터는 포맷터로 다시 전달되나, 이 때 유효 신호는 유효하다. 그 다음 포맷터는 첫 번째와 마지막 인스트럭션으로부터의 데이터를 처리하고 미스-큐 테이블(600)로부터 첫 번째와 마지막 엔트리를 제거하기 위해 완료 테이블 로직으로 되돌아가는 신호를 제공한다.
마지막 액세스가 캐쉬로부터 상기 마지막 액세스 데이터를 검색한 후에, 로드 인스트럭션은 완료를 위해 준비중이다. 완료되면, 오정렬/비지 래치(208) 내의 비트는 소거되고 로드/저장 유니트는 다음의 오정렬 인스트럭션을 발생할 것이다.
본 발명의 다른 실시예에 따라서, 마지막 데이터가 첫 번째 데이터 전에 수신된다면 포맷터는 마지막 데이터가 머지 래치에 저장되는 것처럼 설계될 수도 있다. 첫 번째 데이터가 수신될 때, 상기 데이터는 마지막 데이터와 재결합될 것이고 리네임 레지스터 파일로 전송될 것이다. 포맷터가 이러한 방식으로 실행된다면, 미스-큐 테이블(600)의 사용은 피할 수 있을 것이다.
비록 본 발명이 상기한 실시예에 관해서만 기술되었지만, 본 발명의 범위와 본질을 벗어나지 않은 범위내에서 당업자에게 다양하게 변경될 수 있다. 예를 들면 다수의 로드/저장 유니트는 본 발명의 다른 실시예에 따라서 병렬로 인스트럭션을 처리하도록 사용될 수 있다.

Claims (10)

  1. 데이터 캐쉬와 레지스터 파일을 갖는 수퍼 스칼라 프로세서에서 로드 인스트럭션을 처리하기 위한 방법에 있어서,
    a) 상기 캐쉬에 오정렬된 데이터의 블록을 액세스하는 오정렬 로드 인스트럭션을 디스페치하는 단계;
    b) 정렬 인스트럭션을 계속해서 디스페치하는 동안:
    i) 오정렬 로드 인스트럭션에 응답하여 캐쉬로의 첫 번째 액세스와 마지막 액세스를 발생시키는 단계;
    ii) 상기 마지막 액세스로부터의 데이터가 이용 가능할 때까지 상기 첫 번째 액세스로부터 검색된 데이터를 저장하는 단계;
    iii) 상기 로드 인스트럭션에 의해 요구된 순서로 상기 첫 번째 액세스와 마지막 액세스로부터의 데이터를 재결합하는 단계; 및
    iv) 레지스터 파일로 재결합된 데이터를 저장하는 단계
    를 포함하는 로드 인스트럭션 처리 방법.
  2. 제1항에 있어서,
    상기 첫 번째 액세스와 마지막 액세스를 발생시키는 단계는 첫 번째 또는 마지막 액세스인지를 표시하는 복수의 비트를 액세스와 관련시키는 로드 인스트럭션 처리 방법.
  3. 제1항에 있어서,
    상기 프로세서가 다음 오정렬 인스트럭션의 디스페치를 중지하도록 하는 오정렬 로드 인스트럭션의 디스페치에 응답하는 신호를 유효하게 하는 단계를 추가로 포함하는 로드 인스트럭션 처리 방법.
  4. 제3항에 있어서,
    프로세서가 오정렬 인스트럭션의 디스페치를 재기하도록 하는 오정렬 로드 인스트럭션의 완료에 응답하는 신호를 유효하게 하는 단계를 추가로 포함하는 로드 인스트럭션 처리 방법.
  5. 데이터 캐쉬와 레지스터 파일을 갖는 수퍼 스칼라 프로세서에서 로드 인스트럭션을 처리하기 위한 회로에 있어서,
    a) 인스트럭션을 디스페치하기 위한 수단;
    b) 캐쉬에 오정렬된 데이터 블록을 액세스하는 오정렬 로드 인스트럭션의 디스페치를 감지하기 위한 수단;
    c) 후속 정렬 인스트럭션이 디스페치되는 동안 오정렬 로드 인스트럭션이 감지될 때 후속 오정렬 로드 인스트럭션의 디스페치를 중지하기 위한 수단;
    d) 상기 오정렬 로드 인스트럭션에 응답하여 캐쉬로 첫 번째 액세스와 마지막 액세스를 발생시키기 위한 수단;
    e) 상기 마지막 액세스로부터의 데이터가 이용 가능할 때까지 상기 첫 번째 액세스로부터 검색된 데이터를 저장하기 위한 수단;
    f) 상기 로드 인스트럭션에 의해 요구된 순서로 상기 첫 번째 액세스와 마지막 액세스로부터의 데이터를 재결합하기 위한 수단; 및
    g) 레지스터 파일로 재결합된 데이터를 저장하기 위한 수단
    을 포함하는 로드 인스트럭션 처리 회로.
  6. 제5항에 있어서,
    상기 후속 오정렬 로드 인스트럭션의 디스페치를 중지하기 위한 수단은 상기 오정렬 인스트럭션의 디스페치에 응답하여 유효하게 되고 상기 오정렬 인스트럭션이 완료될 때 유효하지 않은 비트를 갖는 래치를 포함하는 로드 인스트럭션 처리 회로.
  7. 제5항에 있어서,
    상기 첫 번째 액세스와 마지막 액세스를 발생시키는 위한 수단은 첫 번째 액세스와 마지막 액세스와 관련되는 태그(tag)를 발생시키기 위한 로직을 포함하는 로드 인스트럭션 처리 회로.
  8. 제7항에 있어서,
    상기 태그는 대응하는 액세스가 첫 번째 액세스인지 마지막 액세스인지에 응답하여 유효하게 되는 다수의 비트를 포함하는 로드 인스트럭션 처리 회로.
  9. 제5항에 있어서,
    상기 데이터를 재결합하기 위한 수단은 두 번째 액세스로부터의 데이터가 이용 가능할 때까지 첫 번째 액세스로부터의 데이터를 저장하기 위한 래치를 포함하는 로드 인스트럭션 처리 회로.
  10. 제5항에 있어서,
    상기 데이터를 재결합하기 위한 수단은 첫 번째 액세스로부터의 데이터가 이용 가능할 때까지 두 번째 액세스로부터의 데이터를 저장하기 위한 래치를 포함하는 로드 인스트럭션 회로.
KR1019990001065A 1998-02-10 1999-01-15 고성능의 추론적인 오정렬 로드 연산 KR100335745B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/021,133 1998-02-10
US9/021,133 1998-02-10
US09/021,133 US6112297A (en) 1998-02-10 1998-02-10 Apparatus and method for processing misaligned load instructions in a processor supporting out of order execution

Publications (2)

Publication Number Publication Date
KR19990072271A true KR19990072271A (ko) 1999-09-27
KR100335745B1 KR100335745B1 (ko) 2002-05-08

Family

ID=21802524

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990001065A KR100335745B1 (ko) 1998-02-10 1999-01-15 고성능의 추론적인 오정렬 로드 연산

Country Status (7)

Country Link
US (1) US6112297A (ko)
EP (1) EP0936538A2 (ko)
JP (1) JP3151444B2 (ko)
KR (1) KR100335745B1 (ko)
CN (1) CN1161689C (ko)
CA (1) CA2260308C (ko)
TW (1) TW440794B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100463121B1 (ko) * 2000-06-30 2004-12-23 아나로그 디바이시즈 인코포레이티드 정렬된 simd용 범용 레지스터 파일 구조

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6230238B1 (en) * 1999-03-02 2001-05-08 Motorola, Inc. Method and apparatus for accessing misaligned data from memory in an efficient manner
US6915385B1 (en) * 1999-07-30 2005-07-05 International Business Machines Corporation Apparatus for unaligned cache reads and methods therefor
US6289428B1 (en) * 1999-08-03 2001-09-11 International Business Machines Corporation Superscaler processor and method for efficiently recovering from misaligned data addresses
US6820195B1 (en) * 1999-10-01 2004-11-16 Hitachi, Ltd. Aligning load/store data with big/little endian determined rotation distance control
US6728865B1 (en) * 1999-10-20 2004-04-27 Transmeta Corporation Pipeline replay support for unaligned memory operations
US6604188B1 (en) 1999-10-20 2003-08-05 Transmeta Corporation Pipeline replay support for multi-cycle operations wherein all VLIW instructions are flushed upon detection of a multi-cycle atom operation in a VLIW instruction
US6704854B1 (en) * 1999-10-25 2004-03-09 Advanced Micro Devices, Inc. Determination of execution resource allocation based on concurrently executable misaligned memory operations
US6615300B1 (en) 2000-06-19 2003-09-02 Transmeta Corporation Fast look-up of indirect branch destination in a dynamic translation system
US7370184B2 (en) * 2001-08-20 2008-05-06 The United States Of America As Represented By The Secretary Of The Navy Shifter for alignment with bit formatter gating bits from shifted operand, shifted carry operand and most significant bit
US6721866B2 (en) * 2001-12-21 2004-04-13 Intel Corporation Unaligned memory operands
EP1658560B1 (en) * 2003-08-26 2009-06-10 International Business Machines Corporation Processor with demand-driven clock throttling for power reduction
US7398334B1 (en) * 2004-03-12 2008-07-08 Xilinx, Inc. Circuit for and method of realigning data
US20060155961A1 (en) * 2005-01-06 2006-07-13 International Business Machines Corporation Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
JP4837305B2 (ja) * 2005-05-10 2011-12-14 ルネサスエレクトロニクス株式会社 マイクロプロセッサ及びマイクロプロセッサの制御方法
US8185880B2 (en) * 2007-10-04 2012-05-22 International Business Machines Corporation Optimizing heap memory usage
JP5395383B2 (ja) * 2008-08-21 2014-01-22 株式会社東芝 パイプライン演算プロセッサを備える制御システム
JP2010157130A (ja) * 2008-12-27 2010-07-15 Toshiba Corp メモリシステム
JP5380102B2 (ja) * 2009-02-16 2014-01-08 株式会社東芝 マイクロプロセッサ
US8086801B2 (en) * 2009-04-08 2011-12-27 International Business Machines Corporation Loading data to vector renamed register from across multiple cache lines
US8127078B2 (en) * 2009-10-02 2012-02-28 International Business Machines Corporation High performance unaligned cache access
US20120246407A1 (en) * 2011-03-21 2012-09-27 Hasenplaugh William C Method and system to improve unaligned cache memory accesses
US8688962B2 (en) * 2011-04-01 2014-04-01 Intel Corporation Gather cache architecture
CN105446777B (zh) * 2015-11-18 2019-06-04 上海兆芯集成电路有限公司 高速缓存行的非对齐加载指令的推测并行执行方法
CN107066238A (zh) * 2017-04-18 2017-08-18 上海兆芯集成电路有限公司 执行高速缓存行未对齐加载指令的系统和方法
US11755324B2 (en) * 2021-08-31 2023-09-12 International Business Machines Corporation Gather buffer management for unaligned and gather load operations

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS548937A (en) * 1977-06-22 1979-01-23 Nec Corp Buffer memory unit
US4287561A (en) * 1978-03-16 1981-09-01 International Business Machines Corporation Address formulation interlock mechanism
US4814976C1 (en) * 1986-12-23 2002-06-04 Mips Tech Inc Risc computer with unaligned reference handling and method for the same
JP3644959B2 (ja) * 1992-09-29 2005-05-11 セイコーエプソン株式会社 マイクロプロセッサシステム
US5577200A (en) * 1994-02-28 1996-11-19 Intel Corporation Method and apparatus for loading and storing misaligned data on an out-of-order execution computer system
JPH09114733A (ja) * 1995-10-17 1997-05-02 Nec Corp キャッシュ記憶装置における非整列データ転送機構
US5802556A (en) * 1996-07-16 1998-09-01 International Business Machines Corporation Method and apparatus for correcting misaligned instruction data
JP3047170B2 (ja) * 1997-10-11 2000-05-29 好高 青山 供給ロッド式の部品供給装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100463121B1 (ko) * 2000-06-30 2004-12-23 아나로그 디바이시즈 인코포레이티드 정렬된 simd용 범용 레지스터 파일 구조

Also Published As

Publication number Publication date
KR100335745B1 (ko) 2002-05-08
JPH11272464A (ja) 1999-10-08
CN1161689C (zh) 2004-08-11
CA2260308C (en) 2001-10-09
CN1226700A (zh) 1999-08-25
US6112297A (en) 2000-08-29
EP0936538A2 (en) 1999-08-18
TW440794B (en) 2001-06-16
CA2260308A1 (en) 1999-08-10
JP3151444B2 (ja) 2001-04-03

Similar Documents

Publication Publication Date Title
KR100335745B1 (ko) 고성능의 추론적인 오정렬 로드 연산
US6065103A (en) Speculative store buffer
EP0380859B1 (en) Method of preprocessing multiple instructions
US5471598A (en) Data dependency detection and handling in a microprocessor with write buffer
US5577200A (en) Method and apparatus for loading and storing misaligned data on an out-of-order execution computer system
JP3588755B2 (ja) コンピュータシステム
US6321326B1 (en) Prefetch instruction specifying destination functional unit and read/write access mode
US5845323A (en) Way prediction structure for predicting the way of a cache in which an access hits, thereby speeding cache access time
US6493819B1 (en) Merging narrow register for resolution of data dependencies when updating a portion of a register in a microprocessor
US20070050592A1 (en) Method and apparatus for accessing misaligned data streams
JP2002525742A (ja) 記憶からロードへの転送のための機構
JP2003514274A (ja) 接近して結合される多重プロセッサのための高速マルチスレッディング
US5835949A (en) Method of identifying and self-modifying code
US6542986B1 (en) Resolving dependencies among concurrently dispatched instructions in a superscalar microprocessor
JP3159435B2 (ja) ロード/ロード検出及びリオーダー方法及び装置
US6192461B1 (en) Method and apparatus for facilitating multiple storage instruction completions in a superscalar processor during a single clock cycle
US6035394A (en) System for providing high performance speculative processing of complex load/store instructions by generating primitive instructions in the load/store unit and sequencer in parallel
US6192462B1 (en) Superscalar microprocessor including a load/store unit, decode units and a reorder buffer to detect dependencies between access to a stack cache and a data cache
US6477635B1 (en) Data processing system including load/store unit having a real address tag array and method for correcting effective address aliasing
US6405303B1 (en) Massively parallel decoding and execution of variable-length instructions
US5787474A (en) Dependency checking structure for a pair of caches which are accessed from different pipeline stages of an instruction processing pipeline
US5802340A (en) Method and system of executing speculative store instructions in a parallel processing computer system
US5956503A (en) Method and system for front-end and back-end gathering of store instructions within a data-processing system
US5841999A (en) Information handling system having a register remap structure using a content addressable table
US6079002A (en) Dynamic expansion of execution pipeline stages

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
FPAY Annual fee payment

Payment date: 20060310

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee