KR20080015017A - 캐시 라인 경계를 가로지르는 명령에서의 캐시 실패 처리 - Google Patents

캐시 라인 경계를 가로지르는 명령에서의 캐시 실패 처리 Download PDF

Info

Publication number
KR20080015017A
KR20080015017A KR1020077029640A KR20077029640A KR20080015017A KR 20080015017 A KR20080015017 A KR 20080015017A KR 1020077029640 A KR1020077029640 A KR 1020077029640A KR 20077029640 A KR20077029640 A KR 20077029640A KR 20080015017 A KR20080015017 A KR 20080015017A
Authority
KR
South Korea
Prior art keywords
line
instruction
cache
patch
data
Prior art date
Application number
KR1020077029640A
Other languages
English (en)
Other versions
KR100974023B1 (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 KR20080015017A publication Critical patent/KR20080015017A/ko
Application granted granted Critical
Publication of KR100974023B1 publication Critical patent/KR100974023B1/ko

Links

Images

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
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0886Variable-length word access
    • 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/30047Prefetch instructions; cache control instructions
    • 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/30181Instruction operation extension or modification
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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 or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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 or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/655Same page detection

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

프로세서의 패치 섹션은 명령 캐시 및 명령들을 취득하는 여러 스테이지의 파이프라인을 포함한다. 명령들은 캐시 라인 경계를 가로지를 수도 있다. 파이프라인 스테이지들은 2개의 어드레스를 처리하여 경계를 가로지르는 완전한 명령을 복원한다. 이러한 처리중에, 명령의 제 2 부분이 캐시에 없다면, 제 1 라인에 대한 패치는 무효화되고 리사이클된다. 이러한 제 1 통과중에, 명령의 제 2 부분에 대한 어드레스의 처리는 해당 데이터의 어떤 부분도 프로세서의 다음 스테이지로 전달하지 않고 상위 레벨 메모리로부터 캐시로 명령 데이터를 로딩하기 위한 사전 패치 요청으로서 취급된다. 제 1 라인 어드레스가 패치 스테이지를 다시 통과할 때, 제 2 라인 어드레스는 정상적인 순서로 이어지고, 명령의 두 부분은 캐시로부터 패치되어 정상적인 방식으로 조합될 수 있다.

Description

캐시 라인 경계를 가로지르는 명령에서의 캐시 실패 처리{HANDLING CACHE MISS IN AN INSTRUCTION CROSSING A CACHE LINE BOUNDARY}
본 발명은 프로세서가 명령의 패치(fetch)를 시도하고 있는 캐시에 명령의 제 2 부분이 아직 없는 경우에(캐시 실패) 특히 캐시 라인 경계를 가로지르는 명령의 패치를 효율적으로 처리하는 기술 및 프로세서 구조에 관한 것이다.
최신 마이크로프로세서 및 다른 프로그래밍 가능 프로세서 회로는 메모리의 계층 구조를 이용하여 명령을 저장하고 공급한다. 일반적인 계층 구조는 예를 들어 프로세서 칩에 프로세서의 코어에 비교적 가까운 명령 캐시 또는 L1 캐시를 포함한다. 명령과 데이터를 모두 저장하는 다소 더 먼 또는 L2 캐시로부터 L1 명령 캐시로 명령이 로딩된다. 하나 또는 두 캐시는 메인 메모리로부터 명령에 의해 로딩되고, 메인 메모리는 프로세서를 포함하는 장치의 디스크 드라이브와 같이 더 멀리 떨어진 소스들로부터 로딩될 수도 있다. 캐시 메모리는 성능을 향상시킨다. 프로세서 코어에 대한 근접성 때문에, 예를 들어 L1 캐시로부터의 명령 패치는 비교적 빠르다.
많은 구현에서, 명령 캐시의 라인은 다수의 명령을 수용한다. 모든 명령에 대해 명령당 비트 수가 일정하다면, 캐시 라인은 이러한 명령을 정수로 수용할 수 있는 크기로 만들어질 수 있다. 예를 들어, 각 명령이 32 비트라면, 256 비트 캐시 라인이 이러한 명령을 8개 수용하게 되고, 라인에 저장되는 첫 번째와 마지막 명령의 경계는 캐시 라인의 경계와 정합 또는 정렬된다. 그러나 프로세서가 서로 다른 길이의 명령들, 예를 들어 32 비트 명령과 16 비트 명령을 취급한다면, 소정의 캐시 라인의 명령들은 해당 라인의 경계와 정렬되지 않을 수도 있다. 프로세서 구조가 명령이 두 캐시 라인을 오버랩하지 않을 것을 요구한다면, 어느 정도의 낭비가 있을 것이다. 그러나 많은 구조는 이러한 캐시 제약을 부과하지 않는다. 나중의 경우에, 한 라인에 일부를 저장하고 다른 라인에 나머지를 저장한 명령, 예를 들어 캐시의 한 라인의 끝에 16 비트를 갖고 다음 캐시 라인의 시작에 다른 16 비트를 저장한 32 비트 명령의 판독시 문제가 발생한다.
최신 프로그래밍 가능 프로세서는 흔히 실행 속도를 개선하기 위해 파이프라인 처리 구조에 의존한다. 파이프라인 프로세서는 각 명령이 파이프라인을 통과하여 이동할 때 각 명령을 순차적으로 처리하는 다수의 처리 스테이지를 포함한다. 물론, 한 스테이지가 명령을 처리하고 있는 동안, 파이프라인을 따라 다른 스테이지들이 다른 명령들을 동시에 처리하고 있다. 파이프라인의 각 스테이지는 각 프로그램 명령의 전체 처리에 필요한 다른 기능을 수행한다. 순서 및/또는 기능은 약간 다를 수도 있지만, 통산의 단순한 파이프라인은 패치 스테이지, 명령 디코딩 스테이지, 메모리 액세스 또는 판독 스테이지, 명령 실행 스테이지 및 결과 기록 스테이지를 포함한다. 더 진보한 프로세서 설계는 이들 스테이지의 일부 또는 전부를 이들 기능의 하위 부분들을 수행하는 여러 개별 스테이지로 분해한다. 수퍼 스칼라 설계는 기능들을 더 분해하고 그리고/또는 중복 기능들을 제공하여 비슷한 깊이의 병렬 파이프라인에서 동작을 수행한다.
패치 스테이지는 계층적 메모리 시스템으로부터 명령을 취득하는 파이프라인 프로세서의 일부이다. 많은 파이프라인 설계에서, 패치 동작은 2개 이상의 스테이지로 분해된다. 이들 스테이지 중 한 스테이지는 L1 캐시로부터 패치될 때 명령들을 수집하고 상위 레벨 메모리와 통신하여 L1 캐시에서 발견되지 않은 명령 데이터를 얻는다.
명령들의 경계가 캐시 라인 경계를 가로지르는 패치 동작에서 문제가 발생할 수 있으며, 원하는 명령의 일부는 L1 캐시에 아직 제시되지 않는다. 예를 들어, L1 캐시로부터 패치된 명령들을 수집하는 스테이지가 명령의 제 1 부분을 수신한다면, L1 캐시에서 명령이 발견되지 않았기 때문에 상위 레벨 메모리들과 통신하지 않을 것이다. 마찬가지로, 해당 스테이지가 상위 레벨 메모리로부터 제 1 부분을 포함하는 라인을 이미 얻었다면, 명령의 다른 부분을 포함하는 라인에 대한 제 2 요청을 시작하지 않을 것이다. 대신, 이전 스테이지에 의한 다음 캐시 라인의 처리로부터 명령의 나머지 수신을 기다린다. 그러나 이전 스테이지가 원하는 명령의 나머지가 L1 캐시의 적절한 라인에 있지 않음을 간파한다면(실패), 명령의 나머지 부분을 제공하지 않고, 상위 레벨 메모리에 액세스하여 명령의 없는 부분을 얻는 기능을 갖지 않는다. 보통은, 실패의 경우에 이 스테이지는 다음 스테이지로 어드레스를 떨어뜨려 상위 레벨 메모리로부터의 데이터를 요청하지만, 그 다음 스테이지는 이전 스테이지로부터 오는 분할된 명령의 제 2 부분을 기다리고 있다. 어떤 극단적인 경우에, 패치 처리는 어떤 스테이지도 요청할 수 없는 명령의 일부를 기다리는 어떤 기간 동안 폐쇄할 수도 있다.
상기한 문제를 피하기 위해, 파이프라인의 패치 섹션에서 다른 메모리 자원들로부터의 명령을 요청하게 하는 것이 가능할 수도 있다. 그러나 이러한 해법은 패치 스테이지의 구성, 다른 메모리 자원과의 패치 스테이지 상호 접속, 및 패치 스테이지로 그리고 패치 스테이지를 통한 명령들의 플로(flow) 관리에 복잡도를 부가한다. 고성능 프로세서 설계를 위해, 가능한 한 적은 공간으로부터 상위 레벨 메모리 자원으로 요청을 하는 것이 바람직한데, 이는 예를 들어 이러한 각 요청은 요청된 데이터의 리턴을 기다리는 동안 다른 처리를 지연시키기 때문이다. 그러므로 명령들이 캐시 라인 경계를 가로지를 수 있는 경우에 패치 명령들의 개선을 위한 추가 공간이 있다.
본원의 교지는 명령이 캐시 라인 경계를 가로지르는 경우에 캐시 실패의 보다 효율적인 처리를 제공한다. 본래, 명령의 제 1 부분에 대한 캐시 라인에 대응하는 어드레스는 캐시 라인으로부터의 명령의 임의의 관련 제 1 부분이 파이프라인의 더 뒤의 스테이지들로 떨어지지 않고 파이프라인의 패치 부분의 헤드로 리사이클(recycle)된다. 명령의 제 2 부분에 대한 라인에 대응하는 어드레스, 즉 캐시 실패로 끝난 어드레스는 사전 패치 요청으로서 취급된다. 실패가 있기 때문에, 프로세서는 필요한 명령 데이터를 명령 캐시로 로딩하기 시작하지만, 이 데이터는 이러한 패치 스테이지의 통과시 파이프라인의 더 뒤의 스테이지로 떨어지지 않는다. 제 1 라인 어드레스가 패치 스테이지를 또 통과하고 제 2 라인 어드레스가 정상 시퀀스로 이어질 때, 명령의 모든 부분이 이용 가능하고 정상적인 방식으로 패치되고 조합될 수 있다.
그러므로 본 교지의 형태들은 프로그래밍 가능한 프로세서에서의 실행을 위해 메모리로부터 명령을 패치하는 방법을 포함하며, 여기서 명령들은 라인 경계를 가로지를 수 있다. 이러한 방법의 예는 패치되는 명령이 명령 라인들 간의 경계를 가로지르는 것을 검출하는 단계를 포함할 수 있다. 경계를 가로지르는 명령의 제 1 부분을 포함하는 명령 데이터의 제 1 라인 패치시, 경계를 가로지르는 명령의 제 2 부분이 캐시 메모리에 있는지 여부에 관한 결정이 이루어진다. 캐시 메모리에 없다면, 명령 데이터의 제 1 라인의 패치는 데이터의 제 1 라인으로부터 임의의 명령의 출력 없이 리사이클된다. 상기 방법은 명령 데이터의 제 2 라인을 사전 패치하는 단계는 포함하며, 명령 데이터의 제 2 라인은 명령의 결여 부분을 포함한다. 제 1 라인에 대한 패치를 리사이클한 다음, 처리는 명령 데이터의 제 1 라인의 패치 및 명령 데이터의 제 2 라인의 패치를 수반한다. 명령 데이터의 패치된 제 1 및 제 2 라인으로부터의 부분들은 경계를 가로지르는 명령을 출력하도록 조합된다.
제 1 라인에 관련된 제 2 패치 전에 시작한 나중의 패치가 있다면, 즉 제 2 라인에 대한 리사이클된 패치와 사전 패치 사이의 진행중에 임의의 다른 패치 동작이 있다면, 패치 파이프라인으로부터 이러한 임의의 개입 패치 처리가 일어난다. 제 1 라인에 관한 패치가 리사이클되면, 최초 통과 동안의 패치로부터 발생한 데이터는 무효화되어 패치 섹션에서 어떤 데이터도 떨어지지 않는다.
본 교지의 다른 형태들은 파이프라인 프로세서와 같은 프로그래밍 가능 프로세서를 통해 처리하는 명령들을 패치하기 위한 패치 섹션 또는 시스템을 포함한다. 예시에서, 이러한 패치 섹션은 명령 캐시 및 어드레스를 순차적으로 처리하는 적어도 하나의 처리 스테이지를 포함한다. 각 어드레스에 대해, 처리는 각각의 어드레스에 대응하는 명령 또는 그 일부를 포함할 수 있는 명령 캐시에서 메모리의 라인을 식별한다. 처리는 또한 식별된 라인으로부터 데이터를 읽는다. 해당 명령에 대한 제 2 어드레스에 대응하는 캐시의 라인들 및 라인 간의 경계를 가로지르는 명령이 처음에 경계를 가로지르는 명령의 일부를 포함하지 않는 경우에, 상위 레벨 메모리 자원으로부터 명령 캐시로 명령 데이터 라인의 로딩을 가능하게 하기 위해, 제 1 명령 캐시 처리 스테이지에 대한 제 1 어드레스에 관해 패치를 리사이클하고 제 2 어드레스에 관한 패치를 사전 패치로 전환하는 수단이 제공된다.
본 교지의 다른 형태들은 이러한 패치 섹션을 통합한 프로그래밍 가능한 프로세서, 특히 파이프라인 프로세서를 포함한다.
이어지는 상세한 설명에서 추가 과제, 이점 및 신규 특징들이 일부 언급되고, 일부는 이어지는 첨부 도면의 검토로 당업자들에게 명백해질 수도 있고 예시의 제조 또는 동작에 의해 알 수 있게 된다. 본 교지의 과제 및 이점들은 첨부된 청구범위에 특별히 지시된 방법, 수단 및 조합의 실시 또는 사용에 의해 실현 및 달성될 수 있다.
도면은 본 교지에 따른 하나 이상의 구현을 한정이 아닌 단지 예시로 나타낸 다. 도면에서, 동일 부호는 동일하거나 비슷한 엘리먼트에 관련된다.
도 1은 경계를 가로지르는 명령의 효율적인 처리를 위한 패치 섹션 구현 기술의 예시적인 엘리먼트들을 포함하는 프로그래밍 가능 프로세서의 일부의 고 레벨 블록도이다.
도 2는 도 1에 나타낸 엘리먼트들을 통합할 수 있는 프로그래밍 가능 프로세서의 파이프라인 구현의 기능 블록도이다.
도 3은 명령 캐시 라인으로부터의 명령 데이터를 나타내며, 캐시 라인은 8개의 32 비트 명령을 포함한다.
도 4는 명령 캐시 라인으로부터의 명령 데이터를 나타내며, 캐시 라인은 16개의 16 비트 명령을 포함한다.
도 5는 명령 캐시의 두 라인으로부터의 명령 데이터를 나타내며, 각 라인은 16 비트와 32 비트 명령의 혼합 및 경계 통과 32 비트 명령의 일부를 포함한다.
도 6은 선택된 비트들을 하나의 32 비트 명령으로 컴파일하기 위한 명령 데이터 정렬 처리 전에 64 비트 레지스터 내의 데이터를 나타낸다.
도 7은 경계를 가로지르는 명령의 부분들을 포함하는 두 라인을 패치함으로써 복원되는 결과적인 32 비트 명령을 나타낸다.
다음 상세한 설명에는, 관련된 교지의 전반적인 이해를 제공하기 위해 예시에 의해 다수의 특정 항목이 언급된다. 그러나 본 교지는 이들 항목 없이 실시될 수도 있음이 명백하다. 다른 경우에, 본 교지의 형태들을 불필요하게 불명료하게 하는 것을 피하기 위해, 잘 알려진 방법, 프로시저, 컴포넌트 및 회로는 비교적 높은 레벨로 설명되었다.
여기서 논의하는 바와 같이, 프로세서에 대한 명령들을 패치하게 되는 프로세서의 시스템 도는 섹션의 예는 명령 캐시 및 다수의 처리 스테이지를 포함한다. 이와 같이, 패치 섹션 자체는 통상적으로 처리 스테이지의 파이프라인으로 형성된다. 명령들은 캐시 라인 경계를 가로지르는 것이 허용된다. 상위 레벨 메모리에 대한 요청이 이루어진 스테이지가 캐시 라인 경계를 가로지르는 명령의 제 1 부분을 가지면, 다음 라인을 체크한다. 해당 스테이지가 경계를 가로지르는 명령 데이터의 제 1 부분이 캐시(L1)에 포함된다고 결정하면, 제 1 라인으로부터의 명령의 일부의 최초 패치를 무효화하고 제 1 패치 어드레스를 패치 파이프라인의 시작으로 반환한다. 제 2 어드레스에 대한 처리가 해당 스테이지로 이동할 때, 제 2 패치는 터치 또는 사전 패치 동작으로 전환되었다. 따라서 처리는 데이터를 명령 캐시로 로딩하지만, 이러한 패치 파이프라인의 제 1 통과시 제 2 라인을 디코딩 스테이지로 전달하지 않는다. 그 결과, 명령의 제 2 부분을 포함하는 명령 라인이 캐시에 있다. 패치 스테이지가 (리사이클 후) 다시 제 1 어드레스를 처리하면, 제 2 어드레스는 또 정상적인 순서로 이어지고, 제 2 어드레스에 대한 캐시의 라인은 이제 경계를 가로지르는 명령의 필요한 제 2 부분을 포함한다. 제 2 라인으로부터의 원하는 명령에 대한 부분은 (제 1 라인에서 데이터의 다른 불필요한 부분을 대체하는) 패치된 제 1 라인으로 떨어져 패치 스테이지로부터의 출력의 한 사이클 내에 원하는 명령을 완성할 수 있다.
예시에서, 제 2 패치 어드레스를 포함하는 (이전) 스테이지보다 높은 파이프라인의 임의의 스테이지가 활성화된다. 그 결과, 명령 패치 파이프라인의 제 2 통과 도중 원하는 명령이 한 사이클로 조합될 때까지 패치 파이프라인으로부터 명령 라인 데이터가 출력되지 않는다.
이제 첨부 도면에 나타내고 하기에 논의되는 예시에 대한 상세한 참조가 이루어진다. 도 1은 파이프라인 프로세서 및 관련 메모리들의 여러 스테이지를 나타낸다. 도 2는 전체 파이프라인을 나타내는 반면, 도 1은 여기서 논의하는 바와 같이 메모리로부터의 명령 패치 및 캐시 라인 경계를 가로지르는 명령의 취급에 수반되는 것으로서 파이프라인의 제 1 섹션의 다소 더 상세를 보여준다.
도 2를 참조하면, 간소화된 파이프라인 프로세서(10)는 파이프라인 처리 스테이지의 5개의 주요 카테고리, 즉 패치(11), 디코딩(13), 판독(15), 실행(17) 및 기록(19)을 포함한다. 도면에서 화살표는 논리적 데이터 플로을 나타내며, 반드시 물리적 접속을 나타내는 것은 아니다. 당업자들은 이들 스테이지의 일부 또는 전부가 관련 기능의 일부를 수행하는 다수의 스테이지로 분해될 수도 있고, 또는 파이프라인이 추가 기능을 제공하기 위한 추가 스테이지들을 포함할 수도 있는 것으로 인식할 것이다. 실제 수퍼 스칼라 예는 각각 예를 들어 다수의 스테이지를 포함하는 2개 이상의 병렬 파이프라인으로 구성될 수 있다. 설명을 위해, 스테이지의 여러 주요 카테고리는 단일 스테이지로 나타내지만, 통상적으로 각각 2개 이상의 스테이지로 분해된다. 캐시 라인 경계를 가로지르는 명령들의 취급에 관한 현재 논의에 대한 특별한 관여 섹션은 패치 섹션(11)이며, 그러므로 해당 섹션을 형 성하는 개별 스테이지가 도 1에 더 상세히 도시된다. 도 1 및 도 2에 개별적으로 도시되지만, 파이프라인(10)의 각 스테이지는 통상적으로 명령 및/또는 임의의 처리 결과를 다음 스테이지로 전달하거나 GPR 레지스터 파일(29)로 되돌려보내기 위한 관련 논리 함수 및 관련 레지스터를 구현하는 상태 머신 등을 포함한다.
예시적인 파이프라인(10)에서, 파이프라인 프로세서(10)의 제 1 섹션은 명령 패치 기능(11)을 수행한다. 패치 섹션은 이후 스테이지에 의한 처리를 위해 명령을 취득하는 하나 이상의 스테이션을 포함한다. 패치 스테이지(들)(11)는 메모리(21)에 의해 일반적으로 표현되는 메모리들의 계층 구조로부터 명령을 취득한다. 통상적으로 메모리(21)는 때때로 레벨 1(L1) 캐시(23), 레벨 2(L2) 캐시(25) 및 메인 메모리(27)로 지칭되는 명령 캐시(iCache)를 포함한다. 명령은 다른 소스, 예를 들어 부트 ROM 또는 디스크 드라이브로부터 메인 메모리로 로딩될 수 있다. 명령 캐시와 같은 일부 메모리는 프로세서(10)의 코어 내에 또는 이에 근접할 수 있지만, 메인 메모리와 같은 다른 메모리들은 프로세서(10) 외부에 있을 수도 있고 개별적인 수도 있다. 어떤 구조에서는, 명령 캐시(23)가 (예를 들어 도 1에 도시한 바와 같이) 패치 섹션(11)의 엘리먼트일 수도 있다.
L2 캐시(27)는 처리될 명령 및 데이터(오퍼랜드 데이터)를 모두 저장한다. L2 캐시(27)는 예를 들어 스테이지(15)에 의한 오퍼랜드 데이터 판독중에 사용되는 (도시하지 않은) 데이터 캐시 및 명령 캐시(23)에 의해 공유된다. L2 캐시(27)는 명령 캐시(23)보다 크고 액세스가 느리다. 메인 메모리(27)는 여전히 더 크고 액세스가 느리지만, 상당히 더 많은 정보를 저장한다. 예를 들어, 명령 캐시(23)로 부터의 패치는 3개의 처리 사이클을 필요로 하고, L2 캐시(25)로부터의 패치는 10개 정도의 처리 사이클을 소비할 수 있는 반면, 메인 메모리(27)로부터의 패치는 거의 100개의 처리 사이클과 비슷한 것을 필요로 할 수 있다.
패치 스테이지(11)는 디코딩 스테이지(13)에 각 명령을 공급한다. 명령 디코딩 스테이지(13)의 로직은 수신된 명령 바이트들을 디코딩하고 결과를 파이프라인의 다음 스테이지로 공급한다.
스테이지의 다음 주요 카테고리는 스테이지(15)에 의해 집합적으로 표현되는 바와 같이 데이터 액세스 또는 판독을 제공한다. 판독 스테이지(들)(15)의 로직은 범용 레지스터(GPR) 파일(29)의 지정된 레지스터들의 오퍼랜드 데이터에 액세스한다. 어떤 경우에, 판독 스테이지(들)의 로직(15)은 메모리 또는 (도시하지 않은) 다른 자원들로부터 오퍼랜드 데이터를 취득할 수도 있다.
명령 및 오퍼랜드 데이터는 실행 기능을 제공하는 하나 이상의 스테이지(17)로 전달된다. 실행 스테이지(들)(17)는 본래 검색된 오퍼랜드 데이터에 대해 각 명령의 특정 기능을 실행하여 결과를 산출한다. 실행 기능을 제공하는 스테이지 또는 스테이지들(17)은 예를 들어 산술 논리 연산 유닛(ALU)을 구현할 수 있다. 스테이지(19)는 결과를 다시 파일(19)의 레지스터에 또는 L2 캐시(25) 및/또는 메인 메모리(17)와 같은 메모리에 기록한다.
상기한 바와 같이, 도 1은 패치 섹션(11)을 형성하는 파이프라인 및 관련 엘리먼트들의 스테이지들을 약간 더 상세히 보여준다. 도시한 바와 같이, 예시적인 패치 섹션(11)은 어드레스를 순차적으로 처리하는 3개의 파이프라인 스테이지(31, 33, 35)를 포함한다. 어드레스들이 패치 파이프라인 섹션(11)의 스테이지들을 통과할 때, 임의의 소정 순간에 스테이지들 각각에는 단 하나의 어드레스가 있고 처리되고 있다. 일반적으로, 소정 어드레스에 대해 (IC1 스테이지(31)의) 제 1 사이클은 어드레스를 처리하여 명령 캐시(23)의 적절한 메모리 라인에 대한 태그를 식별한다. (IC2 스테이지(22)의) 제 2 사이클은 태그를 사용하여 명령 캐시(23)의 특정 라인에 액세스한다. 패치 파이프라인의 명령 데이터 정렬(IDA) 섹션은 실제 명령을 추출하기 위해 IC2 스테이지(33)로부터 떨어진 어드레스 데이터를 처리하는 IDA 스테이지(35) 및 iCache(23)로부터 떨어진 데이터를 처리하는 IDA 데이터 스테이지(39)를 포함한다. 그러므로 (IDA 엘리먼트(35, 39)의) 제 3 사이클은 디코딩 스테이지(13)로의 출력을 위해, 명령 캐시(23)의 특정 라인으로부터 데이터를 처리하여 적어도 하나의 명령, 예를 들어 라인 상에서 8개 이상으로부터 16 또는 32 비트 명령을 복원한다. 당업자들은 프로세서가 IDA 스테이지에서 캐시 데이터 라인으로부터 2개 이상의 명령을 추출하도록 설계될 수 있는 것으로 이해할 것이다.
보다 구체적으로, 의도한 실행 순서대로 제 1 스테이지 IC1(31)에 명령들의 어드레스가 공급된다. 종종, 순서는 순차적이지만, 프로그램 실행은 예를 들어 조건부 브랜치 명령에 대한 조건 발생시 순서를 변경할 수도 있다. 명령 캐시(23)의 메모리의 라인은 해당하는 태그를 사용하여 액세스된다. 수신된 명령 어드레스에 응답하여, 제 1 명령 캐시 처리 스테이지(IC1)(31)는 콘텐츠 어드레스 가능 명령(CAM)을 이용하여 캐시 라인에 대한 태그를 식별한다. 태그는 캐시된 명령을 검색하는데 사용되는 어드레스의 서브셋이다. 본래, CAM(IC1) 스테이지(31)는 어드 레스(태그)를 취하고 이를 캐시(23)에서 매칭할 수 있는 가능한 태그와 비교하여, 검색 결과 세트를 생성한다. 이들은 IDA 데이터 스테이지(39)에 포착될 캐시(23) 중에서 정확한 데이터를 조종하기 위해 CAM 사이클 끝에 포착되고 어드레스가 스테이지(33)에 있을 때 RAM(IC2) 사이클 동안 사용된다. 도 1에서 캐시(23)의 출력에 도시된 래치(37)는 투명 래치이며, 이 경우 파이프라인은 캐시에 의해 IDA로 출력되는 데이터의 즉시 포착을 막는다.
상기한 바와 같이, 하나의 태그는 명령 캐시(23)에서 하나의 메모리 라인에 대응하지만, 각 라인은 다수의 명령을 유지한다. 그러므로 메모리로부터 지정된 라인을 복원하기 위한 하나의 태그의 처리는 IC2 스테이지(33)에서 다수의 저장된 명령들을 복원한다. 여기서 IDA(명령 데이터 정렬) 스테이지로 지칭되는 제 3 스테이지(35)는 IDA 데이터 처리 섹션(39)을 제어하여 선택된 명령 라인으로부터 데이터를 수신하고 처리한다. 명령 캐시(23)의 하부 라인 또는 레지스터(37)는 선택된 메모리 라인으로부터의 명령 데이터를 보유한다. IDA 데이터 섹션(39)은 래치(37)로부터 데이터를 수신하여 처리하는 레지스터(41)를 포함한다. 한 예에서, 레지스터(41)는 64 비트 래치일 수 있다. 스테이지(35) 및 레지스터(37)에서의 IDA 처리는 본래 명령 캐시(23)의 하부(39)로부터 적절한 비트를 선택하고, 이들 비트를 정렬하여 명령으로서 재편성하도록 필요에 따라 재구성하며, 복원된 명령을 디코딩 스테이지(13)로 출력한다. 뒤에 더 논의하는 바와 같이, IDA 데이터 섹션(39)의 다른 엘리먼트들은 캐시 실패의 경우 상위 레벨 메모리(25, 27)로부터의 명령 데이터 취득과 같은 관련 기능을 수행한다.
Advanced Risc Machines Limited에 의해 인가된 'ARM' 타입 프로세서와 같은 어떤 프로세서 구조는 적어도 2개의 명령 세트를 지원하며, 한 세트의 명령들은 다른 세트의 명령들과 다른 길이를 갖는다. ARM 타입 프로세서에서, 예를 들어 표준 명령은 32 비트 길이이다. 제 2 또는 'Thumb' 명령 세트는 16 비트 압축 명령 및 ARM 상태에서 대응부와 다르게 인코딩된 32 비트 명령으로 구성된다. 16 비트 Thumb 명령은 32 비트 ARM 등가물로 압축 해제된 다음 정상적인 방식으로 처리될 수 있다. 그러나 짧아진 길이 때문에 16 비트 Thumb 명령은 프로세서(10) 내 또는 이와 관련된 각종 메모리 장치들에 더 적은 저장소를 필요로 한다. 통상적으로, 더 긴 워드 길이를 갖는 명령들은 더 넓은 범위의 연산 및/또는 더 강력하거나 더 복잡한 연산을 제공한다. 주지한 바와 같이, 더 짧은 워드 길이를 갖는 명령들은 더 작은 명령 세트의 한정된 용량이 적당한 프로그램 또는 서브 루틴에 대해 메모리 절약을 제공한다.
머신은 여러 "상태" - ARM, Thumb, Jazelle-X/T2EE, 등 … - 중 하나로 동작하고 해당 상태에 대해 구성된 명령들에 대해서만 작용할 수 있다. ARM 상태는 32 비트 명령들만 포함하고, 5개의 최상위 비트에는 어떠한 인코딩도 적법하다. Thumb 상태는 T2EE와 같이 16 비트 및 32 비트 명령의 혼합을 포함한다. 이러한 상태에서, 5개의 최상위 비트는 해당 명령이 16 비트 명령인지 32 비트 명령인지를 결정한다.
도 3에 나타낸 바와 같이, 256 비트 캐시 라인의 예는 8개의 32 비트 명령을 보유할 수 있다. ARM에서, 모든 명령은 32 비트 워드로 구성되고, 모든 32 비트 명령은 32 비트 워드 라인 경계와, 즉 명령 캐시(23)의 라인들에 정렬된다. 캐시 라인이 16 비트 Thumb 명령만을 포함한다면, 예를 들어 프로세서가 Thumb 모드에서 동작하고 있을 때, 동일한 캐시 라인은 도 4에 나타낸 것과 같이 16개의 16 비트 명령을 보유할 수 있다. Thumb을 포함하는 어떤 프로세서 및/또는 어떤 동작 모드는 32 비트 및 16 비트 명령의 혼합을 허용하여 하나의 캐시 라인은 32 비트 및 16 비트 명령을 포함할 것이다.
도 5는 각 캐시 라인 상에 32 비트 및 16 비트 명령의 서로 다른 조합을 보유하는 2개의 연속한 라인을 나타낸다. 라인에서 명령들의 정렬은 순전히 임의이며, 프로세서(10)가 다른 ARM 및 Thumb 명령에 대해 동작할 때 시간에 따라 달라진다. 때때로, 명령들은 캐시 라인 경계와 정렬하게 된다. 그러나 도 5의 예로 나타낸 것과 같이, 두 캐시 라인 사이의 경계를 32 비트 명령이 가로지르는 상황이 때때로 발생하게 된다. 이러한 예에서, 제 1 라인(CL1) 상의 마지막 16 비트는 32 비트 명령의 1/2(A)를 보유한다. 제 2 라인(CL2) 상의 처음 16 비트는 동일한 32 비트 명령의 다른 1/2(B)를 보유한다. 이제, 도 1의 패치 파이프라인(11)을 통한 A-B 명령의 처리를 주시한다.
제 1 처리 사이클 동안, IC1 스테이지(31)는 처음에 파트 A를 포함하는 라인 CL1에 대응하는 어드레스를 수신하고 그 어드레스를 처리하여 라인 CL1에 대한 태그를 복원한다. 다음 처리 사이클에서, IC2 스테이지(33)는 그 태그를 사용하여 CL1 라인에 액세스하고 그 라인 상의 데이터를 명령 캐시(23) 하부의 래치(37)로 이동시킨다. 캐시(23)는 또한 현재 캐시 하부의 래치(37)에 있는 CL1 라인이 명령 의 바람직한 파트 A를 포함한다고 지시하는 적중(hit) 표시를 적중(H) 또는 실패(M) 라인(43)에 제공한다. IC2가 CL1에 대한 검색 결과를 처리하고 있을 때, 즉 제 2 처리 사이클 동안, IC1 스테이지(31)는 다음 어드레스를 수신하며, 이 경우 어드레스는 파트 B를 포함하는 라인 CL2에 대응한다. IC1 스테이지(31)는 해당 어드레스를 처리하여 라인 CL1에 대한 검색 결과를 복원한다.
패치 처리의 제 3 사이클에서, 파트 A를 포함하는 라인 CL1에 대한 어드레스는 IDA 스테이지(35)로 떨어진다. 더 이전 사이클로부터의 적중(H) 표시에 응답하여, IDA 스테이지(35)의 처리는 IDA 데이터 섹션(39)의 레지스터(41)가 명령 캐시(23) 하부의 래치(37)로부터 명령의 파트 A의 16 비트를 포함하는 비트들을 포착하게 한다. 동시에, IC2 스테이지(33)는 라인 CL2에 대한 태그를 사용하여 메모리의 해당 라인으로부터 데이터를 복원하고 데이터를 명령 캐시(23) 하부의 래치(37)에 로딩한다.
IDA 스테이지(35)는 제 1 어드레스를 수신하면, 래치(37)로부터 내려오는 데이터를 검사한다. 본래, 이 스테이지는 원하는 명령에 대한 데이터를 찾고 있다. 분석의 일부로서, 상기 스테이지는 요청된 명령이 캐시 라인 경계를 가로지르는지를 식별하게 된다.
명령의 예로서 ARM 및 Thumb을 이용하여, 32 비트 Thumb 명령은 항상 5개의 최상위 비트(11101; 11110; 또는 11111)에 대한 3개의 가능한 값 중 하나로 시작한다. 본래, 로직은 래치(41)에서 데이터의 각 16 비트 부분을 볼 수 있다. 5개의 최상위 비트가 32 비트 명령에 대한 3개의 요청 값 중 하나를 갖지 않는다면, 16 비트는 Thumb 명령을 나타낸다. 그러나 로직이 5개의 최상위 비트가 32 비트 명령에 대해 요청된 3개의 값 중 하나를 가짐을 발견할 때마다, 16 비트를 32 비트 명령의 처음 1/2로서 인식한다. 슬롯이 캐시 라인 열의 끝에 있지 않다고 가정하면, 라인 상의 다음 16 비트가 32 비트 명령의 다른 1/2이 된다. 5개의 최상위 비트로서 32 비트 명령에 대한 3개의 값 중 하나를 갖는 슬롯이 캐시 라인 열의 끝에 있다면, 32 비트 명령은 캐시 라인 경계를 가로지른다. 그러므로 IDA 스테이지(35)는 명령의 파트 A가 제 1 라인(CL1)의 끝에 있다고 판단할 수 있지만, 원하는 명령의 파트 B를 찾기 위해 다른 라인을 주시할 필요가 있다.
처음에, 이 예에서 명령의 다른 파트는 다음 캐시 라인(CL2)에 포함되었다고 가정하였다. 패치 처리의 제 2 사이클 동안, 캐시(23)는 또한 현재 캐시(23) 하부의 래치(37)에 있는 CL2 라인이 명령의 원하는 파트 B를 포함함을 지시하는 적중(H) 표시를 H/M 라인(43) 상에 제공한다. 이와 같이, 파트 B는 캐시 하부에 나타난다. IDA 스테이지(35)는 또 캐시 라인 데이터의 16 비트 섹션을 검사하여, 라인(CL1)과 라인(CL2) 간의 경계를 가로지른 명령의 16 비트 제 2 부분을 찾는다. IDA 스테이지(35)는 레지스터(41)가 원하는 명령의 해당 추가 부분 B를 포착하게 한다. 레지스터(41)를 형성하는 64 비트 래치는 이제 원하는 명령의 두 부분을 포함하지만, 그 부분들은 도 6에 개략적으로 나타낸 것과 같이 적절히 정렬되지 않을 수도 있다. IDA 데이터 스테이지(39) 및 레지스터(41)에 의한 추가 처리는 도 7에 개략적으로 나타낸 것과 같이 두 파트 A와 B의 데이터 비트들을 정렬하여 하나의 32 비트 명령으로 조합하고, 조합된 명령을 디코딩 스테이지(13)로 전달한다.
상기 예는 원하는 명령의 두 파트 A 및 B가 명령 캐시(23)의 CL1 및 CL2 캐시 라인에 있다고, 즉 적중-적중 상황으로 가정하였다. 그러나 당업자들은 항상 이러한 경우는 아닐 것으로 이해할 것이다. 명령 캐시(23)의 액세스 라인의 명령 데이터에 관해, 명령의 제 2 파트를 패치하고자 하는 시도가 캐시 실패를 일으키게 되는 상황이 일어나게 된다. 이제 적중-실패 경우를 주시한다. 제 1 파트 A는 CL1 라인에 있지만(적중), 파트 B는 IC2 스테이지(33)의 처리에 의한 복원시 처음에 CL2에 있지 않다(실패).
이전 예에서와 같이, 제 1 처리 사이클 동안 IC1 스테이지(31)는 처음에 파트 A를 포함하는 라인 CL1에 대응하는 어드레스를 수신하고 그 어드레스를 처리하여 라인 CL1에 대한 검색 결과를 복원한다. 다음 처리 사이클에서, IC2 스테이지(33)는 이들 검색 결과를 사용하여 CL1 라인에 액세스하고 그 라인 상의 데이터를 명령 캐시(23) 하부의 래치(37)로 이동시킨다. 캐시(23)는 또한 현재 캐시 하부의 래치(37)에 있는 CL1 라인이 명령의 바람직한 파트 A를 포함한다고 지시하는 적중(H) 표시를 라인(43)에 제공한다. IC2가 CL1에 대한 검색 결과를 처리하고 있을 때, 즉 제 2 처리 사이클 동안, IC1 스테이지(31)는 다음 어드레스를 수신하며, 이 경우 어드레스는 파트 B를 포함하는 것으로 예상되는 라인 CL2에 대응한다. IC1 스테이지(31)는 해당 어드레스를 처리하여 라인 CL1에 대한 검색 결과를 복원한다.
패치 처리의 제 3 사이클에서, 파트 A를 포함하는 라인 CL1에 대한 어드레스는 IDA 스테이지(35)로 떨어진다. 더 이전 사이클로부터의 적중(H) 표시에 응답하 여, IDA 스테이지(35)의 처리는 IDA 데이터 섹션(39)의 레지스터(41)가 명령 캐시(23) 하부의 래치(37)로부터 명령의 파트 A의 16 비트를 포함하는 비트들을 포착하게 한다. 동시에, IC2 스테이지(33)는 라인 CL2에 대한 검색 결과를 사용하여 메모리의 해당 라인으로부터 데이터를 복원하고 데이터를 명령 캐시(23) 하부의 래치(37)에 로딩하고자 하는 시도를 한다.
여기까지, 적중-실패 예의 처리는 본질적으로 처음 적중-적중 예와 동일하다. 그러나 이 두 번째 예에서, IC2 스테이지(33)가 CL2 라인에서 래치(37)로 데이터를 이동시키게 되면, 캐시(23)는 현재 캐시(23) 하부의 CL2 라인이 명령의 바람직한 파트 B를 포함하지 않는다고 지시하는 실패(M) 표시를 H/M 라인(43)에 제공한다.
이 예에서, A-B 명령은 캐시 라인 경계를 가로지르고, 섹션(11)의 로직은 명령 캐시(23)로부터 액세스한 데이터의 제 1 라인 CL1에 명령 데이터의 (성공적으로 패치된) 제 1 파트 A를 갖지만 명령 데이터의 제 2 파트 B는 캐시(23)로부터 액세스한 데이터의 제 2 라인 CL2에 있지 않다고 결정하였다. 그러므로 IDA 스테이지(35)의 로직은 (어떤 명령 데이터도 디코딩 스테이지(13)로 전달하지 않도록) CL1 라인에 대응하는 어드레스의 패치를 무효화한다. 또한, 제 2 패치 어드레스를 포함하는 (이전) 스테이지보다 높은 파이프라인의 임의의 스테이지가 활성화된다. 설명한 3개의 스테이지 패치 구조에서, IC1 스테이지(31)는 CL2 라인에 대한 어드레스를 보유하는 IC2 스테이지 위의 유일한 스테이지이므로 IC1 스테이지(31)가 활성화된다.
지금, IDA 스테이지(35)의 로직은 또한 CL1에 대응하는 제 1 패치 어드레스를 재-패치 스테이지(45)를 통해 다시 패치 파이프라인(11)의 시작으로 돌려보낸다. 재-패치 스테이지(45)는 다음 사이클에서 IC1 스테이지(31)에 대한 다음 어드레스 입력으로서 리사이클된 어드레스를 제공하고 해당 제 1 어드레스에 대한 어드레스 입력 열을 리셋하는 기능을 하므로, 다음 입력 어드레스들은 리사이클된 어드레스 뒤에, 이 경우에는 CL1 라인 및 명령의 파트 A를 식별한 어드레스 뒤에 적절히 순서대로 이어지는 것들이다. 특히, 이는 해당 제 1 어드레스에 관한 처리가 재개될 때 파트 B를 포함하는 것으로 예상되는 라인 CL2에 대응하는 어드레스가 패치 파이프라인(11)의 제 1 통과에서와 같이 해당 제 1 어드레스 바로 뒤에 다시 스테이지를 지나가게 된다는 것을 의미한다.
제 3 처리 사이클 동안, 제 2 라인 CL2가 실패를 일으킨 것으로 판단되었다면, IC2 스테이지(33)는 해당 라인에 대한 패치를 패치(F)에서 터치(T) 또는 사전 패치 동작으로 전환하였다. 패치 동작은 명령을 검색하고 명령을 디코딩 스테이지(13)로 전달하고, 이를 최종적 실행을 위해 전달한다. 터치(T) 또는 사전 패치 동작은 단지 명령을 뽑아내며, 명령이 아직 명령 캐시(23)에 없다면 처리는 명령을 해당 캐시(23)에 로딩하게 된다는 것을 안다. 사전 패치는 명령 데이터가 명령을 실행을 위해 나중 스테이지들로 떨어뜨리지 않고 나중 처리를 위해 명령 캐시(23)에 있게 한다. 동작이 실패하게 되면, 이는 터치 처리가 L2 캐시(25) 및/또는 메인 메모리(27)와 같은 다른 메모리 자원으로부터 필요한 명령 데이터를 얻게 되고, 명령 데이터의 라인이 관련 어드레스가 패치 섹션(11)의 스테이지를 지나가는 다음 시간에 제시됨을 의미한다.
IC2 스테이지(33)의 로직은 T/F 타입 필드(47), 통상적으로 이 스테이지(33)에서 처리중인 어드레스가 터치 또는 패치 타입 동작에 관련될 때를 지시하는 플래그 비트를 포함하는 래치 등을 포함한다. IDA 스테이지(35)의 로직은 비슷한 T/F 타입 필드(49)를 포함하는 래치 등을 포함한다. IC2 스테이지(33)가 IDA 스테이지(35)로 어드레스를 전달하면, IC2 스테이지(33)는 IDA 스테이지(35)에서 필드(47)로부터 필드(49)로 T 또는 F 타입 표시를 전달한다.
이러한 설명을 위해, IC2 스테이지(33)에서 처음에 제 2 어드레스가 수신되면, IC2 스테이지는 이를 패치(F) 동작으로 취급한다. 그러나 캐시 라인 경계를 가로지르는 명령에 대해, 캐시가 제 2 부분 B가 CL2 캐시 라인 상에 없음을 지시하는 실패(M) 표시를 라인(43) 상에 제공하면, IC2 스테이지는 타입 필드(47)의 F를 T로 변경하여, 패치를 터치로 효율적으로 전환한다. 그 다음, 도 1에서 점선으로 나타낸 것과 같이 터치(T) 표시를 IDA 스테이지(35)로 전달한다.
제 4 처리 사이클 동안, 제 1 어드레스가 재-패치 스테이지(45)로 전달되었을 때, 제 2 어드레스는 IDA 스테이지(35)로 전달된다. 이 어드레스에 의해, IC2 스테이지(33)는 이제 예를 들어 IDA 스테이지 로직에서 필드(49)에 사용하기 위한 터치 표시(T)를 전달함으로써 어드레스가 사전 패치 처리에만 사용된다는 표시를 전달한다. IDA 스테이지(35)는 또한 라인(43) 상의 실패(M) 표시로부터 원하는 명령 데이터가 캐시의 라인 상에 없음을 알게 된다. 그러므로 IDA 스테이지(35) 및 IDA 데이터 섹션(39)은 상위 레벨 메모리 자원(들)으로부터 필요한 명령 데이터를 로딩하기 위한 단계들을 시작할 수 있다. IDA 엘리먼트(35, 39, 41)는 제 2 어드레스에 관한 터치 처리를 본래 데이터를 명령 캐시(23)로 로딩하는 사전 패치로 취급하지만, 어떤 결과도 디코딩 스테이지(13)로 전달하지 않는다. 그 결과, 명령 라인이 상위 레벨 메모리로부터 캐시(23)로 로딩되어 나중 처리에 이용 가능하다.
패치 섹션(11)이 리사이클 후 제 1 어드레스에 관련하여 다시 제 1 패치를 처리하면, 제 2 어드레스가 다시 이어지지만, 제 2 어드레스에 대한 라인은 이제 L1 명령 캐시(23)에 있다. 제 2 라인(CL2)으로부터의 바람직한 명령에 대한 파트 B는 IDA 처리 동안 패치된 제 1 라인 CL2으로부터의 파트 A와 함께 떨어져, 라인의 다른 불필요한 데이터 부분을 대체하여, 상기한 적중-적중 예에서와 같이 정확하게 패치 섹션(11)으로부터의 출력의 한 라인 내에 원하는 명령을 완성한다. 그러나 이러한 동작들을 인지하기 위해, IDA 스테이지에 이르는 제 2 라인 어드레스에 대한 터치 동작을 다소 더 상세히 주지하는 것이 도움이 될 수 있다.
파이프라인의 패치 섹션(11)은 IDA 데이터 섹션(39)에서 L2 캐시(25)로부터 레지스터(41)로의 명령 데이터 전달에 사용되는 2개의 채움 버퍼(51, 53)를 포함한다. 지정된 어드레스에 대한 패치 타입 동작이 IDA 스테이지(35)에 이르고 실패(M)로 이어지면, IDA 데이터 섹션(39)은 실패한 명령 라인에 대한 요청을 L2 캐시(25)로 전송한다. L2 캐시(25)는 요청된 라인에 대한 데이터를 포함할 수도 있고, 그렇지 않으면 L2 캐시(25)는 통상적으로 메인 메모리(27)로부터 요청된 라인에 대한 데이터를 얻는다. L2 캐시(25)는 버퍼(51)에 라인의 1/2을 로딩하고 다른 1/2을 버퍼(53)에 로딩한다. IDA 데이터 섹션(39)의 로직은 캐시(23)의 래치(37) 로부터 레지스터(41)로의 해당 데이터의 로딩과 유사한 방식으로 캐시 라인 데이터의 관련 부분을 레지스터(41)에 로딩한다. 동시에, 버퍼(51, 53)는 명령 데이터의 전체 라인을 저장 및 추후 사용을 위해 명령 캐시(23)에 제공한다.
적중-실패 예에서, 제 2 캐시 라인 어드레스에 대한 터치는 이러한 IDA 엘리먼트들과 채움 버퍼들의 동작을 이용하여 필요한 라인 CL2에 대한 데이터를 명령 캐시(23)로 로딩한다. 일부는 IDA 명령 섹션으로 진행할 수도 있지만, 데이터는 디코딩 스테이지로 떨어지지 않기 때문에 통상적으로 IDA 레지스터(41)로 로딩되지 않는다. IDA 스테이지는 해당 어드레스에 관한 이 첫 번째 플로(flow)를 터치 타입 동작, 즉 사전 패치 전용으로 간주한다.
터치가 완료된 후 다음 사이클에서, 제 1 어드레스는 다시 IC1 스테이지(31)에서 제 1 캐시 라인 CL1에 대한 태그를 식별하도록 처리된다. IC1 스테이지(31)는 제 1 태그를 IC2 스테이지(33)로 전달한다. 다음 사이클에서, IC2 스테이지는 캐시 라인 IC1을 판독하는 한편, 제 2 어드레스가 IC2 스테이지(33)에서 다시 처리되어 제 1 캐시 라인 CL2에 대한 태그를 식별한다. IC2 스테이지(33)의 처리는 CL1 라인으로부터 래치(37)로 데이터를 로딩하고, 다음 사이클에서 해당 데이터 라인은 IDA 레지스터(41)로 이어지는 선택된 부분들과 함께 떨어진다. 레지스터(41)의 관련 CL1 데이터에 의해, IC2 스테이지(33)는 캐시 라인 CL2를 판독하고 그 라인으로부터 래치(37)로 데이터를 로딩한다. 이러한 제 2 통과중에, 두 캐시 라인의 판독은 이전 적중-적중 예에서와 같이 적중을 일으킨다.
이런 식으로, 파트 B는 패치 섹션(11)의 파이프라인을 통한 명령의 제 2 전 달중에 캐시 하부에 나타나고, IDA 스테이지(35)는 레지스터(41)가 원하는 명령의 해당 추가 부분을 포착하게 한다. 레지스터(41)를 형성하는 64 비트 래치는 이제 원하는 명령의 두 부분을 포함하지만, 그 부분들은 도 6에 개략적으로 나타낸 것과 같이 또 적절히 정렬되지 않을 수도 있다. 이전 예에서와 같이, IDA 데이터 스테이지(39) 및 레지스터(41)에 의한 추가 처리는 도 7에 개략적으로 나타낸 것과 같이 두 파트 A와 B의 데이터 비트들을 정렬하여 하나의 32 비트 명령으로 조합하고, 조합된 명령을 디코딩 스테이지(13)로 전달한다.
이 예에서, 처리가 제 1 패치 어드레스를 패치 파이프라인(11)의 시작으로 돌려보냈을 때, 디코딩 스테이지로 넘어가지 않도록 그 최초 통과는 동시에 무효화되었다. 또한, 제 2 패치 어드레스를 포함하는 (이전) 스테이지보다 높은 파이프라인의 임의의 스테이지가 활성화되었다. 제 1 어드레스가 리사이클될 때, 그 어드레스와 제 2 어드레스에 대한 터치 사이에는 전달중인 어드레스가 없다. 사전 패치가 완료하면, IDA 스테이지(35)는 IDA 레지스터(41)에서 어드레스 및 관련 데이터를 폐기한다. 그 결과, 명령 패치 파이프라인의 제 2 통과중에 원하는 명령이 조합될 때까지 패치 파이프라인(11)으로부터 어떤 명령 라인 데이터도 출력되지 않는다.
이러한 타입의 처리에 의해, IDA 엘리먼트만이 상위 레벨 메모리 자원으로부터의 패치를 시작할 수 있다. 이는 상위 레벨 메모리 자원에 대한 요청을 하는 명령 패치 처리에 단 하나의 스테이지가 있는 고성능 프로세서 설계를 용이하게 한다. 리사이클된 제 1 어드레스는 보통 다시 IC1, IC2, 그 다음 IDA로 떨어지기 전 에 재-패치(45)에서 한 사이클만을 소비한다. 이러한 경우, 보통 LC 캐시(25)가 패치 스테이지들의 제 2 통과 동안 명령 데이터의 제 1 부분을 이미 캐시(23)로 반환했다는 것은 불가능하다. 그러므로 IDA 스테이지는 L2 캐시(25)에 위치하여 대기하고 채움 버퍼(51, 53)로부터 직접 명령 데이터의 두 번째 1/2을 수신한다.
이전 예에서, 캐시 라인 경계를 가로지르는 명령에 대한 두 라인의 처리는 적중-실패가 되어, 제 1 라인은 명령의 일부를 포함했지만 제 2 라인은 포함하지 않았다. 어떤 캐시 라인도 명령의 원하는 부분을 포함하지 않는 경우, 즉 실패-실패 경우에 실질적으로 비슷한 처리가 적용된다. 이러한 후자의 경우, 제 1 라인에 대한 처리는 L2 캐시(25) 또는 메인 메모리(27)로부터 데이터를 취득하여 명령 데이터의 라인을 명령 캐시(23)에 로딩한다. 제 2 라인이 실패인 것으로 결정되면, 제 1 어드레스가 리사이클되고, 제 2 패치는 터치로 전환되며, 처리는 적중-실패 예에서와 같이 계속된다.
제 1 캐시 라인은 원하는 명령의 일부를 포함하지 않지만 제 2 라인은 포함할 경우(실패-적중)는 적중-적중의 경우와 매우 유사하게 패치 섹션(11)의 스테이지를 거치게 된다. 제 1 라인의 처리는 실패지만, IDA 처리는 상위 레벨 메모리 자원으로부터 명령 데이터의 필요한 라인을 얻는다. 채움 버퍼(51, 53)로부터 비트들이 선택되어 제 1 라인에 대한 IDA 레지스터(41)를 집단화한다. 그 후, 래치(37)로부터의 제 2 라인의 처리(제 2 라인 상의 적중)는 적중-적중 예에서와 동일하다.
처리 로직을 요약하면, 명령 패치 동작이 먼저 IDA 스테이지(35)에 도달하고 이용 가능한 목표 캐시 라인에 대하 명령 데이터를 모두 가질 때 결정이 이루어진다. IDA 스테이지는 명령이 라인 경계를 가로지르는지 여부를 결정한다. 그렇지 않다면, IDA 스테이지는 정상적인 방식으로 명령을 처리한다. 그러나 가로지르는 라인 경계가 있다면, IDA 스테이지(35)의 로직은 캐시(23)로부터 적중/실패 표시를 찾아 경계를 가로지르는 명령의 제 2 부분을 포함해야 하는 다음 라인에 적중이 있는지 여부를 결정한다. 있다면, IDA 스테이지는 캐시로부터 제 2 부분을 포착하여 완벽한 명령을 디코딩 스테이지(13)에 제공할 수 있다. 그러나 IC2 스테이지(33)에서 처리중인 다음 라인 상에 실패가 있다면, 즉 다음 캐시 라인이 경계를 가로지르는 명령의 필요한 제 2 부분을 포함하지 않는다면, IDA 및 IC2 스테이지는 여기서 알게 된 처리를 구현한다.
이러한 경우, IDA 스테이지(35)는 제 1 어드레스에 관련된 현재 패치를 무효화하고 예를 들어 재-패치 스테이지(45)를 통해 제 1 캐시 라인에 대한 어드레스를 리사이클한다. 제 2 라인에 대한 어드레스는 IDA 스테이지(35)로 떨어진다. 그러나 그와 같이 하는 동안, 제 2 어드레스에 대한 처리는 패치 타입 동작에서 사전 패치 타입 동작으로 전환되었다. IC1 스테이지가 활성화된다. IDA 스테이지는 L2 캐시(25) 및/또는 메인 메모리(27)로부터 필요한 명령 데이터를 로딩하기 위한 동작을 시작한다. 그때까지 이러한 업로드는 완료하고, 데이터는 명령 캐시(23)에 저장되며, IC1 스테이지(31)는 리사이클된 제 1 어드레스로부터의 처리를 재개할 수 있다. 두 어드레스가 패치 섹션(11)의 스테이지들을 두 번째 거칠 때, 경계를 가로지르는 명령에 필요한 모든 데이터는 캐시 메모리(23)의 적절한 두 라인 상에 있으며, 패치 섹션은 이들 부분을 검색하고, 그 비트들을 하나의 명령으로 컴파일하여 명령을, 예를 들어 디코딩을 위해 파이프라인(10) 아래 다음 스테이지로 출력한다.
상기한 처리는 명령 캐시(23)가 충분히 동작중일 때 적용된다. 그러나 명령 캐시(23)가 디세이블(disable)될 때, 예를 들어 시동중에 채움 버퍼(51, 53)를 통해 데이터의 로딩에 비슷한 처리가 적용될 수도 있다. 그 경우, 프로세스는 플로는 본래 캐시(23)의 라인들에 실패-실패 상황을 일으킨다. 제 2 어드레스가 터치로 전환되면, 채움 버퍼들 중 하나는 임시 캐시로 사용되어 명령 부분 B에 대한 라인의 관련 1/2을 보유한다. 제 1 명령이 다시 순환하면, 제 1 라인의 관련 부분은 다른 채움 버퍼로 로딩되고, IDA 데이터 섹션은 본래 라인 경계를 가로지르지 않은 명령에 대한 것과 같이 두 버퍼(51, 53)로부터의 명령을 컴파일할 수 있다.
16 및 32 비트 길이의 서로 다른 타입의 명령, 8 워드 길이의 캐시 라인 및 다양한 크기의 래치, 레지스터 및 버퍼와 같이 상기 설명에서 주어진 비트 수는 대표적인 예시일 뿐이다. 당업자들은 다양한 컴포넌트의 명령 길이 및 크기가 다른 프로세서 구조 및 구현에서 더 길거나 짧을 수도 있는 것으로 인식할 것이다. 또한, 혼합하여 더 넓은 범위의 가능한 명령 크기, 예를 들어 16 비트, 32 비트, 64 비트 또는 그 이상이 있을 수도 있다. 또한, 패치 섹션(11) 또는 심지어 파이프라인(10)의 스테이지 수는 상당히 달라질 수도 있으며, 또 프로세서는 본원에서 논의된 교지에 따라 라인 경계를 가로지르는 명령의 패치 처리를 구현할 수도 있다.
상기는 최상의 모드 및/또는 다른 예로 간주하는 것을 설명하였지만, 다양한 변형이 이루어질 수도 있고 본원에 개시된 대상은 다양한 형태 및 예로 구현될 수도 있으며, 교지는 다수의 애플리케이션에 적용될 수도 있으며, 이 일부만이 여기서 설명된 것으로 이해한다. 이어지는 청구범위에 의해, 본 교지의 진정한 범위 내에 있는 임의의 그리고 모든 애플리케이션, 변형 및 개조를 청구하는 것으로 의도된다.

Claims (18)

  1. 명령들이 메모리 라인 경계를 가로지를 수 있는 프로그래밍 가능 프로세서에서 실행을 위해 메모리로부터 명령을 패치(fetch)하는 방법으로서,
    제 1 어드레스에 응답하여 명령 데이터의 제 1 라인을 최초 패치하는 단계;
    패치되는 명령이 상기 명령 데이터의 제 1 라인과 명령 데이터의 제 2 라인 간의 경계를 가로지르는지 여부를 상기 명령 데이터의 제 1 라인으로부터 결정하는 단계 - 상기 명령 데이터의 패치된 제 1 라인은 패치되는 명령의 제 1 부분(piece)을 포함함 -;
    상기 패치되는 명령이 상기 경계를 가로지르는 것으로 결정되면, 제 2 어드레스에 대응하는 캐시 메모리의 라인이 상기 패치되는 명령의 제 2 부분을 포함하는지 여부를 결정하는 단계;
    상기 제 2 어드레스에 대응하는 캐시 메모리가 상기 패치되는 명령의 제 2 부분을 포함하지 않는 것으로 결정되면:
    (a) 상기 명령 데이터의 제 1 라인의 최초 패치를 무효화하고 상기 제 1 어드레스를 리사이클(recycle)하는 단계;
    (b) 상위 레벨 메모리 자원으로부터 상기 명령 데이터의 제 2 라인을 사전 패치(pre-fetch)하는 단계;
    (c) 상기 리사이클된 제 1 어드레스에 응답하여, 상기 명령 데이터의 제 1 라인을 패치하는 단계;
    (d) 상기 제 2 어드레스에 응답하여 상기 명령 데이터의 사전 패치된 제 2 라인을 패치하는 단계; 및
    (e) 상기 명령 데이터의 패치된 제 1 라인 및 제 2 라인으로부터 상기 패치되는 명령의 부분들을 컴파일하는 단계를 포함하는, 명령 패치 방법.
  2. 제 1 항에 있어서,
    상기 명령 데이터의 제 1 라인의 최초 패치를 무효화하는 단계는 상기 명령 데이터의 최초 패치된 제 1 라인으로부터 패치되는 명령의 어떤 것도 상기 프로세서의 다른 엘리먼트들로 출력되는 것을 막는 것을 특징으로 하는 명령 패치 방법.
  3. 제 2 항에 있어서,
    상기 사전 패치 단계는 상기 캐시 메모리로부터 상기 명령 데이터의 제 2 라인의 다음 패치 전에 상기 명령 데이터의 제 2 라인의 어떤 것도 상기 프로세서의 다른 엘리먼트들로 출력하지 않고 상기 명령 데이터의 제 2 라인을 상기 상위 레벨 메모리 자원으로부터 상기 캐시 메모리로 로딩(load)하는 것을 특징으로 하는 명령 패치 방법.
  4. 제 3 항에 있어서,
    상기 사전 패치 단계는 상기 제 2 어드레스에 관한 패치 동작을 상기 제 2 어드레스에 관한 터치(touch) 동작으로 전환하는 단계를 수반하는 것을 특징으로 하는 명령 패치 방법.
  5. 제 1 항에 있어서,
    상기 제 2 어드레스에 대응하는 캐시 메모리가 상기 패치되는 명령의 제 2 부분을 포함하지 않는 것으로 결정되면, 다음 어드레스에 관해 이미 시작했을 수도 있는 임의의 패치 관련 처리를 활성화(flush)하는 단계를 더 포함하는 것을 특징으로 하는 명령 패치 방법.
  6. 프로그래밍 가능 프로세서에 대한 명령을 패치하는 방법으로서,
    패치되는 명령이 명령 라인들 간의 경계를 가로지름을 검출하는 단계;
    상기 경계를 가로지르는 명령의 제 1 부분을 포함하는 명령 데이터의 제 1 라인 패치시, 상기 경계를 가로지르는 명령의 제 2 부분이 캐시 메모리에 없음을 검출하는 단계;
    상기 제 2 부분이 상기 캐시 메모리에 없다는 검출에 응답하여, 상기 명령 데이터의 제 1 라인으로부터 패치되는 어떠한 명령도 출력하지 않고 상기 명령 데이터의 제 1 라인의 패치를 리사이클하는 단계;
    명령 데이터의 제 2 라인을 사전 패치하는 단계;
    상기 리사이클을 기초로, 상기 명령 데이터의 제 1 라인을 패치하고, 상기 명령 데이터의 사전 패치된 제 2 라인을 패치하는 단계; 및
    상기 경계를 가로지르는 명령을 출력하기 위해 상기 명령 데이터의 패치된 제 1 라인 및 제 2 라인으로부터의 부분들을 조합하는 단계를 포함하는, 명령 패치 방법.
  7. 제 6 항에 있어서,
    상기 제 1 라인의 패치를 리사이클하는 단계는 상기 제 2 부분이 상기 캐시 메모리에 없음을 검출하기 전에 패치된, 상기 제 1 라인으로부터 패치되는 명령의 임의의 부분을 무효화하는 단계를 포함하는 것을 특징으로 하는 명령 패치 방법.
  8. 제 6 항에 있어서,
    상기 제 2 라인의 사전 패치 단계는 상기 제 2 라인에 관한 패치 동작을 상기 제 2 라인에 관한 사전 패치로 전환하는 단계를 포함하는 것을 특징으로 하는 명령 패치 방법.
  9. 제 6 항에 있어서,
    상기 제 2 라인의 사전 패치와 상기 제 1 라인의 리사이클된 패치 사이의 진행중에 임의의 패치 동작을 활성화하는 단계를 더 포함하는 것을 특징으로 하는 명령 패치 방법.
  10. 파이프라인 프로세서의 패치 섹션으로서,
    명령 캐시;
    어드레스들의 입력 스트링에서 각각의 개별 어드레스에 대응하는 캐시 라인을 식별하는 제 1 명령 캐시 처리 스테이지;
    캐시 라인의 각 식별에 응답하여, 상기 개별 어드레스에 대응하는 캐시의 메모리 라인으로부터 명령 데이터를 판독하는 제 2 명령 캐시 처리 스테이지;
    상기 제 2 명령 캐시 처리 스테이지에 의해 판독되는 명령 데이터의 하나 이상의 라인들에 응답하여, 패치된 명령들을 출력하고, 상위 레벨 메모리 자원으로부터 상기 명령 캐시에서 처음에 발견되지 않은 임의의 명령 또는 그 일부에 대한 데이터를 취득하는 명령 데이터 정렬 섹션; 및
    명령이 제 1 및 제 2 어드레스에 대응하는 라인들 간의 경계를 가로지르고 상기 제 2 어드레스에 대응하는 캐시의 라인이 처음에 상기 경계를 가로지르는 명령의 일부를 포함하지 않는다고 검출되면, 상기 제 1 어드레스에 관한 패치를 상기 제 1 명령 캐시 처리 스테이지로 리사이클하고, 상기 제 2 어드레스에 관한 패치를 사전 패치로 전환하여 상기 명령 데이터 정렬 섹션이 명령 데이터의 라인을 상기 상위 레벨 메모리 자원으로부터 상기 명령 캐시로 로딩하게 하는 수단을 포함하는, 패치 섹션.
  11. 제 10 항에 있어서,
    상기 명령 캐시의 각 라인은 2개 이상의 서로 다른 길이의 다수의 명령을 저장할 수 있는 것을 특징으로 하는 패치 스테이지.
  12. 제 10 항에 있어서,
    상기 리사이클 수단은 상기 제 1 어드레스를 상기 제 1 명령 캐시 처리 스테이지의 입력으로 다시 전달하는 재-패치 스테이지를 포함하는 것을 특징으로 하는 패치 스테이지.
  13. 제 10 항의 패치 스테이지를 포함하는 파이프라인 프로세서로서,
    상기 패치된 명령들을 디코딩하는 디코딩 스테이지, 디코딩된 명령들에 따라 처리하기 위한 오퍼랜드(operand) 데이터를 취득하는 판독 스테이지, 오퍼랜드 데이터에 대해 디코딩된 명령들을 실행하는 실행 스테이지, 및 실행 결과들을 저장소에 기록하는 기록 스테이지를 더 포함하는 것을 특징으로 하는 파이프라인 프로세서.
  14. 파이프라인 프로세서에 대한 패치 섹션으로서,
    명령 캐시;
    상기 명령 캐시에서 각각의 개별 어드레스에 대응하는 명령 또는 그 일부를 포함할 수 있는 메모리 라인을 식별하고 상기 식별된 라인으로부터 데이터를 판독하기 위해 다수의 어드레스들 각각을 순차적으로 처리하는 적어도 하나의 처리 스테이지; 및
    2개의 어드레싱된 캐시 라인들 중 제 2 캐시 라인에서 캐시 라인 경계를 가로지르는 패치되는 명령 및 상기 경계를 가로지르는 명령의 일부의 부재(absent)를 검출하고, 이에 응답하여, 상기 2개의 캐시 라인들 중 제 1 캐시 라인에 대응하는 어드레스에 관한 패치를 무효화하고 상기 적어도 하나의 처리 스테이지에 대한 입력을 위해 상기 대응하는 어드레스를 리사이클하고, 상기 패치 섹션을 통한 대응하는 어드레스의 제 2 플로(flow)에 대해 상기 경계를 가로지르는 명령의 완벽한 패치를 가능하게 하기 위해 상위 레벨 메모리로부터 상기 제 2 캐시 라인으로 상기 부재 부분을 포함하는 데이터를 사전 패치하는 수단을 포함하는, 패치 섹션.
  15. 제 14 항에 있어서,
    상기 적어도 하나의 처리 스테이지는,
    어드레스들의 입력 스트링에서 각각의 개별 어드레스에 대응하는 캐시 라인을 식별하는 제 1 명령 캐시 처리 스테이지;
    캐시 라인의 각 식별에 응답하여, 상기 개별 어드레스에 대응하는 캐시의 메모리 라인으로부터 명령 데이터를 판독하는 제 2 명령 캐시 처리 스테이지; 및
    상기 제 2 명령 캐시 처리 스테이지에 의해 판독되는 명령 데이터의 하나 이상의 라인들에 응답하여 패치된 명령들을 출력하고, 상위 레벨 메모리 자원으로부터 상기 명령 캐시에서 처음에 발견되지 않은 임의의 명령 또는 그 일부에 대한 데이터를 취득하는 명령 데이터 정렬 섹션을 포함하는 것을 특징으로 하는 패치 섹션.
  16. 제 14 항에 있어서,
    상기 명령 캐시의 각 라인은 2개 이상의 서로 다른 길이의 다수의 명령을 저장할 수 있는 것을 특징으로 하는 패치 스테이지.
  17. 제 14 항에 있어서,
    상기 리사이클 수단은 상기 제 1 어드레스를 상기 적어도 하나의 처리 스테이지의 입력으로 다시 전달하는 재-패치 스테이지를 포함하는 것을 특징으로 하는 패치 스테이지.
  18. 제 14 항의 패치 스테이지를 포함하는 파이프라인 프로세서로서,
    상기 패치된 명령들을 디코딩하는 디코딩 스테이지, 디코딩된 명령들에 따라 처리하기 위한 오퍼랜드 데이터를 취득하는 판독 스테이지, 오퍼랜드 데이터에 대해 디코딩된 명령들을 실행하는 실행 스테이지, 및 실행 결과들을 저장소에 기록하는 기록 스테이지를 더 포함하는 것을 특징으로 하는 파이프라인 프로세서.
KR1020077029640A 2005-05-18 2006-05-18 명령을 패치하는 방법, 파이프라인 프로세서를 위한 패치 장치, 및 상기 파이프라인 프로세서 KR100974023B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/132,749 US7404042B2 (en) 2005-05-18 2005-05-18 Handling cache miss in an instruction crossing a cache line boundary
US11/132,749 2005-05-18

Publications (2)

Publication Number Publication Date
KR20080015017A true KR20080015017A (ko) 2008-02-15
KR100974023B1 KR100974023B1 (ko) 2010-08-05

Family

ID=37025150

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077029640A KR100974023B1 (ko) 2005-05-18 2006-05-18 명령을 패치하는 방법, 파이프라인 프로세서를 위한 패치 장치, 및 상기 파이프라인 프로세서

Country Status (9)

Country Link
US (1) US7404042B2 (ko)
EP (1) EP1886218B1 (ko)
JP (1) JP5059749B2 (ko)
KR (1) KR100974023B1 (ko)
CN (1) CN100583028C (ko)
BR (1) BRPI0610069A2 (ko)
IL (1) IL187464A0 (ko)
TW (1) TWI319157B (ko)
WO (1) WO2006125220A2 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7454596B2 (en) * 2006-06-29 2008-11-18 Intel Corporation Method and apparatus for partitioned pipelined fetching of multiple execution threads
US8239657B2 (en) * 2007-02-07 2012-08-07 Qualcomm Incorporated Address translation method and apparatus
US20120144123A1 (en) 2010-12-01 2012-06-07 International Business Machines Corporation Read-ahead processing in networked client-server architecture
US9201652B2 (en) 2011-05-03 2015-12-01 Qualcomm Incorporated Methods and apparatus for storage and translation of entropy encoded software embedded within a memory hierarchy
US10120692B2 (en) 2011-07-28 2018-11-06 Qualcomm Incorporated Methods and apparatus for storage and translation of an entropy encoded instruction sequence to executable form
WO2013101031A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Hiding instruction cache miss latency by running tag lookups ahead of the instruction accesses
US9460018B2 (en) 2012-05-09 2016-10-04 Qualcomm Incorporated Method and apparatus for tracking extra data permissions in an instruction cache
US8819342B2 (en) * 2012-09-26 2014-08-26 Qualcomm Incorporated Methods and apparatus for managing page crossing instructions with different cacheability
US9424046B2 (en) 2012-10-11 2016-08-23 Soft Machines Inc. Systems and methods for load canceling in a processor that is connected to an external interconnect fabric
US9348754B2 (en) 2012-10-11 2016-05-24 Soft Machines Inc. Systems and methods for implementing weak stream software data and instruction prefetching using a hardware data prefetcher
US10671391B2 (en) * 2014-02-25 2020-06-02 MIPS Tech, LLC Modeless instruction execution with 64/32-bit addressing
US9495297B2 (en) 2014-07-22 2016-11-15 International Business Machines Corporation Cache line crossing load techniques for a caching system
CN109240944B (zh) * 2018-08-16 2021-02-19 上海天数智芯半导体有限公司 一种基于可变长缓存行的数据读写方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5689672A (en) 1993-10-29 1997-11-18 Advanced Micro Devices, Inc. Pre-decoded instruction cache and method therefor particularly suitable for variable byte-length instructions
US6006324A (en) * 1995-01-25 1999-12-21 Advanced Micro Devices, Inc. High performance superscalar alignment unit
US6167506A (en) * 1997-11-17 2000-12-26 Advanced Micro Devices, Inc. Replacing displacement in control transfer instruction with encoding indicative of target address, including offset and target cache line location
US6499085B2 (en) * 2000-12-29 2002-12-24 Intel Corporation Method and system for servicing cache line in response to partial cache line request
US6938126B2 (en) * 2002-04-12 2005-08-30 Intel Corporation Cache-line reuse-buffer
US6877082B1 (en) * 2002-12-23 2005-04-05 Lsi Logic Corporation Central processing unit including address generation system and instruction fetch apparatus
US7437512B2 (en) * 2004-02-26 2008-10-14 Marvell International Ltd. Low power semi-trace instruction/trace hybrid cache with logic for indexing the trace cache under certain conditions
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
US7509472B2 (en) * 2006-02-01 2009-03-24 Sun Microsystems, Inc. Collapsible front-end translation for instruction fetch
US7917731B2 (en) * 2006-08-02 2011-03-29 Qualcomm Incorporated Method and apparatus for prefetching non-sequential instruction addresses

Also Published As

Publication number Publication date
TWI319157B (en) 2010-01-01
EP1886218B1 (en) 2018-10-24
BRPI0610069A2 (pt) 2010-05-25
JP2008541314A (ja) 2008-11-20
US20060265572A1 (en) 2006-11-23
TW200713033A (en) 2007-04-01
WO2006125220A3 (en) 2007-05-10
CN100583028C (zh) 2010-01-20
EP1886218A2 (en) 2008-02-13
IL187464A0 (en) 2008-03-20
US7404042B2 (en) 2008-07-22
KR100974023B1 (ko) 2010-08-05
JP5059749B2 (ja) 2012-10-31
CN101223503A (zh) 2008-07-16
WO2006125220A2 (en) 2006-11-23

Similar Documents

Publication Publication Date Title
KR100974023B1 (ko) 명령을 패치하는 방법, 파이프라인 프로세서를 위한 패치 장치, 및 상기 파이프라인 프로세서
KR100783828B1 (ko) 단일 스레드 프로그램의 암시적 멀티스레디드 실행을 행할수 있는 멀티스레디드 프로세서
US5941981A (en) System for using a data history table to select among multiple data prefetch algorithms
US6389512B1 (en) Microprocessor configured to detect updates to instructions outstanding within an instruction processing pipeline and computer system including same
US5941980A (en) Apparatus and method for parallel decoding of variable-length instructions in a superscalar pipelined data processing system
US6748518B1 (en) Multi-level multiprocessor speculation mechanism
US6665776B2 (en) Apparatus and method for speculative prefetching after data cache misses
US5701430A (en) Cross-cache-line compounding algorithm for scism processors
US5826074A (en) Extenstion of 32-bit architecture for 64-bit addressing with shared super-page register
US6049672A (en) Microprocessor with circuits, systems, and methods for operating with patch micro-operation codes and patch microinstruction codes stored in multi-purpose memory structure
US6691220B1 (en) Multiprocessor speculation mechanism via a barrier speculation flag
US6625660B1 (en) Multiprocessor speculation mechanism for efficiently managing multiple barrier operations
US7111126B2 (en) Apparatus and method for loading data values
US6609192B1 (en) System and method for asynchronously overlapping storage barrier operations with old and new storage operations
EP0381444A2 (en) Branch prediction
KR101005633B1 (ko) 일정한 개수의 가변 길이 명령을 가진 명령 캐시
US7886135B1 (en) Pipeline replay support for unaligned memory operations
US20090210679A1 (en) Processor and method for store data forwarding in a system with no memory model restrictions
US6321328B1 (en) Processor having data buffer for speculative loads
US6240506B1 (en) Expanding instructions with variable-length operands to a fixed length
JP2003515214A (ja) 計算を狭いオペランドで実施するための方法と装置
JP2886838B2 (ja) スーパースカラパイプライン式データ処理装置の可変長命令の並列デコーディング装置及び方法
US8468306B2 (en) Microprocessor and method for deferred store data forwarding for store background data in a system with no memory model restrictions
EP4202692A1 (en) Apparatus and method for constant detection during compress operations
TWI606393B (zh) 依據快取線決定記憶體所有權以偵測自修正程式碼的處理器與方法

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: 20130628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140627

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 9