KR102334341B1 - 저장 융합 시스템 및 방법 - Google Patents

저장 융합 시스템 및 방법 Download PDF

Info

Publication number
KR102334341B1
KR102334341B1 KR1020207013140A KR20207013140A KR102334341B1 KR 102334341 B1 KR102334341 B1 KR 102334341B1 KR 1020207013140 A KR1020207013140 A KR 1020207013140A KR 20207013140 A KR20207013140 A KR 20207013140A KR 102334341 B1 KR102334341 B1 KR 102334341B1
Authority
KR
South Korea
Prior art keywords
micro
store
operations
data
storage
Prior art date
Application number
KR1020207013140A
Other languages
English (en)
Other versions
KR20200083479A (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 KR20200083479A publication Critical patent/KR20200083479A/ko
Application granted granted Critical
Publication of KR102334341B1 publication Critical patent/KR102334341B1/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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3243Power saving in microcontroller unit
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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/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/3818Decoding for concurrent execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

여기에 작은 저장 동작들을 보다 적은, 보다 큰 저장 동작들로 융합시키는 저장 융합 시스템 및 방법이 설명된다. 상기 시스템은 한 쌍의 인접한 동작들이 연속적인 저장 동작들임을 검출하며, 여기서 인접한 마이크로-동작들은 인접한 디스패치 슬롯들을 통해 흐르는 마이크로-동작들을 지칭하고 연속적인 저장 마이크로-동작들은 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 것을 지칭한다. 그 다음 연속적인 저장 동작들은 데이터 크기들이 동일한지 그리고 저장 동작 어드레스들이 연속적인지를 결정하기 위해 리뷰된다. 그 다음 두 저장 동작은 함께 융합되어 두 배의 데이터 크기를 갖는 하나의 저장 동작 및 하나의 저장 데이터 HI 동작을 형성한다.

Description

저장 융합 시스템 및 방법
관련 출원 상호 참조
본 출원은 2017년 11월 27일자로 출원된 미국 가 출원 번호 15/822,515의 이익을 주장하며, 이의 내용은 여기에 전체가 설명된 것처럼 참조로 인용된다.
프로세서는 일반적으로 페칭, 디코딩(또는 디스패칭) 및 실행 스테이지들을 포함하는 명령 파이프라인과 연관되어 있다. 디코딩 스테이지는 페치 큐로부터 명령을 가져온다. 페칭된 명령이 저장 동작일 경우, 큐 엔트리들은 산술 논리 유닛(ALU) 스케줄러 큐들(ALSQ들), 어드레스 생성 스케줄러 큐들(AGSQ들) 및 저장 큐들(STQ들)에 할당된다. 통상적 프로세서들은 사이클당 하나의 저장 동작을 수행한다. 사이클당 명령 수(IPC, instructions per cycle)를 늘리기 위해, 일부 프로세서는 2-저장 커밋 아키텍처를 사용한다. 이는 다이 영역 상의 제어 로직 추가 및 전력 사용량 증가로 이루어진다.
보다 상세한 이해는 첨부 도면들과 관련하여 예로서 주어진 이하의 구체적인 내용으로부터 이루어질 수 있으며, 첨부 도면들에서:
도 1은 특정 구현 예들에 따른 프로세서의 중앙 처리 유닛의 상위 레벨 블록 및 흐름도이다;
도 2는 특정 구현 예들에 따른 정수 스케줄러 및/또는 실행 유닛의 상위 레벨 블록 및 흐름도이다;
도 3은 특정 구현 예들에 따른 로드-저장/데이터 캐시(LSDC, load-store/data cache) 유닛의 상위 레벨 블록 및 흐름도이다;
도 4는 특정 구현 예들에 따른 저장 융합 방법의 흐름도이다; 그리고
도 5는 하나 이상의 개시된 실시 예가 구현될 수 있는 예시적인 디바이스의 블록도이다.
프로세서들은 일반적으로 페칭, 디코딩(또는 디스패칭) 및 실행 스테이지들을 포함하는 명령 파이프라인에 의하여 작동한다. 디코딩 또는 디스패칭 스테이지는 페치 큐로부터 명령을 가져온다. 페칭된 명령이 저장 마이크로-동작일 경우, 큐 엔트리들은 산술 논리 유닛(ALU) 스케줄러 큐들(ALSQ들), 어드레스 생성 스케줄러 큐들(AGSQ들) 및 저장 큐들(STQ들)에 할당된다. 각 저장 마이크로-동작은 독립적으로 수행되고 통상적 프로세서들은 사이클당 하나의 저장 마이크로-동작을 수행한다.
여기에 작은 저장 마이크로-동작들을 보다 적은, 보다 큰 저장 마이크로-동작들로 융합시키는 저장 융합 시스템 및 방법이 설명된다. 특히, 상기 시스템은 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들임을 검출한다. 그 다음 상기 연속적인 저장 마이크로-동작들이 상기 데이터 크기들이 동일한지 그리고 상기 저장 마이크로-동작 어드레스들이 연속적인지를 결정하기 위해 리뷰된다. 상기한 조건들이 충족될 경우, 상기 연속적인 저장 마이크로-동작들은 함께 융합되어 상기 두 배의 데이터 크기를 갖는 하나의 저장 마이크로-동작 및 상기 두 저장 각각에 하나씩 두 개의 저장 데이터 마이크로-동작들을 형성한다. 이는 STQ 및 AGSQ 큐 엔트리들을 절감함으로써 성능을 증가시키고, 예를 들어 캐시에 기록하는 어드레스 생성, 저장 파이프 흐름 및 저장 커밋 수를 감소시킴으로써 전력을 절감한다. 저장 융합 시스템 및 방법은 예를 들어 복잡성 증가, 전력 요구량 증가 및 보다 높은 동작 빈도 달성의 어려움 증가를 비롯한 2-저장-커밋의 단점들 없이 사이클당 2-저장 아키텍처의 상당한 IPC 이득을 효과적으로 실현한다.
도 1은 특정 구현 예들에 따른 프로세서(100)의 중앙 처리 유닛(105)의 상위 레벨 블록 및 흐름도이다. 중앙 처리 유닛(105)은 스케줄러 및/또는 실행 유닛(SCEX, scheduler and execution unit)(115)에 마이크로 동작들(micro-operations)(도 1에는 마이크로-op들(micro-ops)로 도시됨)을 제공하는 디코더 유닛(110)을 포함한다. 디코더 유닛(110)은 캐시(122) 및 마이크로-op 캐시(124)에 연결되는 분기 예측기(120)를 포함한다. 캐시(122)는 디코더 (126)에 또한 연결된다. 디코더(126) 및 마이크로-op 캐시(124)는 마이크로-op 큐 (128)에 연결되며, 이는 디스패치 로직(129)을 통해 동작들을 디스패칭한다. 디스패치 로직(129)에는 저장 융합 검출 로직(SFDL, store fusion detection logic)(128)이 연결된다.
SCEX(115)는 정수 SCEX(130) 및 부동 소수점 SCEX(132)을 포함하며, 둘 다 캐시(134)에 연결된다. 캐시(134)는 L2 캐시(136), LDQ들(138) 및 STQ들(140)에 또한 연결된다. 정수 SCEX(130)는 스케쥴러(151)에 연결되는 정수 리네이머(150)를 포함하며, 이는 산술 로직 유닛(ALU) 스케쥴러 큐들(ALSQ들)(152) 및 어드레스 생성 유닛(AGU) 스케쥴러 큐들(AGSQ들)(154)을 포함한다. 스케줄러(151), 특히 ALSQ들(152) 및 AGSQ들(154)은 각각 ALU0-ALU3(156) 및 AGU0-AGU1(158)에 또한 연결된다. 한 쌍의 멀티플렉서(M0 및 M1)(157) 및 저장 데이터 인터페이스(159)는 ALU0 및 ALU1을 STQ(140)에 연결하고 ALU2 및 ALU3을 STQ들(140)에 연결한다. LDQ들(138) 및 STQ들(140)은 경로(180)를 통해 스케줄러(151)에 연결되어 할당 해제 신호들을 전송한다. 정수 SCEX(130)는 정수 물리 파일 레지스터(160)를 또한 포함한다. 부동 소수점 SCEX(132)는 부동 소수점 리네이머(170)를 포함하며, 이는 스케쥴러(172)에 연결된다. 스케줄러(172)는 승산기들(174) 및 가산기들(176)에 또한 연결된다. 부동 소수점 SCEX(132)는 부동 소수점 물리 파일 레지스터(178)를 또한 포함한다.
파이프라인 프로세서는 계속되는 명령 스트림이 파이프라인으로 공급될 것을 필요로 한다. 분기 예측기(120)는 어떤 마이크로-명령 집합이 파이프라인 프로세서에 페치되어 실행되는지를 예측한다. 이러한 마이크-명령들은 캐시(122)에 페치되고 저장되며, 이것들은 차례로 디코더(126)에 의해 디코딩된다. 디코더(126)가 캐시(122)로부터의 마이크로-op들을 디코딩할 때 마이크로-op 캐시(124)는 분기 예측기(120)로부터의 마이크로-op들을 캐싱한다. 마이크로-op 큐(128)는 디스패치 로직(129)을 통해 실행할 마이크로-동작들을 디스패칭하기 위해 디코더(126) 및 마이크로-op 캐시(124)로부터의 마이크로-동작들을 저장하고 큐에 세운다.
종래 파이프라인 아키텍처에서, 각 마이크로 동작은 독립적으로 디스패칭 및 핸들링된다. 이는 경우에 따라 비효율적인 처리로 이어질 수 있다. 예를 들어, 저장 마이크로-동작은 다음 세 개의 구성요소를 포함한다: 저장 큐로 향하는 로드/저장 동작; AGSQ로 향하는 어드레스 생성 동작; 및 ALSQ로 향하는 저장 데이터 동작. 그에 따라 각 저장 마이크로 동작은 세 개의 큐 엔트리 및 관련 처리를 사용하여 저장 마이크로-동작을 완료한다.
일 구현 예에 따르면, SFDL(128)은 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인지 여부를 결정한다. SFDL(128)은 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖고 연속적인 어드레스들에 액세스하고 있는지 여부를 또한 확인한다. 일 구현 예에서, SFDL(128)은 저장 마이크로-동작들 각각의 어드레싱 모드를 체크한다. 예를 들어, 4 바이트 저장 마이크로-동작의 경우, 제1 저장 마이크로-동작의 어드레싱 모드는 +4의 변위를 갖는 베이스 레지스터(R)를 사용할 수 있고 제2 저장 마이크로-동작의 어드레싱 모드는 +8의 변위를 갖는 베이스 레지스터(R)를 사용할 수 있다. 이 경우, 제1 저장 마이크로-동작 및 제2 저장 마이크로-동작에 대한 어드레스들은 연속적일 것이다. 즉, 동일한 레지스터들이 변위에 대한 연속적인 상수들 또는 오프셋들로 사용되고 있다. 일 구현에서, 변위는 양 또는 음일 수 있다.
저장 마이크로-동작들이 동일한 데이터 크기들을 갖고 연속적인 어드레스들을 사용하는 경우, SFDL(128)은 연속적인 저장 마이크로-동작들을 두 배의 데이터 크기를 갖는 하나의 저장 마이크로-동작으로 융합시킨다. 특히, 보다 낮은 어드레스를 갖는 저장 마이크로-동작은 x 데이터 크기를 갖는 저장 마이크로-동작으로부터 2x 데이터 크기를 갖는 저장 마이크로-동작으로 변환되고, 보다 높은 어드레스를 가진 저장 마이크로-동작은 x 데이터 크기를 갖는 저장 마이크로-동작으로부터 저장 데이터 HI 마이크로-동작으로 변환되며 이때 로드/저장 마이크로-동작 및 어드레스 생성 마이크로-동작 구성요소들은 억제된다. 즉, 저장 데이터 HI 마이크로-동작은 ALSQ(152)에서의 큐 엔트리만 사용한다. 저장 융합은 보다 큰 데이터 크기 저장 마이크로-동작들에 이용 가능한 보다 큰 STQ 대역폭을 2x 데이터 크기를 갖는 저장 마이크로-동작에 활용하므로 STQ(140) 및 AGSQ(154)의 큐 엔트리들이 필요하지 않다.
동작이 오래된 순서에 따르게 또는 큐들을 순서대로 유지 관리하기 위해, 모든 저장 마이크로-동작이 특정 저장 큐 엔트리 또는 저장 큐 식별자와 연관된다. 그러한 저장 큐 엔트리는 디스패치시 프로그램 순서로 저장 마이크로-동작에 할당된다 (예를 들어, 저장 마이크로-동작은 저장 큐 엔트리 0에 할당될 수 있고, 프로그램 순서에서 다음 저장 마이크로-동작이 저장 큐 엔트리 1에 할당될 것이고, 프로그램 순서에서 다음 저장 마이크로-동작이 저장 큐 엔트리 2에 할당될 기타 등등이다). SFDL(128)은 이러한 정보를 사용하여 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작 양자에 동일한 저장 큐 엔트리 번호를 설정한다. 또한, SFDL(128) 및 디스패치 로직(129)은 이러한 데이터가 2x 데이터 크기를 갖는 저장 마이크로-동작의 높은 부분임을 나타내도록 저장 데이터 HI 마이크로-동작에 마이크로-동작 유형을 설정한다. ALU0-ALU3(156)은 마이크로-동작 유형을 사용하여 저장 데이터 HI 마이크로동작에서의 데이터로 이루어져야 할 것이 무언인지 이해한다.
SFDL(128)이 여기서 설명된 바와 같이 연속적인 저장 마이크로-동작들을 융합했으면, 디스패치 로직(129)은 적절하게 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작을 ALSQ들(152) 및 AGSQ들(154)로 디스패칭한다. ALSQ들(152) 및 AGSQ들(154)은 적절하게 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작을 ALU0-ALU3(156)에 발행한다. ALU0-ALU3(156)은 저장 데이터 HI 마이크로-동작에서의 데이터가 저장 데이터 필드의 보다 높은 또는 보다 상측 부분에 기록되어야 함을 나타내기 위한 제어 비트(들)를 저장 융합 제어 인터페이스(159)를 통해 STQ들(140)로 전송한다. 즉, 제어 비트(들)는 저장 데이터 HI 마이크로-동작에서의 데이터가 저장될 때 시프팅될 필요가 있음을 나타낸다. 2x 데이터 크기를 갖는 저장 마이크로-동작에서의 데이터는 저장 데이터 필드의 하측 부분에 기록된다. STQ들(140)은 요청된 기록들을 수행한다. 일 구현 예에서, 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작 양자가 그것들의 데이터를 전달했으면 저장 로드 포워드 동작이 실행될 수 있다.
예증적 예로, 다음 두 명령을 고려한다:
MOV [RBX+8], R8(64b 데이터 크기)
MOV [RBX+16], R9(64b 데이터 크기)
종래 아키텍처에서, 상기한 두 명령은 다음과 같이 두 저장 마이크로-동작이 된다:
mov.q [rbx+8], r8
mov.q [rbx+16], r9
저장 융합 방법 및 시스템에 따르면, 두 저장 마이크로-동작은 다음이 될 것이다:
mov.o [rbx+8], r8
stdatahi.q r9
여기서 제1 마이크로-동작은 128 비트 저장 마이크로-동작이고 제2 마이크로-동작은 데이터 전용 저장 마이크로-동작이다. 여기에 설명되는 바와 같이, ALU(들)로부터 STQ(들)로 전달되는 제어 비트(들)는 STQ(들)에 저장 데이터 전용 마이크로-동작으로부터의 데이터를 STQ(들)의 상측 64b에 둘 것을 나타낸다.
이는 양의 변위의 일례이다.
다른 양의 어드레스 방향의 예증적 예에서, 명령들은 MOV dword [addr] 명령 다음 MOV dword [addr+4] 명령일 수 있다. 이 경우, 제2 저장 마이크로-동작보다 낮은 어드레스로의 제1 저장 마이크로-동작 저장들 및 두 개의 4 바이트 저장 마이크로-동작이 하나의 8 바이트 저장 마이크로-동작으로 융합된다. 특히, 제1 저장 마이크로-동작은 AGSQ 또는 STQ 큐 엔트리 또는 토큰을 사용하고 64 비트의 데이터 크기를 갖는 저장 마이크로-동작으로 변환된다. 제2 저장 마이크로-동작의 저장 데이터 마이크로-동작 구성요소는 그것이 LO 저장 데이터로 융합됨을 나타내기 위한 op코드 값(mov와 기능적으로 유사한)을 가질 수 있다. 제2 저장 마이크로-동작은 AGSQ 또는 STQ 큐 엔트리 또는 토큰을 사용하고 저장 데이터 전용 마이크로-동작으로 변환된다. 저장 데이터 전용 마이크로-동작은 그것이 HI 저장 데이터로 융합됨을 나타내기 위한 op코드 값(32의 즉시 값을 갖는 즉시-좌-시프트와 기능적으로 유사한)을 가질 수 있다.
다른 예증적 예에서, 음의 어드레스 방향이 사용될 수 있다. 예를 들어, PUSH32b 명령 다음 다른 PUSH32b 명령 또는 MOV dword [addr] 명령 다음 MOV dword [addr-4] 명령. 이 경우, 제1 저장 마이크로-동작보다 낮은 어드레스로의 제2 저장 마이크로-동작 저장들 및 두 개의 4 바이트 저장 마이크로-동작이 하나의 8 바이트 저장 마이크로-동작으로 융합된다. 특히, 제1 저장 마이크로-동작은 AGSQ 또는 STQ 큐 엔트리 또는 토큰을 사용하고 저장 데이터 전용 마이크로-동작으로 변환된다. 저장 데이터 전용 마이크로-동작은 그것이 HI 저장 데이터로 융합됨을 나타내기 위한 op코드 값(32의 즉시 값을 갖는 즉시-좌-시프트와 기능적으로 유사한)을 가질 수 있다. 제2 저장 마이크로-동작은 AGSQ 또는 STQ 큐 엔트리 또는 토큰을 사용하고 64 비트의 데이터 크기를 갖는 저장 마이크로-동작으로 변환된다. 제2 저장 마이크로-동작의 저장 데이터 마이크로-동작 구성요소는 그것이 LO 저장 데이터로 융합됨을 나타내기 위한 op코드 값(mov와 기능적으로 유사한)을 가질 수 있다. 다른 예에서 명령들은 PUSH64b 명령 다음 다른 PUSH64b 명령 또는 MOV qword [addr] 명령 다음 MOV qword [addr-8] 명령일 수 있다. 이는 데이터 크기가 64 비트에서 128 비트로 두 배가 된다는 점을 제외하고는 유사하게 동작한다.
저장 융합에 대한 파이프라인 처리에 추가 고려 사항들 또는 변경 사항들이 있다. 도 2에 리타이어 유닛(208)으로 도시된 바와 같은 리타이어 유닛은 저장 데이터 전용 동작에 관한 저장-리타이어 표시를 시그널링하지 않는다. 리타이어 큐(208)에서의 저장들은 사이클에서 얼마나 많은 저장이 리타이어되었는지(추측에 근거하지 않게 되었는지)를 나타내기 위한 리타이어 하드웨어에 의해 사용되는 "저장" 비트를 통상적으로 갖는다. 융합된 저장에서의 저장 데이터 전용 동작에 대한 이러한 저장소-리타이어 표시 억제는 단순히 그 리타이어 큐 엔트리에 "저장" 비트를 설정하지 않음으로써 이루어질 수 있다.
융합된 저장들에 대한 예외 핸들링 또한 변경된다. 저장들 중 하나에는 페이지 폴트 또는 트랩과 같은 아키텍처 또는 마이크로-아키텍처 예외가 있을 수 있다. 그러나, 융합된 저장들의 경우, 예외 로직이 단일 융합된 저장에 관한 예외만을 검출할 수 있기 때문에 예외 로직은 저장들을 독립적인 동작들로 보지 않는다. 예외 로직은 어느 저장에 아키텍처상 예외가 있어야 하는지를 결정할 수 없다. 이는 융합된 저장 마이크로-동작들이 리타이어 큐, 예를 들어 리타이어 큐(208)에 추가 비트를 가져 융합된 저장 동작을 나타내는 원자 그룹으로서 디스패칭될 것을 요구함으로써 핸들링된다. 융합된 저장 동작에서 폴트 또는 트랩이 발생하면, 예외가 재동기화 폴트로 변환되고 명령들이 재실행되며, 이러한 재실행시 그것들이 융합 없이 디스패칭되도록 저장 융합 메커니즘은 하나의 디스패치 사이클 동안 일시적으로 비활성화된다. 예외가 다시 발생할 경우, 그것은 이제 통상적인 방식으로 핸들링될 것이다.
메모리 리네이밍을 이용하는 저장 융합을 구현할 때 추가 고려 사항들이 있다. 이러한 고려 사항들을 고려하지 않으면, 메모리 리네이밍 기회가 손실될 수 있다. 예를 들어, 저장 융합 없이, 보다 오래된 저장 명령을 동일한 어드레스에 정확히 매칭시키는 로드 명령이 보다 오래된 저장을 성공적으로 메모리 리네이밍할 것이다. 그러나, 저장 융합이 있으면, 보다 오래된 저장이 융합된 저장의 HI 부분으로 융합될 수 있다. 로드 어드레스가 융합된 저장의 어드레스와 정확히 매칭되지 않을 것이고, 통상적인 메모리 리네이밍 로직은 로드가 메모리 리네이밍에 실패하게 하여 메모리 리네이밍된 로드가 재동기화 폴트를 일으켜 성능 저하를 야기할 것이다. 이는 일 구현 예에서 융합된 저장 마이크로-동작이 메모리 리네이밍을 위해 마치 실제 저장인 것처럼 행동하지만, 그것이 융합된 저장의 HI 부분임을 나타내는 저장 데이터 HI 마이크로-동작에 대한 메모리 리네이밍 추적 구조(memfile로 알려져 있는)에 추가 HI 저장 비트를 사용하여 그것이 융합된 저장의 HI 부분이었음을 상기시킴으로써 해결된다. 로드가 HI 융합된 저장에 대해 메모리 리네이밍을 한 때, memfile은 그것의 메모리 리네이밍된 STQ ID 정보를 갖는 HI 저장 비트를 로드로 전달한다. 로드는 그것의 리네이밍된 STQ ID를 올바른 저장을 가리키도록 조정하기 위해 memfile에서의 모든 저장에 관해 HI 저장 비트들을 사용한다(이는 HI 저장들이 STQ 엔트리를 차지하지 않기 때문이다). 또한, 리네이밍이 검증될 때, 로드의 HI 저장 비트가 로드의 어드레스가 정확히 매칭되는 대신 저장의 어드레스 + 로드 데이터 크기와 같은지를 체크하는데 사용된다. 이는 로드가 융합된 저장의 상반부의 어드레스와 정확히 매칭되고, 그에 따라 메모리 리네이밍이 정확하고 성공했음을 의미한다.
도 2는 특정 구현 예들에 따른 디스패치 로직(201), SFDL Op 0/1 - SFDL Op 4/5(202) 및 정수 스케줄러/실행 유닛(200) 사이의 인터페이스들의 상위 레벨 블록도이다. 특히, 마이크로-동작들(Op0 - Op5)이 디스패치 로직(201)에서의 관련 디스패치 슬롯들을 통해 정수 스케줄러/실행 유닛(200)으로 디스패칭되고 SFDL Op 0/1 - SFDL Op 4/5(202)는 디스패치 로직(201)에 연결되어 저장 융합 후보들을 결정한다.
정수 스케줄러/실행 유닛(200)은 ALSQ0-ALSQ3(204), AGSQ0-AGSQ1(206) 및 리타이어 큐(208)에 연결되는 정수 리네이머/매퍼(203)를 포함한다. ALSQ0-ALSQ3(204) 및 AGSQ0-AGSQ1(206)은 순방향 멀티플렉서들(210)에 또한 연결되며, 이들은 차례로 각각 ALU0-ALU3(212) 및 AGU0-AGU1(214)에 연결된다. ALU0-ALU3(212)은 한 쌍의 멀티플렉서 M0 및 M1(213) 및 저장 데이터 인터페이스(232)를 통해 STQ들(218)에 연결된다. AGU0-AGU1(214)은 LDQ들(216) 및 STQ들(218)에 연결되고 큐(208)를 리타이어한다. 정수 스케줄러/실행 유닛(200)은 ALU0-ALU3(212), LDQ들(216) 및 STQ들(218)에 연결되는 물리 파일 레지스터(220)를 또한 포함한다. LDQ들(216) 및 STQ들(218)은 경로(230)를 통해 AGSQ0-AGSQ1(206)에 연결되어 할당 해제 신호들을 리아티어 큐(208)에 전송한다.
도 1과 유사하게, 마이크로-동작들은 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인지 여부를 결정하기 위해 SFDL Op 0/1 - SFDL Op 4/5(202)에 의해 검사된다. 인접한 마이크로-동작들은 인접한 디스패치 슬롯들을 통해 흐르는 마이크로-동작들을 지칭하고 연속적인 저장 마이크로-동작들은 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 것을 지칭한다. 특히, SFDL Op 0/1은 마이크로-동작들 0 및 1로부터 저장 융합 후보를 결정하고, SFDL Op 1/2은 마이크로-동작들 1 및 2로부터 저장 융합 후보를 결정하고, SFDL Op 2/3은 마이크로-동작들 2 및 3로부터 저장 융합 후보를 결정하고, SFDL Op 3/4는 마이크로-동작들 3 및 4로부터 저장 융합 후보를 결정하며, SFDL Op 4/5는 마이크로-동작들 4 및 5로부터 저장 융합 후보를 결정한다. 각각의 SFDL Op 0/1 - SFDL Op 4/5(202) 또한 여기에 설명된 바와 같이 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖고 연속적인 어드레스들에 액세스하고 있는지 여부를 확인한다. SFDL 로직은 대부분 병렬로 동작하여, 저장 융합 적격을 위한 인접한 마이크로-동작들의 쌍들을 독립적으로 체크한다. 그러나, 가장 오래된 마이크로-동작들이 보다 높은 우선 순위로 융합되도록 우선 순위가 적용된다. 또한, 마이크로-동작이 융합된 저장의 부분이면, 그러한 마이크로-동작은 다음으로 가장 오래된 SFDL 블록에 대한 저장 융합에 참여하는데 부적격이다. 예를 들어, 세 개의 저장 마이크-동작이 모두 연속적인 바이트들(연속적인 어드레스들)인 Op 0, Op 1 및 Op 2에 디스패칭된다고 가정한다. SFDL Op 0/1과 SFDL Op 1/2 양자는 그것들 각각의 동작들이 융합되어야 할 수 있다고 결정할 것이다. SFDL Op 0/1이 우선 순위를 갖고 Op 0 및 Op 1을 융합된 저장 동작으로 융합한다. Op 1은 보다 오래된 융합된 저장소의 부분이었므로, 그것은 Op 2와 융합되는데 부적격이며, 그에 따라 SFDL Op 1/2는 Op 1 및 Op2를 융합된 저장 동작으로 융합할 수 없게 된다.
각각의 SFDL Op 0/1 - SFDL Op 4/5(202)는 적절한 저장 마이크로-동작들을 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작으로 융합하며 이때 로드/저장 마이크로-동작 및 어드레스 생성 마이크로-동작 구성요소들은 억제되고 단지 ALSQ0-ALSQ3(204)에서의 큐 엔트리만 필요하다. 여기서 언급된 바와 같이, 각 SFDL Op 0/1 - SFDL Op 4/5(202)는 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작 양자에 동일한 STQ(218) 큐 엔트리 번호를 설정하고 이러한 데이터가 2x 데이터 크기를 갖는 저장 마이크로-동작의 높은 부분임을 나타내도록 저장 데이터 HI 마이크로-동작에 마이크로-동작 유형을 설정한다.
각 SFDL Op 0/1 - SFDL Op 4/5(202)이 필요에 따라 연속적인 저장 마이크로-동작들을 융합했으면, 디스패치 로직(201)은 적절하게 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작을 ALSQ0-ALSQ3(204) 및 AGSQ0-AGSQ1(206)으로 디스패칭한다. ALSQ0-ALSQ3(204) 및 AGSQ0-AGSQ1(206)은 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작을 ALU0-ALU3(212)에 발행한다. ALU0-ALU3(212)는 저장 데이터 HI 마이크로-동작에서의 데이터가 저장 데이터 필드의 보다 높은 또는 보다 상측 부분에 기록되어야 함을 나타내기 위한 제어 비트(들)를 저장 데이터 인터페이스(232)를 통해 STQ들(218)로 전송한다. STQ들(218)은 요청된 기록들을 수행한다.
도 3은 여기서 도 1 및 도 2에 대해 설명된 바와 같은 특정 구현 예들 및 기능들에 따른 로드-저장/데이터 캐시(LSDC, load-store/data cache) 유닛(300)의 상위 레벨 블록 및 흐름도이다. LSDC 유닛(300)은 LDQ(302), STQ(304), 로드 0(L0) 선택기(306) 및 로드 1(L1) 선택기(308)를 포함한다. STQ(304)는 ALU들(도시되지 않음)로부터의 데이터를 저장 데이터 HI 마이크로-동작에서의 데이터가 저장될 때 시프팅될 필요가 있음을 나타내는 제어 비트(들)와 함께 저장 데이터 인터페이스(305)를 통해 얻는다. L0 선택기(306)는 변환 색인 버퍼(TLB) 및 마이크로-태그 액세스 파이프라인 0(TLB0)(310) 및 데이터 캐시 액세스 파이프라인(데이터 파이프 0)(312)에 연결된다. L1 선택기(308)는 변환 색인 버퍼(TLB) 및 마이크로-태그 액세스 파이프라인 1(TLB1)(314) 및 데이터 캐시 액세스 파이프라인(데이터 파이프 1)(316)에 연결된다. TLB0(310) 및 TLB1(314)은 L1/L2 TLB(318), 페이지 워커(323) 및 마이크로-태그 어레이(319)에 또한 연결되며, 이는 차례로 잘못된 어드레스 버퍼(MAB, miss address bufer)(320)에 연결되고, 캐시(322)로부터의 데이터 판독을 보조한다. 캐시(322)에는 데이터 파이프 0(312) 및 데이터 파이프 1(316)이 연결된다. STQ(304)는 프리-페처(324) 및 저장 파이프 선택기(326)에 연결되며, 이는 차례로 저장 파이프라인(STP)(328)에 연결된다. STP(328)는 L1/L2 TLB(318) 및 마이크로-태그 어레이(319)에 또한 연결된다. STQ(304)는 저장 커밋 파이프라인(330)에 또한 연결되며, 이는 차례로 기록 조합 버퍼(WCB, write combining buffer)(332) 및 캐시(322)에 연결된다.
도 4는 특정 구현 예들에 따른 저장 융합 방법의 흐름도(400)이다. 마이크로-동작들이 디스패치 로직을 통해 디스패칭된다(단계 402). 저장 융합 검출 로직은 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인지 여부를 검출한다(단계 404). 인접한 마이크로-동작들은 인접한 디스패치 슬롯들을 통해 흐르는 마이크로-동작들을 지칭하고 연속적인 저장 마이크로-동작들은 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 것을 지칭한다. 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들이 아닐 경우, 디스패칭된 다음 마이크로-동작들의 세트를 리뷰한다(단계 402). 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들일 경우, 저장 융합 검출 로직은 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖는지 여부를 결정한다(단계 406). 연속적인 저장 마이크로-동작들이 동일한 크기가 아닐 경우, 디스패칭된 다음 마이크로-동작들의 세트를 리뷰한다(단계 402). 연속적인 저장 마이크로-동작들이 동일한 크기일 경우, 저장 융합 검출 로직은 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있는지 여부를 결정한다(단계 408). 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있지 않을 경우, 디스패칭된 다음 마이크로-동작들의 세트를 리뷰한다(단계 402). 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있을 경우, 저장 융합 검출 로직은 고려 중인 두 개의 마이크로-동작의 보다 오래된 마이크로-동작이 보다 오래된 융합된 저장 동작의 부분인지를 결정한다(단계 410). 보다 오래된 저장 융합의 부분일 경우, 저장 융합이 수행되지 않고(단계 412) 디스패칭된 다음 마이크로-동작들의 세트를 리뷰한다(단계 402). 보다 오래된 저장 융합의 부분이 아닐 경우, 저장 융합 검출 로직은 연속적인 저장 마이크로-동작들을 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작으로 융합한다(단계 414).
저장 융합 검출 로직은 2x 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 HI 마이크로-동작 양자에 동일한 저장 큐 엔트리 번호를 설정한다(단계 416). 저장 융합 검출 로직 및 디스패치 로직은 이러한 데이터가 2x 데이터 크기를 갖는 저장 마이크로-동작의 높은 부분임을 나타내도록 저장 데이터 HI 마이크로-동작에 마이크로-동작 유형을 설정한다(단계 418). ALU들은 저장 데이터 HI 마이크로-동작에서의 데이터가 저장될 때 시프팅되도록 제어 비트(들)를 STQ들에 전송한다(단계 420). 2x 데이터 크기를 갖는 저장 마이크로-동작에서의 데이터는 저장 데이터 필드의 하측 부분에 기록된다(단계 422). 동작들 중 보다 오래된 동작은 단지 예시이고 다른 순서들이 사용될 수도 있다.
도 5는 하나 이상의 개시된 예의 하나 이상의 부분이 구현될 수 있는 예시적인 디바이스(500)의 블록도이다. 디바이스(500)는 예를 들어, 헤드 장착 디바이스, 서버, 컴퓨터, 게임 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 이동 전화 또는 태블릿 컴퓨터를 포함한다. 디바이스(500)는 컴퓨팅 노드 또는 프로세서(502), 메모리(504), 스토리지(506), 하나 이상의 입력 디바이스(508) 및 하나 이상의 출력 디바이스(510)를 포함한다. 디바이스(500)는 또한 입력 드라이버(512) 및 출력 드라이버(514)를 선택적으로 포함한다. 디바이스(500)는 도 5에 도시되지 않은 추가 구성요소들을 포함하는 것으로 이해된다.
컴퓨트 노드 또는 프로세서(502)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일한 다이, 또는 각 프로세서 코어가 CPU 또는 GPU일 수 있는 하나 이상의 프로세서 코어상에 위치되는 CPU 및 GPU를 포함한다. 메모리(504)는 컴퓨트 노드 또는 프로세서(502)와 동일한 다이 상에 위치되거나, 또는 컴퓨트 노드 또는 프로세서(502)와 별개로 위치된다. 일 구현 예에서, 메모리(504)는 휘발성 또는 비휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM 또는 캐시를 포함한다.
스토리지(506)는 고정식 또는 착탈식 스토리지, 예를 들어, 하드 디스크 드라이브, 고체 상태 드라이브, 광 디스크 또는 플래시 드라이브를 포함한다. 입력 디바이스들(508)은 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 생체 인식 스캐너, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)을 포함한다. 출력 디바이스들(510)은 디스플레이, 스피커, 프린터, 촉각 피드백 디바이스, 하나 이상의 라이트, 안테나 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 네트워크 카드)를 포함한다.
입력 드라이버(512)는 컴퓨트 노드 또는 프로세서(502) 및 입력 디바이스들(508)과 통신하고, 컴퓨트 노드 또는 프로세서(502)가 입력 디바이스들(508)로부터 입력을 수신하게 한다. 출력 드라이버(514)는 컴퓨트 노드 또는 프로세서(502) 및 출력 디바이스들(510)과 통신하고, 프로세서(502)가 출력 디바이스들(510)로 출력을 전송하게 한다. 입력 드라이버(512) 및 출력 드라이버(514)는 선택적 구성요소들이고, 입력 드라이버(512) 및 출력 드라이버(514)가 존재하지 않는 경우 디바이스(500)는 동일한 방식으로 동작할 것이라는 점이 유의된다.
개괄적으로, 저장 마이크로-동작들을 융합시키기 위한 방법은 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인지 여부를 결정하는 단계를 포함한다. 상기 인접한 마이크로-동작들은 인접한 디스패치 슬롯들을 통해 흐르는 마이크로-동작들을 지칭하고 상기 연속적인 저장 마이크로-동작들은 상기 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 것을 지칭한다. 상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖는지 여부 그리고 연속적인 어드레스들에 액세스하고 있는지 여부에 관한 결정이 이루어진다. 상기 연속적인 저장 마이크로-동작들은 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 전용 마이크로-동작으로 융합된다. 일 구현 예에서, 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작에 대해 동일한 저장 큐 엔트리 번호가 걸정된다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작에서의 데이터가 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에 대한 상측 데이터 부분임을 나타내도록 상기 저장 데이터 전용 마이크로-동작에 마이크로-동작 유형이 설정된다. 일 구현 예에서, 저장될 때 상기 데이터의 시프팅을 가능하게 하기 위한 적어도 하나의 제어 비트가 저장 큐로 전송된다. 일 구현 예에서, 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에서의 상기 데이터는 저장 데이터 필드의 하측 부분에 저장되고 상기 저장 데이터 전용 마이크로-동작에서의 데이터는 상기 저장 데이터 필드의 상측 부분에 저장된다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작은 저장 큐 엔트리들 및 어드레스 생성 큐 엔트리들의 사용을 억제한다. 일 구현 예에서, 상기 연속적인 마이크로-동작들 각각의 어드레싱 모드가 리뷰된다. 일 구현 예에서, 하측 어드레스를 갖는 상기 연속적인 저장 마이크로-동작이 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작으로 전환된다. 일 구현 예에서, 보다 높은 어드레스를 갖는 상기 연속적인 저장 마이크로-동작은 상기 저장 데이터 전용 마이크로-동작으로 전환된다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작에 대해 저장-리타이어 표시가 억제된다. 일 구현 예에서, 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작 중 적어도 하나에 대한 예외의 발생은 상기 인접한 마이크로-동작들을 융합 없이 재실행시킨다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작에 대한 메모리-리네이밍 추적 구조에 높은 저장 비트가 설정되고, 상기 높은 저장 비트는 저장 큐 엔트리를 결정하는데 사용된다.
개괄적으로, 저장 마이크로-동작들을 융합시키기 위한 프로세서는 마이크로-동작들을 디스패칭하도록 구성된 디스패치 로직 및 상기 디스패치 로직에 연결되는 저장 융합 검출 로직을 포함한다. 상기 저장 융합 검출 로직은 인접한 마이크로-동작들이 연속적인 저장 마이크로 동작들인지 여부를 결정하되, 상기 인접한 마이크로-동작들은 인접한 디스패치 슬롯들을 통해 흐르는 마이크로-동작들을 지칭하고 상기 연속적인 저장 마이크로-동작들은 상기 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 것을 지칭하고, 상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖는지 여부를 결정하도록, 상기 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있는지 여부를 결정하도록 그리고 상기 연속적인 저장 마이크로-동작들을 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 전용 마이크로-동작으로 융합시키도록 구성된다. 일 구현 예에서, 상기 디스패치 로직 및 상기 저장 융합 검출 로직은 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작에 대한 동일한 저장 큐 엔트리 번호를 걸정하도록 구성된다. 일 구현 예에서, 상기 디스패치 로직 및 상기 저장 융합 검출 로직은 상기 저장 데이터 전용 마이크로-동작에서의 데이터가 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에 대한 상측 데이터 부분임을 나타내도록 상기 저장 데이터 전용 마이크로-동작에 마이크로-동작 유형을 설정하도록 구성된다. 일 구현 예에서, 상기 프로세서는 저장 큐 및 상기 저장 큐와 통신하는 산술 로직 유닛을 포함한다. 상기 산술 로직 유닛은 저장될 때 상기 데이터의 시프팅을 가능하게 하기 위한 적어도 하나의 제어 비트를 상기 저장 큐로 전송하도록 구성된다. 일 구현 예에서, 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에서의 상기 데이터는 저장 데이터 필드의 하측 부분에 저장되고 상기 저장 데이터 전용 마이크로-동작에서의 데이터는 상기 저장 데이터 필드의 상측 부분에 저장된다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작은 저장 큐 엔트리들 및 어드레스 생성 큐 엔트리들의 사용을 억제한다. 일 구현 예에서, 하측 어드레스를 갖는 상기 연속적인 저장 마이크로-동작이 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작으로 전환되고, 보다 높은 어드레스를 갖는 상기 연속적인 저장 마이크로-동작은 상기 저장 데이터 전용 마이크로-동작으로 전환된다. 일 구현 예에서, 상기 저장 데이터 전용 마이크로-동작에 대해 저장-리타이어 표시가 억제되고, 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작 중 적어도 하나에 대한 예외의 발생은 상기 인접한 마이크로-동작들을 융합 없이 재실행시킨다.
여기서의 개시 내용에 기초하여 많은 변경이 가능하다는 것이 이해되어야 한다. 특징들 및 요소들이 특정 조합들로 상술되었지만, 각 특징 또는 요소는 다른 특징들 및 요소들 없이 단독으로 또는 다른 특징들 및 요소들과 함께 또는 다양한 조합으로 사용될 수 있다.
제공된 방법들은 범용 컴퓨터, 프로세서 또는 프로세서 코어로 구현될 수 있다. 적합한 프로세서들은 예로서, 범용 프로세서, 전용 프로세서, 종래 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로 프로세서, DSP 코어와 공동의 하나 이상의 마이크로 프로세서, 제어기, 마이크로 제어기, 주문형 반도체들(ASIC들), 필드 프로그램 가능 게이트 어레이들(FPGA들) 회로들, 임의의 다른 유형의 집적 회로(IC) 및/또는 상태 기계를 포함한다. 상기한 프로세서들은 처리된 하드웨어 설명 언어(HDL) 명령들 및 넷리스트들(컴퓨터 판독 가능 매체에 저장될 수 있는 상기한 명령들)을 비롯한 다른 중간 데이터의 결과들을 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 상기한 처리의 결과들은 그 다음 실시 예들의 양태들을 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에 사용되는 마스크워크들일 수 있다.
여기에 제공된 방법들 또는 흐름도들은 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독 가능 저장 매체에 통합되는 컴퓨터 프로그램, 소프트웨어 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체들의 예들은 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스들, 내부 하드 디스크들 및 착탈식 디스크들과 같은 자기 매체들, 자기-광학 매체들 및 CD-ROM 디스크들 및 디지털 다목적 디스크들(DVD들)과 같은 광학 매체들을 포함한다.

Claims (20)

  1. 저장 마이크로-동작들(store micro-operations)을 융합(fusing)시키기 위한 방법으로서,
    프로세서에 의해, 인접한 마이크로-동작들이 연속적인 저장 마이크로 동작들인지 여부를 결정하는 단계, 상기 마이크로-동작들이 인접한 디스패치 슬롯들을 통해 흐르는 경우 상기 마이크로-동작들은 인접한 마이크로-동작들이고, 상기 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 경우 상기 인접한 마이크로-동작들은 연속적인 저장 마이크로-동작들이며;
    상기 프로세서에 의해, 상기 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인 경우:
    상기 프로세서에 의해, 상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖는지 여부를 결정하는 단계;
    상기 프로세서에 의해, 상기 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있는지 여부를 결정하는 단계; 및
    상기 프로세서에 의해, 상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 가지며 그리고 연속적인 어드레스들에 액세스한다면, 상기 연속적인 저장 마이크로-동작들을 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 전용 마이크로-동작(store data only micro-operation)으로 융합시키는 단계
    를 포함하고,
    상기 저장 데이터 전용 마이크로-동작은 저장 큐 및 어드레스 생성 스케줄러 큐를 억제(suppress)하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 프로세서에 의해, 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작에 대해 동일한 저장 큐 엔트리 번호를 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제2항에 있어서,
    상기 프로세서에 의해, 상기 저장 데이터 전용 마이크로-동작에서의 데이터가 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에 대한 상측 데이터 부분임을 나타내도록 상기 저장 데이터 전용 마이크로-동작에 마이크로-동작 유형을 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제3항에 있어서,
    상기 프로세서에 의해, 저장될 때 상기 데이터의 시프팅을 가능하게 하기 위한 적어도 하나의 제어 비트를 저장 큐로 전송하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작에서의 데이터는 저장 데이터 필드의 하측 부분에 저장되고 상기 저장 데이터 전용 마이크로-동작에서의 데이터는 상기 저장 데이터 필드의 상측 부분에 저장되는 것을 특징으로 하는 방법.
  6. 제1항에 있어서,
    상기 프로세서에 의해, 상기 연속적인 마이크로-동작들 각각의 어드레싱 모드를 리뷰하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 제1항에 있어서,
    하측 어드레스를 갖는 상기 연속적인 저장 마이크로-동작이 상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작으로 전환되는 것을 특징으로 하는 방법.
  8. 제7항에 있어서,
    보다 높은 어드레스를 갖는 상기 연속적인 저장 마이크로-동작은 상기 저장 데이터 전용 마이크로-동작으로 전환되는 것을 특징으로 하는 방법.
  9. 제1항에 있어서,
    상기 저장 데이터 전용 마이크로-동작에 대해 저장-리타이어 표시가 억제되는 것을 특징으로 하는 방법.
  10. 제1항에 있어서,
    상기 두 배의 데이터 크기를 갖는 상기 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작 중 적어도 하나에 대한 예외의 발생은 상기 인접한 마이크로-동작들을 융합 없이 재실행시키는 것을 특징으로 하는 방법.
  11. 제1항에 있어서,
    상기 프로세서에 의해, 상기 저장 데이터 전용 마이크로-동작에 대한 메모리-리네이밍 추적 구조에 높은 저장 비트를 설정하는 단계; 및
    상기 프로세서에 의해, 상기 높은 저장 비트를 사용하여 저장 큐 엔트리를 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  12. 저장 마이크로-동작들을 융합시키기 위한 프로세서로서,
    마이크로-동작들을 디스패칭하도록 구성된 디스패치 로직; 및
    상기 디스패치 로직과 통신하는 저장 융합 검출 로직을 포함하며, 상기 저장 융합 검출 로직은,
    인접한 마이크로-동작들이 연속적인 저장 마이크로 동작들인지 여부를 결정하되, 상기 마이크로-동작들이 인접한 디스패치 슬롯들을 통해 흐르는 경우 상기 마이크로-동작들은 인접한 마이크로-동작들이고, 상기 인접한 마이크로-동작들이 둘 다 저장 마이크로-동작들인 경우 상기 인접한 마이크로-동작들은 연속적인 저장 마이크로-동작들이며;
    상기 인접한 마이크로-동작들이 연속적인 저장 마이크로-동작들인 경우:
    상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 갖는지 여부를 결정하고;
    상기 연속적인 저장 마이크로-동작들이 연속적인 어드레스들에 액세스하고 있는지 여부를 결정하고; 및
    상기 연속적인 저장 마이크로-동작들이 동일한 데이터 크기를 가지며 그리고 연속적인 어드레스들에 액세스한다면, 상기 연속적인 저장 마이크로-동작들을 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 저장 데이터 전용 마이크로-동작(store data only micro-operation)으로 융합시키도록 구성되며,
    상기 저장 데이터 전용 마이크로-동작은 저장 큐 및 어드레스 생성 스케줄러 큐를 억제(suppress)하는 것을 특징으로 하는 프로세서.
  13. 제12항에 있어서,
    상기 디스패치 로직 및 상기 저장 융합 검출 로직은 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작에 대해 동일한 저장 큐 엔트리 번호를 설정하는 것을 특징으로 하는 프로세서.
  14. 제13항에 있어서,
    상기 디스패치 로직 및 상기 저장 융합 검출 로직은, 상기 저장 데이터 전용 마이크로-동작에서의 데이터가 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작에 대한 상측 데이터 부분임을 나타내도록, 상기 저장 데이터 전용 마이크로-동작의 마이크로-동작 유형을 설정하는 것을 특징으로 하는 프로세서.
  15. 제14항에 있어서,
    저장 큐와 통신하는 산술 로직 유닛을 더 포함하며, 상기 산술 로직 유닛은 저장될 때 데이터의 시프팅을 가능하게 하기 위한 적어도 하나의 제어 비트를 상기 저장 큐로 전송하도록 구성되는 것을 특징으로 하는 프로세서.
  16. 제12항에 있어서,
    상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작에서의 데이터는 저장 데이터 필드의 하측 부분에 저장되고 상기 저장 데이터 전용 마이크로-동작에서의 데이터는 상기 저장 데이터 필드의 상측 부분에 저장되는 것을 특징으로 하는 프로세서.
  17. 제12항에 있어서,
    하측 어드레스를 갖는 상기 연속적인 저장 마이크로-동작은 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작으로 전환되고, 보다 높은 어드레스를 갖는 상기 연속적인 저장 마이크로-동작은 상기 저장 데이터 전용 마이크로-동작으로 전환되는 것을 특징으로 하는 프로세서.
  18. 제12항에 있어서,
    상기 저장 데이터 전용 마이크로-동작에 대해 저장-리타이어 표시가 억제되고, 상기 두 배의 데이터 크기를 갖는 저장 마이크로-동작 및 상기 저장 데이터 전용 마이크로-동작 중 적어도 하나에 대한 예외의 발생은 상기 인접한 마이크로-동작들을 융합 없이 재실행시키는 것을 특징으로 하는 프로세서.
  19. 삭제
  20. 삭제
KR1020207013140A 2017-11-27 2018-08-28 저장 융합 시스템 및 방법 KR102334341B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/822,515 2017-11-27
US15/822,515 US10459726B2 (en) 2017-11-27 2017-11-27 System and method for store fusion
PCT/US2018/048396 WO2019103776A1 (en) 2017-11-27 2018-08-28 System and method for store fusion

Publications (2)

Publication Number Publication Date
KR20200083479A KR20200083479A (ko) 2020-07-08
KR102334341B1 true KR102334341B1 (ko) 2021-12-02

Family

ID=66632104

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207013140A KR102334341B1 (ko) 2017-11-27 2018-08-28 저장 융합 시스템 및 방법

Country Status (6)

Country Link
US (1) US10459726B2 (ko)
EP (1) EP3718002A4 (ko)
JP (1) JP7284752B2 (ko)
KR (1) KR102334341B1 (ko)
CN (1) CN111344669B (ko)
WO (1) WO2019103776A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210191721A1 (en) * 2019-12-20 2021-06-24 Ampere Computing Llc Hardware micro-fused memory operations
US20220019436A1 (en) * 2020-07-20 2022-01-20 International Business Machines Corporation Fusion of microprocessor store instructions
US11567767B2 (en) 2020-07-30 2023-01-31 Marvell Asia Pte, Ltd. Method and apparatus for front end gather/scatter memory coalescing
US11567771B2 (en) * 2020-07-30 2023-01-31 Marvell Asia Pte, Ltd. Method and apparatus for back end gather/scatter memory coalescing
US20230097390A1 (en) * 2021-09-29 2023-03-30 International Business Machines Corporation Tightly-coupled slice target file data
US11900116B1 (en) 2021-09-29 2024-02-13 International Business Machines Corporation Loosely-coupled slice target file data
US20240020012A1 (en) * 2022-07-13 2024-01-18 SiFive, Inc. Memory Request Combination Indication
US20240111537A1 (en) * 2022-09-29 2024-04-04 Synopsys, Inc. Store instruction merging with pattern detection

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060123219A1 (en) 2002-06-25 2006-06-08 Samra Nicholas G Intra-instruction fusion
US20070038844A1 (en) 2005-08-09 2007-02-15 Robert Valentine Technique to combine instructions
US20100070741A1 (en) 2008-09-18 2010-03-18 Via Technologies, Inc. Microprocessor with fused store address/store data microinstruction
US20170249144A1 (en) 2016-02-26 2017-08-31 Qualcomm Incorporated Combining loads or stores in computer processing

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3543181B2 (ja) * 1994-11-09 2004-07-14 株式会社ルネサステクノロジ データ処理装置
US6757430B2 (en) * 1999-12-28 2004-06-29 Intel Corporation Image processing architecture
US6920546B2 (en) * 2002-08-13 2005-07-19 Intel Corporation Fusion of processor micro-operations
US20040199755A1 (en) * 2003-04-07 2004-10-07 Zeev Sperber Apparatus and methods for exception handling for fused micro-operations by re-issue in the unfused format
US7174428B2 (en) 2003-12-29 2007-02-06 Intel Corporation Method and system for transforming memory location references in instructions
US8904151B2 (en) 2006-05-02 2014-12-02 International Business Machines Corporation Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath
US8850120B2 (en) * 2008-12-15 2014-09-30 Oracle America, Inc. Store queue with store-merging and forward-progress guarantees
JP5491071B2 (ja) 2009-05-20 2014-05-14 エヌイーシーコンピュータテクノ株式会社 命令融合演算装置および命令融合演算方法
JP4897029B2 (ja) 2009-11-09 2012-03-14 株式会社東芝 半導体装置
US8285937B2 (en) * 2010-02-24 2012-10-09 Apple Inc. Fused store exclusive/memory barrier operation
US20120144174A1 (en) 2010-12-01 2012-06-07 Advanced Micro Devices, Inc. Multiflow method and apparatus for operation fusion
US9477476B2 (en) * 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US20140258667A1 (en) 2013-03-07 2014-09-11 Mips Technologies, Inc. Apparatus and Method for Memory Operation Bonding
US20160188341A1 (en) * 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Apparatus and method for fused add-add instructions
US10216516B2 (en) * 2016-09-30 2019-02-26 Intel Corporation Fused adjacent memory stores

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060123219A1 (en) 2002-06-25 2006-06-08 Samra Nicholas G Intra-instruction fusion
US20070038844A1 (en) 2005-08-09 2007-02-15 Robert Valentine Technique to combine instructions
US20100070741A1 (en) 2008-09-18 2010-03-18 Via Technologies, Inc. Microprocessor with fused store address/store data microinstruction
US20170249144A1 (en) 2016-02-26 2017-08-31 Qualcomm Incorporated Combining loads or stores in computer processing

Also Published As

Publication number Publication date
EP3718002A4 (en) 2021-08-18
US20190163475A1 (en) 2019-05-30
CN111344669B (zh) 2022-07-26
CN111344669A (zh) 2020-06-26
EP3718002A1 (en) 2020-10-07
JP7284752B2 (ja) 2023-05-31
WO2019103776A1 (en) 2019-05-31
US10459726B2 (en) 2019-10-29
JP2021504788A (ja) 2021-02-15
KR20200083479A (ko) 2020-07-08

Similar Documents

Publication Publication Date Title
KR102334341B1 (ko) 저장 융합 시스템 및 방법
US6052769A (en) Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction
US6173393B1 (en) System for writing select non-contiguous bytes of data with single instruction having operand identifying byte mask corresponding to respective blocks of packed data
US6968444B1 (en) Microprocessor employing a fixed position dispatch unit
US20100189111A1 (en) Streaming direct inter-thread communication buffer packets that support hardware controlled arbitrary vector operand alignment in a densely threaded network on a chip
KR102524565B1 (ko) 로드 스토어 유닛들을 바이패싱하여 스토어 및 로드 추적
US6247117B1 (en) Apparatus and method for using checking instructions in a floating-point execution unit
US11835988B2 (en) System and method for load fusion
US20220206793A1 (en) Methods, systems, and apparatuses for a scalable reservation station implementing a single unified speculation state propagation and execution wakeup matrix circuit in a processor
US7725690B2 (en) Distributed dispatch with concurrent, out-of-order dispatch
US11175916B2 (en) System and method for a lightweight fencing operation
CN112540792A (zh) 指令处理方法及装置
US20230367595A1 (en) Gather buffer management for unaligned and gather load operations
US7143268B2 (en) Circuit and method for instruction compression and dispersal in wide-issue processors
US7213136B2 (en) Apparatus and method for redundant zero micro-operation removal
JPH10143366A (ja) 非プログラム順命令発行を利用する高性能データプロセッシングシステムにおいて早期データ依存解析メカニズムをインプリメントする方法およびシステム
EP3497558B1 (en) System and method for load and store queue allocations at address generation time
US20190196839A1 (en) System and method for increasing address generation operations per cycle
US10514925B1 (en) Load speculation recovery
EP1220088A2 (en) Circuit and method for supporting misaligned accesses in the presence of speculative load instructions
US6629231B1 (en) System and method for efficient register file conversion of denormal numbers between scalar and SIMD formats
US7783692B1 (en) Fast flag generation

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant