KR20150081238A - 조건부 루프들을 벡터화하기 위한 명령어들 및 로직 - Google Patents

조건부 루프들을 벡터화하기 위한 명령어들 및 로직 Download PDF

Info

Publication number
KR20150081238A
KR20150081238A KR1020150087675A KR20150087675A KR20150081238A KR 20150081238 A KR20150081238 A KR 20150081238A KR 1020150087675 A KR1020150087675 A KR 1020150087675A KR 20150087675 A KR20150087675 A KR 20150087675A KR 20150081238 A KR20150081238 A KR 20150081238A
Authority
KR
South Korea
Prior art keywords
vector
data
processor
instructions
instruction
Prior art date
Application number
KR1020150087675A
Other languages
English (en)
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 KR20150081238A publication Critical patent/KR20150081238A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • G06F15/8084Special arrangements thereof, e.g. mask or switch
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Complex Calculations (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

명령어들 및 로직이 조건부 루프들의 벡터화를 제공한다. 벡터 확장 명령어는 n개의 연속하는 벡터 요소들을 보유하기 위해 소스 벡터를 특정하기 위한 파라미터, 조건 마스크 레지스터를 특정하기 위한 파라미터, 및 목적지 벡터를 특정하기 위한 목적지 파라미터를 가지며, 복수의 n개의 연속하는 벡터 요소들 각각은 m 바이트의 동일한 가변 파티션 사이즈를 갖는다. 프로세서 명령어에 응답하여, 목적지 벡터의 마스킹된 벡터 요소들 내로 데이터를 복사하지 않고, 소스 벡터 내의 연속하는 벡터 요소들로부터 데이터가 복사되어 특정된 목적지 벡터의 마스킹되지 않은 벡터 요소들 내로 확장되고, n은 실행된 프로세서 명령어에 응답하여 변화한다. 소스 벡터는 레지스터일 수 있고, 목적지 벡터는 메모리에 있을 수 있다. 일부 실시예들은 조건 결정의 카운트를 저장한다. 대안적인 실시예들은 예를 들어, 타겟 어드레스들, 또는 테이블 오프셋들, 또는 프로세싱 지시어들의 표시자들 등과 같은 다른 데이터를 저장할 수 있다.

Description

조건부 루프들을 벡터화하기 위한 명령어들 및 로직{INSTRUCTIONS AND LOGIC TO VECTORIZE CONDITIONAL LOOPS}
본 발명은 프로세싱 로직, 마이크로프로세서들, 및 프로세서 또는 다른 프로세싱 로직에 의해 실행될 때 논리적, 수학적, 또는 다른 기능적 연산들을 수행하는 연관된 명령어 세트 아키텍처에 관한 것이다. 특히, 본 발명은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어들 및 로직에 관한 것이다.
현대의 프로세서들은 종종 계산 집중적인 연산들을 제공하는 명령어들을 포함하지만, 예를 들어, SIMD(single-instruction multiple-data) 벡터 레지스터들과 같은 다양한 데이터 저장 디바이스들을 이용하는 효율적인 구현을 통해 이용될 수 있는 고레벨의 데이터 병렬화(a high level of data parallelism)를 제공한다. SIMD 실행에서, 단일 명령어는 복수의 데이터 요소들에 대해 함께 또는 동시에 동작한다. 이것은 통상적으로 레지스터들 및 산술 논리 장치(arithmetic logic unit; ALU)들과 같은 다양한 리소스들의 폭을 확장하여 그것들이 각각 복수의 데이터 요소들에 대해 보유(hold) 또는 동작할 수 있게 함으로써 구현된다.
중앙 프로세싱 유닛(CPU)은 벡터들의 SIMD 프로세싱을 지원하기 위해 그러한 병렬 하드웨어를 제공할 수 있다. 벡터는 다수의 연속하는 데이터 요소들을 보유하는 데이터 구조이다. 사이즈 L의 벡터 레지스터는 사이즈 M의 N개의 벡터 요소들을 포함할 수 있고, 여기서 N=L/M이다. 예를 들어, 64 바이트 벡터 레지스터는 (a) 각 요소가 1 바이트를 차지하는 데이터 아이템을 보유하는 64개의 벡터 요소들, (b) 각각 2 바이트(또는 1 "워드")를 차지하는 데이터 아이템들을 보유하는 32개의 벡터 요소들, (c) 각각 4 바이트(또는 1 "더블워드")를 차지하는 데이터 아이템들을 보유하는 16개의 벡터 요소들, 또는 (d) 각각 8 바이트(또는 1 "쿼드워드")를 차지하는 데이터 아이템들을 보유하는 8개의 벡터 요소들로 분할될 수 있다.
다수의 애플리케이션들은 대량의 데이터 레벨 병렬화를 가지며, SIMD 지원으로부터 이득을 볼 수 있다. SIMD 효율성을 유지하기 위하여, 일부 아키텍처들은 SIMD 산술 연산들뿐만 아니라 SIMD 메모리 판독 및 기입과 SIMD 셔플 및 순열 연산들을 허용한다. 그러나, 일부 애플리케이션들은 스파스 위치들(sparse locations)의 집합에 대한 연산들에서 상당량의 시간을 보낸다. 또한, 때때로 순차적 및/또는 조건부 연산들이 수행되고, 그래서 이들 애플리케이션들은 SIMD 연산들을 갖는 것으로부터 제한된 이득만을 볼 수 있다.
예를 들어, PARSEC(Princeton Application Repository for Shared-Memory Computers)는 멀티스레드형 프로그램들로 이루어진 벤치마크 묶음(benchmark suite)이다. 묶음은 신흥 워크로드(emerging workloads)에 초점을 맞추고, 칩-멀티프로세서들에 대한 차세대 공유 메모리 프로그램들을 대표하는 것으로 설계되었다. PARSEC 프로그램들 중 하나인, 스트림클러스터(streamcluster)는 각 포인트가 그의 가장 가까운 센터에 할당될 수 있도록 미리 결정된 개수의 중간값들을 찾음으로써 온라인 클러스터링 문제들을 해결한다. 프로그램은 그의 시간의 대부분을 새로운 센터를 오픈하는 이득을 평가하는 데 보낸다. 병렬 이득 계산은 다음의 루프를 포함하는, pgain이라고 하는 함수로 구현된다:
Figure pat00001
위의 예시적인 루프는 벡터화가 실현하기 어려운, 메모리 어레이들에서 수행되는 조건부 연산들을 예시하며, 그렇게 제한된 이득은 SIMD 연산들을 허용하는 프로세서 아키텍처들로부터 볼 수 있다.
지금까지, 그러한 성능 제한 이슈들에 대한 잠재적인 해결책들, 순차적 및/또는 조건부 연산들, 및 다른 병목들이 적절히 탐구되지 않았다.
본 발명은 첨부 도면들에서 한정이 아닌 예시에 의해 설명된다.
도 1a는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위해 명령어들을 실행하는 시스템의 일 실시예의 블록도이다.
도 1b는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위해 명령어들을 실행하는 시스템의 다른 실시예의 블록도이다.
도 1c는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위해 명령어들을 실행하는 시스템의 다른 실시예의 블록도이다.
도 2는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위해 명령어들을 실행하는 프로세서의 일 실시예의 블록도이다.
도 3a는 일 실시예에 따른 팩형 데이터 타입들(packed data types)을 예시한다.
도 3b는 일 실시예에 따른 팩형 데이터 타입들을 예시한다.
도 3c는 일 실시예에 따른 팩형 데이터 타입들을 예시한다.
도 3d는 일 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어 인코딩을 예시한다.
도 3e는 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어 인코딩을 예시한다.
도 3f는 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어 인코딩을 예시한다.
도 3g는 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어 인코딩을 예시한다.
도 3h는 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어 인코딩을 예시한다.
도 4a는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 프로세서 마이크로 아키텍처의 일 실시예의 요소들을 예시한다.
도 4b는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 프로세서 마이크로 아키텍처의 다른 실시예의 요소들을 예시한다.
도 5는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 프로세서의 일 실시예의 블록도이다.
도 6은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 일 실시예의 블록도이다.
도 7은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 다른 실시예의 블록도이다.
도 8은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 컴퓨터 시스템의 다른 실시예의 블록도이다.
도 9는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 시스템 온 칩의 일 실시예의 블록도이다.
도 10은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 실행하기 위한 프로세서의 실시예의 블록도이다.
도 11은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 IP 코어 개발 시스템의 일 실시예의 블록도이다.
도 12는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 아키텍처 에뮬레이션 시스템의 일 실시예를 예시한다.
도 13은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 변환하기 위한 시스템의 일 실시예를 예시한다.
도 14a는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어를 이용하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 14b는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어를 이용하는 프로세스의 다른 실시예의 흐름도를 예시한다.
도 15a는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하는 프로세스의 일 실시예의 흐름도를 예시한다.
도 15b는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하는 프로세스의 다른 실시예의 흐름도를 예시한다.
도 16은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 프로세스의 일 실시예의 흐름도를 예시한다.
도 17은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하기 위한 장치의 실시예를 예시한다.
도 18은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하기 위한 장치의 다른 실시예를 예시한다.
다음 설명은 프로세서, 컴퓨터 시스템, 또는 다른 프로세싱 장치 내에서 또는 그와 연관하여 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어들 및 프로세싱 로직을 개시한다.
벡터 프로세서에 대한 조건부 루프들의 벡터화를 제공하는 명령어들 및 로직이 본 명세서에 개시된다. SIMD 벡터 확장 명령어는 복수의 n개의 연속하는 벡터 요소들을 보유하기 위해 소스 벡터를 특정하기 위한 소스 파라미터, 조건 마스크 레지스터를 특정하기 위한 마스크 파라미터, 및 목적지 벡터를 특정하기 위한 목적지 파라미터를 가지며, 복수의 n개의 연속하는 벡터 요소들 각각은 m 바이트의 동일한 가변 파티션 사이즈(variable partition size)를 갖는다. 프로세서 명령어에 응답하여, 데이터는 특정된 목적지 벡터의 마스킹된 벡터 요소들 내로 데이터를 복사하지 않고, 소스 벡터 내의 연속하는 벡터 요소들로부터 특정된 목적지 벡터의 마스킹되지 않은 벡터 요소들 내로 복사되고, n은 실행된 프로세서 명령어에 응답하여 변화한다. 일부 실시예들은 조건 결정의 카운트를 저장한다. 대안적인 실시예들은 예를 들어, 타겟 어드레스들, 또는 테이블 오프셋들, 또는 프로세싱 지시어들의 표시자들(indicators of processing directives) 등과 같은 다른 데이터를 저장할 수 있다.
일부 실시예들은 카운트 벡터의 요소들을 n개의 카운트 값들, 예를 들어, 연속하는 카운트 값들로 설정할 수 있다. 그 다음에, 메모리 어레이(예를 들어, is_center[i:i+n-1])의 일부가 결정 벡터를 획득하기 위해 액세스될 수 있다. SIMD 벡터 비교 연산은 그 다음에 결정 벡터에 따라 벡터 조건 마스크를 발생하는 데 이용될 수 있고, 벡터 조건 마스크는 마스크 레지스터에 저장될 수 있다. SIMD 벡터 확장 명령어를 실행하는 것에 응답하여, 데이터는 소스 벡터로부터 목적지 벡터의 마스킹된 벡터 요소들 내로 데이터를 복사하지 않고, 소스 벡터 내의 연속하는 벡터 요소들(예를 들어, 연속하는 카운트 값들)로부터 목적지 벡터의 마스킹되지 않은 벡터 요소들 내로 복사되고, n은 수신된 프로세서 명령어에 응답하여 변화한다(예를 들어, m 바이트의 가변 파티션 사이즈는 어레이 center_table[]의 정수들의 사이즈일 수 있다). 그 다음에, 목적지 벡터로부터의 데이터는 SIMD 마스킹된 벡터 기입 동작에 따라 메모리에 저장될 수 있다. 따라서, 조건부 루프의 벡터화는 본 명세서에서 아래 더 상세히 개시되는 명령어들 및 로직의 이용을 통해 실현될 수 있다.
함수 pgain로부터 벡터화된 루프를 수행하기 위한 의사 코드의 예가 아래에 도시된다:
Figure pat00002
벡터 확장 명령어에 대한 일 실시예는 메모리의 목적지 벡터(예를 들어, center_table[i: i+n-1])를 특정할 수 있으므로, 별개의 마스킹된 벡터 기입(예를 들어, maskstore) 연산에 대한 필요성을 없앨 수 있다는 것이 이해될 것이다. 또한, 조건부 루프의 벡터화는 아래 더 상세히 도시되는 바와 같이, 본 명세서에 개시된 명령어들 및 로직의 이용을 통해 실현될 수 있으므로, 성능 및 명령어 쓰루풋을 증가시키고, 전력 사용 및 에너지 소비를 감소시킨다는 것이 이해될 것이다. 이들 기술들은 대량의 연속적으로 생성된 데이터가 실시간 조건들 하에서 조직될 필요가 있는 온라인 클러스터링과 같은 애플리케이션들에서 이용될 수 있다. 그러한 애플리케이션들은 네트워크 침입 검출, 패턴 인식, 및 데이터 마이닝(data mining) 등을 포함할 수 있다.
다음 설명에서, 프로세싱 로직, 프로세서 타입들, 마이크로-아키텍처 조건들(micro-architectural conditions), 이벤트들, 인에이블먼트 메커니즘들(enablement mechanisms) 등과 같은 다수의 특정 상세가 본 발명의 실시예들의 더욱 완전한 이해를 제공하기 위하여 제시된다. 그러나, 본 발명은 그러한 특정 상세들 없이 실시될 수 있다는 것이 이 기술분야의 통상의 기술자에 의해 이해될 것이다. 부가적으로, 일부 잘 알려진 구조들, 회로들 등은 본 발명의 실시예들을 불필요하게 불명료하게 하는 것을 피하기 위해 나타내지 않았다.
다음의 실시예들은 프로세서를 참조하여 설명되지만, 다른 실시예들은 다른 타입의 집적 회로들 및 로직 디바이스들에 적용 가능하다. 본 발명의 실시예들의 유사한 기술들 및 교시들이 더 높은 파이프라인 쓰루풋 및 향상된 성능으로부터 이득을 얻을 수 있는 다른 타입들의 회로들 또는 반도체 디바이스들에 적용될 수 있다. 본 발명의 실시예들의 교시들은 데이터 조작들을 수행하는 임의의 프로세서 또는 머신에 적용 가능하다. 그러나, 본 발명은 512 bit, 256 bit, 128 bit, 64 bit, 32 bit, 또는 16 bit 데이터 연산들을 수행하는 프로세서들 또는 머신들로 한정되지 않고, 데이터의 조작 또는 관리가 수행되는 임의의 프로세서 및 머신에 적용될 수 있다. 또한, 다음의 설명은 예들을 제공하고, 첨부 도면들은 예시의 목적으로 다양한 예들을 도시한다. 그러나, 이 예들은 본 발명의 실시예들의 모든 가능한 구현들의 철저한 리스트를 제공하기보다는 본 발명의 실시예들의 예들을 제공하는 것으로만 의도되기 때문에 한정적 의미로 해석되어서는 안 된다.
아래 예들은 실행 유닛들 및 로직 회로들의 문맥에서 명령어 핸들링 및 분배를 설명하지만, 본 발명의 다른 실시예들은 머신에 의해 수행될 때 머신으로 하여금 본 발명의 적어도 일 실시예들와 일치하는 기능들을 수행하게 하는, 머신 판독 가능한 유형의 매체에 저장된 데이터 및/또는 명령어들에 의해 실현될 수 있다. 일 실시예에서, 본 발명의 실시예들과 연관된 기능들은 머신 실행 가능한 명령어들에 구체화된다. 명령어들은 명령어들로 프로그램되는 범용 또는 특수 목적용 프로세서가 본 발명의 단계들을 수행하게 하는 데 이용될 수 있다. 본 발명의 실시예들은 본 발명의 실시예들에 따라 하나 이상의 동작들을 수행하도록 컴퓨터(또는 다른 전자 디바이스들)를 프로그램하는 데 이용될 수 있는 명령어들이 거기에 저장된 머신 또는 컴퓨터 판독 가능한 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 대안적으로, 본 발명의 실시예들의 단계들은 단계들을 수행하기 위한 고정 기능 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그램된 컴퓨터 컴포넌트들과 고정 기능 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 실시예들을 수행하도록 로직을 프로그램하는 데 이용된 명령어들이 DRAM, 캐시, 플래시 메모리, 또는 다른 저장소와 같은 시스템의 메모리 내에 저장될 수 있다. 또한, 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독 가능한 매체에 의해 분배될 수 있다. 따라서, 머신 판독 가능한 매체는 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 메커니즘을 포함할 수 있고, 플로피 디스켓, 광 디스크, 콤팩트 디스크, 판독 전용 메모리(CD-ROM), 및 광자기 디스크, ROM(Read-Only Memory), RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광 카드, 플래시 메모리, 또는 전기, 광, 음향 또는 다른 형태의 전파된 신호들(예를 들어, 캐리어파, 적외선 신호, 디지털 신호 등)을 통해 인터넷을 거쳐서 정보의 전송에 이용되는 유형의 머신 판독 가능한 저장소를 포함하며, 이것으로 한정되지 않는다. 따라서, 컴퓨터 판독 가능한 매체는 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 전자 명령어들 또는 정보를 저장 또는 전송하는 데 적합한 임의의 타입의 유형의 머신 판독 가능한 매체를 포함한다.
설계는 작성에서 시뮬레이션을 거쳐 제조에 이르기까지 다양한 스테이지들을 거칠 수 있다. 설계를 표현하는 데이터는 다수의 방식으로 설계를 표현할 수 있다. 먼저, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어 또는 다른 기능 기술 언어(functional description language)를 이용하여 표현될 수 있다. 부가적으로, 로직 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 일부 스테이지들에서 생산될 수 있다. 또한, 일부 스테이지에서 대부분의 설계들은 하드웨어 모델의 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 종래의 반도체 제조 기술들이 이용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생산하는 데 이용되는 마스크들을 위한 상이한 마스크 층들에 대한 다양한 특징들의 존재 또는 부재를 특정하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독 가능한 매체에 저장될 수 있다. 디스크와 같은 메모리 또는 자기 또는 광 저장소는 그러한 정보를 전송하기 위해 변조 또는 다른 방법으로 발생된 광 또는 전기 파를 통해 전송되는 정보를 저장하는 머신 판독 가능한 매체일 수 있다. 코드 또는 설계를 표시하거나 운반하는 전기 캐리어파가 전송될 때, 전기 신호의 복사, 버퍼링, 또는 재-전송이 수행되는 한, 새로운 사본이 만들어진다. 따라서, 통신 제공자 또는 네트워크 제공자는 본 발명의 실시예들의 기술들을 구체화하는, 캐리어파로 인코딩된 정보와 같은, 적어도 일시적으로, 물품을, 유형의 머신 판독 가능한 매체에 저장할 수 있다.
현대의 프로세서들에서는, 다수의 상이한 실행 유닛들을 이용하여 다양한 코드 및 명령어들을 처리 및 실행한다. 일부는 완료하는 데 더 빠르고, 다른 것들은 완료하는 데 다수의 클록 사이클이 걸릴 수 있기 때문에 모든 명령어들이 똑같이 생성되지는 않는다. 명령어들의 쓰루풋이 더 빠를수록, 프로세서의 전체 성능은 더 좋아진다. 따라서, 많은 명령어들이 가능한 한 빨리 실행하는 것이 유익할 것이다. 그러나, 실행 시간 및 프로세서 리소스들의 면에서 더 복잡하고 더 많은 것을 요구하는 특정 명령어들이 존재한다. 예를 들어, 부동 소수점 명령어들, 로드/저장 연산들, 데이터 이동들 등이 존재한다.
인터넷, 텍스트 및 멀티미디어 애플리케이션들에서 더 많은 컴퓨터 시스템들이 이용됨에 따라, 시간이 지남에 따라 부가적인 프로세서 지원이 도입되었다. 일 실시예에서, 데이터 타입들, 명령어들, 레지스터 아키텍처, 어드레싱 모드들, 메모리 아키텍처, 인터럽트 및 예외 핸들링, 및 외부 입출력(I/O)을 포함한, 하나 이상의 컴퓨터 아키텍처와 명령어 세트가 연관될 수 있다.
일 실시예에서, 명령어 세트 아키텍처(instruction set architecture; ISA)는 하나 이상의 명령어 세트들을 구현하는 데 이용되는 프로세서 로직 및 회로들을 포함하는, 하나 이상의 마이크로 아키텍처들에 의해 구현될 수 있다. 따라서, 상이한 마이크로 아키텍처들을 갖는 프로세서들은 공통 명령어 세트의 적어도 일부를 공유할 수 있다. 예를 들어, Intel® Pentium 4 프로세서들, Intel® Core™ 프로세서들, 및 캘리포니아주 서니베일의 Advanced Micro Devices, Inc.의 프로세서들은 거의 동일한 버전의 x86 명령어 세트(더 새로운 버전으로 일부 확장들이 부가됨)를 구현하지만, 상이한 내부 설계들을 갖는다. 유사하게, ARM Holdings, Ltd., MIPS, 또는 그것들의 면허 소유자(licensee) 또는 어답터(adopter)와 같은 다른 프로세서 개발 회사들에 의해 설계된 프로세서들은 적어도 공통 명령어 세트의 일부를 공유할 수 있지만, 상이한 프로세서 설계들을 포함할 수 있다. 예를 들어, ISA의 동일한 레지스터 아키텍처는 전용 물리적 레지스터들, 레지스터 재명명 메커니즘을 이용하는 하나 이상의 동적으로 할당된 물리적 레지스터들(예를 들어, 레지스터 에일리어스 테이블(Register Alias Table; RAT), 재정렬 버퍼(Reorder Buffer; ROB) 및 퇴거 레지스터 파일(retirement register file)의 이용)을 포함한 새로운 또는 공지된 기술들을 이용하여 상이한 마이크로 아키텍처에 상이한 방식으로 구현될 수 있다. 일 실시예에서, 레지스터들은 소프트웨어 프로그래머에 의해 어드레스 가능할 수 있거나 가능하지 않을 수 있는 하나 이상의 레지스터들, 레지스터 아키텍처들, 레지스터 파일들, 또는 다른 레지스터 세트들을 포함할 수 있다.
일 실시예에서, 명령어는 하나 이상의 명령어 포맷들을 포함할 수 있다. 일 실시예에서, 명령어 포맷은 특히, 수행될 연산 및 그 연산이 수행될 피연산자(들)을 특정하기 위해 다양한 필드들(비트들의 개수, 비트들의 위치 등)을 나타낼 수 있다. 일부 명령어 포맷들은 명령어 템플릿들(또는 서브 포맷들)에 의해 더 분할되어 정의될 수 있다. 예를 들어, 주어진 명령어 포맷의 명령어 템플릿들은 명령어 포맷의 필드들의 상이한 서브세트들을 갖도록 정의되고 및/또는 주어진 필드가 상이하게 해석되도록 정의될 수 있다. 일 실시예에서, 명령어는 명령어 포맷을 이용하여(그리고, 정의된 경우, 그 명령어 포맷의 명령어 템플릿들 중 주어진 하나로) 표현되고 연산 및 연산이 수행될 피연산자들을 특정 또는 표시한다.
과학, 금융, 자동 벡터화 범용, RMS(인식, 마이닝, 및 합성), 및 시각적 및 멀티미디어 애플리케이션들(예를 들어, 2D/3D 그래픽, 이미지 프로세싱, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 조작)은 다수의 데이터 아이템들에 대해 동일한 연산이 수행되도록 요구할 수 있다. 일 실시예에서, SIMD(Single Instruction Multiple Data)는 프로세서가 복수의 데이터 요소들에 대해 하나의 연산을 수행하게 하는 명령어의 타입을 가리킨다. SIMD 기술은 각각이 별개의 값을 표현하는 다수의 고정 사이즈 또는 가변 사이즈 데이터 요소들로 레지스터의 비트들을 논리적으로 분할할 수 있는 프로세서들에서 이용될 수 있다. 예를 들어, 일 실시예에서, 64 비트 레지스터의 비트들은 각각이 별개의 16 비트 값을 표현하는, 4개의 별개의 16 비트 데이터 요소들을 포함하는 소스 피연산자로서 조직될 수 있다. 이러한 타입의 데이터는 "팩형" 데이터 타입 또는 "벡터" 데이터 타입이라고 할 수 있고, 이러한 데이터 타입의 피연산자들은 팩형 데이터 피연산자들 또는 벡터 피연산자들이라고 한다. 일 실시예에서, 팩형 데이터 아이템 또는 벡터는 단일 레지스터 내에 저장된 팩형 데이터 요소들의 시퀀스일 수 있고, 팩형 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(또는 "팩형 데이터 명령어" 또는 "벡터 명령어")의 소스 또는 목적지 피연산자일 수 있다. 일 실시예에서, SIMD 명령어는 동일한 또는 상이한 개수의 데이터 요소들을 가지고 동일한 또는 상이한 데이터 요소 순서로 동일한 또는 상이한 사이즈의 목적지 벡터 피연산자(결과 벡터 피연산자라고도 함)를 발생하기 위해 2개의 소스 벡터 피연산자들에 대해 수행될 단일 벡터 연산을 특정한다.
x86, MMX™, SSE(Streaming SIMD Extensions), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어들을 포함하는 명령어 세트를 갖는 Intel® Core™ 프로세서들, 벡터 부동 소수점(Vector Floating Point; VFP) 및/또는 NEON 명령어들을 포함하는 명령어 세트를 갖는 프로세서들의 ARM Cortex® 계열과 같은 ARM 프로세서들, 및 중국 과학원(Chinese Academy of Sciences)의 컴퓨팅 기술 기관(Institute of Computing Technology; ICT)에 의해 개발된 프로세서들의 Loongson 계열과 같은 MIPS 프로세서들에 의해 이용되는 것과 같은 SIMD 기술은 애플리케이션 성능에서 상당한 향상을 가능하게 하였다(Core™ 및 MMX™은 캘리포니아주 산타 클라라의 인텔사의 등록 상표 또는 상표이다).
일 실시예에서, 목적지 및 소스 레지스터들/데이터는 대응하는 데이터 또는 연산의 소스 및 목적지를 표현하는 일반적인 용어들이다. 일부 실시예들에서, 그것들은 도시된 것과 다른 이름들 또는 기능들을 갖는 레지스터들, 메모리, 또는 다른 저장 영역들에 의해 구현될 수 있다. 예를 들어, 일 실시예에서, "DEST1"은 임시 저장 레지스터 또는 다른 저장 영역일 수 있고, "SRC1" 및 "SRC2"는 제1 및 제2 소스 저장 레지스터 또는 다른 저장 영역일 수 있고, 등등이다. 다른 실시예들에서, SRC 및 DEST 저장 영역들 중 2개 이상의 영역은 동일한 저장 영역(예를 들어, SIMD 레지스터) 내의 상이한 데이터 저장 요소들에 대응할 수 있다. 일 실시예에서, 소스 레지스터들 중 하나는 또한 예를 들어, 제1 및 제2 소스 데이터에 대해 수행되는 연산의 결과를 목적지 레지스터들로서 역할을 하는 2개의 소스 레지스터들 중 하나에 라이트백(write back)함으로써 목적지 레지스터로서 작용할 수 있다.
도 1a는 본 발명의 일 실시예에 따라 명령어를 실행하는 실행 유닛들을 포함하는 프로세서로 형성되는 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은 본 명세서에 설명된 실시예에서와 같이, 본 발명에 따라, 프로세스 데이터에 대한 알고리즘들을 수행하기 위한 로직을 포함하는 실행 유닛들을 이용하는 프로세서(102)와 같은 컴포넌트를 포함한다. 시스템(100)은 캘리포니아주 산타클라라의 인텔사로부터 이용 가능한 PENTIUM® III, PENTIUM® 4, Xeon™, Itanium® XScale™ 및/또는 StrongARM™ 마이크로프로세서들에 기초한 프로세싱 시스템들을 대표하지만, 다른 시스템들(다른 마이크로프로세서들을 갖는 PC들, 엔지니어링 워크스테이션들, 셋톱 박스들 등을 포함함)도 이용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 워싱턴주 레드몬드의 마이크로소프트사로부터 이용 가능한 WINDOWS™ 오퍼레이팅 시스템의 버전을 실행할 수 있지만, 다른 오퍼레이팅 시스템들(예를 들어, UNIX 및 Linux), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스들도 이용될 수 있다. 따라서, 본 발명의 실시예들은 하드웨어 회로 및 소프트웨어의 임의의 특정 조합으로 한정되지 않는다.
실시예들은 컴퓨터 시스템들로 한정되지 않는다. 본 발명의 대안적인 실시예들은 핸드헬드 디바이스들 및 임베디드 애플리케이션들과 같은 다른 디바이스들에서 이용될 수 있다. 핸드헬드 디바이스들의 일부 예들은 셀룰러 전화, 인터넷 프로토콜 디바이스, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 임베디드 애플리케이션들은 적어도 일 실시예에 따라 하나 이상의 명령어들을 수행할 수 있는 마이크로컨트롤러, 디지털 신호 처리기(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 임의의 다른 시스템을 포함할 수 있다.
도 1a는 본 발명의 일 실시예에 따라 적어도 하나의 명령어를 수행하도록 알고리즘을 수행하기 위해 하나 이상의 실행 유닛들(108)을 포함하는 프로세서(102)로 형성되는 컴퓨터 시스템(100)의 블록도이다. 일 실시예는 단일 프로세서 데스크톱 또는 서버 시스템의 문맥에서 설명될 수 있지만, 대안적인 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브' 시스템 아키텍처의 예이다. 컴퓨터 시스템(100)은 데이터 신호들을 처리하기 위해 프로세서(102)를 포함한다. 프로세서(102)는 CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는 예를 들어 디지털 신호 처리기와 같은 임의의 다른 프로세서 디바이스일 수 있다. 프로세서(102)는 프로세서(102)와 시스템(100)의 다른 컴포넌트들 사이에 데이터 신호들을 전송할 수 있는 프로세서 버스(110)에 결합된다. 시스템(100)의 요소들은 이 기술분야의 통상의 기술자에게 잘 알려진 종래의 기능들을 수행한다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일 내부 캐시 또는 복수 레벨의 내부 캐시를 가질 수 있다. 대안적으로, 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 상주할 수 있다. 다른 실시예들은 또한 특정 구현 및 필요에 따라 내부 및 외부 캐시들 둘다의 조합을 포함할 수 있다. 레지스터 파일(106)은 정수 레지스터들, 부동 소수점 레지스터들, 상태 레지스터들, 및 명령어 포인터 레지스터들을 포함한 다양한 레지스터들에 상이한 타입의 데이터를 저장할 수 있다.
정수 및 부동 소수점 연산들을 수행하기 위한 로직을 포함한 실행 유닛(108)이 또한 프로세서(102)에 상주한다. 프로세서(102)는 또한 특정 마이크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함한다. 일 실시예에 대하여, 실행 유닛(108)은 팩형 명령어 세트(109)를 핸들링하기 위한 로직을 포함한다. 명령어들을 실행하기 위한 연관된 회로와 함께, 범용 프로세서(102)의 명령어 세트에 팩형 명령어 세트(109)를 포함함으로써, 많은 멀티미디어 애플리케이션들에 의해 이용되는 연산들은 범용 프로세서(102)에서 팩형 데이터를 이용하여 수행될 수 있다. 따라서, 많은 멀티미디어 애플리케이션들은 팩형 데이터에 대해 연산들을 수행하기 위한 프로세서의 데이터 버스의 전체 폭을 이용함으로써 더욱 효율적으로 가속 및 실행될 수 있다. 이것은 한번에 하나의 데이터 요소에 대해 하나 이상의 연산들을 수행하기 위해 프로세서의 데이터 버스에 걸쳐서 더 작은 데이터 단위를 전송할 필요성을 제거할 수 있다.
실행 유닛(108)의 대안적인 실시예들은 마이크로컨트로러, 임베디드 프로세서, 그래픽 디바이스, DSP, 및 다른 타입의 논리 회로들에서 이용될 수도 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 DRAM(dynamic random access memory) 디바이스, SRAM(static random access memory) 디바이스, 플래시 메모리 디바이스, 또는 다른 메모리 디바이스일 수 있다. 메모리(120)는 프로세서(102)에 의해 실행될 수 있는 데이터 신호들에 의해 표현되는 명령어들 및/또는 데이터를 저장할 수 있다.
시스템 로직 칩(116)이 프로세서 버스(110) 및 메모리(120)에 결합된다. 예시된 실시예의 시스템 로직 칩(116)은 메모리 컨트롤러 허브(memory controller hub; MCH)이다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)에 통신할 수 있다. MCH(116)는 명령어 및 데이터 저장을 위한 그리고 그래픽 커맨드, 데이터 및 텍스처들의 저장을 위한 메모리(120)에 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120), 및 시스템(100)의 다른 컴포넌트들 사이에 데이터 신호들을 보내고, 프로세서 버스(110), 메모리(120), 및 시스템 I/O(122) 사이에 데이터 신호들을 브리징하기 위한 것이다. 일부 실시예들에서, 시스템 로직 칩(116)은 그래픽 컨트롤러(112)에 결합하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 결합된다. 그래픽 카드(112)는 AGP(Accelerated Graphics Port) 인터커넥트(114)를 통해 MCH(116)에 결합된다.
시스템(100)은 I/O 컨트롤러 허브(ICH)(130)에 MCH(116)를 결합하기 위해 독점 허브 인터페이스 버스(122)를 이용한다. ICH(130)는 로컬 I/O 버스를 통해 일부 I/O 디바이스들에 직접 접속들을 제공한다. 로컬 I/O 버스는 메모리(120), 칩셋, 및 프로세서(102)에 주변장치들을 접속하기 위한 고속 I/O 버스이다. 일부 예들이 오디오 컨트롤러, 펌웨어 허브(플래시 BIOS)(128), 무선 트랜시버(126), 데이터 저장소(124), 사용자 입력 및 키보드 인터페이스들을 포함하는 레거시 I/O 컨트롤러, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 컨트롤러(134)이다. 데이터 저장 디바이스(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스, 또는 다른 대용량 저장 디바이스를 포함할 수 있다.
시스템의 다른 실시예에 대하여, 일 실시예에 따른 명령어는 시스템 온 칩과 이용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리로 이루어진다. 하나의 그러한 시스템을 위한 메모리는 플래시 메모리이다. 플래시 메모리는 프로세서 및 다른 시스템 컴포넌트들과 동일한 다이에 배치될 수 있다. 부가적으로, 메모리 컨트롤러 또는 그래픽 컨트롤러와 같은 다른 로직 블록들은 또한 시스템 온 칩에 배치될 수 있다.
도 1b는 본 발명의 일 실시예의 원리들을 구현하는 데이터 프로세싱 시스템(140)을 예시한다. 본 명세서에 설명된 실시예들은 본 발명의 실시예들의 범위에서 벗어나지 않고 대안적인 프로세싱 시스템들과 이용될 수 있다는 것이 이 기술분야의 통상의 기술자에 의해 쉽게 이해될 것이다.
컴퓨터 시스템(140)은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는 프로세싱 코어(159)를 포함한다. 일 실시예에 대하여, 프로세싱 코어(159)는 CISC, RISC 또는 VLIW 타입 아키텍처(이것으로 한정되지 않음)를 포함하는, 임의의 타입의 아키텍처의 프로세싱 유닛을 나타낸다. 프로세싱 코어(159)는 또한 하나 이상의 프로세스 기술들에서 제조를 위해 적절할 수 있고, 충분한 상세로 머신 판독 가능한 매체에 표현되는 것에 의해, 상기 제조를 용이하게 하는 데 적절할 수 있다.
프로세싱 코어(159)는 실행 유닛(142), 레지스터 파일(들)(145)의 세트, 및 디코더(144)를 포함한다. 프로세싱 코어(159)는 또한 본 발명의 실시예들의 이해에 필요하지 않은 부가적인 회로(도시되지 않음)를 포함한다. 실행 유닛(142)은 프로세싱 코어(159)에 의해 수신된 명령어들을 실행하기 위해 이용된다. 통상적인 프로세서 명령어들을 수행하는 것 이외에, 실행 유닛(142)은 팩형 데이터 포맷들에 대해 연산들을 수행하기 위해 팩형 명령어 세트(143)의 명령어들을 수행할 수 있다. 팩형 명령어 세트(143)는 본 발명의 실시예들을 수행하기 위한 명령어들 및 다른 팩형 명령어들을 포함한다. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 결합된다. 레지스터 파일(145)은 데이터를 포함한 정보를 저장하기 위한 프로세싱 코어(159) 상의 저장 영역을 표현한다. 앞서 언급한 바와 같이, 팩형 데이터를 저장하는 데 이용되는 저장 영역은 중요하지 않다는 것을 이해한다. 실행 유닛(142)은 디코더(144)에 결합된다. 디코더(144)는 프로세싱 코어(159)에 의해 수신된 명령어들을 제어 신호들 및/또는 마이크로코드 엔트리 포인트들로 디코딩하기 위해 이용된다. 이들 제어 신호들 및/또는 마이크로코드 엔트리 포인트들에 응답하여, 실행 유닛(142)은 적절한 연산들을 수행한다. 일 실시예에서, 디코더는 명령어 내에 표시된 대응하는 데이터에 대해 어떤 연산이 수행되어야 하는지를 나타낼, 명령어의 연산 코드를 해석하는 데 이용된다.
프로세싱 코어(159)는 예를 들어, SDRAM(synchronous dynamic random access memory) 컨트롤(146), SRAM(static random access memory) 컨트롤(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA(personal computer memory card international association)/CF(compact flash) 카드 컨트롤(149), 액정 디스플레이(liquid crystal display; LCD) 컨트롤(150), 직접 메모리 액세스(direct memory access; DMA) 컨트롤러(151), 및 대안적인 버스 마스터 인터페이스(152)(이것으로 한정되지 않음)를 포함할 수 있는 다양한 다른 시스템 디바이스들과 통신하기 위해 버스(141)와 결합된다. 일 실시예에서, 데이터 프로세싱 시스템(140)은 또한 I/O 버스(153)를 통해 다양한 I/O 디바이스들과 통신하기 위해 I/O 브리지(154)를 포함할 수 있다. 그러한 I/O 디바이스들은 예를 들어, UART(universal asynchronous receiver/transmitter)(155), USB(universal serial bus)(156), 블루투스(Bluetooth) 무선 UART(157) 및 I/O 확장 인터페이스(158)(이것으로 한정되지 않음)를 포함할 수 있다.
데이터 프로세싱 시스템(140)의 일 실시예는 텍스트 스트링 비교 연산을 포함하는 SIMD 연산들을 수행할 수 있는 모바일, 네트워크 및/또는 무선 통신 및 프로세싱 코어(159)를 제공한다. 프로세싱 코어(159)는 Walsh-Hadamard 변환, 고속 푸리에 변환(fast Fourier transform; FFT), 이산 코사인 변환(discrete cosine transform; DCT), 및 그것들 각각의 역변환들과 같은 이산 변환들; 색 공간 변환(color space transformation), 비디오 인코드 모션 추정(video encode motion estimation) 또는 비디오 디코드 모션 보상(video decode motion compensation)과 같은 압축/압축해제 기술들; 및 펄스 코드 변조(pulse coded modulation; PCM)와 같은 변조/복조(MODEM) 기능들을 포함하는 다양한 오디오, 비디오, 이미징 및 통신 알고리즘들로 프로그램될 수 있다.
도 1c는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어들을 실행할 수 있는 데이터 프로세싱 시스템의 다른 대안적인 실시예들을 예시한다. 하나의 대안적인 실시예에 따르면, 데이터 프로세싱 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(161), 캐시 메모리(167), 및 입출력 시스템(168)을 포함할 수 있다. 입출력 시스템(168)은 옵션으로 무선 인터페이스(169)에 결합될 수 있다. SIMD 코프로세서(161)는 일 실시예에 따른 명령어들을 포함하는 연산들을 수행할 수 있다. 프로세싱 코어(170)는 하나 이상의 프로세스 기술들에서 제조를 위해 적절할 수 있고, 충분한 상세로 머신 판독 가능한 매체에 표현됨으로써, 프로세싱 코어(170)를 포함하는 데이터 프로세싱 시스템(160)의 전부 또는 일부의 제조를 용이하게 하는 데 적절할 수 있다.
일 실시예에 대하여, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들)(164)의 세트를 포함한다. 메인 프로세서(166)의 일 실시예는 실행 유닛(162)에 의한 실행을 위한 일 실시예에 따른 명령어들을 포함하는 명령어 세트(163)의 명령어들을 인식하기 위한 디코더(165)를 포함한다. 대안적인 실시예들에 대하여, SIMD 코프로세서(161)는 또한 명령어 세트(163)의 명령어들을 디코딩하기 위해 디코더(165B)의 적어도 일부를 포함한다. 프로세싱 코어(170)는 또한 본 발명의 실시예들의 이해에 필요하지 않은 부가적인 회로(도시되지 않음)를 포함한다.
동작에서, 메인 프로세서(166)는 캐시 메모리(167), 및 입출력 시스템(168)과 상호작용들을 포함하는 일반적인 타입의 데이터 프로세싱 연산들을 제어하는 데이터 프로세싱 명령어들의 스트림을 실행한다. 데이터 프로세싱 명령어들의 스트림 내에는 SIMD 코프로세서 명령어들이 내장되어 있다. 메인 프로세서(166)의 디코더(165)는 부착된 SIMD 코프로세서(161)에 의해 실행되어야 하는 타입으로 된 것으로서 이들 SIMD 코프로세서 명령어들을 인식한다. 따라서, 메인 프로세서(166)는 코프로세서 버스(171) 상에 이들 SIMD 코프로세서 명령어들(또는 SIMD 코프로세서 명령어들을 표현하는 제어 신호들)을 발행하고, 그로부터 그것들은 임의의 부착된 SIMD 코프로세서들에 의해 수신된다. 이 경우, SIMD 코프로세서(161)는 그것에 의도된 임의의 수신된 SIMD 코프로세서 명령어들을 수락하고 실행할 것이다.
데이터는 SIMD 코프로세서 명령어들에 의한 프로세싱을 위해 무선 인터페이스(169)를 통해 수신될 수 있다. 일 예의 경우, 음성 통신이 디지털 신호의 형태로 수신될 수 있고, 이것은 음성 통신들을 대표하는 디지털 오디오 샘플들을 재생성하기 위해 SIMD 코프로세서 명령어들에 의해 프로세싱될 수 있다. 다른 예의 경우, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있고, 이것은 디지털 오디오 샘플들 및/또는 모션 비디오 프레임들을 재생성하기 위해 SIMD 코프로세서 명령어들에 의해 프로세싱될 수 있다. 프로세싱 코어(170)의 일 실시예에 대하여, 메인 프로세서(166), 및 SIMD 코프로세서(161)는 실행 유닛(162), 레지스터 파일(들)(164)의 세트, 및 일 실시예에 따른 명령어들을 포함하는 명령어 세트(163)의 명령어들을 인식하기 위한 디코더(165)를 포함하는 단일 프로세싱 코어(170)에 집적된다.
도 2는 본 발명의 일 실시예에 따른 명령어들을 수행하기 위해 논리 회로들을 포함하는 프로세서(200)에 대한 마이크로 아키텍처의 블록도이다. 일부 실시예들에서, 일 실시예에 따른 명령어는 단일 정밀도 및 배 정밀도 정수 및 부동 소수점 데이터타입들과 같은 데이터타입들뿐만 아니라, 바이트, 워드, 더블워드, 쿼드워드 등의 사이즈들을 갖는 데이터 요소들에 대해 연산하도록 구현될 수 있다. 일 실시예에서, 순차 프론트 엔드(in-order front end)(201)는 실행될 명령어들을 인출하고 그것들이 프로세서 파이프라인에서 나중에 이용되도록 준비하는 프로세서(200)의 일부이다. 프론트 엔드(201)는 몇몇 유닛들을 포함할 수 있다. 일 실시예에서, 명령어 선인출기(instruction prefetcher)(226)는 메모리로부터 명령어들을 인출하여 그것들을 명령어 디코더(228)에 공급하고 명령어 디코더(228)는 그것들을 디코딩 또는 해석한다. 예를 들어, 일 실시예에서, 디코더는 수신된 명령어를 머신이 실행할 수 있는 "마이크로 명령어들" 또는 "마이크로 연산들"(micro op 또는 uop라고도 함)이라고 하는 하나 이상의 연산들로 디코딩한다. 다른 실시예들에서, 디코더는 명령어를 일 실시예에 따른 연산들을 수행하기 위해 마이크로 아키텍처에 의해 이용되는 연산 코드 및 대응하는 데이터 및 제어 필드들로 파싱한다(parse). 일 실시예에서, 트레이스 캐시(230)는 디코딩된 uop를 취하고, 그것들을 실행을 위한 uop 큐(234) 내의 프로그램 정렬 시퀀스들로 조립한다. 트레이스 캐시(230)가 복잡한 명령어를 만나면, 마이크로 코드 ROM(232)은 연산을 완료하는 데 필요한 uop를 제공한다.
일부 명령어들은 단일 micro-op로 변환되고, 다른 명령어들은 전체 연산을 완료하기 위해 몇개의 micro-op를 필요로 한다. 일 실시예에서, 명령어를 완료하는 데 5개 이상의 micro-op가 필요한 경우, 디코더(228)는 마이크로 코드 ROM(232)에 액세스하여 명령어를 행한다. 일 실시예에서, 명령어는 명령어 디코더(228)에서 프로세싱을 위한 소수의 micro op로 디코딩될 수 있다. 다른 실시예에서, 명령어는 연산을 달성하는 데 필요한 다수의 micro-op가 마이크로 코드 ROM(232) 내에 저장될 수 있다. 트레이스 캐시(230)는 마이크로 코드 ROM(232)으로부터 일 실시예에 따른 하나 이상의 명령어를 완료하기 위해 마이크로 코드 시퀀스들을 판독하기 위한 올바른 마이크로 명령어 포인터를 결정하는 엔트리 포인트 프로그램 가능한 로직 어레이(PLA)를 가리킨다. 마이크로 코드 ROM(232)이 명령어를 위한 micro-op들의 시퀀싱을 끝마친 후에, 머신의 프론트 엔드(201)는 트레이스 캐시(230)로부터 micro-op들의 인출을 재개한다.
비순차 실행 엔진(203)은 명령어들이 실행을 위해 준비되는 곳이다. 비순차 실행 로직은 그것들이 파이프라인을 고 다운(go down)하고 실행을 위해 스케줄링될 때 성능을 최적화하기 위해 명령어들의 흐름을 스무스 아웃(smooth out)하여 재정렬하기 위한 다수의 버퍼들을 갖는다. 할당기 로직은 각각의 uop가 실행을 위해 필요로 하는 머신 버퍼들 및 리소스들을 할당한다. 레지스터 재명명 로직은 레지스터 파일 내의 엔트리들에 대해 로직 레지스터들을 재명명한다. 할당기는 또한 명령어 스케줄러들, 즉, 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동 소수점 스케줄러(204), 및 간단한 부동 소수점 스케줄러(206)의 앞에, 2개의 uop 큐 중 하나의 각각의 uop에 대해 엔트리를 할당하고, 하나의 uop 큐는 메모리 연산들을 위한 것이고, 하나의 uop 큐는 비-메모리 연산들을 위한 것이다. uop 스케줄러들(202, 204, 206)은 uop가 그것들의 연산을 완료하는 데 필요로 하는 실행 리소스들의 가용성 및 그것들의 의존적 입력 레지스터 피연산자 소스들의 준비태세에 기초하여 uop가 실행할 준비가 되어 있는 때를 결정한다. 일 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각각의 절반에 스케줄링할 수 있고, 다른 스케줄러들은 메인 프로세서 클록 사이클 당 한번만 스케줄링할 수 있다. 스케줄러들은 디스패치 포트들이 실행을 위한 uop들을 스케줄링하도록 중재한다.
레지스터 파일들(208, 210)은 실행 블록(211) 내의 실행 유닛들(212, 214, 216, 218, 220, 222, 224)과 스케줄러들(202, 204, 206) 사이에 놓인다. 정수 및 부동 소수점 연산들을 위해 각각 별개의 레지스터 파일(208, 210)이 존재한다. 일 실시예의 각각의 레지스터 파일(208, 210)은 또한 새로운 의존적 uop들에 대해 레지스터 파일 내로 아직 기입되지 않은 막 완료된 결과들을 바이패스 또는 포워드할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 다른 것과 데이터를 통신할 수 있다. 일 실시예에서, 정수 레지스터 파일(208)은 2개의 별개의 레지스터 파일들로 분할되고, 하나의 레지스터 파일은 데이터의 하위 32 비트들을 위한 것이고, 제2 레지스터 파일은 데이터의 상위 32 비트들을 위한 것이다. 일 실시예의 부동 소수점 레지스터 파일(210)은 부동 소수점 명령어들이 통상적으로 폭이 64 내지 128 비트들인 피연산자들을 갖기 때문에 128 비트 폭 엔트리들을 갖는다.
실행 블록(211)은 명령어들이 실제로 실행되는 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은 마이크로 명령어들이 실행하는 데 필요로 하는 정수 및 부동 소수점 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. 일 실시예의 프로세서(200)는 다수의 실행 유닛들로 이루어진다: 어드레스 생성 유닛(address generation unit; AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224). 일 실시예에서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD, 및 SSE, 또는 다른 연산들을 실행한다. 일 실시예의 부동 소수점 ALU(222)는 나누기, 제곱근, 및 나머지 micro-op를 실행하기 위해 64 비트 바이 64 비트 부동 소수점 디바이더를 포함한다. 본 발명의 실시예들에서, 부동 소수점 값을 포함하는 명령어들은 부동 소수점 하드웨어로 핸들링될 수 있다. 일 실시예에서, ALU 연산들은 고속 ALU 실행 유닛들(216, 218)을 거친다. 일 실시예의 고속 ALU들(216, 218)은 클록 사이클의 절반의 유효 레이턴시로 고속 연산들을 실행할 수 있다. 일 실시예에서, 저속 ALU(220)는 곱셈기, 시프트, 플래그 로직, 및 브랜치 프로세싱과 같은 긴 레이턴시 타입의 연산들을 위해 정수 실행 하드웨어를 포함하기 때문에, 가장 복잡한 정수 연산들은 저속 ALU(220)를 거친다. 메모리 로드/저장 연산들은 AGU들(212, 214)에 의해 실행된다. 일 실시예에서, 정수 ALU들(216, 218, 220)은 64 비트 데이터 피연산자들에 대한 정수 연산들을 수행하는 문맥에서 설명된다. 대안적인 실시예들에서, ALU들(216, 218, 220)은 16, 32, 128, 256 등을 포함하는 다양한 데이터 비트들을 지원하도록 구현될 수 있다. 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭의 비트들을 갖는 피연산자들의 범위를 지원하도록 구현될 수 있다. 일 실시예에서, 부동 소수점 유닛들(222, 224)은 SIMD 및 멀티미디어 명령어들과 결합하여 128 비트 폭 팩형 데이터 피연산자들에 대해 연산할 수 있다.
일 실시예에서, uop 스케줄러들(202, 204, 206)은 부모 로드(parent load)가 실행을 끝내기 전에 의존적 연산들을 디스패치한다. uop들이 프로세서(200)에서 추론적으로 스케줄링되어 실행될 때, 프로세서(200)는 또한 메모리 미스들을 핸들링하기 위한 로직을 포함한다. 데이터 로드가 데이터 캐시에서 미스하면, 일시적으로 부정확한 데이터로 스케줄러를 떠난 파이프라인에서 인플라이트(in flight) 의존적 연산들이 존재할 수 있다. 리플레이(replay) 메커니즘은 부정확한 데이터를 이용하는 명령어들을 추적하여 재실행한다. 오직 의존적 연산들이 리플레이될 필요가 있고, 독립적 연산들은 완료하도록 허용된다. 프로세서의 일 실시예의 스케줄러들 및 리플레이 메커니즘은 또한 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 명령어들을 캐치하도록 설계된다.
용어 "레지스터들"은 피연산자들을 식별하기 위해 명령어들의 일부로서 이용되는 온-보드 프로세서 저장 장소들을 가리킬 수 있다. 다시 말해, 레지스터들은 (프로그래머의 관점에서) 프로세서의 외부에서 이용 가능한 것들일 수 있다. 그러나, 실시예의 레지스터들은 의미상 특정 타입의 회로로 한정되어서는 안 된다. 오히려, 실시예의 레지스터들은 데이터를 저장하여 제공하며, 본 명세서에 설명된 기능들을 수행할 수 있다. 본 명세서에 설명된 레지스터들은 전용 물리적 레지스터들, 레지스터 재명명을 이용하는 동적으로 할당된 물리적 레지스터들, 전용 및 동적으로 할당된 물리적 레지스터들의 조합들 등과 같은, 임의의 수의 상이한 기술들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 팩형 데이터를 위한 8개의 멀티미디어 SIMD 레지스터들을 포함한다. 아래 논의에서, 레지스터들은 캘리포니아주 산타 클라라의 인텔사로부터의 MMX 기술로 인에이블되는 마이크로프로세서들에서 64 비트 폭 MMX™ 레지스터들(일부 경우에 'mm' 레지스터들이라고도 함)과 같은 팩형 데이터를 보유하기 위해 설계된 데이터 레지스터들인 것으로 이해된다. 정수 및 부동 소수점 형태 둘다로 이용 가능한 이들 MMX 레지스터들은 SIMD 및 SSE 명령어들을 동반하는 팩형 데이터 요소들과 연산할 수 있다. 유사하게, SSE2, SSE3, SSE4, 또는 그 이상(일반적으로 "SSEx"라고 함) 기술과 관련된 128 비트 폭 MMX 레지스터들은 또한 그러한 팩형 데이터 피연산자들을 보유하는 데 이용될 수 있다. 일 실시예에서, 팩형 데이터 및 정수 데이터를 저장함에 있어서, 레지스터들은 2개의 데이터 타입 사이를 구별할 필요가 없다. 일 실시예에서, 정수 및 부동 소수점은 동일한 레지스터 파일 또는 상이한 레지스터 파일들에 포함된다. 또한, 일 실시예에서, 부동 소수점 및 정수 데이터는 상이한 레지스터들 또는 동일한 레지스터들에 저장될 수 있다.
다음의 도면들의 예들에서, 다수의 데이터 피연산자들이 설명된다. 도 3a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 팩형 데이터 타입 표현들을 예시한다. 도 3a는 128 비트 폭 피연산자들에 대한 팩형 바이트(310), 팩형 워드(320), 및 팩형 더블워드(dword)(330)에 대한 데이터 타입들을 예시한다. 이 예의 팩형 바이트 포맷(310)은 128 비트 길이이고 16개의 팩형 바이트 데이터 요소들을 포함한다. 바이트는 여기서 8 비트의 데이터로서 정의된다. 각 바이트 데이터 요소에 대한 정보는 바이트 0에 대해 비트 7 내지 비트 0, 바이트 1에 대해 비트 15 내지 비트 8, 바이트 2에 대해 비트 23 내지 비트 16, 및 마지막으로 바이트 15에 대해 비트 120 내지 비트 127에 저장된다. 따라서, 모든 이용 가능한 비트들은 레지스터에서 이용된다. 이러한 저장 구성은 프로세서의 저장 효율성을 증가시킨다. 또한, 16개의 데이터 요소들이 액세스되는 경우, 하나의 연산이 이제 병렬로 16개의 데이터 요소들에 대해 수행될 수 있다.
일반적으로, 데이터 요소는 동일한 길이의 다른 데이터 요소들을 갖는 단일 레지스터 또는 메모리 장소에 저장되는 개별 데이터 조각이다. SSEx 기술에 관련된 팩형 데이터 시퀀스들에서, MMX 레지스터에 저장된 데이터 요소들의 개수는 개별 데이터 요소의 비트들에 길이로 나누어진 128 비트들이다. 유사하게, MMX 및 SSE 기술과 관련된 팩형 데이터 시퀀스들에서, MMX 레지스터에 저장된 데이터 요소들의 개수는 개별 데이터 요소의 비트들에 길이로 나누어진 64 비트들이다. 도 3a에 예시된 데이터 타입들은 128 비트 길이이지만, 본 발명의 실시예들은 또한 64 비트 폭, 256 비트 폭, 512 비트 폭, 또는 다른 사이즈의 피연산자들과 연산할 수 있다. 이 예의 팩형 워드 포맷(320)은 128 비트 길이이고 8개의 팩형 워드 데이터 요소들을 포함한다. 각각의 팩형 워드는 16 비트의 정보를 포함한다. 도 3a의 팩형 더블워드 포맷(330)은 128 비트 길이이고, 4개의 팩형 더블워드 데이터 요소들을 포함한다. 각 팩형 더블워드 데이터 요소는 32 비트의 정보를 포함한다. 팩형 쿼드워드는 128 비트 길이이고, 2개의 팩형 쿼드 워드 데이터 요소들을 포함한다.
도 3b는 대안적인 레지스터 내 데이터 저장 포맷들(in-register data storage formats)을 예시한다. 각 팩형 데이터는 2개 이상의 독립적 데이터 요소를 포함할 수 있다. 3개의 팩형 데이터 포맷들이 예시된다: 팩형 하프(341), 팩형 싱글(342), 및 팩형 더블(343). 팩형 하프(341), 팩형 싱글(342), 및 팩형 더블(343)의 일 실시예는 고정 소수점 데이터 요소들을 포함한다. 대안적인 실시예에서, 팩형 하프(341), 팩형 싱글(342), 및 팩형 더블(343) 중 하나 이상은 부동 소수점 데이터 요소들을 포함할 수 있다. 팩형 하프(341)의 하나의 대안적인 실시예는 8개의 16 비트 데이터 요소들을 포함하는 128 비트 길이이다. 팩형 싱글(342)의 일 실시예는 128 비트 길이이고, 4개의 32 비트 데이터 요소들을 포함한다. 팩형 더블(343)의 일 실시예는 128 비트 길이이고, 2개의 64 비트 데이터 요소들을 포함한다. 그러한 팩형 데이터 포맷들은 또한 다른 레지스터 길이들로, 예를 들어, 96-bits, 160-bits, 192-bits, 224-bits, 256-bits, 512-bits 또는 그 이상으로 확장될 수 있다는 것이 이해될 것이다.
도 3c는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 부호 있는(signed) 및 부호 없는(unsigned) 팩형 데이터 타입을 예시한다. 부호 없는 팩형 바이트 표현(344)은 SIMD 레지스터 내의 부호 없는 팩형 바이트의 저장을 예시한다. 각 바이트 데이터 요소에 대한 정보는 바이트 0에 대해 비트 7 내지 비트 0, 바이트 1에 대해 비트 15 내지 비트 8, 바이트 2에 대해 비트 23 내지 비트 16, 등등, 및 마지막으로 바이트 15에 대해 비트 120 내지 비트 127에 저장된다. 따라서, 모든 이용 가능한 비트들이 레지스터에서 이용된다. 이러한 저장 구성은 프로세서의 저장 효율성을 증가시킬 수 있다. 또한, 16개의 데이터 요소들이 액세스되는 경우, 하나의 연산이 이제 병렬 방식으로 16개의 데이터 요소들에 대해 수행될 수 있다. 부호 있는 팩형 바이트 표현(345)은 부호 있는 팩형 바이트의 저장을 예시한다. 모든 바이트 데이터 요소의 8번째 비트가 부호 표시자임에 주목한다. 부호 없는 팩형 워드 표현(346)은 워드 7 내지 워드 0이 SIMD 레지스터에 저장되는 법을 예시한다. 부호 있는 팩형 워드 표현(347)은 부호 없는 팩형 워드 레지스터 내 표현(346)과 유사하다. 각 워드 데이터 요소의 16번째 비트가 부호 표시자임에 주목한다. 부호 없는 팩형 더블워드 표현(348)은 더블워드 데이터 요소들이 저장되는 법을 도시한다. 부호 있는 팩형 더블워드 표현(349)은 부호 없는 팩형 더블워드 표현(348)과 유사하다. 필요한 부호 비트는 각 더블워드 데이터 요소의 32번째 비트임에 주목한다.
도 3d는 32 이상의 비트들을 갖는, 연산 인코딩(연산 코드) 포맷(360)의 일 실시예의 도면이고, 레지스터/메모리 피연산자 어드레싱 모드들은 월드 와이드 웹(www)의 intel.com/products/processor/manuals/에서 캘리포니아주 산타 클라라의 인텔사로부터 이용가능한, "Intel® 64 and IA-32 Intel Architecture Software Developer's Manual Combined Volumes 2A and 2B: Instruction Set Reference A-Z"에 설명된 연산 코드 포맷의 타입과 대응한다. 일 실시예에서, 명령어는 필드들(361 및 362) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자들(364 및 365)을 포함하는 명령어당 최대 2개의 피연산자 위치들이 식별될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일하고, 다른 실시예들에서 그것들은 상이하다. 대안적인 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일하고, 다른 실시예들에서 그것들은 상이하다. 일 실시예에서, 소스 피연산자 식별자들(364 및 365)에 의해 식별된 소스 피연산자들 중 하나가 명령어의 결과들에 의해 겹쳐쓰기 되고, 다른 실시예들에서, 식별자(364)는 소스 레지스터 요소에 대응하고, 식별자(365)는 목적지 레지스터 요소에 대응한다. 일 실시예에서, 피연산자 식별자들(364 및 365)은 32 비트 또는 64 비트 소스 및 목적지 피연산자들을 식별하는 데 이용될 수 있다.
도 3e는 40 이상의 비트들을 갖는 다른 대안적인 연산 인코딩(연산 코드) 포맷(370)의 도면이다. 연산 코드 포맷(370)은 연산 코드 포맷(360)과 대응하고, 옵션의 프리픽스 바이트(378)를 포함한다. 일 실시예에 따른 명령어는 필드들(378, 371, 및 372) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 최대 2개의 피연산자 위치들은 소스 피연산자 식별자들(374 및 375)에 의해 및 프리픽스 바이트(378)에 의해 식별될 수 있다. 일 실시예에서, 프리픽스 바이트(378)는 32 비트 또는 64 비트 소스 및 목적지 피연산자들을 식별하는 데 이용될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일하고, 다른 실시예들에서 그것들은 상이하다. 대안적인 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일하고, 다른 실시예들에서 그것들은 상이하다. 일 실시예에서, 명령어는 피연산자 식별자들(374 및 375)에 의해 식별된 피연산자들 중 하나 이상에 대해 연산하고, 피연산자 식별자들(374 및 375)에 의해 식별된 하나 이상의 피연산자들은 명령어의 결과들에 의해 겹쳐쓰기 되고, 다른 실시예들에서, 식별자들(374 및 375)에 의해 식별된 피연산자들은 다른 레지스터의 다른 데이터 요소에 기입된다. 연산 코드 포맷들(360 및 370)은 MOD 필드들(363 및 373)에 의해 및 옵션의 스케일-인덱스-베이스(scale-index-base) 및 변위(displacement) 바이트들에 의해 부분적으로 특정된 레지스터 대 레지스터, 메모리 대 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 이미디어트(register by immediate), 레지스터 대 메모리 어드레싱을 허용한다.
다음으로 도 3f를 보면, 일부 대안적인 실시예들에서, 64 비트(또는 128 비트, 또는 256 비트, 또는 512 비트 이상) 단일 명령어 다중 데이터(SIMD) 산술 연산들이 코프로세서 데이터 프로세싱(CDP) 명령어를 통해 수행될 수 있다. 연산 인코딩(연산 코드) 포맷(380)은 CDP 연산 코드 필드들(382 및 389)을 갖는 하나의 그러한 CDP 명령어를 도시한다. CDP 명령어의 타입, 대안적인 실시예들에서, 연산들이 필드들(383, 384, 387, 및 388) 중 하나 이상에 의해 인코딩될 수 있다. 최대 2개의 소스 피연산자 식별자들(385 및 390) 및 하나의 목적지 피연산자 식별자(386)를 포함하여, 명령어당 최대 3개의 피연산자 위치들이 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32, 및 64 비트 값들에 대해 연산할 수 있다. 일 실시예에서, 명령어는 정수 데이터 요소들에 대해 수행된다. 일부 실시예들에서, 명령어는 조건 필드(381)를 이용하여 조건부로 실행될 수 있다. 일부 실시예들에서, 소스 데이터 사이즈들은 필드(383)에 의해 인코딩될 수 있다. 일부 실시예들에서, 제로(Z), 네거티브(N), 캐리(C), 및 오버플로우(V) 검출이 SIMD 필드들에서 행해질 수 있다. 일부 명령어들에 대해, 포화(saturation)의 타입은 필드(384)에 의해 인코딩될 수 있다.
다음으로 도 3g를 보면, 월드 와이드 웹(www)의 intel.com/products/processor/manuals/에서 캘리포니아주 산타 클라라의 인텔사로부터 이용가능한, "Intel® Advanced Vector Extensions Programming Reference"에 설명된 연산 코드 포맷의 타입과 대응하는, 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 다른 대안적인 연산 인코딩(연산 코드) 포맷(397)이 도시된다.
오리지널 x86 명령어 세트는 1 바이트 연산 코드에 대해 제1 "연산 코드" 바이트로부터 그 존재가 알려진 부가적인 바이트들에 포함된 다양한 포맷들의 어드레스 실러블 및 즉시 피연산자(address syllable and immediate operand)를 제공하였다. 부가적으로, 연산 코드에 대한 수정자들(modifiers)(그것들은 명령어 이전에 배치되어야 하기 때문에 프리픽스들이라고 함)로서 예비된 특정 바이트 값들이 존재하였다. (이들 특수 프리픽스 값들을 포함하는) 256 연산 코드 바이트들의 오리지널 팔레트가 고갈되었을 때, 단일 바이트가 256 연산 코드들의 새로운 세트에 대한 이스케이프로서(as an escape) 전용되었다. 벡터 명령어들(예를 들어, SIMD)이 부가되었을 때, 더 많은 연산 코드들에 대한 필요성이 발생되었고, 프리픽스들의 이용을 통해 확장되었더라도, "2 바이트" 연산 코드 맵이 또한 불충분하였다. 이를 위해, 식별자로서 2 바이트 플러스 옵션의 프리픽스를 이용하는 부가적인 맵들에서 새로운 명령어들이 부가되었다.
부가적으로, 64 비트 모드에서 부가적인 레지스터들을 용이하게 하기 위하여, 부가적인 프리픽스가 프리픽스들과 연산 코드(그리고 연산 코드를 결정하는 데 필요한 임의의 이스케이프 바이트들) 사이에서 이용될 수 있다("REX"라고 함). 일 실시예에서, REX는 64 비트 모드에서 부가적인 레지스터들의 이용을 나타내기 위하여 4개의 "페이로드" 비트를 가질 수 있다. 다른 실시예들에서, 그것은 4 비트보다 적거나 많은 비트를 가질 수 있다. (포맷(360) 및/또는 포맷(370)과 일반적으로 대응하는) 적어도 하나의 명령어 세트의 일반적인 포맷이 다음에 의해 일반적으로 예시된다:
[prefixes] [rex] escape [escape2] opcode modrm (etc.)
연산 코드 포맷(397)은 연산 코드 포맷(370)과 대응하고, 다른 가장 흔하게 이용되는 레거시 명령어 프리픽스 바이트들 및 이스케이프 코드들을 대체하기 위해 옵션의 VEX 프리픽스 바이트들(391)(일 실시예에서 C4 16진수(hex)로 시작함)을 포함한다. 예를 들어, 다음은 제2 이스케이프 코드가 오리지널 명령어에 존재할 때, 또는 REX 필드의 여분의 비트들(예를 들어, XB 및 W 필드들)이 이용될 필요가 있을 때 이용될 수 있는, 명령어를 인코딩하기 위해 2개의 필드를 이용하는 실시예를 예시한다. 아래 예시된 실시예에서, 레거시 이스케이프(legacy escape)는 새로운 이스케이프 값에 의해 표현되고, 레거시 프리픽스들은 "페이로드" 바이트들의 일부로서 완전히 압축되고, 레거시 프리픽스들은 재생되어(reclaimed) 장래 확장을 위해 이용 가능하고, 제2 이스케이프 코드는 이용 가능한 장래 맵 또는 특징 스페이스를 가지고, "맵" 필드에서 압축되고, 새로운 특징들이 추가된다(예를 들어, 증가된 벡터 길이 및 부가적인 소스 레지스터 특정자(source register specifier)).
Figure pat00003
일 실시예에 따른 명령어는 필드들(391 및 392) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 최대 4개의 피연산자 위치들이 소스 피연산자 식별자들(374 및 375)과 결합하여 그리고 옵션의 스케일 인덱스 베이스(SIB) 식별자(393), 옵션의 변위 식별자(394), 및 옵션의 즉시 바이트(395)와 결합하여 필드(391)에 의해 식별될 수 있다. 일 실시예에서, VEX 프리픽스 바이트들(391)을 이용하여 32 비트 또는 64 비트 소스 및 목적지 피연산자들 및/또는 128 비트 또는 256 비트 SIMD 레지스터 또는 메모리 피연산자들을 식별할 수 있다. 일 실시예에서, 연산 코드 포맷(397)에 의해 제공되는 기능은 연산 코드 포맷(370)과 중복될 수 있고, 다른 실시예들에서, 그것들은 상이하다. 연산 코드 포맷들(370 및 397)은 MOD 필드(373)에 의해 및 옵션의 (SIB) 식별자(393), 옵션의 변위 식별자(394), 및 옵션의 즉시 바이트(395)에 의해 부분적으로 특정된 레지스터 대 레지스터, 메모리 대 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 이미디어트(register by immediate), 레지스터 대 메모리 어드레싱을 허용한다.
다음으로 도 3h를 보면, 다른 실시예에 따른 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 다른 대안적인 연산 인코딩(연산 코드) 포맷(398)이 도시되어 있다. 연산 코드 포맷(398)은 연산 코드 포맷들(370 및 397)과 대응하고, 다른 가장 흔하게 이용되는 레거시 명령어 프리픽스 바이트들 및 이스케이프 코드들을 대체하고 부가적인 기능을 제공하기 위해 옵션의 EVEX 프리픽스 바이트들(396)(일 실시예에서 62 16진수(hex)로 시작함)을 포함한다. 일 실시예에 따른 명령어는 필드들(396 및 392) 중 하나 이상에 의해 인코딩될 수 있다. 명령어당 최대 4개의 피연산자 위치들 및 마스크가 소스 피연산자 식별자들(374 및 375)과 결합하여 그리고 옵션의 스케일 인덱스 베이스(SIB) 식별자(393), 옵션의 변위 식별자(394), 및 옵션의 즉시 바이트(395)와 결합하여 필드(396)에 의해 식별될 수 있다. 일 실시예에서, EVEX 프리픽스 바이트들(396)을 이용하여 32 비트 또는 64 비트 소스 및 목적지 피연산자들 및/또는 128 비트, 256 비트 또는 512 비트 SIMD 레지스터 또는 메모리 피연산자들을 식별할 수 있다. 일 실시예에서, 연산 코드 포맷(398)에 의해 제공되는 기능은 연산 코드 포맷(370 또는 397)과 중복될 수 있고, 다른 실시예들에서, 그것들은 상이하다. 연산 코드 포맷(398)은 MOD 필드(373)에 의해 및 옵션의 (SIB) 식별자(393), 옵션의 변위 식별자(394), 및 옵션의 즉시 바이트(395)에 의해 부분적으로 특정된, 마스크들을 갖는, 레지스터 대 레지스터, 메모리 대 레지스터, 레지스터 바이 메모리, 레지스터 바이 레지스터, 레지스터 바이 이미디어트(register by immediate), 레지스터 대 메모리 어드레싱을 허용한다. (포맷(360) 및/또는 포맷(370)과 일반적으로 대응하는) 적어도 하나의 명령어 세트의 일반적인 포맷은 다음에 의해 일반적으로 예시된다:
evex1 RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
일 실시예에서, EVEX 포맷(398)에 따라 인코딩된 명령어는 예를 들어, 사용자 구성 가능한 마스크 레지스터, 또는 부가적인 피연산자, 또는 128-bit, 256-bit 또는 512-bit 벡터 레지스터들, 또는 선택할 더 많은 레지스터들 중에서의 선택들 등과 같은 부가적인 새로운 특징들을 갖는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 데 이용될 수 있는 부가적인 "페이로드" 비트들을 가질 수 있다.
예를 들어, VEX 포맷(397)을 이용하여 암묵적 조건 마스크를 갖는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공할 수 있는 경우, EVEX 포맷(398)을 이용하여 명시적 사용자 구성 가능한 조건 마스크를 갖는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공할 수 있다. 부가적으로, VEX 포맷(397)을 이용하여 128-bit 또는 256-bit 벡터 레지스터들에서 조건부 루프들에 대한 SIMD 벡터화 기능을 제공할 수 있는 경우, EVEX 포맷(398)을 이용하여 128-bit, 256-bit, 512-bit 또는 더 큰(또는 더 작은) 벡터 레지스터들에서 조건부 루프들에 대한 SIMD 벡터화 기능을 제공할 수 있다.
조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 예시적인 벡터 확장 명령어들이 다음 예들에 의해 나타내진다:
Figure pat00004
조건부 루프의 벡터화는 예를 들어, 위의 명령어들에 나타난 바와 같은, SIMD 벡터 확장 명령어들의 이용을 통해 실현될 수 있으므로, 성능 및 명령어 쓰루풋을 증가시키고 전력 사용 및 에너지 소비를 감소시킨다는 것이 이해될 것이다. 이것들과 같은 명령어들을 이용하는 기술들은 대량의 연속적으로 생성된 데이터가 실시간 조건들 하에서 조직될 필요가 있는 온라인 클러스터링과 같은 애플리케이션들에서 이용될 수 있다. 그러한 애플리케이션들은 네트워크 침입 검출, 패턴 인식, 및 데이터 마이닝(data mining)과, 그의 부분들이 달리 쉽게 벡터화되지 않는 다른 유용한 애플리케이션들을 포함할 수 있다.
도 4a는 본 발명의 적어도 일 실시예에 따른 순차 파이프라인 및 레지스터 재명명 스테이지, 비순차 발행/실행 파이프라인을 예시하는 블록도이다. 도 4b는 본 발명의 적어도 일 실시예에 따른 프로세서에 포함될 순차 아키텍처 코어 및 레지스터 재명명 로직, 비순차 발행/실행 로직을 예시하는 블록도이다. 도 4a의 실선 상자들은 순차 파이프라인을 예시하고, 점선 상자들은 레지스터 재명명, 비순차 발행/실행 파이프라인을 예시한다. 유사하게, 도 4b의 실선 상자들은 순차 아키텍처 로직을 예시하고, 점선 상자들은 레지스터 재명명 로직 및 비순차 발행/실행 로직을 예시한다.
도 4a에서, 프로세서 파이프라인(400)은 인출 스테이지(402), 길이 디코드 스테이지(404), 디코드 스테이지(406), 할당 스테이지(408), 재명명 스테이지(410), 스케줄링(디스패치 또는 발행이라고도 알려짐) 스테이지(412), 레지스터 판독/메모리 판독 스테이지(414), 실행 스테이지(416), 라이트백/메모리 기입 스테이지(418), 예외 핸들링 스테이지(422), 및 커밋 스테이지(424)를 포함한다.
도 4b에서, 화살표들은 2개 이상의 유닛 사이의 결합을 나타내고, 화살표의 방향은 그 유닛들 간의 데이터 흐름의 방향을 나타낸다. 도 4b는 실행 엔진 유닛(450)에 결합된 프론트 엔드 유닛(430)을 포함하는 프로세서 코어(490)를 도시하고, 둘다 메모리 유닛(470)에 결합되어 있다.
코어(490)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(490)는 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 결합된 브랜치 예측 유닛(432)을 포함하고, 명령어 캐시 유닛(434)은 명령어 변환 색인 버퍼(TLB)(436)에 결합되고, 명령어 변환 색인 버퍼(TLB)(436)는 명령어 인출 유닛(438)에 결합되고, 명령어 인출 유닛(438)은 디코드 유닛(440)에 결합된다. 디코드 유닛 또는 디코더는 명령어들을 디코딩하여, 출력으로서 오리지널 명령어들로부터 디코딩되거나, 다른 방법으로 오리지널 명령어들을 반영하거나, 오리지널 명령어들로부터 도출되는, 하나 이상의 마이크로 연산들, 마이크로 코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들, 또는 다른 제어 신호들을 발생할 수 있다. 디코더는 다양한 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예들은 룩업 테이블, 하드웨어 구현, 프로그램 가능한 로직 어레이(PLA), 마이크로코드 판독 전용 메모리(ROM) 등을 포함하고, 이것으로 한정되지 않는다. 명령어 캐시 유닛(434)은 또한 메모리 유닛(470)의 레벨 2(L2) 캐시 유닛(476)에 결합된다. 디코드 유닛(440)은 실행 엔진 유닛(450)의 재명명/할당기 유닛(452)에 결합된다.
실행 엔진 유닛(450)은 퇴거 유닛(454) 및 하나 이상의 스케줄러 유닛(들)(456)의 세트에 결합된 재명명/할당기 유닛(452)을 포함한다. 스케줄러 유닛(들)(456)은 예비 스테이션들, 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들) 유닛(들)(458)에 결합된다. 물리적 레지스터 파일(들) 유닛들(458) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내며, 그것들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 팩형 정수, 팩형 부동 소수점, 벡터 정수, 벡터 부동 소수점 등과 같은 하나 이상의 상이한 데이터 타입들, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등을 저장한다. 물리적 레지스터 파일(들) 유닛(들)(458)은 (예를 들어, 재정렬 버퍼(들) 및 퇴거 레지스터 파일(들)을 이용하여, 장래 파일(들), 히스토리 버퍼(들), 및 퇴거 레지스터 파일(들)을 이용하여, 레지스터 맵 및 레지스터들의 풀(pool)을 이용하여, 등등) 레지스터 재명명 및 비순차 실행이 구현될 수 있는 다양한 방식을 예시하기 위해 퇴거 유닛(454)에 의해 오버랩된다. 일반적으로, 아키텍처 레지스터들은 프로세서의 외부에서 또는 프로그래머의 관점에서 가시적이다. 레지스터들은 임의의 공지된 특정 타입의 회로로 한정되지 않는다. 그것들이 본 명세서에 설명된 바와 같이 데이터를 저장하고 제공할 수 있는 한 다양한 상이한 타입의 레지스터들이 적절하다. 적절한 레지스터들의 예들은 전용 물리적 레지스터들, 레지스터 재명명을 이용하는 동적으로 할당된 물리적 레지스터들, 전용 및 동적으로 할당된 물리적 레지스터들의 조합들 등을 포함하고, 이것으로 한정되지 않는다. 퇴거 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 결합된다. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛들(462)의 세트 및 하나 이상의 메모리 액세스 유닛들(464)의 세트를 포함한다. 실행 유닛들(462)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 팩형 정수, 팩형 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들은 특정 기능들 또는 기능들의 세트들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 모두가 모든 기능들을 수행하는 복수의 실행 유닛들 또는 하나의 실행 유닛만을 포함할 수 있다. 특정 실시예들이 특정 타입의 데이터/연산에 대한 별개의 파이프라인들(예를 들어, 각각이 그것들 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/팩형 정수/팩형 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인)을 생성하기 때문에 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458), 및 실행 클러스터(들)(460)는 가능하게는 복수인 것으로 도시되며, 별개의 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(464)을 갖는 특정 실시예들이 구현된다. 별개의 파이프라인들이 이용되는 경우, 이 파이프라인들 중 하나 이상은 비순차 발행/실행일 수 있고, 나머지는 순차적일 수 있다는 것이 이해되어야 한다.
메모리 액세스 유닛들(464)의 세트는 메모리 유닛(470)에 결합되고, 메모리 유닛(470)은 레벨 2(L2) 캐시 유닛(476)에 결합된 데이터 캐시 유닛(474)에 결합된 데이터 TLB 유닛(472)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(464)은 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있고, 이것들 각각은 메모리 유닛(470)의 데이터 TLB 유닛(472)에 결합된다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨들의 캐시 및 결국에 메인 메모리에 결합된다.
예시에 의해, 예시적인 레지스터 재명명, 비순차 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다: 1) 명령어 인출(438)은 인출 및 길이 디코딩 스테이지들(402 및 404)을 수행하고; 2) 디코드 유닛(440)은 디코드 스테이지(406)를 수행하고; 3) 재명명/할당기 유닛(452)은 할당 스테이지(408) 및 재명명 스테이지(410)를 수행하고; 4) 스케줄러 유닛(들)(456)은 스케줄 스테이지(412)를 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 스테이지(414)를 수행하고; 실행 클러스터(460)는 실행 스테이지(416)를 수행하고; 6) 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 라이트백/메모리 기입 스테이지(418)를 수행하고; 7) 다양한 유닛들이 예외 핸들링 스테이지(422)에 수반될 수 있고; 8) 퇴거 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 커밋 스테이지(424)를 수행한다.
코어(490)는 하나 이상의 명령어 세트(예를 들어, x86 명령어 세트(더 새로운 버전으로 일부 확장들이 부가됨); 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일의 ARM Holdings의 ARM 명령어 세트(NEON과 같은 옵션의 부가적인 확장들을 가짐)를 지원할 수 있다.
코어는 (2 이상의 병렬 세트들의 연산들 또는 스레드들을 실행하는) 멀티스레딩을 지원할 수 있고, 타임 슬라이스 멀티스레딩(time sliced multithreading), 동시 멀티스레딩(단일 물리적 코어가 물리적 코어가 동시에 멀티스레딩하는 스레드들 각각에 대한 논리적 코어를 제공함), 또는 그의 조합(예를 들어, Intel® 하이퍼스레딩(Hyperthreading) 기술에서와 같은 타임 슬라이스 인출 및 디코딩 후에 동시 멀티스레딩)을 포함하는 다양한 방식으로 그렇게 할 수 있다는 것이 이해되어야 한다.
레지스터 재명명이 비순차 실행의 문맥에서 설명되지만, 레지스터 재명명은 순차 아키텍처에서 이용될 수 있다는 것이 이해되어야 한다. 프로세서의 예시된 실시예는 또한 별개의 명령어 및 데이터 캐시 유닛들(434/474) 및 공유 L2 캐시 유닛(476)을 포함하지만, 대안적인 실시예들은 예를 들어, 레벨 1(L1) 내부 캐시와 같은 명령어와 데이터 둘다를 위한 단일 내부 캐시, 또는 복수 레벨들의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서의 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 캐시 전부가 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 5는 본 발명의 실시예들에 따른 통합형 메모리 컨트롤러 및 그래픽을 갖는 단일 코어 프로세서 및 멀티코어 프로세서(500)의 블록도이다. 도 5의 실선 상자들은 단일 코어(502A), 시스템 에이전트(510), 하나 이상의 버스 컨트롤러 유닛들(516)의 세트를 갖는 프로세서(500)를 예시하고, 점선 상자들의 옵션의 부가는 복수의 코어들(502A-N), 시스템 에이전트 유닛(510) 내의 하나 이상의 통합형 메모리 컨트롤러 유닛(들)(514), 및 통합형 그래픽 로직(508)을 갖는 대안적인 프로세서(500)를 예시한다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨의 캐시, 세트 또는 하나 이상의 공유 캐시 유닛들(506), 및 통합형 메모리 컨트롤러 유닛들(514)의 세트에 결합된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(506)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4)와 같은 하나 이상의 중간 레벨 캐시, 또는 다른 레벨들의 캐시, 최종 레벨 캐시(last level cache; LLC), 및/또는 그의 조합들을 포함할 수 있다. 일 실시예에서 링 기반 인터커넥트 유닛(512)이 통합형 그래픽 로직(508), 공유 캐시 유닛들(506)의 세트, 및 시스템 에이전트 유닛(510)을 상호 접속하지만, 대안적인 실시예들은 그러한 유닛들을 상호 접속하기 위한 임의의 수의 공지된 기술들을 이용할 수 있다.
일부 실시예들에서, 코어들(502A-N) 중 하나 이상은 멀티스레딩이 가능하다. 시스템 에이전트(510)는 코어들(502A-N)을 조정하고 동작하는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(510)은 예를 들어 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(502A-N) 및 통합형 그래픽 로직(508)의 전력 상태를 조정하는 데 필요한 로직 및 컴포넌트들일 수 있거나 그것들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속 디스플레이들을 구동하기 위한 것이다.
코어들(502A-N)은 아키텍처 및/또는 명령어 세트의 면에서 균질 또는 비균질일 수 있다. 예를 들어, 코어들(502A-N) 중 일부는 순차적일 수 있고 다른 것들은 비순차적이다. 다른 예로서, 코어들(502A-N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있고, 다른 것들은 오직 그 명령어 세트의 서브세트 또는 상이한 명령어 세트를 실행할 수 있다.
프로세서는 캘리포니아주 산타클라라의 인텔사로부터 이용 가능한 Core™ i3, i5, i7, 2 Duo 및 Quad, Xeon™, Itanium™, XScale™ 또는 StrongARM™ 프로세서와 같은 범용 프로세서일 수 있다. 대안적으로, 프로세서는 ARM Holdings, Ltd, MIPS 등과 같은 다른 회사의 것일 수 있다. 프로세서는 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩에 구현될 수 있다. 프로세서(500)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술들 중 임의의 것을 이용하여 하나 이상의 기판의 일부일 수 있고 및/또는 그 위에서 구현될 수 있다.
도 6-8은 프로세서(500)를 포함하는 데 적절한 예시적인 시스템들이고, 도 9는 코어들(502) 중 하나 이상을 포함할 수 있는 예시적인 시스템 온 칩(SoC)이다. 랩톱, 데스크톱, 핸드헬드 PC, 퍼스널 디지털 어시스턴트(personal digital assistant), 엔지니어링 워크스테이션, 서버, 네트워크 디바이스, 네트워크 허브, 스위치, 임베디드 프로세서, DSP(digital signal processor), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱박스, 마이크로 컨트롤러, 휴대 전화, 포터블 미디어 플레이어, 핸드헬드 디바이스, 및 다양한 다른 전자 디바이스에 대해 이 기술분야에 알려진 다른 시스템 설계들 및 구성들도 적절하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 포함할 수 있는 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적절하다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 시스템(600)의 블록도가 도시되어 있다. 시스템(600)은 그래픽 메모리 컨트롤러 허브(GMCH)(620)에 결합되는 하나 이상의 프로세서(610, 615)를 포함할 수 있다. 부가적인 프로세서들(615)의 옵션의 성질은 도 6에서 점선으로 나타난다.
각 프로세서(610, 615)는 프로세서(500)의 일부 버전일 수 있다. 그러나, 통합형 그래픽 로직 및 통합형 메모리 제어 유닛들이 프로세서들(610, 615)에 존재할 가능성은 희박하다는 것에 주목해야 한다. 도 6은 GMCH(620)이 예를 들어, DRAM(dynamic random access memory)일 수 있는 메모리(640)에 결합될 수 있다는 것을 예시한다. DRAM은 적어도 일 실시예에서 불휘발성 캐시와 연관될 수 있다.
GMCH(620)는 칩셋 또는 칩셋의 일부일 수 있다. GMCH(620)는 프로세서(들)(610, 615)와 통신하여 프로세서(들)(610, 615)와 메모리(640) 간의 상호작용을 제어할 수 있다. GMCH(620)는 또한 프로세서(들)(610, 615)와 시스템(600)의 다른 요소들 간의 가속 버스 인터페이스로서 작용할 수 있다. 적어도 일 실시예에서, GMCH(620)는 전면 버스(frontside bus; FSB)(695)와 같은 멀티 드롭(multi-drop) 버스를 통해 프로세서(들)(610, 615)와 통신한다.
또한, GMCH(620)는 디스플레이(645)(예를 들어, 플랫 패널 디스플레이)에 결합된다. GMCH(620)는 통합형 그래픽 가속기를 포함할 수 있다. GMCH(620)는 또한 다양한 주변장치들을 시스템(600)에 결합하는 데 이용될 수 있는 입출력(I/O) 컨트롤러 허브(ICH)(650)에 결합된다. 예를 들어, 도 6의 실시예에서 다른 주변장치(670)와 함께 ICH(650)에 결합된 별개의 그래픽 디바이스일 수 있는, 외부 그래픽 디바이스(660)가 도시되어 있다.
대안적으로, 부가적인 또는 상이한 프로세서들이 또한 시스템(600)에 존재할 수 있다. 예를 들어, 부가적인 프로세서(들)(615)는 프로세서(610)와 동일한 부가적인 프로세서(들), 프로세서(610)에 비균질이거나 비대칭인 부가적인 프로세서(들), 가속기들(예를 들어, 그래픽 가속기들 또는 디지털 신호 프로세싱(DSP) 유닛들), 필드 프로그래머블 게이트 어레이들, 또는 임의의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로 아키텍처, 열, 전력 소비 특성들 등을 포함하는 다양한 장점의 계량의 면에서(in terms of a spectrum of metrics of merit) 물리적 리소스들(610, 615) 간에 다양한 차이가 존재할 수 있다. 이 차이들은 프로세서들(610, 615) 사이에 비대칭성 및 비균질성으로서 직접 효과적으로 나타날 수 있다. 적어도 일 실시예에서, 다양한 프로세서들(610, 615)이 동일한 다이 패키지에 상주할 수 있다.
이제 도 7을 참조하면, 본 발명의 실시예에 따른 제2 시스템(700)의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 멀티프로세서 시스템(700)은 점대점 인터커넥트 시스템이고, 점대점 인터커넥트(750)를 통해 결합된 제1 프로세서(770) 및 제2 프로세서(780)를 포함한다. 프로세서들(770 및 780) 각각은 프로세서들(610, 615) 중 하나 이상으로서 프로세서(500)의 일부 버전일 수 있다.
2개의 프로세서들(770, 780)만이 도시되어 있지만, 본 발명의 범위는 그것으로 한정되지 않는다는 것이 이해될 것이다. 다른 실시예들에서, 하나 이상의 부가적인 프로세서들이 주어진 프로세서에 존재할 수 있다.
프로세서들(770 및 780)은 각각 통합형 메모리 컨트롤러 유닛들(772 및 782)을 포함하는 것으로 도시되어 있다. 프로세서(770)는 또한 그의 버스 컨트롤러 유닛들의 일부로서 점대점(P-P) 인터페이스들(776 및 778)을 포함하고; 유사하게, 제2 프로세서(780)는 P-P 인터페이스들(786 및 788)을 포함한다. 프로세서들(770, 780)은 P-P 인터페이스 회로들(778, 788)을 이용하여 점대점(P-P) 인터페이스(750)를 통해 정보를 교환할 수 있다. 도 7에 도시된 바와 같이, IMC들(772 및 782)은 개개의 메모리들, 즉, 메모리(732) 및 메모리(734)에 프로세서들을 결합하고, 메모리들은 개개의 프로세서들에 국부적으로 부착된 메인 메모리의 부분들일 수 있다.
프로세서들(770, 780)은 각각 점대점 인터페이스 회로들(776, 794, 786, 798)을 이용하여 개별 P-P 인터페이스들(752, 754)을 통해 칩셋(790)과 정보를 교환할 수 있다. 칩셋(790)은 또한 고성능 그래픽 인터페이스(739)를 통해 고성능 그래픽 회로(738)와 정보를 교환할 수 있다.
공유 캐시(도시되지 않음)는 어느 하나 또는 두 프로세서의 로컬 캐시 정보가 프로세서가 저전력 모드에 놓이는 경우 공유 캐시에 저장될 수 있도록, P-P 인터커넥트를 통해 프로세서들과 아직 접속된, 어느 하나의 프로세서 내에 또는 두 프로세서의 외부에 포함될 수 있다.
칩셋(790)은 인터페이스(796)를 통해 제1 버스(716)에 결합될 수 있다. 일 실시예에서, 제1 버스(716)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스 또는 다른 제3세대 I/O 인터커넥트 버스와 같은 버스일 수 있으며, 본 발명의 범위는 그것으로 한정되지 않는다.
도 7에 도시된 바와 같이, 제1 버스(716)를 제2 버스(720)에 결합하는 버스 브리지(718)와 함께, 다양한 I/O 디바이스들(714)이 제1 버스(716)에 결합될 수 있다. 일 실시예에서, 제2 버스(720)는 낮은 핀 카운트(low pin count; LPC) 버스일 수 있다. 예를 들어, 키보드 및/또는 마우스(722), 통신 디바이스들(727) 및 일 실시예에서 명령어/코드 및 데이터(730)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 디바이스와 같은 저장 유닛(728)을 포함하는 다양한 디바이스들이 제2 버스(720)에 결합될 수 있다. 또한, 오디오 I/O(724)가 제2 버스(720)에 결합될 수 있다. 다른 아키텍처들이 가능하다는 점에 주목한다. 예를 들어, 도 7의 점대점 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 8을 참조하면, 본 발명의 실시예에 따른 제3 시스템(800)의 블록도가 도시되어 있다. 도 7 및 도 8의 유사한 요소들은 유사한 참조 번호를 가지며, 도 7의 특정 양태들은 도 8의 다른 양태들을 불명료하게 하는 것을 피하기 위하여 도 8에서 생략되었다.
도 8은 프로세서들(870, 880)이 각각 통합형 메모리 및 I/O 제어 로직("CL")(872 및 882)을 포함할 수 있다는 것을 예시한다. 적어도 일 실시예에서, CL(872, 882)은 도 5 및 도 7과 결합하여 전술한 것과 같은 통합형 메모리 컨트롤러 유닛들을 포함할 수 있다. 또한, CL(872, 882)은 또한 I/O 제어 로직을 포함할 수 있다. 도 8은 메모리들(832, 834)이 CL(872, 882)에 결합되어 있을 뿐만 아니라, I/O 디바이스들(814)도 제어 로직(872, 882)에 결합되어 있는 것을 예시한다. 레거시 I/O 디바이스들(815)이 칩셋(890)에 결합된다.
이제 도 9를 참조하면, 본 발명의 실시예에 따른 SoC(900)의 블록도가 도시되어 있다. 도 5의 유사한 요소들은 유사한 참조 번호들을 갖는다. 또한, 점선 상자들은 더 진보된 SoC들에 대한 옵션의 특징들이다. 도 9에서, 인터커넥트 유닛(들)(902)은: 하나 이상의 코어들(502A-N)의 세트 및 공유 캐시 유닛(들)(506)을 포함하는 애플리케이션 프로세서(910); 시스템 에이전트 유닛(510); 버스 컨트롤러 유닛(들)(516); 통합형 메모리 컨트롤러 유닛(들)(514); 통합형 그래픽 로직(508), 스틸 및/또는 비디오 카메라 기능을 제공하기 위한 이미지 프로세서(924), 하드웨어 오디오 가속을 제공하기 위한 오디오 프로세서(926), 및 비디오 인코드/디코드 가속을 제공하기 위한 비디오 프로세서(928)를 포함할 수 있는 하나 이상의 미디어 프로세서들의 세트(920); SRAM(static random access memory) 유닛(930); DMA(direct memory access) 유닛(932); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(940)에 결합된다.
도 10은 일 실시예에 따른 적어도 하나의 명령어를 수행할 수 있는, 중앙 프로세싱 유닛(CPU) 및 그래픽 프로세싱 유닛(GPU)을 포함하는 프로세서를 예시한다. 일 실시예에서, 적어도 일 실시예에 따른 연산들을 수행하기 위한 명령어가 CPU에 의해 수행될 수 있다. 다른 실시예에서, 명령어는 GPU에 의해 수행될 수 있다. 또 다른 실시예에서, 명령어는 CPU 및 GPU에 의해 수행되는 연산들의 조합을 통해 수행될 수 있다. 예를 들어, 일 실시예에서, 일 실시예에 따른 명령어가 수신되어 GPU에서 실행을 위해 디코딩될 수 있다. 그러나, 디코딩된 명령어 내의 하나 이상의 연산들이 CPU에 의해 수행될 수 있고, 그 결과가 명령어의 최종 퇴거를 위해 GPU에 리턴된다. 반대로, 일부 실시예들에서, CPU는 주 프로세서로서 작용할 수 있고, GPU는 코프로세서로서 작용할 수 있다.
일부 실시예들에서, 매우 병렬인 쓰루풋 프로세서들(highly parallel, throughput processors)로부터 이득이 있는 명령어들이 GPU에 의해 수행될 수 있고, 깊게 파이프라인된 아키텍처들(deeply pipelined architectures)로부터 이득이 있는 프로세서들의 성능으로부터 이득이 있는 명령어들은 CPU에 의해 수행될 수 있다. 예를 들어, 그래픽, 과학적 애플리케이션들, 금융 애플리케이션들 및 다른 병렬 워크로드들은 GPU의 성능으로부터 이득이 있어 그에 따라 실행될 수 있고, 오퍼레이팅 시스템 커널 또는 애플리케이션 코드와 같은 더 순차적인 애플리케이션들은 CPU에 대해 더욱 적합할 수 있다.
도 10에서, 프로세서(1000)는 CPU(1005), GPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 컨트롤러(1025), UART 컨트롤러(1030), SPI/SDIO 컨트롤러(1035), 디스플레이 디바이스(1040), 고선명 멀티미디어 인터페이스(High-Definition Multimedia Interface; HDMI) 컨트롤러(1045), MIPI 컨트롤러(1050), 플래시 메모리 컨트롤러(1055), 듀얼 데이터 레이트(dual data rate; DDR) 컨트롤러(1060), 보안 엔진(1065), 및 I2S/I2C(Integrated Interchip Sound/Inter-Integrated Circuit) 인터페이스(1070)를 포함한다. 더 많은 CPU 또는 GPU 및 다른 주변장치 인터페이스 컨트롤러들을 포함한 다른 로직 및 회로들이 도 10의 프로세서에 포함될 수 있다.
적어도 일 실시예의 하나 이상의 양태들이, 머신에 의해 판독될 때, 머신으로 하여금 본 명세서에 설명된 기술들을 수행하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독 가능한 매체에 저장된 대표 데이터에 의해 구현될 수 있다. "IP 코어들"이라고 알려진 그러한 표현들은 유형의 머신 판독 가능한 매체("테이프")에 저장되고 다양한 고객들 또는 제조 시설들에 공급되어 로직 또는 프로세서를 실제로 만드는 제조 머신들 내로 로드할 수 있다. 예를 들어, ARM Holdings, Ltd.에 의해 개발된 프로세서들의 Cortex™ 계열과 같은 IP 코어들, 및 중국 과학원(Chinese Academy of Sciences)의 컴퓨팅 기술 기관(Institute of Computing Technology; ICT)에 의해 개발된 Loongson IP 코어들은 Texas Instruments, Qualcomm, Apple, 또는 Samsung과 같은 다양한 고객들 또는 사업자에게 허가되거나 판매되어 이들 고객들 또는 사업자들에 의해 생산된 프로세서들에 구현될 수 있다.
도 11은 일 실시예에 따른 IP 코어들의 개발을 예시하는 블록도를 도시한다. 저장소(1130)는 시뮬레이션 소프트웨어(1120) 및/또는 하드웨어 또는 소프트웨어 모델(1110)을 포함한다. 일 실시예에서, IP 코어 설계를 나타내는 데이터는 메모리(1140)(예를 들어, 하드 디스크), 유선 접속(예를 들어, 인터넷)(1150) 또는 무선 접속(1160)을 통해 저장소(1130)에 제공될 수 있다. 시뮬레이션 툴 및 모델에 의해 발생된 IP 코어 정보는 그 다음에 적어도 일 실시예에 따른 적어도 하나의 명령어를 수행하기 위해 제3자에 의해 제조될 수 있는 제조 설비에 전송될 수 있다.
일부 실시예들에서, 하나 이상의 명령어들은 제1 타입 또는 아키텍처(예를 들어, x86)에 대응하고 상이한 타입 또는 아키텍처(예를 들어, ARM)의 프로세서에서 변환 또는 에뮬레이트될 수 있다. 일 실시예에 따른 명령어는 따라서 ARM, x86, MIPS, GPU, 또는 다른 프로세서 타입 또는 아키텍처를 포함하는 임의의 프로세서 또는 프로세서 타입에서 수행될 수 있다.
도 12는 일 실시예에 따른 상이한 타입의 프로세서에 의해 제1 타입의 명령어가 에뮬레이트되는 법을 예시한다. 도 12에서, 프로그램(1205)은 일 실시예에 따른 명령어와 동일한 또는 실질적으로 동일한 기능을 수행할 수 있는 일부 명령어들을 포함한다. 그러나, 프로그램(1205)의 명령어들은 프로세서(1215)와 상이하거나 호환되지 않는 타입 및/또는 포맷으로 될 수 있고, 이것은 프로그램(1205) 내 타입의 명령어들이 프로세서(1215)에 의해 선천적으로(natively) 실행되지 못할 수 있음을 의미한다. 그러나, 에뮬레이션 로직(1210)의 도움으로, 프로그램(1205)의 명령어들은 프로세서(1215)에 의해 선천적으로 실행될 수 있는 명령어들로 변환된다. 일 실시예에서, 에뮬레이션 로직은 하드웨어에서 구체화된다. 다른 실시예에서, 에뮬레이션 로직은 프로그램(1205) 내 타입의 명령어들을 프로세서(1215)에 의해 선천적으로 실행될 수 있는 타입으로 변환하기 위한 소프트웨어를 포함하는 유형의 머신 판독 가능한 매체로 구체화된다. 다른 실시예들에서, 에뮬레이션 로직은 유형의 머신 판독 가능한 매체에 저장된 프로그램과 고정 기능 또는 프로그램 가능한 하드웨어의 조합이다. 일 실시예에서, 프로세서는 에뮬레이션 로직을 포함하지만, 다른 실시예들에서, 에뮬레이션 로직은 프로세서의 외부에 존재하고 제3자에 의해 제공된다. 일 실시예에서, 프로세서는 프로세서 내에 포함되거나 그와 연관되는 마이크로 코드 또는 펌웨어를 실행함으로써 소프트웨어를 포함하는 유형의 머신 판독 가능한 매체에 구체화된 에뮬레이션 로직을 로드할 수 있다.
도 13은 본 발명의 실시예들에 따라 소스 명령어 세트의 이진 명령어들을 타겟 명령어 세트의 이진 명령어들로 변환하기 위해 소프트웨어 명령어 변환기의 이용을 대조하는 블록도이다. 예시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어, 또는 그의 다양한 조합으로 구현될 수 있다. 도 13은 고레벨 언어(1302)의 프로그램은 적어도 하나의 x86 명령어 세트 코어(1316)를 갖는 프로세서에 의해 선천적으로 실행될 수 있는 x86 이진 코드(1306)를 발생하기 위해 x86 컴파일러(1304)를 이용하여 컴파일될 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어(1316)를 갖는 프로세서는 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과를 실현하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서에서 실행하는 것을 목표로 한 객체 코드 버전들의 애플리케이션들 또는 다른 소프트웨어를 호환가능하게 실행 또는 다른 방법으로 프로세싱함으로써, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1304)는 적어도 하나의 x86 명령어 세트 코어(1316)를 갖는 프로세서에서 부가적인 링크 프로세싱(linkage processing)을 가지고 또는 없이 실행될 수 있는 x86 이진 코드(1306)(예를 들어, 객체 코드)를 발생하도록 동작 가능한 컴파일러를 나타낸다. 유사하게, 도 13은 고레벨 언어(1302)의 프로그램이 적어도 하나의 x86 명령어 세트 코어(1314)를 갖지 않는 프로세서(예를 들어, 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트를 실행하고 및/또는 캘리포니아주 서니베일의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안적인 명령어 세트 이진 코드(1310)를 발생하기 위하여 대안적인 명령어 세트 컴파일러(1308)를 이용하여 컴파일될 수 있다는 것을 나타낸다. 명령어 변환기(1312)를 이용하여 x86 이진 코드(1306)를 x86 명령어 세트 코어(1314)를 갖지 않는 프로세서에 의해 선천적으로 실행될 수 있는 코드로 변환한다. 이것이 가능한 명령어 변환기가 만들기 어렵기 때문에 이러한 변환된 코드는 대안적인 명령어 세트 이진 코드(1310)와 동일할 가능성이 희박하지만; 변환된 코드는 일반적인 연산을 실현할 것이고 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(1312)는 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 디바이스가 x86 이진 코드(1306)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 그의 조합을 나타낸다.
도 14a는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어를 이용하는 프로세스(1401)의 일 실시예에 대한 흐름도를 예시한다. 프로세스(1401) 및 본 명세서에 개시된 다른 프로세스들은 범용 머신들에 의해 또는 특수 목적 머신들에 의해 또는 이 둘의 조합에 의해 실행 가능한 전용 하드웨어 또는 소프트웨어 또는 펌웨어 연산 코드들을 포함할 수 있는 프로세싱 블록들에 의해 수행된다.
프로세스(1401)의 프로세싱 블록(1410)에서, 카운트 벡터의 요소들은 n개의 카운트 값들(예를 들어, 0, 1, 2, ..., n-1)로 설정된다. 프로세싱 블록(1415)에서, 결정 벡터 CntrTbl(예를 들어. t i , t i +1, t i + 2, ..., t i +n - 1)를 획득하기 위해 값들이 어레이 Is_Center[i: i+n-1]로부터 로드된다. 프로세싱 블록(1420)에서, 결정 벡터의 값들은 결정 벡터에 따라 벡터 마스크를 발생하기 위해 벡터 팩형 비교 부등호(vector packed compare not-equal; VPCMPNEQ) 명령어를 이용하여 제로들과 비교되고, 벡터 마스크는 마스크 레지스터에 저장된다. 프로세싱 블록(1425)에서, 실행된 SIMD 벡터 확장 명령어에 응답하여 n개의 연속하는 벡터 요소들을 보유하기 위해 카운트 벡터를 소스 벡터로서 특정하기 위한 소스 파라미터, 마스크 레지스터를 특정하기 위한 마스크 파라미터, 및 목적지 벡터 CntrTbl를 특정하기 위한 목적지 파라미터를 갖는 SIMD 벡터 확장 명령어(VEXPAND)를 실행하는 것에 응답하여 - n개의 연속하는 벡터 요소들 각각은 m 바이트들의 동일한 가변 파티션 사이즈를 가짐 - , 카운트 벡터의 연속하는 벡터 요소들로부터의 데이터가 벡터 요소들로부터 CntrTbl 목적지 벡터의 마스킹된 벡터 요소들로 데이터를 복사하지 않고, CntrTbl 목적지 벡터의 마스킹되지 않은 벡터 요소들 내로 복사된다. 그 다음, 프로세싱 블록(1430)에서, CntrTbl 목적지 벡터의 요소들은 벡터화된 조건부 루프의 이러한 반복의 결과로서, 메모리 어레이 Center_Table[i: i+n-1]에 저장된다. 프로세싱 블록(1435)에서, n은 루프 인덱스 i에 더해지고, 프로세싱 블록(1440)에서, 프로세싱이 끝나는지 여부가 결정된다. 그렇다면, 프로세싱은 프로세싱 블록(1490)에서 끝난다. 그렇지 않으면, 프로세싱은 프로세싱 블록(1445)으로 진행하고, 여기서 마스킹되지 않은 요소들에 저장된 카운트 개수 NumCounts가 모집단 카운트 명령어(population count instruction)(POPCNT)에 의해 벡터 마스크로부터 계산된다. 그 다음, 프로세싱 블록(1450)에서 그 카운트 개수는 벡터 VNumCounts에 브로드캐스트되고 벡터 팩형 덧셈 명령어(vector packed addition instruction)(VPADD)를 이용하여 프로세싱 블록(1455)에서 카운트 벡터의 요소들 각각에 더해진다. 그 다음에 프로세싱은 프로세싱 블록(1415)에서 시작해서 다시 반복한다.
도 14b는 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하기 위한 명령어를 이용하여 프로세스(1402)의 다른 실시예의 흐름도를 예시한다. 프로세스(1402)의 프로세싱 블록(1410)에서 카운트 벡터의 요소들은 n개의 카운트 값(예를 들어, 0, 1, 2, ..., n-1)으로 설정된다. 프로세싱 블록(1415)에서, 결정 벡터 CntrTbl(예를 들어. t i , t i +1, t i + 2, ..., t i +n - 1)를 획득하기 위해 값들이 어레이 Is_Center[i: i+n-1]로부터 로드된다. 프로세싱 블록(1420)에서, 결정 벡터의 값들은 결정 벡터에 따라 벡터 마스크를 발생하기 위해 벡터 팩형 비교 부등호(VPCMPNEQ) 명령어를 이용하여 제로들과 비교되고, 벡터 마스크는 마스크 레지스터에 저장된다. 프로세싱 블록(1426)에서, 실행된 SIMD 벡터 확장 명령어에 응답하여 n개의 연속하는 벡터 요소들을 보유하기 위해 카운트 벡터를 소스 벡터로서 특정하기 위한 소스 파라미터, 마스크 레지스터를 특정하기 위한 마스크 파라미터, 및 메모리 어레이 Center_Table[i: i+n-1]의 목적지 벡터 부분을 특정하기 위한 목적지 파라미터를 갖는 SIMD 벡터 확장 명령어(VEXPAND)를 실행하는 것에 응답하여 - n개의 연속하는 벡터 요소들 각각은 m 바이트들의 동일한 가변 파티션 사이즈를 가짐 - , 카운트 벡터의 연속하는 벡터 요소들로부터의 데이터가 벡터화 조건부 루프의 이 반복의 결과로서 카운트 벡터로부터 Center_Table 목적지 벡터의 마스킹된 벡터 요소들로 데이터를 복사하지 않고, Center_Table 목적지 벡터의 마스킹되지 않은 벡터 요소들 내로 복사된다. 프로세싱 블록(1435)에서, n은 루프 인덱스 i에 더해지고, 프로세싱 블록(1440)에서, 프로세싱이 끝나는지 여부가 결정된다. 그렇다면, 프로세싱은 프로세싱 블록(1490)에서 끝난다. 그렇지 않으면, 프로세싱은 프로세싱 블록(1445)으로 진행하고, 여기서 마스킹되지 않은 요소들에 저장된 카운트 개수 NumCounts가 모집단 카운트 명령어(POPCNT)에 의해 벡터 마스크로부터 계산된다. 그 다음, 프로세싱 블록(1450)에서 그 카운트 개수는 벡터 VNumCounts에 브로드캐스트되고 벡터 팩형 덧셈 명령어(VPADD)를 이용하여 프로세싱 블록(1455)에서 카운트 벡터의 요소들 각각에 더해진다. 그 다음에 프로세싱은 프로세싱 블록(1415)에서 시작해서 다시 반복한다.
메모리에서 목적지 벡터를 특정하는 벡터 확장 명령어의 실시예들은 별개의 마스킹된 벡터 기입 연산에 대한 필요성을 제거할 수 있고, 조건부 루프의 벡터화는 도시된 바와 같은 명령어들 및 로직의 이용을 통해 실현될 수 있으므로, 성능 및 명령어 쓰루풋을 증가시키고 에너지 소비를 감소시킨다는 것이 이해될 것이다. 이들 기술들은 네트워크 침입 검출, 패턴 인식, 및 데이터 마이닝 등을 포함하는, 대량의 연속적으로 생성된 데이터가 실시간 조건들 하에서 조직되어야 하는 온라인 클러스터링과 같은 애플리케이션들에서 이용될 수 있다.
도 15a는 조건부 루트에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하는 프로세스(1501)의 일 실시예에 대한 흐름도를 예시한다. 프로세스(1502)의 프로세싱 블록(1510)에서 SIMD 벡터 확장 명령어가 수신된다. SIMD 벡터 확장 명령어의 실시예들은 복수의 n개의 연속하는 벡터 요소들 및 n개의 연관된 조건부 마스크 요소들을 각각 보유하기 위해 소스 벡터를 식별하기 위한 소스 인수, 목적지 벡터 및 마스크 레지스터를 특정하기 위한 목적지 인수 및 마스크 인수를 포함할 수 있고, n은 SIMD 벡터 확장 명령어에 응답하여 변화한다. 프로세싱 블록(1520)에서, 다음 마스크 필드가 마스크 레지스터로부터 판독되고 프로세싱 블록(1530)에서 다음 조건부 마스크 요소를 검사하여, 그것이 제1 값(예를 들어, 1 또는 비-제로)으로 되어 있는지를 결정한다. 그렇다면, 프로세싱은 프로세싱 블록(1540)으로 진행하고, 여기서 소스 벡터의 다음 연속하는 벡터 요소로부터의 데이터가 현재 마스크 필드에 대응하는 목적지 벡터의 마스킹되지 않은 벡터 요소 내로 복사된다. 다른 한편, 다음 조건부 마스크 요소가 제1 값으로 되어 있지 않다면(예를 들어, 그것이 제로이면), 프로세싱은 그 대신에 프로세싱 블록(1550)으로 진행하고, 여기서 (마스킹된) 목적지 벡터의 다음 벡터 요소가 스킵될 것이다. 그 다음에, 프로세싱은 프로세싱 블록(1560)으로 진행하고, 여기서 프로세싱이 끝나는지가 결정되고, 그렇다면 프로세싱은 프로세싱 블록(1590)에서 끝난다. 그렇지 않으면, 프로세싱은 프로세싱 블록(1520)에서 시작하여 다시 반복한다.
도 15b는 조건부 루트에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하는 프로세스(1502)의 다른 실시예에 대한 흐름도를 예시한다. 프로세스(1502)의 프로세싱 블록(1510)에서 SIMD 벡터 확장 명령어가 수신된다. SIMD 벡터 확장 명령어의 실시예들은 복수의 n개의 연속하는 벡터 요소들 및 n개의 연관된 조건부 마스크 요소들을 각각 보유하기 위해 소스 벡터를 식별하기 위한 소스 인수, 목적지 벡터 및 마스크 레지스터를 특정하기 위한 목적지 인수 및 마스크 인수를 포함할 수 있고, 다시 n은 SIMD 벡터 확장 명령어에 응답하여 변화한다. 프로세싱 블록(1520)에서, 다음 마스크 필드가 마스크 레지스터로부터 판독되고 프로세싱 블록(1530)에서 다음 조건부 마스크 요소를 검사하여, 그것이 제1 값(예를 들어, 1 또는 비-제로)으로 되어 있는지를 결정한다. 그렇다면, 프로세싱은 프로세싱 블록(1540)으로 진행하고, 여기서 소스 벡터의 다음 연속하는 벡터 요소로부터의 데이터가 현재 마스크 필드에 대응하는 목적지 벡터의 마스킹되지 않은 벡터 요소 내로 복사된다. 다른 한편, 다음 조건부 마스크 요소가 제1 값으로 되어 있지 않다면(예를 들어, 그것이 제로이면), 프로세싱은 그 대신에 프로세싱 블록(1555)으로 진행하고, 여기서 현재 마스크 필드에 대응하는 목적지 벡터의 마스킹된 벡터 요소에 미리 결정된 값(예를 들어, 제로)이 기입된다. 그 다음에, 프로세싱은 프로세싱 블록(1560)으로 진행하고, 여기서 프로세싱이 끝나는지가 결정되고, 그렇다면 프로세싱은 프로세싱 블록(1590)에서 끝난다. 그렇지 않으면, 프로세싱은 프로세싱 블록(1520)에서 시작하여 다시 반복한다.
도 16은 조건부 루트에 대한 SIMD 벡터화 기능을 제공하기 위한 프로세스(1601)의 일 실시예에 대한 흐름도를 예시한다. 프로세스(1601)의 프로세싱 블록(1610)에서 카운트의 벡터의 요소들이 n개의 카운트 값(예를 들어, 0, 1, 2, ..., n-1)으로 초기화된다. 프로세싱 블록(1620)에서 카운트 테이블에 대한 결정 벡터가 예를 들어, 어레이 Is_Center[i: i+n-1]로부터 획득된다. 프로세싱 블록(1630)에서 결정 벡터는 예상되는 값들의 벡터와 비교되어, 벡터 마스크를 발생하고 벡터 마스크를 마스크 레지스터에 저장한다. 프로세싱 블록(1640)에서, (예를 들어, 카운트 벡터를 소스 벡터로서 특정하기 위한 소스 파라미터, 마스크 레지스터를 특정하기 위한 마스크 파라미터, 및 목적지 벡터 부분을 특정하기 위한 목적지 파라미터를 갖는) SIMD 벡터 확장 명령어에 응답하여, 카운트 벡터의 연속하는 벡터 요소들로부터의 데이터가 확장되어, 카운트 벡터로부터 카운트 테이블 목적지 벡터의 마스킹된 벡터 요소들 내로 데이터를 복사하지 않고, 벡터 마스크에 따라 카운트 테이블 목적지 벡터 부분의 마스킹되지 않은 벡터 요소들 내로 복사된다. 프로세싱 블록(1650)에서, 프로세싱이 끝나는지 여부가 결정된다. 그렇다면, 프로세싱은 프로세싱 블록(1690)에서 끝난다. 그렇지 않으면, 프로세싱은 프로세싱 블록(1660)으로 진행하고, 여기서, 긍정 결정의 개수가 카운트되고 나서, 프로세싱 블록(1670)에서 카운트 벡터의 요소들 각각에 더해진다. 그 다음에, 프로세싱은 프로세싱 블록(1620)에서 시작하여 다시 반복한다.
조건부 루프의 벡터화는 본 명세서에 개시된 바와 같은 명령어들(예를 들어, SIMD 벡터 확장 명령어들) 및 로직의 이용을 통해 실현될 수 있으므로, 성능 및 명령어 쓰루풋을 증가시키고 전력 이용 및 에너지 소비를 감소시킨다는 것이 이해될 것이다. 이들 기술들은 대량의 연속적으로 생성된 데이터가 실시간 조건들 하에서 조직되어야 하는 온라인 클러스터링과 같은 애플리케이션들에서 이용될 수 있다. 그러한 애플리케이션들은 네트워크 침입 검출, 패턴 인식, 및 데이터 마이닝 등을 포함한다.
도 17은 조건부 루트에 대한 SIMD 벡터화 기능을 제공하기 위한 벡터 확장 명령어를 실행하기 위한 장치(1701)의 실시예를 예시한다. 장치(1701)의 실시예들은 또한 SIMD 벡터 확장 기능을 제공하기 위한 명령어의 실행을 위한 파이프라인(400)의 일부(예를 들어, 실행 스테이지(416)) 또는 코어(490)의 일부(예를 들어, 실행 유닛(들)(462))일 수 있다. 장치(1701)의 실시예들은 조건부 루프들의 효율적인 벡터화를 허용할 수 있는, SIMD 벡터 확장을 위한 명령어를 디코딩하기 위해 디코드 스테이지(예를 들어, 디코드(406)) 또는 디코더(예를 들어, 디코드 유닛(440))과 결합될 수 있다. 하나 이상의 실행 유닛들(예를 들어, 실행 장치(1701))의 실시예들은, 디코딩된 명령어에 응답하여, 소스 벡터(1710)로부터 목적지 벡터(1760)의 n개의 벡터 요소들의 마스킹된 벡터 요소들로 데이터를 복사하지 않고, 소스 벡터(1710)의 n개의 연속하는 벡터 요소들의 일부로부터 목적지 벡터(1760)의 마스킹되지 않은 벡터 요소들 내로 데이터를 복사하고, 여기서 n은 실행되는 SIMD 벡터 확장 명령어에 응답하여 변화한다.
예를 들어, 장치(1701)의 실시예들은 가변의 복수의 n개의 가변 사이즈 데이터 요소들의 값들을 저장하기 위해 가변의 복수의 n개의 가변 사이즈 데이터 필드들을 포함하는 벡터 레지스터들(예를 들어, 물리적 레지스터 파일 유닛(들)(458))과 결합될 수 있다. SIMD 벡터 확장 기능을 제공하기 위한 명령어의 실시예들은 메모리 벡터 피연산자 및/또는 벡터 레지스터(예를 들어, 1760 및/또는 1710)의 각 데이터 필드에 대한 SIMD 벡터 확장을 수행하기 위해 벡터 확장 연산 및 데이터 필드 사이즈를 특정하고, 소스 벡터(1710)로부터 목적지 벡터(1760)의 마스킹된 벡터 요소들로 데이터를 복사하지 않고, 소스 벡터(1710)의 n개의 연속하는 벡터 요소들의 일부로부터 목적지 벡터(1760)의 마스킹되지 않은 벡터 요소들 내로 데이터를 복사한다.
예를 들어, SIMD 벡터 확장 기능을 제공하기 위한 명령어를 실행하기 위한 장치(1701)의 일 실시예가 벡터 마스크(1720)의 데이터 필드들 각각의 값들을 판독하고, 마스킹되지 않은 확장 회로(1703)의 확장 멀티플렉서 로직, 예를 들어, 멀티플렉서 로직(1730-1750)을 이용하여 그것들을 확장하는, 소스 벡터(1710)의 제1 사이즈(예를 들어, 32 비트 또는 64 비트)의 연속하는 벡터 요소들의 적어도 상당 부분으로부터 데이터를 복사하고, 그것들을 메모리 벡터 피연산자 또는 벡터 레지스터의 일부 내의 목적지 벡터(1760)의 마스킹되지 않은 벡터 요소들에 저장한다. 일 실시예에서, 목적지 벡터(1760)의 마스킹된 벡터 요소들이 예를 들어, 마스킹된 확장 회로(1770)의 멀티플렉서 로직(1770-1775)을 통해 제어 로직(1779)에 의해 겹쳐 쓰기 되지 않은 것으로서, 또는 대안적으로 제로 값(1778)에 의해 겹쳐 쓰기 된 것으로서 선택된다. SIMD 벡터 확장 명령어의 일부 실시예들은 메모리에 목적지 벡터를 특정할 수 있으므로 별개의 마스킹된 벡터 기입(예를 들어, maskstore) 연산에 대한 필요성을 제거할 수 있다는 것이 이해될 것이다.
도 18은 조건부 루프들에 대한 SIMD 벡터화 기능을 제공하는 벡터 확장 명령어를 실행하기 위한 장치(1801)의 다른 실시예를 예시한다. 장치(1801)는 실행 엔진 유닛(1850) 및 메모리 유닛(1870)을 포함한다. 실행 엔진 유닛(1850)은 하나 이상의 스케줄러 유닛(들)(1856)의 세트에 결합된 재명명/할당기 유닛(1852)을 포함한다. 스케줄러 유닛(들)(1856)은 예비 스테이션들, 중앙 명령어 윈도우 등을 포함하는 임의의 개수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(1856)은 벡터 물리적 레지스터들(1884), 마스크 물리적 레지스터들(1882) 및 정수 물리적 레지스터들(1886)을 포함하는 물리적 레지스터 파일(들)에 결합된다. 물리적 레지스터 파일(들) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 상이한 물리적 레지스터 파일들이 스칼라 정수, 스칼라 부동 소수점, 팩형 정수, 팩형 부동 소수점, 벡터 정수, 벡터 부동 소수점 등과 같은 하나 이상의 상이한 데이터 타입들, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등을 저장한다.
장치(1801)의 실행 엔진 유닛(1850)은 SIMD 벡터 확장 명령어로부터의 인덱스들(1830)의 세트 및 마스크 물리적 레지스터들(1882)로부터의 마스크(1820) 요소들의 대응하는 세트를 저장하기 위한 인덱스 어레이(1888)를 포함한다. 일 실시예에서, 와이드 벡터 저장 채널(예를 들어, 128 비트, 또는 256 비트, 또는 512 비트 이상) 및 64 비트 정수 스택 채널이 (예를 들어, 하나 이상의 마이크로 연산들을 이용하여) 인덱스 어레이(1888)에 대한 인덱스들(1830) 및 마스크(1820)의 전송을 용이하게 하도록 용도 변경될 수 있다. 실행 엔진 유닛(1850)의 일부 실시예들은 또한 저장 데이터 버퍼(1899)를 포함하고, 벡터 확장 연산을 위한 SIMD 벡터 레지스터(1810)로부터의 데이터 요소들 전부가 (예를 들어, 장치(1701)에 도시된 바와 같이) 중간 목적지 데이터(1860)로 확장되어 (예를 들어, 단일 마이크로 연산을 이용하여) 한번에 저장 데이터 버퍼(1899)의 복수의 개별 요소 저장 위치들 내로 기입될 수 있다. 저장 데이터 버퍼(1899)의 이들 복수의 개별 저장 위치들에 저장된 데이터 요소들이 그 다음에 외부 메모리에 액세스하지 않고 더 새로운 로드 연산들을 충족하기 위해 포워딩될 수 있다는 것이 이해될 것이다. 유한 상태 머신(1892)이 인덱스 어레이(1888)와 동작 가능하게 결합되어 인덱스들(1830)의 세트 및 대응하는 마스크(1820) 요소들을 이용하여 벡터 확장 연산을 용이하게 한다.
유한 상태 머신(1892)에 응답하여 어드레스 발생 로직(1894)이 제1 값을 갖는 적어도 각각의 대응하는 마스크(1820) 요소에 대해 적어도 정수 물리적 레지스터들(1886)에 의해 제공되는 베이스 어드레스(1840) 및 인덱스 어레이(1888) 내의 인덱스들(1830)의 세트의 인덱스(1850)로부터 유효 어드레스(1806)를 발생한다. 메모리 액세스 유닛(들)(1864)에 의해 대응하는 메모리 위치들에 저장하기 위한 발생된 유효 어드레스(1806)에 대응하는 데이터(1860) 요소들을 보유하기 위하여 저장 데이터 버퍼(1899)에 저장소가 할당된다. 발생되는 유효 어드레스(1806)에 대응하는 데이터(1860) 요소들은 버퍼 데이터 버퍼(1899)에 복사된다. 메모리 액세스 유닛(들)(1864)은 메모리 유닛(1870)을 통해, 제1 값을 갖는 대응하는 마스크(1807) 요소에 대해 메모리 위치에 액세스하기 위해 어드레스 발생 로직(1894)과 동작 가능하게 결합되며, 메모리 위치는 데이터 요소(1809)를 저장하기 위해, 유한 상태 머신(1892)에 응답하여 어드레스 발생 로직(1894)에 의해 발생된 유효 어드레스(1806)에 대응한다. 일 실시예에서, 저장 데이터 버퍼(1899)에 저장된 데이터(1860) 요소들은 유효 어드레스들(1806)이 더 새로운 로드 명령어들의 유효 어드레스에 대응하는 경우 순차적 명령어 순서에서 벗어나 더 새로운 로드 명령어들을 충족하도록 액세스될 수 있다. 유한 상태 머신(1892)은 그 다음에 메모리에 확장된 데이터 요소(1809)를 성공적으로 저장시 대응하는 마스크(1802) 요소를 제1 값으로부터 제2 값으로 변경할 수 있다. 일부 실시예들에서, 벡터 확장 연산의 성공적인 완료는 마이크로 연산의 실행을 통해 달성될 수 있다. 일부 실시예들에서, 그러한 마이크로 연산은 그 다음에 유한 상태 머신(1892)에 의해 확장된 데이터(1860) 요소들의 대응하는 저장들의 성공적인 완료시(예를 들어, 결함 없이) 퇴거될 수 있다.
일부 실시예들에서, 저장 데이터 버퍼(1899)에 저장된 데이터(1860) 요소들이 결국 일찍이 발생된 유효 어드레스들(1806)에 대응하는 저장 데이터 버퍼(1899)에 저장소가 할당될 때 순차적 명령어 순서에서 벗어나 더 새로운 로드 명령어들을 충족하는 데 이용될 수 있는지에 대해 결정이 행해질 수 있다는 것이 이해될 것이다. 다른 명령어들의 실행과 병렬로 또는 동시에 벡터 확장 연산들의 지원에 응답하여 및/또는 그의 지원에서, 단지 몇개의 마이크로 연산들을 스케줄링하여 인덱스들(1830)의 세트 및 마스크 물리적 레지스터들(1882)로부터의 마스크(1820) 요소들의 대응하는 세트를 인덱스 어레이(1888)로 전송하고, 데이터(1860)를 저장하기 위해 몇몇 마이크로 연산들을 확장하도록 유한 상태 머신(1892)을 초기화함으로써, 특히 벡터화 조건부 루프들에 대해 명령어 쓰루풋이 향상될 수 있으므로, 성능을 증가시키고 전력 이용 및 에너지 소비를 감소시킨다는 것이 또한 이해될 것이다. 이들 기술들은 예를 들어, 대량의 연속적으로 생성된 데이터가 실시간 조건들 하에서 조직될 필요가 있는 온라인 클러스터링과 같은 애플리케이션들에서 이용될 수 있다. 그러한 애플리케이션들은 네트워크 침입 검출, 패턴 인식, 및 데이터 마이닝과, 다른 유사한 타입들의 실시간 온라인 클러스터링 애플리케이션들을 포함할 수 있다.
본 명세서에 개시된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어, 또는 그러한 구현 방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 불휘발성 메모리 및/또는 저장 요소들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그램 가능한 시스템들에서 실행되는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
프로그램 코드는 본 명세서에 설명된 기능들을 수행하는 명령어들을 입력하고 출력 정보를 발생하기 위해 적용될 수 있다. 출력 정보는 공지된 방식으로 하나 이상의 출력 디바이스들에 적용될 수 있다. 본 출원의 목적들을 위해, 프로세싱 시스템은 예를 들어, DSP(digital signal processor), 마이크로컨트롤러, ASIC(application specific integrated circuit), 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위해 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한 원하는 경우, 어셈블리 또는 기계어로 구현될 수 있다. 사실상, 본 명세서에 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 한정되지 않는다. 임의의 경우, 언어는 컴파일 또는 인터프리트 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양태들은, 머신에 의해 판독될 때, 머신으로 하여금, 본 명세서에 설명된 기술들을 수행하는 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 나타내는 머신 판독 가능한 매체에 저장된 대표 명령어들에 의해 구현될 수 있다. "IP 코어들"이라고 알려진 그러한 표현들은 유형의 머신 판독 가능한 매체에 저장되고 다양한 고객들 또는 제조 설비들에 공급되어 실제로 로직 또는 프로세서를 만드는 제조 머신들 내로 로드한다.
그러한 머신 판독 가능한 저장 매체는, 하드 디스크들과 같은 저장 매체, 플로피 디스크, 광 디스크, CD-ROM(compact disk read-only memory), CD-RW(compact disk rewritable), 및 광자기 디스크를 포함하는 임의의 다른 타입의 디스크, 반도체 디바이스들, 예를 들어, ROM(read-only memory), RAM(random access memory), 예를 들어, DRAM(dynamic random access memory), SRAM(static random access memory), EPROM(erasable programmable read-only memory), 플래시 메모리, EEPROM(electrically erasable programmable read-only memory), 자기 또는 광 카드, 또는 전자 명령어들을 저장히기에 적절한 임의의 다른 타입의 매체를 포함하는, 머신 또는 디바이스에 의해 제조되거나 형성되는 물품들의 비-일시적 유형의 배열들을 포함할 수 있고, 이것으로 한정되지 않는다.
따라서, 본 발명의 실시예들은 또한 명령어들을 포함하거나 본 명세서에 설명된 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는 하드웨어 기술 언어(HDL)와 같은 설계 데이터를 포함하는 비-일시적 유형의 머신 판독 가능한 매체를 포함한다. 그러한 실시예들은 또한 프로그램 제품들이라고도 할 수 있다.
일부 경우, 명령어 변환기를 이용하여 명령어를 소스 명령어 세트로부터 타겟 명령어 세트로 변환할 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 프로세싱될 하나 이상의 다른 명령어들로 명령어를 변환(예를 들어, 정적 이진 변환, 동적 컴필레이션(compilation)을 포함하는 동적 이진 변환을 이용하여), 모핑(morph), 에뮬레이트, 또는 다른 방법으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 부분적 온 및 부분적 오프 프로세서(part on and part off processor)일 수 있다.
따라서, 적어도 일 실시예에 따른 하나 이상의 명령어들을 수행하기 위한 기술들이 개시된다. 특정 예시적인 실시예들이 첨부 도면들에 도시되고 설명되었지만, 그러한 실시예들은 광범위한 발명에 대한 예시일 뿐이고, 한정이 아니며, 본 개시를 학습하면 이 기술분야의 통상의 기술자에게 다양한 다른 수정들이 발생할 수 있기 때문에, 본 발명은 도시되고 설명된 특정 구성들 및 배열들로 한정되지 않는다는 것이 이해될 것이다. 이와 같은 기술 영역에서, 성장이 빠르고 추가 개선들이 쉽게 예견되지 않는 경우, 개시된 실시예들은 본 개시의 원리들 또는 첨부 청구항들의 범위에서 벗어나지 않고 기술적 개선들을 가능하게 함으로써 용이하게 되는 바와 같이 배열 및 상세가 쉽게 수정 가능할 수 있다.

Claims (1)

  1. 본 명세서에 개시된 방법 및 장치.
KR1020150087675A 2012-12-31 2015-06-19 조건부 루프들을 벡터화하기 위한 명령어들 및 로직 KR20150081238A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/731,809 2012-12-31
US13/731,809 US9501276B2 (en) 2012-12-31 2012-12-31 Instructions and logic to vectorize conditional loops

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020130167653A Division KR101592074B1 (ko) 2012-12-31 2013-12-30 조건부 루프들을 벡터화하기 위한 명령어들 및 로직

Publications (1)

Publication Number Publication Date
KR20150081238A true KR20150081238A (ko) 2015-07-13

Family

ID=50114803

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020130167653A KR101592074B1 (ko) 2012-12-31 2013-12-30 조건부 루프들을 벡터화하기 위한 명령어들 및 로직
KR1020150087675A KR20150081238A (ko) 2012-12-31 2015-06-19 조건부 루프들을 벡터화하기 위한 명령어들 및 로직
KR1020160010929A KR101790428B1 (ko) 2012-12-31 2016-01-28 조건부 루프들을 벡터화하기 위한 명령어들 및 로직

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020130167653A KR101592074B1 (ko) 2012-12-31 2013-12-30 조건부 루프들을 벡터화하기 위한 명령어들 및 로직

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020160010929A KR101790428B1 (ko) 2012-12-31 2016-01-28 조건부 루프들을 벡터화하기 위한 명령어들 및 로직

Country Status (7)

Country Link
US (2) US9501276B2 (ko)
JP (2) JP5795787B2 (ko)
KR (3) KR101592074B1 (ko)
CN (2) CN103970509B (ko)
BR (1) BR102013032654A2 (ko)
DE (1) DE102013021221A1 (ko)
GB (1) GB2511198B (ko)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104956322B (zh) * 2013-03-05 2019-03-01 英特尔公司 分析向量化的潜在效益
GB2519107B (en) * 2013-10-09 2020-05-13 Advanced Risc Mach Ltd A data processing apparatus and method for performing speculative vector access operations
GB2519108A (en) 2013-10-09 2015-04-15 Advanced Risc Mach Ltd A data processing apparatus and method for controlling performance of speculative vector operations
KR101826707B1 (ko) * 2014-03-27 2018-02-07 인텔 코포레이션 마스킹된 결과 요소들로의 전파를 이용하여 연속 소스 요소들을 마스킹되지 않은 결과 요소들에 저장하기 위한 프로세서, 방법, 시스템 및 명령어
EP3123300A1 (en) * 2014-03-28 2017-02-01 Intel Corporation Processors, methods, systems, and instructions to store source elements to corresponding unmasked result elements with propagation to masked result elements
US10013253B2 (en) * 2014-12-23 2018-07-03 Intel Corporation Method and apparatus for performing a vector bit reversal
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
JP6492943B2 (ja) 2015-05-07 2019-04-03 富士通株式会社 計算機、コンパイル方法、コンパイルプログラム、およびパイプライン処理プログラム
US9875213B2 (en) * 2015-06-26 2018-01-23 Intel Corporation Methods, apparatus, instructions and logic to provide vector packed histogram functionality
US10509726B2 (en) 2015-12-20 2019-12-17 Intel Corporation Instructions and logic for load-indices-and-prefetch-scatters operations
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
US20170177359A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instructions and Logic for Lane-Based Strided Scatter Operations
US20170177363A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Instructions and Logic for Load-Indices-and-Gather Operations
TWI724066B (zh) * 2015-12-24 2021-04-11 美商英特爾股份有限公司 分散縮減指令
CN108475192B (zh) 2015-12-24 2023-06-02 英特尔公司 分散减少指令
CN105677298B (zh) * 2015-12-30 2018-03-27 李朝波 一种将计算机指令中立即数扩展的方法和装置
JP2017126307A (ja) * 2016-01-12 2017-07-20 正仁 櫨田 コンピューターのcpuの汎用化法
US11204764B2 (en) * 2016-03-31 2021-12-21 Intel Corporation Processors, methods, systems, and instructions to Partition a source packed data into lanes
JP6666554B2 (ja) * 2016-05-23 2020-03-18 富士通株式会社 情報処理装置、変換プログラム、及び変換方法
US10466967B2 (en) * 2016-07-29 2019-11-05 Qualcomm Incorporated System and method for piecewise linear approximation
GB2553783B (en) * 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
KR102659495B1 (ko) * 2016-12-02 2024-04-22 삼성전자주식회사 벡터 프로세서 및 그 제어 방법
US10564965B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Compare string processing via inline decode-based micro-operations expansion
US10613862B2 (en) 2017-03-03 2020-04-07 International Business Machines Corporation String sequence operations with arbitrary terminators
US10324716B2 (en) 2017-03-03 2019-06-18 International Business Machines Corporation Selecting processing based on expected value of selected character
US10620956B2 (en) 2017-03-03 2020-04-14 International Business Machines Corporation Search string processing via inline decode-based micro-operations expansion
US10564967B2 (en) 2017-03-03 2020-02-18 International Business Machines Corporation Move string processing via inline decode-based micro-operations expansion
US10789069B2 (en) 2017-03-03 2020-09-29 International Business Machines Corporation Dynamically selecting version of instruction to be executed
US10255068B2 (en) 2017-03-03 2019-04-09 International Business Machines Corporation Dynamically selecting a memory boundary to be used in performing operations
US10817293B2 (en) * 2017-04-28 2020-10-27 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
CN109213527A (zh) * 2017-06-30 2019-01-15 超威半导体公司 具有重叠执行的流处理器
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US10671349B2 (en) 2017-07-24 2020-06-02 Tesla, Inc. Accelerated mathematical engine
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11157287B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system with variable latency memory access
US11409692B2 (en) 2017-07-24 2022-08-09 Tesla, Inc. Vector computational unit
CN111126588B (zh) * 2017-12-14 2023-05-23 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
JP6974722B2 (ja) * 2018-01-24 2021-12-01 富士通株式会社 コンパイラプログラム、コンパイル方法及びコンパイルする情報処理装置
US11561791B2 (en) 2018-02-01 2023-01-24 Tesla, Inc. Vector computational unit receiving data elements in parallel from a last row of a computational array
CN108845828B (zh) * 2018-05-29 2021-01-08 深圳市国微电子有限公司 一种协处理器、矩阵运算加速方法及系统
US11347653B2 (en) * 2018-08-31 2022-05-31 Nyriad, Inc. Persistent storage device management
KR20210066843A (ko) * 2018-09-18 2021-06-07 옵티멈 세미컨덕터 테크놀로지스 인코포레이티드 마스킹된 벡터 명령어 구현 시스템 및 방법
CN111767204A (zh) * 2019-04-02 2020-10-13 杭州海康威视数字技术股份有限公司 溢出风险检测方法、装置及设备
CN111813447B (zh) * 2019-04-12 2022-11-08 杭州中天微系统有限公司 一种数据拼接指令的处理方法和处理装置
CN112083954A (zh) * 2019-06-13 2020-12-15 华夏芯(北京)通用处理器技术有限公司 一种gpu中显式独立掩码寄存器的掩码操作方法
CN111314075B (zh) * 2020-02-27 2021-07-16 华为技术有限公司 一种基于运算装置的汉明重量计算方法
CN112230995B (zh) * 2020-10-13 2024-04-09 广东省新一代通信与网络创新研究院 一种指令的生成方法、装置以及电子设备
CN112596770B (zh) * 2020-12-24 2023-08-18 潍柴动力股份有限公司 一种数据处理方法、装置、电子设备和存储介质
JP2023029120A (ja) 2021-08-20 2023-03-03 富士通株式会社 命令変換プログラム、命令変換方法、および命令変換装置
CN115951936B (zh) * 2023-01-17 2023-05-26 上海燧原科技有限公司 向量化编译程序的芯片适配方法、装置、设备及介质

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57209570A (en) 1981-06-19 1982-12-22 Fujitsu Ltd Vector processing device
JPS58214963A (ja) 1982-06-09 1983-12-14 Hitachi Ltd ベクトル処理装置
JPS6015771A (ja) 1983-07-08 1985-01-26 Hitachi Ltd ベクトルプロセッサ
JPS62276668A (ja) 1985-07-31 1987-12-01 Nec Corp ベクトルマスク演算制御ユニツト
JPH0731669B2 (ja) 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JP2607689B2 (ja) 1989-07-10 1997-05-07 株式会社日立製作所 ベクトル処理装置
US5206822A (en) 1991-11-15 1993-04-27 Regents Of The University Of California Method and apparatus for optimized processing of sparse matrices
JP2665111B2 (ja) 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
JPH06230960A (ja) 1993-01-29 1994-08-19 Mitsubishi Electric Corp データ処理回路
US5887183A (en) 1995-01-04 1999-03-23 International Business Machines Corporation Method and system in a data processing system for loading and storing vectors in a plurality of modes
US5680338A (en) 1995-01-04 1997-10-21 International Business Machines Corporation Method and system for vector processing utilizing selected vector elements
US5812147A (en) 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5832288A (en) 1996-10-18 1998-11-03 Samsung Electronics Co., Ltd. Element-select mechanism for a vector processor
US7272703B2 (en) 1997-08-01 2007-09-18 Micron Technology, Inc. Program controlled embedded-DRAM-DSP architecture and methods
US5933650A (en) 1997-10-09 1999-08-03 Mips Technologies, Inc. Alignment and ordering of vector elements for single instruction multiple data processing
US7133040B1 (en) 1998-03-31 2006-11-07 Intel Corporation System and method for performing an insert-extract instruction
US6308250B1 (en) 1998-06-23 2001-10-23 Silicon Graphics, Inc. Method and apparatus for processing a set of data values with plural processing units mask bits generated by other processing units
US7932911B2 (en) * 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US6269435B1 (en) 1998-09-14 2001-07-31 The Board Of Trustees Of The Leland Stanford Junior University System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector
US7100026B2 (en) 2001-05-30 2006-08-29 The Massachusetts Institute Of Technology System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
JP3702789B2 (ja) * 1998-12-16 2005-10-05 松下電器産業株式会社 条件付きベクトル演算方法および条件付きベクトル演算装置
US6591361B1 (en) 1999-12-28 2003-07-08 International Business Machines Corporation Method and apparatus for converting data into different ordinal types
CA2406679A1 (en) 2000-01-18 2001-07-26 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US7093102B1 (en) 2000-03-29 2006-08-15 Intel Corporation Code sequence for vector gather and scatter
US6701424B1 (en) 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US6857061B1 (en) 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6807622B1 (en) 2000-08-09 2004-10-19 Advanced Micro Devices, Inc. Processor which overrides default operand size for implicit stack pointer references and near branches
US6788303B2 (en) * 2001-02-27 2004-09-07 3Dlabs Inc., Ltd Vector instruction set
US6697064B1 (en) 2001-06-08 2004-02-24 Nvidia Corporation System, method and computer program product for matrix tracking during vertex processing in a graphics pipeline
US6922716B2 (en) 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US7539714B2 (en) * 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
US20060101256A1 (en) 2004-10-20 2006-05-11 Dwyer Michael K Looping instructions for a single instruction, multiple data execution engine
US7404065B2 (en) 2005-12-21 2008-07-22 Intel Corporation Flow optimization and prediction for VSSE memory operations
US7600104B2 (en) 2006-08-15 2009-10-06 Peter Neumann Method and system for parallel vector data processing of vector data having a number of data elements including a defined first bit-length
US8191056B2 (en) 2006-10-13 2012-05-29 International Business Machines Corporation Sparse vectorization without hardware gather/scatter
US7743231B2 (en) 2007-02-27 2010-06-22 International Business Machines Corporation Fast sparse list walker
US20090172348A1 (en) * 2007-12-26 2009-07-02 Robert Cavin Methods, apparatus, and instructions for processing vector data
US8667250B2 (en) 2007-12-26 2014-03-04 Intel Corporation Methods, apparatus, and instructions for converting vector data
US8458684B2 (en) * 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
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
JP5382467B2 (ja) 2011-04-20 2014-01-08 アイシン・エィ・ダブリュ株式会社 車両用駆動装置
WO2013042211A1 (ja) 2011-09-20 2013-03-28 トヨタ自動車株式会社 車両用駆動装置
US20140095847A1 (en) * 2012-09-28 2014-04-03 Doron Orenstein Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
US9563425B2 (en) * 2012-11-28 2017-02-07 Intel Corporation Instruction and logic to provide pushing buffer copy and store functionality

Also Published As

Publication number Publication date
KR101790428B1 (ko) 2017-10-25
JP2016015152A (ja) 2016-01-28
GB2511198B (en) 2016-06-01
KR20160017019A (ko) 2016-02-15
BR102013032654A2 (pt) 2016-06-28
JP2014130580A (ja) 2014-07-10
US9696993B2 (en) 2017-07-04
US20170052785A1 (en) 2017-02-23
CN107992330B (zh) 2022-02-22
GB2511198A (en) 2014-08-27
US9501276B2 (en) 2016-11-22
KR20140088025A (ko) 2014-07-09
CN107992330A (zh) 2018-05-04
JP5795787B2 (ja) 2015-10-14
US20140189321A1 (en) 2014-07-03
JP6207095B2 (ja) 2017-10-04
DE102013021221A1 (de) 2014-07-03
GB201323062D0 (en) 2014-02-12
KR101592074B1 (ko) 2016-02-05
CN103970509A (zh) 2014-08-06
CN103970509B (zh) 2018-01-05

Similar Documents

Publication Publication Date Title
KR101790428B1 (ko) 조건부 루프들을 벡터화하기 위한 명령어들 및 로직
US10452398B2 (en) Methods, apparatus, instructions and logic to provide permute controls with leading zero count functionality
KR101767025B1 (ko) 벡터 어드레스 충돌 검출 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
KR101555412B1 (ko) 벡터 압축 및 회전 기능 제공 명령어 및 로직
US20170357514A1 (en) Instruction and logic to provide vector scatter-op and gather-op functionality
CN107092465B (zh) 用于提供向量混合和置换功能的指令和逻辑
JP6467742B2 (ja) プロセッサ、方法、およびプロセッシングシステム
KR102472894B1 (ko) 벡터 패킹된 투플 교차 비교 기능을 제공하기 위한 방법, 장치, 명령어들 및 로직
JP2016527650A (ja) ベクトルポピュレーションカウント機能性を提供する方法、装置、命令、およびロジック
WO2014084919A1 (en) Instruction and logic to provide pushing buffer copy and store functionality
WO2013048369A9 (en) Instruction and logic to provide vector load-op/store-op with stride functionality
CN107690618B (zh) 用于提供向量紧缩直方图功能的方法、处理器和处理系统
WO2013048367A9 (en) Instruction and logic to provide vector loads and stores with strides and masking functionality
US8719519B2 (en) Split-word memory
WO2017105718A1 (en) Instructions and logic for vector-based bit manipulation

Legal Events

Date Code Title Description
A107 Divisional application of patent
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid