KR20150016599A - 파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당 - Google Patents

파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당 Download PDF

Info

Publication number
KR20150016599A
KR20150016599A KR1020147036540A KR20147036540A KR20150016599A KR 20150016599 A KR20150016599 A KR 20150016599A KR 1020147036540 A KR1020147036540 A KR 1020147036540A KR 20147036540 A KR20147036540 A KR 20147036540A KR 20150016599 A KR20150016599 A KR 20150016599A
Authority
KR
South Korea
Prior art keywords
loop
alias
register
lifetime
iteration
Prior art date
Application number
KR1020147036540A
Other languages
English (en)
Other versions
KR101752042B1 (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 KR20150016599A publication Critical patent/KR20150016599A/ko
Application granted granted Critical
Publication of KR101752042B1 publication Critical patent/KR101752042B1/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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • 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
    • 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/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1615Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement using a concurrent pipeline structrure
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • G06F9/30127Register windows
    • 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
    • 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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/441Register allocation; Assignment of physical memory space to logical memory space
    • 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

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)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

실시예에서, 시스템은 하나 이상의 코어 및 루프의 복수의 동작과 연관된 메모리 범위 정보를 저장하는 복수의 에일리어스 레지스터를 포함하는 프로세서를 포함한다. 메모리 범위 정보는 메모리 내의 하나 이상의 메모리 위치를 참조한다. 시스템은 또한 에일리어스 레지스터들의 각각을 루프의 대응하는 동작에 배정하는 레지스터 배정 수단을 포함하고, 배정들은 로테이션 스케줄에 따라 이루어지고, 에일리어스 레지스터들 중 하나의 에일리어스 레지스터는 루프의 제1 반복에서 제1 동작 및 루프의 후속하는 반복에서 제2 동작에 배정된다. 시스템은 또한 프로세서에 결합된 메모리를 포함한다. 다른 실시예들이 본원에 설명되고 청구된다.

Description

파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당{ALLOCATION OF ALIAS REGISTERS IN A PIPELINED SCHEDULE}
실시예들은 파이프라인 스케줄링된 동작들에 관한 것이다.
컴파일러에 의해 통상 처리되는 작업은 메모리 명확화(memory disambiguation)이며, 이는 에일리어스되지 않은 메모리 액세스들, 예를 들어, 상이한 메모리 위치를 찾아가는(visit) 로딩 또는 저장에 대한 검출을 포함할 수 있다. 이러한 동작들은 보다 나은 명령어-레벨 병렬화를 위해 순서와 상관없이 실행하도록 스케줄링될 수 있다. 반대로, 동일한 메모리 위치(들)을 찾아가는 메모리 동작들은 "에일리어스된(aliased")이라고 명명되고, 순서와 상관없이 스케줄링될 수 없다.
종종 메모리 명확화는 컴파일러 최적화, 예를 들어, 소프트웨어 파이프라이닝에 포함된다. 소프트웨어 파이프라이닝은 연속하는 반복들의 중첩 실행에 의한 루프에 대해 명령어-레벨 병렬화를 사용할 수 있다. 그러나, 연속하는 반복들의 동작들의 실행의 중첩은 에일리어스들을 만들어 낼 수 있다.
도 1은 본 발명의 실시예에 따른, 에일리어스 레지스터들을 스케줄링하는 시스템의 블록도이다.
도 2a, b, c는 본 발명의 실시예에 따른, 에일리어스 레지스터 할당 방식을 예시한다.
도 3은 본 발명의 다른 실시예에 따른, 에일리어스 레지스터 할당 방식의 예시이다.
도 4는 본 발명의 실시예에 따른, 에일리어스 레지스터들을 스케줄링하는 방법의 흐름도이다.
도 5는 본 발명의 실시예에 따른 프로세서의 블록도이다.
도 6은 본 발명의 실시예에 따른, 다중 코어들을 포함하는 프로세서의 실시예의 예시이다.
도 7은 본 발명의 실시예에 따른 시스템의 블록도이다.
런 타임(run-time)에서 수행되는 최적화들을 위해, 하드웨어 지원이 사용되어 메모리 명확화(memory disambiguation)를 달성할 수 있다. 본 발명의 실시예들에서, 하드웨어 지원은, 복수의 메모리 액세스 레지스터("에일리어스 레지스터들")를 포함하는 레지스터 파일(예를 들어, 로테이션 레지스터 파일(rotating register file))을 포함할 수 있고, 이는 복수의 반복에 대해 실행되는 복수의 동작들을 포함하는 루프와 같은 순환 코드에 적용될 수 있다. 실시예에서, 에일리어스 레지스터들은 루프의 소프트웨어 파이프라이닝된 스케줄에 적용되어 메모리 명확화를 가져오고 런 타임에서 에일리어스들을 발견할 수 있다.
예를 들어, 스케줄 단계 동안에, 루프 내의 메모리 액세스들(예를 들어, 로딩 동작들 또는 저장 동작들, 본원에서의 "동작들")은 에일리어스되지 않은 것으로 가정("데이터 추측(data speculation)")될 수 있다, 예를 들어, 메모리 액세스들 간에 어떤 종속성(예를 들어, 순서화된 관계)도 없다고 가정할 수 있다. 데이터 추측이 보다 많은 병렬화를 가능하게 하지만(예를 들어, 동작들의 순서와 상관없는 프로세싱을 통한 연산 자원의 효율적 사용), 그것은 또한 에러들을 만들어 낼 수 있다. 예를 들어, 메모리 액세스들이 서로 에일리어스되는 경우(예를 들어, 메모리 액세스들이 중첩 메모리 위치들로 지향), 그리고 실행 스케줄에서의 메모리 액세스들의 순서가 원래 루프에서의 그들의 순서와 상이한 경우, 데이터 추측은 잘못되며, 예를 들어, 데이터 추측은 실패한다. 에일리어스를 야기하는 이러한 경우를 포착하기 위해, 각각의 메모리 액세스는, 액세스가 실행되는 경우, 액세스의 어드레스의 메모리 범위(예를 들어, 시작 어드레스 및 액세스된 메모리의 정도)를 기록하는 에일리어스 레지스터에 할당될 수 있다. 액세스의 메모리 범위는 모든 잠재적으로 에일리어스된 액세스들의 에일리어스 레지스터들과 비교될 수 있고, 매칭이 존재하면, 에일리어스가 식별되며, 예를 들어, 데이터 추측의 실패이다. 그러한 실패는, 예를 들어, 복구 코드의 실행에 의해 처리될 수 있다. 일부 실시예들에서, 복구 코드를 실행하면 루프의 이전 반복으로 되돌리고 및/또는 에일리어스를 제거하기 위해 동작들을 재-순서화하는 것을 야기할 수 있다.
일반적으로 두 종류의 에일리어스 레지스터들: 정적 및 로테이션 레지스터들이 존재한다. 정적 에일리어스 레지스터들은 로테이션 에일리어스 레지스터들과는 상이하게 사용되는데, 예를 들어, 레지스터들의 비교가 명령어에서 인코딩되는 방법에 있어서 상이하게 사용된다. 정적 에일리어스 레지스터와 비교를 수행하기 위해, 정적 에일리어스 레지스터의 레지스터 번호는 명확하게 인코딩될 수 있다. 정적 레지스터들과는 대조적으로, 로테이션 에일리어스 레지스터들은 통상적으로 개별적으로 비교되지 않는다. 대신에, 오직 하나의 레지스터 번호가 인코딩되고, 인코딩된 레지스터로부터 가장 큰 번호의 레지스터까지의 모든 레지스터들이 비교된다. 이러한 기법은 인코딩을 해결할 수 있으나, 예를 들어, 레지스터들이 적절하게 할당되지 않으면, 위양성들(false positives)을 만들어 낼 수 있다.
로테이션 에일리어스 레지스터 파일에 대해, 비교는 "단방향성(uni-directional)"일 수 있는데, 예를 들어, 비교는, "하향(downward)"이 아니라, 가장 큰 번호의 레지스터를 향하여 "상향 확인(upward checking)"일 수 있음을 유의한다. 에일리어스 레지스터 파일을 가리키는 베이스 포인터가 있을 수 있다. "로테이션"에서, 베이스 포인터는 위로 이동하고, 원래의 레지스터부터 베이스 포인터에 의해 가리켜진 현재의 레지스터까지의 모든 레지스터들이 클린된다(cleaned).
본 발명의 실시예들은 소프트웨어 파이프라이닝에서 로테이션 에일리어스 레지스터들을 사용할 수 있다. 본원에서, "레지스터들" 또는 "에일리어스 레지스터들"은 일반적으로 "로테이션 에일리어스 레지스터들"을 지칭한다.
도 1은 본 발명의 실시예들에 따른, 에일리어스 레지스터들을 스케줄링하는 시스템(100)의 블록도이다. 시스템(100)은 동적 랜덤 액세스 메모리(DRAM)(180)에 결합된 프로세서(110)를 포함한다. 프로세서(110)는 명령어들을 실행하기 위한 복수의 코어들(1120, 1121 … 112n)을 포함할 수 있다. 프로세서(110)는 레지스터 배정 로직(114), 명령어 스케줄 로직(116), 로테이션 레지스터 파일(118), 에일리어스 검출 로직(120), 및 캐시(122)를 포함하는 하나 이상의 캐시 메모리를 포함할 수 있다. 실시예들에서, 레지스터 배정 로직(114), 명령어 스케줄 로직(116) 및 에일리어스 검출 로직(120)의 하나 이상은 소프트웨어, 하드웨어, 펌웨어 또는 그의 조합일 수 있다. 예를 들어, 레지스터 배정 로직(114)은 실행 하드웨어, 또는 전용 펌웨어 또는 전용 회로 또는 그의 조합에 의해 실행되는 소프트웨어를 포함할 수 있다. 명령어 스케줄 로직(116)은 소프트웨어, 하드웨어, 펌웨어 또는 그의 조합을 포함할 수 있다. 예를 들어, 명령어 배정 로직(114)은 실행 하드웨어, 전용 펌웨어, 전용 회로 또는 그의 조합에 의해 실행되는 소프트웨어를 포함할 수 있다.
동작에서, 명령어 스케줄 로직(116)은 루프의 실행을 위한 동작들(예를 들어, 복수의 N회 반복동안 반복적으로 실행되는 동작들의 정의된 그룹)의 스케줄을 작성할 수 있다. 명령어 스케줄 로직(116)은 사용가능한 연산 자원들의 효율적 사용을 달성하기 위해 동작들을 스케줄(예를 들어, 소프트웨어 파이프라이닝)할 수 있다.
소프트웨어 파이프라이닝의 결과로서, 명령어 스케줄 로직에 의해 만들어진 실행 스케줄은 루프에서 특정된 동작들의 실행의 순서에 비해 상이한 순서의 실행을 야기할 수 있다. 예를 들어, 동작 a 및 후속하는 동작 b의 2개의 동작들의 루프는 명령어 스케줄 로직(116)에 의해 스케줄링되어 각각의 반복에 대해 동작 b가 실행되고 그 후 동작 a가 실행되어서 사용가능한 연산 자원들을 효율적으로 활용할 수 있다.
레지스터 배정 로직(114)은, 루프의 복수의 반복의 각각에 대해, 로테이션 레지스터 파일(118)의 에일리어스 레지스터들의 세트의 각각의 에일리어스 레지스터를 루프의 대응하는 동작에 배정할 수 있다. 실시예에서, 로테이션 레지스터 파일(118)의 각각의 에일리어스 레지스터는 두번 이상 배정될 수 있는데, 예를 들어, 어떤 에일리어스 레지스터도 동시에 두 개의 동작들에 배정되지 않는다면, 에일리어스 레지스터들은 복수의(예를 들어, 유한 개의) 에일리어스 레지스터를 통해 로테이션하는 연속적 동작들에 배정될 수 있다.
각각의 에일리어스 레지스터는 메모리 액세스 데이터를 저장하는데 사용될 수 있는데, 예를 들어, 루프의 대응하는 동작에 의해 액세스되는 캐시(122) 또는 DRAM(180)의 하나 이상의 메모리 위치의 메모리 어드레스 범위들을 저장하는데 사용될 수 있다. 실시예에서, 에일리어스 레지스터들 중 하나의 에일리어스 레지스터의 콘텐츠는 에일리어스 검출 로직(120)에 의해, 로테이션 레지스터 파일(118)의 에일리어스 레지스터들의 여러 다른 것의 콘텐츠와 비교되어 에일리어스가 존재하는지, 예를 들어, 동일한 시간 프레임에서의 공통 메모리 위치에 대한 (예를 들어, 로드 동작 또는 저장 동작을 통한) 액세스가 존재하는지를 판정할 수 있다.
도 2a, b, c는 본 발명의 실시예에 따른 레지스터 할당 방식을 예시한다. 도 2a에서, 예시적인 루프로서, 의사코드(pseudocode) 루프(210)는 동작 a 및 동작 b를 포함한다. 동작들 a 및 b 모두는 메모리 액세스인데, 예를 들어, 로드 또는 저장 동작들(본원의 "동작들")이다.
N=3에 대하여, 루프(210)는 3회의 반복을 수행하는데, 예를 들어, i=0, 1, 2이다. 의사 코드(210)에 의해 설명된 루프에서 동작 a는 동일한 반복에서 동작 b 이전에 실행되고, 동작 a는 또한 후속하는 반복들에서 모든 a 동작들 및 모든 b 동작들 이전에 실행된다는 것을 유의한다.
도 2b에서, 루프에 대해 소프트웨어 파이프라이닝된 스케줄(220)이 도시된다. 소프트웨어 파이프라이닝된 스케줄(220)에서, 반복 0 내에서 동작 b가 실행되고 그 후에 동작 a가 실행되도록 스케줄링된다. 반복 1에서 동작 b가 실행되고 그 후에 동작 a가 실행되도록 스케줄링된다. 반복 2에서, 동작 b가 실행되고 그 후에 동작 a가 실행되도록 스케줄링된다. 루프(210)와 비교하여 동작들을 재순서화하면 에일리어스들을 야기할 수 있고, 이는 런타임 에일리어스 모니터링의 사용을 통해 검출될 수 있다. 에일리어스 레지스터들은 런타임 에일리어스 모니터링을 달성하기 위해 할당될 수 있다.
도 2c에서, 에일리어스 레지스터 할당 방식(230)은 본 발명의 실시예에 따른 해결책을 나타낸다. X 축(232)은 시간을 나타내고 Y 축(234)은 대응하는 에일리어스 레지스터와 연관된 레지스터 번호를 나타낸다. 바들(Bars)(242 내지 250)은 동작들의 "수명시간들(lifetimes)"을 나타낸다. 제1 동작의 수명시간은 제1 동작("생성자 동작")의 실행으로 시작하고, 제2 동작의 완료 전에 제1 동작과 에일리어스 될 수 있는 제2 동작의 실행에서 종료하는 시간 기간으로서 정의될 수 있다. 각각의 수명시간은 대응하는 생성자 동작으로 명명된다. 예를 들어, 수명시간(244)은 동작 b의 실행이 시작하는 시간 t=1에서 시작하고, 동작 a의 실행이 종료하는 시간 t=5에서 종료한다(예를 들어, 반복 0의 명령어 b는 연관된 수명시간(244)을 갖는다).
할당 방식(230)은 에일리어스 레지스터들을 각각의 반복(N=3에 대하여, 반복 i=0, 1, 2) 내의 루프의 각각의 동작에 할당한다. 루프 반복 i에 대해, a 및 b의 수명시간들은 각각 레지스터 2*i 및 2*i+1에 할당된다.
예를 들어, 반복(236)에서(i=0, 반복 0), 시간 축(232) 상의 시간=4에서, 동작 a가 실행을 시작한다. 에일리어스 레지스터 0에 저장되는 동작 a의 메모리 액세스 어드레스 범위는, 레지스터 1부터 시작하여 활성 동작과 연관된 가장 큰 번호의 레지스터까지의 더 높은 번호의 에일리어스 레지스터들, 예를 들어, 제1 반복(236) 및 제2 반복(238)에서 동작 b에 할당되는 레지스터들 1 및 3의 각각의 저장된 액세스 범위들과 비교될 수 있다. (레지스터 2는 반복(238)에서 동작 a에 대해 할당되며, 이는 반복(236)의 동작 a의 수명시간(242)의 완료에 후속하여 실행되며, 따라서 고려하지 않는다). 이런 방식으로, 에일리어스는 제1 배정된 에일리어스 레지스터에 저장된 메모리 액세스 범위와, 후속하여 배정된 에일리어스 레지스터들에 저장된 메모리 액세스 범위들과의 비교를 통해 동적으로 포착될 수 있다.
시간 t=5에서 반복(236)("반복 0")의 수명시간들(242 및 244)은 만료되었고, 따라서, t=5에서 시작하면, 제1 반복(236)의 수명시간들(242 및 244) 동안 배정된 레지스터들의 어떠한 추가적인 콘텐츠 비교도 이루어지지 않을 것이다. 결과적으로, 레지스터들(0 및 1)이 t=5에서 시작하는 반복(240)("반복 2")에서 재사용될수 있다.
에일리어스 레지스터 할당 방식(230)의 예에서, 4개의 로테이션 레지스터(0 내지 3으로 번호매김)의 세트는, 예를 들어, 루프(210)에 대한 메모리 위치의 중첩 사용으로 인한 에일리어스들의 인스턴스들을 검출하기에 충분하다. 파이프라인 스케줄(220)에 따라 실행되는 루프(210)는 반복 간격(iteration interval)(224 및 또한 226) △t=2를 갖고, 이는 연속하는 반복들의 시작들 사이의 시간 간격이다. 레지스터 할당 방식(230)에서의 반복 간격(260 및 또한 262)은 또한 △t=2이다.
에일리어스 레지스터들은 에일리어스들을 검출하는 비교들을 수행하기에 총 4개의 로테이션 레지스터들이 충분하도록 할당될 수 있다. 보다 복잡한 소프트웨어 파이프라이닝 방식들을 이용하는 두 개보다 많은 동작들을 포함하는 루프들에 대하여, 로테이션 레지스터들의 더 큰 세트가 요구되어 에일리어스의 각각의 인스턴스를 검출할 수 있다. N의 임의의 값에 대하여, 에일리어스 레지스터들의 유한한 세트(N보다 작음)가 로테이션 기반으로, 예를 들어, 제1 에일리어스 레지스터에서 시작하여 가장 큰 번호의 에일리어스 레지스터를 통해 계속하고, 순환식으로 반복하여 할당되어 에일리어스들의 검출을 가능하게 할 수 있다.
도 3은 본 발명의 다른 실시예에 따른 레지스터 할당 방식(300)의 예시이다. 레지스터 할당(300)은 소프트웨어 파이프라이닝된 스케줄을 변경하지 않고 에일리어스 레지스터들의 수를 줄이는 것을 목적으로 한다.
시간 축(302)은 각각의 동작 a 및 b의 수명시간을 계측할 수 있다. 레지스터 축(304)은 각각의 동작에 대해 대응하는 메모리 액세스 범위(예를 들어, 도 1의 DRAM(180)과 같은 메모리 내의 어드레스 범위)를 저장하는데 어느 에일리어스 레지스터가 배정되는지를 나타낼 수 있다. 예를 들어, 반복(306)(0번째 반복)에서, 레지스터(0)는 수명시간(312)을 갖는 동작 a와 연관된 메모리 액세스 범위를 저장하기 위한 것이고, 레지스터(1)는 수명시간(314)를 갖는 동작 b와 연관된 메모리 액세스 범위를 저장하기 위한 것이다. 도 2의 의사코드(210)에 도시된 바와 같이, 동작 a는 동작 b 이전에 발생하도록 의도된다.
제1 반복에서 동작들 a 및 b 사이에 어떤 에일리어스도 존재하지 않는다는 것을 보장하기 위해, 도 3의 방식(300)에서, 동작 b의 수명시간(314)은 동작 a의 수명시간(312)의 종료까지 연장하고 에일리어스 레지스터(1)가 수명시간(314) 동안 동작 b에 배정된다. 레지스터 할당(300)에서, 반복에서 동작 a의 수명시간은 동일한 반복 및 다음 반복에서 동작 b의 수명시간들보다 위에 있고, 에일리어스들에 대한 확인은 에일리어스 레지스터(0) 내지 에일리어스 레지스터(1)을 포함한다(로테이션 에일리어스 레지스터들의 숫자 순서에서 "상향"임). 또한, 반복(306)("반복 0")의 동작 a의 수명시간(312)이 반복(308)("반복 1")의 동작 b의 수명시간(318) 동안에 발생하기 때문에, 레지스터(0)의 콘텐츠는 레지스터(2)의 콘텐츠와 비교하여 수명시간(312) 동안의 동작 a와 수명시간(318) 동안의 동작 b 사이에 에일리어스가 존재하는지를 판정할 수 있다.
수명시간(314)은 t=5에서 완료된다는 것을 유의한다. 반복(308)("반복 1")에서 보면, 수명시간(314)이 완료되고 수명시간(314) 이후에 레지스터(1)에 대한 어떤 사용도 없기 때문에 에일리어스 레지스터(1)가 사용되어 수명시간(316)을 갖는 반복(308)에 포함된 동작 a의 연관된 메모리 액세스 범위를 저장할 수 있다. 점선들(324 및 326)은 수명시간(318)을 갖는 동작 b의 실행을 포함하는 반복(308)(반복 1) 및 배정된 레지스터(2), 그리고 수명시간(316)을 갖는 동작 a의 실행 및 배정된 레지스터(1)의 경계들을 나타낸다.
따라서, 레지스터들은 순환적으로 배정될 수 있는데, 예를 들어, 레지스터(1)가 활용되어 수명시간(314)(예를 들어, 시간 간격 △t= 1 → 5) 동안에 반복(306)에서 동작 b의 메모리 액세스 범위를 저장할 수 있고, 반복(308)에서 레지스터(1)가 또한 활용되어 수명시간(316)(예를 들어, 시간 간격 △t= 6 → 7) 동안에 동작 a에 대한 메모리 액세스 범위를 저장할 수 있다.
반복(310)("반복 2")은 점선들(326 및 328)에 의해 경계지어지고, 동작 b의 메모리 액세스 범위를 저장하기 위해 레지스터(0)를 사용하여 수명시간(322)(△t= 5 → 9)을 갖는 동작 b의 실행, 및 반복(310)의 동작 a의 메모리 액세스 범위를 저장하기 위해 레지스터(2)를 사용하여 수명시간(320)(△t= 8 → 9)을 갖는 동작 a의 실행을 포함하고, 수명시간(318)이 t=7에서 만료되기 때문에, 이는 반복(310)에서의 재사용을 위해 레지스터(2)를 해제한다(free up). 따라서, 레지스터(2)가 연속하는 반복들, 예를 들어, 동작 b의 수명시간(318) 동안에 반복(308)에서 그리고 동작 a의 수명시간(320) 동안에 반복(310)에서 또한 재사용된다("레지스터 재사용"). 이러한 연속하는 반복들에서의 레지스터 재사용 기법은, 도 2의 루프(210)과 같은 루프의 실행 동안에 에일리어스들을 검출하는데 사용되는 레지스터들의 총 수의 감소를 야기할 수 있다. 또한, 레지스터 할당(300)에서, 레지스터들(0, 1, 2)의 세트가 순환적으로 사용될 수 있는데, 예를 들어, 레지스터(0)이 수명시간(312)(△t= 4 → 5) 동안에 반복(306)("반복 0")에서 사용되고 다시 수명시간(322)(△t= 5 → 9) 동안에 반복(310)("반복 2")에서 사용될 수 있다.
루프의 소프트웨어 파이프라이닝된 스케줄에 대한 에일리어스 레지스터들의 로테이션 할당의 사용은 레지스터 할당 문제를 순환 스케줄링 문제로 변형하는 것으로 간주될 수 있다. 각각의 의존성(동작들의 실행의 순서에 기초한 동작들의 관계)은 의존성 거리(dependence distance), 예를 들어, 의존하는 동작들 간의 반복들의 수를 갖는 것으로 간주될 수 있다. 예를 들어, 도 2 및 3에서는 2개의 의존성들이 존재한다.
1) 동일한 반복에서 동작 a의 수명시간을 의미하는, 0(예를 들어, 동일한 반복)의 거리(예를 들어, 반복들 간의 거리)를 갖는 a → b는 동작 b의 수명시간과 동일하거나 그보다 더 적은 수의 레지스터가 배정된다.
2) 반복에서 동작 a의 수명시간을 의미하는, 1의 거리(인접하는 반복들)를 갖는 a → b는 인접하는 반복에서 동작 b의 수명시간과 동일하거나 그보다 적은 수의 레지스터가 배정되어 로테이션 에일리어스 레지스터들이 숫자적으로 로테이션 레지스터들의 "상향" 순서로 확인될 것이다.
본 발명의 실시예에서, 의존성 그래프에 기초하여, "수명시간 동안 소프트웨어 파이프라이닝된 스케줄"은 수명시간을 동작으로서 취급함으로써 생성될 수 있고, 소프트웨어 파이프라이닝 알고리즘이 수명시간들을 스케줄링하는데 적용될 수 있다.
스케줄링 접근법은 레지스터 할당 문제를 레지스터들에 수명시간들을 "스케줄링"하는 것으로서 만들어서 형식화될 수 있다. 예를 들어, a(i)는 루프 반복 i의 동작 a라 하고, r(a, i)는 스케줄에 의해 그것에 할당된 레지스터라 하자.
스케줄은 이하의 제약들을 준수한다.
(1) 모듈로 제약(Modulo constraint): 모든 i에 대해, r(a, i) = r(a, 0) + i*C이다. 여기서 C는 스케줄러에 의해 결정되는 상수이다. 즉, 동작의 수명시간들은 스케줄에서 레지스터들의 관점에서 일정 기간으로 나타난다. 예를 들어, 도 2의 블록(230)에서, 동작 a의 수명시간들은 일정 기간 C=2로(레지스터 0 및 2에서) 나타나고, 도 3에서 동작 a의 수명시간들은 일정 기간 C=1로(레지스터 0 및 1에서) 나타난다.
(2)의존성 제약(dependence constraint): a(i) 및 b(i+d)(여기서 d≥0)가 에일리어스될 수 있다고 가정하면, a(i)는 원래 실행 순서에서 b(i+d) 이전에 있지만, 그들은 루프의 소프트웨어 파이프라이닝된 스케줄에서 재순서화된다. 런타임 동안에 임의의 에일리어스가 포착되었음을 확신하기 위해, 모든 i에 대해, r(a, i)≤r(b, i+d)라 한다. 즉, a(i)의 메모리 어드레스 범위를 b(i+d)의 메모리 어드레스 범위와 비교하기 위해 a(i)는 b(i+d)와 동일한 레지스터가 배정되거나 그보다 더 적은 수의 레지스터가 배정된다. 이는 로테이션 레지스터 파일의 단방향 비교 특징 때문이다. 이러한 제약은 d와 동일한 거리 및 0의 레이턴시(레지스터들의 관점에서)를 갖는 의존성 a → b 에 의해 모델링될 수 있다.
(3)자원 제약: 두 개의 동작들의 수명시간들이 시간 상 중첩하면, 그들은 동일한 레지스터에 배정될 수 없다.
종래의 소프트웨어 파이프라이닝은 자원 및 시간의 2개의 차원을 갖는다. 이것은, 모든 의존성 및 자원 제약들에 관하여, 동작들을 일정 기간(시작 간격, "Ⅱ")에서 시간에 스케줄링한다. 본원에서 제시된 레지스터 할당에서, 레지스터들은 "시간"과 동일한 방식으로 취급될 수 있고, 시간은 "자원"으로서 취급될 수 있고, 수명시간들은 "동작들"로서 취급될 수 있고, 에일리어스 확인은 "의존성"으로서 취급될 수 있다.
동작적으로, 본 발명의 실시예들에 따라, 스케줄에 도달하기 위해 이하의 고려사항들이 고려된다.
1. 의존성 구축
거리 d(a와 b 사이의 반복들의 수)를 갖는 의존성 a → b는, d = 0이지만, 원래 실행 순서에서의 동일한 반복에서 a가 b 이후라는 것을 제외하고, 전술한 의존성 제약들에 따라 의존성 그래프에 추가된다.
또한, 이하의 의존성은, 의존성 그래프에서 로컬 사이클을 완료하지 않는 한, 위양성을 피하기 위해 추가될 수 있고, 로컬 사이클은 거리가 모두 0인 의존성들로 구성된다: a(i) 및 b(i+d)(여기서 d≥0)가 에일리어스될 수 있다고 가정하면, a(i)는 원래 실행 순서에서 b(i+d) 이전에 있고, 루프의 소프트웨어 파이프라이닝된 스케줄에서도 b(i+d) 이전에 있다. 이러한 경우에, b(i+d)가 실행하는 경우, 에일리어스에 대해 a(i)를 전혀 확인하지 않아야 한다. 이는 b(i+d)가 a(i)보다 더 큰 수의 레지스터를 배정받았음을 확신함으로써 실시될 수 있다. 즉, 모든 i에 대해, r(a, i)<r(b, i+d)이다. 이는 d와 동일한 거리 및 1의 레이턴시를 갖는 의존성 a → b를 추가함으로써 행해질 수 있다.
위양성은, 그들이 의존성 그래프에서 로컬 사이클을 완료하지 않는 한, 이하의 종류의 의존성들을 추가함으로써 더 최소화될 수 있다: 동일한 반복으로부터의 동작 a 및 b에 대하여, a가 b를 전혀 확인하지 않는 경우가 있을 수 있다. 0과 동일한 거리 및 1의 레이턴시를 갖는 의존성 b → a가 추가될 수 있다.
2. 순환 스케줄링
(1) 로컬 의존성만에 기초하여 수명시간들을 스케줄링한다. 즉, 거리가 0인 의존성들만을 고려하고 모든 다른 것들을 무시한다. 이는 단일 루프 반복에서 수명시간들에 대한 스케줄을 만들어 낸다.
스케줄링될 수명시간들을 우선순위화하기 위해 다양한 전략들이 사용될 수 있다. 실시예에서, "최초 적합(first-fit)"이라고 지칭되는 단순한 스케줄링 전략이 사용될 수 있다: 하나보다 많은 수명시간이 스케줄링되기위해 준비되어 있으면, 가장 빠른 시작 시간을 갖는 것을 우선순위화한다.
(2) 모든 루프 반복에서 수명시간들은 동일한 스케줄을 갖는다고 가정한다. 무시된 의존성들을 고려하여 2개의 연속하는 루프 반복들의 수명시간들의 스케줄을 중첩한다. 이는 반복들 사이에서 레지스터들을 재사용할 수 있는 보다 컴팩트한 스케줄을 만든다. 최초 적합 전략과 함께 이러한 로컬-스케줄링-및-컴팩션(local-scheduling-and-compaction) 접근법은 위양성을 효율적으로 감소시킬 수 있다.
3. (위에서의)의존성 구축에서 사이클 형성을 회피하기 위해 추가되지 않은 의존성들을 처리. 생략된 의존성들 a → b의 각각에 대해, 스케줄을 준수하는지를 판정하기 위해 확인한다. 그렇지 않다면, b를 정적 에일리어스 레지스터로 이동시킨다.
4. 레지스터 배정 및 로테이션. 레지스터 할당은 무한개의 레지스터를 갖는 플랫 시간-공간 다이어그램(flat time-space diagram)을 가정할 수 있다. 다이어그램에서의 레지스터 번호들을 로테이션 레지스터 파일에서의 번호들에 매핑한다. 또한, 로테이션 명령어는 루프의 소프트웨어 파이프라이닝된 스케줄로 매 Ⅱ 사이클마다 삽입되고, 이는 각각의 Ⅱ 사이클마다 C개의 죽은 수명시간들을 "클린 업(clean up)"할 수 있다.
도 4는 본 발명의 실시예들에 따른, 에일리어스 레지스터들을 할당하는 방법의 흐름도(400)이다. 블록(402)에서, 의존성들이 수명시간들 사이에 구축될 수 있다. 블록(404)로 계속하면, 구축된 의존성들 및 자원 제약들에 따라 수명시간들을 레지스터들에 스케줄링하는 것을 포함하는 순환 스케줄링이 수행된다. 블록(406)으로 진행하면, 블록(402)에서 고려되지 않은 의존성들이 처리될 수 있는데, 예를 들어, 정적 에일리어스 레지스터들의 사용을 통해 처리될 수 있다. 블록(408)으로 진행하면, 복수의 에일리어스 레지스터가 루프의 동작들에 배정될 수 있는데, 예를 들어, 에일리어스 레지스터는 각각의 반복에서 루프의 각각의 동작에 배정될 수 있다. 에일리어스 레지스터들은, 각자의 동작의 수명시간 동안 각각의 레지스터가 배정되어, 순환적으로 배정될 수 있고, 각각의 레지스터는 각자의 동작에 의해 액세스되는 메모리 어드레스들의 표시를 저장할 수 있다. 일부 실시예들에서, 제1 반복에서 제1 동작에 배정된 적어도 하나의 레지스터가 제1 동작의 연관된 수명시간이 만료된 후에 시작하는 연속하는 반복에서 다른 동작에 의해 재사용될 수 있다. 따라서, 2개의 연속하는 루프 반복들의 수명시간들은 반복들 사이에서 레지스터들을 재사용할 수 있는 컴팩트한 스케줄을 야기할 수 있다. 블록(410)으로 계속하면, 로테이션 클린업 명령어가 스케줄에 추가되어 완료된 수명시간들과 연관된 에일리어스 레지스터들을 클린 업(예를 들어, 소거)하기 위해 실행될 수 있다.
이제 도 5를 참조하면, 본 발명의 실시에 따른 프로세서의 블록도가 도시된다. 도 5에 도시된 바와 같이, 프로세서(500)는 코어 도메인(510)에서 복수의 코어(510a 내지 510n)를 포함하는 다중코어 프로세서일 수 있다. 코어들의 하나 이상은 명령어 스케줄 로직, 에일리어스 레지스터(예를 들어, 로테이션 레지스터 파일), 및 레지스터 배정 로직을 포함하여 본 발명의 실시예들에 따른 루프의 동작들에 에일리어스 레지스터들을 배정할 수 있다.
코어들은 다양한 컴포넌트들을 포함하는 시스템 에이전트 또는 언코어(520)에 상호접속부(515)를 통해 결합될 수 있다. 알 수 있는 바와 같이, 언코어(520)는 최종 레벨 캐시일 수 있는 공유 캐시(530)를 포함할 수 있고 캐시 제어기(532)를 포함할 수 있다. 또한, 언코어는 통합 메모리 제어기(540) 및 다양한 인터페이스들(550)을 포함할 수 있다.
도 5를 더 참조하면, 프로세서(500)는, 예를 들어, 메모리 버스를 통해, 시스템 메모리(560)와 통신할 수 있다. 추가로, 인터페이스들(550)에 의해, 주변 디바이스들, 대용량 저장소 등과 같은 다양한 오프-칩 컴포넌트들에의 접속이 이루어질 수 있다. 도 5의 실시예에는 이러한 특정 구현이 도시되지만, 본 발명의 범주는 이와 관련하여 한정되지 않는다.
도 6을 참조하면, 다수의 코어들을 포함하는 프로세서의 실시예가 예시된다. 프로세서(600)는 마이크로프로세서, 임베디드 프로세서, 디지털 신호 처리기(DSP), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코프로세서, 시스템 온 칩(SOC), 또는 코드를 실행하는 다른 디바이스와 같은 임의의 프로세서 또는 프로세싱 디바이스를 포함한다. 일 실시예에서, 프로세서(600)는 비대칭 코어들 또는 대칭 코어들(예시된 실시예)을 포함할 수 있는 적어도 2개의 코어들 - 코어(601 및 602) - 을 포함한다. 그러나, 프로세서(600)는 대칭이거나 비대칭일 수 있는 임의의 개수의 프로세싱 구성요소들을 포함할 수 있다.
일 실시예에서, 프로세싱 구성요소는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직을 말한다. 하드웨어 프로세싱 구성요소의 예들은, 실행 상태 또는 아키텍처 상태(architectural state)와 같은 프로세서에 대한 상태를 보유할 수 있는 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 콘텍스트, 콘텍스트 유닛, 로직 프로세서(logical processor), 하드웨어 스레드, 코어 및/또는 임의의 다른 구성요소를 포함한다. 다시 말해서, 일 실시예에서, 프로세싱 구성요소는, 소프트웨어 스레드, 운영 체제, 애플리케이션 또는 그외의 코드와 같은 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 지칭한다. 물리적 프로세서는 일반적으로 코어 또는 하드웨어 스레드와 같은 임의의 수의 다른 프로세싱 구성요소들을 잠재적으로 포함하는 집적 회로를 지칭한다.
코어는 종종 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치한 로직을 지칭하며, 독립적으로 유지된 각각의 아키텍처 상태는 적어도 일부의 전용 실행 자원들과 연관된다. 코어와는 대조적으로, 하드웨어 스레드는 통상적으로, 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치한 임의의 로직을 말하며, 여기서, 독립적으로 유지된 아키텍처 상태들은 실행 자원으로의 액세스를 공유한다. 알 수 있는 바와 같이, 특정한 리소스들이 공유되고 그외의 리소스들이 아키텍처 상태에 전용되는 경우, 하드웨어 스레드와 코어의 명명법 사이의 라인이 중첩된다. 또한, 종종, 코어 및 하드웨어 스레드는 운영 체제에 의해 개별적인 로직 프로세서들로 보여지며, 운영 체제는 각각의 로직 프로세서 상의 동작들을 개별적으로 스케줄링할 수 있다.
도 6에 도시된 바와 같은, 물리적 프로세서(600)는 2개의 코어들, 코어들(601 및 602)을 포함한다. 여기서, 코어들(601 및 602)은 대칭 코어들, 즉, 동일한 구성들, 기능 유닛들 및/또는 로직을 갖는 코어들로 간주된다. 다른 실시예에서, 코어(601)는 비순차적(out-of-order) 프로세서 코어를 포함하는 한편, 코어(602)는 순차적(in-order) 프로세서 코어를 포함한다. 그러나, 코어들(601 및 602)은 네이티브 코어, 소프트웨어 관리되는 코어, 네이티브 명령 세트 아키텍쳐(ISA)를 실행하도록 구성된 코어, 변환된(translated) ISA를 실행하도록 구성된 코어, 공동-설계된(co-designed) 코어, 또는 다른 주지된 코어와 같은 임의의 유형의 코어로부터 개별적으로 선택될 수 있다. 또한, 상기 설명에 추가하여, 코어(601)에 예시된 기능 유닛들은 코어(602)의 유닛들이 유사한 방식으로 동작하므로, 이하에 더 상세하게 설명된다.
도시된 바와 같이, 코어(601)는 두 개의 하드웨어 스레드들(601a 및 601b)을 포함하고, 이는 또한 하드웨어 스레드 슬롯들(601a 및 601b)로서 지칭될 수 있다. 따라서, 운영 체제와 같은 소프트웨어 엔티티들은, 일 실시예에서 프로세서(600)를 4개의 별개의 프로세서들, 즉, 4개의 소프트웨어 스레드들을 동시에 실행할 수 있는 4개의 로직 프로세서들 또는 프로세싱 구성요소들로서 잠재적으로 간주한다. 전술한 바와 같이, 제1 스레드는 아키텍처 상태 레지스터들(601a)과 연관되어 있고, 제2 스레드는 아키텍처 상태 레지스터들(601b)와 연관되어 있으며, 제3 스레드는 아키텍처 상태 레지스터들(602a)와 연관되어 있을 수 있고, 제4 스레드는 아키텍처 상태 레지스터들(602b)와 연관되어 있을 수 있다. 여기서, 아키텍처 상태 레지스터들(601a, 601b, 602a, 및 602b) 각각은, 전술한 바와 같이, 프로세싱 구성요소들, 스레드 슬롯들, 또는 스레드 유닛들로서 지칭될 수 있다. 도시된 바와 같이, 아키텍처 상태 레지스터들(601a)은 아키텍처 상태 레지스터들(601b)에 복제되므로, 로직 프로세서(601a) 및 로직 프로세서(601b)에 대해 개별 아키텍처 상태들/콘텍스트들이 저장될 수 있다. 코어(601)에서, 스레드들(601a 및 601b)에 대해 명령어 포인터들 그리고 할당기 및 이름 변경기 블록(allocator and renamer block)(630) 내의 이름 변경 로직과 같은 다른 보다 작은 자원들이 또한 복제될 수 있다. 재순서/리타이어먼트 유닛(reorder/retirement unit)(635)의 재순서 버퍼들, ILTB(620), 로드/저장 버퍼들, 및 큐들과 같은 일부 리소스들은 파티셔닝을 통해 공유될 수 있다. 범용 내부 레지스터들, 페이지-테이블 베이스 레지스터(들), 로우-레벨 데이터-캐쉬 및 데이터-TLB(615), 실행 유닛(들)(640), 및 비순차 유닛(635)의 부분들과 같은 다른 자원들은 잠재적으로 완전히 공유된다.
프로세서(600)는 종종 완전히 공유되거나, 파티셔닝을 통해 공유되거나 또는 프로세싱 구성요소들에 의해/프로세싱 구성요소들에 전용될 수 있는 그외의 리소스들을 포함한다. 도 6에서, 프로세서의 예시적인 로직 유닛/자원들을 갖는 순전히 예시적인 프로세서의 실시예가 예시되어 있다. 프로세서는 이 기능적인 유닛들 중 임의의 유닛을 포함하거나 또는 생략할 수 있을 뿐만 아니라 도시되지 않은 임의의 그외의 공지의 기능 유닛들, 로직, 또는 펌웨어를 포함할 수 있다는 것에 유의한다. 예시된 바와 같이, 코어(601)는 단순화되고, 대표적인 비순차적(OOO) 프로세서 코어를 포함한다. 그러나, 상이한 실시예에서는 순차 프로세서가 이용될 수도 있다. OOO 코어는 실행되고/취해질 브랜치들을 예측하는 브랜치 타겟 버퍼(620), 및 명령들에 대한 어드레스 변환 엔트리들을 저장하는 명령어-변환 버퍼(I-TLB)(620)를 포함한다.
코어(601)는 또한 페치된 구성요소들을 디코딩하기 위해 페치 유닛(fetch unit)(620)에 결합된 디코드 모듈(625)를 포함한다. 일 실시예에서, 페치 로직은 스레드 슬롯들(601a, 601b)과 각각 연관된 개별적인 시퀀서들을 포함한다. 통상 코어(601)는, 프로세서(600) 상에서 실행가능한 명령어를 정의/특정하는 제1 ISA와 연관된다. 종종 제1 ISA의 일부인 머신 코드 명령어는, 수행될 명령어 또는 동작을 참조/특정하는 명령어(연산코드(opcode)라고 지칭됨)의 일부를 포함한다. 디코드 로직(625)은 그의 연산코드들로부터 이들 명령어들을 인식하고, 제1 ISA에 의해 정의된 대로 처리하기 위해, 디코딩된 명령어들을 파이프라인으로 전달하는 회로를 포함하고 있다. 예를 들어, 일 실시예에서, 디코더들(625)은 트랜잭션 명령어와 같은 특정 명령어들을 인식하도록 설계 또는 구성되는 로직을 포함한다. 디코더들(625)에 의한 인식의 결과로서, 아키텍처 또는 코어(601)는 적절한 명령어와 연관되어 있는 작업들을 수행하기 위해 특정의 미리정의된 조치들을 취한다. 본원에서 설명된 작업들, 블록들, 동작들, 및 방법들 중 임의의 것은 단일의 또는 복수의 명령어에 응답하여 수행될 수 있고, 이들 중 일부는 신(new) 또는 구(old) 명령어일 수 있다는 점에 주목하는 것이 중요하다.
일례에서, 할당기 및 이름 변경기 블록(630)은 명령어 프로세싱 결과들을 저장하는 레지스터 파일들과 같은, 자원들을 예약하는 할당기를 포함한다. 그러나, 스레드들(601a, 601b)은 잠재적으로 비순차 실행이 가능하며, 할당기 및 이름 변경기 블록(630)은 또한 명령어 결과들을 추적하는 재순서 버퍼들과 같은 그외의 자원들을 예약한다. 유닛(630)은 또한 프로그램/명령어 참조 레지스터들을 프로세서(600) 내부의 다른 레지스터들로 이름 변경하는 레지스터 이름 변경기를 포함할 수 있다. 재순서/리타이어먼트 유닛(635)은, 비순차 실행 및 비순차 실행된 명령어들의 추후의 순차 리타이어먼트를 지원하기 위해 전술한 재순서 버퍼들, 로드 버퍼들, 및 저장 버퍼들 등의 컴포넌트들을 포함한다.
일 실시예에서, 스케줄러 및 실행 유닛(들) 블록(640)은 실행 유닛들 상의 명령어들/동작을 스케줄링하는 스케줄러 유닛을 포함한다. 예를 들어, 스케줄러 유닛은 파이프라이닝된 스케줄에 따라 루프의 동작들을 스케줄링할 수 있다. 실행 유닛들과 연관된 레지스터 파일들도 역시 포함되어 정보 명령어 프로세싱 결과를 저장한다. 예시적인 실행 유닛들은 부동 소수점 실행 유닛, 정수(integer) 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛, 및 그외의 공지된 실행 유닛들을 포함한다.
본 발명의 실시예들에 따라, 대응하는 에일리어스 레지스터 파일(642 또는 646)의 에일리어스 레지스터들을 루프의 복수의 동작들의 각각에 배정하기 위해 코어들(601 및 602) 중 하나 또는 모두는 대응하는 에일리어스 레지스터 파일(642 도는 646), 및 대응하는 레지스터 배정 로직(644 또는 648)을 포함할 수 있다. 에일리어스 레지스터들은 본 발명의 실시예들에 따른 에일리어스들을 식별하도록 사용될 수 있다.
저 레벨 데이터 캐시 및 데이터 변환 버퍼(D-TLB)(651)는 실행 유닛(들)(640)에 결합된다. D-TLB(651)는 물리적 어드레스 변환들에 대한 최근의 가상/선형을 저장한다. 특정한 예로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 분할하는 페이지 테이블 구조를 포함할 수 있다.
여기서, 코어(601 및 602)는 상위-레벨(higher level) 또는 더-외부의(further-out) 캐시(610)에 대한 액세스를 공유하며, 이는 최근에 페치된 구성요소들을 캐시한다. 상위-레벨의 또는 더-외부의라는 표현은, 캐시 레벨이 증가하거나 또는 실행 유닛(들)으로부터 떨어져 있다는 것을 지칭한다는 것에 유의한다. 일 실시예에서, 상위-레벨 캐시(610)는 제2 또는 제3 레벨 데이터 캐시와 같은 최종-레벨 데이터 캐시 - 프로세서(600) 상의 메모리 계층구조에서 최종 캐시 - 이다. 그러나, 상위-레벨 캐시(610)는 명령어 캐시와 연관되거나 명령어 캐시를 포함하므로 그와 같이 제한되지 않는다. 최근에 디코딩된 트레이스들을 저장하기 위해 디코더(625) 뒤에 트레이스 캐시 - 일 유형의 명령어 캐시 - 가 대신 결합될 수 있다.
도시된 구성에서, 프로세서(600)는 또한 버스 인터페이스 모듈(605)을 포함한다. 역사적으로, 제어기(670)는 컴퓨팅 시스템 내에, 프로세서(600)에 대해 외부에 포함되어 왔다. 이러한 시나리오에서, 버스 인터페이스(605)는, 시스템 메모리(675), (메모리(675)에 접속하는 메모리 제어기 허브와, 주변 디바이스를 접속하는 I/O 제어기 허브를 종종 포함하는) 칩셋, 메모리 제어기 허브, 노스브릿지(northbridge), 또는 기타의 집적 회로와 같은 프로세서(600) 외부의 디바이스들과 통신하기 위한 것이다. 그리고 이러한 시나리오에서, 버스(605)는 멀티-드롭(multi-drop) 버스, 점대점(point-to-point) 상호접속부, 직렬 상호접속부, 병렬 버스, 일관성(coherent)(예컨대, 캐시 일관성(cache coherent)) 버스, 계층화된 프로토콜 아키텍처, 차동 버스, 및 GTL 버스와 같은 임의의 공지된 상호접속부를 포함할 수 있다.
메모리(675)는 프로세서(600)에 전용되어 있거나 시스템 내의 다른 디바이스와 공유될 수 있다. 메모리(675)의 유형들의 통상 예로서는, DRAM, SRAM, 비휘발성 메모리(NV 메모리), 및 기타의 공지된 저장소 디바이스들이 포함된다. 디바이스(680)는 그래픽 가속기, 프로세서 또는 메모리 제어기 허브에 결합된 카드, I/O 제어기 허브에 결합된 데이터 저장소, 무선 트랜시버, 플래시 디바이스, 오디오 제어기, 네트워크 제어기, 또는 다른 공지된 디바이스를 포함할 수 있음을 유의한다.
그러나, 도시된 실시예에서, 제어기(670)는 프로세서(600)의 일부로서 예시되어 있다는 점에 유의한다. 최근에, SOC와 같은 단일 다이 상에 더 많은 로직 및 디바이스들이 집적됨에 따라, 이들 디바이스들 각각은 프로세서(600) 상에 포함될 수 있다. 예를 들어, 일 실시예에서, 메모리 제어기 허브(670)는 프로세서(600)와 동일한 팩키지 및/또는 다이 상에 있다. 여기서, 코어의 일부(온-코어 부분)는, 메모리(675) 또는 그래픽 디바이스(680)와 같은 다른 디바이스들과 인터페이싱하기 위한 하나 이상의 제어기(들)(670)를 포함한다. 그러한 디바이스들과 인터페이싱하기 위한 제어기들 및 상호접속부를 포함하는 구성은 종종 온-코어(또는 언-코어(un-core) 구성)라고 지칭된다. 예로서, 버스 인터페이스(605)는, 메모리(675)와 인터페이싱하기 위한 메모리 제어기 및 그래픽 디바이스(680)와 인터페이싱하기 위한 그래픽 제어기를 갖춘 링 상호접속부(ring interconnect)를 포함한다. 그러나, SOC 환경에서, 네트워크 인터페이스, 코프로세서, 메모리(675), 그래픽 프로세서(680), 및 기타 임의의 공지된 컴퓨터 디바이스/인터페이스와 같은 훨씬 더 많은 디바이스들이 단일 다이 또는 집적 회로 상에 통합되어 높은 기능성과 낮은 전력 소비를 갖는 소형 폼팩터를 제공할 수 있다.
실시예들은 다수의 상이한 시스템 유형들에서 구현될 수 있다. 이제 도 7을 참조하면, 본 발명의 실시예에 따른 시스템의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 점대점 상호접속 시스템이고, 점대점 상호접속부(750)를 통해 결합된 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 잠재적으로 다수의 보다 많은 코어들이 프로세서들 내에 존재할 수 있으나, 도 7에 도시된 바와 같이, 프로세서들(770 및 780)의 각각은, 제1 및 제2 프로세서 코어들(즉, 프로세서 코어들(774a 및 774b) 및 프로세서 코어들(784a 및 784b))을 포함하는 다중코어 프로세서들일 수 있다.
여전히 도 7을 참조하면, 제1 프로세서(770)는 메모리 제어기 허브(MCH)(772) 및 점대점(P-P) 인터페이스들(776, 778)을 더 포함한다. 마찬가지로, 제2 프로세서(780)는 MCH(782) 및 P-P 인터페이스들(786, 788)을 포함한다. 도 7에 도시된 바와 같이, MCH들(772, 782)은 프로세서들을 각자 메모리들, 즉, 메모리(732) 및 메모리(734)에 결합하며, 이들은 각자 프로세서들에 국부적으로 부착된 시스템 메모리(예를 들어, DRAM)의 일부분들일 수 있다. 본 발명의 실시예들에 따라, 프로세서들(770 및 780)의 각각은 레지스터 파일(도시되지 않음) 내의 에일리어스 레지스터들 및 루프의 복수의 메모리 액세스 동작들의 각각에 에일리어스 레지스터들을 배정하는 레지스터 배정 로직(도시되지 않음)을 포함할 수 있다. 본 발명의 실시예에 따라, 에일리어스 레지스터들은 루프의 동작들의 파이프라이닝된 스케줄링으로 인하여 발생할 수 있는 에일리어스들을 검출하는데 활용될 수 있다.
제1 프로세서(770) 및 제2 프로세서(780)는, 각자, P-P 상호접속부들(762, 754)을 통해 칩셋(790)에 결합될 수 있다. 도 7에 도시된 바와 같이, 칩셋(790)은 P-P 인터페이스들(794 및 798)을 포함한다.
또한, 칩셋(790)은 P-P 상호접속부(739)에 의해 고성능 그래픽 엔진(738)과 칩셋(790)을 결합하는 인터페이스(792)를 포함한다. 차례로, 칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 결합될 수 있다. 도 7에 도시된 바와 같이, 각종 입력/출력(I/O) 디바이스들(714)은, 제1 버스(716)를 제2 버스(720)에 결합하는 버스 브릿지(718)와 함께, 제1 버스(716)에 결합될 수 있다. 예를 들어, 일 실시예에서, 키보드/마우스(722), 통신 디바이스들(726), 및 코드(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장소 디바이스와 같은 데이터 저장소 유닛(728)을 포함하는 각종 디바이스들은 제2 버스(720)에 결합될 수 있다. 또한, 오디오 I/O(724)가 제2 버스(720)에 결합될 수 있다. 실시예들은 스마트 셀룰러 폰, UltrabookTM, 태블릿 컴퓨터, 넷북 등과 같은 모바일 디바이스를 포함하는 다른 유형의 시스템들에 통합될 수 있다.
이하의 예들은 추가의 실시예들에 관한 것이다.
제1 예에서, 시스템은 하나 이상의 코어를 포함하는 프로세서를 포함한다. 프로세서는 또한 루프의 복수의 동작과 연관된 메모리 범위 정보를 저장하는 복수의 에일리어스 레지스터를 포함하는 레지스터 파일을 포함한다. 메모리 범위 정보는 메모리 내의 하나 이상의 메모리 위치를 참조한다. 프로세서는 또한 에일리어스 레지스터들의 각각을 루프의 대응하는 동작에 배정하는 레지스터 배정 로직을 포함한다. 배정은 로테이션 스케줄에 따라 이루어질 수 있고, 에일리어스 레지스터들의 적어도 하나의 에일리어스 레지스터는 루프의 제1 반복에서 제1 동작에 배정되고, 루프의 후속하는 반복에서 제2 동작에 배정된다. 시스템은 또한 프로세서에 결합된 메모리를 포함한다. 선택적으로, 프로세서는 파이프라이닝된 스케줄에 따라 루프의 동작들을 스케줄링하는 명령어 스케줄 로직을 더 포함하고, 루프의 적어도 하나의 동작은 루프의 동작들의 순서와는 상이한 실행 스케줄에 따라 실행된다. 선택적으로, 하나 이상의 코어 중 하나의 코어는 제1 에일리어스 레지스터에 저장된 데이터를 에일리어스 레지스터들의 적어도 다른 하나의 레지스터에 저장된 데이터에 대해 비교를 수행하여 에일리어스가 존재하는지를 판정할 수 있다. 선택적으로, 제1 에일리어스 레지스터는 제1 수명시간 동안 제1 동작에 배정될 수 있고, 제1 에일리어스 레지스터는 제2 수명시간 동안 제2 동작에 배정될 수 있고, 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들이다. 선택적으로, 제1 수명시간은 루프의 제1 반복 내에 있고, 제2 수명시간은 제1 반복에 대해 연속하는 다음 반복인 루프의 제2 반복 내에 있다. 선택적으로, 레지스터 배정 로직은 로테이션 클린업 명령어를 실행하여, 연관된 수명시간이 만료된 각각의 에일리어스 레지스터의 콘텐츠를 소거할 수 있다.
제2 예에서, 적어도 하나의 컴퓨터 판독가능한 매체는 명령어들을 포함하고, 명령어들은 실행되는 경우, 시스템으로 하여금, 로테이션 레지스터 파일의 복수의 에일리어스 레지스터의 각각을, 루프의 복수의 반복에 대한 로테이션 시퀀스에 따라 연속하여 루프의 대응하는 동작에 배정하는 것을 가능하게 하고, 각각의 에일리어스 레지스터는 대응하는 동작에 의해 액세스되는 하나 이상의 메모리 위치에 대한 표시를 저장하고 에일리어스 레지스터들 중 하나의 에일리어스 레지스터는 루프의 제1 반복에서 제1 동작 및 루프의 후속하는 반복에서 제2 동작에 배정된다. 적어도 하나의 컴퓨터 판독가능한 매체는 또한 배정된 에일리어스 레지스터들 중 적어도 하나의 콘텐츠를 하나 이상의 다른 배정된 에일리어스 레지스터들의 콘텐츠와 비교함으로써 에일리어스 조건이 존재하는지를 판정하는 명령어들을 포함한다. 제1 에일리어스 레지스터는 제1 수명시간 동안 제1 동작에 배정되고, 제1 에일리어스 레지스터는 제2 수명시간 동안 제2 동작에 배정될 수 있고, 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들이다. 선택적으로, 제1 수명시간 및 제2 수명시간은 루프의 후속하여 인접하는 반복들에 있다. 선택적으로, 제1 수명시간 및 제2 수명시간은 루프의 인접하지 않는 반복들에 있다. 선택적으로, 적어도 하나의 컴퓨터 판독가능한 매체는, 추가의 명령어들을 포함하고, 명령어들은 실행되는 경우, 시스템으로 하여금, 동일하거나 상이한 반복 내의 다른 동작에 대한 순서화된 관계에 기초하여 수명시간을 동작에 배정하고, 수명시간의 시간 지속기간 동안 대응하는 에일리어스 레지스터를 동작에 배정하는 것을 가능하게 한다. 선택적으로, 적어도 하나의 컴퓨터 판독가능한 매체는 명령어들을 더 포함하고, 명령어들은 시스템으로 하여금, 시간 지속기간의 만료에 따라 대응하는 에일리어스 레지스터를 다른 반복에서 다른 동작에 재배정하는 것을 가능하게 한다. 선택적으로, 적어도 하나의 컴퓨터 판독가능한 매체는 명령어들을 더 포함하고, 명령어들은 시스템으로 하여금, 순서화된 관계의 존재에 반응하는 에일리어스에 대해 확인하고, 파이프라이닝된 스케줄에 따라, 루프의 제2 동작 후에 실행하도록 스케줄링된 루프의 제1 동작 및 루프의 제2 동작에 앞서 루프의 제1 동작이 실행가능하다는 루프의 표시에 반응하여 순서화된 관계가 표시된다.
제3 예에서, 방법은, 에일리어스 레지스터들 중 하나를 루프의 제1 반복에서 제1 동작에 그리고 루프의 후속하는 반복에서 제2 동작에 배정하는 것을 포함하는, 루프의 복수의 반복에 대한 로테이션 시퀀스에 따라, 레지스터 파일의 복수의 에일리어스 레지스터의 각각을, 연속하여 루프의 대응하는 동작에 배정하는 것을 포함하고, 각각의 에일리어스 레지스터는 대응하는 동작에 의해 액세스되는 메모리 위치들의 표시를 저장한다. 방법은 또한 배정된 에일리어스 레지스터들 중 적어도 하나의 콘텐츠를 하나 이상의 다른 배정된 에일리어스 레지스터들의 콘텐츠와 비교함으로써 에일리어스 조건이 존재하는지를 판정하는 것을 포함한다. 선택적으로, 방법은 제1 에일리어스 레지스터를 제1 수명시간 동안 제1 동작에 배정하고 제1 에일리어스 레지스터를 제2 수명시간 동안 제2 동작에 배정하는 것을 포함하고, 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들이다. 선택적으로, 제1 수명시간 및 제2 수명시간은 루프의 연속하여 인접하는 반복들에 있다. 선택적으로, 방법은 제1 수명시간 동안 루프의 제1 반복에서 제2 동작에 제1 에일리어스 레지스터를 배정하고, 제2 수명시간 동안 루프의 제2 반복에서 제1 동작에 제1 에일리어스 레지스터를 배정하는 것을 포함하고, 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들이다. 선택적으로, 방법은 동일한 반복 또는 상이한 반복 내의 다른 동작에 대한 순서화된 관계에 기초하여 수명시간을 동작에 배정하는 것, 및 수명시간의 시간 지속기간 동안에 대응하는 에일리어스 레지스터를 동작에 배정하는 것을 포함한다. 선택적으로, 방법은 시간 지속기간의 만료에 따라 대응하는 에일리어스 레지스터를 다른 반복에서 다른 동작에 재배정하는 것을 포함한다. 선택적으로, 방법은 루프의 제1 동작에 배정된 제1 에일리어스 레지스터의 콘텐츠와 제2 동작과 연관된 제2 수명시간 동안에 제2 동작에 배정된 제2 에일리어스 레지스터의 콘텐츠를 비교함으로써 루프의 제1 반복에 에일리어스가 존재하는지를 판정하는 것을 포함하고, 제2 수명시간은 제2 동작의 제2 스케줄링된 실행 시간에 대한 제1 동작의 제1 스케줄링된 실행 시간에 의해 판정된다. 선택적으로, 방법은 순서화된 관계의 존재에 반응하는 에일리어스에 대해 확인하는 것을 포함하고, 순서화된 관계는, 파이프라이닝된 스케줄에 따라, 루프의 제2 동작 후에 실행하도록 스케줄링된 루프의 제1 동작에 반응하여 표시되고, 루프의 제1 동작이 루프의 제2 동작 이전에 실행가능하다는 루프의 표시에 반응하여 표시된다.
제4 예에서, 장치는 하나 이상의 선택들을 포함하는 제3 예의 방법을 수행하도록 구성된다.
제5 예에서, 프로세서는 하나 이상의 코어, 루프의 복수의 동작들과 연관된 메모리 범위 정보를 저장하는 복수의 에일리어스 레지스터를 포함하는 레지스터 파일 - 메모리 범위 정보는 메모리 내의 하나 이상의 메모리 위치를 참조함 - , 및 에일리어스 레지스터들의 각각을 루프의 대응하는 동작에 배정하는 레지스터 배정 로직을 포함한다. 배정들은 로테이션 스케줄에 따라 이루어질 수 있고, 에일리어스 레지스터들 중 적어도 하나의 에일리어스 레지스터는 루프의 제1 반복에서 제1 동작에 그리고 루프의 후속하는 반복에서 제2 동작에 배정된다. 시스템은 또한 프로세서에 결합된 메모리를 포함한다. 선택적으로, 프로세서는 파이프라이닝된 스케줄에 따라 루프의 동작들을 스케줄링하는 명령어 스케줄 로직을 더 포함하고, 루프의 적어도 하나의 동작은 루프의 동작들의 순서와는 상이한 실행 스케줄에 따라 실행된다. 선택적으로, 하나 이상의 코어 중 하나의 코어는 제1 에일리어스 레지스터에 저장된 데이터를 에일리어스 레지스터들 중 적어도 하나의 다른 에일리어스 레지스터에 저장된 데이터에 대해 비교를 수행하여 에일리어스가 존재하는지를 판정한다. 선택적으로, 제1 에일리어스 레지스터는 제1 수명시간 동안 제1 동작에 배정되고 제1 에일리어스 레지스터는 제2 수명시간 동안 제2 동작에 배정되고, 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들이다. 선택적으로, 제1 수명시간은 루프의 제1 반복 내에 있고 제2 수명시간은 제1 반복에 대해 연속하는 다음 반복인 루프의 제2 반복 내에 있다. 선택적으로, 레지스터 배정 로직은 로테이션 클린업 명령어를 더 실행하여 연관된 수명시간이 만료된 각각의 에일리어스 레지스터의 콘텐츠를 소거한다.
실시예들은 다수의 상이한 유형의 시스템들에서 이용될 수 있다. 예를 들어, 일 실시예에서 통신 디바이스는 본원에서 설명된 다양한 방법들과 기술들을 수행하도록 구성될 수 있다. 물론, 본 발명의 범위는 통신 디바이스로 제한되지 않으며, 대신에 다른 실시예들은 명령어들을 처리하는 다른 유형의 장치, 또는 컴퓨팅 디바이스 상에서 실행되는 것에 응답하여, 디바이스로 하여금 본원에서 설명된 하나 이상의 방법 및 기술을 실행하게 하는 명령어들을 포함하는 하나 이상의 머신 판독가능한 매체에 관련될 수 있다.
실시예들은 코드로 구현될 수 있으며, 명령어들을 수행하도록 시스템을 프로그래밍하는데 사용될 수 있는 명령어들이 저장되어 있는 비-일시적인 저장 매체에 저장될 수 있다. 저장 매체는 이들로 제한되는 것은 아니지만, 플로피 디스크들, 광학 디스크들, SSD들(solid state drives), CD-ROM들(compact disk read-only memories), CD-RW들(compact disk rewritables), 및 광자기 디스크들(magneto-optical disks)를 포함하는 임의의 유형의 디스크, ROM들(read-only memories), DRAM들(dynamic random access memories) 및 SRAM들(static random access memories)과 같은 RAM들(random access memories), EPROM들(erasable programmable read-only memories), 플래시 메모리들, EEPROM(electrically erasable programmable read-only memories)과 같은 반도체 디바이스들, 자기 또는 광 카드들, 또는 전자 명령어들을 저장하는데 적절한 임의의 다른 유형의 매체를 포함할 수 있다.
비록 본 발명이 한정된 수의 실시예들에 대하여 설명되었지만, 당해 기술분야의 숙련된 자들은 이로부터 많은 변경들과 변형들을 인식할 수 있을 것이다. 첨부된 청구항들은 본 발명의 진정한 사상과 범주에 속하는 모든 이러한 변경들과 변형들을 포함한다.

Claims (25)

  1. 시스템으로서,
    프로세서; 및
    상기 프로세서에 결합된 메모리
    를 포함하고,
    상기 프로세서는,
    하나 이상의 코어;
    루프의 복수의 동작과 연관된 메모리 범위 정보를 저장하는 복수의 에일리어스 레지스터를 포함하는 레지스터 파일 - 상기 메모리 범위 정보는 메모리 내의 하나 이상의 메모리 위치를 참조함 - ; 및
    상기 에일리어스 레지스터들의 각각을 상기 루프의 대응하는 동작에 배정(assign)하는 레지스터 배정 수단 - 상기 배정들은 로테이션 스케줄에 따라 이루어지고, 상기 에일리어스 레지스터들 중 적어도 하나의 에일리어스 레지스터는 상기 루프의 제1 반복에서 제1 동작에 그리고 상기 루프의 후속하는 반복에서 제2 동작에 배정됨 -
    을 포함하는 시스템.
  2. 제1항에 있어서,
    상기 프로세서는 파이프라이닝된 스케줄에 따라 상기 루프의 상기 동작들을스케줄링하는 명령어 스케줄 수단을 더 포함하고, 상기 루프의 적어도 하나의 동작은 상기 루프의 동작들의 순서와는 상이한 실행 스케줄에 따라 실행되는 시스템.
  3. 제1항에 있어서,
    상기 하나 이상의 코어 중 하나의 코어는 제1 에일리어스 레지스터에 저장된 데이터를 상기 에일리어스 레지스터들 중 적어도 하나의 다른 에일리어스 레지스터에 저장된 데이터에 대해 비교를 수행하여 에일리어스가 존재하는지를 판정하는 시스템.
  4. 제1항에 있어서,
    제1 에일리어스 레지스터가 제1 수명시간 동안 상기 제1 동작에 배정되고 상기 제1 에일리어스 레지스터는 제2 수명시간 동안 제2 동작에 배정되고, 상기 제1 수명시간 및 상기 제2 수명시간은 중첩하지 않는 시간 기간들인 시스템.
  5. 제4항에 있어서,
    상기 제1 수명시간은 상기 루프의 제1 반복 내에 있고, 상기 제2 수명시간은 상기 제1 반복에 대해 연속하는 다음 반복인, 상기 루프의 제2 반복 내에 있는 시스템.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 레지스터 배정 수단은 연관된 수명시간이 만료되는 각각의 에일리어스 레지스터의 콘텐츠를 소거하는 로테이션 클린업 명령어를 실행하기 위한 것인 시스템.
  7. 명령어들을 포함하는 적어도 하나의 컴퓨터 판독가능한 매체로서, 상기 명령어들은, 실행되는 경우 시스템으로 하여금,
    로테이션 레지스터 파일의 복수의 에일리어스 레지스터의 각각을 루프의 복수의 반복에 대한 로테이션 시퀀스에 따라 연속하여 상기 루프의 대응하는 동작에 배정하고 - 각각의 에일리어스 레지스터는 상기 대응하는 동작에 의해 액세스되는 하나 이상의 메모리 위치의 표시를 저장하고, 상기 에일리어스 레지스터들 중 하나의 에일리어스 레지스터는 상기 루프의 제1 반복에서 제1 동작 및 상기 루프의 후속하는 반복에서 제2 동작에 배정됨 - ,
    상기 배정된 에일리어스 레지스터들 중 적어도 하나의 에일리어스 레지스터의 콘텐츠를 하나 이상의 다른 배정된 에일리어스 레지스터들의 콘텐츠와 비교함으로써 에일리어스 조건이 존재하는지를 판정
    하는 것을 가능하게 하는, 컴퓨터 판독가능한 매체.
  8. 제7항에 있어서,
    제1 에일리어스 레지스터가 제1 수명시간 동안 상기 제1 동작에 배정되고 상기 제1 에일리어스 레지스터는 제2 수명시간 동안 상기 제2 동작에 배정되고, 상기 제1 수명시간 및 상기 제2 수명시간은 중첩하지 않는 시간 기간들인, 컴퓨터 판독가능한 매체.
  9. 제8항에 있어서,
    상기 제1 수명시간 및 상기 제2 수명시간은 상기 루프의 연속하여 인접하는 반복들 내에 있는, 컴퓨터 판독가능한 매체.
  10. 제8항에 있어서,
    상기 제1 수명시간 및 상기 제2 수명시간은 상기 루프의 인접하지 않는 반복들 내에 있는, 컴퓨터 판독가능한 매체.
  11. 제7항에 있어서,
    상기 시스템으로 하여금,
    동일하거나 상이한 반복 내의 다른 동작에 대한 순서화된 관계에 기초하여 수명시간을 동작에 배정하고,
    상기 대응하는 에일리어스 레지스터를 상기 수명시간의 시간 지속기간 동안 상기 동작에 배정하는 것을 가능하게 하는 명령어들을 더 포함하는, 컴퓨터 판독가능한 매체.
  12. 제11항에 있어서,
    상기 시스템으로 하여금,
    상기 시간 지속기간의 만료에 따라 상기 대응하는 에일리어스 레지스터를 다른 반복에서 다른 동작에 재배정하는 것을 가능하게 하는 명령어들을 더 포함하는, 컴퓨터 판독가능한 매체.
  13. 제7항 내지 제12항 중 어느 한 항에 있어서,
    상기 시스템으로 하여금, 순서화된 관계의 존재에 반응하는 에일리어스에 대해 확인하게 하고, 상기 순서화된 관계는,
    상기 루프의 상기 제2 동작 이후에 실행하도록, 파이프라이닝된 스케줄에 따라 스케줄링된 상기 루프의 상기 제1 동작; 및
    상기 루프의 제1 동작이 상기 루프의 상기 제2 동작에 앞서 실행가능하다는, 상기 루프의 표시에 반응하여 표시되는, 컴퓨터 판독가능한 매체.
  14. 레지스터 파일의 복수의 에일리어스 레지스터의 각각을 루프의 복수의 반복에 대한 로테이션 시퀀스에 따라 연속하여 상기 루프의 대응하는 동작에 배정하는 단계 - 상기 에일리어스 레지스터들 중 하나의 에일리어스 레지스터를 상기 루프의 제1 반복에서 제1 동작에 그리고 상기 루프의 후속하는 반복에서 제2 동작에 배정하는 것을 포함하고, 각각의 에일리어스 레지스터는 상기 대응하는 동작에 의해 액세스되는 메모리 위치들의 표시를 저장함 - ; 및
    상기 배정된 에일리어스 레지스터들 중 적어도 하나의 에일리어스 레지스터의 콘텐츠를 하나 이상의 다른 배정된 에일리어스 레지스터의 콘텐츠와 비교함으로써 에일리어스 조건이 존재하는지를 판정하는 단계
    를 포함하는 방법.
  15. 제14항에 있어서,
    제1 에일리어스 레지스터를 제1 수명시간 동안 상기 제1 동작에 배정하는 단계 및 상기 제1 에일리어스 레지스터를 제2 수명시간 동안 상기 제2 동작에 배정하는 단계를 더 포함하고, 상기 제1 수명시간 및 제2 수명시간은 중첩하지 않는 시간 기간들인 방법.
  16. 제15항에 있어서,
    상기 제1 수명시간 및 상기 제2 수명시간은 상기 루프의 연속하여 인접하는 반복들 내에 있는 방법.
  17. 제15항에 있어서,
    제1 에일리어스 레지스터를 제1 수명시간 동안 상기 루프의 제1 반복에서 상기 제2 동작에 배정하는 단계 및 상기 제1 에일리어스 레지스터를 제2 수명시간 동안 상기 루프의 제2 반복에서 상기 제1 동작에 배정하는 단계를 더 포함하고, 상기 제1 수명시간 및 상기 제2 수명시간은 중첩하지 않는 시간 기간들인 방법.
  18. 제14항에 있어서,
    동일한 반복 또는 상이한 반복 내의 다른 동작에 대한 순서화된 관계에 기초하여 수명시간을 동작에 배정하는 단계, 및 대응하는 에일리어스 레지스터를 상기 수명시간의 시간 지속기간 동안 상기 동작에 배정하는 단계를 더 포함하는 방법.
  19. 제18항에 있어서,
    상기 시간 지속기간의 만료에 따라 상기 대응하는 에일리어스 레지스터를 다른 반복에서 다른 동작에 재배정하는 단계를 더 포함하는 방법.
  20. 제14항에 있어서,
    상기 루프의 상기 제1 동작에 배정된 제1 에일리어스 레지스터의 콘텐츠를 상기 제2 동작과 연관된 제2 수명시간 동안 상기 제2 동작에 배정된 제2 에일리어스 레지스터의 콘텐츠와 비교함으로써 에일리어스가 상기 루프의 제1 반복에 존재하는지를 판정하는 단계를 더 포함하고, 상기 제2 수명시간은 상기 제2 동작의 제2 스케줄링된 실행 시간에 대한 상기 제1 동작의 제1 스케줄링된 실행 시간에 의해 판정되는 방법.
  21. 제14항에 있어서,
    순서화된 관계의 존재에 반응하는 에일리어스에 대해 확인하는 단계를 더 포함하고, 상기 순서화된 관계는,
    상기 루프의 상기 제2 동작 이후에 실행하도록, 파이프라이닝된 스케줄에 따라 스케줄링된 상기 루프의 상기 제1 동작; 및
    상기 루프의 상기 제1 동작은 상기 루프의 상기 제2 동작 이전에 실행가능하다는, 상기 루프의 표시
    에 반응하여 표시되는 방법.
  22. 제14항 내지 제21항 중 어느 한 항의 방법을 수행하는 수단을 포함하는 장치.
  23. 제14항 내지 제21항 중 어느 한 항의 방법을 수행하도록 구성된 장치.
  24. 프로세서로서,
    하나 이상의 코어;
    루프의 복수의 동작과 연관된 메모리 범위 정보를 저장하는 복수의 에일리어스 레지스터를 포함하는 레지스터 파일 - 상기 메모리 범위 정보는 메모리 내의 하나 이상의 메모리 위치를 참조함 - ; 및
    상기 에일리어스 레지스터들의 각각을 상기 루프의 대응하는 동작에 배정하는 레지스터 배정 로직 - 상기 배정들은 로테이션 스케줄에 따라 이루어지고, 상기 에일리어스 레지스터들 중 적어도 하나의 에일리어스 레지스터는 상기 루프의 제1 반복에서 제1 동작에 그리고 상기 루프의 후속하는 반복에서 제2 동작에 배정됨 -
    를 포함하고,
    상기 프로세서에 메모리가 결합되는, 프로세서.
  25. 제24항에 있어서,
    파이프라이닝된 스케줄에 따라 상기 루프의 상기 동작들을 스케줄링하는 명령어 스케줄 로직을 더 포함하고, 상기 루프의 적어도 하나의 동작은 상기 루프의 상기 동작들의 순서와는 상이한 실행 스케줄에 따라 실행되는 프로세서.
KR1020147036540A 2013-05-30 2013-05-30 파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당 KR101752042B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/043224 WO2014193375A1 (en) 2013-05-30 2013-05-30 Allocation of alias registers in a pipelined schedule

Publications (2)

Publication Number Publication Date
KR20150016599A true KR20150016599A (ko) 2015-02-12
KR101752042B1 KR101752042B1 (ko) 2017-06-28

Family

ID=51989239

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147036540A KR101752042B1 (ko) 2013-05-30 2013-05-30 파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당

Country Status (7)

Country Link
US (1) US9495168B2 (ko)
EP (1) EP2875427B1 (ko)
JP (1) JP6008265B2 (ko)
KR (1) KR101752042B1 (ko)
CN (1) CN104412233B (ko)
AU (1) AU2013387185B2 (ko)
WO (1) WO2014193375A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101697038B1 (ko) * 2013-05-30 2017-01-16 인텔 코포레이션 파이프라이닝된 소프트웨어의 동적 최적화
US20170192789A1 (en) * 2015-12-30 2017-07-06 Rama Kishnan V. Malladi Systems, Methods, and Apparatuses for Improving Vector Throughput
US10169010B2 (en) 2016-06-01 2019-01-01 International Business Machines Corporation Performing register promotion optimizations in a computer program in regions where memory aliasing may occur and executing the computer program on processor hardware that detects memory aliasing
US10169009B2 (en) * 2016-06-01 2019-01-01 International Business Machines Corporation Processor that detects memory aliasing in hardware and assures correct operation when memory aliasing occurs
US10228921B2 (en) * 2016-06-01 2019-03-12 International Business Machines Corporation Compiler that performs register promotion optimizations in regions of code where memory aliasing may occur
US9934009B2 (en) * 2016-06-01 2018-04-03 International Business Machines Corporation Processor that includes a special store instruction used in regions of a computer program where memory aliasing may occur
CN108038002B (zh) * 2017-12-15 2021-11-02 天津津航计算技术研究所 一种嵌入式软件内存管理方法
CN108132842B (zh) * 2017-12-15 2021-11-02 天津津航计算技术研究所 一种嵌入式软件内存管理系统
US10798053B2 (en) * 2017-12-30 2020-10-06 Intel Corporation Alias-based time-limited lease addressing for internet of things devices
US11435987B2 (en) * 2019-12-24 2022-09-06 Advanced Micro Devices, Inc Optimizing runtime alias checks
JP7147808B2 (ja) * 2020-06-30 2022-10-05 株式会社安川電機 エンジニアリング装置、エンジニアリング方法、及びプログラム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2786574B2 (ja) * 1992-05-06 1998-08-13 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US5958048A (en) * 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
WO1998006039A1 (en) * 1996-08-07 1998-02-12 Sun Microsystems, Inc. Disambiguation memory circuit and operating method
KR100273759B1 (ko) 1997-12-26 2000-12-15 윤종용 제어 레지스터를 가지는 특정 용도 전용 하드웨어를 위한제어값 라이트회로
US6954927B2 (en) 1999-02-17 2005-10-11 Elbrus International Hardware supported software pipelined loop prologue optimization
US7634635B1 (en) * 1999-06-14 2009-12-15 Brian Holscher Systems and methods for reordering processor instructions
GB0002848D0 (en) * 2000-02-08 2000-03-29 Siroyan Limited Communicating instruction results in processors and compiling methods for processors
GB2363480B (en) * 2000-06-13 2002-05-08 Siroyan Ltd Predicated execution of instructions in processors
US6880154B2 (en) 2001-06-29 2005-04-12 Intel Corporation Alias-free test for dynamic array structures
US20030154363A1 (en) * 2002-02-11 2003-08-14 Soltis Donald C. Stacked register aliasing in data hazard detection to reduce circuit
US20030237080A1 (en) 2002-06-19 2003-12-25 Carol Thompson System and method for improved register allocation in an optimizing compiler
US20040025153A1 (en) * 2002-07-30 2004-02-05 Johnson Teresa L. System and method for software pipelining loops with multiple control flow paths
US8312331B2 (en) * 2009-04-16 2012-11-13 Freescale Semiconductor, Inc. Memory testing with snoop capabilities in a data processing system
US9405547B2 (en) 2011-04-07 2016-08-02 Intel Corporation Register allocation for rotation based alias protection register
WO2013048379A1 (en) * 2011-09-27 2013-04-04 Intel Corporation Expediting execution time memory aliasing checking

Also Published As

Publication number Publication date
CN104412233A (zh) 2015-03-11
US20150039861A1 (en) 2015-02-05
JP6008265B2 (ja) 2016-10-19
US9495168B2 (en) 2016-11-15
AU2013387185B2 (en) 2016-08-04
AU2013387185A1 (en) 2014-12-18
EP2875427A4 (en) 2016-07-13
EP2875427A1 (en) 2015-05-27
EP2875427B1 (en) 2020-08-26
WO2014193375A1 (en) 2014-12-04
CN104412233B (zh) 2019-05-14
JP2015520905A (ja) 2015-07-23
KR101752042B1 (ko) 2017-06-28

Similar Documents

Publication Publication Date Title
KR101752042B1 (ko) 파이프라이닝된 스케줄에서의 에일리어스 레지스터들의 할당
CN108537543B (zh) 区块链数据的并行处理方法、装置、设备和存储介质
TWI522792B (zh) 用以產生要求之設備、用於記憶體要求之方法、及運算系統
JP6430970B2 (ja) 異なる命令セットアーキテクチャを有するプロセッサ上におけるオペレーティングシステムの実行
TWI516908B (zh) 藉由耦合第一核心類型與第二核心類型來改善電力效能效率之設備、方法及系統
US8402259B2 (en) Accelerating wake-up time of a system
RU2608000C2 (ru) Представление фильтрации наблюдения, ассоциированной с буфером данных
US9405687B2 (en) Method, apparatus and system for handling cache misses in a processor
KR101697038B1 (ko) 파이프라이닝된 소프트웨어의 동적 최적화
JP2015520905A5 (ko)
CN105359109A (zh) 基于次计算机中的存储器错误移动主计算机中的对象
CN105765541A (zh) 用于机动车的控制器
JP6214469B2 (ja) 車両制御装置
CN106663471A (zh) 用于反向存储器备份的方法和装置
US10168936B2 (en) Memory system power management
CN103729142A (zh) 内存数据的推送方法及装置
CN108139929B (zh) 用于调度多个任务的任务调度装置和方法
Ji et al. Demand layering for real-time DNN inference with minimized memory usage
Orosa et al. Flexsig: Implementing flexible hardware signatures
CN108241508B (zh) 处理OpenCL内核的方法及用于该方法的计算设备
CN106775492B (zh) 一种固态硬盘中写入数据的方法和存储系统
Lee et al. High-performance and low-energy buffer mapping method for multiprocessor DSP systems
CN113076069A (zh) 双缓存方法、装置、电子设备及计算机可读存储介质
CN118035131A (zh) 数据预取方法及装置、处理器和计算机可读存储介质
Jangjaimon Effective Checkpointing for Networked Multicore Systems and Cloud Computing

Legal Events

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