KR20130140143A - 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법 - Google Patents

마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법 Download PDF

Info

Publication number
KR20130140143A
KR20130140143A KR1020137026009A KR20137026009A KR20130140143A KR 20130140143 A KR20130140143 A KR 20130140143A KR 1020137026009 A KR1020137026009 A KR 1020137026009A KR 20137026009 A KR20137026009 A KR 20137026009A KR 20130140143 A KR20130140143 A KR 20130140143A
Authority
KR
South Korea
Prior art keywords
instruction
pointer
field
jknzd
temporary
Prior art date
Application number
KR1020137026009A
Other languages
English (en)
Other versions
KR101618669B1 (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 KR20130140143A publication Critical patent/KR20130140143A/ko
Application granted granted Critical
Publication of KR101618669B1 publication Critical patent/KR101618669B1/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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/30094Condition code generation, e.g. Carry, Zero flag

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Complex Calculations (AREA)

Abstract

컴퓨터 프로세서에서 점프 명령을 행하는 시스템, 장치, 및 방법의 실시예를 설명한다. 일부 실시예에서, 블렌드 명령의 실행은 쓰기마스크의 모든 비트가 제로일 경우 타겟 명령의 어드레스로 조건부 점프하도록 하고, 타겟 명령의 어드레스는 명령의 명령 포인터 및 상대 오프셋을 이용하여 계산된다.

Description

마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법{SYSTEMS, APPARATUSES, AND METHODS FOR JUMPS USING A MASK REGISTER}
본 발명의 분야는 일반적으로 컴퓨터 프로세서 아키텍처에 관한 것이며, 보다 구체적으로는 실행 시 특정 결과를 야기하는 명령에 관한 것이다.
프로그래머는 프로그램이 실행되는 동안 제어 흐름 변경을 원할 경우가 다수 있다. 종래에는 제어 흐름 변경을 규정하는 2가지 주요 유형의 명령, 즉 분기 및 점프가 있었다. 분기는 보통 현재의 프로그램 카운터에 대한 짧은 변경의 지표이다. 점프는 보통 현재의 프로그램 카운터에 직접적으로 관련되지 않는 프로그램 카운터의 변경의 지표이고(예를 들면 절대 메모리 위치에의 점프 또는 동적 또는 정적 테이블을 이용한 점프 등), 종종 현재의 프로그램 카운터로부터 거리 제한이 없다.
본 발명은 예시에 의해 나타내며 첨부 도면의 도시로 한정되는 것은 아니며 동일한 부호는 유사한 요소를 지시하는 것이다.
도 1은 프로세서에서 JKZD 명령을 행하는 방법의 실시예를 나타내는 도면.
도 2는 프로세서에서 JKZD 명령을 행하는 다른 실시예를 나타내는 도면.
도 3은 프로세서에서 JKNZD 명령을 행하는 방법의 실시예를 나타내는 도면.
도 4는 프로세서에서 JKNZD 명령을 행하는 다른 실시예를 나타내는 도면.
도 5는 프로세서에서 JKOD 명령을 행하는 방법의 실시예를 나타내는 도면.
도 6은 프로세서에서 JKOD 명령을 행하는 다른 실시예를 나타내는 도면.
도 7은 프로세서에서 JKNOD 명령을 행하는 방법의 실시예를 나타내는 도면.
도 8은 프로세서에서 JKNOD 명령을 행하는 다른 실시예를 나타내는 도면.
도 9a는 본 발명의 실시예에 따른 범용 벡터 친화 명령 포맷 및 그 클래스 A 명령 템플릿을 나타내는 블록도.
도 9b는 본 발명의 실시예에 따른 범용 벡터 친화 명령 포맷 및 그 클래스 B 명령 템플릿을 나타내는 블록도.
도 10(a) 내지 도 10(c)는 본 발명의 실시예에 따른 예시적인 특정 벡터 친화 명령 포맷을 나타내는 도면.
도 11은 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도.
도 12(a)는 본 발명의 실시예에 따른 온다이 상호연결 네트워크에의 연결 및 레벨 2(L2) 캐시의 로컬 서브세트와 함께 단일 CPU 코어를 나타내는 블록도.
도 12(b)는 본 발명의 실시예에 따른 도 12(a)의 CPU 코어의 부분 분해도.
도 13은 본 발명의 실시예에 따른 예시적인 비순차 아키텍처를 나타내는 블록도.
도 14는 본 발명의 일 실시예에 따른 시스템의 블록도.
도 15는 본 발명의 실시예에 따른 제 2 시스템의 블록도.
도 16은 본 발명의 실시예에 따른 제 3 시스템의 블록도.
도 17은 본 발명의 실시예에 따른 SoC의 블록도.
도 18은 본 발명의 실시예에 따른 통합 메모리 컨트롤러 및 그래픽을 갖는 싱글 코어 프로세서 및 멀티 코어 프로세서의 블록도.
도 19는 본 발명의 실시예에 따른 소스 명령 세트의 바이너리 명령을 타겟 명령 세트의 바이너리 명령으로 변환하는 소프트웨어 명령 컨버터의 이용을 대조하는 블록도.
다음 설명에서, 다수의 구체적인 세부가 제시되어 있다. 그러나, 본 발명의 실시예는 이러한 구체적인 세부 없이 실시될 수 있음은 이해된다. 다른 예에서, 공지 회로, 구조 및 기술은 본 발명의 이해를 불분명하게 하지 않도록 상세히는 나타내지 않았다.
명세서에서 "일 실시예", "실시예", "예시적인 실시예" 등에 대한 언급은, 설명되는 실시예가 특정한 특징, 구조 또는 특성을 포함하지만, 모든 실시예가 반드시 특정한 특징, 구조 또는 특성을 포함하는 것은 아닐 수 있음을 나타낸다. 또한, 이러한 문구는 반드시 동일한 실시예를 말하는 것은 아니다. 또한, 특정한 특징, 구조, 또는 특성을 실시예와 관련하여 설명할 경우, 명시적인 설명 여부와 상관없이, 당업자의 지식 내에서 다른 실시예와 관련하여 이러한 특징, 구조, 또는 특성에 영향을 준다고 생각된다.
점프 명령
복수의 점프 명령의 복수의 실시예 및 이러한 명령을 실행하는 데 이용될 수 있는 시스템, 아키텍처, 명령 포맷 등의 실시예를 아래에 상세히 설명한다. 이 점프 명령은 명령과 함께 포함되는 쓰기마스크(writemask)의 값에 의거하여 프로그램의 제어 흐름 시퀀스를 조건부 변경하는 데 이용될 수 있다. 이들 명령은, 마스크의 모든 비트가 제어 흐름 정보(루프 반복)의 하나의 SIMD-파일형 인스턴스에 관계되는 벡터화 코드의 제어 흐름을 "쓰기마스크"가 변경하는 데 이용한다. 쓰기마스크의 실시예의 세부는 차후에 상세히 설명한다.
이하의 점프 명령의 일반적인 사용은, 다이나믹 컨버전스를 갖는 루프의 조기 탈출; 모든 활성 요소(예를 들면, 모션 추정 다이아몬드 검색 및 유한 차분 알고리즘)이 오프될 때까지 반복; 마스크가 제로일 경우 가짜 메모리 폴트의 억제; 및 게더링/스케터링 명령의 향상된 성능; 및 과소(過疎) 술어적 코드(예를 들면, 컴파일러는 메모리에 압축/확장할 수는 없음)에 대한 작업을 저장하는 것을 포함한다.
쓰기마스크에 의거한 제어 흐름의 대부분의 인스턴스는, 쓰기마스크가 모두 제로일 경우에 점프, 또는 마스크가 모두 제로가 아닐 경우에 점프이다. 예시적인 고급 언어 의사(pseudo) 코드 및 그 의사 어셈블리 대응을 나타내는 표를 아래에 예시한다. VCMPPS 명령은 소스 레지스터(ZMM1 및 ZMM2)의 데이터 요소를 비교하고 이들을, ZMM1의 데이터 요소가 ZMM2의 대응하는 데이터 요소보다 작은지의 여부에 의거하여, 이들을 쓰기마스크(k1)에 "마스크" 비트로서 저장한다. 물론, VCMPPS는 이러한 시나리오에 국한되지 않고 예를 들면 동일, 작거나 동일, 미지시, 동일하지 않음, 작지 않음, 작지 않거나 동일, 또는 지시 등의 다른 조건에 의거하여 평가할 수 있다.
Figure pct00001
이러한 시퀀스에 대한 JNZ 접근법은 비교적 느리고, 쓰기마스크가 생성된 후에 루프에서 2개의 명령, 2개의 점프를 필요로 한다.
KORTEST k1, k1//(OR(k1, k1)==0x0)=>ZF
JNZ target_addr
KORTEST 명령은 2개의 마스크의 "OR" 연산을 행하고, 그 결과가 0일 경우에 "조건 코드" 및 상태 레지스터에 제로 플래그(FLAGS 또는 EFLAGS 등)가 설정된다. JNZ(제로가 아닌 점프) 명령은 그 플래그를 보고 제로 플래그가 설정되어 있었을 경우 타겟어드레스로 점프한다. 따라서 이 소프트웨어 시퀀스에 대한 스루풋 및 (향후의) 레이턴시를 줄이는 기회가 있다.
JKZD - 쓰기마스크가 제로일 경우 니어 ( near ) 점프
논의될 제 1 명령은 쓰기마스크가 제로(JKZD)일 경우 니어 점프이다. 프로세서에 의한 이 명령의 실행은 소스 쓰기마스크의 값을 검사하여 쓰기마스크 비트의 전체가 "0"으로 설정되어 있는지의 여부를 확인하고, "0"으로 설정되어 있을 경우 적어도 부분적으로 데스티네이션 피연산자 및 현재 명령 포인터에 의해 지정된 타겟 명령에의 점프를 행하게 한다. 쓰기마스크 비트 전체가 "0"이 아닐 경우(따라서, 점프 조건이 만족되지 않을 경우), 점프가 행해지지 않고, 실행은 JKZD 명령의 다음 명령으로 계속된다.
JKZD의 타겟 명령의 어드레스는 일반적으로 명령에 포함된 상대 오프셋 피연산자(EIP 레지스터의 명령 포인터의 현재 값에 대한 부호화 오프셋)로 지정된다. 상대 오프셋(rel8, rel16 또는 rel32)은 일반적으로 어셈블리 코드의 레이블로서 지정되지만, 기계 코드 레벨에서 명령 포인터에 추가되는 부호화 8 또는 32비트 이미디어트 값(immediate value)으로서 인코딩될 수 있다. 일반적으로, 명령 코드는 -128 내지 127 오프셋에 가장 효율적이다. 일부 실시예에서, 피연산자 크기(명령 포인터)가 16 비트일 경우, EIP 레지스터의 상위 2 바이트는 타겟 명령 어드레스를 생성하는 데 이용되지 않는다(클리어됨). 일부 실시예에서, 64 비트 피연산자 크기를 갖는 64 비트 모드에서(RIP가 명령 포인터를 저장), 점프 쇼트의 타겟 명령 어드레스는 64 비트로 확장된 RIP = RIP + 8 비트 오프셋 부호로서 정의된다. 이 모드에서 점프 니어의 타겟어드레스는 64 비트로 확장된 RIP = RIP + 32 비트 오프셋으로서 정의된다.
이 명령의 예시적인 포맷은 "JKZD k1, rel8/32"이고, 여기에서 k1은 쓰기마스크 피연산자(전술한 바와 같은 16비트 레지스터 등)이고 rel8/32는 8 비트 또는 32 비트 중 어느 하나의 이미디어트 값이다. 일부 실시예에서, 쓰기마스크는 크기가 다르다(8 비트, 32 비트 등). JKZD는 명령의 연산 코드이다. 일반적으로, 각 피연산자는 명령에서 명시적으로 정의된다. 다른 실시예에서, 이미디어트 값은 16 비트 등의 다른 크기이다.
도 1은 프로세서에서 JKZD 명령을 행하는 방법의 실시예를 나타낸다. 101에서 쓰기마스크 및 상대 오프셋을 포함하는 JKZD 명령이 페치된다.
103에서 JKZD 명령은 디코딩되며 105에서 쓰기마스크 등의 소스 피연산자 값이 찾아진다.
107에서 디코딩된 JKZD 명령은 실행되어, 쓰기마스크의 비트 전체가 제로일 경우 상대 오프셋 및 현재 명령 포인터로부터 생성된 어드레스의 명령에의 조건부 점프를 야기하거나, 쓰기마스크의 적어도 하나의 비트가 1일 경우 JKZD 명령 다음의 명령이 페치, 디코딩 등 되게 한다. 어드레스의 생성은 이 방법의 디코딩, 검색, 또는 실행 중 어느 것에서 일어날 수 있다.
도 2는 프로세서에서 JKZD 명령을 행하는 다른 실시예를 나타낸다. 101-105의 일부가 이 방법의 개시 전에 행해진 것으로 상정하고 진행 세부를 모호하게 하지 않도록 나타내지는 않는다. 201에서 쓰기마스크에 어느 "1" 값이 있는지의 여부의 판정이 이루어진다.
쓰기마스크에 "1"이 있을 경우(따라서, 쓰기마스크가 제로가 아님), 점프가 실행되지 않고 203에서 프로그램의 흐름에서 순차 명령이 실행된다. 쓰기마스크에 "1"이 있지 않았을 경우, 205에서 임시 명령 포인터가 생성된다. 일부 실시예에서, 이 임시 명령 포인터는 현재 명령 포인터 및 부호 확장 상대 오프셋의 합이다. 예를 들면, 32 비트 명령 포인터로, 임시 명령 포인터의 값은 EIP 및 부호 확장 상대 오프셋의 합이다. 이 임시 명령 포인터는 레지스터에 저장될 수 있다.
207에서 피연산자 크기 속성이 16 비트인지의 여부의 판정이 이루어진다. 예를 들면, 명령 포인터가 16, 32, 또는 64 비트 값인가? 피연산자 크기 속성이 16 비트일 경우, 209에서 임시 명령 포인터의 상위 2 바이트가 클리어된다(제로로 설정됨). 클리어는 다양한 방법으로 일어날 수 있지만, 일부 실시예에서 임시 명령 포인터는 최상위 2 바이트가 "0"이고 최하위 2 바이트가 "1"인 이미디어트(예를 들면, 이미디어트 Ox0000FFFF)와 로직 AND된다.
피연산자의 크기가 16 비트가 아닐 경우, 211에서 임시 명령 포인터가 코드 세그먼트의 한계 내에 있는지의 여부의 판정이 이루어진다.
한계 내에 있지 않을 경우, 213에서 폴트가 발생되고 점프가 행해지지 않는다. 이 판정은 2개의 최상위 바이트가 클리어되어 임시 명령 포인터에 대해 이루어질 수도 있다. 명령이 파아(far) 점프(다른 코드 세그먼트에의 점프)를 지원하지 않는 일부의 실시예에서, 조건부 점프 대상이 다른 세그먼트에 있을 경우, JKZD 명령에 대해 시험되는 조건과는 반대 조건이 이용되어, 다른 세그먼트에의 무조건 파아 점프(JMP 명령)로 대상이 액세스된다. 점프 제한을 갖는 실시예에서, 프로그램이 코드의 파아 영역에의 점프를 원했을 경우, 쓰기마스크-온-점프의 의미는 이행 코드가 특정 코드 내로 "파아" 점프를 하는 것이 부정된다. 예를 들면, 이 조건은 위반이다 :
JKZD FARLABEL;
이 파아 점프를 달성하기 위해, 다음 두 명령이 대신 사용될 것이다:
JKNZD BEYOND;
JMP FARLABEL;
BEYOND:
임시 명령 포인터가 코드 세그먼트 제한 내에 있을 경우에, 213에서 명령 포인터는 임시 명령 포인터로 설정된다. 예를 들면, EIP 값이 임시 명령 포인터로 설정된다. 215에서 점프가 이루어진다.
마지막으로, 일부 실시예에서, 이 방법의 상기 양태 중 하나 이상은 행해지지 않거나 다른 순서로 행해진다. 예를 들면, 프로세서가 16 비트 피연산자(명령 포인터)를 갖지 않을 경우, 그 결정은 일어나지 않는다.
표 2는 표 1과 동일한 의사 코드를 나타내지만, JKNZD 명령을 이용하며 KORTESTD에 대한 필요성을 없앤다. 유사한 장점은 다음의 명령에서 일어난다.
Figure pct00002
JKNZD - 쓰기마스크가 제로가 아닐 경우 니어 점프
논의되는 제 2 명령은 쓰기마스크가 제로가 아닐 경우의 니어 점프이다(JKNZD). 프로세서에 의한 이 명령의 실행은 소스 쓰기마스크의 값을 검사하여 쓰기마스크 비트의 모두가 "0"으로 설정되는지의 여부를 확인하고, 그렇지 않을 경우 프로세서는 적어도 부분적으로 데스티네이션 피연산자 및 현재의 명령 포인터에 의해 지정된 타겟 명령에의 점프를 행하게 한다. 모든 쓰기마스크 비트가 "0"일 경우(따라서, 점프 조건이 만족되지 않을 경우), 점프를 하지 않고, 실행은 JKNZD 명령의 다음 명령으로 계속된다.
JKNZD의 타겟 명령의 어드레스는 일반적으로 명령에 포함된 상대 오프셋 피연산자(EIP 레지스터의 명령 포인터의 현재 값에 대한 부호화 오프셋)로 지정된다. 상대 오프셋(rel8, rel16, 또는 rel32)은 일반적으로 어셈블리 코드의 레이블로서 지정되지만, 기계 코드 레벨에서 명령 포인터에 추가되는 부호화 8 또는 32 비트 이미디어트 값으로서 인코딩될 수 있다. 일반적으로, 명령 코딩은 -128 내지 127의 오프셋에 가장 효율적이다. 일부 실시예에서, 피연산자 크기(명령 포인터)가 16 비트일 경우, EIP 레지스터의 상위 2 바이트는 타겟 명령 어드레스 생성에 이용되지 않는다(클리어됨). 일부 실시예에서, 64 비트 피연산자 크기를 갖는 64 비트 모드에서(RIP가 명령 포인터를 저장), 점프 쇼트의 타겟 명령 어드레스는 64 비트로 확장된 RIP = RIP + 8 비트 오프셋 부호로서 정의된다. 이 모드에서 점프 니어의 타겟어드레스는 64 비트로 확장된 RIP = RIP + 32 비트 오프셋으로서 정의된다.
이 명령의 예시적인 포맷은 "JKNZD k1,rel8/32"이고, 여기에서 k1은 쓰기마스크 피연산자(상술한 바와 같은 16 비트 레지스터 등)이고 rel8/32는 8 비트 또는 32 비트의 이미디어트 값이다. 일부 실시예에서, 쓰기마스크는 서로 다른 크기(8 비트, 32 비트 등)이다. JKBZD는 명령의 연산 코드이다. 일반적으로, 각 피연산자는 명시적으로 명령에 정의된다. 다른 실시예서, 이미디어트 값은 16 비트 등의 서로 다른 크기이다.
도 3은 프로세서에서 JKNZD 명령을 행하는 방법의 실시예를 나타낸다. 301에서 쓰기마스크 및 상대 오프셋을 포함하는 JKNZD 명령이 페치된다.
303에서 JKNZD 명령이 디코딩되고 305에서 쓰기마스크 등의 소스 피연산자 값이 찾아진다.
307에서 디코딩된 JKNZD 명령이 실행되며, 이는, 쓰기마스크의 비트 전체가 제로일 경우 상대 오프셋 및 현재 명령 포인터로부터 생성된 어드레스의 명령에의 조건부 점프를 야기하거나, 쓰기마스크의 적어도 하나의 비트가 1일 경우 JKNZD 명령의 다음 명령이 페치, 디코딩 등 되게 한다. 어드레스의 생성은 이 방법의 디코딩, 검색, 또는 실행 단계 중 어느 것에서 발생될 수 있다.
도 4는 프로세서에서 JKNZD 명령을 행하는 다른 실시예를 나타낸다. 401 내지 405의 일부는 이 방법의 개시에 앞서 행해지는 것으로 상정하고, 진행 세부를 모호하지 않게 하기 위해 도시 생략한다. 401에서 쓰기마스크의 어느 "1" 값이 있는지의 여부의 판정이 이루어진다.
쓰기마스크에 "0"들만 있을 경우(따라서 쓰기마스크가 제로일 경우), 403에서 점프가 실행되지 않고 프로그램의 흐름의 순차 명령이 실행된다. 쓰기마스크에 "1"이 있을 경우, 405에서 임시 명령 포인터가 생성된다. 일부 실시예에서, 이 임시 명령 포인터는 현재 명령 포인터 및 부호 확장 상대 오프셋의 합이다. 예를 들면, 32 비트 명령 포인터로, 임시 명령 포인터의 값은 EIP 및 부호 확장 상대 오프셋의 합이다. 이 임시 명령 포인터는 레지스터에 저장될 수 있다.
407에서 피연산자 크기 속성이 16 비트인지의 여부의 판정이 이루어진다. 예를 들면, 명령 포인터가 16, 32, 또는 64 비트 값이다. 409에서 피연산자 크기 속성이 16 비트일 경우, 임시 명령 포인터의 상위 2 바이트는 클리어된다(제로로 설정됨). 클리어가 몇 가지 다른 방법으로 일어날 수 있지만, 일부 실시예에서 임시 명령 포인터는 최상위 2 바이트가 "0"으로 되고 최하위 2 바이트가 "1"로 되는 이미디어트(예를 들면, 이미디어트는 0x0000FFFF임)와 로직 AND된다.
피연산자 크기가 16 비트가 아닐 경우, 411에서 임시 명령 포인터가 코드 세그먼트 제한 내에 있는지의 여부의 판정이 이루어진다. 한계 내에 있지 않을 경우, 413에서 폴트가 발생되고 점프가 행해지지 않는다. 이 판정은 또한 2개의 최상위 바이트가 클리어되어 임시 명령 포인터에 대해서 이루어질 수 있다. 명령이 파아 점프(다른 코드 세그먼트에의 점프)를 지원하지 않는 일부의 실시예에서, 조건부 점프의 대상이 다른 세그먼트에 있을 경우, JKNZD 명령에 대해 시험되는 조건과는 반대 조건이 이용되어 다른 세그먼트에의 무조건 파아 점프(JMP 명령)로 대상이 액세스된다. 예를 들면, 이 조건은 위반이다:
JKNZD FARLABEL;
이러한 파아 점프를 달성하기 위해, 다음의 2개의 명령이 대신 이용된다.
JKZD BEYOND;
JMP FARLABEL;
BEYOND;
임시 명령 포인터가 코드 세그먼트 제한 내에 있을 경우, 413에서 명령 포인터가 임시 명령 포인터로 설정된다. 예를 들면, EIP 값은 임시 명령 포인터로 설정된다. 415에서 점프가 이루어진다.
마지막으로, 일부 실시예에서, 이 방법의 상기 양태 중 하나 이상은 행해지지 않거나 다른 순서로 행해진다. 예를 들어, 프로세서가 16 비트 피연산자(명령 포인터)를 갖지 않을 경우, 그 결정은 일어나지 않는다.
JKOD - 쓰기마스크가 모두 1일 경우 니어 점프
논의되는 제 3 명령은 쓰기마스크가 모두 1일 경우 니어 점프이다(JKOD). 프로세서에 의한 이 명령의 실행은, 소스 쓰기마스크의 값을 검사하여 쓰기마스크 비트의 모두가 "1"로 설정되어 있는지의 여부를 알도록 확인하고, 모두가 "1"로 설정되어 있을 경우, 프로세서가 적어도 부분적으로 데스티네이션 피연산자 및 현재 명령 포인터에 의해 지정된 타겟 명령에의 점프를 행하게 한다. 쓰기마스크 비트의 모두가 "1"이 아닐 경우(따라서, 점프 조건이 만족되지 않을 경우), 점프는 행해지지 않고, 실행은 JKOD 명령의 다음 명령으로 계속된다.
JKOD의 타겟 명령의 어드레스는 일반적으로 명령에 포함된 상대 오프셋 피연산자(EIP 레지스터의 명령 포인터의 현재 값에 대한 부호화 오프셋)로 지정된다. 상대 오프셋(rel8, rel16, 또는 rel32)은 일반적으로 어셈블리 코드의 레이블로서 지정되지만, 기계 코드 레벨에서 명령 포인터에 추가되는 부호화 8 또는 32 비트 이미디어트 값으로서 인코딩될 수 있다. 일반적으로, 명령 코딩은 -128 내지 127의 오프셋에 가장 효율적이다. 일부 실시예에서, 피연산자 크기(명령 포인터)가 16 비트일 경우, EIP 레지스터의 최상위 2 바이트는 타겟 명령 어드레스 생성에 이용되지 않는다(클리어됨). 일부 실시예에서, 64 비트 피연산자 크기를 갖는 64 비트 모드에서(RIP가 명령 포인터를 저장), 점프 쇼트의 타겟 명령 어드레스는 64 비트로 확장된 RIP = RIP + 8 비트 오프셋 부호로서 정의된다. 이 모드에서 점프 니어의 타겟어드레스는 64 비트로 확장된 RIP = RIP + 32 비트 오프셋으로서 정의된다.
이 명령의 예시적인 포맷은 "JKOD k1,rel8/32"이고, 여기에서 k1은 쓰기마스크 피연산자(상술한 바와 같은 16 비트 레지스터 등)이고 rel8/32는 8 비트 또는 32 비트의 이미디어트 값이다. 일부 실시예에서, 쓰기마스크는 서로 다른 크기(8 비트, 32 비트 등)이다. JKOD는 명령의 연산 코드이다. 일반적으로, 각 피연산자는 명시적으로 명령에 정의된다. 다른 실시예서, 이미디어트 값은 16 비트 등의 서로 다른 크기이다.
도 5는 프로세서에 JKOD 명령을 행하는 방법의 실시예를 나타낸다. 501에서 쓰기마스크 및 상대 오프셋을 포함하는 JKOD 명령이 페치된다.
503에서 JKOD 명령이 디코딩되고 505에서 쓰기마스크 등의 소스 피연산자 값이 찾아진다.
507에서 디코딩된 JKOD 명령이 실행되며, 이는, 쓰기마스크의 비트 전체가 1일 경우 상대 오프셋 및 현재 명령 포인터로부터 생성된 어드레스의 명령에의 조건부 점프를 야기하거나, 쓰기마스크의 적어도 하나의 비트가 제로일 경우 JKOD 명령의 다음 명령이 페치, 디코딩 등 되게 한다. 어드레스의 생성은 이 방법의 디코딩, 검색, 또는 실행 단계 중 어느 것에서 일어날 수 있다.
도 6은 프로세서에서 JKOD 명령을 행하는 다른 실시예를 나타낸다. 601 내지 605의 일부는 이 방법의 개시에 앞서 행해지는 것으로 상정하고, 진행 세부를 모호하지 않게 하기 위해 도시 생략한다. 601에서 쓰기마스크의 어느 "0" 값이 있는지의 여부의 판정이 이루어진다.
쓰기마스크에 "0"이 있을 경우(따라서 쓰기마스크가 모두 1이 아닐 경우), 603에서 점프가 실행되지 않고 프로그램의 흐름의 순차 명령이 실행된다. 쓰기마스크에 "0"이 없었을 경우, 605에서 임시 명령 포인터가 생성된다. 일부 실시예에서, 이 임시 명령 포인터는 현재 명령 포인터 및 부호 확장 상대 오프셋의 합이다. 예를 들면, 32 비트 명령 포인터로, 임시 명령 포인터의 값은 EIP 및 부호 확장 상대 오프셋의 합이다. 이 임시 명령 포인터는 레지스터에 저장될 수 있다.
607에서 피연산자 크기 속성이 16 비트인지의 여부의 판정이 이루어진다. 예를 들면, 명령 포인터가 16, 32, 또는 64 비트 값이다. 피연산자 크기 속성이 16 비트일 경우, 임시 명령 포인터의 상위 2 바이트는 609에서 클리어된다(제로로 설정됨). 클리어가 다양한 방법으로 일어날 수 있지만, 일부 실시예에서 임시 명령 포인터는 최상위 2 바이트가 "0"으로 되고 최하위 2 바이트가 "1"로 되는 이미디어트(예를 들면, 이미디어트는 0x0000FFFF임)와 로직 AND된다.
피연산자 크기가 16 비트가 아닐 경우, 611에서 임시 명령 포인터가 코드 세그먼트 제한 내에 있는지의 여부의 판정이 이루어진다. 제한 내에 있지 않을 경우, 613에서 폴트가 발생되고 점프가 행해지지 않는다. 이 판정은 또한 2개의 최상위 바이트가 클리어되어 임시 명령 포인터에 대해서 이루어질 수 있다.
임시 명령 포인터가 코드 세그먼트 제한 내에 있을 경우에, 613에서 명령 포인터가 임시 명령 포인터로 설정된다. 예를 들면, EIP 값이 임시 명령 포인터로 설정된다. 615에서 점프가 이루어진다.
마지막으로, 일부 실시예에서, 이 방법의 상기 양태 중 하나 이상은 행해지지 않거나 다른 순서로 행해진다. 예를 들면, 프로세서가 16 비트 피연산자(명령 포인터)를 갖지 않을 경우, 그 결정은 일어나지 않는다.
JKNOD - 쓰기마스크가 모두 1이 아닐 경우 니어 점프
논의될 마지막 명령은 쓰기마스크가 모두 1이 아닐 경우 니어 점프이다(JKNOD). 프로세서에 의한 이 명령의 실행은, 소스 쓰기마스크의 값을 검사하여 적어도 하나의 쓰기마스크 비트가 "0"으로 설정되어 있는지의 여부를 확인하고, 적어도 하나의 쓰기마스크 비트가 "0"으로 설정되어 있을 경우, 프로세서가 적어도 부분적으로 데스티네이션 피연산자 및 현재 명령 포인터에 의해 지정된 타겟 명령에의 점프를 행하게 한다. 쓰기마스크 비트의 모두가 "0"이 아닐 경우(따라서, 점프 조건이 만족되지 않을 경우), 점프는 행해지지 않고, 실행은 JKNOD 명령의 다음 명령으로 계속된다.
JKNOD의 타겟 명령의 어드레스는 일반적으로 명령과 함께 포함된 상대 오프셋 피연산자(EIP 레지스터의 명령 포인터의 현재 값에 대한 부호화 오프셋)로 지정된다. 상대 오프셋(rel8, rel16, 또는 rel32)은 일반적으로 어셈블리 코드의 레이블로서 지정되지만, 기계 코드 레벨에서 명령 포인터에 추가되는 부호화 8 또는 32 비트 이미디어트 값으로서 인코딩될 수 있다. 일반적으로, 명령 코딩은 -128 내지 127의 오프셋에 가장 효율적이다. 일부 실시예에서, 피연산자 크기(명령 포인터)가 16 비트일 경우, EIP 레지스터의 상위 2 바이트는 목표 명령 어드레스 생성에 이용되지 않는다(클리어됨). 일부 실시예에서, 64 비트 피연산자 크기를 갖는 64 비트 모드에서(RIP가 명령 포인터를 저장), 점프 쇼트의 타겟 명령 어드레스는 64 비트로 확장된 RIP = RIP + 8 비트 오프셋 부호로서 정의된다. 이 모드에서 점프 니어의 타겟어드레스는 64 비트로 확장된 RIP = RIP + 32 비트 오프셋으로서 정의된다.
이 명령의 예시적인 포맷은 "JKNOD k1, rel8/32"이고, 여기에서 k1은 쓰기마스크 피연산자(상술한 바와 같은 16 비트 레지스터 등)이고 rel8/32는 8 비트 또는 32 비트의 이미디어트 값이다. 일부 실시예에서, 쓰기마스크는 서로 다른 크기(8 비트, 32 비트 등)이다. JKNOD는 명령의 연산 코드이다. 일반적으로, 각 피연산자는 명시적으로 명령에 정의된다. 다른 실시예서, 이미디어트 값은 16 비트 등의 서로 다른 크기이다.
도 7은 프로세서에서 JKNOD 명령을 행하는 방법의 실시예를 나타낸다. 701에서 쓰기마스크 및 상대 오프셋을 포함하는 JKNOD 명령이 페치된다.
703에서 JKNOD 명령이 디코딩되고 705에서 쓰기마스크 등의 소스 피연산자 값이 찾아진다.
703에서 디코딩된 JKNOD 명령이 실행되며, 이는, 쓰기마스크의 비트의 적어도 하나가 0가 아닐 경우 상대 오프셋 및 현재 명령 포인터로부터 생성된 어드레스의 명령에의 조건부 점프를 야기하거나, 쓰기마스크의 모든 비트가 1일 경우 JKNZD 명령의 다음 명령이 페치, 디코딩 등 되게 한다. 어드레스의 생성은 이 방법의 디코딩, 검색, 또는 실행 단계 중 어느 것에서 일어날 수 있다.
도 8은 프로세서에서 JKNOD 명령을 행하는 다른 실시예를 나타낸다. 701 내지 705의 일부는 이 방법의 개시에 앞서 행해지는 것으로 상정하고, 진행 세부를 모호하지 않게 하기 위해 도시 생략한다. 801에서 쓰기마스크의 어느 "0" 값이 있는지의 여부의 판정이 이루어진다.
쓰기마스크에 "0"이 있지 않을 경우(따라서 쓰기마스크가 모두 1일 경우), 803에서 점프가 실행되지 않고 프로그램의 흐름의 순차 명령이 실행된다. 쓰기마스크에 "0"이 있을 경우, 805에서 임시 명령 포인터가 생성된다. 일부 실시예에서, 이 임시 명령 포인터는 현재 명령 포인터 및 부호 확장 상대 오프셋의 합이다. 예를 들면, 32 비트 명령 포인터로, 임시 명령 포인터의 값은 EIP 및 부호 확장 상대 오프셋의 합이다. 이 임시 명령 포인터는 레지스터에 저장될 수 있다.
807에서 피연산자 크기 속성이 16 비트인지의 여부의 판정이 이루어진다. 예를 들면, 명령 포인터가 16, 32, 또는 64 비트 값이다. 피연산자 크기 속성이 16 비트일 경우, 809에서 임시 명령 포인터의 상위 2 바이트는 클리어된다(제로로 설정됨). 클리어가 다양한 방법으로 일어날 수 있지만, 일부 실시예에서 임시 명령 포인터는 최상위 2 바이트가 "0"으로 되고 최하위 2 바이트가 "1"로 되는 이미디어트(예를 들면, 이미디어트는 0x0000FFFF임)와 로직 AND된다.
피연산자 크기가 16 비트가 아닐 경우, 811에서 임시 명령 포인터가 코드 세그먼트 제한 내에 있는지의 여부의 판정이 이루어진다. 제한 내에 있지 않을 경우, 813에서 폴트가 발생되고 점프가 행해지지 않는다. 이 판정은 또한 2개의 최상위 바이트가 클리어되어 임시 명령 포인터에 대해서 이루어질 수 있다.
임시 명령 포인터가 코드 세그먼트 제한 내에 있을 경우에, 813에서 명령 포인터가 임시 명령 포인터로 설정된다. 예를 들면, EIP 값이 임시 명령 포인터로 설정된다. 815에서 점프가 이루어진다.
마지막으로, 일부 실시예에서, 본 방법의 상기 양태 중 하나 이상은 행해지지 않거나 다른 순서로 행해진다. 예를 들면, 프로세서가 16 비트 피연산자(명령 포인터)를 갖지 않을 경우, 그 결정은 일어나지 않는다.
상세히 설명한 명령(들)의 실시예는 상세히 후술되는 "범용 벡터 친화 명령 포맷"으로 구현될 수 있다. 다른 실시예에서, 이러한 포맷이 이용되지 않고 다른 명령 포맷이 이용되지만, 쓰기마스크 레지스터, 다양한 데이터 변환(스위즐, 브로드캐스트 등), 어드레싱 등의 이하의 설명은 일반적으로 상기 명령(들)의 실시예의 설명에 적용 가능하다. 또한, 예시적인 시스템, 아키텍처 및 파이프라인은 아래에 설명된다. 상기 명령(들)의 실시예는 이러한 시스템, 아키텍처, 및 파이프라인에 실행될 수 있지만, 상세하게 설명되는 것에 한정되는 것은 아니다.
벡터 친화 명령 포맷은 벡터 명령에 적합한 명령 포맷(예를 들면, 벡터 연산에 특정인 특정 필드)이다. 벡터 및 스칼라 연산 모두가 벡터 친화 명령 포맷을 통해 지원되는 실시예가 설명되고 있지만, 대안적인 실시예는 벡터 친화 명령 포맷을 통해 벡터 연산만을 이용한다.
예시적인 범용 벡터 친화 명령 포맷 - 도 9a 및 도 9b
도 9a 및 도 9b는 본 발명의 실시예에 따른 범용 벡터 친화 명령 포맷 및 그 명령 템플릿을 나타내는 블록도이다. 도 9a는 본 발명의 실시예에 따른 범용 벡터 친화 명령 포맷 및 그 클래스 A 명령 템플릿을 나타내는 블록도인 반면, 도 9b는 실시예에 따른 범용 벡터 친화 명령 포맷 및 그 클래스 B 명령 템플릿을 나타내는 블록도이다. 구체적으로, 범용 벡터 친화 명령 포맷(900)은, 노(no)메모리 액세스(905) 명령 템플릿 및 메모리 액세스(920) 명령 탬플릿을 포함하는 클래스 A 및 클래스 B 명령 템플릿으로 정의된다. 벡터 친화 명령 포맷의 문맥에서 용어 범용(generic)은 어떤 특정 명령 세트에 묶여 있지 않은 명령 포맷을 말한다. 벡터 친화 명령 포맷의 명령이 레지스터(노메모리 액세스(905) 명령 템플릿) 또는 레지스터/메모리(메모리 액세스(920) 명령 템플릿)에서 제공된 벡터에서 백터 친화 명령 포맷의 명령이 연산되는 실시예를 설명하지만, 본 발명의 다른 실시예는 이들 중 하나만 지원할 수 있다. 또한, 벡터 명령 포맷으로 명령을 로드 및 저장하고 있는 본 발명의 실시예를 설명하고 있지만, 대안적인 실시예는 대신 또는 추가적으로 레지스터 내 및 밖으로(예를 들면, 메모리로부터 레지스터 내로, 레지스터로부터 메모리 내로, 레지스터 간에) 벡터를 이동시키는 상이한 명령 포맷으로 명령을 갖는다. 또한, 명령 템플릿의 2개의 클래스를 지원하는 본 발명의 실시예를 설명하는 반면, 대안적인 실시예는 하나만 또는 2개 이상을 지원할 수 있다.
32 비트(4 바이트) 또는 64 비트(8 바이트) 데이터 요소 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기)(따라서, 64 바이트 벡터는 16 더블워드 크기의 요소 또는 대안적으로 8 쿼드워드 크기의 요소로 구성됨); 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 64 바이트 벡터 피연산자 길이(또는 크기); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 32 바이트 벡터 피연산자 길이(또는 크기); 및 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 요소 폭(또는 크기)을 갖는 16 바이트 벡터 피연산자 길이(또는 크기)를 벡터 친화 명령 포맷이 지원하는 본 발명의 실시예를 설명하는 반면, 대안적인 실시예는 다소(多少), 또는 상이한 데이터 요소 폭(예를 들면, 128 비트(16 바이트) 데이터 요소 폭)을 갖는 다소 및/또는 상이한 벡터 피연산자 크기(예를 들면, 956 바이트 벡터 피연산자)를 지원할 수 있다.
도 9a의 클래스 A 명령 템플릿은, 1) 노메모리 액세스, 전체 라운드 제어 유형 연산(910) 명령 템플릿 및 노메모리 액세스, 데이터 변형 유형 연산(915) 명령 템플릿이 나타나 있는 노메모리 액세스(905) 명령 템플릿 내, 2) 메모리 액세스, 템퍼럴(925) 명령 템플릿 및 메모리 액세스, 비템퍼럴(930) 명령 템플릿이 나타나 있는 메모리 액세스(920) 명령 템플릿 내에 포함된다. 도 9b의 클래스 B 명령 템플릿은, 1) 노메모리 액세스, 쓰기마스크 제어, 부분 라운드 제어 유형 연산(912) 명령 템플릿 및 노메모리 액세스, 쓰기마스크 제어, vsize 유형 연산(917) 명령 템플릿이 나타나 있는 노메모리 액세스(905) 명령 템플릿 내, 및 2) 메모리 액세스, 쓰기마스크 제어(927) 명령 템플릿이 나타나 있는 메모리 액세스(920) 명령 탬플릿 내에 포함된다.
포맷
범용 벡터 친화 명령 포맷(900)은 도 9a 및 도 9b에 나타낸 순서로 이하에 열거되는 다음 필드를 포함한다.
포맷 필드(940) - 이 필드의 특정 값(명령 포맷 식별자 값)은 벡터 친화 명령 포맷을 고유하게 식별하고, 따라서 명령 스트림에 벡터 친화 명령 포맷의 명령 발생을 식별한다. 따라서, 포맷 필드(940)의 내용은 제 1 명령의 명령 발생을 다른 명령 포맷의 명령 발생과 구별함으로써, 벡터 친화 명령 포맷의 다른 명령 포맷을 갖는 명령 세트 내에의 도입을 가능하게 할 수 있다. 이와 같이, 이 필드는 범용 벡터 친화 명령 포맷만을 갖는 명령 세트를 필요로 하지 않는다는 의미에서 옵션적이다.
기본 연산 필드(942) - 그 내용은 다른 기본 연산을 구별한다. 본원에서 후술하는 바와 같이, 기본 연산 필드(942)는 연산 코드 필드를 포함하거나, 및/또는 그 일부일 수 있다.
레지스터 인덱스 필드(944) - 그 내용은, 직접 또는 어드레스 생성을 통해 소스 및 데스티네이션 피연산자의 위치를 특정하는 것이고, 레지스터 또는 메모리에 있게 된다. 이들은 PxQ(예를 들면 32x1112) 레지스터 파일로부터 N개의 레지스터를 선택하는 충분한 수의 비트를 포함한다. 일 실시예에서 N은 3개의 소스 및 1개의 데스티네이션 레지스터까지 일 수 있는 반면, 대안적인 실시예는 다소의 소스 및 데스티네이션 레지스터를 지원할 수 있다(예를 들면, 이들 소스의 하나가 또한 데스티네이션으로서 역할하는 2개의 소스까지 지원할 수 있음, 이들 소스의 하나가 데스티네이션으로서 또한 역할하는 3개의 소스까지 지원할 수 있음, 2개의 소스 및 1개의 데스티네이션까지 지원할 수 있음). 일 실시예에서, P = 32일 경우, 대안적인 실시예는 다소의 레지스터(예를 들면, 16)를 지원할 수 있다. 일 실시예에서, Q = 1112 비트인 반면, 대안적인 실시예는 다소의 비트(예를 들면, 128, 1024)를 지원할 수 있다.
한정자 필드(946) - 그 내용은 행하지 않는 것으로부터 메모리 액세스를 지정하는 범용 벡터 명령 포맷의 명령의 발생, 즉 노메모리 액세스(905) 명령 템플릿과 메모리 액세스(920) 명령 템플릿 사이에서 명령의 발생을 구별한다. 메모리 액세스 작업은 메모리 계층 구조(일부 경우에 레지스터의 값을 이용하여 소스 및/또는 데스티네이션 어드레스를 지정함)를 읽기 및/또는 쓰기하는 반면, 비메모리 액세스 작업은 이를 행하지 않는다(예를 들면, 소스 및 데스티네이션이 레지스터임). 일 실시예에서, 이 필드는 또한 메모리 어드레스 연산을 행하기 위해 3가지 서로 다른 방법 사이에서 선택되는 반면, 대안적인 실시예는 메모리 어드레스 연산을 행하는 데 다소의, 또는 서로 다른 방법을 지원할 수 있다.
증강 연산 필드(950) - 기본적 작업 이외에 다양한 서로 다른 작업 중 어느 것이 행해지는 것을 구별한다. 이 필드는 컨텍스트 특정이다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(968), 알파 필드(952), 및 베타 필드(954)로 나눠진다. 증강 연산 필드는 연산의 공통 그룹이 2, 3, 또는 4 명령이 아닌 단일 명령으로 행해지게 할 수 있다. 다음은 필요한 명령의 수를 줄이기 위해 증강 필드(950)를 이용하는 명령의 몇 가지 예(본원에서 차후 더 상세히 설명되는 목록)이다.
Figure pct00003
여기에서 [rax]는 어드레스 생성에 이용되는 베이스 포인터이고, {}는 데이터 조작 필드에 의해 지정된 변환 연산을 지시한다(본원에서 차후 더 상세히 설명함).
스케일 필드(960) - 그 내용은 메모리 어드레스 생성을 위해(예를 들면, 2scale * 인덱스 + 베이스를 이용한 어드레스 생성을 위해) 인덱스 필드의 내용 스케일링을 가능하게 한다.
변위 필드(962A) - 그 내용은 메모리 어드레스 생성의 일부로서 이용된다(예를 들면, 2scale * 인덱스 + 베이스 + 변위를 이용하는 어드레스 생성을 위해).
변위 인자 필드(962B)(변위 필드(962A)의 변위 인자 필드(962B) 위에의 병치는 하나를 지시하거나 다른 것이 이용됨) - 그 내용은 어드레스 생성의 부분으로서 이용되고, 그것은 메모리 액세스의 크기(N)에 의해 스케일링되는 변위 인자를 지정하고, 여기에서 N은 메모리 액세스에서의 바이트의 수이다(예를 들면, 2scale * 인덱스 + 베이스 + 스케일링된 변위를 이용하는 어드레스 생성을 위해). 중복 하위 비트는 무시되고, 따라서 변위 인자 필드의 내용은 유효 어드레스의 계산에 이용되는 최종 변위를 생성하기 위해 메모리 피연산자 전체 크기(N)로 곱해진다. N의 값은 전체 연산 코드 필드(974)(본원에서 후술함) 및 데이터 조작 필드(954C)(본원에서 후술함)에 의거하여 런타임으로 프로세서 하드웨어에 의해 결정된다. 변위 필드(962A) 및 변위 인자 필드(962B)가 노메모리 액세스(905) 명령 템플릿에 이용되지 않거나, 및/또는 다른 실시예가 하나만 구현하거나 어느 것도 구현하지 않을 수 있다는 의미에서 옵션적이다.
데이터 요소 폭 필드(964) - 그 내용은 다수의 데이터 요소 폭 중 어느 것이 이용될 것을 구별한다(일부 실시예에서 모든 명령에 대해, 다른 실시예에서 명령 중 일부에 대해서만). 이 필드는, 하나의 데이터 요소의 폭만이 지원되거나 및/또는 데이터 요소 폭이 연산 코드의 일부 양태를 이용하여 지원된다면 필요하지 않다는 의미에서 선택적이다.
쓰기마스크 필드(970) - 그 내용은 데이터 요소 위치마다, 데스티네이션 벡터 피연산자의 데이터 요소 위치가 기본 연산 및 증강 연산의 결과를 반영하는지의 여부를 제어한다. 클래스 A 명령 템플릿은 쓰기마스크 병합을 지원하는 반면, 클래스 B는 쓰기마스크의 병합 및 제로화 양쪽을 지원한다. 병합 시, 벡터 마스크는 데스티네이션의 요소의 임의의 세트가 임의의 연산(기본 연산 및 증강 연산에 의해 지정됨) 실행 중에 업데이트로부터 보호되게 하고, 다른 일 실시예에서, 대응하는 마스크 비트가 0을 가지는 데스티네이션의 각 요소의 오랜 값은 보호된다. 대조적으로, 제로화 시, 벡터 마스크는 데스티네이션의 요소의 임의의 세트가 임의의 연산(기본 연산 및 증강 연산에 의해 지정됨) 실행 중에 제로로 되게 하고, 일 실시예에서, 대응하는 마스크 비트가 0 값을 가질 경우 데스티네이션의 요소가 0으로 설정된다. 이 기능의 서브세트는 행해지는 연산의 벡터 길이를 제어하는 능력이지만(즉, 처음부터 마지막까지 요소의 범위가 변경됨), 변경되는 요소가 연속적일 필요는 없다. 따라서, 쓰기마스크 필드(970)는 로드, 저장, 산술, 로직 등을 포함하여 부분 벡터 연산을 가능하게 한다. 또한, 이 마스킹은 폴트 억제에 이용될 수 있다(즉, 데스티네이션의 데이터 요소 위치를 마스킹함으로써 폴트를 야기할 수 있는/야기하게 되는 임의의 연산의 결과의 접수를 방지하게 되며, 예를 들면 메모리 내의 벡터가 페이지 경계를 넘고 제 2 페이지가 아닌 제 1 페이지가 페이지 폴트를 야기하는 것을 상정하며, 페이지 폴트는 제 1 페이지에 놓이는 벡터의 모든 데이터 요소가 쓰기마스크에 의해 마스킹될 경우 무시될 수 있다). 또한, 쓰기마스크는 조건문의 특정 유형을 포함하는 "벡터화 루프"를 가능하게 한다. 본 발명의 실시예는 쓰기마스크 필드(970)의 내용이 이용될 쓰기마스크를 포함하는 다수의 쓰기마스크 레지스터 중 하나를 선택(따라서 쓰기마스크 필드(970)의 내용은 행해질 마스킹을 간접적으로 식별함)하는 것 설명하고 있는 반면, 대체 또는 추가적인 다른 실시예는 마스크 쓰기 필드(970)의 콘텐츠가 행해질 마스킹을 직접 지정하는 것을 가능하게 한다. 또한, 제로화는, 1) 레지스터 리네이밍(renaming) 파이프라인 단계 동안에 데스티네이션이 더 이상 암묵적 소스가 아니기 때문에 데스티네이션 피연산자가 또한 소스가 아닌(또한 제 3위가 아닌 명령을 호출) 명령에 레지스터 리네이밍이 이용될 때(연산 결과가 아닌 임의의 데이터 요소(임의의 마스크된 데이터 요소)는 제로화되므로 현재 데스티네이션 레지스터로부터의 노데이터 요소는 리네이밍된 데스티네이션 레지스터에 복사되거나 연산과 함께 어떻게 해서든 반송될 필요가 있음), 2) 다시 쓰기 단계 동안 제로가 쓰기되므로 성능 향상을 가능하게 한다.
이미디어트 필드(972) - 그 내용은 이미디어트의 사양을 가능하게 한다. 이 필드는, 이미디어트를 지원하지 않는 범용 벡터 친화 포맷의 구현에서는 존재하지 않고 이미디어트를 이용하지 않는 명령에 존재하지 않는다는 의미에서 옵션적이다.
명령 템플릿 클래스 선택
클래스 필드(968) - 그 내용은 명령의 서로 다른 클래스간을 구별한다. 도 2a 및 도 2b를 참조하면, 이 필드의 내용은 클래스 A 및 클래스 B 명령 사이에서 선택한다. 도 9a 및 도 9b에서, 둥근 모서리의 사각형은 필드에 특정 값이 존재함을 지시하는 데 이용된다(예를 들면, 도 9a 및 도 9b에서 각각 클래스 필드(968)에 대해 클래스 A(968A) 및 클래스 B(968B)).
클래스 A의 노-메모리 액세스 명령 템플릿
클래스 A의 비메모리 액세스(905) 명령 템플릿의 경우에, 알파 필드(952)는 RS 필드(952A)로서 해석되고, 그 내용은 서로 다른 증강 연산 유형의 어느 것이 행해질 것인지를 구별하는 반면(예를 들면, 라운드(952A.1) 및 데이터 변형(952A.2)은 각각 노메모리 액세스, 라운드 유형 연산(910) 및 노메모리 액세스, 데이터 변형 유형 연산(915) 명령 템플릿에 대해 각각 지정), 베타 필드(954)는 지정된 유형의 어느 연산이 행해지는지를 구별한다. 도 9에서, 둥근 모서리 블록은 특정 값이 존재함을 지시하는 데 이용된다(예를 들면, 한정자 필드(946)의 노메모리 액세스(946A); 알파 필드(952/rs), 필드(952A)에 대한 라운드(952A.1) 및 데이터 변환(952A.2)). 노메모리 액세스(905) 명령 템프릿에서, 스케일 필드(960), 변위 필드(962A), 및 변위 스케일 필드(962B)는 존재하지 않는다.
노메모리 액세스 명령 템플릿 - 전체 라운드 컨트롤 유형 연산
노메모리 액세스 전체 라운드 컨트롤 유형 연산(910) 명령 템플릿에서, 베타 필드(954)는 라운드 컨트롤 필드(954A)로서 해석되고, 그 내용(들)은 정적 라운딩을 제공한다. 본 발명의 설명된 실시예에서, 라운드 제어 필드(954A)는 모든 억제 부동 소수점 예외(SAE) 필드(956) 및 라운드 연산 제어 필드(958)를 포함하는 반면, 대안적인 실시예는 이들 양 개념을 동일한 필드로 인코딩하거나 이들 개념/필드의 하나 또는 다른 것을 가질 수 있다(예를 들면, 라운드 연산 제어 필드(958)만을 가질 수 있음).
SAE 필드(956) - 그 내용은 예외 이벤트 보고를 디스에이블할지의 여부를 구별하고; SAE 필드(956)의 내용은 억제가 이네이블되는 것을 지시할 경우, 주어진 명령은 임의의 종류의 부동 소수점 예외 플래그를 보고하지 않으며 임의의 부동 소수점 예외 핸들러를 발생시키지 않음).
라운드 연산 제어 필드(958) - 그 내용은 그룹의 어느 것이 라운딩 연산을 행하는지를 구별한다(예를 들면, 라운드 업, 라운드 다운, 제로로 라운드 및 최근접으로 라운드). 따라서, 라운드 연산 제어 필드(958)는 명령마다 라운딩 모드의 변경을 가능하게 하므로, 이것이 필요할 경우 특히 유용하다. 프로세서가 라운딩 모드를 지정하는 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(950)의 내용은 그 레지스터 값을 오버라이드한다(이러한 제어 레지스터 상의 저장-변경-복구를 행할 필요 없이 라운딩 모드를 선택할 수 있는 것은 이점임).
노메모리 액세스 명령 템플릿 - 데이터 변형 유형 연산
노메모리 액세스 데이터 변형 유형 연산(915) 명령 템플릿에서, 베타 필드(954)는 데이터 변형 필드(954B)로서 해석되고, 그 내용은 다수의 데이터 변형 중 어느 것이 행해질지를 구별한다(예를 들면, 노데이터 변환, 스위즐, 브로드캐스트).
클래스 A의 메모리 액세스 명령 템플릿
클래스 A의 메모리 액세스(920) 명령 템플릿의 경우에, 알파 필드(952)는 그 내용이 축출 힌트의 어느 것이 사용될지를 구별하는 축출 힌트 필드(952B)로서 해석되는 반면(도 9a에서, 템퍼럴(952B.1) 및 비템퍼럴(952B.2)이 각각 메모리 액세스, 템퍼럴(925) 명령 템플릿 및 메모리 액세스, 비템퍼럴(930) 명령 템플릿), 베타 필드(954)는 그 내용이 다수의 데이터 조작 연산(프라이미티브라고도 알려짐)의 어느 것이 수행(예를 들면, 노조작; 브로드캐스트; 소스의 업 변환; 및 데스티네이션의 다운 변환)될지를 구별하는 데이터 조작 필드(954C)로서 해석된다. 메모리 액세스(920) 명령 템플릿은 스케일 필드(960), 및 선택적으로 변위 필드(962A) 또는 변위 스케일 필드(962B)를 포함한다.
벡터 메모리 명령은 변환 지원을 갖고 메모리로부터의 벡터 로드 및 메모리에의 벡터 저장을 행한다. 정규 벡터 명령과 마찬가지로, 실제로 전달되는 요소가 쓰기마스크로서 선택되는 벡터 마스크의 내용에 의해 지시되어, 벡터 메모리 명령은 데이터 요소 방식으로 메모리와 데이터를 교환한다. 도 9a에서, 둥근 모서리 사각형은 특정 값이 필드에 존재하는 것을 지시하는 데 이용된다(예를 들면, 한정자 필드(946)에 대한 메모리 액세스(946B); 템퍼럴(952b.1) 및 알파 필드(952)/축출 힌트 필드(952B)에 대한 비템퍼럴(952B.2)).
메모리 액세스 명령 템플릿 - 템퍼럴
템퍼럴 데이터는 캐싱에서 이점을 얻는 데 충분히 빨리 재이용될 수 있는 데이터이다. 그러나, 즉 힌트 및 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함하여 다른 방식으로 구현될 수 있다.
메모리 액세스 명령 템플릿 - 비템퍼럴
비템퍼럴 데이터가 1레벨 캐시의 캐싱으로부터 이점을 얻는 데 충분히 빨리 재이용될 것 같지 않은 데이터이고 축출에 우선순위가 부여된다. 그러나, 즉 힌트 및 상이한 프로세서는 힌트를 완전히 무시하는 것을 포함하여 다른 방식으로 구현될 수 있다.
클래스 B의 명령 템플릿
클래스 B의 명령 템플릿의 경우, 알파 필드(952)는 쓰기마스크 컨트롤(Z) 필드(952C)로서 해석되며, 그 내용은 쓰기마스크 필드(970)에 의해 제어되는 쓰기마스크가 병합 또는 제로화되는지의 여부를 구별하는 것이다.
클래스 B의 노메모리 액세스 명령 템플릿
클래스 B의 비메모리 액세스(905) 명령 템플릿의 경우, 베타 필드(954)의 부분은 RL 필드(957A)로서 해석되며, 그 내용은 서로 다른 증강 연산 유형 중 어느 것이 행해질지를 구별하는 반면(예를 들면, 라운드(957A.1) 및 벡터 길이(VSIZE)(957A.2)는 각각 노메모리 액세스, 쓰기마스크 제어, 부분 라운드 제어 유형 연산(912) 명령 템플릿 및 노메모리 액세스, 쓰기마스크 제어, VSIZE 유형 연산(917) 명령 템플릿에 대해 지정됨), 베타 필드(954)의 나머지는 지정된 유형의 연산의 어느 것이 행해질지를 구별한다. 도 9에서, 둥근 모서리 블록은 특정 값이 존재함을 지시하는 데 이용된다(예를 들면, 한정자 필드(946)에서 노메모리 액세스(946A); RL 필드(957A)에 대한 라운드(957A.1) 및 VSIZE(957A.2)). 노메모리 액세스(905) 명령 템플릿에서, 스케일 필드(960), 변위 필드(962A), 및 변위 스케일 필드(962B)가 존재하지 않는다.
노메모리 액세스 명령 템플릿 - 쓰기마스크 제어, 부분 라운드 제어 유형 연산
노메모리 액세스, 쓰기마스크 제어, 부분 라운드 제어 유형 연산(910) 명령 템플릿에서, 베타 필드(954)의 나머지는 라운드 연산 필드(959A)로서 해석되고, 예외 이벤트 보고는 디스에이블된다(주어진 명령은 임의의 종류의 부동 소수점 예외 플래그를 보고하지 않으며 임의의 부동 소수점 예외 핸들러를 발생시키지 않음).
라운드 연산 제어 필드(959A) - 라운드 연산 제어 필드(958)와 꼭 같이, 그 내용은 행할 라운딩 연산의 그룹의 어느 것인지를 구별한다(예를 들면, 라운드 업, 라운드 다운, 제로로 라운드 및 최근접으로 라운드). 따라서, 라운드 연산 제어 필드(959A)는 명령마다 라운딩 모드의 변경을 가능하게 하므로, 필요시 특히 유용하다. 프로세서가 라운딩 모드를 지정하는 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(950)의 내용은 그 레지스터 값을 오버라이드한다(이러한 제어 레지스트 상의 저장-변경-복구를 행할 필요 없이 라운딩 모드를 선택할 수 있는 것은 이점임).
노메모리 액세스 명령 템플릿 - 쓰기마스크 제어, VSIZE 유형 연산
노메모리 액세스, 쓰기마스크 제어, VSIZE 유형 연산(917) 명령 템플릿에서, 베타 필드(954)의 나머지 부분은 벡터 길이 필드(959B)로서 해석되며 그 내용은 다수의 데이터 벡터 길이 중 어느 것이 행해질지를 구별한다(예를 들면, 128, 956 또는 1112 바이트).
클래스 B의 메모리 액세스 명령 템플릿
클래스 B의 메모리 액세스(920) 명령 템플릿의 경우에, 베타 필드(954)의 부분은 브로드캐스트 필드(957B)로서 해석되며 그 내용은 브로드캐스트 유형 데이터 조작 연산이 행해질지의 여부를 구별하는 반면, 베타 필드(954)의 나머지는 벡터 길이 필드(959B)로서 해석된다. 메모리 액세스(920) 명령 템플릿은 스케일 필드(960), 및 선택적으로 변위 필드(962A) 또는 변위 스케일 필드(962B)를 포함한다.
필드에 대한 추가적인 코멘트
범용 벡터 친화 명령 포맷(900)과 관련하여, 전체 연산 코드 필드(974)는 포맷 필드(940), 기본 연산 필드(942), 및 데이터 요소 폭 필드(964)를 포함하는 것으로 나타나 있다. 일 실시예는 전체 연산 코드 필드(974)가 이들 필드의 모두를 포함하는 경우를 나타내고 있는 반면, 전체 연산 코드 필드(974)는 이들 모두를 지원하지 않는 실시예에서 이들 필드의 전체보다는 적게 포함한다. 전체 연산 코드 필드(974)는 연산 코드를 제공한다.
증강 연산 필드(950), 데이터 요소 폭 필드(964), 및 쓰기마스크 필드(970)는 이들 특징이 범용 벡터 친화 명령 포맷으로 명령마다 지정되게 허용한다.
쓰기마스크 필드 및 데이터 요소 폭 필드의 조합은 그들이 마스크가 상이한 데이터 요소 폭에 의거하여 적용되게 하는 점에서 전형의 명령을 생성한다.
명령 포맷이 상대적으로 적은 수의 비트를 필요로 하며, 이는 다른 필드의 내용에 의거하여 서로 다른 목적을 위해 서로 다른 필드를 재이용하기 때문이다. 예를 들면, 하나의 관점은 한정자 필드의 콘텐츠가 도 9a 및 도 9b의 노메모리 액세스(905) 명령 템플릿과 도 9a 및 도 9b의 메모리 액세스(9250) 명령 템플릿 사이를 선택하는 반면, 클래스 필드(968)의 내용은 비메모리 액세스(905) 명령 템플릿 내에서 명령 템플릿(도 9a의 910/915 및 도 9b의 912/917) 사이에서 선택하는 반면, 클래스 필드(968)의 콘텐츠는 해당 메모리 액세스(920) 명령 템플릿 내에서 명령 템플릿(도 9a의 925/930 및 도 9b의 927) 사이에서 선택하는 것이다. 다른 관점에서, 클래스 필드(968)의 내용은 도 9a 및 도 9b 각각의 클래스 A와 클래스 B 명령 템플릿 사이에서 선택하는 반면, 한정자 필드의 내용은 해당 클래스 A 명령 템플릿 내에서 도 9a의 명령 탬플릿(905 및 920) 사이에서 선택하는 반면, 한정자 필드의 내용은 해당 클래스 B 명령 탬플릿 내에서 도 9b의 명령 탬플릿(905 및 920) 사이에서 선택한다. 클래스 A 명령 탬플릿을 지시하는 클래스 필드의 내용의 경우에, 한정자 필드(946)의 내용은 알파 필드(952)(rs 필드(952A)와 EH 필드(952B) 사이)의 해석을 선택한다. 관련 방법으로, 한정자 필드(946) 및 클래스 필드(968)의 내용은, 알파 필드가 rs 필드(952A), EH 필드(952B), 또는 쓰기마스크 제어(Z) 필드(952C)로서 해석되는지의 여부를 선택한다. 클래스 A 노메모리 액세스 연산을 지시하는 클래스 및 한정자 필드의 경우에, 증강 필드의 베타 필드의 해석은 rs 필드의 내용에 의거하여 변경되는 반면, 클래스 B 노메모리 액세스 연산을 지시하는 클래스 및 한정자 필드의 경우에, 베타 필드의 해석은 RL 필드의 내용에 의존한다. 클래스 A 메모리 액세스 연산을 지시하는 클래스 및 한정자 필드의 경우에, 증강 필드의 베타 필드의 해석은 기본 연산 필드의 내용에 의거하여 변경되는 반면, 클래스 B 메모리 액세스 연산을 지시하는 클래스 및 한정자 필드의 경우에, 증강 필드의 베타 필드의 브로드캐스트 필드(957B)의 해석은 기본 연산 필드의 내용에 의거하여 변경된다. 따라서, 기본 연산 필드, 한정자 필드 및 증강 연산 필드의 조합은 훨씬 다양한 증강 연산이 지정되게 한다.
클래스 A 및 클래스 B에서 발견되는 다양한 명령 템플릿은 다른 상황에서 유용하다. 제로-쓰기마스크 또는 더 작은 벡터 길이가 성능 상의 이유로 요구될 경우, 클래스 A가 유용하다. 예를 들면, 데스티네이션과 인위적으로 병합될 필요가 더 이상 없으므로, 리네이밍의 이용 시 제로화는 페이크 의존을 피하게 할 수 있고; 다른 예로서, 벡터 마스크를 갖는 더 짧은 벡터 크기를 에뮬레이션할 경우, 벡터 길이 제어는 저장-부하 포워딩 문제를 쉽게 한다. 클래스 B는, 1) 부동 소수점 예외(즉, SAE 필드의 내용이 노를 가리킬 경우)를 가능하게 하면서 동시에 라운딩 모드 제어를 이용하고, 2) 업컨버전, 스위즐링, 스왑, 및/또는 다운컨버전이 이용 가능하고, 3) 그래픽 데이터 유형에 연산하는 데 바람직할 경우 유용하다. 예를 들면, 업 컨버전, 스위즐링, 스왑, 다운 컨버전, 및 그래픽 데이터 유형은 서로 다른 포맷의 소스로 작업할 경우 필요한 명령의 수를 줄이고, 다른 예로서, 예외를 허용하는 능력은 지향된 라운딩 모드와의 완전 IEEE 준수를 제공한다.
예시적인 특정의 벡터 친화 명령 포맷
도 10(a) 내지 도 10(c)는 본 발명의 실시예에 따른 예시적인 특정 벡터 친화 명령 포맷을 나타낸다. 도 10(a) 내지 도 10(c)는 해당 필드 일부의 값뿐만 아니라, 필드의 위치, 크기, 해석, 및 순서를 특정하는 의미에서 특정인 특정 벡터 친화 명령 포맷(1000)을 나타낸다. 특정 백터 친화 명령 포맷(1000)은 x86 명령 세트를 확장하는 데 이용될 수 있고, 이에 따라 필드의 일부는 기존 x86 명령 세트 및 그 확장에서 이용되는 것과 유사 또는 동일하다(예를 들면, AVX). 이 포맷은 프리픽스 인코딩 필드, 실제 연산 코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 확장을 갖는 기존 x86 명령 세트의 이미디어트 필드와 일치하게 된다. 도 10(a) 내지 도 10(c)로부터의 필드가 맵핑되는 도 9의 필드가 나타나 있다.
본 발명의 실시예는 예시의 목적을 위해 범용 벡터 친화 명령 포맷(900)의 맥락에서 특정 벡터 친화 명령 포맷(1000)을 참조하여 설명하지만, 본 발명은 주장되는 바를 제외하고 특정 벡터 친화 명령 포맷(1000)에 한정되는 것이 아님을 이해해야 한다. 예를 들면, 범용 벡터 친화 명령 포맷(900)은 다양한 필드에 대해 가능한 다양한 크기를 고려하고 있는 반면, 특정 벡터 친화 명령 포맷(1000)은 특정 크기의 필드를 갖는 것으로서 나타나 있다. 구체적인 예로서, 데이터 요소 폭 필드(964)는 특정 벡터 친화 명령 포맷(1000)의 한 비트 필드로서 나타나 있지만, 본 발명은 그에 한정되는 것은 아니다(즉, 범용 벡터 친화 명령 포맷(900)은 데이터 요소 폭 필드(964)의 다른 크기를 고려한다).
포맷 - 도 10(a) 내지 도 10(c)
범용 벡터 친화 명령 포맷(900)은 도 10(a) 내지 도 10(c)에 나타낸 순서로 열거되는 다음의 필드를 포함한다.
EVEX Prefix(바이트 0-3)
EVEX Prefix(1002) - 4 바이트 형태로 인코딩됨.
포맷 필드(940)(EVEX 바이트 0, 비트 [7:0])- 제 1 바이트(EVEX 바이트 0)는 포맷 필드(940)이고, 그것은 0x62(본 발명의 일 실시예에서 벡터 친화 명령 포맷을 구별하는 데 이용되는 고유 값)를 포함한다.
제 2-4바이트(EVEX 바이트 1-3)는 특정 능력을 제공하는 다수의 비트 필드를 포함한다.
REX 필드(1005)(EVEX 바이트 1, 비트[7-5])는 - EVEX.R 비트 필드(EVEX 바이트 1, 비트[7]-R), EVEX.X 비트 필드(EVEX 바이트 1, 비트[6]-X), 및 957BEX 바이트 1, 비트[5]-B)로 구성된다. EVEX.R, EVEX.X, 및 EVEX.B 비트 필드는 대응하는 VEX 비트 필드와 동일한 기능을 제공하며, 1s 보수 형태를 이용하여 인코딩되며, 즉 ZMM0은 1111B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령의 다른 필드는 종래에 알려진 바와 같이 레지스터 인덱스의 하위 3개의 비트를 인코딩해서(rrr, xxx, 및 bbb), Rrrr, Xxxx, 및 Bbbb는 EVEX.R, EVEX.X, 및 EVEX.B를 추가함으로써 형성될 수 있다.
REX' 필드(1010) - 이것은 REX' 필드(1010)의 제 1 부분이고 확장된 32 레지스터 세트의 상위 16 또는 하위 16을 인코딩하는 데 이용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트[4]-R')이다. 본 발명의 일 실시예에서, 이 비트는 후술하는 다른 비트와 함께 비트 반전된 포맷으로 저장되어서 BOUND 명령과 구별되어서(공지의 x86 32비트 모드에서), 그 실제 연산 코드 바이트는 62이지만, MOD R/M 필드(후술함)에 MOD 필드의 11의 값을 받아들이지 않고; 본 발명의 대안적인 실시예는 이하에 비트로서 지시되는 이것 및 다른 것을 반전된 포맷으로 저장하지 않는다. 1의 값은 하위 16 레지스터를 인코딩하는 데 이용된다. 즉, R'Rrrr은 EVEX.R', EVEX.R 및 다른 필드로부터의 다른 RRR을 조합함으로써 형성된다.
연산 코드 맵 필드(1015)(EVEX 바이트 1, 비트[3:0] - mmmm) - 그 내용은 내포된 리딩 연산 코드 바이트(0F, 0F 38, 또는 0F 3)를 인코딩하다.
데이터 요소 폭 필드(964)(EVEX 바이트 2, 비트[7]-W)는 표기 EVEX.W에 의해 나타난다. EVEX.W는 데이터 유형의 입도(크기)를 정의하는 데 이용된다(32 비트 데이터 요소 또는 64 비트 데이터 요소 중 하나).
EVEX.vvvv(1020)(EVEX 바이트 2, 비트[6:3]-vvvv) - EVEX.vvvv의 역할은, 1) EVEX.vvvv는 반전된(1s 보수) 형태로 특정된 제 1 소스 레지스터 피연산자를 인코딩하고 2 이상의 소스 피연산자를 갖는 명령에 유효하거나; 2) EVEX.vvvv는 특정 벡터 시프트에 대한 1s 보수 형태로 지정된 데스티네이션 레지스터 피연산자를 인코딩하거나; 3) EVEX.vvvv는 임의의 피연산자를 인코딩하지 않고, 필드는 보존되고 1111b를 갖는 것을 포함할 수 있다. 따라서, EVEX.vvvv 필드(1020)는 반전된(1s 보수) 형태로 저장된 제 1 소스 레지스터 지정자의 하위 4 비트를 인코딩한다. 명령에 의존하여, 추가의 다른 EVEX 비트 필드가 지정자 크기를 32 레지스터로 확장하는 데 이용된다.
EVEX.U(968) 클래스 필드(EVEX 바이트 2, 비트[2]-U) - EVEX.U = 0일 경우, 클래스 A 또는 EVEX.U0를 지시하고; EVEX.U = 1일 경우, 클래스 B 또는 EVEX.U1을 지시한다.
프리픽스 인코딩 필드(1025)(EVEX 바이트 2, 비트[1:0] - pp) - 기본 연산 필드를 위해 추가 비트를 제공한다. EVEX 프리픽스 포맷의 레거시 SSE 명령에 대한 지원을 제공하는 것에 추가하여, 이것은 또한 SIMD 프리픽스를 콤팩트하게 하는 데 이점을 갖는다(SIMD 프리픽스를 표현하는 데 바이트를 필요로 하지 않고, EVEX 프리픽스는 2비트만을 필요로 함). 일 실시예에서, 레거시 포맷 및 EVEX 프리픽스 포맷 양쪽으로 SIMD 프리픽스(66H, F2H, F3H)를 이용하는 레거시 SSE 명령을 지원하기 위해, 이들 레거시 SIMD 프리픽스는 SIMD 프리픽스 인코딩 필드에 인코딩되고, 런타임 시에 디코더의 PLA에 제공되기 전에 레거시 SIMD 프리픽스에 확장된다(이에 따라 PLA는 레거시 및 변형 없이 이들 레거시 명령의 EVEX 형태를 실행할 수 있다). 새로운 명령이 EVEX 프리픽스 인코딩 필드의 내용을 직접적으로 연산 코드 확장으로서 사용할 수 있지만, 특정 실시예는 일관성을 위해 동일하게 확장되지만 이들 레거시 SIMD 프리픽스에 의해 지정되는 다른 의미가 가능하다. 대안적인 실시예는 PLA를 재설계하여 2 비트 SIMD 프리픽스 인코딩을 지원하고, 이에 따라 확장이 필요하지 않다.
알파 필드(952)(EVEX 바이트 3, 비트[7]-EH; 또한 EVEX.EH, EVEX.rs, EVEX.RL, EVEX.쓰기마스크 제어, 및 EVEX.N로서 알려짐; 또한 알파로 예시됨) - 전술한 바와 같이, 이 필드는 컨텍스트 특정이다. 본원에 추가적인 설명이 후술된다.
베타 필드(954)(EVEX 바이트 3, 비트[6:4]-SSS, 또한 EVEX.s2 -0, EVEX.r2 -0, EVEX.rr1, EVEX.LL0, EVEX.LLB로서 알려짐; 또한 βββ로 예시됨) - 전술한 바와 같이, 이 필드는 컨텍스트 특정이다. 본원에 추가적인 설명이 후술된다.
REX' 필드(1010) - 이것은 REX' 필드의 나머지이며 확장된 32 레지스터 세트의 상위 16 또는 하위 16을 인코딩하는 데 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트[3]-V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 1의 값은 하위 16 레지스터를 인코딩하는 데 이용된다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 조합함으로써 형성된다.
쓰기마스크 필드(970)(EVEX 바이트 3, 비트[2:0] - kkk) - 그 내용은 전술한 바와 같이 쓰기마스크 레지스터의 레지스터 인덱스를 지정한다. 본 발명의 일 실시예에서, 특정 값 EVEX.kkk = 000은 노쓰기마스크가 특정 명령에 이용되는 것을 내포하는 특별한 거동을 갖는다(이것은 마스킹 하드웨어를 우회하는 모든 것 또는 하드웨어에 하드와이어드 쓰기마스크의 이용을 포함하는 다양한 방식으로 구현될 수 있다).
실제 연산 코드 필드(1030)(바이트 4)
이것은 또한 연산 코드 바이트로서 알려져 있다. 연산 코드의 부분은 이 필드에 지정된다.
MOD R/M 필드(1040)(바이트 5).
한정자 필드(946)(MODR/M.MOD, 비트[7-6] - MOD 필드(1042)) - 전술한 바와 같이, MOD 필드(1042)의 콘텐츠는 메모리 액세스와 비메모리 액세스 연산간을 구별한다. 이 필드는 본원에서 차후 더 상세히 설명한다.
MODR/M.reg 필드(1044), 비트[5-3] - ModR/M.reg 필드의 역할은 다음의 두 가지 경우로 요약될 수 있다: ModR/M.reg는 데스티네이션 레지스터 피연산자 또는 소스 레지스터 피연산자를 인코딩하거나, ModR/M.reg는 연산 코드 확장으로서 처리되고 어떠한 명령 피연산자를 인코딩하는 데 이용되지 않는다.
MODR/M.r/m 필드(1046), 비트[2-0] - MODR/M.r/m 필드의 역할은 다음을 포함한다: ModR/M.r/m은 메모리 어드레스를 참조하는 명령 피연산자를 인코딩하거나, ModR/M.r/m은 데스티네이션 레지스터 피연산자 또는 소스 레지스터 피연산를 인코딩한다.
스케일, 인덱스, 베이스(SIB) 바이트(바이트 6)
스케일 필드(960)(SIB.SS 비트[7-6] - 전술한 바와 같이, 스케일 필드(960)의 콘텐츠는 메모리 어드레스 생성에 이용된다. 이 필드는 본원에서 차후 더 상세히 설명한다.
SIB.xxx(1054)(비트[5-3] 및 SIB.bbb(1056)(비트[2-0]) - 이 필드의 내용은 이전에 레지스터 인덱스 Xxxx 및 Bbbb와 관련하여 언급되었다.
변위 바이트(들)(바이트 7 또는 바이트 7-10)
변위 필드(962A)(바이트 7-10) - MOD 필드(1042)가 10을 포함할 경우, 바이트 7-10은 변위 필드(962A)이고, 그것은 레거시 32 비트 변위(disp32)와 동일하게 작용하며 바이트 입도에서 작용한다.
변위 인자 필드(962B)(바이트 7) - MOD 필드(1042)가 01을 포함할 경우, 바이트 7은 변위 인자 필드(962B)이다. 이 필드의 위치는 레거시 x86 명령 세트 8비트 변위(disp8)와 동일하며, 이는 바이트 입도에서 작용한다. disp8은 부호 확장되어 있으므로, -128과 127 사이의 바이트 오프셋만을 처리할 수 있고, 64 바이트 캐시 라인의 관점에서, disp8은 4개의 실제 유용한 값 -128, -64, 0, 및 64만으로 설정될 수 있는 8 비트를 이용하고; 더 큰 범위가 종종 필요하므로 disp32가 이용되지만; disp32는 4바이트를 필요로 한다. disp8 및 disp32와 대조적으로, 변위 인자 필드(962B)는 disp8의 재해석이고; 변위 인자 필드(962B)의 이용 시 실제 변위는 메모리 피연산자 액세스의 크기(N)로 변위 인자 필드의 내용을 곱함으로써 판정된다. 이 유형의 변위는 disp8*N이라 한다. 이는 평균 명령 길이(변위에 이용되지만 훨씬 더 큰 범위를 갖는 단일 바이트)를 줄인다. 이러한 압축 변위는, 효과적인 변위가 메모리 액세스의 입도의 배수라는 가정에 의거하고 있으며, 따라서 어드레스 오프셋의 중복 하위 비트는 인코딩될 필요가 없다. 즉, 변위 인자 필드(962B)는 레거시 x86 명령 세트 8 비트 변위를 대체한다. 따라서, 변위 인자 필드(962B)는, disp8가 disp8*N에 오버로드되는 점만을 제외하면 x86 명령 세트 8 비트 변위와 동일하게 인코딩된다(이에 따라 ModRM/SIB 인코딩 규칙에 변화 없음). 즉, 인코딩 규칙 또는 인코딩의 길이에 변화가 없지만, 하드웨어에 의한 변위 값의 해석에만 변화가 있다(이것은 바이트형 어드레스 오프셋을 얻기 위해 메모리 피연산자의 크기만큼 변위를 스케일링할 필요가 있음).
이미디어트
이미디어트 필드(972)는 전술한 바와 같이 연산된다.
예시적인 레지스터 아키텍처 - 도 11
도 11은 본 발명의 일 실시예에 따른 레지스터 아키텍처(1100)의 블록도이다. 레지스터 파일 및 레지스터 아키텍처의 레지스터는 이하에 열거한다.
벡터 레지스터 파일(1110) - 예시된 실시예에서, 1112 비트 폭인 32 벡터 레지스터가 있고; 이들 레지스터는 zmm0 내지 zmm31로서 참조된다. 하위 16 zmm 레지스터의 하위 956 비트가 레지스터 ymm0-16에 오버레이된다. 하위 16 zmm 레지스터의 하위 128 비트(ymm 레지스터의 하위 128 비트)는 레지스터 xmm0-15에 오버레이된다. 이하의 표에 나타낸 바와 같이, 특정 벡터 친화 명령 포맷(1000)은 이러한 오버레이 레지스터 파일에서 연산된다.
Figure pct00004
즉, 벡터 길이 필드(959B)는 최대 길이와 하나 이상의 다른 짧은 길이 사이에서 선택하며, 이러한 각 짧은 길이는 선행 길이의 절반 길이이고, 벡터 길이 필드(959B) 없는 명령 템플릿은 최대 벡터 길이에서 연산된다. 또한, 일 실시예에서, 특정 벡터 친화 명령 포맷(1000)의 클래스 B 명령 템플릿은 스칼라 단정도/배정도 부동 소수점 데이터 및 팩 또는 스칼라 정수 데이터를 연산한다. 스칼라 연산은 zmm/ymm/xmm 레지스터의 최하위 데이터 요소 위치에서 행해지는 연산이고, 상위 데이터 요소 위치는 실시예에 의존하여 명령 이전인 것과 동일하게 남겨지거나 제로가 된다.
쓰기마스크 레지스터(1115) - 예시되는 실시예에서, 각각 64 비트 크기의 8 쓰기마스크 레지스터(k0 내지 k7)가 있다. 전술한 바와 같이, 본 발명의 일 실시예에서, 벡터 마스크 레지스터(k0)가 쓰기마스크로서 이용될 수 없고, 일반적으로 k0를 지시하는 인코딩이 쓰기마스크에 이용될 경우, 0xFFFF의 하드와이어드 쓰기마스크를 선택하며 그 명령에 대해 쓰기마스크를 효과적으로 디스에이블한다.
멀티미디어 확장 제어 상태 레지스터(MXCSR)(1120) - 예시한 실시예에서, 이 32 비트 레지스터는 부동 소수점 연산에 이용되는 상태 및 제어 비트를 제공한다.
범용 레지스터(1125) - 예시한 실시예에서, 메모리 피연산자를 어드레싱하기 위해 기존 x86 어드레싱 모드와 함께 이용되는 16개의 64 비트 범용 레지스터가 있다. 이들 레지스터는 명칭 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15에 의해 참조된다.
확장된 플래그(EFLAGS) 레지스터(1130) - 예시한 실시예에서, 이 32 비트 레지스터는 많은 명령의 결과를 기록하는 데 이용된다.
부동 소수점 제어 워드(FCW) 레지스터(1135) 및 부동 소수점 상태 워드(FSW) 레지스터(1140) - 예시한 실시예에서, 이들 레지스터는 x87 명령 세트 확장에 의해 FCW의 경우 라운딩 모드, 예외 마스크 및 플래그를 설정하고, FSW의 경우 예외의 추적을 유지하는 데 이용된다.
MMX 팩 정수 플랫 레지스터 파일(1150)로 에일리어스되는 스칼라 부동 소수점 스택 레지스터 파일(x87 스택) - 예시한 실시예에서, x87 스택은 x87 명령 세트 확장을 이용하여 32/64/80 비트 부동 소수점 데이터에 스칼라 부동 소수점 연산을 행하는 데 이용되는 8개의 요소 스택인 반면, MMX 레지스터는 MMX와 XMM 레지스터 사이에 행해지는 일부 연산에 대한 피연산자를 유지할 뿐만 아니라 64 비트 팩 정수 데이터에 연산을 행하는 데 이용된다.
세그먼트 레지스터(1155) - 예시한 실시예에서, 세그먼트화된 어드레스 생성에 이용되는 데이터를 저장하는 데 이용되는 6개의 16 비트 레지스터가 있다.
RIP 레지스터 1165 - 예시한 실시예에서, 명령 포인터를 저장하는 이 64 비트 레지스터.
본 발명의 대안적인 실시예는 넓거나 좁은 레지스터를 이용할 수 있다.
또한, 본 발명의 대안적인 실시예는 다소의, 또는 서로 다른 레지스터 파일 및 레지스터를 이용할 수 있다.
예시적인 순차 프로세서 아키텍처 - 도 12(a) 및 도 12(b)
도 12(a) 및 도 12(b)는 예시적인 순차 프로세서 아키텍처의 블록도를 나타낸다. 이러한 예시적인 실시예는 넓은 벡터 프로세서(VPU)로 증강되는 순차 CPU 코어의 다수의 예시에 관해 설계된다. 코어는 el4t 적용에 의존하여, 일부 고정 기능 로직, 메모리 I/O 인터페이스, 및 다른 필요한 I/O 로직과 높은 대역폭 상호 연결 네트워크를 통해 통신한다. 예를 들면, 독립형 GPU로서 본 실시예의 구현은 일반적으로 PCIe 버스를 포함할 것이다.
도 12(a)는 본 발명의 실시예에 따른, 온다이 상호 연결 네트워크(1202)에의 연결 및 레벨 2(L2)캐시(1204)의 로컬 서브세트와 함께 단일 CPU 코어의 블록도이다. 명령 디코더(1200)는 특정 벡터 명령 포맷(1000)을 포함하는 확장자를 갖는 x86 명령 세트를 지원한다. 본 발명의 일 실시예에서(디자인을 단순화) 스칼라 유닛(1208) 및 벡터 유닛(1210)은 별개의 레지스터 세트를 이용하며(각각 스칼라 레지스터(1212) 및 벡터 레지스터(1214)) 그들간의 전송 데이터는 메모리에 쓰기되고 이어서 레벨 1(L1) 캐시(1206)에서 재읽기되는 한편, 본 발명의 대안적인 실시예는 다른 접근법을 이용할 수 있다(예를 들면, 단일 레지스터 세트를 이용하거나 데이터가 쓰기되고 재읽기되지 않는 2 개의 레지스터 파일 사이에 전송되게 할 수 있는 통신 경로를 포함할 수 있음).
L1 캐시(1206)는 스칼라 및 벡터 유닛으로 캐시 메모리에 낮은 레이턴시 액세스를 가능하게 한다. 벡터 친화 명령 포맷으로 op 명령 로드와 함께, 이것은 L1 캐시(1206)가 확장 레지스터 파일과 다소 유사하게 처리될 수 있음을 의미한다. 이것은 특히 축출 힌트 필드(952B)와 함께 많은 알고리즘의 성능을 대폭 향상시킨다.
L2 캐시(1204)의 로컬 서브세트는 CPU 코어마다 하나씩 별개의 로컬 서브세트로 분할되는 글로벌 L2 캐시의 부분이다. 각 CPU는 L2 캐시(1204)의 자신의 로컬 서브세트에의 직접 액세스 경로를 갖는다. 자신의 로컬 L2 캐시 서브세트에 액세스하는 다른 CPU와 병행하여 CPU 코어가 읽은 데이터는 L2 캐시 서브세트(1204)에 저장되며 신속히 액세스될 수 있다. CPU 코어에 의해 쓰기된 데이터는 자신의 L2 캐시 서브세트(1204)에 저장되고 필요에 따라 다른 서브세트에서 플러시된다. 링 네트워크는 공유 데이터의 일관성을 보장한다.
도 12(b)는 본 발명의 실시예에 따른 도 12(a)의 CPU 코어의 부분 분해도이다. 도 12(b)는 L1 캐시(1204)의 L1 데이터 캐시(1206A) 부분뿐만 아니라 벡터 유닛(1210) 및 벡터 레지스터(1214)에 대한 세부를 포함한다. 구체적으로는, 벡터 유닛(1210)은 16와이드 벡터 처리 유닛(VPU)(16와이드 ALU(1228) 참조)이고, 이는 정수, 단정도 부동 소수점 및 배정도 부동 소수점 명령을 실행한다. VPU는 스위즐 유닛(1220)으로 레지스터 입력의 스위즐링, 숫자 컨버터 유닛(1222A-B)으로 숫자 변환, 및 메모리 입력의 복제 유닛(1224)으로 복제를 지원한다. 쓰기마스크 레지스터(1226)는 결과의 벡터 쓰기를 서술하게 할 수 있다.
레지스터 데이터는 예를 들면 매트릭스 곱을 지원는 다양한 방법으로 스위즐링될 수 있다. 메모리로부터의 데이터는 VPU 레인을 가로질러 복제될 수 있다. 이것은 캐시 효율을 대폭 향상시키는 그래픽 및 비그래픽 병렬 데이터 처리의 공통 연산이다.
링 네트워크는 CPU 코어, L2 캐시 및 다른 로직 블록 등의 에이전트가 칩 내에서 서로 통신할 수 있게 하는 양방향이다. 각 링 데이터 경로는 방향마다 1112 비트 폭이다.
예시적인 비순차 아키텍처 - 도 13
도 13은 본 발명의 실시예에 따른 예시적인 비순차 아키텍처를 나타내는 블록도이다. 구체적으로, 도 13은 벡터 친화 명령 포맷 및 그 실행을 포함하도록 수정된 공지의 예시적인 비순차 아키텍처를 나타낸다. 도 13에서 화살표는 두 개 이상의 유닛간의 결합을 표시하고 화살표 방향은 해당 유닛간의 데이터 흐름의 방향을 지시한다. 도 13은 실행 엔진 유닛(1310) 및 메모리 유닛(1315)에 결합된 프론트 엔드 유닛(1305)을 포함하고; 실행 엔진 유닛(1310)은 또한 메모리 유닛(1315)에 결합된다.
프론트 엔드 유닛(1305)은 레벨 2(L2) 분기 예측 유닛(1322)에 결합된 레벨 1(L1) 분기 예측 유닛(1320)을 포함한다. L1 및 L2 분기 예측 유닛(1320 및 1322)은 L1 명령 캐시 유닛(1324)에 결합된다. L1 명령 캐시 유닛(1324)은 또한 명령 페치 및 프리디코드 유닛(1328)에 더 결합되는 명령 변환 색인 버퍼(TLB)(1326)에 결합된다. 명령 페치 및 프리디코드 유닛(1328)은 또한 디코드 유닛(1332)에 더 결합되는 명령 큐 유닛(1330)에 결합된다. 디코드 유닛(1332)은 콤플레스 디코더 유닛(1334) 및 3개의 심플 디코더 유닛(1336, 1338 및 1340)을 포함한다. 디코드 유닛(1332)은 마이크로 코드 ROM 유닛(1342)을 포함한다. 디코드 유닛(1332)은 디코드 단계부에서 전술한 바와 같이 작동할 수 있다. L1 명령 캐시 유닛(1324)은 메모리 유닛(1315)의 L2 캐시 유닛(1348)에 더 결합된다. 명령 TLB 유닛(1326)은 메모리 유닛(1315)의 제 2 레벨 TLB 유닛(1346)에 더 결합된다. 디코딩 유닛(1332), 마이크로 코드 ROM 유닛(1342), 및 루프 스트림 검출 유닛(1344)은 실행 엔진 유닛(1310)에서 리네임/할당 유닛(1356)에 각각 결합된다.
실행 엔진 유닛(1310)은 리타이어먼트 유닛(1374) 및 통합 스케줄러 유닛(1358)에 연결된 리네임/할당 유닛(1356)을 포함한다. 리타이어먼트 유닛(1374)은 또한 실행 유닛(1360)에 결합되며 리오더 버퍼 유닛(1378)을 포함한다. 통합 스케줄러 유닛(1358)은 실행 유닛(1360)에 결합된 물리 레지스터 파일 유닛(1376)에 더 결합된다. 물리 레지스터 파일 유닛(1376)은 벡터 레지스터 유닛(1377A), 쓰기마스크 레지스터 유닛(1377B), 및 스칼라 레지스터 유닛(1377C)을 포함하고; 이들 레지스터 유닛은 벡터 레지스터(1110), 벡터 마스크 레지스터(1115), 및 범용 레지스터(1125)를 제공할 수 있고; 물리 레지스터 파일 유닛(1376)은 도시하지 않은 추가적인 레지스터 파일을 포함할 수 있다(예를 들면, MMX 팩 정수 플랫 레지스터 파일(1150)에 에일리어스되는 스칼라 부동 소수점 스택 레지스터 파일(1145)). 실행 유닛(1360)은 3개의 혼합 스칼라 및 벡터 유닛(1362, 1364, 및 1372); 로드 유닛(1366); 저장 어드레스 유닛(1368); 저장 데이터 유닛(1370)을 포함한다. 로드 유닛(1366), 저장 어드레스 유닛(1368), 및 저장 데이터 유닛(1370)은 메모리 유닛(1315)의 데이터 TLB 유닛(1352)에 각각 더 결합된다.
메모리 유닛(1315)은 데이터 TLB 유닛(1352)에 결합되는 제 2 레벨 TLB 유닛(1346)을 포함한다. 데이터 TLB 유닛(1352)은 L1 데이터 캐시 유닛(1354)에 결합된다. L1 데이터 캐시 유닛(1354)은 L2 캐시 유닛(1348)에 더 결합된다. 일부 실시예에서, L2 캐시 유닛(1348)은 메모리 유닛(1315) 내부 및/또는 외부의 L3 및 더 높은 캐시 유닛(1350)에 더 결합된다.
예시로서, 예시적인 비순차 아키텍처는 다음의 프로세스 파이프라인을 구현할 수 있다: 1) 명령 페치 및 프리디코드 유닛(1328)은 페치 및 길이 디코딩 단계를 행함, 2) 디코딩 유닛(1332)은 디코딩 단계를 행함, 3) 리네임/할당 유닛(1356)은 할당 단계 및 리네임밍 단계를 행함, 4) 통합 스케줄러(1358)는 스케줄 단계를 행함, 5) 물리 레지스터 파일 유닛(1376), 리오더 버퍼 유닛(1378), 및 메모리 유닛(1315)은 레지스터 읽기/메모리 읽기 단계를 행함; 실행 유닛(1360)은 실행/데이터 변환 단계를 행함; 6) 메모리 유닛(1315) 및 리오더 버퍼 유닛(1378)은 다시 쓰기/메모리 쓰기 단계를 행함; 7) 리타이어먼트 유닛(1374)은 ROB 읽기 단계를 행함, 8) 다양한 유닛이 예외 처리 단계(9164)와 관련됨; 및 9) 리타이어먼트 유닛(1374) 및 물리 레지스터 파일 유닛(1376)은 커밋 단계를 행함.
예시적인 싱글 코어 및 멀티코어 프로세서 - 도 18
도 18은 본 발명의 실시예에 따른 통합 메모리 컨트롤러 및 그래픽을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서(1800)의 블록도이다. 도 18의 실선 박스는 싱글 코어(1802A), 시스템 에이전트(1810), 하나 이상의 버스 컨트롤러 유닛(1816)의 세트를 갖는 프로세서(1800)를 나타내는 반면, 점선 박스의 옵션적 추가는 다수의 코어(1802A-N), 시스템 에이전트 유닛(1810) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)의 세트, 및 통합 그래픽 로직(1808)을 갖는 대안적인 프로세서(1800)를 나타낸다.
메모리 계층은 코어, 세트 또는 하나 이상의 공유 캐시 유닛(1806), 및 통합 메모리 컨트롤러 유닛(1814)에 결합된 외부 메모리(도시 생략) 내의 하나 이상의 캐시 레벨을 포함한다. 공유 캐시 유닛(1806)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 캐시 레벨 등의 하나 이상의 중간 레벨 캐시, 다른 캐시 레벨, LLC(last level cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서 링 기반의 상호 접속 유닛(1812)은 통합 그래픽 로직(1808), 공유 캐시 유닛(1806)의 세트, 및 시스템 에이전트 유닛(1810)을 상호 연결하는 반면, 대안적인 실시예는 이러한 유닛을 상호 연결 하는 공지의 임의의 여러 기술을 이용할 수 있다.
일부 실시예에서, 하나 이상의 코어(1802A-N)는 다중 스레딩이 가능하다. 시스템 에이전트(1810)는 코어(1802A-N)를 협업시키고 운영하는 컴포넌트를 포함한다. 시스템 에이전트 유닛(1810)은, 예를 들면 전원 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어(1802A-N) 및 통합 그래픽 로직(1808)의 전원 상태를 조정하는 데 필요한 로직 및 컴포넌트일 수 있거나 그를 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 연결된 디스플레이를 구동하기 위한 것이다.
코어(1802A-N)는 아키텍처 및/또는 명령 세트의 관점에서 동종 또는 이종일 수 있다. 예를 들면, 코어(1802A-N)의 일부는 순차적일 수 있는(예를 들면, 도 12(a) 및 도 12(b)에 나타낸 바와 같음) 반면, 다른 것은 비순차적일 수 있다(예를 들면, 도 13에 나타낸 바와 같음). 다른 예로서, 코어(1802A-N)의 2개 이상이 동일한 명령 세트를 실행할 수 있는 반면, 다른 것은 해당 명령 세트 또는 다른 명령 세트의 서브세트만을 실행할 수 있다. 코어의 적어도 하나는 본원에 기재된 벡터 친화 명령 포맷을 실행할 수 있다.
프로세서는 캘리포니아 산타 클라라의 인텔사로부터 입수 가능한 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™, 또는 Itanium™ 프로세서 등의 범용 프로세서일 수 있다. 대안적으로, 프로세서는 다른 회사의 것일 수 있다. 프로세서는, 예를 들면 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 보조 프로세서, 임베디드 프로세서 등의 특수 목적 프로세서일 수 있다. 프로세서는 1개 이상의 칩에 구현될 수 있다. 프로세서(1800)는 일부일 수 있거나 및/또는 예를 들면 BiCMOS, CMOS, 또는 NMOS 등의 다수의 프로세스 기술의 어느 것을 이용하여 하나 이상의 기판에 구현될 수 있다.
예시적인 컴퓨터 시스템 및 프로세서 - 도 14 내지 도 17
도 14 내지 도 16은 프로세서(1800)를 포함하는 데 적합한 예시적인 시스템을 나타내는 한편, 도 17은 하나 이상의 코어(1802)를 포함할 수 있는 예시적인 시스템온칩(SoC)이다. 랩톱, 데스크톱, 핸드헬드 PC, PDA, 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSP), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 컨트롤러, 휴대 전화, 휴대용 미디어 플레이어, 핸드헬드 디바이스 및 기타 다양한 전자 디바이스로 당업자에게 알려진 다른 시스템 설계 및 구성이 또한 적합하다. 일반적으로, 본원에 개시된 프로세서 및/또는 다른 실행 로직을 내포할 수 있는 매우 다양한 시스템 및 전자 디바이스가 일반적으로 적합하다.
이하 도 14를 참조하면, 본 발명의 일 실시예에 따른 시스템(1400)의 블록도가 나타나 있다. 시스템(1400)은, 그래픽 메모리 컨트롤러 허브(GMCH)(1420)에 결합되는 하나 이상의 프로세서(1410, 1415)를 포함할 수 있다. 추가적 프로세서(1415)의 옵션 성질은 점선으로 도 14에 나타나 있다.
각 프로세서(1410, 1415)는 프로세서(1800)의 일부 버전일 수 있다. 그러나, 통합 그래픽 로직 및 통합 메모리 제어 유닛은 프로세서(1410, 1415)에 존재하지 않을 수 있음을 유의한다.
도 14는, 예를 들면 동적 랜덤 액세스 메모리(DRAM)일 수 있는 메모리(1440)에 GMCH(1420)가 결합될 수 있음을 도시하고 있다. DRAM은 적어도 하나의 실시예에서 비휘발성 캐시와 연관될 수 있다.
GMCH(1420)는 칩셋 또는 칩셋의 일부일 수 있다. GMCH(1420)는 프로세서(들)(1410, 1415)와 통신할 수 있고 프로세서(1410, 1415) 및 메모리(1440) 사이의 상호 작용을 제어할 수 있다. GMCH(1420)는 프로세서(들)(1410, 1415) 및 시스템(1400)의 다른 요소간의 가속 버스 인터페이스로서 역할을 할 수도 있다. 적어도 하나의 실시예에서, GMCH(1420)는 프론트사이드 버스(FSB)(1495) 등의 멀티 드롭 버스를 통해 프로세서(들)(1410, 1415)와 통신한다.
또한, GMCH(1420)는 디스플레이(1445)(예를 들면, 평판 디스플레이 등)에 결합된다. GMCH(1420)는 통합 그래픽 가속기를 포함할 수 있다. GMCH(1420)는 시스템(1400)에 다양한 주변 디바이스를 연결하는 데 이용될 수 있는 입력/출력(I/O) 컨트롤러 허브(ICH)(1450)에 더 결합된다. 예를 들면, 도 14의 실시예에서는, 다른 주변 디바이스(1470)와 함께 ICH(1450)에 결합된 이산 그래픽 디바이스일 수 있는 외부 그래픽 디바이스(1460)가 나타나 있다.
대안, 추가 또는 다른 프로세서가 또한 시스템(1400)에 존재할 수 있다. 예를 들면, 추가 프로세서(들)(1415)는 프로세서(1410)와 동일한 추가적인 프로세서(들), 프로세서(1410)와 이종 또는 비대칭인 추가 프로세서(들), 가속기(예를 들면, 그래픽 가속기 또는 디지털 신호 처리(DSP) 유닛), 필드 프로그래머블 게이트 어레이, 또는 임의의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로아키텍처, 열, 전력소비 특성 등을 포함하는 다양한 장점의 메트릭의 관점에서 물리적 리소스(1410, 1415) 사이에 다양한 차이가 있을 수 있다. 이들 차이는 효과적으로 처리 요소(1410, 1415) 사이에 비대칭 및 이종으로서 나타날 수 있다. 적어도 하나의 실시예에서, 다양한 처리 요소(1410, 1415)가 동일한 다이 패키지에 있을 수 있다.
이하 도 15를 참조하면, 본 발명의 실시예에 따른 제 2 시스템(1500)의 블록도가 나타나 있다. 도 15에 나타낸 바와 같이, 다중 프로세서 시스템(1500)은 포인트 투 포인트 상호 연결 시스템이며 포인트 투 포인트 상호 연결(1550)을 통해 결합된 제 1 프로세서(1570) 및 제 2 프로세서(1580)를 포함한다. 도 15에 나타낸 바와 같이, 프로세서(1570 및 1580) 각각은 프로세서(1800)의 일부 버전일 수 있다.
대안적으로, 하나 이상의 프로세서(1570, 1580)는, 예를 들면 가속기 또는 필드 프로그래머블 게이트 어레이 등의 프로세서 이외의 요소일 수 있다.
2개의 프로세서(1570, 1580)만으로 나타나 있지만, 본 발명의 범위는 이에 한정되는 것은 아님을 이해할 것이다. 다른 실시예에서, 하나 이상의 추가 처리 요소가 주어진 프로세서에 존재할 수 있다.
프로세서(1570)는 또한 통합 메모리 컨트롤러 허브(IMC)(1572) 및 포인트 투 포인트(P-P) 인터페이스(1576 및 1578)를 더 포함할 수 있다. 마찬가지로, 제 2 프로세서(1580)는 IMC(1582) 및 P-P 인터페이스(1586 및 1588)를 포함할 수 있다. 프로세서(1570, 1580)는 PtP 인터페이스 회로(1578, 1588)를 이용하여 포인트 투 포인트(PtP)인터페이스(1550)를 통해 데이터를 교환할 수 있다. 도 15에 나타낸 바와 같이, IMC(1572 및 1582)는 각각의 프로세서에 로컬 부착되는 메인 메모리의 부분일 수 있는 각각의 메모리, 즉 메모리(1542) 및 메모리(1544)에 프로세서를 결합한다.
프로세서(1570, 1580)는 칩셋(1590)과, 개별 P-P 인터페이스(1552, 1554)를 통해 포인트 투 포인트 인터페이스 회로(1576, 1594, 1586, 1598)를 이용하여 데이터를 교환할 수 있다. 칩셋(1590)은 또한 고성능 그래픽 인터페이스(1539)를 통해 고성능 그래픽 회로(1538)와 데이터를 교환할 수 있다.
공유 캐시(도시 생략)는 두 프로세서 외부의 어느 하나의 프로세서에 포함될 수 있지만, P-P 상호 연결을 통해 프로세서와 연결되어서, 프로세서의 로컬 캐시 정보의 어느 하나 또는 양쪽은 프로세서가 저전력 모드에 있을 경우 공유 캐시에 저장될 수 있다.
칩셋(1590)은 인터페이스(1596)를 통해 제 1 버스(1516)에 결합될 수 있다. 일 실시예에서, 제 1 버스(1516)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI Express 버스 또는 다른 제 3 세대 I/O 상호 연결 버스 등의 버스일 수 있지만, 본 발명의 범위는 그에 한정되는 것은 아니다.
도 15에 나타낸 바와 같이, 다양한 I/O 디바이스(1514)는 제 1 버스(1516)를 제 2 버스(1520)에 결합하는 버스 브리지(1518)와 함께 제 1 버스(1516)에 결합될 수 있다. 일 실시예에서, 제 2 버스(1520)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 키보드/마우스(1522), 통신 디바이스(1526), 및 코드(1530)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스 등의 데이터 저장소(1528)를 포함하는 다양한 디바이스가 제 2 버스(1520)에 결합될 수 있다. 또한, 오디오 I/O(1524)는 제 2 버스(1520)에 결합될 수 있다. 다른 아키텍처가 가능함을 유의한다. 예를 들면, 도 15의 포인트 투 포인트 아키텍처를 대신하여, 시스템은 멀티 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 16을 참조하면, 본 발명의 실시예에 따른 제 3 시스템(1600)의 블록도가 나타나 있다. 도 15 및 도 16의 동일한 요소는 동일한 참조 부호를 갖는 한편, 도 15의 특정 양태는 도 16의 다른 양태를 모호하게 하는 것을 방지하기 위해 도 16에서 생략되어 있다.
도 16은 처리 요소(1570, 1580)가 각각 통합 메모리 및 I/O 제어 로직("CL")(1572 및 1582)을 포함할 수 있다. 적어도 일 실시예에서, CL(1572, 1582)은 도 9 및 도 15와 관련하여 상술한 바와 같은 메모리 컨트롤러 허브 로직(IMC)을 포함할 수 있다. 또한, CL(1572, 1582)은 또한 I/O 제어 로직을 포함할 수 있다. 도 16은, 메모리(1542, 1544)가 CL(1572, 1582)에 결합될뿐만 아니라 I/O 디바이스(1614)는 또한 제어 로직(1572, 1582)에 결합되는 것이 나타나 있다. 레거시 I/O 디바이스(1615)는 칩셋(1590)에 결합된다.
이하 도 17을 참조하면, 본 발명의 실시예에 따른 SoC(1700)의 블록도가 나타나 있다. 유사한 요소는 유사한 참조 부호가 부여된다. 또한, 점선 박스는 보다 고급 SoC의 옵션 특징이다. 도 17에서, 하나 이상의 코어(1802A-N) 및 공유 캐시 유닛(들)(1806)의 세트를 포함하는 애플리케이션 프로세서(1710); 시스템 에이전트 유닛(1810); 버스 컨트롤러 유닛(들)(1816); 통합 메모리 컨트롤러 유닛(들)(1814); 통합 그래픽 로직(1808), 스틸 및/또는 비디오 카메라 기능을 제공하는 이미지 프로세서(1724), 하드웨어 오디오 가속을 제공하는 오디오 프로세서(1726), 및 비디오 인코드/디코드 가속을 제공하는 비디오 프로세서(1728)을 포함할 수 있는 세트 또는 하나 이상의 미디어 프로세서(1720); SRAM(static random access memory) 유닛(1730); DMA(direct memory access) 유닛(1732); 및 하나 이상의 외부 디스플레이에 결합하는 디스플레이 유닛(1740)에 상호 연결 유닛(들)(1702)이 결합된다.
본원에 개시되는 메커니즘의 실시예는 하드웨어, 소프트웨어, 펌웨어, 또는 그러한 구현 접근법의 조합으로 구현될 수 있다. 본 발명의 실시예는, 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 기억 소자를 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래머블 시스템에서 실행되는 컴퓨터 프로그램 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는 본원에 기술된 기능을 행하고 출력 정보를 생성하도록 입력 데이터에 적용될 수 있다. 출력 정보는 공지의 방법으로 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적을 위해, 처리 시스템은, 예를 들면 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC), 또는 마이크로프로세서 등의 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하도록 고도의 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 필요할 경우 프로그램 코드는 또한 어셈블리 또는 기계 언어로 구현될 수 있다. 사실, 본원에 기술된 메커니즘은 임의의 특정 프로그래밍 언어로 범위가 한정되지 않는다. 임의의 경우에, 언어는 컴파일 언어 또는 인터프리트 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는 기계 판독 시 기계가 로직을 만들어 본원에 기술된 기술을 행하게 하는 프로세서 내에 다양한 로직을 나타내는 기계 판독 가능한 매체에 저장된 대표 명령에 의해 구현될 수 있다. "IP 코어"라는 이러한 표현은 유형의 기계 판독 가능 매체에 저장되고 다양한 고객 또는 제조 설비에 제공되어 실제 로직 또는 프로세서를 만드는 제조 기계에 로드될 수 있다.
이러한 기계 판독 가능 저장 매체는, 제한되지 않고, 하드 디스크, 플로피 디스크, 광디스크(CD-ROM, CD-RW), 및 광자기 디스크를 포함하는 임의의 다른 유형의 디스크를 포함하는 저장 매체, DRAM, SRAM, EPROM, 플래시 메모리, EEPROM 등의 ROM, RAM 같은 반도체 디바이스, 자기 또는 광학 카드, 또는 전자 명령을 저장하는 데 적합한 임의의 다른 유형의 매체를 포함하는 기계 또는 디바이스에 의해 제조 또는 형성되는 제품의 비일시적인 유형의 배치를 포함할 수 있다.
따라서, 본 발명의 실시예는 본원에서 설명되는 구조, 회로, 장치, 프로세서 및/또는 시스템 특징을 규정하는, HDL(Hardware Description Language) 등의 벡터 친화 명령 포맷 또는 설계 데이터를 포함하는 비일시적인 유형의 기계 판독 가능 매체를 포함할 수 있다. 그 구현을 또한 프로그램 제품이라 할 수 있다.
일부 경우에, 명령 컨버터는 소스 명령 세트로부터 타겟 명령 세트로 명령을 변환하는 데 이용될 수 있다. 예를 들면, 명령 컨버터는 명령을 코어에 의해 처리될 하나 이상의 다른 명령으로 변환(예를 들면, 정적 바이너리 변환, 동적 컴파일을 포함하는 동적 바이너리 변환을 이용함), 모핑, 에뮬레이션, 또는 달리 변환할 수 있다. 명령 컨버터는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 실시될 수 있다. 명령 컨버터는 온 프로세서, 오프 프로세서, 또는 부분적으로 온 프로세서, 오프 프로세서일 수 있다.
도 19는 본 발명의 실시예에 따른 소스 명령 세트의 바이너리 명령을 타겟 명령 세트의 바이너리 명령으로 변환하는 소프트웨어 명령 컨버터의 이용을 대조하는 블록도이다. 예시된 실시예에서, 명령 컨버터는 소프트웨어 명령 컨버터이지만, 대체하여 명령 컨버터는 소프트웨어, 펌웨어, 하드웨어, 또는 그것의 다양한 조합으로 구현될 수 있다. 도 19는, 고급 언어(1902)의 프로그램이 적어도 하나의 x86 명령 세트 코어(1916)를 갖는 프로세서에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(1906)를 생성하도록 x86 컴파일러(1904)를 이용하여 컴파일된다(컴파일된 일부 명령은 벡터 친화 명령 포맷인 것을 상정). 적어도 하나의 x86 명령 세트 코어(1916)를 갖는 프로세서는, 적어도 하나의 x86 명령 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령 세트 코어의 명령 세트의 실질적인 부분 또는 (2) 적어도 하나의 x86 명령 세트 코어를 갖는 인텔 프로세서에서 실행되는 대상의 애플리케이션 또는 다른 소프트웨어의 오브젝트 코드 버전을 호환 가능하게 실행하거나 달리 처리함으로써 적어도 하나의 x86 명령 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능을 행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1904)는, 추가 제휴 처리의 유무에 관계없이 적어도 하나의 x86 명령 세트 코어(1916)를 갖는 프로세서에서 실행될 수 있는 x86 바이너리 코드(1906)(예를 들면, 오브젝트 코드)를 생성하도록 작동 가능한 컴파일러를 나타낸다. 마찬가지로, 도 19는, 적어도 하나의 x86 명령 세트 코어(1914) 없는 프로세서(캘리포니아 서니베일의 MIPS Technologies의 MIPS 명령 세트를 실행하거나, 및/또는 캘리포니아 서니베일의 ARM Holdings의 ARM 명령 세트를 실행하는 코어를 갖는 프로세서)에 의해 기본적으로 실행될 수 있는 대안적인 명령 세트 바이너리 코드(1910)을 생성하도록 고급 언어(1902)의 프로그램이 대안적인 명령 세트 컴파일러(1908)를 이용하여 컴파일될 수 있는 것이 나타나 있다. 명령 컨버터(1912)는 x86 바이너리 코드(1906)를 x86 명령 세트 코어(1914) 없는 프로세서에 의해 기본적으로 실행될 수 있는 코드로 변환하는 데 이용된다. 이 변환된 코드는 대안적인 명령 세트 바이너리 코드(1910)와 동일하지 않을 수 있으며, 이는 이것이 가능한 명령 컨버터가 이루기에 곤란할 수 있기 때문이지만, 변환된 코드는 일반적인 연산을 달성할 수 있고 대안적인 명령 세트로부터의 명령으로 구성될 것이다. 따라서, 명령 컨버터(1912)는, 에뮬레이션, 시뮬레이션, 또는 임의의 다른 프로세스를 통해, x86 명령 세트 프로세서 또는 코어가 없는 프로세서 또는 다른 전자 디바이스가 x86 바이너리 코드(1906)를 실행하게 할 수 있는 소프트웨어, 펌웨어, 하드웨어, 또는 그 조합을 나타낸다.
본원에 개시된 벡터 친화 명령 포맷의 명령(들)의 특정 연산은 하드웨어 컴포넌트에 의해 행해질 수 있고 회로 또는 다른 하드웨어 컴포넌트가 연산을 행하는 명령으로 프로그래밍되게 하거나 결과적으로 그렇게 하는 데 이용되는 기계 실행 가능한 명령에 구현될 수 있다. 회로는 단지 몇몇 예를 명명하는 범용 또는 특수 목적용 프로세서, 또는 로직 회로를 포함할 수 있다. 연산은 또한 옵션으로 하드웨어 및 소프트웨어의 조합으로 행해질 수 있다. 실행 로직 및/또는 프로세서는 명령 특정 결과 피연산자를 저장하도록 기계 명령으로부터 얻은 기계 명령 또는 하나 이상의 제어 신호에 응답하여 특정 또는 특별한 회로 또는 다른 로직을 포함할 수 있다. 예를 들면, 본원에 개시된 명령(들)의 실시예는 도 14 내지 도 17의 하나 이상의 시스템에서 실행될 수 있고, 벡터 친화 명령 포맷의 명령(들)의 실시예는 시스템에서 실행되는 프로그램 코드로 저장될 수 있다. 또한, 이들 특징의 처리 요소는 본원에서 상세히 설명하는 구체적 파이프라인 및/또는 아키텍처(예를 들면, 순차 및 비순차 아키텍처) 중 하나를 이용할 수 있다. 예를 들면, 순차 아키텍처의 디코드 유닛은 명령(들)을 디코딩하고 디코딩된 명령을 벡터 또는 스칼라 유닛 등에 전할 수 있다.
상술한 설명은 본 발명의 바람직한 실시예를 예시하는 것을 의도하고 있다. 상기 설명으로부터, 특히 성장이 빠르고 추가적인 진전이 쉽게 예견되지 않은 기술 영역에서 본 발명은 첨부된 특허청구범위의 범주 및 그에 상당하는 것 내에서 본 발명의 원리에서 벗어나지 않고 당업자에 의해 배치 및 세부에서 변경될 수 있음은 자명할 것이다. 예를 들면, 방법의 하나 이상의 동작은 조합 또는 더 나눠질 수 있다.
대안적인 실시예
기본적으로 벡터 친화 명령 포맷을 실행하는 실시예를 설명했지만, 본 발명의 대안적인 실시예는 다른 명령어 세트를 실행하는 프로세서(예를 들면, 캘리포니아 서니베일의 MIPS Technologies의 MIPS 명령 세트를 실행하는 프로세서, 캘리포니아 서니베일의 ARM Holdings의 ARM 명령 세트를 실행하는 프로세서)에서 실행되는 에뮬레이션층을 통해 벡터 친화 명령 포맷을 실행할 수 있다. 또한, 도면의 흐름도는 본 발명의 특정 실시예에 의해 행해지는 작업의 특정 순서를 나타내고 있지만, 이러한 순서는 예시임을 이해해야 한다(예를 들면, 대안적인 실시예는 다른 순서로 작업을 행하고, 특정 작업을 조합하고, 특정 작업을 오버랩 등을 할 수 있음).
상술한 기재에서, 설명의 목적으로, 많은 특정 세부가 본 발명의 실시예의 철저한 이해를 제공하기 위해 제시되었다. 그러나, 하나 이상의 다른 실시예가 이러한 특정 세부의 일부 없이 실시될 수 있음은 당업자에게 명백할 것이다. 기재된 특정 실시예는 본 발명을 한정하기 위해 제공되는 것이 아니라, 본 발명의 실시예를 예시하기 위해 제공된다. 본 발명의 범위는 다음의 상기 제공된 특정 예에 의해 정해지는 것이 아니라 특허청구범위에 의해서만 정해진다.

Claims (20)

  1. 컴퓨터 프로세서에서 JKZD 명령(a jump near if the writemask is zero instruction)을 실행하는 방법으로서,
    쓰기마스크 피연산자(writemask operand) 및 상대 오프셋(relative offset)을 포함하는 JKZD 명령을 페치(fetch)하는 단계와,
    페치된 JKZD 명령을 디코딩하는 단계와,
    상기 쓰기마스크의 모든 비트가 제로일 경우 타겟 명령의 어드레스로 조건부 점프하도록 상기 페치된 JKZD 명령을 실행하는 단계 ― 상기 타겟 명령의 어드레스는 상기 JKZD 명령의 명령 포인터 및 상기 상대 오프셋을 이용하여 계산됨 ― 를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 쓰기마스크는 16 비트 레지스터인
    방법.
  3. 제 1 항에 있어서,
    상기 상대 오프셋은 8 비트 이미디어트(immediate) 값인
    방법.
  4. 제 1 항에 있어서,
    상기 상대 오프셋은 32 비트 이미디어트 값인
    방법.
  5. 제 1 항에 있어서,
    상기 JKZD 명령의 명령 포인터가 EIP 레지스터에 저장되는
    방법.
  6. 제 1 항에 있어서,
    상기 JKZD 명령의 명령 포인터가 RIP 레지스터에 저장되는
    방법.
  7. 제 1 항에 있어서,
    상기 실행하는 단계는,
    상기 JKZD 명령의 명령 포인터 및 상기 상대 오프셋의 합인 임시 명령 포인터(temporary instruction pointer)를 생성하는 단계와,
    상기 임시 명령 포인터가 JKZD 명령을 포함하는 프로그램의 코드 세그먼트 제한 밖이 아닐 경우 상기 임시 명령 포인터를 상기 타겟 명령의 어드레스가 되도록 설정하는 단계와,
    상기 임시 명령 포인터가 JKZD 명령을 포함하는 프로그램의 코드 세그먼트 제한 밖일 경우 상기 임시 명령 포인터가 타겟 명령 어드레스가 될 때 폴트(fault)를 생성하는 단계를 더 포함하는
    방법.
  8. 제 7 항에 있어서,
    상기 실행하는 단계는,
    상기 임시 명령 포인터가 상기 JKZD 명령을 포함하는 프로그램의 코드 세그먼트 제한의 밖이 아닐 경우 상기 임시 명령 포인터를 상기 타겟 명령의 어드레스가 되도록 설정하기에 앞서 상기 JKZD 명령의 피연산자 크기가 16 비트일 경우 상기 임시 명령 포인터의 상위 2 바이트를 클리어하는 단계를 더 포함하는
    방법.
  9. 컴퓨터 프로세서에서 JKNZD 명령(a jump near if the writemask is not zero instruction)을 실행하는 방법으로서,
    쓰기마스크 피연산자 및 상대 오프셋을 포함하는 JKNZD 명령을 페치(fetch)하는 단계와,
    페치된 JKNZD 명령을 디코딩하는 단계와,
    상기 쓰기마스크의 적어도 하나의 비트가 제로가 아닐 경우 타겟 명령의 어드레스로 조건부 점프하도록 상기 페치된 JKNZD 명령을 실행하는 단계 ― 상기 타겟 명령의 어드레스는 상기 JKNZD 명령의 명령 포인터 및 상기 상대 오프셋을 이용하여 계산됨 ― 를 포함하는
    방법.
  10. 제 9 항에 있어서,
    상기 쓰기마스크는 16 비트 레지스터인
    방법.
  11. 제 9 항에 있어서,
    상기 상대 오프셋은 8 비트 이미디어트 값인
    방법.
  12. 제 9 항에 있어서,
    상기 상대 오프셋은 32 비트 이미디어트 값인
    방법.
  13. 제 9 항에 있어서,
    상기 JKNZD 명령의 명령 포인터가 EIP 레지스터에 저장되는
    방법.
  14. 제 9 항에 있어서,
    상기 JKNZD 명령의 명령 포인터가 RIP 레지스터에 저장되는
    방법.
  15. 제 9 항에 있어서,
    상기 실행하는 단계는,
    상기 JKNZD 명령의 명령 포인터와 상기 상대 오프셋의 합인 임시 명령 포인터를 생성하는 단계와,
    상기 임시 명령 포인터가 JKNZD 명령을 포함하는 프로그램의 코드 세그먼트 제한 밖이 아닐 경우 상기 타겟 명령의 어드레스가 되도록 상기 임시 명령 포인터를 설정하는 단계와,
    상기 임시 명령 포인터가 JKNZD 명령을 포함하는 프로그램의 코드 세그먼트 제한 밖일 경우 상기 임시 명령 포인터가 타겟 명령 어드레스가 될 때 폴트를 생성하는 단계를 더 포함하는
    방법.
  16. 제 15 항에 있어서,
    상기 실행하는 단계는,
    상기 임시 명령 포인터가 상기 JKNZD 명령을 포함하는 프로그램의 코드 세그먼트 제한의 밖이 아닐 경우 상기 임시 명령 포인터를 상기 타겟 명령의 어드레스가 되도록 설정하기에 앞서 상기 명령의 피연산자 크기가 16 비트일 경우 상기 임시 명령 포인터의 상위 2 바이트를 클리어하는 단계를 더 포함하는
    방법.

  17. JKZD 명령(a jump near if the writemask is zero) ― 상기 JKNZD 명령은 제 1 쓰기마스크 연산자 및 제 1 상대 오프셋을 포함함 ― 및 JKNZD 명령(a jump near if the writemask is not zero) ― 상기 JKNZD 명령은 제 2 쓰기마스크 피연산자 및 제 2 상대 오프셋을 포함함 ― 을 디코딩하는 하드웨어 디코더와,
    디코딩된 JKZD 및 JKNZD 명령을 실행하는 실행 로직을 포함하고,
    상기 디코딩된 JKZD 명령의 실행은 상기 제 1 쓰기마스크의 모든 비트가 제로일 경우 제 1 타겟 명령의 어드레스로의 조건부 점프를 일으키고, 상기 제 1 타겟 명령의 어드레스는 상기 JKZD 명령의 명령 포인터 및 상기 제 1 상대 오프셋을 이용하여 계산되고,
    상기 디코딩된 JKNZD 명령의 실행은 상기 제 2 쓰기마스크의 적어도 하나의 비트가 제로가 아닐 경우 제 2 타겟 명령의 어드레스로의 조건부 점프를 일으키고, 상기 제 2 타겟 명령의 어드레스는 상기 JKNZD 명령의 명령 포인터 및 상기 제 2 상대 오프셋을 이용하여 계산되는
    장치.
  18. 제 18 항에 있어서,
    상기 실행 로직은 벡터 실행 로직을 포함하는
    장치.
  19. 제 18 항에 있어서,
    상기 JKZD 및 상기 JKNZD의 쓰기마스크는 전용의 16 비트 레지스터인
    장치.
  20. 제 18 항에 있어서,
    상기 JKZD 및 상기 JKNZD 명령의 명령 포인터가 EIP 레지스터에 저장되는
    장치.
KR1020137026009A 2011-04-01 2011-12-12 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법 KR101618669B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/078,901 US20120254593A1 (en) 2011-04-01 2011-04-01 Systems, apparatuses, and methods for jumps using a mask register
US13/078,901 2011-04-01
PCT/US2011/064487 WO2012134561A1 (en) 2011-04-01 2011-12-12 Systems, apparatuses, and methods for jumps using a mask register

Publications (2)

Publication Number Publication Date
KR20130140143A true KR20130140143A (ko) 2013-12-23
KR101618669B1 KR101618669B1 (ko) 2016-05-09

Family

ID=46928903

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137026009A KR101618669B1 (ko) 2011-04-01 2011-12-12 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법

Country Status (8)

Country Link
US (1) US20120254593A1 (ko)
JP (1) JP5947879B2 (ko)
KR (1) KR101618669B1 (ko)
CN (1) CN103718157B (ko)
DE (1) DE112011105123T5 (ko)
GB (1) GB2502754B (ko)
TW (1) TWI467478B (ko)
WO (1) WO2012134561A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101595637B1 (ko) * 2011-04-01 2016-02-18 인텔 코포레이션 벡터 친숙형 명령어 형식 및 그의 실행
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
EP2883133A4 (en) * 2012-08-08 2016-03-23 Intel Corp ISA BREAKDOWN WITH SUPPORT FOR VIRTUAL CALL TO OVERRIDING FEATURES
WO2014109109A1 (ja) * 2013-01-11 2014-07-17 日本電気株式会社 インデックスキー生成装置及びインデックスキー生成方法並びに検索方法
US9207942B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses,and methods for zeroing of bits in a data element
US9411600B2 (en) * 2013-12-08 2016-08-09 Intel Corporation Instructions and logic to provide memory access key protection functionality
US9715432B2 (en) * 2014-12-23 2017-07-25 Intel Corporation Memory fault suppression via re-execution and hardware FSM
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
CN117591184B (zh) * 2023-12-08 2024-05-07 超睿科技(长沙)有限公司 Risc-v向量压缩乱序执行的实现方法及装置

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4084226A (en) * 1976-09-24 1978-04-11 Sperry Rand Corporation Virtual address translator
JPS57101938A (en) * 1980-12-18 1982-06-24 Fujitsu Ltd Operation controlling system by first read of mask
JP2928680B2 (ja) * 1992-03-30 1999-08-03 株式会社東芝 複合条件処理方式
JPH0683858A (ja) * 1992-06-02 1994-03-25 Nec Corp ベクトル命令処理装置
JP3565314B2 (ja) * 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
US20100274988A1 (en) * 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
TWI244035B (en) * 2004-01-30 2005-11-21 Ip First Llc A mechanism and a microprocessor apparatus for performing an indirect near jump operation
US7409535B2 (en) * 2005-04-20 2008-08-05 International Business Machines Corporation Branch target prediction for multi-target branches by identifying a repeated pattern
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
TWI379230B (en) * 2008-11-14 2012-12-11 Realtek Semiconductor Corp Instruction mode identification apparatus and instruction mode identification method
US9952864B2 (en) * 2009-12-23 2018-04-24 Intel Corporation System, apparatus, and method for supporting condition codes

Also Published As

Publication number Publication date
CN103718157B (zh) 2017-05-24
GB2502754B (en) 2020-09-02
JP5947879B2 (ja) 2016-07-06
US20120254593A1 (en) 2012-10-04
JP2014510351A (ja) 2014-04-24
TW201250585A (en) 2012-12-16
GB201316934D0 (en) 2013-11-06
GB2502754A (en) 2013-12-04
TWI467478B (zh) 2015-01-01
CN103718157A (zh) 2014-04-09
KR101618669B1 (ko) 2016-05-09
DE112011105123T5 (de) 2014-03-06
WO2012134561A1 (en) 2012-10-04

Similar Documents

Publication Publication Date Title
JP6109910B2 (ja) メモリ・ソースを宛先レジスタに展開し、ソース・レジスタを宛先メモリ位置に圧縮するためのシステム、装置および方法
CN109471659B (zh) 使用写掩码将两个源操作数混合进单个目的地的系统、装置和方法
JP6274672B2 (ja) 装置および方法
KR101748538B1 (ko) 벡터 인덱싱 메모리 액세스 플러스 산술 및/또는 논리 연산 프로세서들, 방법들, 시스템들 및 명령어들
KR101592079B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
CN107908427B (zh) 用于多维数组中的元素偏移量计算的指令
US9792115B2 (en) Super multiply add (super MADD) instructions with three scalar terms
KR20130140143A (ko) 마스크 레지스터를 이용한 점프를 위한 시스템, 장치, 및 방법
KR20150101994A (ko) 적분 이미지 계산 명령어를 위한 방법 및 장치
KR102462174B1 (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
TW201823974A (zh) 執行置換運算的處理器及具有該處理器的電腦系統
US9946541B2 (en) Systems, apparatuses, and method for strided access

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
FPAY Annual fee payment

Payment date: 20190328

Year of fee payment: 4