KR20140113579A - 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법 - Google Patents

데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법 Download PDF

Info

Publication number
KR20140113579A
KR20140113579A KR1020140030655A KR20140030655A KR20140113579A KR 20140113579 A KR20140113579 A KR 20140113579A KR 1020140030655 A KR1020140030655 A KR 1020140030655A KR 20140030655 A KR20140030655 A KR 20140030655A KR 20140113579 A KR20140113579 A KR 20140113579A
Authority
KR
South Korea
Prior art keywords
source
data element
bits
operand
instruction
Prior art date
Application number
KR1020140030655A
Other languages
English (en)
Other versions
KR101635856B1 (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 KR20140113579A publication Critical patent/KR20140113579A/ko
Application granted granted Critical
Publication of KR101635856B1 publication Critical patent/KR101635856B1/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/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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions

Abstract

NAME 명령어을 실행하기 위한 시스템, 방법 및 장치의 실시예가 설명된다. VPBZHI의 실행은, 제2 소스의 데이터 요소 단위로, 데이터 요소에서의 시작점보다 더 높은(더 상위의) 비트들의 제로화를 야기한다. 시작점은 제1 소스에서의 데이터 요소의 콘텐츠에 의해 정의된다. 결과로 얻은 데이터 요소들은 데스티네이션의 대응하는 데이터 요소 위치에 저장된다.

Description

데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법{SYSTEMS, APPARATUSES, AND METHODS FOR ZEROING OF BITS IN A DATA ELEMENT}
본 발명의 분야는 일반적으로 컴퓨터 프로세서 아키텍처(computer processor architecture)에 관한 것으로, 보다 구체적으로는, 실행될 때 특정한 결과를 야기하는 명령어들에 관한 것이다.
명령어 세트 또는 ISA(instruction set architecture)는 프로그래밍에 관련된 컴퓨터 아키텍처(computer architecture)의 부분으로, 원시 데이터 유형(native data types), 명령어, 레지스터 아키텍처(register architecture), 어드레싱 모드, 메모리 아키텍처(memory architecture), 인터럽트 및 예외 처리(interrupt and exception handling), 및 외부 I/O(input and output)를 포함할 수 있다. 본 명세서에서 명령어(instruction)라는 용어는 일반적으로, 매크로-명령어들을 디코딩하는 프로세서의 디코더로부터 야기되는 마이크로-연산들 또는 마이크로-명령어들이 아니라, 매크로-명령어 - 실행을 위해 프로세서에 제공되는 명령어들임 - 로 지칭된다는 것에 유의해야 한다.
본 발명은, 동일한 참조 번호가 유사한 요소를 나타내는, 첨부 도면의 도면들에서 제한이 아닌 예로서 도시된다.
도 1은 본 발명의 하나의 실시예에 따른 1 액티브 비트 벡터 기록마스크 요소들(one active bit vector writemask elements)의 수와 벡터 크기와 데이터 요소 크기 사이의 상관관계를 보여준다.
도 2는 하나 이상의 명령어를 실행하는 프로세서(프로세서 코어)의 예시적인 실시예의 블록도이다.
도 3은 VPBZHI의 연산에 대한 예시적인 도시를 보여준다.
도 4는 프로세서에서 VPBZHI 명령어의 실행에 대한 일 실시예를 보여준다.
도 5는 VPBZHI 명령어를 처리하기 위한 방법의 일 실시예를 보여준다.
도 6은 본 발명의 하나의 실시예에 따른 레지스터 아키텍처(600)의 블록도이다.
도 7a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인(in-order pipeline) 및 예시적인 레지스터 재명명 비순차적 발행/실행 파이프라인(register renaming, out-of-order issue/execution pipeline) 둘 다를 보여주는 블록도이다.
도 7b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어(in-order architecture core)의 예시적인 실시예 및 예시적인 레지스터 재명명 비순차적 발행/실행 아키텍처 코어(register renaming, out-of-order issue/execution architecture core) 둘 다를 보여주는 블록도이다.
도 8a-b는 보다 구체적인 예시적인 순차적 코어 아키텍처의 블록도를 보여주는 것으로, 이 코어는 칩 내의 몇몇의 로직 블록들(동일한 유형 및/또는 상이한 유형들의 다른 코어들을 포함함) 중 하나이다.
도 9는 본 발명의 실시예들에 따라 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽들을 가질 수 있는 프로세서(900)의 블록도이다.
도 10-13은 예시적인 컴퓨터 아키텍처들의 블록도이다.
도 14는 본 발명의 실시예들에 따라 소스 명령어 세트 내의 이진 명령어들(binary instructions)을 타겟 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
아래의 설명에서, 다수의 특정 상세가 설명된다. 그러나, 본 발명의 실시예들은 이러한 특정 상세없이 실행될 수 있다는 것이 이해된다. 다른 예들에서, 잘 알려진 회로, 구조물 및 기술은 설명의 이해를 모호하게 하지 않기 위해 자세하게 도시되지 않았다.
명세서에서 "하나의 실시예(one embodiment)", "일 실시예(an embodiment)", "예시적인 실시예(example embodiment)" 등에 대한 언급은, 설명된 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수 있다는 것을 나타내지만, 모든 실시예가 반드시 그러한 특정한 특징, 구조, 또는 특성을 포함할 수 있는 것은 아니다. 더욱이, 그러한 문구가 반드시 동일한 실시예를 지칭할 필요는 없다. 또한, 특정한 특징, 구조, 또는 특성이 일 실시예와 관련하여 설명될 때, 명시적으로 설명되어 있든 아니든, 그러한 특징, 구조, 또는 특성이 다른 실시예들과 관련하여 영향을 미친다는 것은 당업자의 지식 내에 있는 것으로 한다.
개요
명령어 세트 아키텍처는 ISA를 구현하는 프로세서의 내부 디자인인 마이크로아키텍처(microarchitecture)와 구별된다. 상이한 마이크로아키텍처를 가진 프로세서가 공통 명령어 세트를 공유할 수 있다. 예를 들어, 인텔 펜티엄 4 프로세서, 인텔 코어 프로세서, 및 캘리포니아주 서니베일의 AMD(Advanced Micro Devices)사의 프로세서는 거의 동일한 버전의 x86 명령어 세트(최신 버전에 일부 확장이 추가됨)를 구현하지만, 상이한 내부 디자인을 갖는다. 예를 들어, ISA의 동일한 레지스터 아키텍처는, 전용 물리 레지스터, 레지스터 재명명 메커니즘(예컨대, 미국 특허 번호 5,446,912에 설명된 바와 같은 RAT(Register Alias Table), ROB(Reorder Buffer) 및 리타이어먼트 레지스터 파일(retirement register file)의 사용; 미국 특허 번호 5,207,132에 설명된 바와 같은 레지스터들의 풀 및 다수의 맵의 사용)을 사용하는 하나 이상의 동적으로 할당된 물리 레지스터 등을 포함하는, 잘 알려진 기술을 사용하여 상이한 마이크로-아키텍처(micro-architectures)에서 상이한 방식으로 구현될 수 있다. 달리 명시되지 않는 한, 레지스터 아키텍처, 레지스터 파일, 및 레지스터라는 문구는 명령어들이 레지스터를 특정하는 방식 및 소프트웨어/프로그래머에게 가시적인 것을 지칭한다. 특이성이 요구되는 경우에, 논리적(logical), 구조적(architectural), 또는 소프트웨어 가시적(software visible)이라는 형용사는 레지스터 아키텍처 내의 레지스터들/파일들을 나타내는데 사용되는 반면, 주어진 마이크로-아키텍처 내의 레지스터(예컨대, 물리 레지스터, 재정렬 버퍼, 리타이어먼트 레지스터, 레지스터 풀)를 지정하기 위해 상이한 형용사들이 사용될 것이다.
명령어 세트는 하나 이상의 명령어 포맷을 포함한다. 주어진 명령어 포맷은, 여러 가지 중에서, 수행될 연산 및 그 연산이 수행될 오퍼랜드(들)를 지정하기 위해 다양한 분야(비트 수, 비트 위치)를 정의한다. 주어진 명령어는 주어진 명령어 포맷을 사용하여 표현되고 연산 및 오퍼랜드를 지정한다. 명령어 스트림은 특정 시퀀스의 명령어들인데, 여기서, 시퀀스 내의 각각의 명령어는 하나의 명령어(an instruction)가 하나의 명령어 포맷(an insturction format)으로 존재한다.
과학, 금융, 자동-벡터화 범용, RMS(recognition, mining, and synthesis)/시각 및 멀티미디어 애플리케이션(예컨대, 2D/3D 그래픽, 이미지 처리, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 조작)은 종종 많은 수의 데이터 아이템에서 동일한 연산이 수행될 것을 요구한다("데이터 병렬성(data parallelism)"으로 지칭됨). SIMD(Single Instruction Multiple Data)는 프로세서로 하여금 다수의 데이터 아이템에서 동일한 연산을 수행하게 하는 명령어의 유형을 지칭한다. SIMD 기술은 레지스터 내의 비트들을, 그들 각각이 별개의 값을 나타내는, 다수의 고정 크기의 데이터 요소들로 논리적으로 나눌 수 있는 프로세서에 특히 적합하다. 예를 들어, 64 비트 레지스터 내의 비트들은, 그들 각각이 별개의 16 비트 값을 나타내는, 4개의 별개의 16 비트 데이터 요소로서 연산될 소스 오퍼랜드로 지정될 수 있다. 또 다른 예로서, 256 비트 레지스터 내의 비트들은 4개의 별개의 64 비트 패킹 데이터 요소(packed data elements)(쿼드 워드(Q) 크기 데이터 요소), 8개의 별개의 32 비트 패킹 데이터 요소(더블 워드(D) 크기 데이터 요소), 16개의 별개의 16 비트 패킹 데이터 요소(워드(W) 크기 데이터 요소) 또는 32개의 별개의 8 비트 데이터 요소(바이트(B) 크기 데이터 요소)로서 연산될 소스 오퍼랜드로 지정될 수 있다. 이러한 유형의 데이터는 패킹 데이터 유형(packed data type) 또는 벡터 데이터 유형으로 지칭되고, 이러한 데이터 유형의 오퍼랜드는 패킹 데이터 오퍼랜드(packed data operands) 또는 벡터 오퍼랜드로 지칭된다. 다시 말해, 패킹 데이터 아이템 또는 벡터는 패킹 데이터 요소들의 시퀀스를 지칭하고; 패킹 데이터 오퍼랜드 또는 벡터 오퍼랜드는 SIMD 명령어의 소스 또는 데스티네이션 오퍼랜드(source or destination operand)이다(패킹 데이터 명령어 또는 벡터 명령어로도 알려짐).
예로서, SIMD 명령어의 하나의 유형은, 동일한 크기이고, 동일한 수의 데이터 요소를 갖고, 동일한 데이터 요소 순서로 데스티네이션 벡터 오퍼랜드(결과 벡터 오퍼랜드로도 지칭됨)를 생성하기 위해 수직 방식으로 2개의 소스 벡터 오퍼랜드에 대해 수행될 단일 벡터 연산을 지정한다. 소스 벡터 오퍼랜드 내의 데이터 요소는 소스 데이터 요소로 지칭되는 한편, 데스티네이션 벡터 오퍼랜드 내의 데이터 요소는 데스티네이션 또는 결과 데이터 요소로 지칭된다. 이러한 소스 벡터 오퍼랜드는 동일한 크기이고 동일한 폭의 데이터 요소를 포함하므로, 그들은 동일한 수의 데이터 요소를 포함한다. 2개의 소스 벡터 오퍼랜드에서 동일한 비트 위치에 있는 소스 데이터 요소는 데이터 요소 쌍(대응하는 데이터 요소로도 지칭됨; 즉, 각각의 소스 오퍼랜드의 데이터 요소 위치 0에 있는 데이터 요소가 대응하는 것, 각각의 소스 오퍼랜드의 데이터 요소 위치 1에 있는 데이터 요소가 대응하는 것 등)을 형성한다. 그 SIMD 명령어에 의해 지정된 연산은 결과 데이터 요소의 매칭 넘버를 생성하기 위해 소스 데이터 요소의 이러한 쌍들 각각에 대해 별도로 수행되므로, 소스 데이터 요소의 쌍 각각은 대응하는 결과 데이터 요소를 갖는다. 연산은 수직이며, 결과 벡터 오퍼랜드는 동일한 크기이고 동일한 수의 데이터 요소를 갖고, 결과 데이터 요소는 소스 벡터 오퍼랜드와 동일한 데이터 요소 순서로 저장되므로, 결과 데이터 요소는 소스 벡터 오퍼랜드 내에서 대응하는 소스 데이터 요소 쌍과 동일한 결과 벡터 오퍼랜드의 비트 위치에 있다. 이러한 예시적인 유형의 SIMD 명령어에 더해, 다양한 다른 유형의 SIMD 명령어(예컨대, 단지 하나 또는 두개보다 많은 소스 벡터 오퍼랜드를 갖고; 수평 방식으로 연산하고; 상이한 크기이고, 상이한 크기의 데이터 요소를 갖고, 및/또는 상이한 데이터 요소 순서를 갖는 결과 벡터 오퍼랜드를 생성함)가 존재한다. 데스티네이션 벡터 오퍼랜드(destination vector operand)(또는 데스티네이션 오퍼랜드)라는 용어는, 하나의 위치(그것은 해당 명령어에 의해 지정된 메모리 어드레스에 있거나 레지스터임)에서 해당 데스티네이션 오퍼랜드의 저장을 포함하는, 명령어에 의해 지정된 연산 수행의 직접적인 결과로서 정의되므로, 또 다른 명령어에 의해(또 다른 명령어에 의한 동일한 위치의 지정에 의해) 소스 오퍼랜드로서 액세스될 수 있다는 것이 이해되어야 한다.
x86, MMX™, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1 및 SSE4.2 명령어를 포함하는 명령어 세트를 갖는 인텔® 코어™ 프로세서에 의해 이용되는 것과 같은 SIMD 기술은 애플리케이션 성능에 있어서의 상당한 개선을 가능하게 한다(코어™ 및 MMX™는 캘리포니아주 산타 클라라의 인텔사의 등록 상표 또는 상표임). AVX(Advanced Vector Extensions)(AVX1 및 AVX2)로 지칭되고 VEX 코딩 스킴을 사용하는 SIMD 확장의 추가 세트가 배포(release) 및/또는 공개(publish)된다(예컨대, 2011년 10월, 인텔® 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼 참조; 및 2011년 6월, 인텔® AVX 프로그래밍 레퍼런스 참조).
아래의 설명에서, 명령어 세트 아키텍처에서의 특정한 명령어의 연산을 설명하기 전에 설명을 필요로 할 수 있는 일부 아이템이 존재한다. 하나의 그러한 아이템은 "기록마스크 레지스터(writemask register)"로 불리는데, 이는 일반적으로 요소당(per-element) 컴퓨터 연산을 조건부로 제어하기 위해 오퍼랜드를 예측하는데 사용된다(이하, 마스크 레지스터(mask register)라는 용어 또한 사용될 수 있고, 그것은 아래 논의된 "k" 레지스터와 같은 기록마스크 레지스터를 지칭함). 아래 사용된 바와 같이, 기록마스크 레지스터는 복수의 비트(16, 32, 64 등)를 저장하는데, 여기서, 기록마스크 레지스터의 각각의 액티브 비트는 SIMD 처리 동안 벡터 레지스터의 패킹 데이터 요소의 연산/갱신을 관리한다. 통상적으로, 프로세서 코어에 의한 사용을 위해 이용가능한 하나보다 많은 기록마스크 레지스터가 존재한다.
명령어 세트 아키텍처는, 벡터 연산을 지정하고 이러한 벡터 레지스터들로부터 소스 레지스터 및/또는 데스티네이션 레지스터를 선택하는 필드를 갖는 적어도 일부의 SIMD 명령어를 포함한다(예시적인 SIMD 명령어는 하나 이상의 벡터 레지스터의 콘텐츠에 대해 수행될 벡터 연산을 지정할 수 있고, 해당 벡터 연산의 결과는 벡터 레지스터들 중 하나에 저장됨). 본 발명의 상이한 실시예들은 상이한 크기의 벡터 레지스터들을 가질 수 있고 더 많은/더 적은/상이한 크기의 데이터 요소들을 지원할 수 있다.
SIMD 명령어에 의해 지정된 멀티 비트 데이터 요소들의 크기(예컨대, 바이트, 워드, 더블 워드, 쿼드 워드)는 벡터 레지스터 내의 "데이터 요소 위치"의 비트 위치를 결정하고, 벡터 오퍼랜드의 크기는 데이터 요소의 수를 결정한다. 패킹 데이터 요소는 특정한 위치에 저장된 데이터를 지칭한다. 다시 말해, 데스티네이션 오퍼랜드 내의 데이터 요소들의 크기와 데스티네이션 오퍼랜드의 크기(데스티네이션 오퍼랜드에서의 비트들의 총 수)에 따라(또는 달리 말하면, 데스티네이션 오퍼랜드의 크기 및 데스티네이션 오퍼랜드 내의 데이터 요소들의 수에 따라), 결과적인 벡터 오퍼랜드 내의 멀티 비트 데이터 요소 위치들의 비트 위치들이 달라진다(예컨대, 결과적인 벡터 오퍼랜드에 대한 데스티네이션이 벡터 레지스터인 경우(본 논의에서, 벡터 레지스터들과 패킹 데이터 요소 레지스터들은 상호 교환적으로 사용됨), 데스티네이션 벡터 레지스터 내의 멀티 비트 데이터 요소 위치들의 비트 위치들이 달라진다). 예를 들어, 멀티 비트 데이터 요소의 비트 위치는, 32 비트 데이터 요소(데이터 요소 위치 0이 비트 위치 31:0을 점유하고, 데이터 요소 위치 1이 비트 위치 63:32을 점유하는 등)에 대해 연산하는 벡터 연산과 64 비트 데이터 요소(데이터 요소 위치 0이 비트 위치 63:0을 점유하고, 데이터 요소 위치 1이 비트 위치 127:64를 점유하는 등)에 대해 연산하는 벡터 연산 사이에서 상이하다.
추가로, 도 1에 도시된 바와 같이, 본 발명의 하나의 실시예에 따른 1 액티브 비트 벡터 기록마스크 요소의 수와 벡터 크기와 데이터 요소 크기 사이의 상관관계가 존재한다. 다른 폭 또한 가능하지만, 128 비트, 256 비트, 및 512 비트의 벡터 크기가 도시된다. 다른 폭 또한 가능하지만, 8 비트 바이트(B), 16 비트 워드(W), 32 비트 더블워드(D) 또는 단일 정밀도 부동 소수점, 및 64 비트 쿼드워드(Q) 또는 2배 정밀도 부동 소수점의 데이터 요소 크기가 고려된다. 도시된 바와 같이, 벡터 크기가 128 비트인 경우, 벡터의 데이터 요소 크기가 8 비트일 때 마스킹을 위해 16 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 16 비트일 때 마스킹을 위해 8 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 32 비트일 때 마스킹을 위해 4 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 64 비트일 때 마스킹을 위해 2 비트가 사용될 수 있다. 벡터 크기가 256 비트일 때, 패킹 데이터 요소 폭이 8 비트일 때 마스킹을 위해 32 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 16 비트일 때 마스킹을 위해 16 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 32 비트일 때 마스킹을 위해 8 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 64 비트일 때 마스킹을 위해 4 비트가 사용될 수 있다. 벡터 크기가 512 비트일 때, 벡터의 데이터 요소 크기가 8 비트일 때 마스킹을 위해 64 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 16 비트일 때 마스킹을 위해 32 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 32 비트일 때 마스킹을 위해 16 비트가 사용될 수 있고, 벡터의 데이터 요소 크기가 64 비트일 때 마스킹을 위해 8 비트가 사용될 수 있다.
벡터 크기와 데이터 요소 크기의 조합에 따라, 64 비트 모두 또는 64 비트의 서브세트만 기록 마스크로서 사용될 수 있다. 일반적으로, 단일의 요소당 마스킹 제어 비트가 사용될 때, 마스킹을 위해 사용된 벡터 기록마스크 레지스터 내의 비트들(액티브 비트들)의 수는 벡터의 데이터 요소 크기(비트)로 나눈 벡터 크기(비트)와 동일하다.
위에 언급한 바와 같이, 기록마스크 레지스터는 연산이 수행되어야 하는 요소들을 추적하고 벡터 레지스터(또는 메모리 위치) 내의 요소들에 대응하는 마스크 비트들을 포함한다. 이런 이유로, 벡터 레지스터들로서는 이러한 마스크 비트들에 대한 유사한 행동을 되풀이하고, 보통 기록마스크 레지스터 내의 이러한 마스크 비트들을 조절하는 것을 허용하는 공통 연산들을 갖는 것이 바람직하다.
아래 설명은 소스의 각각의 데이터 요소에서의 특정 위치에서 시작하는 비트들을 제로화(zero out)하는 제어 벡터를 사용하는 명령어에 대한 실시예이다. 이러한 명령어는, 벡터 레지스터의 데이터 요소 내에서 비트를 추출하고 각각의 데이터 요소에 비트를 삽입하는 것을 포함하는 다수의 비트 조작 작업을 효율적으로 벡터화하는데 사용될 수 있다. 이하, 일반적으로 명령어 세트의 VPBZHI(vector packed zero high bits starting with a specified bit position) 명령어로 불리는 명령어에 대한 실시예들, 및 그러한 명령어를 실행하는데 사용될 수 있는 시스템, 아키텍처, 명령어 포맷 등에 대한 실시예가 있다. VPBZHI의 실행은, 제2 소스의 데이터 요소 단위로, 데이터 요소에서의 시작점보다 더 높은(더 상위의) 비트들의 제로화를 야기한다. 시작점은 제1 소스에 있는 데이터 요소의 콘텐츠에 의해 정의된다. 얻어진 데이터 요소는 데스티네이션의 대응하는 데이터 요소 위치에 저장된다.
도 2는 하나 이상의 VPBZHI 명령어(204)를 실행하는 프로세서(프로세서 코어)(200)의 예시적인 실시예의 블록도이다. 일부 실시예에서, 프로세서는 (예컨대, 데스크탑, 랩탑, 서버 및 컴퓨터와 비슷한 것에서 사용되는 유형의) 범용 프로세서일 수 있다. 대안적으로, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서의 예로는, 이로 제한되지 않지만, 몇 가지만 예를 들자면, 네트워크 프로세서, 통신 프로세서, 암호화 프로세서, 그래픽 프로세서, 코-프로세서, 내장형 프로세서, DSP(digital signal processors), 및 제어기를 포함한다. 프로세서는 다양한 CISC(complex instruction set computing) 프로세서, 다양한 RISC(reduced instruction set computing) 프로세서, 다양한 VLIW(very long instruction word) 프로세서, 이들의 다양한 하이브리드, 또는 전체적으로 다른 유형의 프로세서 중 임의의 것일 수 있다.
프로세서(200)는 구조적으로 가시적인 레지스터(예컨대, 구조적 레지스터 파일)(205)를 포함한다. 구조적 레지스터는 또한 본 명세서에서 단순히 레지스터로 지칭될 수 있다. 달리 명시되거나 명백하지 않는 한, 구조적 레지스터, 레지스터 파일, 및 레지스터라는 문구는 본 명세서에서 오퍼랜드를 식별하기 위해 매크로명령어 또는 어셈블리 언어 명령어에 의해 지정되는 레지스터 및/또는 프로그래머 및/또는 소프트웨어에 가시적인 레지스터를 지칭하는 것으로 사용된다. 이러한 레지스터는 주어진 마이크로아키텍처의 다른 비구조적 또는 비구조적으로 가시적인 레지스터(예컨대, 명령에 의해 사용되는 임시 레지스터, 재정렬 버퍼, 리타이어먼트 레지스터 등)에 대조된다. 레지스터는 일반적으로 온 다이 프로세서 저장 위치를 나타낸다. 도시된 구조적 레지스터는 패킹 데이터 레지스터(206)를 포함한다. 패킹 데이터 레지스터 각각은 패킹 또는 벡터 데이터를 저장하도록 동작가능할 수 있다. 도시된 구조적 레지스터는 또한 패킹 데이터 연산 마스크 레지스터(207)를 포함한다. 패킹 데이터 연산 마스크 레지스터 각각은 패킹 데이터 연산 마스크를 저장하도록 동작가능할 수 있다. 이러한 레지스터는 본 명세서에서 기록마스크 레지스터로 지칭될 수 있다. 패킹 데이터 오퍼랜드는 패킹 데이터 레지스터(207)에 저장될 수 있다.
프로세서는 또한 실행 로직(208)을 포함한다. 실행 로직은 하나 이상의 VPBZHI 명령어(204)를 실행 또는 처리하도록 동작가능하다. 일부 실시예에서, 실행 로직은 이러한 명령어들을 실행하기 위해 특정한 로직(예컨대, 펌웨어와 잠재적으로 조합되는 특정한 회로 또는 하드웨어)을 포함할 수 있다.
도 3은 VPBZHI의 연산의 예시적인 도시를 나타낸다. 도 3a에서, 제1 소스 레지스터(301)로부터의 데이터 요소들은, 데이터 요소 단위로, 제2 소스 레지스터/메모리 위치(303)에서 대응하는 데이터 요소에 있는 비트들의 제로화를 위한 시작점을 제공한다. 이 예에서, 제1 및 제2 소스(301, 303) 모두는 위치 0-3에서 4개의 데이터 요소를 갖는다(우측이 최하위). 데이터 요소 위치 0에서, 제1 소스(301)는 16진법 포맷으로 00000002의 값을 갖는다. 이는 10진 표기법으로 2이고, 제2 소스(303)의 비트 위치 2는 제로화를 시작할 수 있는 지점임을 나타낸다. 그러나, 본 예시에서는 기록마스킹(writemasking)이 사용되는데, 기록마스크(305)의 값 때문에, 제2 소스에서의 비트들의 제로화가 발생하지 않고, 대응하는 데스티네이션(309)에 저장될 것이다. 이 예에서, 데스티네이션(309)의 콘텐츠는 명령어가 실행되기 전과 동일하다.
데이터 요소 위치 1에서, 제1 소스(301)는 16진법 포맷으로 00000010의 값을 갖는다. 이는 10진 표기법으로 16이고, 제2 소스(303)의 비트 위치 16은 제로화를 시작할 수 있는 지점임을 나타낸다. 다시, 본 예시에서는 기록마스킹이 사용되지만, 이번에는, 기록마스크(305)의 이러한 비트 위치에서의 값이 제로화 및 기록이 발생할 것임을 나타낸다. 이와 같이, 제2 소스(303)의 데이터는 비트 위치 16에서 시작하여 제로화될 것이고, 데스티네이션(309)의 데이터 요소 위치 1에 새로운 값이 저장될 것이다.
도 3b에서, 제1 소스 레지스터(311)로부터의 데이터 요소는, 데이터 요소 단위로, 제2 소스 레지스터/메모리 위치(313)에서 대응하는 데이터 요소의 비트들의 제로화를 위한 시작점을 제공한다. 이 예에서, 제1 및 제2 소스(311, 313) 모두는 위치 0-3에서 4개의 데이터 요소를 갖는다(우측이 최하위). 데이터 요소 위치 0에서, 제1 소스(311)는 16진법 포맷으로 00000002의 값을 갖는다. 이는 10진 표기법으로 2이고, 제2 소스(313)의 비트 위치 2는 제로화를 시작할 수 있는 지점임을 나타낸다. 그러나, 본 예시에서는 기록마스킹이 사용되는데, 이러한 비트 위치에서 기록마스크(315)의 값 때문에, 제2 소스에서의 비트들의 제로화가 발생하지 않고, 대응하는 데스티네이션(319)에 저장될 것이다. 이 예에서, 데스티네이션(319)의 콘텐츠는 완전히 제로화된다.
데이터 요소 위치 1에서, 제1 소스(311)는 16진법 포맷으로 00000010의 값을 갖는다. 이는 10진 표기법으로 16이고 제2 소스(313)의 비트 위치 16는 제로화를 시작할 수 있는 지점임을 나타낸다. 다시, 본 예시에는 기록마스킹이 사용되지만, 이번에는, 기록마스크(315)의 이러한 비트 위치에서의 값은, 제로화 및 기록이 발생할 것임을 나타낸다. 이와 같이, 제2 소스(313)의 데이터는 비트 위치 16에서 시작하여 제로화될 것이고, 데스티네이션(319)의 데이터 요소 위치 1에 새로운 값이 저장될 것이다.
VPBZHI의 예시적인 포맷
이러한 명령어의 예시적인 포맷은 "VPBZHI {K1} R1, R2/MEM, R3"인데, 여기서, 데스티네이션 오퍼랜드 K1은 선택적 기록마스크 레지스터이고, R1은 패킹 데이터 소스 레지스터(이를테면, 128-, 256-, 512 비트 레지스터 등), R2는 패킹 데이터 데스티네이션 레지스터(이를테면, 128-, 256-, 512 비트 레지스터 등) 또는 메모리 위치이고, R3은 데스티네이션 레지스터(이를테면, 128-, 256-, 512 비트 레지스터 등)이며, VPBZHI는 명령어의 연산코드(opcode)이다. 연산코드는 또한 소스의 데이터 요소의 크기를 지정할 수 있다. 예를 들어, VPBZHID는 데이터 요소가 32 비트이고 VPBZHIB는 8 비트임을 나타낸다. 소스 오퍼랜드 및 데이터 요소의 크기는 또한 기록마스크 레지스터에서 액티브 비트의 수를 결정할 것이다.
VPBZHI의 실행에 대한 예시적인 방법
도 4는 프로세서에서 VPBZHI 명령어의 실행에 대한 일 실시예를 도시한다. 401에서, 제1 및 제2 소스 오퍼랜드, 데스티네이션 오퍼랜드, 선택적 기록마스크 오퍼랜드 및 연산코드를 가진 VPBZHI 명령어가 페치된다.
403에서, VPBZHI 명령어가 디코딩 로직에 의해 디코딩된다. 이 단계에서, 명령어의 포맷에 따라, 데이터 변환이 존재하는지, 어느 레지스터가 기록 및/또는 검색되는지, 어떤 메모리 어드레스에 액세스되는지 등과 같이 다양한 데이터가 해석될 수 있다.
405에서, 소스 오퍼랜드의 값이 검색/판독된다. 예를 들어, 소스 벡터 레지스터가 판독된다. 소스 오퍼랜드가 메모리 오퍼랜드인 경우, 그 오퍼랜드와 연관된 데이터 요소가 검색된다. 일부 실시예에서, 메모리로부터의 데이터 요소가 임시 레지스터에 저장된다.
407에서, VPBZHI 명령어(또는 마이크로연산과 같은 그러한 명령어를 포함하는 연산)는, 제1 소스 오퍼랜드의 각각의 데이터 요소 위치에 대해, 그 비트 위치에서의 데이터 요소에서 시작하는 제2 소스 오퍼랜드의 값들을 제로화하기 위한 시작 비트 위치를 결정하기 위해, 하나 이상의 기능 유닛들과 같은 실행 리소스에 의해 실행된다. 명령어의 실행은 또한, 제2 소스 오퍼랜드의 대응하는 데이터 요소 위치 각각에 대해, 제1 소스에서의 대응하는 데이터 요소 위치에서 발견된 시작 비트 위치보다 크거나(보다 상위이거나) 동일한 비트 위치에 있는 비트들의 제로화를 야기한다. 이 예는 도 3에서 발견된다. 일부 실시예에서, 각각의 데이터 요소 위치는 병렬적으로 평가된다. 다른 실시예에서, 데이터 요소 위치는 순차적으로 평가된다.
409에서, 수정된 제2 소스의 데이터 요소는 데스티네이션의 대응하는 데이터 요소 위치에 기록된다. 일부 실시예에서, 기록마스크가 사용될 때, 대응하는 데이터 요소 위치는 그 비트 위치에서의 기록마스크의 값에 따라 기록되지 않을 수 있다. 일부 실시예에서, 기록마스크가 데이터 요소 위치가 기록되지 않았음을 나타낼 때, 데스티네이션의 데이터 요소 위치는 모두 0으로 설정된다. 다른 실시예들에서, 기록마스크가 데이터 요소 위치가 기록되지 않았음을 나타낼 때, 데스티네이션의 데이터 요소 위치는 변경되지 않는다. 407 및 409는 별도로 도시되었지만, 일부 실시예에서, 그들은 명령어의 실행의 일부로서 함께 수행된다.
일부 실시예에서, 제2 소스의 데이터는 데이터 요소의 임의의 수정에 앞서 데스티네이션 레지스터에 저장된다. 예를 들어, 기록마스킹이 사용되지 않는 경우, 제2 소스로부터의 모든 데이터 요소는 데스티네이션에 저장된 다음 수정될 것이다. 기록마스킹이 사용되는 경우, 단지 선택된 데이터 요소만 기록마스크에 따라 이동될 것이다.
일부 실시예에서, 수정을 위해 임시 저장 위치가 사용되어, 제로화 연산이 수행될 때 제2 소스 레지스터의 데이터가 파괴되지 않는다.
도 5는 VPBZHI 명령어를 처리하기 위한 방법의 일 실시예를 보여준다. 이러한 실시예에서, 전부는 아니지만, 연산들(401-405)의 일부는 미리 수행되만, 그들은 아래 제시된 상세를 모호하게 하지 않기 위해 도시되지 않은 것으로 가정한다. 예를 들어, 페치 및 디코딩은 도시되지 않으며, 오퍼랜드 검색도 도시되지 않는다. 이러한 예에서, 각각의 데이터 요소 위치는 병렬적으로 처리되지만, 데이터 요소 위치는 순차적으로도 평가될 수 있다.
501에서, 제1 소스의 각각의 데이터 요소 위치에 대해, 제2 소스의 대응하는 데이터 요소 위치에 있는 데이터 요소의 (잠재적) 제로화를 위한 시작 비트 위치의 결정이 이루어진다. 예를 들어, 도 3에서, 데이터 요소 위치 0에서는 이 값이 2이고, 데이터 요소 위치 1에서는 16이었다. 이와 같이, 잠재적 제로화를 위한 시작 비트 위치는 제2 소스의 대응하는 데이터 요소 위치의 데이터 요소에 대해 2 및 16이다. 제로화가 발생할 수 있는 동안으로서 잠재적으로(potentially)가 본 논의에서 사용되는데, 기록마스크 사용에 따라, 변경된 데이터 요소가 데스티네이션 레지스터에 저장되지 않을 수도 있다.
503에서, 제2 소스의 각각의 데이터 요소 위치에 대해, 제2 소스의 대응하는 데이터 요소 위치에서 데이터 요소의 시작 비트 위치 및 그 위의 모든 비트 위치가 제로화된다. 예를 들어, 도 3에서, 데이터 요소 위치 0에서, 이 값은, 제로화가 비트 2에서 시작하여 그 데이터 요소의 최상위 비트에 걸쳐 계속된다는 것이다.
505에서, 각각의 데이터 요소 위치에 대해, 데이터 요소 위치가 기록마스킹될지에 대한 결정이 이루어진다. 예를 들어, 도 3에서, 데이터 비트 위치 0에서, 이 값은, 기록이 없을 것임을 나타낸다.
507에서, 기록마스크에 의해 차단되지 않는 제2 소스의 값은 대응하는 위치에서 데스티네이션에 저장된다.
509에서, 일부 실시예에서, 기록되지 않는 데스티네이션의 모든 데이터 요소 위치의 데이터 요소들이 제로화된다.
위에서는 결정된 시작 비트 위치에서 시작하여 올라가는 것으로 설명되었지만, 다른 변형이 고려된다. 예를 들어, 일부 실시예에서, 연산은 시작 비트 위치에서 시작하여 내려간다. 다른 실시예에서, 시작 비트 위치는 제로화되지 않지만 그 다음 라인은 된다.
일부 실시예에서, 제2 소스의 데이터는 503의 데이터 요소의 임의의 수정에 앞서 데스티네이션 레지스터에 저장된다. 예를 들어, 어떠한 기록마스킹도 사용되지 않을 경우, 제2 소스로부터의 데이터 요소 전부는 데스티네이션에 저장된 다음 수정될 것이다. 기록마스킹이 사용되는 경우, 단지 선택된 데이터 요소만 기록마스크에 따라 이동될 것이다.
일부 실시예에서, 수정을 위해 임시 저장 위치가 사용되어, 제로화 연산이 수행될 때 제2 소스 레지스터의 데이터가 파괴되지 않는다.
예시적인 레지스터 아키텍처( Exemplary Register Architecture )
도 6은 본 발명의 하나의 실시예에 따른 레지스터 아키텍처(600)의 블록도이다. 도시된 실시예에서, 512 비트 폭인 32 벡터 레지스터(610)가 존재하는데; 이러한 레지스터들은 zmm0 내지 zmm31로 참조된다. 하위 16 zmm 레지스터의 하위 순서 256 비트는 레지스터 ymm0-6에서 오버레이된다. 하위 16 zmm 레지스터의 하위 순서 128 비트(ymm 레지스터의 하위 순서 128 비트)는 레지스터 xmm0-15에서 오버레이된다.
범용 레지스터(625) - 도시된 실시예에서, 메모리 오퍼랜드를 어드레스하기 위해 기존의 x86 어드레싱 모드와 함께 사용되는 16개의 64 비트 범용 레지스터가 있다. 이러한 레지스터들은 명칭 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15로 참조된다.
스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(645)은, MMX 패킹 정수 플랫 레지스터 파일(650) 위에서 에일리어싱되고 - 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 사용하여 32/64/80 비트 부동 소수점 데이터에서 스칼라 부동 소수점 연산을 수행하는데 사용되는 8-요소 스택인 한편; MMX 레지스터는 64 비트 패킹 정수 데이터에서 연산을 수행할 뿐만 아니라, MMX 레지스터와 XMM 레지스터 사이에서 수행된 일부의 연산들에 대한 오퍼랜드를 보유하는데 사용된다.
본 발명의 대안적인 실시예는 더 넓거나 더 좁은 레지스터를 사용할 수 있다. 추가로, 본 발명의 대안적인 실시예는 더 많거나, 더 적거나, 상이한 레지스터 파일 및 레지스터를 사용할 수 있다.
예시적인 코어 아키텍처, 프로세서, 및 컴퓨터 아키텍처(Exemplary Core Architectures, Processors, and Computer Architectures)
프로세서 코어는 상이한 방식으로, 상이한 목적을 위해, 상이한 프로세서에서 구현될 수 있다. 예를 들면, 그러한 코어의 구현은: 1) 범용 컴퓨팅을 위한 범용 순차적 코어; 2) 범용 컴퓨팅을 위한 고성능 범용 비순차적 코어; 3) 주로 그래픽 및/또는 과학(스루풋) 컴퓨팅을 위한 특수 목적 코어를 포함할 수 있다. 상이한 프로세서의 구현은: 1) 범용 컴퓨팅을 위한 하나 이상의 범용 순차적 코어 및/또는 범용 컴퓨팅을 위한 하나 이상의 범용 비순차적 코어를 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학(스루풋)을 위한 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 그러한 상이한 프로세서는 상이한 컴퓨터 시스템 아키텍처로 이어지는데, 이는: 1) CPU와 별개의 칩 상의 코프로세서; 2) CPU와 동일한 패키지에 있는 별개의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이러한 경우에, 그러한 코프로세서는 때때로 특수 목적 로직, 이를테면, 통합 그래픽 및/또는 과학 (스루풋) 로직, 또는 특수 목적 코어로 지칭됨); 및 4) 설명된 CPU(때때로, 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)로 지칭됨), 전술된 코프로세서, 및 추가적인 기능을 동일한 다이 상에 포함할 수 있는 SoC(system on a chip)를 포함할 수 있다. 예시적인 코어 아키텍처는 아래의 예시적인 프로세서 및 컴퓨터 아키텍처에 대한 설명에 의해 다음에 설명된다.
예시적인 코어 아키텍처(Exemplary Core Architectures)
순차적 및 비순차적 코어 블록도
도 7a는, 본 발명의 실시예에 따른, 예시적인 순차적 파이프라인 및 예시적인 레지스터 재명명 비순차적 발행/실행 파이프라인 둘 다를 보여주는 블록도이다. 도 7b는 본 발명의 실시예에 따른 프로세서에 포함될 순차적 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 재명명 비순차적 발행/실행 아키텍처 코어 둘 다를 보여주는 블록도이다. 도 7a-b에서 실선 박스는 순차적 파이프라인 및 순차적 코어를 보여주는 한편, 점선 박스의 선택적 추가는 레지스터 재명명 비순차적 발행/실행 파이프라인 및 코어를 보여준다. 순차적 양태는 비순차적 양태의 서브세트임을 고려하려, 비순차적 양태가 설명될 것이다.
도 7a에서, 프로세서 파이프라인(700)은 페치 단계(702), 길이 디코딩 단계(704), 디코딩 단계(706), 할당 단계(708), 재명명 단계(710), 스케줄링(디스패치 또는 발행(issue)으로도 알려짐) 단계(712), 레지스터 판독/메모리 판독 단계(714), 실행 단계(716), 라이트백/메모리 기록 단계(write back/memory write stage; 718), 예외 처리 단계(722) 및 커밋 단계(724)를 포함한다.
도 7b는 실행 엔진 유닛(750)에 결합된 프론트 엔드 유닛(730)을 포함하는 프로세서 코어(790)를 도시하는데, 이들 둘 다 메모리 유닛(770)에 결합된다. 코어(790)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 혹은 대안적인 코어 유형일 수 있다. 또 다른 옵션으로, 코어(790)는, 예를 들어, 네트워크나 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(730)은 브랜치 예측 유닛(732)을 포함하는데, 브랜치 예측 유닛(732)은 명령어 캐시 유닛(734)에 결합되고, 명령어 캐시 유닛(734)은 명령어 TLB(translation lookaside buffer)(736)에 결합되고, 명령어 TLB(translation lookaside buffer)(736)는 명령어 페치 유닛(738)에 결합되고, 명령어 페치 유닛(738)은 디코딩 유닛(740)에 결합된다. 디코딩 유닛(740)(또는 디코더)은 명령어를 디코딩할 수 있고, 오리지널 명령어로부터 디코딩되거나, 그렇지 않으면 오리지널 명령어를 반영하거나, 오리지널 명령어로부터 도출되는, 하나 이상의 마이크로-연산, 마이크로-코드 엔트리 포인트, 마이크로명령어, 다른 명령어, 또는 다른 제어 신호를 출력으로서 생성할 수 있다. 디코딩 유닛(740)은 다양한 상이한 메커니즘을 사용하여 구현될 수 있다. 적절한 메커니즘의 예로는, 이로 제한되는 것은 아니지만, 룩업 테이블, 하드웨어 구현, PLA(programmable logic arrays), 마이크로코드 ROM들(read only memories) 등을 포함한다. 하나의 실시예에서, 코어(790)는 (예컨대, 디코딩 유닛(740) 안에 또는 그렇지 않으면 프론트 엔드 유닛(730) 내에 있는) 소정의 매크로명령어들을 위한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다. 디코딩 유닛(740)은 실행 엔진 유닛(750)의 재명명/할당기 유닛(752)에 결합된다.
실행 엔진 유닛(750)은 리타이어먼트 유닛(754)과 하나 이상의 스케줄러 유닛(들)(756)의 세트에 결합된 재명명/할당기 유닛(752)을 포함한다. 스케줄러 유닛(들)(756)은 예약 스테이션, 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(756)은 물리 레지스터 파일(들) 유닛(들)(758)에 결합된다. 물리 레지스터 파일(들) 유닛(758) 각각은 하나 이상의 물리 레지스터 파일을 나타내는데, 이들 중 상이한 물리 레지스터 파일들은 하나 이상의 상이한 데이터 유형들, 이를테면, 스칼라 정수, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등이 저장된다. 하나의 실시예에서, 물리 레지스터 파일(들) 유닛(758)은 벡터 레지스터 유닛 및 스칼라 레지스터 유닛을 포함한다. 이러한 레지스터 유닛은 구조적 벡터 레지스터, 벡터 마스크 레지스터, 및 범용 레지스터를 제공할 수 있다. 물리 레지스터 파일(들) 유닛(들)(758)은 리타이어먼트 유닛(754)에 의해 오버랩되어, 레지스터 재명명 및 비순차적 실행이 구현될 수 있는 다양한 방식(예컨대, 재정렬 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용; 퓨처(future) 파일(들), 히스토리(history) 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 사용; 레지스터 맵 및 레지스터들의 풀을 사용 등)을 보여준다. 리타이어먼트 유닛(754) 및 물리 레지스터 파일(들) 유닛(들)(758)은 실행 클러스터(들)(760)에 결합된다. 실행 클러스터(들)(760)는 하나 이상의 실행 유닛(762)의 세트와 하나 이상의 메모리 액세스 유닛(764)의 세트를 포함한다. 실행 유닛(762)은 다양한 유형의 데이터(예컨대, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점)에서 다양한 연산(예컨대, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예는 특정 함수 또는 함수의 세트에 전용인 다수의 실행 유닛을 포함할 수 있지만, 다른 실시예는 모든 함수를 수행하는 단지 하나의 실행 유닛 또는 다수의 실행 유닛들을 포함할 수 있다. 소정의 실시예는 소정의 유형의 데이터/연산을 위한 별개의 파이프라인(예컨대, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹 정수/패킹 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 그들 자신의 스케줄러 유닛, 물리 레지스터 파일(들) 유닛 및/또는 실행 클러스터를 갖는 메모리 액세스 파이프라인 - 별개의 메모리 메모리 액세스 파이프라인의 경우에, 이러한 파이프라인의 실행 클러스터만 메모리 액세스 유닛(들)(764)을 갖는 소정의 실시예들이 구현됨)을 만들기 때문에, 복수일 가능성이 있는 스케줄러 유닛(들)(756), 물리 레지스터 파일(들) 유닛(들)(758), 및 실행 클러스터(들)(760)가 도시된다. 또한, 별개의 파이프라인을 사용하는 경우, 이러한 파이프라인들 중 하나 이상이 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 것을 이해해야 한다.
메모리 액세스 유닛(764)의 세트는, 레벨 2(L2) 캐시 유닛(776)에 결합된 데이터 캐시 유닛(774)에 결합된 데이터 TLB 유닛(772)을 포함하는, 메모리 유닛(770)에 결합된다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛(764)은 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있는데, 이들 각각은 메모리 유닛(770)에 있는 데이터 TLB 유닛(772)에 결합된다. 명령어 캐시 유닛(734)은 메모리 유닛(770)에 있는 레벨 2(L2) 캐시 유닛(776)에 더 결합된다. L2 캐시 유닛(776)은 하나 이상의 다른 레벨의 캐시에 결합되고 결국 메인 메모리에 결합된다.
예로서, 예시적인 레지스터 재명명 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(700)을 구현할 수 있다: 1) 명령어 페치(738)는 페치 및 길이 디코딩 단계(702 및 704)를 수행하고; 2) 디코딩 유닛(740)은 디코딩 단계(706)를 수행하고; 3) 재명명/할당기 유닛(752)은 할당 단계(708) 및 재명명 단계(710)를 수행하고; 4) 스케줄러 유닛(들)(756)은 스케줄 단계(712)를 수행하고; 5) 물리 레지스터 파일(들) 유닛(들)(758) 및 메모리 유닛(770)은 레지스터 판독/메모리 판독 단계(714)를 수행하고; 실행 클러스터(760)는 실행 단계(716)를 수행하고; 6) 메모리 유닛(770) 및 물리 레지스터 파일(들) 유닛(들)(758)은 라이트백/메모리 기록 단계(718)를 수행하고; 7) 다양한 유닛들이 예외 처리 단계(722)에 관여할 수 있으며; 8) 리타이어먼트 유닛(754) 및 물리 레지스터 파일(들) 유닛(들)(758)이 커밋 단계(724)를 수행한다.
코어(790)는, 본 명세서에서 설명된 명령어(들)를 포함하는, 하나 이상의 명령어 세트(예컨대, x86 명령어 세트(최신 버전이 추가된 일부 확장을 가짐); 캘리포니아주 서니베일의 MIPS 테크놀로지의 MIPS 명령어 세트; 및 ARM 명령어 세트(캘리포니아주 서니베일의 ARM 홀딩스의 NEON과 같은 선택적 추가 확장을 가짐)를 지원할 수 있다. 하나의 실시예에서, 코어(790)는 패킹 데이터 명령어 세트 확장(예컨대, AVX1, AVX2, 및/또는 이전에 설명한 제네릭 벡터에 적합한 명령어 포맷의 일부 형태(U=0 및/또는 U=1))를 지원하기 위한 로직을 포함하고, 이에 의해, 다수의 멀티미디어 애플리케이션에 의해 사용되는 연산들이 패킹 데이터를 사용하여 수행되는 것을 허용한다.
코어는 멀티스레딩(multithreading)(연산 또는 스레드의 둘 이상의 병렬 세트의 실행)을 지원할 수 있고, 시간 슬라이스 멀티스레딩, 동시 멀티스레딩(여기서, 단일 물리 코어는 물리 코어가 동시에 멀티스레딩하는 스레드들 각각에 대해 로직 코어를 제공함), 또는 그들의 조합(예컨대, 인텔® 하이퍼스레딩 기술과 같이 시간 슬라이스 페칭 및 디코딩과 그 후에 동시 멀티스레딩)을 포함하는 다양한 방식으로 그렇게 행할 수 있다는 것이 이해되어야 한다.
레지스터 재명명은 비순차적 실행의 맥락에서 설명되지만, 레지스터 재명명은 순차적 구조에서 사용될 수 있다는 것을 이해해야 한다. 프로세서의 도시된 실시예는 또한 별개의 명령어 및 데이터 캐시 유닛(734/774) 및 공유 L2 캐시 유닛(776)을 포함하지만, 대안적인 실시예는, 예를 들어, 레벨 1(L1) 내부 캐시, 또는 다중 레벨의 내부 캐시와 같은, 명령어와 데이터 모두를 위한 단일 내부 캐시를 가질 수 있다. 일부 실시예에서, 시스템은 내부 캐시와, 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안적으로, 캐시 모두가 코어 및/또는 프로세서의 외부에 있을 수 있다.
특정한 예시적인 순차적 코어 아키텍처(Specific Exemplary In-Order Core Architecture)
도 8a-b는 보다 특정한 예시적인 순차적 코어 아키텍처의 블록도를 보여주는데, 이러한 코어는 칩 내에 여러 개의 로직 블록(동일한 유형 및/또는 상이한 유형의 다른 코어들을 포함함) 중 하나일 것이다. 로직 블록은, 애플리케이션에 따라, 일부 고정 함수 로직, 메모리 I/O 인터페이스, 및 다른 필요한 I/O 로직과 높은-대역폭 상호접속 네트워크(예컨대, 링 네트워크)를 통해 통신한다.
도 8a는, 본 발명의 실시예에 따른, 단일 프로세서 코어의 블록도로서, 온-다이 상호접속 네트워크(802)로의 접속 및 레벨 2(L2) 캐시(804)의 로컬 서브세트를 갖는다. 하나의 실시예에서, 명령어 디코더(800)는 패킹 데이터 명령어 세트 확장을 가진 x86 명령어 세트를 지원한다. L1 캐시(806)는 스칼라 및 벡터 유닛들에서 캐시 메모리로의 저-레이턴시 액세스를 허용한다. (디자인을 단순화하기 위해) 하나의 실시예에서, 스칼라 유닛(808)과 벡터 유닛(810)은 별개의 레지스터 세트(각각, 스칼라 레지스터(812)와 벡터 레지스터(814))를 사용하고 그 사이에 전송된 데이터가 메모리에 기록된 다음 레벨 1(L1) 캐시(806)로부터 리드백되지만, 본 발명의 대안적인 실시예는 상이한 접근법을 사용할 수 있다(예컨대, 단일 레지스터 세트를 사용하거나, 데이터가 기록 및 리드백되지 않고 2개의 레지스터 파일 사이에서 전송되는 것을 허용하는 통신 경로를 포함함).
L2 캐시(804)의 로컬 서브세트는 별개의 로컬 서브세트, 즉, 프로세서 코어 당 하나로 나누어지는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시(804)의 자체 로컬 서브세트에 대한 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독된 데이터는 L2 캐시 서브세트(804)에 저장되며, 자신의 로컬 L2 캐시 서브세트에 액세스하는 다른 프로세서 코어와 병렬로 신속하게 액세스될 수 있다. 프로세서 코어에 의해 기록된 데이터는 자체 L2 캐시 서브세트(804)에 저장되며, 필요한 경우, 다른 서브세트로부터 플러시된다. 링 네트워크는 공유 데이터에 대한 일관성을 보장한다. 링 네트워크는 프로세서 코어, L2 캐시 및 다른 로직 블록과 같은 에이전트가 칩 내에서 서로 통신하는 것을 허용하기 위해 양방향이다. 각각의 링 데이터 경로는 방향 당 1012 비트 와이드이다.
도 8b는 본 발명의 실시예에 따른 도 8a의 프로세서 코어의 일부의 확대도이다. 도 8b는 L1 캐시(804)의 L1 데이터 캐시(806A) 부분 뿐만 아니라, 벡터 유닛(810)과 벡터 레지스터(814)에 관한 상세를 포함한다. 구체적으로, 벡터 유닛(810)은, 하나 이상의 정수, 단일-정밀도 부동 소수점, 및 2배-정밀도 부동 소수점 명령어를 실행하는, 16-와이드 VPU(vector processing unit)(16-와이드 ALU(828)를 참조)이다. VPU는 스위즐 유닛(820)에 의한 레지스터 입력의 스위즐링, 숫자 변환 유닛(822A-B)에 의한 숫자 변환, 및 메모리 입력에 대한 복제 유닛(824)에 의한 복제를 지원한다.
통합된 메모리 제어기 및 그래픽을 가진 프로세서(Processor with integrated memory controller and graphics)
도 9는, 본 발명의 실시예에 따른, 2개 이상의 코어를 가질 수 있고, 통합된 메모리 제어기를 가질 수 있고, 통합된 그래픽을 가질 수 있는 프로세서(900)의 블록도이다. 도 9에서 실선 박스는 단일 코어(902A), 시스템 에이전트(910), 하나 이상의 버스 제어기 유닛(916)의 세트를 가진 프로세서(900)를 도시하는 한편, 점선 박스의 선택적 추가는 다수의 코어(902A-N), 시스템 에이전트 유닛(910) 내의 하나 이상의 통합된 메모리 제어기 유닛(들)(914)의 세트, 및 특수 목적 로직(908)을 갖는 대안적인 프로세서(900)를 보여준다.
따라서, 프로세서(900)의 상이한 구현은: 1) 통합된 그래픽 및/또는 과학 (스루풋) 로직인 특수 목적 로직(908)(이는 하나 이상의 코어를 포함할 수 있음), 및 하나 이상의 범용 코어인 코어들(902A-N)(예컨대, 범용 순차적 코어, 범용 비순차적 코어, 이 둘의 조합)을 가진 CPU; 2) 주로 그래픽 및/또는 과학 (스루풋)을 위한 많은 수의 특수 목적 코어인 코어들(902A-N)을 가진 코프로세서; 및 3) 많은 수의 범용 순차적 코어인 코어들(902A-N)을 가진 코프로세서를 포함할 수 있다. 따라서, 프로세서(900)는, 예를 들어, 네트워크나 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 하이-스루풋 MIC(many integrated core) 코프로세서(30 이상의 코어를 포함함), 임베디드 프로세서 등과 같은 범용 프로세서, 코프로세서 또는 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(900)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세서 기술 중 임의의 것을 사용하여 하나 이상의 기판 상에 구현될 수 있고 및/또는 그의 일부일 수 있다.
메모리 계층구조는 코어를 가진 하나 이상의 레벨의 캐시, 공유 캐시 유닛(906)의 세트 또는 하나 이상, 및 통합된 메모리 제어기 유닛(914)의 세트에 결합된 외부 메모리(미도시)를 포함한다. 공유 캐시 유닛(906)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4)와 같은 하나 이상의 중간-레벨 캐시, 또는 다른 레벨의 캐시, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 하나의 실시예에서, 링 기반 상호접속 유닛(912)은 통합된 그래픽 로직(908), 공유 캐시 유닛(906)의 세트, 및 시스템 에이전트 유닛(910)/통합된 메모리 제어기 유닛(들)(914)과 상호접속하지만, 대안적인 실시예는 그러한 유닛들을 상호접속하기 위해 임의의 수의 잘 알려진 기술을 사용할 수 있다. 하나의 실시예에서, 하나 이상의 캐시 유닛(906)과 코어(902-A-N) 사이의 일관성이 유지된다.
일부 실시예에서, 코어들(902A-N) 중 하나 이상은 멀티-스레딩할 수 있다. 시스템 에이전트(910)는 코어들(902A-N)을 조정(coordinating) 및 연산하는 이러한 컴포넌트들을 포함한다. 시스템 에이전트 유닛(910)은, 예를 들어, PCU(power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 통합된 그래픽 로직(908) 및 코어들(902A-N)의 전력 상태를 규제하기 위해 필요한 로직 및 컴포넌트이거나 그를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이를 구동하기 위한 것이다.
코어들(902A-N)은 아키텍처 명령어 세트의 측면에서 동종이거나 이종일 수 있는데; 즉, 코어들(902A-N) 중 두 개 이상은 동일한 명령어 세트를 실행할 수 있는 반면, 다른 것들은 해당 명령어 세트의 서브세트 또는 상이한 명령어 세트만 실행할 수 있다.
예시적인 컴퓨터 아키텍처(Exemplary Computer Architectures)
도 10-13은 예시적인 컴퓨터 아키텍처의 블록도이다. 랩탑, 데스크탑, 핸드헬드 PC, 개인용 디지털 보조기, 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processors), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 제어기들, 휴대폰, 휴대용 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스를 위한 본 기술 분야에서 알려진 다른 시스템 디자인 및 구성 또한 적합하다. 보통, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 상당히 다양한 시스템 또는 전자 디바이스가 일반적으로 적합하다.
이제, 도 10을 참조하면, 본 발명의 하나의 실시예에 따른 시스템(1000)의 블록도가 도시된다. 시스템(1000)은, 제어기 허브(1020)에 결합되는, 하나 이상의 프로세서들(1010, 1015)을 포함할 수 있다. 하나의 실시예에서, 제어기 허브(1020)는 GMCH(graphics memory controller hub)(1090) 및 IOH(Input/Output Hub)(1050)(이는 별개의 칩 상에 있을 수 있음)를 포함하고; GMCH(1090)는 메모리(1040)와 코프로세서(1045)가 결합되는 그래픽 제어기 및 메모리를 포함하고; IOH(1050)는 GMCH(1090)에 I/O(input/output) 디바이스(1060)를 결합한다. 대안적으로, 메모리와 그래픽 제어기 중 하나 또는 둘 다는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(1040)와 코프로세서(1045)는 프로세서(1010), 및 IOH(1050)를 가진 단일 칩에 있는 제어기 허브(1020)에 직접 결합된다.
추가 프로세서(1015)의 선택적 유형은 도 10에서 점선으로 표시된다. 각각의 프로세서(1010, 1015)는 본 명세서에서 설명된 프로세싱 코어 중 하나 이상을 포함할 수 있으며, 일부 버전의 프로세서(900)일 수 있다.
메모리(1040)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 제어기 허브(1020)는, FSB(frontside bus)와 같은 멀티-드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트간 인터페이스(point-to-point interface), 또는 유사한 접속(1095)를 통해 프로세서(들)(1010, 1015)와 통신한다.
하나의 실시예에서, 코프로세서(1045)는, 예를 들어, 하이-스루풋 MIC 프로세서, 네트워크나 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 하나의 실시예에서, 제어기 허브(1020)는 통합된 그래픽 가속기를 포함할 수 있다.
구조적, 미세구조적, 열적, 전력 소모 특성 등을 포함하는 가치가 있는 메트릭 스펙트럼의 측면에서 물리적 리소스(1010, 1015) 사이에는 다양한 차이점이 존재할 수 있다.
하나의 실시예에서, 프로세서(1010)는 일반적인 유형의 데이터 처리 연산을 제어하는 명령어들을 실행한다. 명령어에는 코프로세서 명령어가 임베딩될 수 있다. 프로세서(1010)는 부착된 코프로세서(1045)에 의해 실행되어야 하는 유형으로서 이러한 코프로세서 명령어를 인식한다. 따라서, 프로세서(1010)는 코프로세서 버스 또는 다른 상호접속 상의 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서(1045)로 발행한다. 코프로세서(들)(1045)는 수신된 코프로세서 명령어들을 수락 및 실행한다.
이제, 도 11을 참조하면, 본 발명의 일 실시예에 따른 보다 특정한 제1 예시적인 시스템(1100)의 블록도가 도시된다. 도 11에 도시된 바와 같이, 멀티프로세서 시스템(1100)은 포인트간 상호접속 시스템이고, 포인트간 상호접속(1150)을 통해 결합된 제1 프로세서(1170)와 제2 프로세서(1180)를 포함한다. 프로세서(1170 및 1180) 각각은 일부 버전의 프로세서(900)일 수 있다. 본 발명의 하나의 실시예에서, 프로세서들(1170 및 1180)은 각각 프로세서들(1010 및 1015)인 한편, 코프로세서(1138)는 코프로세서(1045)이다. 또 다른 실시예에서, 프로세서들(1170 및 1180)은 각각 프로세서(1010) 및 코프로세서(1045)이다.
프로세서들(1170 및 1180)은 각각 IMC(integrated memory controller) 유닛들(1172 및 1182)을 포함하는 것으로 도시된다. 프로세서(1170)은 또한 그의 버스 제어기 유닛의 일부로서 P-P(point-to-point) 인터페이스(1176 및 1178)를 포함하고; 유사하게는, 제2 프로세서(1180)는 P-P 인터페이스(1186 및 1188)를 포함한다. 프로세서(1170, 1180)는 P-P 인터페이스 회로(1178, 1188)를 이용하여 P-P(point-to-point) 인터페이스(1150)를 통해 정보를 교환할 수 있다. 도 11에 도시된 바와 같이, IMC(1172 및 1182)는, 각각의 프로세서에 로컬로 부착된 메인 메모리의 부분들일 수 있는 각각의 메모리, 즉, 메모리(1132) 및 메모리(1134)에 프로세서들을 결합한다.
프로세서(1170, 1180)는 포인트간 인터페이스 회로(1176, 1194, 1186, 1198)를 사용하여 개별 P-P 인터페이스(1152, 1154)를 통해 칩셋(1190)과 정보를 각각 교환할 수 있다. 칩셋(1190)은 고-성능 인터페이스(1139)를 통해 코프로세서(1138)와 정보를 선택적으로 교환할 수 있다. 하나의 실시예에서, 코프로세서(1138)는, 예를 들어, 하이-스루풋 MIC 프로세서, 네트워크나 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(미도시)는 프로세서 내에 또는 양쪽 프로세서의 외측 중 어느 하나에 포함되고, P-P 상호접속을 통해 프로세서들에 또한 접속될 수 있어, 프로세서가 저전력 모드에 놓이는 경우, 프로세서들 중 어느 하나 또는 양쪽 프로세서의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1190)은 인터페이스(1196)를 통해 제1 버스(1116)에 결합될 수 있다. 하나의 실시예에서, 제1 버스(1116)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스나 또 다른 3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위가 그렇게 제한되는 것은 아니다.
도 11에 도시된 바와 같이, 다양한 I/O 디바이스(1114)는 제2 버스(1120)에 제1 버스(1116)를 결합하는 버스 브리지(1118)와 함께, 제1 버스(1116)에 결합될 수 있다. 하나의 실시예에서, 코프로세서, 하이-스루풋 MIC 프로세서, GPGPU, (예컨대, 그래픽 가속기 또는 DSP(digital signal processing) 유닛과 같은) 가속기, 필드 프로그램가능한 게이트 어레이, 또는 임의의 다른 프로세서와 같은 하나 이상의 추가 프로세서(들)(1115)가 제1 버스(1116)에 결합된다. 하나의 실시예에서, 제2 버스(1120)는 LPC(low pin count) 버스일 수 있다. 다양한 디바이스는, 예를 들어, 키보드 및/또는 마우스(1122), 통신 디바이스(1127), 및 하나의 실시예에서, 명령어/코드 및 데이터(1130)를 포함할 수 있는 디스크 드라이브나 다른 대용량 저장 디바이스와 같은 저장소 유닛(1128)을 포함하는 제2 버스(1120)에 결합될 수 있다. 더욱이, 오디오 I/O(1124)는 제2 버스(1120)에 결합될 수 있다. 다른 구조가 가능하다는 것에 유의한다. 예를 들어, 도 11의 포인트간 아키텍처 대신, 시스템은 멀티-드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제, 도 12를 참조하면, 본 발명의 일 실시예에 따른 보다 특정한 제2 예시적인 시스템(1200)의 블록도가 도시된다. 도 11 및 12에서 같은 요소들에는 같은 참조 번호가 부여되고, 도 12의 다른 양태들을 모호하게 하지 않기 위해 도 11의 소정의 양태는 도 12에서 생략되었다.
도 12는, 프로세서(1170, 1180)가 통합된 메모리 및 I/O CL(control logic)(1172 및 1182)를 각각 포함할 수 있다는 것을 도시한다. 따라서, CL(1172, 1182)은 통합된 메모리 제어기 유닛을 포함하고, I/O 제어 로직을 포함한다. 도 12는, 메모리(1132, 1134)가 CL(1172, 1182)에 결합된다는 것뿐만 아니라 I/O 디바이스(1214) 또한 제어 로직(1172, 1182)에 결합된다는 것을 도시한다. 레거시 I/O 디바이스(1215)는 칩셋(1190)에 결합된다.
이제, 도 13을 참조하면, 본 발명의 일 실시예에 따른 SoC(1300)의 블록도가 도시된다. 도 9에서의 유사한 요소에는 같은 참조 번호가 부여된다. 또한, 점선 박스는 보다 개선된 SoC에 대한 선택적 특징들이다. 도 13에서, 상호접속 유닛(들)(1302)은: 하나 이상의 코어(202A-N)의 세트와 공유 캐시 유닛(들)(906)을 포함하는 애플리케이션 프로세서(1310); 시스템 에이전트 유닛(910); 버스 제어기 유닛(들)(916); 통합된 메모리 제어기 유닛(들)(914); 통합된 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 코프로세서(1320)들의 세트 또는 하나 이상; SRAM(static random access memory) 유닛(1330); DMA(direct memory access) 유닛(1332); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1340)에 결합된다. 하나의 실시예에서, 코프로세서(들)(1320)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이-스루풋 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
본 명세서에서 개시된 메커니즘에 대한 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함하는) 저장소 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램가능한 시스템에서 실행하는 프로그램 코드 또는 컴퓨터 프로그램으로서 구현될 수 있다.
도 11에 도시된 코드(1130)와 같은 프로그램 코드는 본 명세서에 설명된 함수를 수행하기 위해 입력 명령어들에 적용될 수 있고 출력 정보를 생성할 수 있다. 출력 정보는 알려진 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 이러한 애플리케이션을 목적으로, 프로세싱 시스템은, 예를 들어, DSP(digital signal processor), 마이크로제어기, ASIC(application specific integrated circuit), 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 하이 레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 원하는 경우, 프로그램 코드는 또한 어셈블리 또는 기계 언어로 구현될 수 있다. 실제로, 본 명세서에 설명된 메커니즘들은 임의의 특정한 프로그래밍 언어로 범위가 제한되지 않는다. 임의의 경우에, 언어는 컴파일 또는 해석된 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는, 머신에 의해 판독될 때 머신이 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내에 있는 다양한 로직을 나타내는 머신-판독가능한 매체에 저장된 대표적인 명령어들에 의해 구현될 수 있다. "IP 코어"로 알려진 이러한 표현은, 유형인 머신 판독가능한 매체에 저장될 수 있고, 실제로 로직 또는 프로세서를 만드는 제조 머신에 로드하기 위해 다양한 고객 또는 제조 설비에 공급될 수 있다.
그러한 머신-판독가능한 저장 매체는, 제한은 아니지만, 하드 디스크, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memories), CD-RW(compact disk rewritable’s), 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크, ROM(read-only memories), DRAM(dynamic random access memories)과 같은 RAM(random access memories), SRAM(static random access memories), EPROM(erasable programmable read-only memories), 플래시 메모리, EEPROM(electrically erasable programmable read-only memories), PCM(phase change memory), 광자기 카드, 또는 전자 명령어를 저장하기에 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 비일시적이고 유형인 아티클들의 배열을 포함할 수 있다.
따라서, 본 발명의 실시예들은 또한, 본 명세서에서 설명된 구조, 회로, 장치, 프로세서 및/또는 시스템 특징을 정의하는, HDL(Hardware Description Language)과 같은 디자인 데이터를 포함하거나 명령어를 포함하는 비 일시적이고 유형인 머신-판독가능한 매체를 포함한다. 이러한 실시예는 또한 프로그램 제품으로 지칭될 수 있다.
(이진 변환, 코드 모핑 등을 포함하는) 에뮬레이션(Emulation (including binary translation, code morphing, etc.))
일부 경우에, 명령어 변환기는 소스 명령어 세트에서 타겟 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 (예컨대, 정적 이진 변환, 동적 컴파일(compilation)을 포함하는 동적 이진 변환을 사용하는) 번역, 모핑(morph), 에뮬레이션, 또는 코어에 의해 처리될 하나 이상의 다른 명령어로 명령어를 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 프로세서 상에 있거나, 프로세서 밖에 있거나, 일부는 프로세서 상에 있고 일부는 프로세서 밖에 있을 수 있다.
도 14는 본 발명의 실시예들에 따른 소스 명령어 세트에 있는 이진 명령어를 타겟 명령어 세트에 있는 이진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로, 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있다. 도 14는, 본질적으로 적어도 하나의 x86 명령어 세트 코어(1416)를 가진 프로세서에 의해 실행될 수 있는 x86 이진 코드(1406)를 생성하기 위해 x86 컴파일러(1404)를 사용하여 하이 레벨 언어(1402)의 프로그램이 컴파일될 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어(1416)를 가진 프로세서는, 적어도 하나의 x86 명령어 세트 코어를 가진 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 실질적인 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 가진 인텔 프로세서에서 실행하도록 타겟이 된 다른 소프트웨어 또는 애플리케이션들의 오브젝트 코드 버전을 양립할 수 있게 실행하거나 그렇지 않으면 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 가진 인텔 프로세서와 실질적으로 동일한 함수를 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1404)는, 추가적인 링크 처리(additional linkage processing)에 의해 또는 추가적인 링크 처리 없이, 적어도 하나의 x86 명령어 세트 코어(1416)를 가진 프로세서에서 실행될 수 있는 x86 이진 코드(1406)(예컨대, 오브젝트 코드)를 생성하도록 동작가능한 컴파일러를 나타낸다. 유사하게, 도 14는, 본질적으로 적어도 하나의 x86 명령어 세트 코어(1414)가 없는 프로세서(예컨대, 캘리포니아주 서니베일의 MIPS 테크놀로지의 MIPS 명령어 세트를 실행하고 및/또는 캘리포니아주 서니베일의 ARM 홀딩스의 ARM 명령어 세트를 실행하는 코어를 가진 프로세서)에 의해 실행될 수 있는 대안적인 명령어 세트 이진 코드(1410) 생성하기 위해 대안적인 명령어 세트 컴파일러(1408)를 이용하여 하이 레벨 언어(1402)의 프로그램이 컴파일될 수 있다는 것을 도시한다. 명령어 변환기(1412)는 본질적으로 x86 명령어 세트 코어(1414)가 없는 프로세서에 의해 실행될 수 있는 코드로 x86 이진 코드(1406)를 변환하는데 사용된다. 이러한 변환된 코드는, 이것을 할 수 있는 명령어 변환기를 만들기가 어렵기 때문에, 대안적인 명령어 세트 이진 코드(1410)와 동일할 것 같지 않지만; 변환된 코드는 일반적인 연산을 성취할 것이고 대안적인 명령어 세트로부터의 명령어들로 만들어질 것이다. 따라서, 명령어 변환기(1412)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, 프로세서 또는 x 86 명령어 세트 프로세서나 코어를 갖지 않는 다른 전자 디바이스가 x86 이진 코드(1406)를 실행하는 것을 허용하는 소프트웨어, 펌웨어, 하드웨어 또는 그 이들의 조합을 나타낸다.

Claims (20)

  1. VPBZHI(vector packed zero high bits starting with a specified bit position) 명령어를 디코딩하는 디코딩 로직 - 상기 VPBZHI 명령어는 제1 및 제2 소스 오퍼랜드(source operand) 및 데스티네이션 오퍼랜드(destination operand)를 포함함 -; 및
    디코딩된 VPBZHI 명령어를 실행하여,
    상기 제1 소스 오퍼랜드의 각각의 데이터 요소 위치에 대해, 그 시작 위치에서의 데이터 요소에서 시작하는 제2 소스의 값들을 제로화(zeroing out)하기 위한 시작 비트 위치를 결정하게 하고,
    상기 제2 소스 오퍼랜드의 각각의 대응하는 데이터 요소 위치에 대해, 상기 제1 소스 오퍼랜드의 대응하는 데이터 요소 위치의 상기 시작 비트 위치보다 상위이거나 동일한 비트 위치들에 있는 비트들을 제로화하게 하고,
    임의의 제로화 이후의 상기 제2 소스의 데스티네이션 오퍼랜드 값들을 대응하는 데이터 요소 위치들에 저장하게 하는 실행 로직
    을 포함하는 장치.
  2. 제1항에 있어서, 상기 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터(packed data register)들인 장치.
  3. 제2항에 있어서, 상기 패킹 데이터 레지스터들의 크기는 128 비트, 256 비트 또는 512 비트인 장치.
  4. 제1항에 있어서, 상기 명령어는 기록마스크(writemask) 오퍼랜드를 더 포함하는 장치.
  5. 제4항에 있어서, 상기 기록마스크 오퍼랜드의 값들은 데스티네이션 레지스터에 저장되는 장치.
  6. 제4항에 있어서, 상기 기록마스크 오퍼랜드에서 액티브 비트들의 수는 상기 소스 오퍼랜드들에서 데이터 요소들의 수와 동일한 장치.
  7. 제1항에 있어서, 상기 제1 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터들이고, 상기 제2 소스 오퍼랜드는 메모리 위치인 장치.
  8. 컴퓨터 프로세서에서 VPBZHI 명령어를 수행하는 방법 - 상기 VPBZHI 명령어는 제1 및 제2 소스 오퍼랜드 및 데스티네이션 오퍼랜드를 포함함 - 으로서,
    상기 제1 소스 오퍼랜드의 각각의 데이터 요소 위치에 대해, 그 시작 위치에서의 데이터 요소에서 시작하는 제2 소스의 값들을 제로화하기 위한 시작 비트 위치를 결정하는 단계,
    상기 제2 소스 오퍼랜드의 각각의 대응하는 데이터 요소 위치에 대해, 상기 제1 소스 오퍼랜드의 대응하는 데이터 요소 위치의 상기 시작 비트 위치보다 상위이거나 동일한 비트 위치들에 있는 비트들을 제로화하는 단계, 및
    임의의 제로화 이후의 제2 소스의 상기 데스티네이션 오퍼랜드 값들을 대응하는 데이터 요소 위치들에 저장하는 단계
    를 포함하는 방법.
  9. 제8항에 있어서, 상기 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터들인 방법.
  10. 제9항에 있어서, 상기 패킹 데이터 레지스터들의 크기는 128 비트, 256 비트 또는 512 비트인 방법.
  11. 제8항에 있어서, 상기 명령어는 기록마스크 오퍼랜드를 더 포함하는 방법.
  12. 제11항에 있어서, 상기 기록마스크 오퍼랜드의 값들은 데스티네이션 레지스터에 저장되는 방법.
  13. 제11항에 있어서, 상기 기록마스크 오퍼랜드에서 액티브 비트들의 수는 상기 소스 오퍼랜드들에서 데이터 요소들의 수와 동일한 방법.
  14. 제8항에 있어서, 상기 제1 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터들이고, 상기 제2 소스 오퍼랜드는 메모리 위치인 방법.
  15. 프로세서에 의해 실행될 때, 상기 프로세서가 VPBZHI 명령어를 수행하는 방법을 실행하게 하는 코드를 포함하는 유형의 머신-판독가능한 매체 - 상기 VPBZHI 명령어는 제1 및 제2 소스 오퍼랜드 및 데스티네이션 오퍼랜드를 포함함 - 로서,
    상기 방법은,
    상기 상기 제1 소스 오퍼랜드의 각각의 데이터 요소 위치에 대해, 그 시작 위치에서의 데이터 요소에서 시작하는 제2 소스의 값들을 제로화하기 위한 시작 비트 위치를 결정하는 단계,
    상기 제2 소스 오퍼랜드의 각각의 대응하는 데이터 요소 위치에 대해, 상기 제1 소스 오퍼랜드의 대응하는 데이터 요소 위치의 상기 시작 비트 위치보다 상위이거나 동일한 비트 위치들에 있는 비트들을 제로화하는 단계, 및
    임의의 제로화 이후의 상기 제2 소스의 상기 데스티네이션 오퍼랜드 값들을 대응하는 데이터 요소 위치들에 저장하는 단계
    를 포함하는 유형의 머신-판독가능한 매체.
  16. 제15항에 있어서, 상기 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터들인 유형의 머신-판독가능한 매체.
  17. 제16항에 있어서, 상기 패킹 데이터 레지스터들의 크기는 128 비트, 256 비트 또는 512 비트인 유형의 머신-판독가능한 매체.
  18. 제17항에 있어서, 상기 명령어는 기록마스크 오퍼랜드를 더 포함하는 유형의 머신-판독가능한 매체.
  19. 제18항에 있어서, 상기 기록마스크 오퍼랜드의 값들은 데스티네이션 레지스터에 저장되는 유형의 머신-판독가능한 매체.
  20. 제15항에 있어서, 상기 제1 소스 및 데스티네이션 오퍼랜드들은 패킹 데이터 레지스터들이고, 상기 제2 소스 오퍼랜드는 메모리 위치인 유형의 머신-판독가능한 매체.
KR1020140030655A 2013-03-15 2014-03-14 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법 KR101635856B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/840,669 2013-03-15
US13/840,669 US9207942B2 (en) 2013-03-15 2013-03-15 Systems, apparatuses,and methods for zeroing of bits in a data element

Publications (2)

Publication Number Publication Date
KR20140113579A true KR20140113579A (ko) 2014-09-24
KR101635856B1 KR101635856B1 (ko) 2016-07-05

Family

ID=50634779

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140030655A KR101635856B1 (ko) 2013-03-15 2014-03-14 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법

Country Status (7)

Country Link
US (2) US9207942B2 (ko)
JP (1) JP5753603B2 (ko)
KR (1) KR101635856B1 (ko)
CN (1) CN104133660A (ko)
DE (1) DE102014003697A1 (ko)
GB (1) GB2514885B (ko)
IN (1) IN2014CH00953A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023022362A1 (ko) * 2021-08-19 2023-02-23 삼성전자주식회사 전자 장치 및 전자 장치의 메모리 제로화 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05197525A (ja) * 1991-08-30 1993-08-06 Cyrix Corp オペランドを否定するための否定方法及び否定回路
JP2004013185A (ja) * 2002-06-03 2004-01-15 Matsushita Electric Ind Co Ltd プロセッサ
KR20060040611A (ko) * 2003-06-30 2006-05-10 인텔 코오퍼레이션 데이터 셔플링을 위한 방법 및 장치
JP2011134304A (ja) * 2009-12-22 2011-07-07 Intel Corp ビット範囲分離命令、方法、および装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR1587656A (ko) * 1968-08-01 1970-03-27
US4785393A (en) * 1984-07-09 1988-11-15 Advanced Micro Devices, Inc. 32-Bit extended function arithmetic-logic unit on a single chip
JPS61103241A (ja) * 1984-10-27 1986-05-21 Nec Corp 情報処理装置
JPH02299082A (ja) * 1989-05-12 1990-12-11 Fujitsu Ltd 可変長データを処理するプロセッサ
US5201056A (en) * 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
US5207132A (en) 1991-10-16 1993-05-04 Textron Inc. Elliptical lobed drive system
US5446912A (en) 1993-09-30 1995-08-29 Intel Corporation Partial width stalls within register alias table
US6128725A (en) * 1997-01-24 2000-10-03 Texas Instruments Incorporated Microprocessor with an instruction for setting or clearing a bit field
JP2006127460A (ja) * 2004-06-09 2006-05-18 Renesas Technology Corp 半導体装置、半導体信号処理装置、およびクロスバースイッチ
US8417921B2 (en) * 2008-08-15 2013-04-09 Apple Inc. Running-min and running-max instructions for processing vectors using a base value from a key element of an input vector
US20120078597A1 (en) * 2010-09-27 2012-03-29 Infosys Technologies Limited Mobile device with a modeling platform
US20120185670A1 (en) * 2011-01-14 2012-07-19 Toll Bret L Scalar integer instructions capable of execution with three registers
US20120254593A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for jumps using a mask register
ES2943248T3 (es) * 2011-04-01 2023-06-12 Intel Corp Formato de instrucción compatible con vectores y ejecución del mismo
US9411592B2 (en) * 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05197525A (ja) * 1991-08-30 1993-08-06 Cyrix Corp オペランドを否定するための否定方法及び否定回路
JP2004013185A (ja) * 2002-06-03 2004-01-15 Matsushita Electric Ind Co Ltd プロセッサ
KR20060040611A (ko) * 2003-06-30 2006-05-10 인텔 코오퍼레이션 데이터 셔플링을 위한 방법 및 장치
JP2011134304A (ja) * 2009-12-22 2011-07-07 Intel Corp ビット範囲分離命令、方法、および装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023022362A1 (ko) * 2021-08-19 2023-02-23 삼성전자주식회사 전자 장치 및 전자 장치의 메모리 제로화 방법

Also Published As

Publication number Publication date
US20160092226A1 (en) 2016-03-31
JP2014182800A (ja) 2014-09-29
US20140281400A1 (en) 2014-09-18
CN104133660A (zh) 2014-11-05
GB2514885B (en) 2015-10-28
IN2014CH00953A (ko) 2015-05-08
JP5753603B2 (ja) 2015-07-22
KR101635856B1 (ko) 2016-07-05
US9207942B2 (en) 2015-12-08
GB2514885A (en) 2014-12-10
DE102014003697A1 (de) 2014-09-18
GB201404575D0 (en) 2014-04-30

Similar Documents

Publication Publication Date Title
KR101842058B1 (ko) 푸싱형 버퍼 복사 및 저장 기능성을 제공하기 위한 명령어 및 논리
JP5795787B2 (ja) 条件付きループをベクトル化する命令及び論理
JP6466388B2 (ja) 方法及び装置
US10387148B2 (en) Apparatus and method to reverse and permute bits in a mask register
KR102472894B1 (ko) 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
JP5806748B2 (ja) 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法
JP2018500659A (ja) 高速ベクトルによる動的なメモリ競合検出
US20150186136A1 (en) Systems, apparatuses, and methods for expand and compress
US10545757B2 (en) Instruction for determining equality of all packed data elements in a source operand
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
JP5798650B2 (ja) 短整数の乗算の数を減らすためのシステム、装置、および方法
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
KR101635856B1 (ko) 데이터 요소에 있는 비트들의 제로화를 위한 시스템, 장치, 및 방법
US9330020B2 (en) System, apparatus, and method for transparent page level instruction translation
US20200210186A1 (en) Apparatus and method for non-spatial store and scatter instructions
US20150186137A1 (en) Systems, apparatuses, and methods for vector bit test

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
A107 Divisional application of patent
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190530

Year of fee payment: 4