KR20140113537A - 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들 - Google Patents

단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들 Download PDF

Info

Publication number
KR20140113537A
KR20140113537A KR1020140030310A KR20140030310A KR20140113537A KR 20140113537 A KR20140113537 A KR 20140113537A KR 1020140030310 A KR1020140030310 A KR 1020140030310A KR 20140030310 A KR20140030310 A KR 20140030310A KR 20140113537 A KR20140113537 A KR 20140113537A
Authority
KR
South Korea
Prior art keywords
data value
source operand
operand
data
value
Prior art date
Application number
KR1020140030310A
Other languages
English (en)
Other versions
KR101539173B1 (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 KR20140113537A publication Critical patent/KR20140113537A/ko
Application granted granted Critical
Publication of KR101539173B1 publication Critical patent/KR101539173B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • 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/3001Arithmetic 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/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

오직 하나의 곱셈을 사용해서, 제1 소스 피연산자의 데이터 값의 제곱, 제2 소스 피연산자의 데이터 값의 제곱, 및 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하기 위한 시스템들, 방법들, 및 장치들이 기술된다.

Description

단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들{SYSTEMS, APPARATUSES, AND METHODS FOR REDUCING THE NUMBER OF SHORT INTEGER MULTIPLICATIONS}
본 발명은 일반적으로 컴퓨터 프로세서 아키텍처에 관한 것으로, 특히, 실행될 때 특정 결과를 야기하는 명령어들에 관한 것이다.
명령어 집합, 또는 명령어 집합 아키텍처(ISA)는 프로그래밍과 관련된 컴퓨터 아키텍처의 일부이며, 네이티브 데이터 타입들, 명령어들, 레지스터 아키텍처, 어드레싱 모드들, 메모리 아키텍처, 인터럽트 및 예외 처리, 및 및 외부 입력 및 출력(I/O)을 포함할 수 있다. 용어 명령어는, 본 명세서에서 일반적으로, - 마이크로-명령어들 또는 마이크로-연산들과 대조적으로 - 매크로-명령어들을 디코딩하는 프로세서의 디코더로부터 야기된 결과를 실행하기 위해 프로세서에게 제공되는 명령어들인 - 매크로-명령어와 관련됨을 주지해야만 한다.
본 발명은 첨부 도면들의 도면들에서 제한이 아니라, 일례로서 도시된 것이고, 도면들에서 유사한 참조 부호들은 유사한 요소들을 나타낸다.
도 1은 SQRMUL 명령어의 일례의 실행을 도시한다.
도 2는 하나의 또는 그 이상의 명령어들을 실행하기 위한 프로세서(프로세서 코어)의 일례의 실시예의 블록도이다.
도 3은 프로세서에서의 SQRMUL 명령어의 실행의 일 실시예를 도시한다.
도 4 및 도 5는 SQRMUL 명령어를 처리하기 위한 방법들의 실시예들을 도시한다.
도 6은 도 4 및 도 5의 흐름들 간에 선택하는 일례의 방법을 도시한다.
도 7은 본 발명의 일 실시예에 따른 레지스터 아키텍처(700)의 블록도이다.
도 8a는 본 발명의 실시예들에 따른 일례의 순차적 파이프라인 및 일례의 레지스터 재명명, 비순차적 발행/실행 파이프라인을 둘 다 도시하는 블록도이다.
도 8b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 일례의 레지스터 재명명, 비순차적 발행/실행 아키텍처 코어를 둘 다 도시하는 블록도이다.
도 9a-9b는 코어가 한 칩 내의 수개의 논리 블록들(동일한 타입 및/또는 상이한 타입들의 다른 코어들을 포함함) 중 하나인, 더 특정한 일례의 순차적 코어 아키텍처의 블록도를 도시한다.
도 10은 본 발명의 실시예들에 따른 하나보다 더 많은 코어를 가질 수 있고, 하나의 통합 메모리 제어기를 가질 수 있으며, 통합 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다.
도 11-14는 일례의 컴퓨터 아키텍처들의 블록도들이다.
도 15는 본 발명의 실시예들에 따른 소스 명령어 집합의 바이너리 명령어들을 목표 명령어 집합의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다.
이하의 설명에서, 다수의 특정 세부 사항들이 기술된다. 그러나, 본 발명의 실시예들은 이러한 특정 세부 사항들 없이 구현될 수 있음을 알 것이다. 다른 실례들에서, 널리 공지된 회로들, 구조들 및 교시들은 본 발명의 이해를 모호하게 하지 않기 위해 상세히 도시되지 않았다.
본 명세서에서 "one embodiment(일 실시예)", "an embodiment(일 실시예)", "an exemple embodiment(일례의 실시예)" 등에 대한 언급들은, 기술된 실시예가 특정 특징, 구조, 또는 특성을 포함할 수 있지만, 모든 실시예가 반드시 특정 특징, 구조, 또는 특성을 포함하는 것은 아닐 수 있음을 나타낸다. 더욱이, 이러한 구절들은 반드시 동일한 실시예를 나타내는 것은 아니다. 또한, 특정 특징, 구조, 또는 특성이 일 실시예와 관련해서 기술될 때, 명백하게 기술되든 기술되지 않든 간에 다른 실시예들과 관련해서 이러한 특징, 구조, 또는 특성에 영향을 주는 것은 당업자가 아는 범위 내에 있다고 제기된다.
개요
명령어 집합 아키텍처는, ISA를 구현하는 프로세서의 내부 설계인, 마이크로아키텍처와 구별된다. 상이한 마이크로아키텍처들을 가진 프로세서들은 공통 명령어 집합을 공유할 수 있다. 예를 들어, Intel Pentium 4 프로세서들, Intel Core 프로세서들, 및 고급 마이크로 장치들(Advanced Micro Devices), 캘리포니아주 써니베일의 회사(Inc. of Sunnyvale CA) 프로세서들은 (더 새로운 버전들에 추가된 일부 확장들을 가진) x86 명령어 집합의 거의 동일한 버전들을 구현하지만, 상이한 내부 설계들을 가진다. 예를 들어, ISA의 동일한 레지스터 아키텍처는, 전용 물리 레지스터들, 레지스터 재명명 메커니즘(예를 들어, 미국 특허 제5,446,912호에 기술된 RAT(Register Alias Table), ROB(Reorder Buffer) 및 회수 레지스터 파일의 사용; 미국 특허 제5,207,132호에 기술된 다중 맵들 및 레지스터들의 풀의 사용) 등을 사용하는 하나의 또는 그 이상의 동적 할당 물리 레지스터들을 포함하는, 널리 공지된 기술들을 사용해서 상이한 마이크로-아키텍처들로 상이한 방법들로 구현될 수 있다. 달리 지시되지 않는 한, 구절들 레지스터 아키텍처, 레지스터 파일, 및 레지스터는 소프트웨어/프로그래머에게 보이는 것이 무엇인지와 명령어들이 레지스터들을 명시하는 방식과 관련된다. 구체적으로 요구되는 경우, 형용사 논리적(logical), 구조적(architectural), 또는 소프트웨어 가시적(software visible)이 레지스터 아키텍처의 레지스터들/파일들을 나타내는데 사용될 것이고, 상이한 형용사들이 소정의 마이크로-아키텍처의 레지스터들(예를 들어, 물리 레지스터, 재배열 버퍼, 회수 레지스터, 레지스터 풀)을 지정하는데 사용될 것이다.
명령어 집합은 하나의 또는 그 이상의 명령어 포맷들을 포함한다. 소정의 명령어 포맷은, 무엇보다, 실행된 연산 및 해당 연산이 실행될 피연산자(들)를 명시하기 위한 각종 필드들(비트들의 수, 비트들의 로케이션)을 정의한다. 소정의 명령어는 소정의 명령어 포맷을 사용해서 표현되고, 연산 및 피연산자들을 명시한다. 명령어 스트림은 명령어들의 특정 시퀀스이며, 시퀀스의 각각의 명령어는 명령어 포맷의 명령어의 발생이다.
과학적, 재정적, 자동-벡터화 범용, RMS(recognition, mining, and synthesis)/비주얼 및 멀티미디어 애플리케이션들(예를 들어, 2D/3D 그래픽, 이미지 프로세싱, 비디오 압축/감압, 음성 인식 알고리즘들 및 오디오 조작)은 종종 다수의 데이터 항목들에 대해 동일한 연산이 실행될 것을 요구한다("데이터 병렬성"이라고 함). 단일 명령어 다중 데이터(SIMD)는 프로세서가 다수의 데이터 항목들에 대해 동일한 연산을 실행하게 야기하는 명령어의 타입을 말한다. SIMD 기술은 레지스터의 비트들을 다수의 고정 크기 데이터 요소들로 논리적으로 분할할 수 있는 프로세서들에 특별히 적합하며, 상기 고정 크기 데이터 요소들 각각은 개별적인 값을 나타낸다. 예를 들어, 64-비트 레지스터의 비트들은, 별개의 16-비트 값을 각각 나타내는, 4개의 별개의 16-비트 데이터 요소들에서 연산될 소스 피연산자로서 지정될 수 있다. 다른 일례로서, 256-비트 레지스터의 비트들은, 4개의 별개의 64-비트 패킹 데이터 요소들(쿼드-워드(Q) 크기 데이터 요소들), 8개의 별개의 32-비트 패킹 데이터 요소들(더블 워드(D) 크기 데이터 요소들), 16개의 별개의 16-비트 패킹 데이터 요소들(워드(W) 크기 데이터 요소들), 또는 32개의 별개의 8-비트 데이터 요소들(바이트(B) 크기 데이터 요소들)에서 연산될 소스 피연산자로서 지정될 수 있다. 이러한 타입의 데이터는 패킹 데이터 타입 또는 벡터 데이터 타입이라고 하며, 이러한 데이터 타입의 피연산자들은 패킹 데이터 피연산자들 또는 벡터 피연산자들이라고 한다. 다시 말해서, 패킹 데이터 항목 또는 벡터는 패킹 데이터 요소들의 시퀀스를 말하고; 패킹 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(패킹 데이터 명령어 또는 벡터 명령어라고도 공지됨)의 소스 또는 목적지 피연산자이다.
예를 들어, 한 타입의 SIMD 명령어는, 동일한 데이터 요소 순서로, 동일한 수의 데이터 요소들을 가진, 동일한 크기의 목적지 벡터 피연산자(결과 벡터 피연산자라고도 함)를 생성하기 위해 수직 방식으로 2개의 소스 벡터 피연산자들에 대해 실행될 단일 벡터 연산을 지정한다. 소스 벡터 피연산자들의 데이터 요소들은 소스 데이터 요소들이라고 하고, 목적지 벡터 피연산자의 데이터 요소들은 목적지 또는 결과 데이터 요소들이라고 한다. 이 소스 벡터 피연산자들은 동일한 크기이고, 동일한 폭의 데이터 요소들을 포함하며, 따라서, 동일한 수의 데이터 요소들을 포함한다. 2개의 소스 벡터 피연산자들의 동일한 비트 위치들의 소스 데이터 요소들은 데이터 요소들의 쌍들을 형성한다(대응 데이터 요소들이라고도 함; 즉, 각각의 소스 피연산자의 데이터 요소 위치 0의 데이터 요소가 대응하고, 각각의 소스 피연산자의 데이터 요소 위치 1의 데이터 요소가 대응하는 등등). 해당 SIMD 명령어에 의해 지정된 연산은 매칭하는 수의 결과 데이터 요소들을 생성하기 위해 소스 데이터 요소들의 쌍들 각각에서 개별적으로 실행되고, 따라서, 소스 데이터 요소들의 각각의 쌍은 대응 결과 데이터 요소를 가진다. 연산이 수직이고 결과 벡터 피연산자가 동일한 크기이며, 동일한 수의 데이터 요소들을 가지고, 결과 데이터 요소들이 소스 벡터 피연산자들과 동일한 데이터 요소 순서로 저장되기 때문에, 결과 데이터 요소들은 소스 벡터 피연산자들의 소스 데이터 요소들의 대응 쌍과 결과 벡터 피연산자의 동일한 비트 위치들에 있다. 일례의 타입의 SIMD 명령어 외에, 각종 다른 타입들의 SIMD 명령어들(예를 들어, 오직 하나의 소스 벡터 피연산자 또는 2보다 더 많은 소스 벡터 피연산자들을 가짐; 수평 방식으로 동작함; 상이한 크기의 데이터 요소들을 가지고/가지거나 상이한 데이터 요소 순서를 가진, 상이한 크기의 결과 벡터 피연산자를 생성함). 용어 목적지 벡터 피연산자(또는 목적지 피연산자)는, 다른 명령어에 의해 (다른 명령어에 의한 동일한 로케이션의 명세에 의해) 소스 피연산자로서 액세스될 수 있도록, 한 로케이션(해당 명령어에 의해 지정된 레지스터 또는 메모리 어드레스)의 해당 목적지 피연산자의 기억을 포함해서, 명령어에 의해 지정된 동작을 실행하는 다이렉트 결과로서 정의됨을 이해해야만 한다.
x86, MMX™, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어들을 포함하는 명령어 집합을 가진 Intel® Core™ 프로세서들에 의해 사용되는 바와 같은 SIMD 기술은 애플리케이션 성능의 상당한 향상을 가능케 했다(Core™ 및 MMX™는 등록 상표들 또는 캘리포니아주 산타 클라라(Santa Clara, Calif.)의 인텔사(Intel Corporation)의 상표들임). AVX(Advanced Vector Extensions)(AVX1 및 AVX2)라고도 하고, VEX 코딩 방식을 사용하는, SIMD 확장들의 추가 집합은 공개 및/또는 발표되었다(예를 들어, 2011년 10월, Intel® 64 및 IA-32 아키텍처 소프트웨어 개발자 매뉴얼(Architectures Software Developers Manual)을 참조하고; 2011년 6월, Intel® AVX 프로그래밍 참고 문헌(Advanced Vector Extensions Programming Reference)를 참조하라).
a2+a*b+b2 및 a[i] = b[i]2의 계산과 같은 일부 규칙적인 수학 연산들은 행렬 및 긴 수 곱셈들에서 꽤 빈번하다. 이러한 수학 연산들은 현대의 CPU들의 레이턴시라는 면에서 여전히 꽤 비싼 많은 곱셈 명령어들을 사용한다. 예를 들어, a, b는 기저가 B인 부호화되지 않은 정수들이라고 하자. a2+a*b+b2 계산을 위한 코드는 다음과 같다
1: a_sq = a*a;
2: a_times_b = a*b;
3: b_sq = b*b;
4: 3개의 곱삼들의 덧셈들.
현대의 CPU들의 경우, 각각의 곱셈은 ∼5 사이클들이 걸려서, 3 곱셈들의 총 레이턴시는 15 사이클이 될 것이다.
일반적으로 명령어 집합의 제곱-곱셈(SQRMUL) 명령어라고 하는 명령어의 실시예들 및 레이턴시를 향상시키는데 사용될 수 있는 시스템들, 아키텍처들, 명령어 포맷들 등의 실시예들이 후술된다. SQRMUL의 실행은 제1 소스 피연산자의 데이터 값의 제곱, 제2 소스 피연산자의 데이터 값의 제곱, 및 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하고, 3개의 모든 계산들을 단일 목적지 피연산자에 저장한다.
도 1은 SQRMUL 명령어의 일례의 실행을 도시한다. 2개의 소스 레지스터들(101 및 103)은 각각 값들 A 및 B를 유지한다. 이 값들은 A2, A*B, 및 B2을 산출하도록 실행 로직(107)에 의해 처리된다. 이 결과들은 목적지 레지스터(105)에 저장된다. 이 레지스터는 범용 레지스터(예를 들어, 더블워드 크기 레지스터) 또는 패킹-데이터 레지스터(계산된 값들을 저장하는데 전용인 데이터 요소 위치들을 가짐)일 수 있다. 특정 순서가 도시되지만, 임의의 다른 순서가 계산된 값들을 저장하는데 사용될 수 있다.
도 2는 하나의 또는 그 이상의 SQRMUL 명령어들(204)을 실행하기 위한 프로세서(프로세서 코어)(200)의 일례의 실시예의 블록도이다. 일부 실시예들에서, 프로세서는 범용 프로세서(예를 들어, 데스크탑, 랩탑, 서버들, 및 유사한 컴퓨터들에서 사용되는 타입)일 수 있다. 대안으로, 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서들의 일례들은, 몇몇 예를 들자면, 네트워크 프로세서들, 통신 프로세서들, 암호화 프로세서들, 그래픽 프로세서들, 코-프로세서들, 내장 프로세서들, 디지털 신호 프로세서들(DSP들), 및 제어기들을 포함하지만, 이들로만 제한되지는 않는다. 프로세서는 전적으로 각종 복합 명령어 집합 컴퓨팅(CISC) 프로세서들, 각종 감소 명령어 집합 컴퓨팅(RISC) 프로세서들, 각종 훨씬 긴 명령어(VLIW) 프로세서들, 각종 하이브리드들, 또는 다른 타입들의 프로세서들 중 임의의 프로세서일 수 있다.
프로세서(200)는 구조적으로-가시적인 레지스터들(예를 들어, 아키텍처 레지스터 파일)(205)을 포함한다. 아키텍처 레지스터들은 또한 본 명세서에서 간단히 레지스터들이라고도 할 수 있다. 달리 지시되거나 명백하지 않는 한, 구절들 아키텍처 레지스터, 레지스터 파일, 및 레지스터는 본 명세서에서 피연산자들을 식별하기 위해 매크로명령어들 또는 어셈블리어 명령어들에 의해 지정된 소프트웨어 및/또는 프로그래머 및/또는 레지스터들에게 보일 수 있는 레지스터들을 나타내는데 사용된다. 이 레지스터들은 소정의 마이크로아키텍처(예를 들어, 명령어들에 의해 사용되는 임시 레지스터들, 재배열 버퍼들, 회수 레지스터들 등)의 다른 비구조적 또는 비구조적으로 가시적인 레지스터들과 대조된다. 레지스터들은 일반적으로 온-디(on-die) 프로세서 기억 로케이션들을 나타낸다. 도시된 아키텍처 레지스터들은 패킹 데이터 레지스터들(206)을 포함한다. 패킹 데이터 레지스터들 각각은 패킹 또는 벡터 데이터를 저장하도록 동작할 수 있다. 도시된 아키텍처 레지스터들은 패킹 데이터 동작 마스크 레지스터들(207)을 또한 포함할 수 있다. 패킹 데이터 동작 마스크 레지스터들 각각은 패킹 데이터 동작 마스크를 저장하도록 동작할 수 있다. 이 레지스터들은 본 설명에서 기입 마스크 레지스터들이라고 할 수 있다. 패킹 데이터 피연산자들은 패킹 데이터 레지스터들(207)에 저장될 수 있다.
프로세서는 또한 실행 로직(208)을 포함한다. 실행 로직은 하나의 또는 그 이상의 SQRMUL 명령어들(204)을 실행 또는 처리하도록 동작한다. 일부 실시예들에서, 실행 로직은 이 명령어들을 실행하기 위한 특정 로직(예를 들어, 특정 회로 또는 펌웨어와 잠재적으로 결합된 하드웨어)을 포함할 수 있다.
SQRMUL 의 일례의 포맷
이 명령어의 일례의 포맷은 "SQRMUL DEST, SOURCE 1, SOURCE2"이며, 여기서, 모든 피연산자들은 레지스터들이다. 일부 실시예들에서, 레지스터들은 범용 레지스터들이다. 이 레지스터들은 8-, 16-, 32-, 64-, 및 128-비트를 포함하지만, 이들로만 제한되지 않은, 임의의 크기일 수 있다. 다른 실시예들에서,레지스터들은 부동 소수점 또는 패킹 데이터 레지스터들이다. 다른 실시예들에서, 소스들은 범용 레지스터들이고, 목적지는 패킹 데이터 레지스터이다. 소스 레지스터들은 대부분의 실시예들에서 부호화되지 않은 정수들을 저장한다.
SQRMUL 의 일례의 실행 방법들
도 3은 프로세서에서의 SQRMUL 명령어의 실행의 일 실시예를 도시한다. 제1 및 제2 소스 레지스터 피연산자, 목적지 레지스터 피연산자, 및 연산 코드를 가진 SQRMUL 명령어는 301에서 페칭된다.
303에서 SQRMUL 명령어는 디코딩 로직에 의해 디코딩된다.
305에서, 소스 피연산자들의 값들이 검색/판독된다. 예를 들어, 소스 레지스터들이 판독된다.
디코딩된 SQRMUL 명령어(또는 마이크로연산들 등의 명령어를 포함하는 연산들)는, 307에서, 제1 소스 피연산자의 데이터 값의 제곱, 제2 소스 피연산자의 데이터 값의 제곱, 및 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하고 모든 3개의 계산들을 단일 목적지 피연산자에 저장하기 위해 하나의 또는 그 이상의 기능 유닛들 등의 실행 리소스들에 의해 실행된다.
계산된 값들은 309에서 목적지 레지스터 피연산자에 저장된다. 이 값들은 최하위로부터 최상위로(A2, A*B, -> B2) 또는 그 반대 등의 특정 순서로 저장될 수 있다. 일부 실시예들에서, 계산된 값들은 패킹 데이터 레지스터의 데이터 요소들에 저장된다.
307 및 309가 개별적으로 도시되었지만, 일부 실시예들에서는, 명령어의 실행의 일부로서 함께 실행된다.
도 4 및 도 5는 SQRMUL 명령어를 처리하기 위한 방법들의 실시예들을 도시한다. 이러한 실시예들에서, L은 (32 또는 64) 비트 단위의 범용 레지스터 크기로서 정의되고, a 및 b는 각각 비트 단위로 log2(B)와 동일한 N을 가진 기저 B의 제1 및 제2 피연산자들의 부호화되지 않은 정수들이다. 이하의 일례들에서, a 또는 A는 제1 소스에 저장된 데이터를 나타내고, b 또는 B는 제2 소스에 저장된 데이터를 나타낸다. 시프팅 등은 일부 실시예들에서 비트들의 수만큼 실행된다.
도 4는 SQRMUL 명령어를 처리하기 위한 한 방법의 일 실시예를 도시한다. 이는 L >= 6N인 일반적인 경우이다. 본 실시예에서, 피연산자들(301-305), 전부가 아니더라도, 일부는 후술되는 세부 사항들을 모호하게 하지 않기 위해 도시되지 않더라도, 예상보다 일찍 실행되었다고 가정된다. 예를 들어, 페칭 및 디코딩은 도시되지 않았고, 피연산자 검색도 도시되지 않았다.
401에서, 임시 변수 t가 구성된다. 일부 실시예들에서, 이 임시 변수는 A를 2N 만큼 좌 시프팅한 후, 시프팅된 값을 B로 OR 함으로써 구성된다. 다시 말해서, t = (A<<2*N)|B 이다. 통상, 이는 2 클록 사이클들이 걸린다. t의 결과 값은 A*22N+B 이다.
403에서, 임시 변수의 제곱이 계산된다. 이는 t=t*t=A2*24N+2AB*22n+B2의 제2 임시 변수를 생성한다. 일부 실례들에서, 이 곱셈은 5 사이클들이 걸린다.
405에서, A2, A*B, 및 B2가 제2 임시 변수로부터 추출된다. A2는 제2 임시 변수를 4N 만큼 우 시프팅함으로써 추출된다. 다시 말해서, A2 = t >> 4N 이다. A*B는 제2 임시 변수를 ((2N 만큼 좌 시프팅된 1) - 1)의 값과 AND한 후, 2N+1 만큼 우 시프팅함으로써 추출된다. 다시 말해서, A*B = (t&(1<<2N-1))>>(2N+1) 이다. 마지막으로, B2가 제2 임시 변수를 ((N 만큼 좌 시프팅된 2) - 1)의 값의 1의 보수와 AND 함으로써 추출된다. 다시 말해서, B2 = t&~(2<<N-1) 이다. 일부 시스템들에서, 이는 통틀어 2-3 사이클들이 걸린다.
추출된 값들은 407에서 저장된다. 일부 실시예들에서, A2, A*B, 및 B2는 각각 더블워드의 하부, 중간, 및 상부 사분면들에 저장된다. 다른 실시예들에서, 이 값들은 패킹 데이터 레지스터의 별개의 데이터 요소들에 저장된다.
도 5는 SQRMUL 명령어를 처리하기 위한 한 방법의 일 실시예를 도시한다. 이는 4N = L인 일반적인 경우이다. 본 실시예에서, 피연산자들(301-305), 전부가 아니더라도, 일부는 후술되는 세부 사항들을 모호하게 하지 않기 위해 도시되지 않더라도, 예상보다 일찍 실행되었다고 가정된다. 예를 들어, 페칭 및 디코딩은 도시되지 않았고, 피연산자 검색도 도시되지 않았다.
501에서, 임시 변수 t가 구성된다. 일부 실시예들에서, 이 임시 변수는 A를 2N 만큼 좌 시프팅한 후, 시프팅된 값을 B로 OR 함으로써 구성된다. 다시 말해서, t = (A<<2*N)|B 이다. 통상, 이는 2 클록 사이클들이 걸린다. t의 결과 값은 A*22N+B 이다.
임시 변수의 제곱은 503에서 계산되어 제1 및 제2 로케이션에 저장된다. 이는 A2*24N+2AB*22n+B2를 저장하는 로케이션들을 생성한다. 일부 실례들에서, 이 곱셈은 5 사이클들이 걸린다. 일부 실시예들에서, 제1 및 제2 로케이션들은 레지스터들이다.
A2, A*B, 및 B2가 505에서 추출된다. A2는 제1 로케이션에 저장된 값이다. 다시 말해서, A2 = 로케이션 1 이다. A*B는 제2 로케이션에 저장된 데이터를 (2N+1) 만큼 우 시프팅함으로써 추출된다. 다시 말해서, A*B = 로케이션 2 >>(2N+1) 이다. 마지막으로, B2는 제2 로케이션의 콘텐츠를 (22N-1)의 값의 1의 보수로 AND함으로써 추출된다. 다시 말해서, B2 = 로케이션 2&~(2<<2N-1) 이다. 일부 시스템들에서, 이는 통틀어 1 사이클이 걸린다.
추출된 값들은 507에서 저장된다. 일부 실시예들에서, A2, A*B, 및 B2는 각각 더블워드의 하부, 중간, 및 상부 사분면들에 저장된다. 다른 실시예들에서, 이 값들은 패킹 데이터 레지스터의 별개의 데이터 요소들에 저장된다.
도 6은 도 4 및 도 5의 흐름들 간에 선택하는 일례의 방법을 도시한다. 601에서, 4N = L 인지가 결정된다. 예이면, 603에서, 도 5의 흐름이 사용된다. 아니오이면, 605에서 도 4의 흐름이 사용된다.
SQRMUL 명령어에 대해 상술되었지만, 상기 코드 시퀀스들은 SQRMUL을 지원하지 않는 프로세서들에서 다중 명령어들에 의해 실행될 수도 있다.
일례의 레지스터 아키텍처
도 7은 본 발명의 일 실시예에 따른 레지스터 아키텍처(700)의 블록도이다. 본 실시예에서, 512 비트 폭인 32개의 벡터 레지스터들(710)이 있다; 이 레지스터들은 zmm0 내지 zmm31로 참조된다. 하부 16 zmm 레지스터들의 하위 256 비트들은 레지스터들 ymm0-16에서 오버레이된다. 하부 16 zmm 레지스터들의 하위 128 비트들(ymm 레지스터들의 하위 128 비트들)은 레지스터들 xmm0-15에서 오버레이된다.
범용 레지스터들(725) - 본 실시예에서, 메모리 피연산자들을 어드레싱하기 위해 기존 x86 어드레싱 모드들과 함께 사용되는 16개의 64-비트 범용 레지스터들이 있다. 이 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름들로 참조된다.
MMX 패킹 정수 플랫 레지스터 파일(750)이 에일리어싱되는, 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(745) - 본 실시예에서, x87 스택은 x87 명령어 집합 확장을 사용해서 32/64/80-비트 부동 소수점 데이터에 대한 스칼라 부동 소수점 연산들을 실행하는데 사용되는 8-요소 스택이다; MMX 레지스터들은 MMX 및 XMM 레지스터들 간에 실행되는 일부 연산들에 대한 피연산자들을 유지할 뿐만 아니라, 64-비트 패킹 정수 데이터에 대한 연산들을 실행하는데 사용된다.
본 발명의 대안의 실시예들은 더 넓은 또는 더 좁은 레지스터들을 사용할 수 있다. 또한, 본 발명의 대안의 실시예들은 더 많은, 더 적은, 또는 상이한 레지스터 파일들 및 레지스터들을 사용할 수 있다.
일례의 코어 아키텍처들, 프로세서들, 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 방법들로, 상이한 목적들을 위해, 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 이러한 코어들의 구현은 1) 범용 컴퓨팅을 위해 의도된 범용 순차적 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차적 코어; 3) 주로 그래픽 및/또는 과학적 (처리량) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은 1) 범용 컴퓨팅을 위해 의도된 하나의 또는 그 이상의 범용 순차적 코어들 및/또는 범용 컴퓨팅을 위해 의도된 하나의 또는 그 이상의 범용 비순차적 코어들을 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학적 (처리량) 컴퓨팅을 위해 의도된 하나의 또는 그 이상의 특수 목적 코어들을 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은, 1) CPU와 별개인 칩의 코프로세서; 2) CPU와 동일한 패키지의 별개의 다이의 코프로세서; 3) CPU와 동일한 다이의 코프로세서(이 경우에, 코프로세서는 때때로 통합 그래픽 및/또는 과학적 (처리량) 로직 등의 특수 목적 로직, 또는 특수 목적 코어들이라고 함); 및 4) 기술된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)이라고 함), 상술된 코프로세서, 및 추가 기능을 동일한 다이에서 포함할 수 있는 시스템 온 칩을 포함할 수 있는, 상이한 컴퓨터 시스템 아키텍처들을 야기한다. 일례의 코어 아키텍처들이 다음으로 기술되며, 일례의 프로세서들 및 컴퓨터 아키텍처들의 설명들이 이어진다.
일례의 코어 아키텍처들
순차적 및 비순차적 코어 블록도
도 8a는 본 발명의 실시예들에 따른 일례의 순차적 파이프라인 및 일례의 레지스터 재명명, 비순차적 발행/실행 파이프라인을 둘 다 도시하는 블록도이다. 도 8b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 일례의 레지스터 재명명, 비순차적 발행/실행 아키텍처 코어의 일례의 실시예를 둘 다 도시하는 블록도이다. 도 8a-b의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 도시하고, 선택적으로 추가되는 점선 박스들은 레지스터 재명명, 비순차적 발행/실행 파이프라인 및 코어를 도시한다. 양상이 비순차적 양상의 부집합이라는 가정하게, 비순차적 양상이 기술될 것이다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코딩 스테이지(804), 디코딩 스테이지(806), 할당 스테이지(808), 재명명 스테이지(810), 스케줄링(디스패치 또는 발행으로도 공지됨) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 후기입/메모리 기록 스테이지(818), 예외 처리 스테이지(822), 및 커밋 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 연결된 프론트 엔드 유닛(830)을 포함하는 프로세서 코어(890)를 도시하고, 유닛들(830, 850)은 둘 다 메모리 유닛(870)에 연결된다. 코어(890)는 감소 명령어 집합 컴퓨팅(RISC) 코어, 복합 명령어 집합 컴퓨팅(CISC) 코어, 훨씬 긴 명령어(VLIW) 코어, 또는 하이브리드 또는 대안의 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(890)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽 프로세싱 유닛(GPGPU) 코어, 그래픽 코어 등의 특수 목적 코어일 수 있다.
프론트 엔드 유닛(830)은, 디코딩 유닛(840)에 연결된, 명령어 페치 유닛(838)에 연결된, 명령어 TLB(translation lookaside buffer)(836)에 연결된, 명령어 캐시 유닛(834)에 연결된 브랜치 예측 유닛(832)을 포함한다. 디코딩 유닛(840)(또는 디코더)는 명령어들을 디코딩할 수 있으며, 원래의 명령어들로부터 디코딩되거나, 달리 원래의 명령어들을 반영하거나, 또는 원래의 명령어들로부터 유도된 하나의 또는 그 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코딩 유닛(840)은 각종 상이한 메커니즘들을 사용해서 구현될 수 있다. 적합한 메커니즘들의 일례들은, 룩업 테이블들, 하드웨어 구현들, 프로그래밍 가능 논리 어레이들(PLA들), 마이크로코드 판독 전용 메모리들(ROM들) 등을 포함하지만, 이들로만 제한되지 않는다. 일 실시예에서, 코어(890)는 마이크로코드 ROM 또는 (예를 들어, 디코딩 유닛(840)에서 또는 다른 경우 프론트 엔드 유닛(830) 내에서) 특정 매크로명령어들을 위한 마이크로코드를 저장하는 다른 매체를 포함한다. 디코딩 유닛(840)은 실행 엔진 유닛(850)의 재명명/할당기 유닛(852)에 연결된다.
실행 엔진 유닛(850)은 회수 유닛(854) 및 하나의 또는 그 이상의 스케줄러 유닛(들)(856)의 집합에 연결된 재명명/할당기 유닛(852)을 포함한다. 스케줄러 유닛(들)(856)은, 예약 국들, 중앙 명령어 윈도 등을 포함하는, 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(856)은 물리 레지스터 파일(들) 유닛(들)(858)에 연결된다. 물리 레지스터 파일(들) 유닛들(858) 각각은 하나의 또는 그 이상의 물리 레지스터 파일들을 나타내고, 그 중 상이한 물리 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점 등의 하나의 또는 그 이상의 상이한 데이터 타입들, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등을 저장한다. 일 실시예에서, 물리 레지스터 파일(들) 유닛(858)은 벡터 레지스터 유닛 및 스칼라 레지스터 유닛을 포함한다. 이 레지스터 유닛들은 아키텍처 벡터 레지스터들, 벡터 마스크 레지스터들, 및 범용 레지스터들을 제공할 수 있다. 물리 레지스터 파일(들) 유닛(들)(858)은, (예를 들어, 재배열 버퍼(들) 및 회수 레지스터 파일(들)을 사용해서, 차후 파일(들), 히스토리 버퍼(들), 및 회수 레지스터 파일(들)을 사용해서; 레지스터 맵들 및 레지스터들의 풀 등을 사용해서) 레지스터 재명명 및 비순차적 실행이 구현될 수 있는 각종 방법들을 설명하기 위해 회수 유닛(854)에 의해 겹쳐진다. 회수 유닛(854) 및 물리 레지스터 파일(들) 유닛(들)(858)은 실행 클러스터(들)(860)에 연결된다. 실행 클러스터(들)(860)는 하나의 또는 그 이상의 실행 유닛들(862)의 집합 및 하나의 또는 그 이상의 메모리 액세스 유닛들(864)의 집합을 포함한다. 실행 유닛들(862)은 각종 타입들의 데이터(예를 들어, 스칼라 부동 소수점, 패킹 정수, 패킹 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 각종 연산들(예를 들어, 시프팅, 덧셈, 뺄셈, 곱셈)을 실행할 수 있다. 일부 실시예들이 특정 기능들 또는 기능들의 집합들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 모든 기능들을 모두 실행하는 오직 하나의 실행 유닛만을 또는 다수의 실행 유닛들을 포함할 수 있다. 특정 실시예들이 특정 타입들의 데이터/연산들을 위한 별개의 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹 정수/패킹 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 자신의 스케줄러 유닛, 물리 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 각각 가지는 메모리 액세스 파이프라인 - 및 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터가 메모리 액세스 유닛(들)(864)을 가진 특정 실시예들이 구현됨)을 생성하기 때문에, 스케줄러 유닛(들)(856), 물리 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)은 가능한 대로 복수로 도시된다. 또한, 별개의 파이프라인들이 사용되는 경우에, 이 파이프라인들 중 하나의 또는 그 이상의 파이프라인들이 비순차적 발행/실행이고 나머지 파이프라인들은 순차적일 수 있음을 알아야만 한다.
메모리 액세스 유닛들(864)의 집합은, 레벨 2(L2) 캐시 유닛(876)에 연결된 데이터 캐시 유닛(874)에 연결된 데이터 TLB 유닛(872)을 포함하는, 메모리 유닛(870)에 연결된다. 일례의 실시예에서, 메모리 액세스 유닛들(864)은 로드 유닛, 어드레스 저장 유닛, 및 데이터 저장 유닛을 포함할 수 있으며, 그 각각은 메모리 유닛(870)의 데이터 TLB 유닛(872)에 연결된다. 명령어 캐시 유닛(834)은 메모리 유닛(870)의 레벨 2(L2) 캐시 유닛(876)에 더 연결된다. L2 캐시 유닛(876)은 캐시의 하나의 또는 그 이상의 다른 레벨들에 연결되며, 결국 메인 메모리에 연결된다.
예를 들어, 일례의 레지스터 재명명, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(800)을 구현할 수 있다: 1) 명령어 페치(838)는 페치 및 길이 디코딩 스테이지들(802 및 804)을 실행하고; 2) 디코딩 유닛(840)은 디코딩 스테이지(806)를 실행하며; 3) 재명명/할당기 유닛(852)은 할당 스테이지(808) 및 재명명 스테이지(810)를 실행하고; 4) 스케줄러 유닛(들)(856)은 스케줄링 스테이지(812)를 실행하며; 5) 물리 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 실행하고; 실행 클러스터(860)는 실행 스테이지(816)를 실행하며; 6) 메모리 유닛(870) 및 물리 레지스터 파일(들) 유닛(들)(858)은 후기입/메모리 기록 스테이지(818)를 실행하고; 7) 각종 유닛들은 예외 처리 스테이지(822)에 수반될 수 있으며; 8) 회수 유닛(854) 및 물리 레지스터 파일(들) 유닛(들)(858)은 커밋 스테이지(824)를 실행한다.
코어(890)는, 본 명세서에 기술된 명령어(들)를 포함하는, 하나의 또는 그 이상의 명령어 집합들(예를 들어, x86 명령어 집합(더 새로운 버전들이 추가된 일부 확장들을 가짐); 캘리포니아주, 써니베일(Sunnyvale, CA)의 MIPS 테크놀로지(MIPS Technologies)의 MIPS 명령어 집합; 캘리포니아주, 써니베일(Sunnyvale, CA)의 ARM 홀딩스(ARM Holdings)의 ARM 명령어 집합(NEON 등의 선택적인 추가 확장들을 가짐)을 지원할 수 있다. 일 실시예에서, 코어(890)는 패킹 데이터 명령어 집합 확장(예를 들어, 상술된 AVX1, AVX2, 및/또는 일부 형태의 일반 벡터 친숙 명령어 포맷(U=0 및/또는 U=1))을 지원하기 위란 로직을 포함해서, 다수의 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹 데이터를 사용해서 실행될 수 있게 한다.
코어가 멀티스레딩(2개의 또는 그 이상의 병렬 집합들의 연산들 또는 스레드들을 실행함)을 지원할 수 있고, 타임 슬라이스 멀티스레딩, 동시 멀티스레딩(물리 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리 코어를 단일 물리 코어가 제공함), 또는 그 조합(예를 들어, Intel® Hyperthreading 기술 등의 타임 슬라이스 페칭 및 디코딩 및 동시 멀티스레딩)을 포함하는 각종 방법들로 그렇게 할 수 있음을 알아야만 한다.
레지스터 재명명이 비순차적 실행의 맥락에서 기술되었지만, 레지스터 재명명은 순차적 차적 발행/실행 파이프라인에서 사용될 수도 있음을 알아야만 한다. 프로세서의 본 실시예가 별개의 명령어 및 데이터 캐시 유닛들(834/874) 및 공유 L2 캐시 유닛(876)을 또한 포함하지만, 대안의 실시예들은, 예를 들어, 레벨 1(L1) 내부 캐시, 또는 내부 캐시의 다수의 레벨들 등의, 명령어들 및 데이터 둘 다를 위한 단일 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서 외부에 있는 외부 캐시 및 내부 캐시의 조합을 포함할 수 있다. 대안으로, 모든 캐시는 코어 및/또는 프로세서 외부에 있을 수 있다.
특정 일례의 순차적 코어 아키텍처
도 9a-9b는 코어가 한 칩 내의 수개의 논리 블록들(동일한 타입 및/또는 상이한 타입들의 다른 코어들을 포함함) 중 하나인, 더 특정한 일례의 순차적 코어 아키텍처의 블록도를 도시한다. 논리 블록들은, 애플리케이션에 따라, 고-대역폭 인터커넥트 네트워크(예를 들어, 링 네트워크)를 통해 일부 고정 기능 로직, 메모리 I/O 인터페이스들, 및 다른 필요한 I/O 로직과 통신한다.
도 9a는 본 발명의 실시예들에 따른, 온디 인터커넥트 네트워크(902)에 대한 커넥션 및 레벨 2(L2) 캐시(904)와 함께, 단일 프로세서 코어의 블록도이다. 일 실시예에서, 명령어 디코더(900)는 패킹 데이터 명령어 집합 확장을 가진 x86 명령어 집합을 지원한다. L1 캐시(906)는 스칼라 및 벡터 유닛들로의 캐시 메모리에 대한 로우-레이턴시 액세스들을 허용한다. (설계를 간소화하기 위해) 일 실시예에서, 스칼라 유닛(908) 및 벡터 유닛(910)은 별개의 레지스터 집합들(각각, 스칼라 레지스터들(912) 및 벡터 레지스터들(914))을 사용하고, 그들 간에 전송된 데이터는 메모리에 기록된 후 레벨 1(L1) 캐시(906)로부터 다시 판독되지만, 본 발명의 대안의 실시예들은 상이한 방식을 사용할 수 있다(예를 들어, 기록 및 다시 판독되지 않고 2개의 레지스터 파일들 간에 데이터가 전송될 수 있게 하는 통신 경로를 포함하거나 또는 단일 레지스터 집합을 사용함).
L2 캐시(904)의 로컬 부집합은, 프로세서 코어당 하나씩, 별개의 로컬 부집합들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시(904)의 자신의 로컬 부집합에 대한 다이렉트 액세스 경로를 가진다. 프로세서 코어에 의해 판독되는 데이터는 L2 캐시 부집합(904)에 저장되고, 자신의 로컬 L2 캐시 부집합들에 액세스하는 다른 프로세서 코어들과 병행해서, 신속하게 액세스될 수 있다. 프로세서 코어에 의해 기록된 데이터는 자신의 L2 캐시 부집합(904)에 저장되고, 필요한 경우, 다른 부집합들로부터 플러싱된다. 링 네트워크는 공유 데이터에 대한 코히런시를 보장한다. 링 네트워크는 프로세서 코어들, L2 캐시들 및 다른 논리 블록들 등의 에이전트들이 칩 내에서 서로 통신할 수 있게 하도록 양방향이다. 각각의 링 데이터-경로는 방향당 1012-비트 폭이다.
도 9b는 본 발명의 실시예들에 따른 도 9a의 프로세서 코어의 일부의 확장된 도면이다. 도 9b는 벡터 유닛(910) 및 벡터 레지스터들(914)에 대한 더 많은 세부 사항들뿐만 아니라, L1 캐시(904)의 L1 데이터 캐시(906A) 파트를 포함한다. 구체적으로 말해서, 벡터 유닛(910)은, 정수, 단정도 플로트, 및 배정도 플로트 명령어들 중 하나 이상을 실행하는, 16-폭 벡터 프로세싱 유닛(VPU)(16-폭 ALU(928)를 참조하라)이다. VPU는 스위즐 유닛(920)에 의한 레지스터 입력들의 스위즐링, 수 변환 유닛들(922A-B)에 의한 수 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다.
통합 메모리 제어기 및 그래픽을 가진 프로세서
도 10은 본 발명의 실시예들에 따른 하나보다 더 많은 코어를 가질 수 있고, 하나의 통합 메모리 제어기를 가질 수 있으며, 통합 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10의 실선 박스들은 단일 코어(1002A), 시스템 에이전트(1010), 하나의 또는 그 이상의 버스 제어기 유닛들(1016)을 가진 프로세서(1000)를 도시하며, 선택적으로 추가되는 점선 박스들은 다수의 코어들(1002A-N), 시스템 에이전트 유닛(1010) 내의 하나의 또는 그 이상의 통합 메모리 제어기 유닛(들)(1014), 및 특수 목적 로직(1008)을 가진 대안의 프로세서(1000)를 도시한다.
따라서, 프로세서(1000)의 상이한 구현들은 1) 통합 그래픽 및/또는 과학적 (처리량) 로직(하나의 또는 그 이상의 코어들을 포함할 수 있음)인 특수 목적 로직(1008), 및 하나의 또는 그 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 둘의 조합)인 코어들(1002A-N)을 가진 CPU; 2) 주로 그래픽 및/또는 과학적 (처리량)을 위해 의도된 다수의 특수 목적 코어들인 코어들(1002A-N)을 가진 코프로세서; 및 3) 다수의 범용 순차적 코어들인 코어들(1002A-N)을 가진 코프로세서를 포함할 수 있다. 따라서, 프로세서(1000)는, 범용 프로세서이거나, 코프로세서이거나, 또는 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고처리량 다수 통합 코어(MIC) 코프로세서(30개의 또는 그 이상의 코어들을 포함함), 내장 프로세서 등의 특수 목적 프로세서일 수 있다. 프로세서는 하나의 또는 그 이상의 칩들에서 구현될 수 있다. 프로세서(1000)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS 등의 다수의 프로세스 기술들 중 임의의 기술을 사용해서 하나의 또는 그 이상의 기판들에서 구현되고/되거나 또는 상기 기판들의 일부일 수 있다.
메모리 계층은 코어들 내의 캐시의 하나의 또는 그 이상의 레벨들, 한 집합의 또는 하나의 또는 그 이상의 공유 캐시 유닛들(1006), 및 통합 메모리 제어기 유닛들(1014)의 집합에 연결된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(1006)의 집합은 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 캐시 레벨들 등의 하나의 또는 그 이상의 중간-레벨 캐시들, 최종 레벨 캐시(LLC), 및/또는 그 조합들을 포함할 수 있다. 일 실시예에서, 링 기반 인터커넥트 유닛(1012)은 통합 그래픽 로직(1008), 공유 캐시 유닛들(1006)의 집합, 및 시스템 에이전트 유닛(1010)/통합 메모리 제어기 유닛(들)(1014)을 상호 연결하지만, 대안의 실시예들은 이러한 유닛들을 상호 연결하기 위한 임의의 수의 널리 공지된 기술들을 사용할 수 있다. 일 실시예에서, 코히런시는 하나의 또는 그 이상의 캐시 유닛들(1006) 및 코어들(1002A-N) 간에 유지된다.
일부 실시예들에서, 코어들(1002A-N) 중 하나의 또는 그 이상의 코어들은 멀티-스레딩할 수 있다. 시스템 에이전트(1010)는 코어들(1002A-N)을 조정 및 동작하는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은, 예를 들어, 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(1002A-N) 및 통합 그래픽 로직(1008)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트들이거나 또는 상기 로직 및 컴포넌트들을 포함할 수 있다. 디스플레이 유닛은 하나의 또는 그 이상의 외부 연결 디스플레이들을 구동하기 위한 것이다.
코어들(1002A-N)은 아키텍처 명령어 집합이라는 면에서 동종이거나 이종일 수 있다; 즉, 코어들(1002A-N) 중 2개의 또는 그 이상의 코어들은 동일한 명령어 집합을 실행할 수 있지만, 다른 코어들은 해당 명령어 집합의 오직 부집합만을 또는 상이한 명령어 집합을 실행할 수 있다.
일례의 컴퓨터 아키텍처들
도 11-14는 일례의 컴퓨터 아키텍처들의 블록도들이다. 랩탑들, 데스크탑들, 핸드헬드 PC들, 개인 휴대 정보 단말기들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 내장 프로세서들, 디지털 신호 프로세서들(DSP들), 그래픽 장치들, 비디오 게임 장치들, 셋톱박스들, 마이크로 제어기들, 휴대 전화들, 휴대형 미디어 플레이어들, 핸드헬드 장치들, 및 각종 다른 전자 장치들에 대한 분야들에서 공지된 다른 시스템 설계들 및 구성들이 또한 적합하다. 일반적으로, 본 명세서에 기술된 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 거대한 각종 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제 도 11을 참조하면, 본 발명의 일 실시예에 따른 시스템(1100)의 블록도가 도시되어 있다. 시스템(1100)은 제어기 허브(1120)에 연결된, 하나의 또는 그 이상의 프로세서들(1110, 1115)을 포함할 수 있다. 일 실시예에서, 제어기 허브(1120)는 그래픽 메모리 제어기 허브(GMCH)(1190) 및 입력/출력 허브(IOH)(1150)(별개의 칩들일 수 있음)를 포함하고; GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 연결된 메모리 및 그래픽 제어기들을 포함하며; IOH(1150)는 입력/출력(I/O) 장치들(1160)을 GMCH(1190)에 연결한다. 대안으로, 메모리 및 그래픽 제어기들 중 하나 또는 둘 다는 (본 명세서에 기술된 바와 같이) 프로세서 내에서 통합되고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110), 및 IOH(1150)를 가진 단일 칩 내의 제어기 허브(1120)에 직접 연결된다.
추가 프로세서들(1115)의 선택적인 속성은 도 11에서 파선들로 표시된다. 각각의 프로세서(1110, 1115)는 본 명세서에 기술된 하나의 또는 그 이상의 프로세싱 코어들을 포함할 수 있으며, 프로세서(1000)의 일부 버전일 수 있다.
메모리(1140)는, 예를 들어, 동적 랜덤 액세스 메모리(DRAM), 상변화 메모리(PCM), 또는 그 둘의 조합일 수 있다. 적어도 일 실시예에서, 제어기 허브(1120)는 전면 버스(FSB) 등의 멀티-드롭 버스, QPI(QuickPath Interconnect) 등의 지점간 인터페이스, 또는 유사한 커넥션(1195)을 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시예에서, 코프로세서(1145)는, 예를 들어, 고-처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 내장 프로세서 등의 특수 목적 프로세서이다. 일 실시예에서, 제어기 허브(1120)는 통합 그래픽 가속 장치를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성들 등을 포함하는 가치있는 메트릭들의 스펙트럼이라는 면에서 물리 리소스들(1110, 1115) 간에 각종 차이들이 있을 수 있다.
일 실시예에서, 프로세서(1110)는 일반적인 타입의 데이터 프로세싱 동작들을 제어하는 명령어들을 실행한다. 코프로세서 명령어들이 명령어들 내에 내장될 수 있다. 프로세서(1110)는 이 코프로세서 명령어들을 첨부된 코프로세서(1145)에 의해 실행되어야만 하는 타입으로 인식한다. 따라서, 프로세서(1110)는 코프로세서 버스 또는 다른 인터커넥트에서 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서(1145)에 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어들을 수용 및 실행한다.
이제 도 12를 참조하면, 본 발명의 일 실시예에 따른 제1 더 특정한 일례의 시스템(1200)의 블록도가 도시되어 있다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 지점간 인터커넥트 시스템이고, 지점간 인터커넥트(1250)를 통해 연결된 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 프로세서들(1270 및 1280) 각각은 프로세서(1000)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(1270 및 1280)은 각각 프로세서들(1110 및 1115)이고, 코프로세서(1238)는 코프로세서(1145)이다. 다른 실시예에서, 프로세서들(1270 및 1280)은 각각 프로세서(1110), 코프로세서(1145)이다.
프로세서들(1270 및 1280)은, 각각, 통합 메모리 제어기(IMC) 유닛들(1272 및 1282)을 포함하는 것으로 도시된다. 프로세서(1270)는 버스 제어기 유닛들의 일부로서 지점간(P-P) 인터페이스들(1276 및 1278)을 포함한다; 유사하게, 제2 프로세서(1280)는 P-P 인터페이스들(1286 및 1288)을 포함한다. 프로세서들(1270 및 1280)은 P-P 인터페이스 회로들(1278, 1288)을 사용해서 지점간(P-P) 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272 및 1282)은, 각각의 프로세서들에 국부적으로 부착된 메인 메모리의 일부분들일 수 있는, 각각의 메모리들, 즉, 메모리(1232) 및 메모리(1234)에 프로세서들을 연결한다.
프로세서들(1270 및 1280)은 각각 지점간 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용해서 개별 P-P 인터페이스들(1252, 1254)을 통해 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 선택적으로 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(1238)는, 예를 들어, 고-처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 내장 프로세서 등의 특수 목적 프로세서이다.
프로세서가 저전력 모드로 되면 어느 한 프로세서의 또는 양 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있도록, 공유 캐시(도시되지 않음)는 어느 한 프로세서 내에 포함되거나, 또는 양 프로세서들 밖에 있지만 P-P 인터커넥트를 통해 프로세서들과 연결될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에 연결될 수 있다. 일 실시예에서, 제1 버스(1216)는 주변 컴포넌트 인터커넥트(PCI) 버스이거나, 또는 PCI 익스프레스 버스 또는 다른 3세대 I/O 인터커넥트 버스일 수 있지만, 본 발명의 범위는 그렇게 제한되지 않는다.
도 12에 도시된 바와 같이, 각종 I/O 장치들(1214)은, 제1 버스(1216)를 제2 버스(1220)에 연결하는 버스 브리지(1218)와 함께, 제1 버스(1216)에 연결될 수 있다. 일 실시예에서, 코프로세서들, 고-처리량 MIC 프로세서들, GPGPU들, 가속 장치들(예를 들어, 그래픽 가속 장치들 또는 디지털 신호 프로세서(DSP) 유닛들), 필드 프로그래밍 가능 게이트 어레이들, 또는 임의의 다른 프로세서 등의 하나의 또는 그 이상의 추가 프로세서(들)(1215)는 제1 버스(1216)에 연결된다. 일 실시예에서, 제2 버스(1220)는 로우 핀 카운트(LPC) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(1222), 통신 장치들(1227) 및 명령어들/코드 및 데이터(1230)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 기억 장치 등의 기억 유닛(1228)을 포함하는 각종 장치들이 제2 버스(1220)에 연결될 수 있다. 또한, 오디오 I/O(1224)가 제2 버스(1220)에 연결될 수 있다. 다른 아키텍처들이 가능함을 주지하라. 예를 들어, 도 12의 지점간 아키텍처 대신, 시스템은 멀티-드롭 버스 또는 다른 아키텍처를 구현할 수 있다.
이제 도 13을 참조하면, 본 발명의 일 실시예에 따른 제2 더 특정한 일례의 시스템(1300)의 블록도가 도시되어 있다. 도 12 및 13에서, 유사한 요소들은 유사한 참조 부호들을 가지며, 도 12의 특정 양상들은 도 13의 다른 양상들을 모호하게 함을 방지하기 위해 도 13으로부터 생략되었다.
도 13은, 프로세서들(1270 및 1280)이, 각각, 통합 메모리 및 I/O 제어 로직("CL")(1272 및 1282)을 포함할 수 있다고 도시한다. 따라서, CL(1272, 1282)은 통합 메모리 제어기 유닛들을 포함하고, I/O 제어 로직을 포함한다. 도 13은 CL(1272, 1282)에 연결된 메모리들(1232, 1234) 뿐만 아니라, I/O 장치들(1314)이 또한 제어 로직(1272, 1282)에 연결됨을 도시한다. 레거시 I/O 장치들(1315)이 칩셋(1290)에 연결된다.
이제 도 14를 참조하면, 본 발명의 일 실시예에 따른 SoC(1400)의 블록도가 도시되어 있다. 도 10의 유사한 요소들은 유사한 참조 부호들을 가진다. 또한, 점선 박스들은 더 고급의 SoC들에서의 선택적인 피처들이다. 도 14에서, 인터커넥트 유닛(들)(1402)은: 하나의 또는 그 이상의 코어들(202A-N) 및 공유 캐시 유닛(들)(1006)의 집합; 시스템 에이전트 유닛(1010); 버스 제어기 유닛(들)(1016); 통합 메모리 제어기 유닛(들)(1014); 통합 그래픽 로직, 이미지 프로로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나의 또는 그 이상의 코프로세서들(1420)의 집합; 정적 랜덤 액세스 메모리(SRAM) 유닛(1430); 다이렉트 메모리 액세스(DMA) 유닛(1432); 및 하나의 또는 그 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(1440)을 포함하는 애플리케이션 프로세서(1410)에 연결된다. 일 실시예에서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고-처리량 MIC 프로세서, 내장 프로세서 등의 특수 목적 프로세서를 포함한다.
본 명세서에 기술된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 이러한 구현 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 기억 시스템(휘발성 및 비휘발성 메모리 및/또는 기억 소자들을 포함함), 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그래밍 가능 시스템들에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 12에 도시된 코드(1230) 등의, 프로그램 코드는 본 명세서에 기술된 기능들을 실행하라는 명령어들을 입력하고 출력 정보를 생성하도록 적용될 수 있다. 출력 정보는, 공지된 방식으로, 하나의 또는 그 이상의 출력 장치들에 적용될 수 있다. 본 출원을 위해, 프로세싱 시스템은, 예를 들어, 디지털 신호 프로세서(DSP), 마이크로제어기, 주문형 반도체(ASIC), 또는 마이크로프로세서 등의 프로세서를 가진 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고급 절차적 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는, 원하는 경우, 어셈블리어 또는 기계어로 또한 구현될 수 있다. 실제로, 본 명세서에 기술된 메커니즘들은 임의의 특정 프로그래밍 언어의 범위로 제한되지 않는다. 임의의 경우에, 언어는 컴파일링되거나 또는 해석된 언어일 수 있다.
적어도 일 실시예의 하나의 또는 그 이상의 양상들은, 기계에 의해 판독될 때, 기계가 본 명세서에 기술된 기술들을 실행하도록 로직을 제조하게 야기하는, 프로세서 내의 각종 로직을 나타내는 기계 판독 가능 매체에 저장된 대표적인 명령어들에 의해 구현될 수 있다. "IP 코어들"이라고 공지된, 이러한 표현들은, 유형의, 기계 판독 가능 매체에 저장되고, 실제로 로직 또는 프로세서를 만드는 제조 기계들로 로드하기 위해 각종 고객들 또는 제조 설비들에 제공될 수 있다.
이러한 기계 판독 가능 기억 매체는, 하드 디스크들, 플로피 디스크들, 광 디스크들, 컴팩트 디스크 판독 전용 메모리들(CD-ROM들), 컴팩트 디스크 재기록 가능(CD-RW), 및 광자기 디스크들, 판독 전용 메모리들(ROM들) 등의 반도체 장치들, 동적 랜덤 액세스 메모리들(DRAM들), 정적 랜덤 액세스 메모리들(SRAM들) 등의 랜덤 액세스 메모리들(RAM들), 소거 가능 프로그래밍 가능 판독 전용 메모리들(EPROM들), 플래시 메모리들, 전기적 소거 가능 프로그래밍 가능 판독 전용 메모리들(EEPROM들), 상변화 메모리(PCM), 자기 또는 광 카드들, 또는 전자 명령어들을 기억하기에 적합한 임의의 다른 타입의 매체를 포함하는 임의의 다른 타입의 디스크 등의 기억 매체를 포함하는, 기계 또는 장치에 의해 제조 또는 형성된 물품들의 비일시적, 유형의 구성들을, 제한 없이, 포함할 수 있다.
따라서, 본 발명의 실시예들은 본 명세서에 기술된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 피처들을 정의하는, 하드웨어 기술 언어(HDL) 등의 설계 데이터를 포함하거나 명령어들을 포함하는 비일시적, 유형의 기계 판독 가능 매체를 또한 포함한다. 이러한 실시예들은 또한 프로그램 제품들이라고도 할 수 있다.
에뮬레이션(바이너리 번역, 코드 모핑 등을 포함함)
일부 경우들에서, 명령어 변환기는 명령어를 소스 명령어 집합으로부터 목표 명령어 집합으로 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 (예를 들어, 정적 바이너리 번역, 동적 컴파일링을 포함하는 동적 바이너리 번역을 사용해서) 명령어를 코어에 의해 처리될 하나의 또는 그 이상의 다른 명령어들로 번역, 모핑, 에뮬레이팅, 또는 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서, 오프 프로세서, 또는 파트 온 및 파트 오프 프로세서일 수 있다.
도 15는 본 발명의 실시예들에 따른 소스 명령어 집합의 바이너리 명령어들을 목표 명령어 집합의 바이너리 명령어들로 변환하기 위한 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 본 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안으로, 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 각종 조합들로 구현될 수 있다. 도 15는 고급 언어(1502)의 프로그램이 적어도 하나의 x86 명령어 집합 코어(1516)를 가진 프로세서에 의해 기본적으로 실행될 수 있는 x86 바이너리 코드(1506)를 생성하기 위해 x86 컴파일러(1504)를 사용해서 컴파일링될 수 있음을 도시한다. 적어도 하나의 x86 명령어 집합 코어(1516)를 가진 프로세서는, 적어도 하나의 x86 명령어 집합 코어를 가진 Intel 프로세서와 거의 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 집합 코어의 명령어 집합의 상당한 일부분 또는 (2) 적어도 하나의 x86 명령어 집합 코어를 가진 Intel 프로세서에서 실행되도록 목표가 된 애플리케이션들 또는 다른 소프트웨어의 객체 코드 버전들을 양립할 수 있게 실행하거나 또는 달리 처리함으로써 적어도 하나의 x86 명령어 집합 코어를 가진 Intel 프로세서와 거의 동일한 기능들을 실행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 추가 연결 프로세싱으로 또는 추가 연결 프로세싱 없이, 적어도 하나의 x86 명령어 집합 코어(1516)를 가진 프로세서에서 실행될 수 있는 x86 바이너리 코드(1506)(예를 들어, 객체 코드)를 생성하도록 동작하는 컴파일러를 나타낸다. 유사하게, 도 15는 고급 언어(1502)가 적어도 하나의 x86 명령어 집합 코어를 갖지 않은 프로세서(1514)(예를 들어, 캘리포니아주, 써니베일(Sunnyvale, CA)의 MIPS 테크놀로지(MIPS Technologies)의 MIPS 명령어 집합을 실행하고/하거나, 캘리포니아주, 써니베일(Sunnyvale, CA)의 ARM 홀딩스(ARM Holdings)의 ARM 명령어 집합을 실행하는 코어들을 가진 프로세서)에 의해 기본적으로 실행될 수 있는 대안의 명령어 집합 바이너리 코드(1510)를 생성하기 위해 대안의 명령어 집합 컴파일러(1508)를 사용해서 컴파일링될 수 있음을 도시한다. 명령어 변환기(1512)는 x86 명령어 집합 코어를 갖지 않은 프로세서(1514)에 의해 기본적으로 실행될 수 있는 코드로 x86 바이너리 코드(1506)를 변환하는데 사용된다. 이것이 가능한 명령어 변환기가 달성하는 것은 어렵기 때문에, 이 변환된 코드는 대안의 명령어 집합 바이너리 코드(1510)와 동일할 가능성이 없다; 그러나, 변환된 코드는 일반 동작을 달성할 것이며, 대안의 명령어 집합으로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(1512)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 집합 프로세서 또는 코어를 갖지 않은 프로세서 또는 다른 전자 장치가 x86 바이너리 코드(1506)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 그 조합을 나타낸다.
본 발명의 실시예들은 제곱-곱셈(SQRMUL) 명령어를 디코딩하기 위한 디코딩 로직 - SQRMUL 명령어는 제1 소스 피연산자, 제2 소스 피연산자, 및 목적지 피연산자를 포함함 - , 제1 소스 피연산자의 데이터 값의 제곱을 계산하고, 제2 소스 피연산자의 데이터 값의 제곱을 계산하며, 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하기 위한 실행 로직을 포함하고, 계산들은 오직 하나의 곱셈 연산만을 사용하며; 결과들을 목적지 피연산자에 저장하는 장치를 포함한다.
장치의 일부 실시예들에서, 이하 중 하나 또는 그 이상은 서로 함께 또는 개별적으로 구현된다: ⅰ) 목적지 피연산자는 범용 레지스터이다; ⅱ) 제1 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 하위인 비트들에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 상위인 비트들에 저장되며, 제1 및 제2 피연산자들의 데이터의 곱셈은 목적지 피연산자의 중간 순위 비트들에 저장된다; ⅲ) 목적지 피연산자는 패킹 데이터 레지스터이고, 3 계산들 각각은 패킹 데이터 레지스터의 상이한 데이터 요소에 저장된다; ⅳ) 실행 로직은 제1 소스 피연산자의 데이터 값의 제곱을 계산하기 위해, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 임시 변수를 4N 비트들 만큼 우 시프팅한다, 여기서, N은 log2(데이터 값의 기저)이다; ⅴ) 실행 로직은 제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈을 계산하기 위해, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 임시 변수를 ((2N 만큼 좌 시프팅된 2) - 1)의 값을 AND하며, 2N+1 만큼 우 시프팅한다, 여기서, N은 log2(데이터 값의 기저)이다; ⅵ) 실행 로직은 제2 소스 피연산자의 데이터 값의 제곱을 계산하기 위해, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 제곱 임시 변수의 제곱을 ((N 만큼 좌 시프팅된 1) - 1)의 값의 1의 보수로 AND한다, 여기서, N은 log2(데이터 값의 기저)이다.
본 발명의 실시예들은 컴퓨터 프로세서에서 제곱-곱셈(SQRMUL) 명령어를 실행하는 방법을 포함하며, SQRMUL 명령어는 제1 소스 피연산자, 제2 소스 피연산자, 및 목적지 피연산자를 포함하고, 상기 방법은: 제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계, 제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계, 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하는 단계를 포함하며, 계산들은 오직 하나의 곱셈 연산만을 사용하고; 결과들을 목적지 피연산자에 저장하는 단계를 포함한다.
방법의 일부 실시예들에서, 이하 중 하나 또는 그 이상은 서로 함께 또는 개별적으로 구현된다: ⅰ) 목적지 피연산자는 범용 레지스터이다; ⅱ) 제1 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 하위인 비트들에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 상위인 비트들에 저장되며, 제1 및 제2 피연산자들의 데이터의 곱셈은 목적지 피연산자의 중간 순위 비트들에 저장된다; ⅲ) 목적지 피연산자는 패킹 데이터 레지스터이고, 3 계산들 각각은 패킹 데이터 레지스터의 상이한 데이터 요소에 저장된다; ⅳ) 임시 변수를 생성함으로써, 제1 소스 피연산자의 데이터 값의 제곱은, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하며, 임시 변수를 제곱하고, 임시 변수를 4N 비트들 만큼 우 시프팅함으로써 계산되며, 여기서, N은 log2(데이터 값의 기저)이다; ⅴ) 제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈은, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 제곱 임시 변수를 ((2N 만큼 좌 시프팅된 2) - 1)의 값을 AND하며, 2N+1 만큼 우 시프팅함으로써 계산되고, 여기서, N은 log2(데이터 값의 기저)이다; ⅵ) 제2 소스 피연산자의 데이터 값의 제곱은, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 임시 변수의 제곱을 ((N 만큼 좌 시프팅된 1) - 1)의 값의 1의 보수로 AND함으로써 계산되며, 여기서, N은 log2(데이터 값의 기저)이다.
본 발명의 실시예들은, 프로세서에 의해 실행될 때, 프로세서가 제곱-곱셈(SQRMUL) 명령어를 실행하는 방법을 실행하게 야기하는 코드를 포함하는 유형의 기계-판독 가능 매체를 포함하며, SQRMUL 명령어는 제1 소스 피연산자, 제2 소스 피연산자, 및 목적지 피연산자를 포함하고, 상기 방법은 제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계, 제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계, 제1 및 제2 피연산자들의 데이터의 곱셈을 계산하는 단계를 포함하며, 계산들은 오직 하나의 곱셈 연산만을 사용하고; 결과들을 목적지 피연산자에 저장하는 단계를 포함한다.
유형의 기계-판독 가능 매체의 일부 실시예들에서, 이하 중 하나 또는 그 이상은 서로 함께 또는 개별적으로 구현된다: ⅰ) 목적지 피연산자는 범용 레지스터이다; ⅱ) 제1 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 하위인 비트들에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 목적지 피연산자의 더 상위인 비트들에 저장되며, 제1 및 제2 피연산자들의 데이터의 곱셈은 목적지 피연산자의 중간 순위 비트들에 저장된다; ⅲ) 목적지 피연산자는 패킹 데이터 레지스터이고, 3 계산들 각각은 패킹 데이터 레지스터의 상이한 데이터 요소에 저장된다; ⅳ) 임시 변수를 생성함으로써, 제1 소스 피연산자의 데이터 값의 제곱은, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하며, 임시 변수를 제곱하고, 임시 변수를 4N 비트들 만큼 우 시프팅함으로써 계산되며, 여기서, N은 log2(데이터 값의 기저)이다; ⅴ) 제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈은 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 제곱 임시 변수를 ((2N 만큼 좌 시프팅된 2) - 1)의 값을 AND하며, 2N+1 만큼 우 시프팅함으로써 계산되고, 여기서, N은 log2(데이터 값의 기저)이다; ⅵ) 제2 소스 피연산자의 데이터 값의 제곱은, 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하며, 임시 변수를 제곱하고, 임시 변수의 제곱을 ((N 만큼 좌 시프팅된 1) - 1)의 값의 1의 보수로 AND함으로써 계산되며, 여기서, N은 log2(데이터 값의 기저)이다.

Claims (20)

  1. 제곱-곱셈(square-multiply)(SQRMUL) 명령어를 디코딩하기 위한 디코딩 로직 - 상기 SQRMUL 명령어는 제1 소스 피연산자(operand), 제2 소스 피연산자 및 목적지 피연산자를 포함함 - ;
    실행 로직
    을 포함하며,
    상기 실행 로직은,
    제1 소스 피연산자의 데이터 값의 제곱을 계산하고,
    제2 소스 피연산자의 데이터 값의 제곱을 계산하고,
    제1 및 제2 피연산자들의 데이터의 곱셈을 계산하며 - 상기 계산들은 하나의 곱셈 연산만을 사용함 -,
    그 결과들을 상기 목적지 피연산자에 저장하기 위한 것인
    장치.
  2. 제1항에 있어서,
    상기 목적지 피연산자는 범용 레지스터인 장치.
  3. 제1항에 있어서,
    제1 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 하위인 비트들(lower order bits)에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 상위인 비트들(higher order bits)에 저장되며, 상기 제1 및 제2 피연산자들의 데이터의 곱셈은 상기 목적지 피연산자의 중간 순위 비트들(middle order bits)저장되는 장치.
  4. 제1항에 있어서,
    상기 목적지 피연산자는 패킹 데이터 레지스터이고, 상기 3개의 계산들 각각은 상기 패킹 데이터 레지스터의 상이한 데이터 요소에 저장되는 장치.
  5. 제1항에 있어서,
    상기 실행 로직은 상기 제1 소스 피연산자의 데이터 값의 제곱을 계산하기 위해,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하고,
    상기 임시 변수를 제곱하며,
    상기 임시 변수를 4N 비트들 만큼 우 시프팅하는 - 여기서, N은 log2(데이터 값의 기저(base))임 -
    장치.
  6. 제1항에 있어서,
    상기 실행 로직은 제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈을 계산하기 위해,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하고,
    상기 임시 변수를 제곱하며,
    상기 제곱된 임시 변수를 ((2N 만큼 좌 시프팅된 2) - 1)의 값으로 AND하고,
    2N+1 만큼 우 시프팅하는 - 여기서, N은 log2(데이터 값의 기저)임 -
    장치.
  7. 제1항에 있어서,
    상기 실행 로직은 상기 제2 소스 피연산자의 데이터 값의 제곱을 계산하기 위해,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하고,
    상기 임시 변수를 제곱하며,
    상기 제곱된 임시 변수를 ((N 만큼 좌 시프팅된 1) - 1)의 값의 1의 보수(ones complement)로 AND하는 - 여기서, N은 log2(데이터 값의 기저)임 -
    장치.
  8. 컴퓨터 프로세서에서 제곱-곱셈(SQRMUL) 명령어를 실행하는 방법으로서 - 상기 SQRMUL 명령어는 제1 소스 피연산자, 제2 소스 피연산자 및 목적지 피연산자를 포함함 -,
    제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계,
    제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계,
    제1 및 제2 피연산자들의 데이터의 곱셈을 계산하는 단계 - 상기 계산들은 하나의 곱셈 연산만을 사용함 -,
    그 결과들을 상기 목적지 피연산자에 저장하는 단계
    를 포함하는 제곱-곱셈 명령어 실행 방법.
  9. 제8항에 있어서,
    상기 목적지 피연산자는 범용 레지스터인 제곱-곱셈 명령어 실행 방법.
  10. 제8항에 있어서,
    제1 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 하위인 비트들에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 상위인 비트들에 저장되며, 상기 제1 및 제2 피연산자들의 데이터의 곱셈은 상기 목적지 피연산자의 중간 순위 비트들에 저장되는 제곱-곱셈 명령어 실행 방법.
  11. 제8항에 있어서,
    상기 목적지 피연산자는 패킹 데이터 레지스터이고, 상기 3개의 계산들 각각은 상기 패킹 데이터 레지스터의 상이한 데이터 요소에 저장되는 제곱-곱셈 명령어 실행 방법.
  12. 제8항에 있어서,
    상기 제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계, 및
    상기 임시 변수를 4N 비트들 만큼 우 시프팅하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는, 제곱-곱셈 명령어 실행 방법.
  13. 제8항에 있어서,
    제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계,
    상기 제곱된 임시 변수를 ((2N 만큼 좌 시프팅된 1) - 1)의 값으로 AND하는 단계, 및
    2N+1 만큼 우 시프팅하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는, 제곱-곱셈 명령어 실행 방법.
  14. 제8항에 있어서,
    상기 제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계,
    상기 제곱된 임시 변수를 ((N 만큼 좌 시프팅된 2) - 1)의 값의 1의 보수로 AND하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는, 제곱-곱셈 명령어 실행 방법.
  15. 프로세서에 의해 실행될 때, 상기 프로세서가 제곱-곱셈(SQRMUL) 명령어를 실행하기 위한 방법을 수행하도록 야기하는 코드를 포함하는 유형의 기계-판독 가능 매체로서 - 상기 SQRMUL 명령어는 제1 소스 피연산자, 제2 소스 피연산자 및 목적지 피연산자를 포함함 -,
    상기 방법은,
    제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계,
    제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계,
    제1 및 제2 피연산자들의 데이터의 곱셈을 계산하는 단계 - 상기 계산들은 하나의 곱셈 연산만을 사용함 -,
    그 결과들을 상기 목적지 피연산자에 저장하는 단계
    를 포함하는 유형의 기계-판독 가능 매체.
  16. 제15항에 있어서,
    상기 목적지 피연산자는 범용 레지스터인 유형의 기계-판독 가능 매체.
  17. 제15항에 있어서,
    제1 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 하위인 비트들에 저장되고, 제2 소스 피연산자의 데이터 값의 제곱은 상기 목적지 피연산자의 더 상위인 비트들에 저장되며, 상기 제1 및 제2 피연산자들의 데이터의 곱셈은 상기 목적지 피연산자의 중간 순위 비트들에 저장되는 유형의 기계-판독 가능 매체.
  18. 제15항에 있어서,
    상기 제1 소스 피연산자의 데이터 값의 제곱을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계, 및
    상기 임시 변수를 4N 비트들 만큼 우 시프팅하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는 유형의 기계-판독 가능 매체.
  19. 제15항에 있어서,
    제1 소스 및 제2 소스 피연산자의 데이터 값의 곱셈을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계,
    상기 제곱된 임시 변수를 ((2N 만큼 좌 시프팅된 1) - 1)의 값으로 AND하는 단계, 및
    2N+1 만큼 우 시프팅하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는 유형의 기계-판독 가능 매체.
  20. 제15항에 있어서,
    상기 제2 소스 피연산자의 데이터 값의 제곱을 계산하는 단계는,
    상기 제1 소스 피연산자의 데이터 값을 2N 만큼 좌 시프팅하고, 시프팅된 값을 상기 제2 소스 피연산자의 데이터 값으로 OR하여 임시 변수를 생성하는 단계,
    상기 임시 변수를 제곱하는 단계,
    상기 제곱된 임시 변수를 ((N 만큼 좌 시프팅된 2) - 1)의 값의 1의 보수로 AND하는 단계 - 여기서, N은 log2(데이터 값의 기저)임 - 를 포함하는 유형의 기계-판독 가능 매체.
KR1020140030310A 2013-03-15 2014-03-14 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들 KR101539173B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/840,985 2013-03-15
US13/840,985 US9207941B2 (en) 2013-03-15 2013-03-15 Systems, apparatuses, and methods for reducing the number of short integer multiplications

Publications (2)

Publication Number Publication Date
KR20140113537A true KR20140113537A (ko) 2014-09-24
KR101539173B1 KR101539173B1 (ko) 2015-07-27

Family

ID=50554842

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140030310A KR101539173B1 (ko) 2013-03-15 2014-03-14 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들

Country Status (6)

Country Link
US (1) US9207941B2 (ko)
JP (1) JP5798650B2 (ko)
KR (1) KR101539173B1 (ko)
CN (2) CN109144569A (ko)
DE (1) DE102014003696A1 (ko)
GB (1) GB2514225B (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications
WO2017177369A1 (zh) 2016-04-12 2017-10-19 深圳市浩瀚卓越科技有限公司 一种稳定器的跟踪拍摄控制方法及系统
US20190102199A1 (en) * 2017-09-30 2019-04-04 Intel Corporation Methods and systems for executing vectorized pythagorean tuple instructions

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4700319A (en) * 1985-06-06 1987-10-13 The United States Of America As Represented By The Secretary Of The Air Force Arithmetic pipeline for image processing
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
JP3531402B2 (ja) * 1997-03-14 2004-05-31 三菱電機株式会社 2乗回路
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
US6766346B2 (en) * 1999-11-30 2004-07-20 Mosaid Technologies Incorporation System and method for computing a square of a number
US7689641B2 (en) * 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
US7539714B2 (en) * 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
US7676535B2 (en) * 2005-09-28 2010-03-09 Intel Corporation Enhanced floating-point unit for extended functions
US8073892B2 (en) * 2005-12-30 2011-12-06 Intel Corporation Cryptographic system, method and multiplier
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
CN101082860A (zh) * 2007-07-03 2007-12-05 浙江大学 一种乘累加装置
US8504807B2 (en) * 2009-12-26 2013-08-06 Intel Corporation Rotate instructions that complete execution without reading carry flag
FR2972064B1 (fr) * 2011-02-25 2013-03-15 Inside Secure Procede de cryptographie comprenant une operation d'exponentiation
US20120254588A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for blending two source operands into a single destination using a writemask
US9207941B2 (en) * 2013-03-15 2015-12-08 Intel Corporation Systems, apparatuses, and methods for reducing the number of short integer multiplications

Also Published As

Publication number Publication date
US20140281395A1 (en) 2014-09-18
CN109144569A (zh) 2019-01-04
GB201404236D0 (en) 2014-04-23
GB2514225A (en) 2014-11-19
JP2014182811A (ja) 2014-09-29
CN104049940A (zh) 2014-09-17
KR101539173B1 (ko) 2015-07-27
JP5798650B2 (ja) 2015-10-21
GB2514225B (en) 2017-10-04
DE102014003696A1 (de) 2014-09-18
CN104049940B (zh) 2018-08-10
US9207941B2 (en) 2015-12-08

Similar Documents

Publication Publication Date Title
US20210141683A1 (en) Hardware apparatuses and methods for memory corruption detection
US10664281B2 (en) Apparatuses and methods for dynamic asymmetric scaling of branch predictor tables
US10048966B2 (en) Instruction set for supporting wide scalar pattern matches
US10387148B2 (en) Apparatus and method to reverse and permute bits in a mask register
US9268626B2 (en) Apparatus and method for vectorization with speculation support
US20140089634A1 (en) Apparatus and method for detecting identical elements within a vector register
US20160179538A1 (en) Method and apparatus for implementing and maintaining a stack of predicate values with stack synchronization instructions in an out of order hardware software co-designed processor
US9785436B2 (en) Apparatus and method for efficient gather and scatter operations
US20150277904A1 (en) Method and apparatus for performing a plurality of multiplication operations
US20190102198A1 (en) Systems, apparatuses, and methods for multiplication and accumulation of vector packed signed values
KR101539173B1 (ko) 단 정수 곱셈들의 수를 감소시키기 위한 시스템들, 장치들 및 방법들
US10545757B2 (en) Instruction for determining equality of all packed data elements in a source operand
US10248422B2 (en) Systems, apparatuses, and methods for snooping persistent memory store addresses
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
US20170192780A1 (en) Systems, Apparatuses, and Methods for Getting Even and Odd Data Elements
US20200210186A1 (en) Apparatus and method for non-spatial store and scatter instructions
US20190163476A1 (en) Systems, methods, and apparatuses handling half-precision operands
US10095517B2 (en) Apparatus and method for retrieving elements from a linked structure
US9207942B2 (en) Systems, apparatuses,and methods for zeroing of bits in a data element
US20190102177A1 (en) Apparatus and method for shifting quadwords and extracting packed words

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 4