KR101839479B1 - 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들 - Google Patents

더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들 Download PDF

Info

Publication number
KR101839479B1
KR101839479B1 KR1020157031766A KR20157031766A KR101839479B1 KR 101839479 B1 KR101839479 B1 KR 101839479B1 KR 1020157031766 A KR1020157031766 A KR 1020157031766A KR 20157031766 A KR20157031766 A KR 20157031766A KR 101839479 B1 KR101839479 B1 KR 101839479B1
Authority
KR
South Korea
Prior art keywords
register
partial
width
processor
bits
Prior art date
Application number
KR1020157031766A
Other languages
English (en)
Other versions
KR20150139931A (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 KR20150139931A publication Critical patent/KR20150139931A/ko
Application granted granted Critical
Publication of KR101839479B1 publication Critical patent/KR101839479B1/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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30105Register structure
    • 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
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

양태의 발명은 프로세서에 의해 수행된다. 방법은 부분 폭 로드 명령어를 수신하는 것을 포함한다. 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고, 레지스터를 목적지 피연산자로서 표시한다. 방법은 부분 폭 로드 명령어에 응답하여 표시된 메모리 위치로부터의 데이터를 프로세서에 로딩하는 것을 포함한다. 방법은 부분 폭 로드 명령어에 응답하여 로드된 데이터의 적어도 일부를 레지스터의 부분 폭에 기입하는 것을 포함한다. 방법은 프로세서의 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 레지스터의 나머지 폭 내에 저장된 비트들의 세트를 갖는 레지스터를 기입하는 것을 종료하는 것을 포함한다. 부분 폭 로드 명령어는 부분 폭 로드 모드를 표시하지 않는다. 다른 방법들, 프로세서들 및 시스템들이 또한 개시된다.

Description

더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들{MODE DEPENDENT PARTIAL WIDTH LOAD TO WIDER REGISTER PROCESSORS, METHODS, AND SYSTEMS}
본원에 설명된 실시예들은 일반적으로 프로세서들에 관련된다. 특히, 본원에 설명된 실시예들은 일반적으로 프로세서들에서의 메모리로부터 데이터를 로딩하는 것에 관련된다.
프로세서의 명령어 세트는 통상적으로 프로세서가 실행 또는 수행할 수 있는 각종의 상이한 유형들의 명령어를 포함한다. 예를 들어, 공통적으로 명령어 세트는 다양한 산술 명령어들, 다양한 논리 명령어들, 메모리로부터 프로세서로 데이터를 로딩하는 다양한 로드 명령어들 등을 포함할 수 있다.
한가지 과제는 명령어 세트 내에 포함될 수 있는 명령어들의 수가 일반적으로 제한된다는 것이다. 명령어들 각각은 연산 코드(operation code) 또는 오피코드(opcode)를 포함할 수 있다. 오피코드들은 수행될 특정 명령어들 및/또는 연산들을 특정하는데 사용되는 명령어들의 부분들을 나타낼 수 있다. 예를 들어, 메모리 명령어로부터의 소정의 데이터 로드는 다른 유형들의 명령어들과 그를 구별하고 프로세서가 그를 인식하게 하는 소정의 고유한 오피코드를 가질 수 있다. 오피코드는 명령어 포맷 내의 하나 이상의 필드 또는 위치 내에 소정 길이의 비트 그룹을 나타낼 수 있다. 종종, 원하는 수의 명령어들/연산들을 제공하면서 오피코드들의 비트들의 수를 상대적으로 짧게 유지하려고 시도하는 것이 바람직하다. 긴 오피코드들은 디코더의 크기 및/또는 복잡성을 증가시키는 경향이 있다. 또한, 긴 오피코드들은 전체 명령어 길이를 증가시키는 경향이 있고, 이는 명령어들이 보다 많은 프로그램 공간을 사용하고 보다 많은 캐시 내의 공간을 차지하게 할 수 있다. 소정의 오피코드 길이 및/또는 명령어 길이로 고유하게 식별될 수 있는 상이한 명령어들의 수는 종종 원하는 것보다 제한된다. 추가의 명령어들은 통상적으로 이용가능한 오피코드들을 궁극적으로 소진하지 않고 또는 가변 명령어 길이 아키텍처에서의 명령어들의 길이를 증가시키지 않고 명령어 세트에 연속하여 추가될 수 없다.
일부 경우들에서, 상이한 명령어들 및/또는 연산들은 동일한 오피코드(또는 오피코드의 동일한 부분)를 가질 수 있지만, 상이한 버전들의 명령어 및/또는 연산 간을 구별하기 위해 하나 이상의 추가 비트를 포함할 수 있다. 이러한 접근법에 대한 잠재적인 단점들은, 그것이 명령어 길이를 증가시키는 경향이 있을 수 있거나, 또는 일부 경우들에서 상이한 버전들의 명령어/연산 간을 구별하기 위한 추가의 비트(들)을 수용하기 위해 명령어 길이 내에 이용가능한 공간이 존재하지 않을 수 있다는 것이다.
본 발명은 실시예들을 예시하는데 사용되는 이하의 설명 및 첨부하는 도면들을 참조함으로써 가장 잘 이해될 수 있다.
도 1은 부분 폭 로드 명령어(partial width load instruction)를 수행하는 프로세서를 갖는 컴퓨터 시스템의 실시예의 블록도이다.
도 2는 부호 확장 부분 폭 로드 모드 또는 제로 확장 부분 폭 로드 모드(zero extension partial width load mode)에 따라 수행될 수 있는 부분 폭 로드 연산의 제1 예시적인 실시예의 블록도이다.
도 3은 병합 부분 폭 로드 모드(merging partial width load mode) 또는 제로 확장 부분 폭 로드 모드에 따라 수행될 수 있는 부분 폭 로드 연산의 제2 예시적인 실시예의 블록도이다.
도 4는 부분 폭 로드 명령어의 실시예를 프로세싱하는 경우 프로세서에 의해 수행될 수 있는 방법의 실시예의 블록 흐름도이다.
도 5는 제로 확장된 32 비트 메모리 어드레싱을 수행하는 64 비트 아키텍처 프로세서를 포함하는 컴퓨터 시스템의 실시예의 블록도이다.
도 6은 부분 폭 로드 모드를 변경하기 위한 사용자 레벨 소프트웨어 모듈과 운영 체제 모듈 사이의 상호작용의 실시예의 블록도이다.
도 7은 운영 체제 모듈, 특권 모듈(privileged module), 또는 다른 시스템 레벨 모듈에 의해 수행될 수 있는 방법의 실시예의 블록도이다.
도 8a는 본 발명의 실시예에 따른, 예시적인 순차 파이프라인(in-order pipeline) 및 예시적인 레지스터 리네이밍, 비순차(out-of-order) 발행(issue)/실행(execution) 파이프라인 모두를 예시하는 블록도이다.
도 8b는 본 발명의 실시예에 따른 프로세서 내에 포함될, 순차 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어의 예시적인 실시예 모두를 예시하는 블록도이다.
도 9a는 본 발명에 따른, 레벨 2(L2) 캐시의 로컬 서브세트를 갖는 단일 프로세서 코어를, 온-다이 상호접속 네트워크로의 그의 접속과 함께 예시하는 블록도이다.
도 9b는 본 발명의 실시예들에 따른, 도 9a에서의 프로세서 코어의 일부에 대한 확장 뷰이다.
도 10은 본 발명의 실시예들에 따른, 하나보다 많은 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 11은 본 발명의 일 실시예에 따른 시스템의 블록도이다.
도 12는 본 발명의 실시예에 따른 보다 구체적인 제1 예시적인 시스템의 블록도이다.
도 13은 본 발명의 실시예에 따른 보다 구체적인 제2 예시적인 시스템의 블록도이다.
도 14는 본 발명의 실시예에 따른 SoC의 블록도이다.
도 15는 본 발명의 실시예들에 따른, 소스 명령어 세트 내의 이진 명령어들을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대비하는 블록도이다.
일부 실시예들에서, 프로세서는 소정의 명령어 및/또는 소정의 오피코드를 2개 이상의 상이한 대응하는 방식으로 처리하는 2개 이상의 모드를 가질 수 있는데, 예를 들어, 메모리 명령어로부터의 부분 폭 로드를 2개 이상의 상이한 대응하는 방식으로 처리하는 2개 이상의 모드를 가질 수 있다. 다음의 설명에서, 다수의 특정 상세가 개시된다(예를 들어, 특정 명령어 연산들, 프로세서 구성들, 마이크로아키텍처 상세들, 연산들의 시퀀스들 등). 그러나, 실시예들은 이들 특정 상세 없이 실시될 수 있다. 다른 예들에서, 본 설명의 이해를 모호하게 하는 것을 회피하기 위해서 공지된 회로들, 구조들 및 기술들은 상세하게 제시되지 않았다.
도 1은 컴퓨터 시스템(100)의 블록도이다. 다양한 실시예들에서, 컴퓨터 시스템은 데스크탑 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 태블릿 컴퓨터, 넷북, 스마트폰, 개인 휴대 정보단말, 셀룰러 폰, 서버, 네트워크 디바이스(예로서, 라우터 또는 스위치), 모바일 인터넷 디바이스(MID), 미디어 플레이어, 스마트 텔레비전, 셋톱 박스, 비디오 게임 제어기, 또는 다른 전자 디바이스를 나타낼 수 있다.
컴퓨터 시스템은 프로세서(101)의 실시예를 포함한다. 일부 실시예들에서, 프로세서는 범용 프로세서일 수 있다. 예를 들어, 프로세서는 통상적으로 중앙 처리 유닛(CPU)으로서 사용되는 유형의 범용 프로세서일 수 있다. 다른 실시예들에서, 프로세서는 특수 목적 프로세서일 수 있다. 적절한 특수 목적 프로세서들의 예들은, 이것으로 한정되는 것은 아니지만, 단지 몇가지 예를 들면, 코-프로세서들, 그래픽 프로세서들, 통신 프로세서들, 네트워크 프로세서들, 암호 프로세서들, 임베디드 프로세서들 및 디지털 신호 프로세서들(DSP들)을 포함한다. 프로세서는 다양한 CISC(Complex Instruction Set Computing) 프로세서들, 다양한 RISC(Reduced Instruction Set Computing) 프로세서들, 다양한 VLIW(Very Long Instruction Word) 프로세서들, 이들의 다양한 혼성체들(hybrids), 또는 기타 타입의 프로세서들 전체 중 임의의 것일 수 있다.
컴퓨터 시스템은 또한 메모리(110)의 실시예를 포함한다. 메모리는 결합 또는 상호접속 메커니즘(109)에 의해 프로세서(101)와 결합된다. 적절한 결합 또는 상호접속 메커니즘의 예들을, 이것으로 한정되는 것은 아니지만, 하나 이상의 상호접속, 버스들, 허브들, 메모리 제어기들, 칩셋들, 칩셋 컴포넌트들, 등 및 다양한 그의 조합을 포함한다. 메모리는 동일하거나 상이한 유형의 하나 이상의 메모리 디바이스를 포함할 수 있다. 실시예들에 적절한 메모리의 한가지 공통적으로 사용되는 유형은 동적 랜덤 액세스 메모리(DRAM)이지만, 다른 유형의 메모리(예를 들어, 플래시 메모리)가 대안적으로 사용될 수 있다. 메모리는 그 안에 저장된 소프트웨어, 예를 들어, 하나 이상의 운영 체제(OS) 및 하나 이상의 애플리케이션(도시되지 않음)을 가질 수 있다. 연산 동안에, 소프트웨어의 명령어들은 프로세서에 제공될 수 있고 프로세서 상에서 실행될 수 있다.
도시된 바와 같이, 부분 폭 로드 명령어(102)가 프로세서(101)에 제공될 수 있다. 예를 들어, 페치 유닛(fetch unit)(도시되지 않음)은 부분 폭 로드 명령어를 페치할 수 있다. 부분 폭 로드 명령어는 머신 코드 명령어, 어셈블리 언어 명령어, 매크로명령어, 또는 장치의 ISA의 제어 신호를 나타낼 수 있다. 부분 폭 로드 명령어는 메모리(110) 내의 메모리 위치(111)를 소스 피연산자(source operand)로서 명시적으로 특정할 수 있고(예를 들어, 하나 이상의 필드 또는 비트들의 세트를 통해), 또는 다른 방식으로 표시할 수 있고(예를 들어, 묵시적으로 표시함), 메모리로부터 로딩된 부분 폭 데이터(112)가 저장될 목적지 피연산자로서 목적지 레지스터(115)를 특정하거나 또는 다른 방식으로 표시할 수 있다. 본원에서 사용된 용어 "부분 폭 데이터"는 데이터가 저장될 목적지 레지스터(115)의 부분 폭만을 또는 데이터 채움(data filling)을 지칭하도록 사용된다.
프로세서는 디코드 유닛(103)을 포함한다. 디코드 유닛은 또한 디코더 또는 디코드 로직으로 지칭될 수 있다. 디코드 유닛은 부분 폭 로드 명령어를 수신할 수 있다. 디코드 유닛은 상대적으로 상위 레벨의 명령어들(예를 들어, 머신 코드 명령어들, 어셈블리 언어 명령어들, 매크로명령어 등)을 디코드하고, 하나 이상의 대응하는 상대적으로 하위 레벨의 명령어들 또는 제어 신호들(예를 들어, 하나 이상의 마이크로명령어, 마이크로 연산, 마이크로 코드 엔트리 포인트 등)을 출력하도록 동작가능할 수 있다. 하위 레벨 명령어(들) 또는 제어 신호(들)은 상대적으로 상위 레벨 명령어들을 반영, 표현 및/또는 그로부터 도출될 수 있고, 하위 레벨 연산(들)(예를 들어, 회로 레벨 또는 하드웨어 레벨 연산들)을 통해 상위 레벨 명령어를 구현할 수 있다. 디코드 유닛은, 이것으로 한정되는 것은 아니지만, 관련 기술분야에 공지된 디코드 유닛들을 구현하는데 이용되는 마이크로코드 판독 전용 메모리들(ROM들), 룩업 테이블들, 하드웨어 구현들, 프로그래머블 로직 어레이들(PLA들), 다른 메커니즘들 및 그의 조합들을 포함하는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다.
다른 실시예들에서, 명령어 에뮬레이터(instruction emulator), 번역기(translator), 모퍼(morpher), 인터프리터(interpreter), 또는 변환기(converter)가 디코드 유닛(103) 대신에 또는 그에 부가하여 사용될 수 있다. 명령어 변환기는 명령어를 하나 이상의 대응하는 도출된 명령어들 또는 제어 신호들로 에뮬레이트, 변환, 모프, 인터프리트, 또는 다른 방식으로 변환할 수 있다. 다양한 상이한 유형의 그러한 명령어 변환기들이 관련 기술분야에 공지되어 있으며, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로 구현될 수 있다. 일부 실시예들에서, 명령어 변환기는 수신된 상위 레벨 명령어를 하나 이상의 중간 레벨 명령어로 변환할 수 있고, 디코드 유닛은 하나 이상의 중간 레벨 명령어를 프로세서의 네이티브 로직(native logic)에 의해 수행될 수 있는 하나 이상의 하위 레벨 명령어 또는 제어 신호들로 디코드할 수 있다.
도시된 바와 같이, 디코드 유닛은 프로세서의 모드 의존형 부분 폭 로드 시스템(113)의 일부이다. 일부 실시예들에서, 2개 이상의 모드가 사용되어 부분 폭 로드 명령어 및/또는 그의 오피코드를 2개 이상의 상이한 대응하는 방식으로 처리할 수 있다. 유리하게도, 이는 상이한 연산들이 추가의 오피코드를 활용할 필요 없이 수행되게 하도록 도울 수 있다는 장점이 있고, 배경기술 부분에서 논의된 바와 같이, 이는 일부 경우들에서 도전과제일 수 있다. 디코드 유닛은 부분 폭 로드 모드(105)와 결합 또는 다른 방식으로 그와 통신할 수 있다. 일부 실시예들에서, 부분 폭 로드 모드는 다수의 상이한 부분 폭 로드 모드 중 하나를 표시하기 위한 하나 이상의 비트를 포함할 수 있다. 일 양태에서, 단일 비트가 사용되어 2개의 상이한 부분 폭 로드 모드 중 어느 하나를 표시할 수 있다. 다른 양태에서, 2개, 적어도 3개, 적어도 4개 또는 선택적으로 4개보다 많은 상이한 부분 폭 로드 모드 중 임의의 하나를 표시하기 위해 2개 이상의 비트가 사용될 수 있다. 일부 실시예들에서, 하나 이상의 비트가 레지스터(예를 들어, 제어, 상태 또는 구성 레지스터)(106) 또는 다른 온-다이 저장 위치에 저장될 수 있다. 대안적으로, 부분 폭 로드 모드는 반드시 제어, 상태 또는 구성 레지스터 내가 아니라 하나 이상의 개별 또는 분리된 비트들에 선택적으로 포함될 수 있다. 이하에 더 설명되는 바와 같이, 소프트웨어 모듈(예를 들어, 사용자 레벨 애플리케이션 모듈, 운영 체제 모듈, 가상 머신 모니터 모듈, 특권 소프트웨어 모듈, 등)은 부분 폭 로드 모드(105)를 부분 폭 로드 명령어(102)(예를 들어, 부분 폭 로드 명령어를 활용하는 소프트웨어)에 대해 적절하고, 바람직하고, 또는 의도되는 것으로 (예를 들어, 하나 이상의 비트를 변경함으로써)변경할 수 있다.
디코드 유닛 및/또는 프로세서는 사용할 현재의 부분 폭 로드 모드를 결정하기 위해 부분 폭 로드 모드에 액세스할 수 있고, 디코드 유닛은 결정된 부분 폭 로드 모드에 따라 부분 폭 로드 명령어를 디코드할 수 있다. 일부 실시예들에서, 부분 폭 로드 모드는 부분 폭 로드 명령어 및/또는 그의 오피코드에 대해 상이한 의미, 해석 및/또는 연산을 제공하도록 사용될 수 있다. 일부 실시예들에서, 디코드 유닛은 명령어와 연관된 현재의 부분 폭 로드 모드(예를 들어, 명령어가 디코드되는 시점에서의 모드)에 의존하는, 그에 기초하는, 및/또는 그와 부합하는 방식으로 부분 폭 로드 명령어를 디코드하는 부분 폭 로드 모드 의존형 디코드 로직(104)을 포함할 수 있다. 예를 들어, 하나 이상의 명령어 또는 제어 신호들의 제1 세트는 제1 부분 폭 로드 모드에서의 부분 폭 로드 명령어로부터 디코드될 수 있는 반면, 하나 이상의 명령어 또는 제어 신호들의 상이한 제2 세트는 상이한 제2 부분 폭 로드 모드에서의 부분 폭 로드 명령어(예를 들어, 동일한 오피코드)로부터 디코드될 수 있다. 모드 의존형 명령어들 또는 제어 신호들(107)은 현재 모드(105)와 부합하는 디코드 유닛으로부터 출력될 수 있다.
일부 실시예들에서, 부분 폭 로드 명령어는 부분 폭 로드 모드(105)를 특정할 수 있거나 또는 다른 방식으로 표시할 수 있다(예를 들어, 명령어/연산의 다수의 상이한 특징들 간을 구별하거나 선택하는 명령어의 비트가 없을 수 있거나 다른 방식으로 모드를 특정할 수 있음). 이것은 일반적으로 명령어 길이를 증가시키는 것을 회피하도록 돕고, 명령어 길이가 그러한 추가의 비트를 허용하지 않는 기법의 사용을 잠재적으로 허용할 수 있고, 디코드될 비트들의 수를 잠재적으로 감소 또는 제한하거나, 다른 잠재적인 이점들을 제공할 수 있다. 일부 실시예들에서, 어느 부분 폭 로드 모드를 사용할지를 부분 폭 로드 명령어의 비트들 중 임의의 것 또는 전부를 조사하여 말한다는 것은 불가능할 수 있다.
도 1을 다시 참조하면, 메모리 서브시스템(108)은 디코드 유닛(103) 및 메모리(110)와 결합된다. 본 기술분야에 공지된 다양한 종래의 메모리 서브시스템이 적절하다. 메모리 서브시스템은, 부분 폭 로드 명령어(102)에 응답하여 및/또는 그의 결과로서(예를 들어, 현재 부분 폭 로드 모드(105)에 대응하는 제어 신호(들) 또는 하나 이상의 디코드된 명령어(들)에 응답하여), 표시된 메모리 위치(111)로부터 프로세서 내로 데이터를 로드하도록 동작가능할 수 있다. 전술한 바와 같이, 부분 폭 로드 명령어는 부분 폭 데이터(112)을 갖는 메모리 위치(111)를 특정하거나 다른 방식으로 표시할 수 있다. 부분 폭 로드 명령어는 또한 부분 폭 데이터가 저장되는 목적지 레지스터(115)를 특정하거나 다른 방식으로 표시할 수 있다.
부분 폭 로드 모드 의존형 레지스터 기입 유닛(114)은 디코드 유닛(103), 메모리 서브시스템(108), 및 목적지 레지스터(115)와 결합된다. 간략함을 위해, 부분 폭 로드 모드 의존형 레지스터 기입 유닛은 또한 단순히 모드 의존형 레지스터 기입 유닛 또는 레지스터 기입 유닛이라고 지칭될 수 있다. 모드 의존형 레지스터 기입 유닛은, 부분 폭 로드 명령어(102)에 응답하여 및/또는 그의 결과로서(현재 부분 폭 로드 모드(105)에 대응하는 제어 신호(들)(107) 또는 하나 이상의 디코드된 명령어(들)에 응답하여), 부분 폭 로드 모드에 의존하는 및/또는 그에 부합하는 저장된 결과를 갖는 레지스터(115)를 기입 또는 다른 방식으로 액세스하도록 동작가능할 수 있다. 일부 실시예들에서, 모드 의존형 레지스터 기입 유닛은 로드된 부분 폭 데이터(112)의 적어도 일부분을 레지스터의 부분 폭에 기입하도록 동작가능할 수 있고, 대응하는 부분 폭 로드 모드에 의존하는 및/또는 그에 부합하는 비트 값들을 갖는 비트들의 세트(117, 118)가 레지스터의 나머지 폭에 저장되어 있는 레지스터의 기입을 종료 또는 완료하도록 동작가능할 수 있다. 모드 의존형 레지스터 기입 유닛 및/또는 프로세서는 부분 폭 로드 명령어에 응답하는 구체적 또는 특정 로직(예를 들어, 펌웨어 및/또는 소프트웨어 중 하나 이상과 잠재적으로 결합된 회로 또는 다른 하드웨어)을 포함할 수 있다.
상이한 유형들의 부분 폭 로드 모드들의 다양한 조합들이 상이한 실시예들에 적절하다. 예들은, 이것으로 한정되는 것은 아니지만, 부호 확장된 부분 폭 로드 모드, 제로 확장된 부분 폭 로드 모드, 병합 부분 폭 로드 모드, 및 본 기술분야에 공지된 다른 부분 폭 로드 모드를 포함한다. 부호 확장된 부분 폭 로드 모드에서, 부분 폭 데이터의 부호 비트(예를 들어, 이진 0 또는 이진 1의 값을 갖는 최상위 비트)가 부분 폭 데이터에 의해 점유되지 않은 레지스터의 나머지 폭에 복사, 확장 또는 다른 방식으로 저장 또는 기입될 수 있다. 제로 확장된 부분 폭 로드 모드에서, 이진 0들은 부분 폭 데이터에 의해 점유되지 않은 레지스터의 나머지 폭에 삽입, 확장 또는 다른 방식으로 저장 또는 기입될 수 있다. 병합 부분 폭 로드 모드에서, 부분 폭 데이터는 레지스터 기입의 시점에서 레지스터에 이미 저장된 데이터 또는 원래의 또는 기존재하는(preexisting) 비트들과 병합될 수 있다. 이러한 원래의 또는 기존재하는 데이터는 수정 또는 겹쳐써질(overwritten) 필요는 없다. 예를 들어, 병합 부분 폭 로드 모드는 부분 폭을 레지스터의 최하위 순서 부분 내에 저장하여 그 최하위 순서 부분 내에 원래의 또는 기존재하는 데이터를 겹쳐쓸수 있고, 레지스터의 나머지 최상위 순서 부분 내의 원래의 또는 기존재하는 데이터를 유지할 수 있다. 다양한 실시예들에서, 이러한 또는 다른 유형들의 부분 폭 로드 모드들 중 2개 이상의 조합들이 사용될 수 있다. 상이한 대응하는 값들(116)이 상이한 모드들에서 목적지 레지스터에 기입될 수 있다. 예시된 예에서, 제로 확장된 부분 폭 로드 모드에서, 부분 폭 데이터(112)는 목적지 레지스터의 부분(예를 들어, 최하위 순서 절반 또는 다른 부분)에 포함될 수 있고, 모든 0들(117)은 목적지 레지스터의 다른 부분(예를 들어, 최상위 순서 부분)에 저장될 수 있다. 부호 확장된 부분 폭 로드 모드에서, 부분 폭 데이터(112)는 목적지 레지스터의 부분(예를 들어, 가장 낮은 순서 절반 또는 다른 부분)에 포함될 수 있고 부호 비트들(118)(예를 들어, 부분 폭 데이터(112)의 최상위 비트에 기초함)은 목적지 레지스터의 다른 부분(예를 들어, 최상위 순서 부분 또는 다른 부분)에 저장될 수 있다. 다른 실시예들에서, 상이한 부분 폭 로드들의 다른 유형들 또는 조합들이 사용될 수 있다. 예를 들어, 다른 실시예에서, 병합 확장 부분 폭 로드 모드(merging extending partial width load mode)(예를 들어, 도 3 참조) 또는 다른 유형의 부분 폭 로드 모드가, 예시된 모드들 중 하나 대신에 사용될 수 있거나, 부분 폭 로드 모드의 추가의 제3 유형으로서 사용될 수 있다.
설명 및 개념을 불명확하게 하지 않기 위해, 간략화된 프로세서(101)가 도시되고 설명되었다. 장치는 프로세서들에서 일반적으로 발견되는 다양한 다른 공지된 컴포넌트들을 포함할 수 있다. 그러한 컴포넌트들의 예들은, 이것으로 한정되는 것은 아니지만, 분기 예측 유닛, 명령어 페치 유닛, 명령어 및 데이터 캐시들, 제2 또는 더 높은 레벨의 캐시들, 명령어 및 데이터 변환 색인 버퍼들, 프리페치(prefetch) 버퍼들, 마이크로명령어 큐들, 마이크로명령어 시퀀서들, 레지스터 리네이밍 유닛, 명령어 스케줄링 유닛, 버스 인터페이스 유닛들, 리타이어먼트(retirement) 유닛, 프로세서들에 포함된 다른 컴포넌트들, 및 그의 다양한 조합들을 포함한다. 프로세서들 내의 컴포넌트들의 사실상 다수의 상이한 조합들 및 구성들이 존재하고, 실시예들은 임의의 특정 조합 또는 구성으로 한정되지 않는다.
도 2는 부호 확장 부분 폭 로드 모드(220) 또는 제로 확장 부분 폭 로드 모드(221) 중 어느 하나에 따라 수행될 수 있는 부분 폭 로드 연산(219)의 제1 예시적인 실시예의 블록도이다. 부분 폭 로드 연산은 연관된 부분 폭 로드 모드(205)(예를 들어, 부분 폭 로드 명령어가 디코드되는 시점에서의 부분 폭 로드 모드) 및 부분 폭 로드 명령어(202)에 응답하여 수행될 수 있다.
부분 폭 로드 명령어는 소스 피연산자로서 메모리 위치(211)를 특정 또는 다른 방식으로 표시할 수 있고, 목적지 피연산자로서 목적지 레지스터(215)를 특정 또는 다른 방식으로 나타낼 수 있다. 메모리 위치는 부분 폭 로드 명령어에 응답하여 목적지 레지스터 내로 로드되는 부분 폭 데이터를 저장한다. 예시의 명료함을 위해, 8 비트 폭의 부분 폭 데이터(212)가 도시된다. 예시된 예에서, 8 비트 부분 폭 데이터는, 좌측 상의 최상위 비트 위치로부터 우측 상의 최하위 비트 위치까지의 값들 "11110000"을 갖는다. 그러나, 이러한 값들은 단지 예들이며, 임의의 다른 가능한 비트 값들이 대안적으로 사용될 수 있다는 것이 이해될 것이다. 또한, 다른 실시예들에서, 8 비트 폭의 부분 폭 데이터가 아니라, 부분 폭 데이터는 다른 폭들(예를 들어, 16 비트, 32 비트, 64 비트 등)을 가질 수 있다. 마찬가지로, 예시의 단순함을 위해, 예시된 목적지 레지스터는 16 비트의 폭을 갖는다. 다른 실시예들에서, 목적지 레지스터는 다른 폭들(예를 들어, 32 비트, 64 비트, 128 비트 등)을 가질 수 있다. 일부 실시예들에서, 본 예에서와 같이, 부분 폭 데이터는 목적지 레지스터의 폭의 절반일 수 있으나, 이는 요구되는 것은 아니다. 다른 실시예들에서, 예를 들어, 부분 폭 데이터는 16 비트일 수 있고 목적지 레지스터는 64 비트일 수 있고, 또는 부분 폭 데이터는 8 비트일 수 있고 목적지 레지스터는 32 비트 등일 수 있다. 다른 예로서, 부분 폭 데이터는 64 비트일 수 있고 목적지 레지스터는 128 비트일 수 있다.
모드 의존형 레지스터 기입 유닛(214)은 목적지 레지스터(215)와 결합되고, 메모리 위치(211)와 결합되고, 부분 폭 로드 명령어(202)(예를 들어, 디코드 유닛)와 결합된다. 레지스터 기입 유닛은, 부분 폭 로드 명령어에 응답하여, 목적지 레지스터에 대해 기입 또는 저장을 수행하도록 동작가능할 수 있다. 기입 또는 저장이 수행되는 방식은 부분 폭 로드 명령어와 연관되는 부분 폭 로드 모드에 의존하거나 또는 그에 기초할 수 있다. 이러한 제1 예시적인 실시예에서, 부분 폭 로드 모드는 (예시에서 좌측 상의)부호 확장 부분 폭 로드 모드(220) 또는 (예시에서 우측 상의)제로 확장 부분 폭 로드 모드(221) 중 어느 하나를 표시할 수 있다. 이러한 상이한 유형들의 부분 폭 로드들 모두에 있어서, 부분 폭 데이터(212)(예를 들어, 본 예에서는 8 비트 부분 폭 데이터)는 목적지 레지스터 내에 기입 또는 저장될 수 있다. 예시된 실시예에서, 로드된 부분 폭 데이터는 목적지 레지스터의 최하위 순서 부분에 기입되지만, 이것이 요구되는 것은 아니다. 도시된 바와 같이, 부호 확장 부분 폭 로드 모드(220) 또는 제로 확장 부분 폭 로드 모드(221) 중 어느 하나에서, 8 비트 부분 폭 데이터 값들 "11110000"은 목적지 레지스터(215-1, 215-2)의 비트들 [7:0]에 저장될 수 있다. 다른 실시예들에서, 다른 크기의 부분 폭 데이터가 사용될 수 있고 및/또는 부분 폭 데이터는 목적지 레지스터의 다른 부분들/위치들에 기입될 수 있다(예를 들어, 최상위 위치 등).
예시된 실시예에서, 목적지 레지스터의 최상위 순서 부분(예를 들어, 본 예에서 8 비트의 최상위 순서 위치)은 2개의 상이한 유형들의 부분 폭 로드 연산들/모드들에 대해 상이하게 처리된다. 부호 확장 부분 폭 로드 모드(220)에 대해, 모드 의존형 레지스터 기입 유닛은 부분 폭 데이터를 저장하는데 사용되지 않은 목적지 레지스터(215-1)의 모든 나머지 상위 비트들(more significant bits)에 부호 비트들(218)(예를 들어, 부분 폭 데이터의 최상위 비트의 부호 비트)를 기입 또는 저장하도록 제어된다. 예시된 예에서, 비트 7은 부분 폭 데이터의 부호 비트이거나 최상위 비트이다. 이 예에서, 부호 비트는 이진 1이고 대응하여 이진 1(218)이 목적지 레지스터(215-1)의 비트들[15:8] 각각에 저장된다. 제로 확장 부분 폭 로드 모드(221)에 대해, 모드 의존형 레지스터 기입 유닛은 부분 폭 데이터를 저장하는데 사용되지 않은 목적지 레지스터(215-2)의 모든 나머지 상위 비트들에 모두 0(217)을 기입 또는 저장하도록 제어된다. 도시된 바와 같이, 이진 0들(217)은 목적지 레지스터(215-2)의 비트들[15:8]의 각각에 저장될 수 있다. 따라서, 모드 의존형 레지스터 기입 유닛 및/또는 프로세서는 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 비트들(예를 들어, 217 또는 218)이 (예를 들어, 부분 폭 데이터를 저장하는데 사용된 최하위 순서 부분보다 높은 모든 상위 비트들) 부분 폭 데이터를 저장하는데 사용되지 않은 그의 일부분에 저장되어 있는 목적지 레지스터(215)를 기입하는 것을 종료할 수 있다.
도 3은 병합 부분 폭 로드 모드(322) 또는 제로 확장 부분 폭 로드 모드(321) 중 어느 하나에 따라 수행될 수 있는 부분 폭 로드 연산(319)의 제2 예시적인 실시예의 블록도이다. 이러한 제2 예시적인 실시예는 이전에 전술된 도 2의 제1 예시적인 실시예와 특정 유사성을 갖는다. 설명의 모호함을 회피하기 위해, 모든 유사성들을 반복하지 않고 제2 예시적인 실시예의 상이하거나 추가의 특징들 및 특성들이 주로 설명될 것이다. 그러나, 도 2의 제1 예시적인 실시예의 전술한 특징들 및 특성들은 또한 제2 예시적인 실시예에 선택적으로 적용할 수 있다는 것을 이해할 것이다.
부분 폭 로드 연산(319)은 연관된 부분 폭 로드 모드(305) 및 부분 폭 로드 명령어(302)에 응답하여 수행될 수 있다. 부분 폭 로드 명령어는 메모리 위치(311)를 소스 피연산자로서 특정하거나 다른 방식으로 표시할 수 있고, 목적지 레지스터(315)를 목적지 피연산자로서 특정하거나 다른 방식으로 표시할 수 있다. 메모리 위치는 부분 폭 로드 명령어에 응답하여 목적지 레지스터 내로 로드되는 부분 폭 데이터(312)를 저장한다. 예시의 단순성을 위해, 본 예에서, 8 비트 부분 폭 데이터 및 16 비트 목적지 레지스터가 도시되지만, 본 발명의 범주는 그렇게 제한되지 않는다.
모드 의존형 레지스터 기입 유닛(314)은, 부분 폭 로드 명령어에 응답하여, 목적지 레지스터에 대한 기입 또는 저장을 수행하도록 동작가능할 수 있다. 기입 또는 저장이 수행되는 방식은 부분 폭 로드 명령어와 연관된 부분 폭 로드 모드에 의존하거나 그에 기초할 수 있다. 이러한 제2 예시적인 실시예에서, 부분 폭 로드 모드는 (예시에서의 좌측 상의)병합 또는 병합된 부분 폭 로드 모드(322) 또는 (예시에서의 우측 상의)제로 확장 부분 폭 로드 모드(321) 중 어느 하나를 표시할 수 있다. 이러한 상이한 유형들의 부분 폭 로드들 모두에서, 부분 폭 데이터(312)(예를 들어, 본 예에서는 8 비트 부분 폭 데이터)는 목적지 레지스터에 기입 또는 저장될 수 있다. 예시된 실시예에서, 로드된 부분 폭 데이터는 목적지 레지스터의 최하위 순서 부분에 기입되지만, 이것이 요구되는 것은 아니다. 도시된 바와 같이, 병합 또는 병합된 확장 부분 폭 로드 모드(322) 또는 제로 확장 부분 폭 로드 모드(321) 중 어느 하나에서, 8 비트 부분 폭 데이터 값들 "11110000"이 목적지 레지스터들(315-1, 315-2)의 비트들[7:0]에 저장될 수 있다. 다른 실시예들에서, 다른 크기들의 부분 폭 데이터가 사용될 수 있고 및/또는 부분 폭 데이터가 목적지 레지스터의 다른 부분들/위치들에 기입될 수 있다(예를 들어, 최상위 부분 등).
예시된 실시예에서, 목적지 레지스터(215)의 최상위 순서 부분(예를 들어, 본 예에서는 8 비트의 최상위 순서 부분)은 2개의 상이한 유형들의 부분 폭 로드 연산들/모드들에 대해 상이하게 처리된다. 병합 또는 병합된 확장 부분 폭 로드 모드(322)에 대해, 모드 의존형 레지스터 기입 유닛은, 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 비트들(323-1)이 부분 폭 데이터(예를 들어, 8 비트 부분 폭 데이터를 저장하는데 사용된 최하위 순서 8 비트들보다 높은 모든 상위 비트들)을 저장하는데 사용되지 않은 부분에 저장되어 있는 목적지 레지스터(315-1)를 기입하는 것을 종료하도록 제어된다. 예를 들어, 도시된 바와 같이, 레지스터 기입 유닛은 비트들의 원래 세트(즉, 부분 폭 로드 명령어 이전에 목적지 레지스터(315-1)에 원래 있던 그러한 비트들)가 목적지 레지스터(315-1)의 최상위 나머지 8 비트 부분(most significant remainder 8-bit portion)에 보유되어 있는 목적지 레지스터(315-1)를 기입하는 것을 종료할 수 있다. 참조를 위해, 부분 레지스터 기입 명령어가 수행되기 이전에 존재했던 기존재하는 비트 값들(323-2)의 세트가 도시된다. 기존재하는 비트 값들(323-2)의 비트들[15:8]은 값들 "01010101"을 갖는다. 부분 레지스터 기입 명령어가 수행되기 이전에 존재했던 기존재하는 비트 값들(323-2)의 비트들[15:8] 내의 이러한 동일한 값들 "01010101"이 또한 부분 레지스터 기입 명령어를 수행한 후에 목적지 레지스터(315-2)의 비트들[15:8] 내의 동일한 비트 값들 "01010101"로서 나타난다는 것을 유의한다. 부분 폭 데이터는 병합될 수 있거나 목적지 레지스터 내로 삽입되어 일부 비트들을 대체하는 한편 다른 비트들을 변경되지 않은 채로 남겨둔다. 제로 확장 부분 폭 로드 모드(321)에 대해, 모드 의존형 레지스터 기입 유닛은 부분 폭 데이터를 저장하는데 사용되지 않은 목적지 레지스터(315-2)의 모든 나머지 상위 비트들에 모두 0(317)을 기입 또는 저장하도록 제어된다. 도시된 바와 같이, 이진 0들(317)은 목적지 레지스터(315-2)의 비트들[15:8] 각각에 저장될 수 있다.
이들은 적절한 유형들의 부분 폭 로드 모드들의 일부 예시적인 예들의 실시예들이라는 것이 이해되어야 한다. 제1 모드가 부호 확장 부분 폭 로드 모드를 이용하고 제2 모드가 병합된 부분 폭 로드 모드를 이용하는 다른 실시예가 상정된다. 도 2의 실시예가 병합된 부분 폭 로드 모드를 포함하는 추가의 제3 모드를 부가하는 또 다른 실시예가 상정된다. 도 3의 실시예가 부호 확장 부분 폭 로드 모드를 포함하는 추가의 제3 모드를 부가하는 추가의 실시예가 상정된다. 다른 실시예들은 다른 유형들의 부분 폭 로드 모드들(예를 들어, 1들의 확장 등)에 기초할 수 있다. 또한, 전술한 바와 같이, 또 다른 실시예들에서, 목적지 레지스터 및/또는 부분 폭 데이터의 비트 폭들 각각은 더 넓거나 더 좁을 수 있고, 부분 폭 데이터는 목적지 레지스터의 폭의 절반일 필요는 없다.
일부 실시예들에서, 도 2 및/또는 도 3의 연산들은 도 1의 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 또한, 도 1의 프로세서에 대하여 본 명세서에 설명된 상세들 및 선택적인 상세들은 실시예들이 이러한 프로세서에 의해 그리고/또는 그 내에서 수행될 수 있는 도 2 및/또는 도 3의 연산들에 선택적으로 적용될 수 있다. 대안적으로, 도 2 및/또는 도 3의 연산들은 유사하거나 상이한 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 또한, 도 1의 프로세서는 도 2 및/또는 도 3의 것들과 동일하거나, 유사하거나 또는 상이한 연산들을 수행할 수 있다.
도 4는 부분 폭 로드 명령어의 실시예를 프로세싱하는 경우 프로세서에 의해 수행될 수 있는 방법(430)의 실시예의 블록 흐름도이다. 일부 실시예들에서, 도 4의 연산들 및/또는 방법들은 도 1의 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 도 1의 프로세서에 대하여 본 명세서에 설명된 컴포넌트들, 특징들 및 특정의 선택적인 상세들은 또한 이러한 프로세서에 의해 및/또는 그 내에서 수행될 수 있는 도 4의 연산들 및/또는 방법들에 선택적으로 적용될 수 있다. 대안적으로, 도 4의 연산들 및/또는 방법들은 유사하거나 상이한 프로세서에 의해 및/또는 그 내에서 수행될 수 있다. 또한, 도 1의 프로세서는 도 4의 것들과 동일하거나, 유사하거나 또는 상이한 연산들 및/또는 방법들을 수행할 수 있다.
본 방법은 블록(431)에서 부분 폭 로드 명령어를 수신하는 것을 포함한다. 다양한 양태들에서, 명령어는 프로세서, 명령어 프로세싱 장치, 또는 그의 일부(예를 들어, 명령어 페치 유닛, 디코드 유닛 등)에서 수신될 수 있다. 다양한 양태들에서, 명령어는 오프-다이(off-die) 소스로부터(예를 들어, 메인 메모리, 상호접속 등으로부터) 또는 온-다이(on-die) 소스로부터(예를 들어, 페치 유닛, 명령어 캐시 등으로부터) 수신될 수 있다. 일부 실시예들에서, 부분 폭 로드 명령어는 메모리 위치를 소스 피연산자로서 특정하거나 다른 방식으로 표시할 수 있고, 레지스터를 목적지 피연산자로서 특정하거나 다른 방식으로 표시할 수 있다. 일부 실시예들에서, 부분 폭 로드 명령어는 부분 폭 로드 모드를 특정하지 않거나 다른 방식으로 표시하지 않을 수 있다(예를 들어, 모드를 특정하거나 미리결정된 모드를 선택하기 위한 비트(들)을 갖지 않을 수 있음).
본 방법은 블록(432)에서, 부분 폭 로드 모드를 확인하거나 또는 다른 방식으로 결정하는 것을 선택적으로 포함한다. 대안적으로, 부분 폭 로드 모드는 그를 확인 또는 결정할 필요 없이 자동적으로 시행될 수 있다. 본 방법은 또한, 블록(433)에서, 부분 폭 로드 명령어에 응답하여, 표시된 메모리 위치로부터의 데이터를 프로세서로 로딩하는 것을 포함한다.
본 방법은 블록(434)에서, 부분 폭 로드 명령어에 응답하여, 로드된 데이터의 적어도 일부를 목적지 레지스터의 부분 폭에 기입하는 것을 포함한다. 로드된 데이터의 전부가 기입될 수 있는지 또는 오직 그의 일부만이 기입될 수 있는지는 명령어의 구현에 따른다. 일 예시적인 실시예에서, 32 비트의 로드된 데이터는 64 비트 목적지 레지스터의 최하위 순서 32 비트 절반에 기입될 수 있다. 다른 실시예에서, 다른 크기들의 부분 폭 데이터 및/또는 목적지 레지스터들이 선택적으로 사용될 수 있다.
본 방법은 또한, 블록(435)에서, 프로세서의 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 비트들의 세트가 목적지 레지스터의 나머지 폭(즉, 부분 폭 데이터를 저장하는데 사용되지 않은 부분)에 저장되어 있는 목적지 레지스터를 기입하는 것을 종료하는 것을 포함한다. 이러한 비트들은 모드마다 상이할 수 있다(즉, 상이한 비트 값들을 가짐). 일부 실시예들에서, 제1 모드(436)에서, 이것은 블록(437)에서 목적지 레지스터의 나머지 폭에 부호 비트들(예를 들어, 부분 폭 데이터의 부호 비트의 사본들)을 복사, 기입, 또는 다른 방식으로 저장하는 것을 선택적으로 포함할 수 있다. 일부 실시예들에서, 제2 모드(438)에서, 이것은, 블록(439)에서 목적지 레지스터의 나머지 폭 전부에 모두 0을 기입하는 것을 선택적으로 포함할 수 있다. 다른 실시예에서, 이러한 제1 및 제2 모드들 중 어느 하나는 병합 또는 병합된 부분 폭 로드 모드 또는 일부 다른 유형의 부분 폭 로드 모드가 이용되는 모드에 의해 대체될 수 있다.
전술한 방법은 상대적으로 기본적인 형식으로 기술되었지만, 연산들은 본 방법에 선택적으로 부가 및/또는 그로부터 제거될 수 있다. 예를 들어, 언급한 바와 같이, 부분 폭 로드 모드를 결정하는 것은 선택적이다(예를 들어, 대신에 그것이 시행될 수 있다). 다른 예로서, 예를 들어, 명령어를 디코드하고, 명령어를 페치하고, 비트들을 버스상에서 송신하고, 비트들을 버스로부터 수신하는 등과 같은 추가의 연산들이 선택적으로 부가될 수 있다. 다른 예로서, 목적지 레지스터 내의 결과를 이용하는 것과 연관된 연산들이 본 방법에 선택적으로 부가될 수 있다. 예를 들어, 목적지 레지스터 내의 제로 확장된 부분 폭 로드 결과는, 다른 경우에는 64 비트 프로세싱 모드에서 동작하는 64 비트 프로세서에 의해 제로 확장된 32 비트 메모리 어드레스로서 메모리에 액세스하는데 이용될 수 있다. 다른 예로서, 목적지 레지스터 내의 제로 확장된 부분 폭 로드 결과는, 다른 경우에는 128 비트(또는 기타의 상대적으로 더 넓은 폭의) 프로세싱 모드에서 동작하는 128 비트(또는 기타의 상대적으로 더 넓은 폭의) 프로세서에 의해 제로 확장된 64 비트(또는 기타의 상대적으로 더 넓은 폭의) 메모리 어드레스로서 메모리에 액세스하는데 이용될 수 있다. 또한, 흐름도가 예시적인 실시예들에 따른 특정 순서의 연산들을 도시하지만, 그 특정 순서는 예시적이다. 대안의 실시예들은 연산들을 상이한 순서로, 특정 연산들을 조합하여, 특정 연산들을 중첩시켜서 등으로 선택적으로 수행할 수 있다. 예를 들어, 블록들(434 및 435)에서의 연산들은 순차적으로 대신에 동시에 또는 병렬로 수행될 수 있다.
본원에 개시된 모드 의존형 부분 폭 로드 명령어들 및 부분 폭 로드 모드들은 일반적 목적이며, 다양한 상이한 목적들을 위해 사용될 수 있다. 예를 들어, 그것들은 동일한 오피코드에 대해 상이한 유형들의 부분 폭 로드 연산들을 제공하도록 이용될 수 있다. 그러나, 특정 개념들을 더 예시하기 위해, 상이한 또는 보다 효율적인 메모리 어드레싱에 대해 모드 의존형 부분 폭 로드 명령어들 및 부분 폭 로드 모드들을 활용하는 특정 예가 이하에 더 설명될 것이다. 일부 실시예들에서, 상대적으로 더 작은 메모리 어드레스들 또는 포인터들이 상대적으로 더 큰 어드레스 공간들에서 사용될 수 있다. 일례로서, 64 비트 길이의 제로 확장된 32 비트 포인터들이 64 비트 아키텍처 프로세서 및/또는 64 비트 어드레스 공간들에서 사용될 수 있다. 다른 예로서, 128 비트 길이의 제로 확장된 64 비트 포인터들이 128 비트 아키텍처 프로세서들 및/또는 128 비트 어드레스 공간들에서 사용될 수 있다.
가장 최근의 범용 프로세서들은 32 비트 아키텍처 또는 64 비트 아키텍처 중 어느 하나를 갖는다. 미래에는, 128 비트 아키텍처 프로세서들이 보편화될 수 있는 가능성이 있다. 다양한 특수 목적 프로세서들은 32 비트 또는 64 비트 아키텍처들 중 어느 하나, 또는 8 비트, 9 비트, 12 비트, 18 비트, 24 비트, 36 비트, 39 비트, 40 비트, 48 비트, 또는 60 비트와 같은 다양한 다른 폭들의 아키텍처를 이용할 수 있다. 이러한 비트 폭들은 일반적으로 프로세서들의 아키텍처 내의 다양한 속성들의 비트 폭을 지칭한다. 예를 들어, 이러한 비트 폭들은 지원되는 메모리 어드레스 크기들, 정수 크기들, 정수 레지스터 크기들 등, 또는 그의 조합들을 지칭할 수 있다. 예를 들어, 64 비트 아키텍처 프로세서는 64 비트 정수 포맷을 지원할 수 있고, 64 비트 정수의 범용 레지스터들을 가질 수 있고, 메모리에 액세스하는데 사용되는 64 비트 메모리 어드레스들 등을 지원할 수 있다. 일부 프로세서들은 모든 그러한 파라미터들에 대해 동일한 비트 폭을 사용하지 않는다. 64 비트 폭은 종종 프로세서의 "워드(word)" 크기로서 지칭된다. 즉, 64 비트 아키텍처 프로세서는 64 비트 "워드들"을 사용할 수 있고, 32 비트 아키텍처 프로세서는 32 비트 "워드들"을 사용할 수 있고, 등등이다.
64 비트 아키텍처 프로세서들은 32 비트 아키텍처 프로세서들에 대해 소정의 강화된 특징들 또는 장점들을 갖는 경향이 있을 수 있다. 예를 들어, 일부 실시예들에서, 64 비트 프로세서는 더 많은 수의 프로세서 레지스터들, 더 큰 범용 프로세싱 능력들을 가질 수 있고, 또는 성능 개선을 돕는 다양한 다른 메커니즘 또는 특징들 등을 가질 수 있다. 그러나, 종종 64 비트 아키텍처 연산의 일부 양태들은 32 비트 아키텍처 연산보다 상대적으로 더 높은 오버헤드(overhead)를 수반할 수 있다. 하나의 그러한 잠재적 양태는 64 비트 메모리 어드레스들 또는 포인터들의 사용을 수반할 수 있다. 전술한 바와 같이, 일부 경우들에서, 64 비트 아키텍처 프로세서는 메모리에 액세스하기 위해 통상적으로 64 비트 메모리 어드레스들 또는 포인터들을 사용할 수 있다. 그러한 64 비트 메모리 어드레스들 또는 포인터들은 일반적으로 메모리의 임의의 장소로부터의 데이터에 액세스하는 것을 허용한다. 연속적 또는 순차적 64 비트 메모리 어드레스 값들은 메모리의 대응하는 연속적인 단위들을 지정할 수 있다. 이러한 단위들은 어드레스 분해능(예를 들어, 워드, 바이트 등)의 단위들을 나타낼 수 있다.
그러나, 다수의 사용자 레벨 애플리케이션 모듈들 또는 다른 소프트웨어 모듈들은 64 비트 메모리 포인터들을 사용할 필요가 없고 및/또는 64 비트 메모리 포인터들을 사용하는 것과 연관된 추가의 오버헤드를 정당화할 정도로 충분하게 메모리 내의 임의의 장소로부터의 데이터에 액세스할 필요도 없다. 예를 들어, 이것은 종종, 전체 사용자 레벨 애플리케이션 모듈 또는 다른 소프트웨어 모듈이 메모리의 제한된 연속 범위 내에 들어맞을 수 있는 경우일 수 있다. 특정 예로서, 다수의 공통적으로 사용된 사용자 레벨 소프트웨어 모듈들 및 다른 모듈들은 4 기가바이트의 메모리 내에 포함될 수 있다. 32 비트 메모리 어드레스들은 연속적인 4 기가 바이트의 메모리 내의 임의의 장소를 어드레싱하는데 충분하다. 소프트웨어 모듈(예를 들어, 가장 빈번하게 액세스되는 코드 및 데이터)이 32 비트 메모리 어드레스들 또는 포인터들에 의해 어드레스가능한 4 기가바이트 내에 들어맞는 경우, 더 큰 64 비트 메모리 어드레스들을 이용하는 것보다 더 작은 32 비트 메모리 어드레스를 이용하는 것이 보다 효율적이고 및/또는 효과적일 수 있다. 유리하게도, 64 비트 아키텍처 프로세서에서 더 작은 32 비트 메모리 어드레스를 이용하는 것은, 64 비트 메모리 어드레스들을 이용하는 것 및/또는 적절한 경우(예를 들어, 소프트웨어 모듈이 4 기가바이트 내에 들어맞는 경우) 더 큰 메모리 푸트프린트(footprint)를 이용하는 것과 연관된 요구되지 않거나 불필요한 오버헤드를 감소시키는데 선택적으로 도움을 주면서, 64 비트 아키텍처와 일반적으로 연관된 강화된 특징들을 활용하는데 도움을 줄 수 있다.
프로그램들은, 더 큰 포인터들(예를 들어, 64 비트 포인터들)에 비해 더 작은 포인터들이 사용되는 경우(예를 들어, 32 비트 포인터들), 보다 빠르게 실행하고 및/또는 더 적은 메모리를 사용하는 경향이 있다. 한가지 이유는, 작은 포인터들을 저장하는데 통상적으로 더 적은 메모리가 필요하다. 또한, 더 작은 포인터들은 일반적으로 프로세서들 내에서 사용되는 캐시들에서 더 적은 공간을 점유하여, 빈번하게 사용하는 데이터에 대한 액세스를 빠르게 한다. 결과로서, 더 작은 포인터들이 사용되는 경우, 캐시들은 더 많은 수의 그러한 더 작은 포인터들 및/또는 더 많은 데이터를 보유할 수 있다. 또한, 캐시 내에서 데이터 또는 포인터를 발견할 가능성(likelihood)이 캐시 내에 보유되는 그러한 포인터들 또는 데이터에 대해 더 증가하는 경향이 있을 것이며(예를 들어, 더 작은 포인터들이 사용되는 경우), 이는 프로그램 성능 증가를 달성하는데 도움을 줄 수 있다. 또한, 더 적은 데이터를 사용하는 프로그램들은 시스템이 보다 빠르게 실행하게 하는 경향이 있다. 일부 시스템들에서, 사용하는 프로그램들의 모든 코드 및 데이터의 집합은 메모리 내에 들어맞지 않을 수 있다. 프로그램의 부분들은 일시적으로 디스크 상에 저장될 수 있고 필요한 경우 메모리로 가져올 수 있다(예를 들어, 디맨드 페이징(demand paging)의 경우). 그러나, 더 작은 포인터들이 사용된 경우일 수 있는 것과 같이 프로그램들이 더 작은 경우, 그들은 현재 실행하고 있지 않은 다른 프로그램들이 메모리에 남아 있도록 보다 많은 공간을 남겨둘 수 있어서 그러한 프로그램들이 메모리 내에 공간을 만들기 위해 페이지 아웃(page out)될 필요가 없다. 일반적으로, 시스템 성능은 페이징이 덜 발생하는 경우 개선되는 경향이 있는데, 그러한 페이징은 프로그램 실행을 지연시키는 경향이 있고, 다른 프로그램들에 대한 입력/출력을 지연시킬 수 있기 때문이다. 64 비트 메모리 어드레스들에 비해 32 비트 메모리 어드레스들을 사용하는 것의 다른 잠재적 장점들은 전력 소비 감소를 포함한다.
도 5는 제로 확장된 32 비트 메모리 어드레싱을 수행하는 64 비트 아키텍처 프로세서(501)을 포함하는 컴퓨터 시스템(500)의 실시예의 블록도이다. 64 비트 아키텍처 프로세서는 상호접속 메커니즘(509)에 의해 메모리(510)와 결합된다. 메모리는 64 비트의 어드레스가능한 범위(550)를 갖는다. 64 비트의 어드레스가능한 범위는, 그의 서브세트로서, 더 작은 연속하는 32 비트의 어드레스가능한 범위(552)를 포함한다. 32 비트 어드레스가능한 범위는 약 4 기가바이트를 가질 수 있다. 소프트웨어 모듈(554)(예를 들어, 사용자 레벨 애플리케이션 또는 다른 소프트웨어)은 32 비트 어드레스가능한 범위 내에 저장된다. 소프트웨어 모듈은 32 비트 메모리 어드레스들(512)을 갖는다.
64 비트 프로세서는 본원에서 설명된 다른 프로세서들(예를 들어, 도 1의 프로세서(101))의 특성들 또는 특징들을 선택적으로 가질 수 있다. 64 비트 아키텍처 프로세서는 모드 의존형 부분 폭 로드 시스템(513)을 포함한다. 모드 의존형 부분 폭 로드 시스템은 도 1의 모드 의존형 부분 폭 로드 시스템(113)의 것과 유사하거나 동일한 특징들 및 특성들을 선택적으로 가질 수 있다. 모드 의존형 부분 폭 로드 시스템은 제로 확장된 32 비트 로드 모드(505)를 지원한다. 프로세서는 또한 64 비트 레지스터(515)를 갖는다. 일부 실시예들에서, 레지스터는, 일부 프로세서들에서의 범용 레지스터 또는 다른 프로세서들에서의 메모리 어드레싱을 위해 사용되는 특수 목적 레지스터와 같은, 메모리 어드레싱을 위해 사용될 수 있는 레지스터일 수 있다.
32 비트 로드 명령어(502)가 모드 의존형 부분 폭 로드 시스템에 제공될 수 있다. 32 비트 로드 명령어는 (부분 폭 데이터를 나타내는) 32 비트 메모리 어드레스들(512) 중 하나를 소스 피연산자로서 특정하거나 다른 방식으로 표시할 수 있고, 64 비트 레지스터(515)를 목적지 피연산자로서 특정하거나 다른 방식으로 표시할 수 있다. 32 비트 로드 명령어(502) 및 제로 확장된 32 비트 로드 모드(505)에 응답하여 모드 의존형 부분 폭 로드 시스템은 표시된 32 비트 메모리 어드레스(512)를 64 비트 목적지 레지스터(515)의 최하위 순서 32 비트 내에 저장하는 것 및 64 비트 목적지 레지스터(515)의 최상위 순서 32 비트 내에 0들을 저장하는 것을 포함하는 제로 확장된 32 비트 로드 연산(519)을 수행할 수 있다.
후속하여, 메모리 액세스 명령어(556)가 프로세서에 제공될 수 있다. 메모리 액세스 명령어는 32 비트 로드 명령어(502) 및/또는 연산(519)의 결과인 64 비트 제로 확장된 32 비트 메모리 어드레스를 표시할 수 있다. 예를 들어, 메모리 액세스 명령어는 목적지 레지스터(515)를 표시할 수 있고, 또는 결과는 목적지 레지스터로부터 메모리 액세스 명령어에 의해 표시된 다른 레지스터로 이동될 수 있다. 프로세서는, 메모리 액세스 명령어(556)에 응답하여, 64 비트 제로 확장된 32 비트 메모리 어드레스를 이용하여 또는 그에 기초하여 메모리 액세스(558)(예를 들어, 메모리로부터의 로드, 메모리로의 기입 등)를 제공할 수 있다.
이것은 단지 하나의 예시적인 예일 뿐이다. 다른 실시예들에서, 64 비트 이외의 아키텍처를 갖는 프로세서가 선택적으로 사용될 수 있다. 또한, 다른 실시예들에서, 32 비트 이외의 메모리 크기를 갖는 메모리 어드레스들이 선택적으로 사용될 수 있다. 예를 들어, 일부 실시예들에서, 128 비트 제로 확장된 64 비트 메모리 어드레스가 128 비트 아키텍처 프로세서 및/또는 128 비트 어드레스 공간 또는 어드레싱 모드에 대해 사용될 수 있다. 다른 예로서, 64 비트 제로 확장된 16 비트 또는 48 비트 포인터들은 64 비트 아키텍처 프로세서 또는 64 비트 어드레스 공간에 대해 선택적으로 사용될 수 있다. 일반적으로, 제로 확장된 더 작은 포인터들 또는 메모리 어드레스들은 더 큰 아키텍처 프로세서 또는 어드레스 공간에 대해 사용될 수 있다.
사용자 레벨 애플리케이션 모듈들 또는 다른 비특권(unprivileged) 소프트웨어 모듈들은 일반적으로, 그렇게 하는 것이 적절한 경우에 부분 폭 로드 모드를 변경하는 방법을 가질 필요가 있다(예를 들어, 그들이 현재 존재하는 모드와는 상이한 모드를 사용하려는 의도가 있는 경우). 이것은 상이한 방식들로 행해질 수 있다. 일부 실시예들에서, 부분 폭 로드 모드는 사용자 레벨 또는 비특권 소프트웨어 모듈들에 의해 직접적으로 변경가능할 수 있다. 다른 실시예들에서, 사용자 레벨 또는 비특권 소프트웨어 모듈들은 부분 폭 로드 모드를 직접적으로 변경할 수 없을 수 있다. 오히려, 일부 실시예들에서, 부분 폭 로드 모드의 변경은 특권 소프트웨어 모듈들을 위해 예약될 수 있다(예를 들어, 운영 체제 모듈, 가상 머신 모니터 모듈, 등). 그러한 실시예들에서, 특권 소프트웨어 모듈들은 사용자 레벨 또는 비특권 소프트웨어 모듈들이, 특권 소프트웨어 모듈들이 부분 폭 로드 모드를 변경하는 것을 요청하는 것을 허용하는 인터페이스(예를 들어, 서비스, 인터페이스 등)를 제공할 수 있다.
도 6은 부분 폭 로드 모드를 변경하기 위한 사용자 레벨 소프트웨어 모듈(670)(또는 다른 비특권 소프트웨어 모듈)과 운영 체제(660)(또는 다른 특권 소프트웨어 모듈) 간의 상호작용의 실시예를 예시하는 블록도이다. 사용자 레벨 소프트웨어 모듈은 주어진 부분 폭 로드 모드를 사용하기 위한 표시(674)를 포함하는 메타데이터(672)를 포함한다. 주어진 부분 폭 로드 모드는 소프트웨어 모듈이 사용하기를 원하는 또는 의도하는 것일 수 있다. 일례로서, 메타데이터는 그 자신에 관한 정보를 운영 체제 모듈(660)에 통신하는 사용자 레벨 소프트웨어 모듈에 의해 사용되는 객체 모듈 포맷 또는 다른 데이터 구조를 포함할 수 있다. 예를 들어, 메타데이터 모듈은 원하는 부분 폭 로드 모드를 표시하기 위한 플래그 또는 하나 이상의 비트를 포함할 수 있다. 운영 체제 모듈은 프로그램 로더 모듈(662)을 포함한다. 프로그램 로더 모듈 및/또는 운영 체제 모듈은 표시(674)를 검사하는 것을 포함하여 메타데이터를 검사하도록 동작가능할 수 있다. 운영 체제 모듈은 프로세서의 부분 폭 로드 모드(605)를 표시된 부분 폭 로드 모드(674)로 변경하도록 동작가능할 수 있는 부분 폭 로드 모드 변경기 모듈(664)을 포함할 수 있다. 예를 들어, 부분 폭 로드 모드는 프로세서의 구성 또는 제어 레지스터에서 변경될 수 있다.
일부 실시예들에서, 프로세서는 부분 폭 로드 모드를 변경하는 명령어를 포함하는 명령어 세트를 가질 수 있다. 이 예에서, 명령어는 운영 체제 모듈들 또는 유사한 특권 레벨 소프트웨어 모듈들을 위해 예약된 특권 레벨 명령어일 것이나, 다른 실시예들에서는 명령어는 사용자 레벨 소프트웨어 모듈들에 의해 활용될 수 있는 사용자 레벨 명령어일 수 있다. 부분 폭 로드 모드가 변경될 경우 부분 폭 로드 모드 변경기 모듈(664)에 의해 명령어가 사용될 수 있다. 명령어는 디코드되고 실행되거나 또는 다른 방식으로 프로세서에 의해 수행되어 시작 모드로부터 다른 상이한 모드로 모드를 변경할 수 있다. 일부 실시예들에서, 그러한 모드 변경 후에, 점프가 선택적으로 수행되어, 명령어의 수행 이전에 존재했던 오래된 모드하에서 디코드되었던 파이프라인 내에 이미 있는 명령어들을 이용하는 대신, 업데이트된 상이한 모드 하에서 명령어들이 페치되고 디코드되게 야기할 수 있다. 일부 실시예들에서, 명령어 세트는 또한 부분 폭 로드 모드를 판독하는 명령어를 가질 수 있다. 이러한 명령어는 사용자 레벨 소프트웨어 모듈들에 의해 활용될 수 있는 사용자 레벨 명령어일 수 있거나, 운영 체제 모듈들 또는 유사한 특권 레벨 소프트웨어 모듈들을 위해 예약된 특권 레벨 명령어일 수 있다. 명령어는 디코드될 수 있고 실행시 또는 다른 방식으로 수행시에 부분 폭 로드 모드를 판독할 수 있다(예를 들어, 레지스터 내의 하나 이상의 비트를 판독). 예로써, 사용자 레벨 코드 모듈들 또는 다른 소프트웨어 모듈들은 부분 폭 로드 모드를 학습하기 위해 그러한 명령어를 이용할 수 있다.
64 비트 프로세서 상에서 32 비트 어드레싱을 지원하기 위한 하나의 부분 폭 로드 모드의 가능한 사용이 전술되었다. 운영 체제 모듈들, 인터럽트 처리기 모듈들, 및 잠재적으로 다른 소프트웨어는 제로 확장된 32 비트 메모리 어드레싱 대신에 주로 64 비트 메모리 어드레싱을 사용할 수 있다. 결과로서, 운영 체제 모듈들, 인터럽트 처리기 모듈들, 등은 제로 확장된 32 비트 로드를 제공하는 부분 폭 로드 모드를 사용할 필요가 없을 수 있으나, 오히려, 예를 들어, 부호 확장된 32 비트 로드 또는 병합 32 비트 로드와 같은 동일한 명령어 또는 오피코드에 대해 대안의 유형의 32 비트 로드를 제공하는 부분 폭 로드 모드를 사용할 수 있다. 도시된 바와 같이, 일부 실시예들에서, 프로세서는 특정 조건하에서 디폴트 부분 폭 로드 모드로의 자동적 폴백(fallback)을 야기 또는 초래하는 디폴트 부분 폭 로드 모드 폴백 로직 또는 유닛(676)을 포함할 수 있다. 그러한 조건들의 예들은, 인터럽트(678)을 검출한 후에 또는 인터럽트 처리기 모듈(668)에 보고하는 경우, 인터럽트 처리기 모듈 등에 의한 인터럽트 처리의 시작시에, 실행중인 사용자 레벨 코드로부터 운영 체제 코드로의 스위칭 또는 이행(transition)을 포함할 수 있다. 유닛 또는 로직은 하드웨어 또는 일부 펌웨어 및/또는 가능하게는 일부 소프트웨어와 잠재적으로 결합된 하드웨어로 구현될 수 있다. 디폴트 부분 폭 로드 모드에서, 명령어 또는 오피코드는, 예를 들어, 제로 확장된 32 비트 로드로서 대신에 부호 확장된 32 비트 로드 또는 병합 32 비트 로드로서 취급될 수 있다. 일부 실시예들에서, 디폴트 부분 폭 로드 모드 폴백 로직 또는 유닛은 또한 부분 폭 로드 모드가, 디폴트 부분 폭 로드 모드로부터 다시 운영 체제 코드 또는 인터럽트 처리(예를 들어, 인터럽트(679)로부터의 반환 후)로의 스위칭 이전에 존재했던 부분 폭 로드 모드로 자동적으로 복구되게 할 수 있다. 반환 명령어는 부분 폭 로드 명령어들을 디코드하는 방법을 결정하기 위해 반환 시에 부분 폭 로드 모드를 판독할 수 있다.
도 7은 운영 체제 모듈, 특권 모듈 또는 다른 시스템 레벨 모듈에 의해 수행될 수 있는 방법(780)의 실시예의 블록도이다. 방법은 블록(781)에서 소프트웨어 모듈의 메타데이터를 검사하는 것을 포함한다. 이것은 부분 폭 로드 명령어를 수행하기 위해 프로세서에 의해 사용될 프로세서의 부분 폭 로드 모드의 표시를 검사하는 것을 포함한다. 부분 폭 로드 명령어는 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시하는 것이다.
본 방법은, 블록(782)에서, 프로세서의 부분 폭 로드 모드를 표시된 부분 폭 로드 모드로 변경하는 것을 포함한다. 일부 실시예들에서, 부분 폭 로드 모드를 변경하는 것은, 메모리로부터 로드된 데이터의 부분 폭을 저장하는데 사용되지 않을 표시된 레지스터의 부분 내에 프로세서에 의해 저장될 비트들의 값들에서의 변경을 제어하도록 동작가능할 수 있다. 일부 실시예들에서, 운영 체제 모듈 또는 다른 시스템 레벨 모듈은 어느 프로그램들이 어느 부분 폭 로드 모드를 사용하는지를 기록 또는 추적하기 위한 메타데이터의 세트를 유지할 수 있다. 일부 프로그램들은 부분 폭 로드 명령어(예를 들어, 주어진 오피코드)를 실행하는 경우 하나의 부분 폭 로드 모드를 사용할 수 있는 반면, 다른 프로그램들은 그 부분 폭 로드 명령어(예를 들어, 그 동일한 주어진 오피코드)를 실행하는 경우 다른 상이한 부분 폭 로드 모드를 사용할 수 있다. 운영 체제 모듈 또는 다른 모듈은 프로그램들 사이에서 스위칭하는 경우 및/또는 인터럽트들로부터 반환하는 경우 메타데이터에 액세스하여 어느 부분 폭 로드 모드에 프로세서를 두는 것이 프로그램에 대해 적절한지를 결정할 수 있다. 예로써, 일부 실시예들에서, 운영 체제는 상이한 모드를 사용하기를 원하는 프로그램으로의 스위칭의 경우 모드를 변경하는 명령어를 사용할 수 있다. 예로써, 일부 실시예들에서, 운영 체제는 프로그램들을 스위칭하는 경우 모드가 변경될 필요가 있는지 여부를 알기 위해 현재 모드를 판독하기 위해 상이한 명령어를 사용할 수 있다.
일부 실시예들에서, 사용자 레벨 애플리케이션 모듈 또는 다른 비특권 소프트웨어 모듈은 소프트웨어 모듈이 어느 부분 폭 로드 모드를 사용하기를 원하거나 의도하는 지를 디버거 모듈에 통신하는 디버그 정보 모듈 또는 다른 메타데이터 모듈을 포함할 수 있다. 디버거 모듈은 소프트웨어에 의해 사용될 부분 폭 로드 모드를 결정하기 위해 디버그 정보 모듈 또는 다른 메타데이터 모듈에 액세스하고 검사할 수 있다. 이것은 명령어들이 프로세서에 의해 어떻게 프로세스될 것인지를 디버거 모듈이 정확하게 해석하게 할 수 있다.
설명의 간략함을 위해, 2개의 상이한 모드들 및/또는 오피코드의 의미들이 종종 본원에서 설명된다. 그러나, 다른 실시예들은 주어진 오피코드에 대해 3개, 4개 또는 그 이상의 상이한 모드들 및/또는 의미들을 사용할 수 있다는 것이 이해될 것이다. 예로써, 프로세서는 다수의 그러한 상이한 의미들 중 어느 것이 주어진 오피코드에 대해 사용되어야 하는지를 표시하기 위해 2개 이상의 비트를 가질 수 있다.
부분 폭 로드 명령어들의 상이한 해석들이 본원에서 강조되었다. 다른 실시예들에서, 부분 폭 로드 명령어 이외에도 다른 유형의 명령어가 다른 모드에서 부분 폭 로드 명령어(예를 들어, 제로 확장된 부분 폭로드 명령어)로서 해석될 수 있다.
예시적인 코어 아키텍처들, 프로세서들 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 프로세서들에서 상이한 목적들을 위해 상이한 방식들로 구현될 수 있다. 예를 들어, 이러한 코어들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 범용 순차 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차 코어; 3) 주로 그래픽 및/또는 과학(스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차 코어를 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학(스루풋)을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은 상이한 컴퓨터 시스템 아키텍처들을 초래하고, 이들 컴퓨터 시스템 아키텍처들은, 1) CPU와는 별개의 칩 상의 코프로세서; 2) CPU와 동일한 패키지에서의 별개의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우, 이러한 코프로세서는 때때로 통합된 그래픽 및/또는 과학(스루풋) 로직과 같은 특수 목적 로직 또는 특수 목적 코어로 지칭됨); 및 4) 부가적인 기능성, 전술한 코프로세서 및 전술한 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 지칭됨)와 동일한 다이 상에 포함될 수 있는 시스템 온 칩을 포함할 수 있다. 다음에, 예시적인 코어 아키텍처들이 설명된 다음, 예시적인 프로세서들 및 컴퓨터 아키텍처들이 설명된다.
예시적인 코어 아키텍처들
순차 및 비순차 코어 블록도
도 8a는 본 발명의 실시예들에 따른, 예시적인 순차 파이프라인 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 파이프라인 모두를 도시한 블록도이다. 도 8b는 본 발명의 실시예들에 따른, 프로세서에 포함될 순차 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차 발행/실행 아키텍처 코어 모두를 도시한 블록도이다. 도 8a 및 도 8b에서의 실선 박스들은 순차 파이프라인 및 순차 코어를 도시하는 반면, 파선 박스들의 선택적인 부가는 레지스터 리네이밍, 비순차 발행/실행 파이프라인 및 코어를 도시한다. 순차 양태가 비순차 양태의 서브세트라는 것을 고려하여, 비순차 양태가 설명될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코드 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 리네이밍 스테이지(810), 스케줄링(디스패치(dispatch) 또는 발행이라고도 함) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 라이트 백(write back)/메모리 기입 스테이지(818), 예외 처리 스테이지(822), 및 커밋(commit) 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합된 프론트 엔드 유닛(front end unit)(830) - 둘 다는 메모리 유닛(870)에 결합되어 있음 - 을 포함하는 프로세서 코어(890)를 도시한다. 코어(890)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 혼성체 또는 대안적 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(890)는, 예를 들어 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프런트 엔드 유닛(830)은 명령어 캐시 유닛(834)에 결합된 분기 예측 유닛(832)을 포함하고, 명령어 캐시 유닛(834)은 명령어 TLB(translation lookaside buffer)(836)에 결합되고, 명령어 TLB는 명령어 페치 유닛(838)에 결합되고, 명령어 페치 유닛은 디코드 유닛(840)에 결합된다. 디코드 유닛(840)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 원래의 명령어들로부터 디코딩되거나, 또는 그렇지 않으면 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(840)은 다양하고 상이한 메커니즘들을 사용하여 구현될 수 있다. 적절한 메커니즘들의 예들은, 이에 제한되는 것은 아니지만, 룩업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 마이크로코드 ROM들(Read Only Memories) 등을 포함한다. 일 실시예에서, 코어(890)는 소정의 매크로 명령어들을 위한 마이크로코드를 저장한 마이크로코드 ROM 또는 다른 매체를 포함한다(예를 들어, 디코드 유닛(840) 내에 또는 그렇지 않으면 프론트 엔드 유닛(830) 내에). 디코드 유닛(840)은 실행 엔진 유닛(850) 내의 리네이밍/할당기 유닛(852)에 결합되어 있다.
실행 엔진 유닛(850)은 리타이어먼트 유닛(854) 및 하나 이상의 스케줄러 유닛(들)의 세트(856)에 결합되어 있는 리네이밍/할당기 유닛(852)을 포함한다. 스케줄러 유닛(들)(856)은 임의의 수의 다른 스케줄러들을 나타내고, 이들은 예약 스테이션들, 중앙 명령어 윈도우 등을 포함한다. 스케줄러 유닛(들)(856)은 물리적 레지스터 파일(들) 유닛(들)(858)에 결합된다. 물리적 레지스터 파일(들) 유닛들(858) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(858)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들 및 범용 레지스터들을 제공할 수 있다. 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들(예를 들어, 재순서화 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들), 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵 및 레지스터들의 풀(pool)을 사용하는 것 등)을 나타내기 위해, 물리적 레지스터 파일(들) 유닛(들)(858)이 리타이어먼트 유닛(854)과 중첩되어 있다. 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)이 실행 클러스터(들)(860)에 결합되어 있다. 실행 클러스터(들)(860)는 하나 이상의 실행 유닛들(862)의 세트 및 하나 이상의 메모리 액세스 유닛들(864)의 세트를 포함한다. 실행 유닛들(862)은 다양한 유형의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 가산, 감산, 승산)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능을 수행하는 다수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(856), 물리적 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)가 가능하게는 복수인 것으로 도시되어 있는데, 그 이유는 특정의 실시예들이 특정의 유형의 데이터/연산에 대해 개별적인 파이프라인(예를 들어, 각각이 그 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 - 및 개별적인 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(864)을 갖는 특정의 실시예들이 구현됨)을 생성하기 때문이다. 개별 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 것이 또한 이해되어야 한다.
메모리 액세스 유닛들(864)의 세트는 L2(level 2) 캐시 유닛(876)에 결합된 데이터 캐시 유닛(874)에 결합된 데이터 TLB 유닛(872)을 포함하는, 메모리 유닛(870)에 결합된다. 일 예시적인 실시예에서, 메모리 액세스 유닛들(864)은 로드 유닛(load unit), 어드레스 저장 유닛(store address unit), 및 데이터 저장 유닛(store data unit)을 포함할 수 있고, 이들 각각은 메모리 유닛(870) 내의 데이터 TLB 유닛(872)에 결합되어 있다. 명령어 캐시 유닛(834)은 또한 메모리 유닛(870) 내의 L2(level 2) 캐시 유닛(876)에 결합되어 있다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨의 캐시에 그리고 궁극적으로 주 메모리에 결합되어 있다.
예시로서, 예시적 레지스터 리네이밍, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)는 페치 스테이지(802) 및 길이 디코딩 스테이지(804)를 수행함; 2) 디코드 유닛(840)은 디코드 스테이지(806)를 수행함; 3) 리네이밍/할당기 유닛(852)은 할당 스테이지(808) 및 리네이밍 스테이지(810)를 수행함; 4) 스케줄러 유닛(들)(856)은 스케줄링 스테이지(812)를 수행함; 5) 물리적 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 수행함; 실행 클러스터(860)는 실행 스테이지(816)를 수행함; 6) 메모리 유닛(870) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 라이트 백/메모리 기입 스테이지(818)를 수행함; 7) 다양한 유닛들이 예외 처리 스테이지(822)에 관여되어 있을 수 있음; 및 8) 리타이어먼트 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 커밋(commit) 스테이지(824)를 수행함.
코어(890)는 하나 이상의 명령어 세트들(예를 들어, (보다 최신의 버전에서 추가된 일부 확장을 갖는) x86 명령어 세트; 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 본 명세서에 기술된 명령어(들)를 포함하는 (미국 캘리포니아주 서니베일 소재의 ARM Holdings의 NEON 등의 선택적인 부가의 확장을 갖는) ARM 명령어 세트를 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹된 데이터 명령어 세트 확장(예를 들어, AVX1, AVX2)을 지원하는 로직을 포함하고, 그로써 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어는 (스레드들 또는 연산들의 2개 이상의 병렬 세트를 실행하는) 멀티스레딩을 지원할 수 있고, 시간 분할 멀티스레딩(time sliced multithreading), 동시적 멀티스레딩(단일의 물리적 코어는, 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 이들의 조합(예를 들어, 인텔® 하이퍼스레딩(Hyperthreading) 기술에서와 같이 시간 분할 페칭과 디코딩 및 그 이후의 동시적 멀티스레딩)을 비롯한 각종 방식들로 그렇게 할 수 있다는 것이 이해되어야 한다.
레지스터 리네이밍이 비순차 실행의 맥락에서 설명되지만, 레지스터 리네이밍은 순차 아키텍처에 이용될 수 있다는 것이 이해되어야 한다. 프로세서의 예시된 실시예가 또한 개별적인 명령어 및 데이터 캐시 유닛들(834/874)과, 공유 L2 캐시 유닛(876)을 포함하고 있지만, 대안의 실시예들은, 예를 들어, L1(Level 1) 내부 캐시 또는 다수의 레벨의 내부 캐시와 같은, 명령어들 및 데이터 둘 다에 대한 단일의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서의 외부에 있는 외부 캐시 및 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정의 예시적인 순차 코어 아키텍처
도 9a-도 9b는 보다 구체적인 예시적인 순차 코어 아키텍처의 블록도를 도시한 것이고, 이 코어는 칩에 있는 몇 개의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록들은 애플리케이션에 따라서, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 고 대역폭 상호 접속 네트워크(예를 들어, 링 네트워크)를 통해 통신한다.
도 9a는 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 상호 접속 네트워크(902)로의 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트(904)과 함께, 나타낸 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 스칼라 및 벡터 유닛들 내로의 캐시 메모리에 대한 저 지연시간 액세스를 가능하게 한다. 일 실시예에서, (설계를 단순화하기 위해) 스칼라 유닛(908) 및 벡터 유닛(910)이 개별적인 레지스터 세트들(각각, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))을 사용하고 이들 사이에서 전달되는 데이터가 메모리에 기입된 다음에 L1(level 1) 캐시(906)로부터 다시 판독되지만, 본 발명의 대안의 실시예들은 상이한 접근법을 사용할 수 있다(예컨대, 단일의 레지스터 세트를 사용하거나, 기입 및 다시 판독되는 일 없이 2개의 레지스터 파일들 간에 데이터가 전달될 수 있게 하는 통신 경로를 포함함).
L2 캐시의 로컬 서브세트(904)은, 프로세서 코어당 하나씩, 개별적인 로컬 서브세트들로 나누어져 있는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시의 그 자신의 로컬 서브세트(904)에의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 그의 L2 캐시 서브세트(904)에 저장되고, 그 자신의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입된 데이터는 그 자신의 L2 캐시 서브세트(904)에 저장되고, 필요한 경우, 다른 서브세트들부터 플러시된다(flushed). 링 네트워크는 공유 데이터에 대한 일관성(coherency)을 보장한다. 링 네트워크는 프로세서 코어들, L2 캐시들 및 다른 로직 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 하기 위해 양방향성이다. 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 9b는 본 발명의 실시예들에 따른 도 9a의 프로세서 코어의 부분의 확대도이다. 도 9b는 L1 캐시(904)의 L1 데이터 캐시(906A) 부분은 물론, 벡터 유닛(910) 및 벡터 레지스터들(914)에 관한 부가 상세를 포함하고 있다. 구체적으로는, 벡터 유닛(910)은 정수, 단정도(single-precision) 부동 소수점, 및 배정도(double-precision) 부동 소수점 명령어들 중 하나 이상을 실행하는 16-폭의(16-wide) 벡터 프로세싱 유닛(VPU: vector processing unit)(16-폭의 ALU(928)를 참조)이다. VPU는 뒤섞기 유닛(swizzle unit)(920)에 의해 레지스터 입력들을 뒤섞는 것, 수치 변환 유닛들(922A 및 922B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다. 기입 마스크 레지스터들(926)은 결과적인 벡터 기입들을 예측하는 것을 가능하게 한다.
통합된 메모리 제어기 및 그래픽스를 갖는 프로세서
도 10은 본 발명의 실시예들에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10에서의 실선 박스들은 단일의 코어(1002A), 시스템 에이전트(1010), 및 하나 이상의 버스 제어기 유닛들(1016)의 세트를 갖는 프로세서(1000)를 나타낸 것인 반면, 파선 박스들의 선택적인 부가는 복수의 코어(1002A 내지 1002N), 시스템 에이전트 유닛(1010) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(1014)의 세트, 및 특수 목적 로직(1008)을 갖는 대안의 프로세서(1000)를 나타낸 것이다.
그러므로, 프로세서(1000)의 상이한 구현들은 다음을 포함할 수 있다: 1) (하나 이상의 코어들을 포함할 수 있는) 통합된 그래픽 및/또는 과학적(처리량) 로직인 특수 목적 로직(1008), 및 하나 이상의 범용 코어들(예를 들어, 범용 순차 코어들, 범용 비순차 코어들, 이 둘의 조합)인 코어들(1002A 내지 1002N)을 갖는 CPU; 2) 주로 그래픽 및/또는 과학적(처리량)을 위해 의도된 많은 수의 특수 목적 코어들인 코어들(1002A 내지 1002N)을 갖는 코프로세서; 및 3) 많은 수의 범용 순차 코어들인 코어들(1002A 내지 1002N)을 갖는 코프로세서. 따라서, 프로세서(1000)는 범용 프로세서, 코프로세서 또는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 고 처리량 MIC(Many Integrated Core) 코프로세서(30개 이상의 코어를 포함함), 임베디드된 프로세서, 등일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1000)는, 예를 들어 BiCMOS, CMOS, 또는 NMOS 등의 복수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판들의 일부가 될 수 있고/또는 이들 기판 상에 구현될 수 있다.
메모리 계층 구조는 코어들 내의 하나 이상의 레벨들의 캐시, 하나 이상의 공유된 캐시 유닛들(1006)의 세트, 및 통합된 메모리 제어기 유닛들(1014)의 세트에 결합되어 있는 외부 메모리(도시 생략)를 포함한다. 공유된 캐시 유닛들(1006)의 세트는 L2(level 2), L3(level 3), L4(level 4), 또는 기타 레벨들의 캐시 등의 하나 이상의 중간 레벨 캐시들, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서, 링 기반 상호 접속 유닛(ring based interconnect unit)(1012)은 통합된 그래픽 로직(1008), 공유된 캐시 유닛들(1006)의 세트, 및 시스템 에이전트 유닛(1010)/통합된 메모리 제어기 유닛(들)(1014)을 상호 접속시키는 반면, 대안적 실시예들은 이러한 유닛들을 상호 접속시키는 데 임의의 수의 공지된 기법들을 사용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(1006)과 코어들(1002A 내지 1002N) 사이에 일관성이 유지된다.
일부 실시예들에서, 코어들(1002A 내지 1002N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(1010)는 코어들(1002A 내지 1002N)을 조정하고 동작시키는 그러한 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은, 예를 들어 PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A 내지 1002N) 및 통합된 그래픽 로직(1008)의 전력 상태를 조절하는 데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이를 구동하기 위한 것이다.
코어들(1002A 내지 1002N)은 아키텍처 명령어 세트의 관점에서 동종(homogenous)이거나 이종(heterogeneous)일 수 있다; 즉, 코어들(1002A 내지 1002N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브셋 만 또는 다른 명령어 세트를 실행할 수 있다.
예시적인 컴퓨터 아키텍처들
도 11-14는 예시적 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 개인 휴대정보 단말기들, 엔지니어링 워크스테이션들, 서버들, 네트워크 디바이스들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSP들), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋톱 박스들, 마이크로제어기들, 셀 폰들, 휴대용 미디어 플레이어들, 핸드헬드 디바이스들 및 다양한 다른 전자 디바이스들에 대하여 관련 기술분야에 공지된 다른 시스템 설계들 및 구성들도 또한 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 하나 이상 프로세서(1110, 1115)를 포함할 수 있으며, 이들은 제어기 허브(1120)에 결합된다. 일 실시예에서, 제어기 허브(1120)는 그래픽 메모리 제어기 허브(GMCH: graphics memory controller hub)(1190) 및 입력/출력 허브(IOH: Input/Output Hub)(1150)(개별적인 칩들 상에 있을 수 있음)를 포함하고; GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 결합되어 있는 메모리 및 그래픽 제어기들을 포함하며; IOH(1150)는 I/O(input/output) 디바이스들(1160)을 GMCH(1190)에 결합시킨다. 대안적으로, 메모리 및 그래픽 제어기들 중 하나 또는 둘 다는 (본 명세서에 기술된 바와 같이) 프로세서 내에 통합되어 있고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110), 및 IOH(1150)를 갖는 단일 칩 내의 제어기 허브(1120)에 직접 결합되어 있다.
부가적인 프로세서들(1115)의 선택적인 속성은 도 11에서 파선들로 표시되어 있다. 각각의 프로세서(1110, 1115)는 본 명세서에 설명된 하나 이상의 프로세싱 코어를 포함할 수 있고, 프로세서(1000)의 일부 버전일 수 있다.
메모리(1140)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1120)는 FSB(frontside bus)와 같은 멀티-드롭 버스(multi-drop bus), QPI(QuickPath Interconnect)와 같은 점대점(point-to-point) 인터페이스, 또는 유사한 접속(1195)을 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시예에서, 코프로세서(1145)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1120)는 통합된 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소모 특성 등을 포함하는 다양한 성능 메트릭(metrics of merit)에 관하여 물리적 자원들(1110, 1115) 사이에 다양한 차이가 존재할 수 있다.
일 실시예에서, 프로세서(1110)는 일반 유형의 데이터 프로세싱 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 임베딩될 수 있다. 프로세서(1110)는 이들 코프로세서 명령어를 부착된(attached) 코프로세서(1145)에 의해 실행되어야만 하는 유형인 것으로 인식한다. 이에 따라, 프로세서(1110)는 이 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속을 통해 코프로세서(1145)로 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 접수하고 실행한다.
이제 도 12를 참조하면, 도 12는 본 발명의 일 실시예에 따른, 제1의 보다 구체적이고 예시적인 시스템(1200)의 블록도를 도시한다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 점대점 상호접속 시스템이고, 점대점 상호접속(1250)을 통해 결합되는 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 프로세서들(1270 및 1280) 각각은 프로세서(1000)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1270 및 1280)은 각각 프로세서들(1110 및 1115)인 반면, 코프로세서(1238)는 코프로세서(1145)이다. 다른 실시예에서, 프로세서들(1270 및 1280)은, 각각, 프로세서(1110) 및 코프로세서(1145)이다.
프로세서들(1270 및 1280)은, 각각, 통합된 메모리 제어기(IMC: integrated memory controller) 유닛들(1272 및 1282)을 포함하는 것으로 도시되어 있다. 프로세서(1270)는 또한, 그의 버스 제어기 유닛들의 일부로서, 점대점(P-P) 인터페이스들(1276 및 1278)을 포함하고; 이와 유사하게, 제2 프로세서(1280)는 P-P 인터페이스들(1286 및 1288)을 포함하고 있다. 프로세서들(1270, 1280)은 P-P 인터페이스 회로들(1278, 1288)을 사용하여 P-P 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272 및 1282)은 프로세서들을 각자의 메모리들(1232 및 1234), 즉 각자의 프로세서들에 로컬로 부착되어 있는 메인 메모리의 일부분들일 수 있는 메모리(1232) 및 메모리(1234)에 결합시킨다.
프로세서들(1270, 1280) 각각은 점대점 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용하여 개개의 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 선택적으로 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예를 들어, 고처리율 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유된 캐시(도시되지 않음)가 양자 모두의 프로세서들의 외부에 또는 어느 하나의 프로세서에 포함될 수 있지만, P-P 상호접속을 통해 프로세서들과 여전히 접속되어, 프로세서가 저 전력 모드에 놓이면, 어느 하나의 프로세서 또는 양자 모두의 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 결합될 수 있다. 일 실시예에서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스일 수 있거나, 또는 PCI Express 버스 또는 다른 제3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이에 제한되지는 않는다.
도 12에 도시된 바와 같이, 제1 버스(1216)를 제2 버스(1220)에 결합하는 버스 브리지(1218)와 함께, 다양한 I/O 디바이스들(1214)이 제1 버스(1216)에 연결될 수 있다. 일 실시예에서, 코프로세서들, 고처리율 MIC 프로세서들, GPGPU들, 가속기들(예컨대, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들 등), 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서와 같은 하나 이상의 부가의 프로세서(들)(1215)이 제1 버스(1216)에 결합되어 있다. 일 실시예에서, 제2 버스(1220)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1222), 통신 디바이스들(1227), 그리고 명령어들/코드 및 데이터(1230)를 포함할 수 있는 디스크 드라이브 또는 기타 대용량 저장 디바이스와 같은 저장 유닛(1228)을 포함하는 다양한 디바이스들이 제2 버스(1220)에 결합될 수 있다. 게다가, 오디오 I/O(1224)가 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 주목한다. 예를 들어, 도 12의 점대점 아키텍처 대신에, 시스템은 멀티드롭 버스 또는 다른 이러한 아키텍처를 구현할 수 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른, 제2의 보다 구체적이고 예시적인 시스템(1300)의 블록도가 도시되어 있다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호들을 가지며, 도 13의 다른 양태들을 모호하게 하는 것을 회피하기 위해서 도 13으로부터 도 12의 특정 양태들이 생략되었다.
도 13은 프로세서들(1270, 1280)이, 각각, 통합된 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 포함할 수 있다는 것을 나타내고 있다. 따라서, CL(1272, 1282)은 통합된 메모리 제어기 유닛들을 포함하고 I/O 제어 로직을 포함한다. 도 13은 메모리들(1232, 1234)이 CL(1272, 1282)에 결합되어 있을 뿐만 아니라 I/O 디바이스들(1314)이 또한 제어 로직(1272, 1282)에 결합되어 있는 것을 나타내고 있다. 레거시 I/O 디바이스들(1315)이 칩셋(1290)에 결합된다.
이하 도 14를 참조하면, 본 발명의 일 실시예에 따른 SoC(1400)의 블록도가 도시되어 있다. 도 10에 있는 유사한 요소들은 동일한 참조 부호를 갖는다. 또한, 파선 박스들은 더 진보된 SoC들에 대한 선택적인 특징들이다. 도 14에서, 상호접속 유닛(들)(1402)은, 하나 이상의 코어들(202A 내지 202N)의 세트 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합된 메모리 제어기 유닛(들)(1014); 통합된 그래픽 로직, 영상 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1420)의 세트; SRAM(static random access memory) 유닛(1430); DMA(direct memory access) 유닛(1432); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(1440)에 결합되어 있다. 일 실시예에서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고처리율 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은, 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능 시스템들 상에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 예시된 코드(1230)와 같은 프로그램 코드는 본 명세서에 개시된 기능을 수행하기 위한 명령어를 입력하며 출력 정보를 생성하기 위해 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스에 인가될 수 있다. 이 애플리케이션을 위해, 프로세싱 시스템은, 예를 들어, 디지털 신호 프로세서(DSP), 마이크로제어기, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고수준 절차형 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. 또한, 프로그램 코드는 요구되는 경우에 어셈블리 또는 기계 언어로 구현될 수 있다. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 제한되지는 않는다. 임의의 경우에, 이 언어는 컴파일링되거나 해석된 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태는, 머신에 의해 판독되는 경우에 이 머신으로 하여금 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독가능 매체 상에 저장된 대표적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진, 그러한 표현들은 유형의 기계 판독가능 매체에 저장될 수 있으며 실제로 로직 또는 프로세서를 만드는 제조 기계에 로딩하는 제조 설비 또는 다양한 고객에게 공급될 수 있다.
이러한 기계 판독가능 저장 매체는 하드 디스크와, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable) 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, DRAM(dynamic random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory)과 같은 RAM(random access memory), ROM(read-only memory), PCM(phase change memory)을 포함하는 반도체 디바이스, 자기 또는 광 카드, 또는 전자 명령어들을 저장하는 데 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 기계 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 유형의(tangible) 구성들을 포함할 수 있지만, 이들로 제한되지 않는다.
따라서, 본 발명의 실시예들은, 명령어들을 포함하거나, 또는 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 피처들을 정의하는 HDL(Hardware Description Language)과 같은 설계 데이터를 포함하는 비일시적인 유형의 머신 판독가능 매체를 또한 포함한다. 이러한 실시예들은 프로그램 제품들로 또한 언급될 수 있다.
에뮬레이션(이진 번역(binary translation), 코드 모핑 등을 포함함)
일부 경우에, 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하기 위해 명령어 변환기가 이용될 수 있다. 예를 들어, 명령어 변환기는 명령어를 코어에 의해 프로세싱될 하나 이상의 다른 명령어로 (예를 들어, 정적 이진 변환, 동적 컴파일(dynamic compilation)을 포함하는 동적 이진 변환을 이용하여) 변환하거나, 모핑하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분 온 및 부분 오프 프로세서(part on and part off processor)일 수 있다.
도 15는 본 발명의 실시예들에 따른, 소스 명령어 세트에서의 이진 명령어들을 타겟 명령어 세트에서의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기를 사용하는 것을 대비하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 다양한 조합으로 구현될 수 있다. 도 15는 적어도 하나의 x86 명령어 세트 코어(1516)를 갖는 프로세서에 의해 기본적으로 실행될 수 있는 x86 이진 코드(1506)를 발생시키기 위해 고수준 언어(1502)로 된 프로그램이 x86 컴파일러(1504)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 적어도 하나의 x86 명령어 세트 코어(1516)를 갖는 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분, 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서상에서 실행되도록 타겟팅되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을, 호환 가능하게 실행하거나 다른 방식으로 프로세싱함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 부가의 링크(linkage) 프로세싱에 의해 또는 부가의 링크 프로세싱 없이, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1516) 상에서 실행될 수 있는 x86 이진 코드(1506)(예컨대, 오브젝트 코드)를 생성하도록 동작 가능한 컴파일러를 나타낸다. 이와 유사하게, 도 15는 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(1514)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 세트 이진 코드(1510)를 생성하기 위해 고수준 언어(1502)로 된 프로그램이 대안의 명령어 세트 컴파일러(1508)를 사용하여 컴파일될 수 있다는 것을 나타낸 것이다. 명령어 변환기(1512)는 x86 이진수 코드(1506)를 x86 명령어 세트 코어를 갖지 않는 프로세서(1514)에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 사용된다. 이것을 할 수 있는 명령어 변환기를 만드는 것이 어렵기 때문에 이같이 변환된 코드가 대안의 명령어 세트 이진 코드(1510)와 동일하지 않을 가능성이 있지만; 변환된 코드는 일반적인 연산을 달성할 것이고 대안의 명령어 세트로부터의 명령어들로 이루어져 있을 것이다. 따라서, 명령어 변환기(1512)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(1506)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
도 2 내지 3, 및 도 5 중 임의의 것에 대해 개시되는 컴포넌트들, 특징들 및 상세들은 또한 도 1 및 4 중 임의의 것에 선택적으로 사용될 수 있다. 또한, 장치 중 임의의 것에 대해 본 명세서에 설명된 컴포넌트들, 특징들, 및 상세들은 또한, 실시예들에서 그러한 장치에 의해 및/또는 그러한 장치를 가지고 수행될 수 있는 본 명세서에 설명된 방법들 중 임의의 것에서 선택적으로 이용될 수 있다.
설명 및 청구항들에서, 용어 "결합된" 및 "접속된"이 이들의 파생어들과 함께 사용되었을 수 있다. 이들 용어들은 서로에 대한 동의어로서 의도되는 것은 아니라는 것이 이해되어야 한다. 오히려, 특정한 실시예들에서, "접속된"은, 2개 이상의 요소들이 서로 직접 물리적 또는 전기적으로 접촉함을 나타내는데 사용될 수 있다. "결합된"은, 2개 이상의 요소가 직접 물리적으로 또는 전기적으로 접촉하는 것을 의미할 수 있다. 그러나, "결합된"은, 2개 이상의 요소들이 서로 직접 접촉하지는 않지만 여전히 서로 상호작용하거나 협력하는 것을 또한 의미할 수 있다. 예를 들어, 메모리 서브시스템은 하나 이상의 개입 유닛 또는 로직을 통해 디코더와 결합될 수 있고, 레지스터 기입 유닛은 하나 이상의 개입 유닛 또는 로직을 통해 레지스터와 결합될 수 있다. 도면들에서, 양방향 화살표들은 양방향 접속들 및 결합들을 나타내는데 이용된다.
설명 및 청구범위에서, "로직"이라는 용어가 사용되었을 수 있다. 본원에서 사용된 바와 같이, 로직은 하드웨어, 펌웨어, 소프트웨어 또는 그의 조합을 포함할 수 있다. 로직의 예들은, 집적 회로, 주문형 집적 회로들, 아날로그 회로들, 디지털 회로들, 프로그램된 로직 디바이스들, 명령어들을 포함하는 메모리 디바이스들 등을 포함한다. 일부 실시예들에서, 하드웨어 로직은 트랜지스터들 및/또는 게이트들을 잠재적으로 다른 회로 컴포넌트들과 함께 포함할 수 있다. 로직은 모듈, 컴포넌트, 유닛, 프로세서 요소, 등을 나타낼 수 있다.
위의 설명에서는 설명의 목적으로 본 발명의 실시예들의 충분한 이해를 제공하기 위해 다양한 특정 상세들이 설명되었다. 그러나, 하나 이상의 다른 실시예는 이들 특정 상세의 일부 없이 실시될 수 있다는 것은 통상의 기술자에게 명백할 것이다. 설명되는 특정 실시예들은 본 발명을 한정하는 것이 아니라 실시예들을 통해 본 발명을 설명하기 위해 제공된다. 본 발명의 범위는 특정 예들에 의해서가 아니라 청구항들에 의해서만 결정되어야 한다. 다른 경우들에서, 잘 알려진 회로들, 구조들, 디바이스들, 및 동작들은 설명의 이해를 불명료하게 하는 것을 피하기 위해 블록도 형태로 또는 상세 없이 도시되었다.
적절한 것으로 고려되는 경우, 참조 번호들 또는 참조 번호들의 종단 부분들은, 달리 특정되거나 명백하게 분명하지 않는 한, 선택적으로 유사하거나 동일한 특성들을 가질 수 있는 대응하는 또는 유사한 엘리먼트들을 나타내기 위해서 도면들 사이에서 반복되었다. 다수의 컴포넌트들이 설명되었지만, 그들은 일반적으로 단일 컴포넌트 내로 통합될 수 있다. 다른 경우들에서, 단일 컴포넌트가 설명되는 경우, 그것은 일반적으로 다수의 컴포넌트들 내로 분할될 수 있다.
다양한 동작들 및 방법들이 설명되었다. 방법들 중 일부는 흐름도에서 비교적 기본적인 형태로 개시되었지만, 동작들은 선택적으로 방법들에 추가되고/되거나 방법들에서 제거될 수 있다. 또한, 흐름도는 예시적인 실시예들에 따라 동작들의 특정 순서를 나타내지만, 그 특정 순서는 예시적이다. 대안적인 실시예들은 선택적으로 동작을 상이한 순서로 수행하고, 소정 동작을 결합하며, 소정 동작을 중첩하는 등을 할 수 있다.
일부 실시예들은 머신 판독가능 매체를 포함하는 제조물(예를 들어, 컴퓨터 프로그램 제품)을 포함한다. 이 매체는 머신에 의해 판독가능한 형태로 정보를 제공하는, 예를 들어 저장하는 메커니즘을 포함할 수 있다. 머신 판독가능 매체는 머신에 의해 실행되는 경우에 그리고/또는 실행될 때 머신으로 하여금 본 명세서에서 개시되는 하나 이상의 동작들, 방법들 또는 기술들을 수행하게 하고/하거나 머신이 그들을 수행하게 유발하게 동작가능한 하나 이상의 명령어들을 제공하거나 저장할 수 있다. 적절한 머신들의 예들은 프로세서들, 이것으로 한정되는 것은 아니지만, 명령어 프로세싱 장치, 디지털 로직 회로들, 집적 회로들 등을 포함한다. 적절한 머신들의 또 다른 예들은 그러한 프로세서, 명령어 프로세싱 장치, 디지털 로직 회로, 또는 집적 회로를 포함하는 컴퓨팅 디바이스들 및 다른 전자 디바이스들을 포함한다. 이러한 컴퓨팅 디바이스들 및 전자 디바이스들의 예들은, 이것으로 한정되는 것은 아니지만, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 노트북 컴퓨터들, 태블릿 컴퓨터들, 넷북들, 스마트폰들, 셀룰러 폰들, 서버들, 네트워크 디바이스들(예를 들어, 라우터들 및 스위치들), MID들(Mobile Internet devices), 미디어 플레이어들, 스마트 텔레비전들, 넷톱들(nettops), 셋톱 박스들 및 비디오 게임 제어기들을 포함한다.
일부 실시예들에서, 머신 판독가능 매체는 유형의 그리고/또는 비일시적인 머신 판독가능 저장 매체를 포함할 수 있다. 예를 들어, 유형의 그리고/또는 비일시적인 머신 판독가능 저장 매체는 플로피 디스켓, 광학 저장 매체, 광학 디스크, 광학 데이터 저장 디바이스, CD-ROM, 자기 디스크, 광자기 디스크, ROM(read only memory), PROM(programmable ROM), EPROM(erasable-and-programmable ROM), EEPROM(electrically-erasable-and-programmable ROM), RAM(random access memory), 정적 RAM(SRAM), 동적 RAM(DRAM), 플래시 메모리, 상변화 메모리, 상변화 데이터 저장 재료, 비휘발성 메모리, 비휘발성 데이터 저장 디바이스, 비일시적인 메모리, 비일시적인 데이터 저장 디바이스 등을 포함할 수 있다.
본 명세서에 걸쳐서 "일 실시예", "실시예", 또는 "하나 이상의 실시예"에 대한 참조는, 예를 들어, 특정 특징이 본 발명의 실행에 포함될 수 있다는 것을 의미하는 것을 인식해야 한다. 유사하게, 본 명세서를 간소화하고 다양한 본 발명의 양상들의 이해를 도울 목적으로, 설명에서는 다양한 특징들이 때때로 단일 실시예, 도면, 또는 그의 설명에서 함께 그룹화된다는 것이 이해되어야 한다. 그러나, 이러한 개시물의 방법은, 본 발명이 각각의 청구항에서 명백하게 기재되는 것보다 더 많은 특징들을 요구한다는 의도를 반영하는 것으로서 해석되어서는 안 된다. 오히려, 다음의 청구항들이 반영하는 바에 따라, 본 발명의 양태들은 단일의 개시된 실시예의 모든 특징보다 적게 놓일 수 있다. 따라서, 본 상세한 설명에 후속하는 청구항들은 이에 의해 본 상세한 설명에 명백하게 포함되고, 각각의 청구항은 본 발명의 별개의 실시예로서 자립한다.
예시적인 실시예들
다음의 예들은 추가의 실시예들에 관한 것이다. 이 예들에서의 구체사항들은 하나 이상의 실시예에서의 어디에서나 이용될 수 있다.
예 1은 폭을 갖는 레지스터, 및 부분 폭 로드 명령어(partial width load instruction)를 수신하는 디코드 유닛을 포함하는 프로세서이다. 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시하는 것이다. 프로세서는 또한 디코드 유닛과 결합된 메모리 서브시스템을 포함한다. 메모리 서브시스템은, 부분 폭 로드 명령어에 응답하여, 표시된 메모리 위치로부터의 데이터를 프로세서로 로드하는 것이다. 프로세서는 또한 메모리 서브시스템 및 레지스터와 결합된 레지스터 기입 유닛을 포함한다. 레지스터 기입 유닛은, 부분 폭 로드 명령어에 응답하여, 로드된 데이터의 적어도 일부를 레지스터의 부분 폭에 기입하고, 프로세서의 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 레지스터의 나머지 폭 내에 저장된 비트들의 세트를 레지스터에 기입하는 것을 종료하고, 부분 폭 로드 명령어는 부분 폭 로드 모드를 표시하지 않는다.
예 2는 예 1의 프로세서를 포함하고, 선택적으로, 부분 폭 로드 모드에서, 레지스터 기입 유닛이 레지스터의 나머지 폭에 비트들의 세트로서 모두 0을 기입하고, 제2 부분 폭 로드 모드에서, 레지스터의 나머지 폭에 비트들의 세트로서 모두 0을 기입하지 않는다.
예 3은 예 2의 프로세서를 포함하고, 선택적으로, 제2 부분 폭 로드 모드에서, 레지스터 기입 유닛이 레지스터의 나머지 폭에 비트들의 세트로서 부호 확장 비트들을 기입한다.
예 4는 예 2의 프로세서를 포함하고, 선택적으로, 제2 부분 폭 로드 모드에서, 부분 폭 로드 명령어를 디코더가 수신하기 이전에, 레지스터 기입 유닛이, 레지스터의 나머지 폭 내에 비트들의 세트로서 저장된 나머지 폭 내에 원래 존재하는 비트들의 세트를 레지스터에 기입하는 것을 종료한다.
예 5는 예 1 내지 예 4 중 어느 한 예의 프로세서를 포함하고, 선택적으로, 부분 폭 로드 모드를 표시하기 위한 적어도 하나의 비트를 더 포함하고, 프로세서는 부분 폭 로드 모드를 결정하기 위해 적어도 하나의 비트에 액세스하고, 비트들의 세트에 대한 비트 값들을 결정하는 대응하는 접근법을 선택한다.
예 6은 예 1 내지 예 5 중 어느 한 예의 프로세서를 포함하고, 선택적으로, 적어도 하나의 비트가 프로세서의 레지스터 내에 있고 애플리케이션-가시적이다.
예 7은 예 1 내지 예 6 중 어느 한 예의 프로세서를 포함하고, 선택적으로, 레지스터의 폭이 적어도, 메모리에 액세스하기 위해 프로세서에 의해 사용된 메모리 어드레스들만큼 넓고(wide), 레지스터의 부분 폭은 레지스터의 폭의 일부(예를 들어, 절반)일 뿐이다.
예 8은 예 1 내지 예 7 중 어느 한 예의 프로세서를 포함하고, 프로세서 중 하나가 64 비트 메모리 어드레스를 사용하는 64 비트 아키텍처 프로세서이고, 레지스터의 부분 폭은 32 비트이거나, 또는 프로세서는 128 비트 메모리 어드레스를 사용하는 128 비트 아키텍처 프로세서이고, 레지스터의 부분 폭은 64비트이다.
예 9는 예 1 내지 예 8 중 어느 한 예의 프로세서를 포함하고, 프로세서는 사용자 레벨 애플리케이션이 부분 폭 로드 모드를 변경하는 것을 허용한다.
예 10은 예 1 내지 예 9 중 어느 한 예의 프로세서를 포함하고, 프로세서는 운영 체제 및 가상 머신 모니터 중 적어도 하나가 부분 폭 로드 모드를 변경하는 것을 허용하지만 사용자 레벨 애플리케이션들이 부분 폭 로드 모드를 변경하는 것을 허용하지 않는다.
예 11은 예 1 내지 예 10 중 어느 한 예의 프로세서를 포함하고, 프로세서는 부분 폭 로드 모드를 변경하는 명령어를 포함하는 명령어 세트를 포함한다.
예 12는 예 1의 프로세서를 포함하고, 선택적으로, 부분 폭 로드 모드에서, 레지스터 기입 유닛이 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입하고, 프로세서는 애플리케이션으로부터 운영 체제로의 이행(transition) 및 인터럽트 중 하나에서 부분 폭 로드 모드를 제2 부분 폭 로드 모드로 변경하는 프로세서의 유닛을 선택적으로 더 포함한다.
예 13은 프로세서에 의해 수행되는 방법이다. 방법은 부분 폭 로드 명령어를 수신하는 것을 포함한다. 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시한다. 방법은 부분 폭 로드 명령어에 응답하여 표시된 메모리 위치로부터의 데이터를 프로세서로 로드하는 것을 포함한다. 방법은 부분 폭 로드 명령어에 응답하여 로드된 데이터의 적어도 일부를 레지스터의 부분 폭에 기입하는 것을 포함한다. 방법은 프로세서의 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 레지스터의 나머지 폭 내에 저장된 비트들의 세트를 레지스터에 기입하는 것을 종료하는 것을 포함한다. 부분 폭 로드 명령어는 부분 폭 로드 모드를 표시하지 않는다.
예 14는 예 13의 방법을 포함하고, 선택적으로, 레지스터를 기입하는 것을 종료하는 것은 부분 폭 로드 모드에서 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입하는 것을 포함한다. 선택적으로, 제2의 상이한 부분 폭 로드 모드에서, 0들 대신에 부호 확장 비트들이 레지스터의 나머지 폭에 기입될 것이다.
예 15는 예 13의 방법을 포함하고, 선택적으로, 레지스터에 기입하는 것을 종료하는 것은 부분 폭 로드 모드에서 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입하는 것을 포함한다. 선택적으로, 제2의 상이한 부분 폭 로드 모드에서, 나머지 폭 내에 원래 있었던 비트들의 세트가 레지스터의 나머지 폭에 저장될 것이다.
예 16은 예 1 내지 예 15 중 어느 한 예의 방법을 포함하고, 선택적으로, 부분 폭 로드 모드를 결정하기 위해 적어도 하나의 비트에 액세스하는 것을 더 포함한다. 방법은 또한 비트들의 세트에 대한 비트 값들을 결정하는 부분 폭 로드 모드에 대응하는 접근법을 선택하는 것을 선택적으로 포함할 수 있다.
예 17은 예 1 내지 예 16 중 어느 한 예의 방법을 포함하고, 선택적으로, 프로세서의 애플리케이션-가시적인 레지스터 내의 적어도 하나의 비트에 액세스하는 것을 포함하는 적어도 하나의 비트에 액세스하는 것을 포함한다.
예 18은 예 1 내지 예 17 중 어느 한 예의 방법을 포함하고, 선택적으로, 레지스터의 부분 폭은 레지스터의 폭의 서브세트(예를 들어, 절반)만을 기입하는 것을 포함한다. 선택적으로, 레지스터는 적어도, 메모리에 액세스하기 위해 프로세서에 의해 사용된 메모리 어드레스들만큼 넓다.
예 19는 예 1 내지 예 18 중 어느 한 예의 방법을 포함하고, 선택적으로, 레지스터의 부분 폭에 기입하는 것은, 레지스터의 나머지 내에 0들을 이용하여 레지스터의 32 비트를 선택적으로 기입하는 것 - 메모리에 액세스하기 위해 프로세서에 의해 사용된 메모리 어드레스는 64 비트임 - 또는 레지스터의 나머지 내에 0들을 이용하여 레지스터의 64 비트를 기입하는 것 - 메모리에 액세스하기 위해 프로세서에 의해 사용된 메모리 어드레스는 128 비트임 - 중 하나를 포함한다.
예 20은 예 1 내지 예 19 중 어느 한 예의 방법을 포함하고, 선택적으로, 부분 폭 로드 모드를 변경하기 위해 사용자 레벨 애플리케이션으로부터 제어 신호를 수신하는 것, 및 제어 신호를 수신한 후에 부분 폭 로드 모드를 변경하는 것을 더 포함한다.
예 21은 예 1 내지 예 20 중 어느 한 예의 방법을 포함하고, 선택적으로, 부분 폭 로드 모드를 변경하기 위해 운영 체제 및 가상 머신 모니터로부터 제어 신호를 수신하는 것, 및 운영 체제 및 가상 머신 모니터 중 상기 하나로부터 제어 신호를 수신한 후에 부분 폭 로드 모드를 변경하는 것을 더 포함한다. 방법은 또한, 선택적으로, 사용자 레벨 애플리케이션이 부분 폭 로드 모드를 변경하는 것을 방지하는 것을 포함한다.
예 22는 예 1 내지 예 22 중 어느 한 예의 방법을 포함하고, 선택적으로, 프로세서의 명령어 세트의 사용자 레벨 명령어에 응답하여, 부분 폭 로드 모드를 변경하는 것을 더 포함한다.
예 23은 머신에 의해 실행되는 경우, 머신으로 하여금 동작들을 수행하게 하도록 동작가능한 명령어들의 세트를 저장한 비-일시적인 머신 판독가능한 저장 매체를 포함하는 제조 물품이다. 동작들은 부분 폭 로드 명령어를 수행하기 위해 프로세서에 의해 사용되는 프로세서의 부분 폭 로드 모드의 표시를 검사하는 동작을 포함하는 소프트웨어 모듈의 메타데이터를 검사하는 동작을 포함한다. 부분 폭 로드 명령어는 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시한다. 동작들은 또한 프로세서의 부분 폭 로드 모드를 표시된 부분 폭 로드 모드로 변경하는 동작을 포함한다. 부분 폭 로드 모드를 변경하는 동작은 메모리로부터 로드된 데이터의 부분 폭을 저장하는데 사용되지 않은 표시된 레지스터의 일부에 프로세서에 의해 저장되는 비트들의 값들에서의 변경을 제어한다.
예 24는 예 23의 제조 물품을 포함하고, 선택적으로, 명령어들의 세트는, 머신에 의해 실행되는 경우, 머신으로 하여금, 어느 상이한 소프트웨어 모듈들이, 소프트웨어 모듈이 부분 폭 로드 모드를 사용하는 것을 포함하여 어느 상이한 소프트웨어 모듈들이 어느 상이한 부분 폭 로드 모드들을 사용하는지를 표시하는 메타데이터를 유지하는 동작, 및 인터럽트를 처리한 후에, 소프트웨어 모듈로부터 코드의 실행으로 다시 이행하는 것과 함께 프로세서의 부분 폭 로드 모드를 표시된 부분 폭 로드 모드로 변경하는 동작을 포함하는 동작들을 수행하게 하도록 동작가능한 명령어들을 더 포함한다.
예 25는 상호접속, 상호접속과 결합된 DRAM(dynamic random access memory), 및 상호접속과 결합된 프로세서를 포함하는, 명령어들을 프로세스하는 시스템이다. 프로세서는, 폭을 갖는 레지스터, 명령어를 수신하는 디코드 유닛을 포함한다. 명령어는 DRAM의 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시한다. 프로세서는 또한 디코드 유닛과 결합된 메모리 서브시스템을 포함한다. 메모리 서브시스템은, 명령어에 응답하여, 표시된 메모리 위치로부터의 데이터를 로드한다. 프로세서는 또한 메모리 서브시스템과 레지스터에 결합된 유닛을 포함한다. 유닛은, 명령어에 응답하여, 로드된 데이터의 적어도 일부를 레지스터의 부분 폭에 기입하고, 프로세서의 모드에 의존하는 비트 값들을 갖는 레지스터의 나머지 폭 내에 저장된 비트들의 세트를 레지스터에 기입하는 것을 종료한다. 선택적으로, 명령어는 모드를 표시하지 않는다.
예 26은 예 25의 시스템을 포함하고, 선택적으로, 부분 폭 로드 모드에서, 유닛은 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입한다. 선택적으로, 제2 부분 폭 로드 모드에서, 유닛은 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입하지 않는다.
예 27은 부분 폭 로드 명령어를 수신하는 수단을 포함하는 프로세서이다. 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시한다. 프로세서는 또한 부분 폭 로드 명령어에 응답하여 표시된 메모리 위치로부터의 데이터를 프로세서로 로드하는 수단을 포함한다. 프로세서는 또한 부분 폭 로드 명령어에 응답하여 로드된 데이터의 적어도 일부를 레지스터의 부분 폭에 기입하는 수단을 포함한다. 프로세서는 또한 프로세서의 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 레지스터의 나머지 폭에 저장된 비트들의 세트를 레지스터에 기입하는 것을 종료하는 수단을 포함한다. 선택적으로, 부분 폭 로드 명령어는 부분 폭 로드 모드를 표시하지 않는다.
예 28은 예 27의 프로세서를 포함하고, 선택적으로, 레지스터를 기입하는 것을 종료하는 수단은 부분 폭 로드 모드에서 레지스터의 나머지 폭에 비트들의 세트로서 0들을 기입하는 수단을 포함한다.
예 29는, 머신에 의해 실행되는 경우, 머신으로 하여금 예 13 내지 22 중 어느 한 예의 방법을 수행하게 하는 명령어를 저장한 머신 판독가능한 저장 매체이다.
예 30은 예 13 내지 22 중 어느 한 예의 방법을 수행하는 프로세서이다.
예 31은 예 13 내지 22 중 어느 한 예의 방법을 수행하는 수단을 포함하는 프로세서이다.
예 32는 예 13 내지 22 중 어느 한 예의 방법을 수행하기 위한 집적 회로 및/또는 로직 및/또는 유닛들 및/또는 컴포넌트들 및/또는 모듈들 또는 그의 임의의 조합들을 포함하는 프로세서이다.
예 33은 DRAM(dynamic random access memory) 및 프로세서를 포함하는 컴퓨터 시스템이고, 컴퓨터 시스템은 예 13 내지 22 중 어느 한 예의 방법을 수행한다.
예 34는 적어도 하나의 연산 또는 실질적으로 본원에서 설명된 방법을 수행하는 프로세서이다.
예 35는 적어도 하나의 연산 또는 실질적으로 본원에서 설명된 방법을 수단을 포함하는 프로세서이다.
예 36은 실질적으로 본원에 설명된 명령어를 실행 또는 수행하는 프로세서이다.
예 37은 실질적으로 본원에 설명된 명령어를 수행하는 수단을 포함하는 프로세서이다.

Claims (27)

  1. 프로세서로서,
    폭(width)을 갖는 레지스터;
    부분 폭 로드 명령어(partial width load instruction)를 수신하는 디코드 유닛 - 상기 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고, 상기 레지스터를 목적지 피연산자로서 표시함 - ;
    상기 디코드 유닛과 결합된 메모리 서브시스템 - 상기 메모리 서브시스템은, 상기 부분 폭 로드 명령어에 응답하여, 상기 표시된 메모리 위치로부터의 데이터를 상기 프로세서에 로드함 - ; 및
    상기 메모리 서브시스템 및 상기 레지스터와 결합된 레지스터 기입 유닛 - 상기 레지스터 기입 유닛은, 상기 부분 폭 로드 명령어에 응답하여, 상기 로드된 데이터의 적어도 일부를 상기 레지스터의 부분 폭에 기입하고, 상기 프로세서의 복수의 상이한 유형들의 부분 폭 로드 모드들 중 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 상기 레지스터의 나머지 폭 내에 저장되는 비트들의 세트를 상기 레지스터에 기입하는 것을 종료하고, 상기 부분 폭 로드 명령어는 상기 부분 폭 로드 모드를 표시하지 않음 -
    을 포함하고,
    상기 복수의 상이한 유형들의 부분 폭 로드 모드들 각각에 대해, 상기 나머지 폭 내에 저장되는 상기 비트들의 세트는 상이한, 프로세서.
  2. 제1항에 있어서,
    상기 레지스터 기입 유닛은, 상기 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하고, 제2 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하지는 않는 것인 프로세서.
  3. 제1항에 있어서,
    상기 레지스터 기입 유닛은, 상기 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하고,
    상기 레지스터 기입 유닛은, 제2 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 부호 확장 비트들을 기입하는 것인 프로세서.
  4. 제1항에 있어서,
    상기 레지스터 기입 유닛은, 상기 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하고,
    상기 레지스터 기입 유닛은, 제2 부분 폭 로드 모드에서, 상기 디코드 유닛이 상기 부분 폭 로드 명령어를 수신하기 이전에, 상기 레지스터의 상기 나머지 폭 내의 비트들의 세트로서 저장된 상기 나머지 폭에 원래 있던 비트들의 세트를 상기 레지스터에 기입하는 것을 종료하는 것인 프로세서.
  5. 제1항에 있어서,
    상기 부분 폭 로드 모드를 표시하는 적어도 하나의 비트를 더 포함하고, 상기 프로세서는 상기 부분 폭 로드 모드를 결정하기 위해 상기 적어도 하나의 비트에 액세스하고, 상기 비트들의 세트에 대한 상기 비트 값들을 결정하는 대응하는 접근법을 선택하는 것인 프로세서.
  6. 제5항에 있어서,
    상기 적어도 하나의 비트는 상기 프로세서의 레지스터 내에 있고, 애플리케이션-가시적인(application-visible) 프로세서.
  7. 제1항에 있어서,
    상기 레지스터의 폭은 적어도, 메모리에 액세스하기 위해 상기 프로세서에 의해 사용된 메모리 어드레스만큼 넓고 상기 레지스터의 상기 부분 폭은 상기 레지스터의 폭의 단지 일부인 프로세서.
  8. 제7항에 있어서,
    상기 프로세서는 64 비트 메모리 어드레스들을 사용하는 64 비트 아키텍처 프로세서이고, 상기 레지스터의 상기 부분 폭은 32 비트인 것, 및
    상기 프로세서는 128 비트 메모리 어드레스들을 사용하는 128 비트 아키텍처 프로세서이고, 상기 레지스터의 상기 부분 폭은 64 비트인 것
    중 하나가 선택되는 프로세서.
  9. 제1항에 있어서,
    사용자 레벨 애플리케이션이 상기 부분 폭 로드 모드를 변경할 수 있는 프로세서.
  10. 제1항에 있어서,
    운영 체제 및 가상 머신 모니터 중 적어도 하나가 상기 부분 폭 로드 모드를 변경할 수 있으나,
    사용자 레벨 애플리케이션들은 상기 부분 폭 로드 모드를 변경할 수 없는, 프로세서.
  11. 제1항에 있어서,
    상기 프로세서는 상기 부분 폭 로드 모드를 변경하는 명령어를 포함하는 명령어 세트를 갖는 프로세서.
  12. 제1항에 있어서,
    상기 레지스터 기입 유닛은, 상기 부분 폭 로드 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 0들을 기입하는 것이고,
    애플리케이션으로부터 운영 체제로의 이행(transition) 및 인터럽트 중 하나에서 상기 부분 폭 로드 모드를 제2 부분 폭 로드 모드로 변경하는 프로세서의 유닛을 더 포함하는 프로세서.
  13. 프로세서에 의해 수행되는 방법으로서,
    부분 폭 로드 명령어를 수신하는 단계 - 상기 부분 폭 로드 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고 레지스터를 목적지 피연산자로서 표시함 - ;
    상기 부분 폭 로드 명령어에 응답하여 상기 표시된 메모리 위치로부터의 데이터를 상기 프로세서에 로드하는 단계;
    상기 부분 폭 로드 명령어에 응답하여, 상기 로드된 데이터의 적어도 일부를 상기 레지스터의 부분 폭에 기입하는 단계; 및
    상기 프로세서의 복수의 상이한 유형들의 부분 폭 로드 모드들 중 부분 폭 로드 모드에 의존하는 비트 값들을 갖는 상기 레지스터의 나머지 폭 내에 저장된 비트들의 세트를 상기 레지스터에 기입하는 것을 종료하는 단계 - 상기 부분 폭 로드 명령어는 상기 부분 폭 로드 모드를 표시하지 않음 -
    를 포함하고,
    상기 복수의 상이한 유형들의 부분 폭 로드 모드들 각각에 대해, 상기 나머지 폭 내에 저장되는 상기 비트들의 세트는 상이한 방법.
  14. 제13항에 있어서, 상기 레지스터에 기입하는 것을 종료하는 단계는, 상기 부분 폭 로드 모드에서 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 0들을 기입하는 단계를 포함하고, 제2의, 상이한 부분 폭 로드 모드에서 0들 대신에 부호 확장 비트들이 상기 레지스터의 상기 나머지 폭에 기입되는 방법.
  15. 제13항에 있어서,
    상기 레지스터에 기입하는 것을 종료하는 단계는, 상기 부분 폭 로드 모드에서 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 0들을 기입하는 단계를 포함하고, 제2의, 상이한 부분 폭 로드 모드에서, 상기 나머지 폭에 원래 있던 비트들의 세트가 상기 레지스터의 상기 나머지 폭에 계속 저장되는 방법.
  16. 제13항에 있어서,
    상기 부분 폭 로드 모드를 결정하기 위해 적어도 하나의 비트에 액세스하는 단계; 및
    상기 비트들의 세트에 대한 상기 비트 값들을 결정하는 상기 부분 폭 로드 모드에 대응하는 접근법을 선택하는 단계
    를 더 포함하는 방법.
  17. 제16항에 있어서,
    상기 적어도 하나의 비트에 액세스하는 단계는 상기 프로세서의 애플리케이션-가시적인 레지스터 내의 상기 적어도 하나의 비트에 액세스하는 단계를 포함하는 방법.
  18. 제13항에 있어서,
    상기 레지스터의 부분 폭에 기입하는 단계는, 상기 레지스터의 폭의 단지 서브세트에 기입하는 단계를 포함하고, 상기 레지스터는 적어도, 상기 메모리에 액세스하기 위해 상기 프로세서에 의해 사용된 메모리 어드레스들만큼 넓은 방법.
  19. 제18항에 있어서,
    상기 레지스터의 부분 폭에 기입하는 단계는,
    상기 레지스터의 나머지에 0들로 상기 레지스터의 32 비트를 기입하는 단계 - 상기 메모리에 액세스하기 위해 상기 프로세서에 의해 사용된 상기 메모리 어드레스들은 64 비트임 - ; 및
    상기 레지스터의 나머지에 0들로 상기 레지스터의 64 비트를 기입하는 단계 - 상기 메모리에 액세스하기 위해 상기 프로세서에 의해 사용된 상기 메모리 어드레스들은 128 비트임 -
    중 하나를 포함하는 방법.
  20. 제13항에 있어서,
    상기 부분 폭 로드 모드를 변경하기 위해 사용자 레벨 애플리케이션으로부터 제어 신호를 수신하는 단계; 및
    상기 제어 신호를 수신한 후에 상기 부분 폭 로드 모드를 변경하는 단계
    를 더 포함하는 방법.
  21. 제13항에 있어서,
    상기 부분 폭 로드 모드를 변경하기 위해 운영 체제 및 가상 머신 모니터 중 하나로부터 제어 신호를 수신하는 단계;
    상기 운영 체제 및 상기 가상 머신 모니터 중 상기 하나로부터 상기 제어 신호를 수신한 후에 상기 부분 폭 로드 모드를 변경하는 단계; 및
    사용자 레벨 애플리케이션이 상기 부분 폭 로드 모드를 변경하는 것을 방지하는 단계
    를 더 포함하는 방법.
  22. 명령어들의 세트를 저장한 비-일시적인 머신 판독가능한 저장 매체로서, 상기 명령어들의 세트는, 머신에 의해 실행되는 경우, 상기 머신으로 하여금,
    부분 폭 로드 명령어를 수행하기 위해 프로세서에 의해 사용되는 상기 프로세서의 복수의 상이한 유형들의 부분 폭 로드 모드들 중 부분 폭 로드 모드의 표시를 검사하는 동작을 포함하는 소프트웨어 모듈의 메타데이터를 검사하는 동작 - 상기 부분 폭 로드 명령어는 메모리 위치를 소스 피연산자로서 표시하고, 레지스터를 목적지 피연산자로서 표시함 - ; 및
    상기 프로세서의 상기 부분 폭 로드 모드를 상기 표시된 부분 폭 로드 모드로 변경하는 동작 - 상기 부분 폭 로드 모드를 변경하는 동작은 메모리로부터 로드된 데이터의 부분 폭을 저장하는데 사용되지 않은 상기 표시된 레지스터의 일부에 상기 프로세서에 의해 저장되는 비트들의 값들의 변경을 제어하여, 상기 복수의 상이한 유형들의 부분 폭 로드 모드들 각각에 대해, 상기 데이터의 부분 폭을 저장하는데 사용되지 않은 상기 표시된 레지스터의 일부에 저장되는 비트들의 값들이 상이하도록 함 -
    을 포함하는 동작들을 수행하게 하도록 동작가능한, 머신 판독가능한 저장 매체.
  23. 제22항에 있어서,
    상기 명령어들의 세트는, 상기 머신에 의해 실행되는 경우, 상기 머신으로 하여금,
    상기 소프트웨어 모듈이 상기 부분 폭 로드 모드를 사용하는지를 포함하여 어느 상이한 소프트웨어 모듈들이 어느 상이한 부분 폭 로드 모드들을 사용할지를 표시하는 메타데이터를 유지하는 동작; 및
    인터럽트를 처리한 후에, 소프트웨어 모듈로부터 코드의 실행으로 다시 이행하는 것과 함께 상기 프로세서의 상기 부분 폭 로드 모드를 상기 표시된 부분 폭 로드 모드로 변경하는 동작
    을 포함하는 동작들을 수행하게 하도록 동작가능한 명령어들을 더 포함하는 머신 판독가능한 저장 매체.
  24. 명령어들을 프로세스하는 시스템으로서,
    상호접속;
    상기 상호접속과 결합된 DRAM(dynamic random access memory); 및
    상기 상호접속과 결합된 프로세서
    를 포함하고,
    상기 프로세서는,
    폭을 갖는 레지스터;
    명령어를 수신하는 디코드 유닛 - 상기 명령어는 상기 DRAM의 메모리 위치를 소스 피연산자로서 표시하고 상기 레지스터를 목적지 피연산자로서 표시함 - ;
    상기 디코드 유닛과 결합된 메모리 서브시스템 - 상기 메모리 서브시스템은, 상기 명령어에 응답하여, 상기 표시된 메모리 위치로부터의 데이터를 로드함 - ; 및
    상기 메모리 서브시스템 및 상기 레지스터와 결합된 유닛 - 상기 유닛은, 상기 명령어에 응답하여, 상기 로드된 데이터의 적어도 일부를 상기 레지스터의 부분 폭에 기입하고, 상기 프로세서의 복수의 상이한 유형들의 모드들 중 모드에 의존하는 비트 값들을 갖는 상기 레지스터의 나머지 폭 내에 저장되는 비트들의 세트를 상기 레지스터에 기입하는 것을 종료하고, 상기 명령어는 상기 모드를 표시하지 않음 -
    을 포함하고,
    상기 복수의 상이한 유형들의 모드들 각각에 대해, 상기 나머지 폭 내에 저장되는 상기 비트들의 세트는 상이한 시스템.
  25. 제24항에 있어서,
    상기 유닛은, 상기 모드가 제1 모드인 경우, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 0들을 기입하고, 상기 모드가 제2 모드인 경우, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 0들을 기입하지 않는 시스템.
  26. 프로세서로서,
    폭을 갖는 레지스터;
    명령어를 수신하는 디코드 유닛 - 상기 명령어는 메모리의 메모리 위치를 소스 피연산자로서 표시하고, 레지스터를 목적지 피연산자로서 표시함 - ;
    상기 디코드 유닛과 결합된 메모리 서브시스템 - 상기 메모리 서브시스템은, 상기 명령어에 응답하여, 상기 표시된 메모리 위치로부터의 데이터를 상기 프로세서에 로드함 - ; 및
    상기 메모리 서브시스템 및 상기 레지스터와 결합된 레지스터 기입 유닛 - 상기 레지스터 기입 유닛은, 상기 명령어에 응답하여, 상기 로드된 데이터의 적어도 일부를 상기 레지스터의 부분 폭에 기입하고, 상기 프로세서의 복수의 상이한 유형들의 모드들 중 모드에 의존하는 비트 값들을 갖는 상기 레지스터의 나머지 폭 내에 저장되는 비트들의 세트를 상기 레지스터에 기입하는 것을 종료하고, 상기 명령어는 상기 모드를 표시하지 않음 -
    을 포함하고,
    상기 복수의 상이한 유형들의 모드들 각각에 대해, 상기 나머지 폭 내에 저장되는 상기 비트들의 세트는 상이한, 프로세서.
  27. 제26항에 있어서,
    상기 레지스터 기입 유닛은, 제1 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하고, 제2 모드에서, 상기 레지스터의 상기 나머지 폭에 상기 비트들의 세트로서 모두 0을 기입하지는 않는 것인 프로세서.
KR1020157031766A 2013-06-28 2014-06-19 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들 KR101839479B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/931,070 US9395990B2 (en) 2013-06-28 2013-06-28 Mode dependent partial width load to wider register processors, methods, and systems
US13/931,070 2013-06-28
PCT/US2014/043159 WO2014209747A1 (en) 2013-06-28 2014-06-19 Mode dependent partial width load to wider register processors, methods, and systems

Publications (2)

Publication Number Publication Date
KR20150139931A KR20150139931A (ko) 2015-12-14
KR101839479B1 true KR101839479B1 (ko) 2018-03-19

Family

ID=52116848

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157031766A KR101839479B1 (ko) 2013-06-28 2014-06-19 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들

Country Status (8)

Country Link
US (1) US9395990B2 (ko)
EP (1) EP3014422B1 (ko)
KR (1) KR101839479B1 (ko)
CN (2) CN109508206B (ko)
BR (1) BR112015029955A2 (ko)
RU (1) RU2638641C2 (ko)
TW (1) TWI524271B (ko)
WO (1) WO2014209747A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9395990B2 (en) * 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
GB2539040B (en) * 2015-06-05 2021-08-25 Advanced Risc Mach Ltd Issue policy control
US10901940B2 (en) * 2016-04-02 2021-01-26 Intel Corporation Processors, methods, systems, and instructions to atomically store to memory data wider than a natively supported data width
US10248423B2 (en) * 2016-07-22 2019-04-02 International Business Machines Corporation Executing short pointer mode applications
US10795853B2 (en) 2016-10-10 2020-10-06 Intel Corporation Multiple dies hardware processors and methods
CN113885833A (zh) 2016-10-20 2022-01-04 英特尔公司 用于经融合的乘加的系统、装置和方法
CN113287098A (zh) * 2019-03-26 2021-08-20 拉姆伯斯公司 多精度存储器系统
GB2591788B (en) * 2020-02-06 2022-06-01 Advanced Risc Mach Ltd Saving and restoring registers
CN112346783B (zh) * 2020-11-05 2022-11-22 海光信息技术股份有限公司 一种处理器及其操作方法、装置、设备和介质
US20220350570A1 (en) * 2021-04-28 2022-11-03 International Business Machines Corporation Pipelined hardware to accelerate modular arithmetic operations
CN114020332B (zh) * 2022-01-05 2022-09-23 北京微核芯科技有限公司 指令处理方法及其装置
CN114527953B (zh) * 2022-04-24 2022-07-08 深圳云豹智能有限公司 存储器数据处理系统、方法、装置、计算机设备和介质

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2288521B (en) * 1994-03-24 1998-10-14 Discovision Ass Reconfigurable process stage
US5446912A (en) * 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6542988B1 (en) 1999-10-01 2003-04-01 Sun Microsystems, Inc. Sending both a load instruction and retrieved data from a load buffer to an annex prior to forwarding the load data to register file
US6871273B1 (en) * 2000-06-22 2005-03-22 International Business Machines Corporation Processor and method of executing a load instruction that dynamically bifurcate a load instruction into separately executable prefetch and register operations
US7228403B2 (en) * 2000-12-23 2007-06-05 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
EP1217513A3 (en) * 2000-12-23 2003-08-13 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
US6889312B1 (en) * 2001-04-02 2005-05-03 Advanced Micro Devices, Inc. Selective zero extension based on operand size
US6995756B2 (en) * 2003-03-31 2006-02-07 Intel Corporation Methods and apparatus for driving pixels in a microdisplay
US7237096B1 (en) * 2004-04-05 2007-06-26 Sun Microsystems, Inc. Storing results of producer instructions to facilitate consumer instruction dependency tracking
WO2006043345A1 (ja) * 2004-10-19 2006-04-27 Matsushita Electric Industrial Co., Ltd. プロセッサ
US7376817B2 (en) 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US8566568B2 (en) * 2006-08-16 2013-10-22 Qualcomm Incorporated Method and apparatus for executing processor instructions based on a dynamically alterable delay
US9529592B2 (en) * 2007-12-27 2016-12-27 Intel Corporation Vector mask memory access instructions to perform individual and sequential memory access operations if an exception occurs during a full width memory access operation
US8977790B2 (en) * 2008-02-15 2015-03-10 Freescale Semiconductor, Inc. Peripheral module register access methods and apparatus
US8392693B2 (en) 2009-08-28 2013-03-05 Via Technologies, Inc. Fast REP STOS using grabline operations
US8627044B2 (en) * 2010-10-06 2014-01-07 Oracle International Corporation Issuing instructions with unresolved data dependencies
US20120254588A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US8918626B2 (en) * 2011-11-10 2014-12-23 Oracle International Corporation Prefetching load data in lookahead mode and invalidating architectural registers instead of writing results for retiring instructions
WO2013095604A1 (en) * 2011-12-23 2013-06-27 Intel Corporation Systems, apparatuses, and methods for performing mask bit compression
US9395990B2 (en) 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems

Also Published As

Publication number Publication date
CN109508206B (zh) 2023-08-29
CN105453030B (zh) 2019-02-15
EP3014422A4 (en) 2017-03-01
RU2638641C2 (ru) 2017-12-14
CN109508206A (zh) 2019-03-22
KR20150139931A (ko) 2015-12-14
WO2014209747A1 (en) 2014-12-31
TW201523439A (zh) 2015-06-16
EP3014422A1 (en) 2016-05-04
EP3014422B1 (en) 2021-08-25
TWI524271B (zh) 2016-03-01
BR112015029955A2 (pt) 2017-07-25
US20150006856A1 (en) 2015-01-01
RU2015151131A (ru) 2017-05-31
US9395990B2 (en) 2016-07-19
CN105453030A (zh) 2016-03-30

Similar Documents

Publication Publication Date Title
KR101839479B1 (ko) 더 넓은 레지스터에의 모드 의존형 부분 폭 로드 프로세서들, 방법들, 및 시스템들
US10776190B2 (en) Hardware apparatuses and methods for memory corruption detection
US10120663B2 (en) Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture
KR101964350B1 (ko) 다중 레지스터 메모리 액세스 명령어들, 프로세서들, 방법들 및 시스템들
KR101597774B1 (ko) 마스킹된 전체 레지스터 액세스들을 이용한 부분적 레지스터 액세스들을 구현하기 위한 프로세서들, 방법들 및 시스템들
US10678541B2 (en) Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions
JP2015534188A (ja) ユーザレベルのスレッディングのために即時のコンテキスト切り替えを可能とする新規の命令および高度に効率的なマイクロアーキテクチャ
KR101787851B1 (ko) 다중 페이지 크기 변환 색인 버퍼(tlb)용 장치 및 방법
EP3644179A2 (en) Apparatus and method for tile gather and tile scatter
US9207880B2 (en) Processor with architecturally-visible programmable on-die storage to store data that is accessible by instruction
WO2017172122A1 (en) Auxiliary cache for reducing instruction fetch and decode bandwidth requirements
CN110659129A (zh) 用于数据表示之间的一致、加速的转换的装置和方法
US11354128B2 (en) Optimized mode transitions through predicting target state
US10761979B2 (en) Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
US10860319B2 (en) Apparatus and method for an early page predictor for a memory paging subsystem
WO2019133091A1 (en) Apparatus and method for vectored machine check bank reporting
EP4202692A1 (en) Apparatus and method for constant detection during compress operations
US20230418757A1 (en) Selective provisioning of supplementary micro-operation cache resources
CN114691598A (zh) 用于处理器的独立于存储器的和可缩放状态组件初始化
CN111512309A (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