KR102296619B1 - 계산 처리를 위한 벡터 포맷용 명령어 및 로직 - Google Patents

계산 처리를 위한 벡터 포맷용 명령어 및 로직 Download PDF

Info

Publication number
KR102296619B1
KR102296619B1 KR1020177005143A KR20177005143A KR102296619B1 KR 102296619 B1 KR102296619 B1 KR 102296619B1 KR 1020177005143 A KR1020177005143 A KR 1020177005143A KR 20177005143 A KR20177005143 A KR 20177005143A KR 102296619 B1 KR102296619 B1 KR 102296619B1
Authority
KR
South Korea
Prior art keywords
vector
register
processor
instruction
data
Prior art date
Application number
KR1020177005143A
Other languages
English (en)
Other versions
KR20170036036A (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 KR20170036036A publication Critical patent/KR20170036036A/ko
Application granted granted Critical
Publication of KR102296619B1 publication Critical patent/KR102296619B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • G06F30/23Design optimisation, verification or simulation using finite element methods [FEM] or finite difference methods [FDM]
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/10Processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation

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)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Complex Calculations (AREA)

Abstract

프로세서는 명령어를 페치하는 프론트 엔드를 포함한다. 명령어는 복수의 차원에서 복수의 인접한 소스 데이터로부터의 입력을 사용하여 데이터 포인트를 계산한다. 프로세서는 명령어를 디코딩하는 디코더를 포함한다. 프로세서는 또한 코어를 포함하며, 코어는 디코딩된 명령어에 기초하여, 복수의 인접한 소스 데이터를 읽는 복수의 테이블 벡터 읽기 연산을 수행하고, 테이블 벡터 계산을 수행하여 상기 명령어를 실행한다. 테이블 벡터 계산은 복수의 테이블 벡터 읽기 연산을 수행한 결과에 기초한다. 코어는 또한 테이블 벡터 계산의 결과를 기록한다.

Description

계산 처리를 위한 벡터 포맷용 명령어 및 로직{INSTRUCTION AND LOGIC FOR A VECTOR FORMAT FOR PROCESSING COMPUTATIONS}
본 개시는 프로세서 또는 다른 프로세싱 로직에 의해 실행될 때, 논리(logical), 수리(mathematical), 또는 다른 함수 연산(functional operation)을 수행하는 프로세싱 로직, 마이크로프로세서 및 연관된 명령어 집합 아키텍처 분야에 관한 것이다.
멀티프로세서 시스템은 점점 더 일상화되고 있다. 멀티프로세서 시스템의 애플리케이션은 데스크톱 컴퓨팅으로 하향하는 동적 도메인 파티셔닝(dynamic domain partitioning)을 포함한다. 멀티프로세서 시스템의 이점을 취하기 위하여, 실행 코드는 다양한 프로세싱 엔티티에 의한 실행을 위한 복수의 스레드(thread)로 분리될 수 있다. 각 스레드는 서로 병렬로 실행될 수 있다. 또한, 프로세싱 엔티티의 효용을 높이기 위해서, 비순차적(out-of-order) 실행이 채용될 수 있다. 비순차적 실행은, 명령어로의 입력이 사용 가능해질 때, 명령어를 실행할 수 있다. 따라서, 코드 순서에서 나중에 나타나는 명령어가 코드 순서에서 더 일찍 나타나는 명령어보다 먼저 실행될 수 있다.
실시예는 예시의 방법으로 설명되고 첨부 도면의 각 도면으로 제한되지 않는다.
도 1a는 본 개시의 실시예에 따른, 명령어를 실행하는 실행 유닛을 포함하는 프로세서로 구성되는 일 실시예의 컴퓨터 시스템의 블록도이다.
도 1b는 본 개시의 실시예에 따른, 데이터 프로세싱 시스템을 예시한다.
도 1c는 문자열(text string) 비교 연산을 수행하는 데이터 프로세싱 시스템의 다른 실시예이다.
도 2는 본 개시의 실시예에 따른, 명령어를 실행하는 논리 회로를 포함하는 프로세서에 대한 마이크로-아키텍처의 블록도이다.
도 3a는 본 개시의 실시예에 따른, 멀티미디어 레지스터 내의 다양한 패킹된 데이터(packed data) 타입 표현을 예시한다.
도 3b는 본 개시의 실시예에 따른, 가능한 인-레지스터(in-register) 데이터 저장소 포맷을 예시한다.
도 3c는 본 개시의 실시예에 따른, 멀티미디어 레지스터 내의 다양한 부호(signed) 및 무부호(unsigned) 패킹된 데이터 타입 표현을 예시한다.
도 3d는 연산 인코딩 포맷의 일 실시예를 예시한다.
도 3e는 본 개시의 실시예에 따른, 40비트 이상을 가진 다른 가능한 연산 인코딩 포맷을 예시한다.
도 3f는 본 개시의 실시예에 따른, 또 다른 가능한 연산 인코딩 포맷을 예시한다.
도 4a는 본 개시의 실시예에 따른, 순차적 파이프라인(in-order pipeline) 및 레지스터 리네이밍 스테이지(register renaming stage), 비순차적 발행(out-of-order issue)/실행 파이프라인(execution pipeline)을 예시하는 블록도이다.
도 4b는 본 개시의 실시예에 따른, 프로세서 내에 포함되는 순차적 아키텍처 코어 및 레지스터 리네이밍 로직, 비순차적 발행/실행 로직을 예시하는 블록도이다.
도 5a는 본 개시의 실시예에 따른, 프로세서의 블록도이다.
도 5b는 본 개시의 실시예에 따른, 코어의 구현 예를 예시하는 블록도이다.
도 6은 본 개시의 실시예에 따른, 시스템의 블록도이다.
도 7은 본 개시의 실시예에 따른, 제 2 시스템의 블록도이다.
도 8은 본 개시의 실시예에 따른, 제 3 시스템의 블록도이다.
도 9는 본 개시의 실시예에 따른, 시스템온칩(system-on-a-chip)의 블록도이다.
도 10은 본 개시의 실시예에 따른, 적어도 하나의 명령어를 수행할 중앙 프로세싱 유닛과 그래픽 프로세싱 유닛을 포함하는 프로세서를 예시한다.
도 11은 본 개시의 실시예에 따른, IP 코어의 국면을 보여주는 블록도이다.
도 12는 본 개시의 실시예에 따른, 제 1 타입의 명령어가 상이한 타입의 프로세서에 의해 에뮬레이션될 수 있는 방법을 예시한다.
도 13은 본 개시의 실시예에 따른, 소스 명령어 집합 내의 2진 명령어를 타겟 명령어 집합 내의 2진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도를 예시한다.
도 14는 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처의 블록도이다.
도 15는 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처의 좀 더 상세한 블록도이다.
도 16은 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처에 대한 실행 파이프라인의 블록도이다.
도 17은 본 개시의 실시예에 따른, 프로세서를 활용하는 전자 디바이스의 블록도이다.
도 18은 본 개시의 예시 실시예에 따른, 계산 처리를 위한 벡터 포맷용 시스템(1800)의 일 실시예의 블록도이다.
도 19는 본 개시의 실시예에 따른, 유한-차분 함수(finite-difference function)의 예를 예시한다.
도 20은 본 개시의 실시예에 따른, 유한-차분 함수(finite-difference function)의 연산의 예를 예시한다.
도 21은 본 개시의 실시예에 따른, 이방성 함수(anisotropic function)의 연산의 예를 예시한다.
도 22는 본 개시의 실시예에 따른, 테이블 벡터 읽기(tabular vector read)에 기초하여 계산하는 시스템의 예시적인 연산을 예시한다.
도 23은 본 개시의 실시예에 따른, 계산 처리를 위한 벡터 포맷을 적용하는 방법의 예시적인 실시예의 흐름도이다.
다음의 상세한 설명은 계산 처리를 위한 벡터 포맷용 명령어와 프로세싱 로직을 기술한다. 일 실시예에서, 그러한 포맷은 테이블 포맷(tabular format)을 포함할 수 있다. 다른 실시예에서, 그러한 계산은 유한-차분 계산(finite-difference computation)을 포함할 수 있다. 예를 들면, 계산은 미분 방정식 계산이나 추정, 다차원 등방성 함수(isotropic function), 또는 이방성 함수(anisotropic function) 함수를 포함할 수 있다. 그러나 본 기술분야의 당업자라면 본 실시예가 이에 대한 세부 사항이 없이도 실행될 수 있다는 것을 이해할 것이다. 또한, 어떤 잘 알려진 구조, 회로, 그리고 그 유사한 것들은 본 개시의 실시예를 불필요하게 모호하게 하지 않도록 상세하게 표현하지 않는다.
비록, 다음의 실시예는 프로세서와 관련하여 설명되지만, 다른 실시예가 다른 타입의 집적회로와 논리 디바이스에 적용 가능하다. 본 개시의 유사한 기술과 가르침은 또는 더 높은 파이프라인 처리율과 향상된 성능으로부터 이익을 얻는 다른 타입의 회로나 반도체 디바이스에 적용될 수 있다. 본 개시의 실시예의 가르침은 데이터 조작을 수행하는 어떠한 프로세서나 머신에도 적용할 수 있다. 그러나 본 실시예는 512-비트, 256-비트, 128-비트, 64-비트, 32-비트, 또는 16-비트 데이터 연산을 수행하는 프로세서나 머신에 제한되지 않고, 수행되는 데이터의 조작이나 관리를 위한 어떠한 프로세서나 머신에 적용될 수 있다. 또한, 다음의 상세한 설명은 예를 제공하며, 그리고 첨부하는 도면은 예시의 목적으로 다양한 예를 보여준다. 그러나 이러한 예는, 이 예가 본 개시의 실시예의 모든 가능한 구현의 전체 리스트를 제공하기보다는 단지 본 개시의 실시예의 예를 제공하기 위해서 의도된 것이므로, 제한하는 의미로 이해되지 않아야 한다.
비록 아래의 예는 실행 유닛과 논리 회로의 맥락에서 처리와 배포를 기술하지만, 본 개시의 다른 실시예는 머신 판독가능하고, 유형의 매체에 저장되는 데이터 또는 명령어의 방식으로 성취될 수 있으며, 이 데이터 또는 명령어는 머신에 의해 수행될 때, 머신이 본 개시의 적어도 일 실시예에 따른 함수를 수행하도록 한다. 일 실시예에서, 본 개시의 실시예와 연관되는 함수는 머신 실행 가능한 명령어로 구현된다. 명령어는 명령어로 프로그래밍될 수 있는 범용 또는 특수 목적의 프로세서가 본 개시의 단계를 수행하도록 유발하는데 사용될 수 있다. 본 개시의 실시예는, 본 개시의 실시예에 따른 하나 이상의 연산을 수행하도록 컴퓨터(또는 다른 전자 디바이스)를 프로그램밍하도록 사용될 수 있는 명령어가 저장된, 머신 또는 컴퓨터 판독 가능한 매체를 포함할 수 있는 컴퓨터 프로그램 제품이나 소프트웨어로서 제공될 수 있다. 또한, 본 개시의 실시예의 단계는 단계를 수행하기 위한 고정-함수 로직을 유지하는 특정 하드웨어 컴포넌트에 의해 수행되거나, 또는 프로그래밍된 컴퓨터 컴포넌트와 고정-함수 하드웨어 컴포넌트의 어떠한 조합에 의해 수행될 수 있다.
본 개시의 실시예를 수행하기 위한 프로그램 로직에 사용되는 명령어는, DRAM, 캐시, 플래시 메모리, 또는 그 밖의 저장소와 같은, 시스템 내의 메모리 내에 저장될 수 있다. 또한, 명령어는 네트워크를 통해 배포되거나, 또는 다른 컴퓨터 판독가능한 매체의 방식으로 배포될 수 있다. 따라서, 머신 판독 가능한 매체는 머신(예를 들면, 컴퓨터)에 의해 판독 가능한 형태로, 즉 이것으로 제한되지 않지만, 플로피 디스켓, 광디스크, 콤팩트디스크 읽기 전용 메모리(Compact Disc, Read-Only Memory, CD-ROM), 그리고 광자기 디스크, 읽기전용 메모리(Read-Only Memory, ROM), 랜덤 액세스 메모리(Random Access Memory, RAM), 소거 가능한 프로그래머블 읽기 전용 메모리(Erasable Programmable Read-Only Memory, EPROM), 전기적으로 소거 가능한 프로그래머블 읽기전용 메모리(Electrically Erasable Programmable Read-Only Memory, EEPROM), 자기 또는 광 카드, 플래시 메모리, 또는 전기적, 광학적, 음향의 또는 다른 타입의 전파 신호(예를 들면, 반송파, 적외선 신호, 디지털 신호, 등등)를 통해 인터넷상의 정보의 전송에 사용되는 유형의, 머신 판독 가능한 저장소 내에 정보를 저장하거나 전송하는 임의의 메커니즘을 포함할 수 있다. 따라서, 컴퓨터 판독 가능한 매체는 머신(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 된 전자적 명령어 또는 정보를 저장하거나 전송하기에 적합한 어떠한 타입의 유형의, 머신 판독 가능한 매체도 포함할 수 있다.
디자인은 생성부터 시뮬레이션, 제작에 이르기까지 다양한 스테이지(stage)를 통해 진행될 수 있다. 디자인을 표현하는 데이터는 다양한 방식으로 디자인을 표현할 수 있다. 첫째, 시뮬레이션에서 유용할 수 있는데, 하드웨어는 하드웨어 서술 언어나 다른 함수적 서술 언어를 사용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트를 갖는 회로 레벨 모델은 디자인 프로세스의 일부 스테이지에서 생성될 수 있다. 또한, 어떤 스테이지에서 디자인은 하드웨어 모델 내의 다양한 디바이스의 물리적인 배치를 표현하는 데이터의 레벨에 도달할 수 있다. 어떤 반도체 제조 기술이 사용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적회로를 만들기 위하여 사용되는 마스크를 위한 상이한 마스크 레이어 상에 다양한 특징의 존재 또는 부존재를 명시하는 데이터일 수 있다. 디자인의 어떤 표현에서, 데이터는 어떤 형태의 머신 판독 가능한 매체에도 저장될 수 있다. 디스크와 같은 메모리나 자기 또는 광학 저장소는 변조되거나 또는 정보를 전송하기 위하여 생성된 광파 또는 전기파를 통해 전송되는 정보를 저장하기 위한 머신 판독 가능한 매체일 수 있다. 코드나 디자인을 지시하거나 반송하는 전기 반송파가 전송될 때, 전기 신호의 복사, 버퍼링, 또는 재전송이 수행되는 정도로, 새로운 복사본이 만들어질 수 있다. 따라서, 통신 제공자 또는 네트워크 제공자는, 본 개시의 실시예의 기술을 구현하는, 반송파로 인코딩되는 정보와 같은 물품을 적어도 일시적으로 유형의 머신 판독 가능한 매체에 저장할 수 있다.
현대의 프로세서에는 많은 수의 다른 실행 유닛이 다양한 코드와 명령어를 처리하고 실행하기 위하여 사용될 수 있다. 어떤 명령어는 좀 더 빨리 완료되는 반면, 다른 명령어는 완료되려면 많은 클록 사이클(clock cycle)이 소요될 수 있다. 명령어의 처리율이 빠를수록, 프로세서의 전반적인 성능은 더 좋다. 따라서 가능하면 빨리 실행되는 많은 명령어를 갖는 것이 바람직하다. 그러나 훨씬 더 복잡하고 실행 시간과 프로세서 자원을 많이 요구하는 특정 명령어가 있을 수 있는데, 예를 들면, 부동 소수점 명령어, 로드/저장 연산, 데이터 이동 등이 있다.
점점 더 많은 컴퓨터 시스템이 인터넷, 텍스트, 및 멀티미디어 애플리케이션에서 사용됨에 따라서, 추가적인 프로세서 지원이 계속해서 소개되어 왔다. 일 실시예에서, 명령어 집합은 데이터 타입, 명령어, 레지스터 아키텍처, 어드레싱 모드, 메모리 아키텍처, 인터럽트 및 예외 처리 및 외부 입력 및 출력(input and output, I/O)을 포함하는, 하나 이상의 컴퓨터 아키텍처와 연관될 수 있다.
일 실시예에서, 명령어 집합 아키텍처(instruction set architecture, ISA)는 하나 이상의 마이크로-아키텍처에 의해 구현될 수 있고, 마이크로-아키텍처는 하나 이상의 명령어 집합을 구현하도록 사용되는 프로세서 로직과 회로를 포함할 수 있다. 이에 따라, 상이한 마이크로-아키텍처를 갖는 프로세서는 공통 명령어의 적어도 일부를 공유할 수 있다. 예를 들면, Intel® 펜티엄 4 프로세서, Intel® Core™ 프로세서와 캘리포니아 서니베일 소재의 어드밴스드 마이크로 디바이스(Advanced Micro Devices Inc.)의 프로세서는 (새로운 버전에 더해진 몇몇 익스텐션을 갖는) x86 명령어 집합의 거의 동일한 버전을 구현하지만, 상이한 내부 디자인을 가진다. 유사하게, ARM 홀딩스, MIPS, 또는 다른 라이센시나 어댑터와 같은, 다른 프로세서 개발 기업에 의해 설계된 프로세서는 공통 명령어의 적어도 일부를 공유할 수 있지만, 상이한 프로세서 디자인을 포함할 수 있다. 예를 들면, ISA의 동일한 레지스터 아키텍처는 레지스터 리네이밍 메커니즘을 사용하는(예를 들면, 레지스터 별명 테이블(Register Alias Table, RAT), 재정렬 버퍼(Reorder Buffer, ROB) 그리고 리타이어먼트 레지스터 파일(retirement register file)의 사용) 하나 이상의 동적으로 할당된 물리 레지스터인, 전용 물리 레지스터를 포함하는 새로운 또는 잘 알려진 기술을 사용하는 상이한 마이크로 아키텍처 내에 상이한 방식으로 구현될 수 있다. 일 실시예에서, 레지스터는 하나 이상의 레지스터, 레지스터 아키텍처, 레지스터 파일, 또는 소프트웨어 프로그래머에 의해 어드레싱되거나 또는 어드레싱될 수 없는 다른 레지스터 집합을 포함할 수 있다.
명령어는 하나 이상의 명령어 포맷을 포함할 수 있다. 일 실시예에서, 명령어 포맷은, 다른 것 중에서도, 수행되는 연산과 연산이 수행되는 피연산자를 명시하는 다양한 필드(비트의 수, 비트의 위치, 등)를 지시할 수 있다. 다른 실시예에서, 어떤 명령어 포맷은 명령어 템플릿(또는 서브-포맷)에 의해 더 정의될 수 있다. 예를 들면, 소정의 명령어 포맷의 명령어 템플릿은 명령어 포맷의 필드의 상이한 부분 집합을 가지도록 정의되고 그리고/또는 다르게 해석된 소정의 필드를 갖도록 정의될 수 있다. 일 실시예에서, 명령어는 (그리고 정의된다면, 명령어 포맷의 소정의 명령어 템플릿 내에) 명령어 포맷을 사용하여 표현될 수 있으며, 연산과 연산이 수행되는 피연산자를 명시하거나 지시할 수 있다.
과학적이고, 재무적이고, 자동-벡터화된 범용의, RMS(인식(recognition), 마이닝(mining), 및 합성(synthesis)), 그리고 비주얼 멀티미디어 애플리케이션(예를 들면, 2D/3D 그래픽, 이미지 프로세싱, 비디오 압축/압축해제, 음성 인식 알고리즘 및 오디오 처리)은 많은 데이터 아이템에 대해 수행되는 동일한 연산을 요구할 수 있다. 일 실시예에서, 단일 연산 다중 데이터(Single Instruction Multiple Data, SIMD)는 프로세서가 연산을 다중 데이터 요소(data element)에 대해 수행하도록 유발할 수 있다. SIMD 기술은 레지스터 내의 비트를 각각 별도의 값을 표현하는 많은 고정 크기 또는 가변 크기의 데이터 요소로 논리적으로 나눌 수 있는 프로세스에서 사용될 수 있다. 예를 들면, 일 실시예에서, 64-비트 레지스터의 비트는 각각이 별도의 16-비트 값을 표현하는 4개의 별도의 16-비트 데이터 요소를 포함하는 소스 피연산자(source operand)로 조직될 수 있다. 이러한 타입의 데이터는 '패킹된(packed)' 데이터 타입 또는 '벡터' 데이터 타입이라 지칭될 수도 있으며, 이러한 데이터 타입의 피연산자는 패킹된 데이터 피연산자 또는 벡터 피연산자라고 지칭될 수 있다. 일 실시예에서, 패킹된 데이터 아이템이나 벡터는 단일 레지스터 내에 저장된 패킹된 데이터 요소의 시퀀스일 수 있으며, 패킹된 데이터 피연산자 또는 벡터 피연산자는 SIMD 명령어(또는 '패킹된 데이터 명령어' 또는 '벡터 명령어')의 소스 또는 목적지 피연산자일 수 있다. 일 실시예에서, SIMD 명령어는 단일 벡터 연산이, 두 개의 소스 벡터 피연산자에 대해 수행되어, 동일하거나 다른 크기의 (결과 벡터 피연산자(result vector operand)로 지칭되기도 하는) 목적지 벡터 피연산자(destination vector operand)를 동일하거나 다른 수의 데이터 요소와 함께, 동일하거나 다른 데이터 요소 순서로 생성하도록 명시할 수 있다.
x86, MMX™, 스트리밍 SIMD 익스텐션(Streaming SIMD Extensions, SSE), SSE2, SSE3, SSE4.1, 및 SSE4.2 명령어를 포함하는 명령어 집합을 갖는 Intel® Core™ 프로세서, 벡터 플로팅 포인트(Vector Floating Point, VFP) 및/또는 NEON 명령어를 포함하는 명령어 집합을 가진 ARM Cortex® 패밀리와 같은 ARM 프로세서, 그리고 중국과학원 산하 컴퓨팅 기술 연구소(Institute of Computing Technology, ICT)에 의해 개발된 룽순(Loongson) 프로세서 패밀리와 같은 MIPS 프로세서에 의해 채용된 것 같은, SIMD 기술은 애플리케이션 성능의 상당한 개선을 가능하게 했다(Core™와 MMX™는 등록 상표 또는 캘리포니아 산타클라라 소재의 인텔사의 상표이다).
일 실시예에서, 목적지 및 소스 레지스터/데이터는 대응하는 데이터 또는 연산의 소스와 목적지를 표현하는 일반적인 용어일 수 있다. 일부 실시예에서, 목적지 및 소스 레지스터/데이터는 레지스터, 메모리 또는 묘사된 것 이외의 다른 이름이나 함수를 갖는 다른 저장소 영역에 의해 구현될 수 있다. 예를 들면, 일 실시예에서 "DEST1"은 임시 저장 레지스터이거나 다른 저장 영역일 수 있고, 반면에 "SRC1"과 "SRC2"는 제 1 및 제 2 소스 저장소 레지스터이거나 다른 저장소 공간 등 일 수 있다. 다른 실시예에서, 둘 이상의 SRC 및 DEST 저장소 영역은 동일한 저장소 영역(예를 들면, SIMD 레지스터) 내의 상이한 데이터 저장소 요소에 대응할 수 있다. 일 실시예에서, 소스 레지스터 중의 하나는 목적지 레지스터로 동작할 수 있는데, 예를 들면, 제 1 및 제 2 소스 데이터에 대해 수행되는 연산의 결과를 목적지 레지스터로 사용되는 두 개의 소스 레지스터 중의 하나에 라이트 백(writing back)할 수 있다.
도 1a는 본 개시의 실시예에 따른, 명령어를 실행하는 실행 유닛을 포함하는 프로세서로 구성되는 일 실시예의 컴퓨터 시스템의 블록도이다. 시스템(100)은 아래에서 설명되는 실시예에서와 같이, 본 개시의 실시예에 따른, 데이터를 프로세싱하기 위한 알고리즘을 수행하는 로직을 포함하는 실행 유닛을 채용하는 프로세서(102)와 같은 컴포넌트를 포함할 수 있다. 시스템(100)은 캘리포니아 산타클라라 소재의 인텔사로부터 구입 가능한 PENTIUM®Ⅲ, PETIUM®4, Xeon™, Itanium®, Xcale™ 및/또는 StrongARM™ 마이크로프로세서에 기초하는 프로세싱 시스템을 나타낼 수 있지만, (다른 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션, 셋톱 박스 및 그 유사한 것을 포함하는) 다른 시스템도 사용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 워싱톤의 레드몬드 소재의 마이크로소프트사로부터 구입 가능한 Windows™ 운영체제의 한 버전을 실행할 수 있지만, 다른 운영 체제(예를 들면, 유닉스 및 리눅스), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스도 사용될 수 있다. 따라서, 본 개시의 실시예는 특정 하드웨어 회로 및 소프트웨어의 임의의 조합으로 제한되지 않는다.
실시예는 컴퓨터 시스템으로 제한되지 않는다, 본 개시의 실시예는 휴대용 디바이스 또는 임베디드 애플리케이션과 같은 다른 디바이스에서 사용될 수 있다. 휴대용 디바이스의 임의의 예는 셀룰러 폰, 인터넷 프로토콜 디바이스, 디지털 카메라, 개인용 디지털 보조기(personal digital assistants, PDA), 및 휴대용 PC를 포함한다. 임베디드 애플리케이션은 마이크로 제어기, 디지털 신호 프로세서(digital signal processor, DSP), 시스템온칩, 네트워크 컴퓨터(network computer, NetPC), 셋톱 박스, 네트워크 허브, 광역 네트워크(wide area network, WAN) 스위치, 또는 적어도 하나의 실시예에 따른 하나 이상의 명령어를 수행할 수 있는 다른 시스템을 포함할 수 있다.
컴퓨터 시스템(100)은 본 개시의 일 실시예에 따른 적어도 하나의 명령어를 수행하는 알고리즘을 수행하는 하나 이상의 실행 유닛(108)을 포함하는 프로세서(102)를 포함할 수 있다. 실시예는 싱글 프로세서 데스크톱 또는 서버 시스템의 맥락에서 기술될 수 있지만, 다른 실시예는 멀티 프로세서 시스템에 포함될 수 있다. 시스템(100)은 '허브(hub)' 시스템 아키텍처의 예일 수 있다. 시스템(100)은 데이터 신호를 처리하는 프로세서(102)를 포함할 수 있다. 프로세서(102)는 복합 명령어 집합 컴퓨터(complex instruction set computer, CISC) 마이크로프로세서, 축소 명령어 집합 컴퓨팅(reduced instruction set computing, RISC) 마이크로프로세서, 매우 긴 명령어 워드(very long instruction word, VLIW) 마이크로프로세서, 명령어 집합의 조합을 구현하는 프로세서, 또는 예를 들면, 디지털 신호 프로세서와 같은 임의의 다른 프로세서 디바이스를 포함할 수 있다. 일 실시예에서, 프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 컴포넌트 간의 데이터 신호를 전송할 수 있는 프로세서 버스(110)에 연결될 수 있다. 시스템(100)의 구성요소는 본 기술분야에 익숙한 자에게 잘 알려진 통상적인 기능을 수행할 수 있다.
일 실시예에서, 프로세서(102)는 레벨 1(Level 1, L1) 내부 캐시 메모리(104)를 포함할 수 있다. 아키텍처에 따라서, 프로세서(102)는 단일 내부 캐시나 다중 레벨의 내부 캐시를 가질 수 있다. 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 상주할 수 있다. 다른 실시예는 특정 구현과 필요에 따라서 내부 및 외부 캐시의 조합을 포함할 수 있다. 레지스터 파일(106)은 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터를 포함하는 다양한 레지스터 내에 상이한 타입의 데이터를 저장할 수 있다.
실행 유닛(108)은 정수 및 부동 소수점 연산을 수행하는 로직을 포함하며, 또한 프로세서(102)에 상주한다. 프로세서(102)는 또한 특정 마이크로명령어에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함할 수 있다. 일 실시예에서, 실행 유닛(108)은 패킹된 명령어 집합(109)을 처리하는 로직을 포함할 수 있다. 범용 프로세서(102)의 명령어 집합 내에, 패킹된 명령어 집합(109)을 명령어를 실행하는 연관된 회로와 함께 포함시킴으로써, 많은 멀티미디어 애플리케이션에서 사용되는 연산이 범용 프로세서(102) 내의 패킹된 데이터를 사용하여 수행될 수 있다. 따라서 멀티미디어 애플리케이션은 패킹된 데이터에 대해 연산을 수행하는 프로세서의 데이터 버스의 전체 폭을 사용함으로써 좀 더 효율적으로 가속되고 실행될 수 있다. 이것은 하나 이상의 연산을 한 번에 한 데이터 요소씩 수행하기 위하여, 데이터의 더 작은 유닛을 프로세서의 데이터 버스에 걸쳐서 전송해야 할 필요성을 없앨 수 있다.
실행 유닛(108)의 실시예는 마이크로 제어기, 임베디드 프로세서, 그래픽 디바이스, DSP, 및 다른 타입의 논리 회로에서 사용될 수 있다. 시스템(100)은 메모리(120)를 포함할 수 있다. 메모리(120)는 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM) 디바이스, 정적 랜덤 액세스 메모리(static random access memory, SRAM) 디바이스, 플래시 메모리 디바이스, 또는 다른 메모리 디바이스로 구현될 수 있다. 메모리(120)는 프로세서(102)에 의해 실행되는 데이터 신호에 의해 표현되는 명령어 및/또는 데이터를 저장할 수 있다.
시스템 로직 칩(116)은 프로세서 버스(110)와 메모리(120)에 연결될 수 있다. 시스템 로직 칩(116)은 메모리 제어기 허브(memory controller hub, MCH)를 포함할 수 있다. 프로세서(102)는 프로세서 버스(110)를 통해 MCH(116)와 통신할 수 있다. MCH(116)는 고대역폭 메모리 경로(118)를 명령어 및 데이터 저장소, 그래픽 커맨드, 데이터 및 텍스처의 저장소를 위한 메모리(120)에 제공할 수 있다. MCH(116)는 프로세서(102), 메모리(120), 및 시스템(100) 내의 다른 컴포넌트 사이에서 데이터 신호를 전달하며, 프로세서 버스(110), 메모리(120), 및 시스템 I/O(122) 간의 데이터 신호를 이어줄 수 있다. 일부 실시예에서, 시스템 로직 칩(116)은 그래픽 제어기(112)에 연결되는 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통해 메모리(120)에 연결될 수 있다. 그래픽 카드(112)는 가속 그래픽 포트(Accelerated Graphics Port, AGP) 인터커넥트(114)를 통해 MCH(116)에 연결될 수 있다.
시스템(100)은 MCH(116)를 I/O 제어기 허브(ICH)(130)에 연결하는 독점적 허브 인터페이스 버스(122)를 사용할 수 있다. 일 실시예에서, ICH(130)는 로컬 I/O 버스를 통해 몇몇 I/O 디바이스로 직접적인 연결을 제공할 수 있다. 로컬 I/O 버스는 주변기기를 메모리(120), 칩셋, 및 프로세서(102)에 연결하는 고속 로컬 I/O 버스를 포함할 수 있다. 예를 들면 오디오 제어기, 펌웨어 허브(플래시 BIOS))(128), 무선 송수신기(126), 데이터 저장소(124), 사용자 입력 및 키보드 인터페이스를 포함하는 레거시 I/O 제어기, 범용 직렬 버스(Universal Serial Bus, USB)와 같은 직렬 확장 포트 및 네트워크 제어기(134)를 포함할 수 있다. 데이터 저장 디바이스(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스, 또는 그 밖의 대량 저장 디바이스를 포함할 수 있다.
시스템의 다른 실시예의 경우에, 일 실시예에 따른 명령어는 시스템온칩과 함께 사용될 수 있다. 시스템온칩의 일 실시예는 프로세서 및 메모리를 포함한다. 그러한 일 시스템을 위한 메모리는 플래시 메모리를 포함한다. 플래시 메모리는 프로세서 및 다른 시스템 컴포넌트와 동일한 다이(die) 상에 배치될 수 있다. 또한, 메모리 제어기 또는 그래픽 제어기와 같은 다른 로직 블록이 또한 시스템온칩 상에 위치될 수 있다.
도 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)는 다양한 다른 시스템 디바이스와 통신하는 버스(141)와 연결될 수 있으며, 다른 시스템 디바이스는 예를 들면, 동기화 동적 랜덤 액세스 메모리(SDRAM) 컨트롤(146), 정적 랜덤 액세스 메모리(SRAM) 컨트롤(147), 버스트 플래시 인터페이스(148), 개인용 컴퓨터 메모리 카드 국제적 어소시에이션(personal computer memory card international association, PCMCIA)/콤팩트 플래시(compact flash, CF) 카드 컨트롤(149), 액정 디스플레이(liquid crystal display, LCD) 컨트롤(150), 직접 메모리 액세스(direct memory access, DMA) 컨트롤(151), 및 대안의 버스 마스터 인터페이스(152)를 포함할 수 있지만, 이것으로 제한되지 않는다. 일 실시예에서, 데이터 프로세싱 시스템(140)은 I/O 버스를 통해 다양한 I/O 디바이스와 통신하는 I/O 브리지(154)를 포함할 수 있다. 그러한 I/O 디바이스는, 예를 들면, 유니버설 비동기 수신기/전송기(universal asynchronous receiver/transmitter, UART)(155), 유니버설 직렬 버스(USB)(156), 블루투스 무선 UART(157), 및 I/O 확장 인터페이스(158)를 포함할 수 있지만, 이것으로 제한되지 않는다.
데이터 프로세싱 시스템(140)의 일 실시예는 모바일, 네트워크 및/또는 무선 통신, 및 문자열 비교 연산을 포함하는 SIMD 연산을 수행할 수 있는 프로세싱 코어(159)를 제공한다. 프로세싱 코어(159)는 다양한 오디오, 비디오, 이미징 및 통신 알고리즘으로 프로그래밍 될 수 있으며, 알고리즘은 월시 아다말 변환(Walsh-Hadamard transform), 고속 퓨리에 변환(fast Fourier transform, FFT), 이산 코사인 변환(discrete cosine transform, DCT), 및 이들의 각 역변환과 같은 이산 변환, 컬러 스페이스 변환, 비디오 부호화 모션 추정 또는 비디오 복호화 모션 보정과 같은 압축/압축해제 기술, 및 펄스 부호 변조(pulse coded modulation, PCM)와 같은 변조/복조(modulation/demodulation, MODEM) 기능을 포함한다.
도 1c는 SIMD 문자열 비교 연산을 수행하는 데이터 프로세싱 시스템의 다른 실시예를 예시한다. 일 실시예에서, 데이터 프로세싱 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(161), 캐시 메모리(167), 입력/출력 시스템(168)을 포함할 수 있다. 입력/출력 시스템(168)은 광학적으로 무선 인터페이스(169)에 연결될 수 있다. SIMD 코프로세서(161)는 일 실시예에 따른 명령어를 포함하는 연산을 수행할 수 있다. 일 실시예에서, 프로세싱 코어(170)는 또한 하나 이상의 프로세스 기술로 제조되기에 적합할 수 있으며, 머신 판독 가능한 미디어 상에 충분히 자세하게 표현됨으로써, 프로세싱 코어(170)를 포함하는 데이터 프로세싱 시스템(160)의 전체 또는 일부의 제조를 용이하게 하기에 적합할 수 있다.
일 실시예에서, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(164)의 집합을 포함한다. 메인 프로세서(165)의 일 실시예는 실행 유닛(162)에 의해 실행되는 일 실시예에 따른 명령어를 포함하는 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함한다. 다른 실시예에서, SIMD 코프로세서(161)는 또한 명령어 집합(163)의 명령어를 디코딩하도록 디코더(165)의 적어도 일부를 포함한다. 프로세싱 코어(170)는 또한 본 개시의 실시예를 이해하는데 불필요할 수 있는 부가적인 회로(도시되지 않음)를 포함할 수 있다.
연산 시, 메인 프로세서(166)는 캐시 메모리(167) 및 입력/출력 시스템(168)과의 상호작용을 포함하는 일반형의 데이터 프로세싱 연산을 제어하는 데이터 프로세싱 명령어 스트림을 실행할 수 있다. 데이터 프로세싱 명령어 스트림은 SIMD 코프로세서 명령어일 수 있다. 메인 프로세서(166)의 디코더(165)는 이러한 SIMD 코프로세서 명령어를 소속된 SIMD 코프로세서(161)에 의해 실행되어야 하는 타입으로 인식할 수 있다. 따라서, 메인 프로세서(166)는 코프로세서 버스(166) 상에 이러한 SIMD 코프로세서 명령어(또는 SIMD 코프로세서 명령어를 표현하는 제어 신호)을 발행한다. 코프로세서 버스(166)로부터, 이들 명령어는 소속된 임의의 SIMD 코프로세서(161)에 의해 수신될 수 있다. 이 경우에, SIMD 코프로세서(161)는 그것을 대상으로 하는 수신된 임의의 SIMD 코프로세서 명령어를 수용하고 실행할 수 있다.
데이터는 SIMD 코프로세서 명령어에 의해 처리되는 무선 인터페이스(169)를 통해 수신될 수 있다. 예를 들면, 음성 통신은 디지털 신호의 형태로 수신될 수 있고, 이 디지털 신호는 SIMD 코프로세서 명령어에 의해 처리되어 음성 통신의 디지털 오디오 샘플 표현을 생성할 수 있다. 다른 예에서, 압축 오디오 및/또는 비디오는 디지털 비트 스트림의 형태로 수신되고, 이 디지털 비트 스트림은 SIMD 코프로세서 명령어에 의해 처리되어 디지털 오디오 샘플 및/또는 모션 비디오 프레임을 생성할 수 있다. 프로세싱 코어(170)의 실시예에서, 메인 프로세서(166) 및 SIMD 코프로세서(161)는 실행 유닛(162), 레지스터 파일(164)의 집합, 및 일 실시예에 따른 명령어를 포함하는 명령어 집합(163)의 명령어를 인식하는 디코더(165)를 포함하는 싱글 프로세싱 코어(170)로 통합될 수 있다.
도 2는 본 개시의 실시예에 따른, 명령어를 실행하는 논리 회로를 포함하는 프로세서(200)에 대한 마이크로-아키텍처의 블록도이다. 일부 실시예에서, 일 실시예에 따른 명령어는 바이트, 워드, 더블워드, 쿼드워드의 크기 등과 더불어, 단정도(single precision) 및 배정도(double precision) 정수 및 부동 소수점 데이터 타입과 같은 데이터 타입을 갖는 데이터 요소에 대해 연산하도록 구현될 수 있다. 일 실시예에서, 순차적 프론트 엔드(201)는 실행될 명령어를 페치(fetch)하고, 이 명령어가 나중에 프로세서 파이프라인에서 사용되도록 준비하는 프로세서(200)의 일부를 구현할 수 있다. 프론트 엔드(201)는 여러 개의 유닛을 포함할 수 있다. 일 실시예에서, 명령어 프리패처(226)는 메모리로부터 명령어를 페치하여, 명령어를 디코딩하거나 해석하는 명령어 디코더(228)로 명령어를 제공한다. 예를 들면, 일 실시예에서, 디코더는 수신한 명령어를 머신이 실행하는 "마이크로-명령어" 또는 "마이크로-연산"이라 불리는(또한, 마이크로 op 또는 uop로 불리는) 하나 이상의 연산으로 디코딩한다. 다른 실시예에서, 디코더는 명령어를 일 실시예에 따른 연산을 수행하는 마이크로-아키텍처에 의해 사용될 수 있는 연산 코드(opcode) 및 대응하는 데이터 및 제어 필드로 파싱한다. 일 실시예에서, 추적 캐시(230)는 디코딩된 UOP 실행을 위해 uop 큐(234) 내에 프로그램 순의 시퀀스(program ordered sequence)나 트레이스(trace)로 조립할 수 있다. 일 실시예에서, 추적 캐시(trace cache)(230)가 복합 명령어를 만나면, 마이크로코드 ROM(232)은 연산을 완료하기 위해 필요한 uop를 제공한다.
어떤 명령어는 단일 마이크로-연산으로 변환될 수 있는 반면, 다른 명령어는 전체 연산을 완료하기 위해 여러 마이크로-연산이 필요하다. 일 실시예에서, 만일 4개보다 많은 마이크로-연산이 명령어를 완성하기 위해서 필요하면, 디코더(228)는 마이크로코드 ROM(232)에 액세스하여 명령어를 수행할 수 있다. 일 실시예에서, 명령어는 명령어 디코더(228)에서의 프로세싱을 위해서 적은 수의 마이크로-연산으로 디코딩될 수 있다. 다른 실시예에서, 마이크로코드 ROM(232)에 내에 저장되는 명령어는 연산을 수행하기 위해 필요한 복수의 마이크로-연산일 수 있다. 추적 캐시(230)는 마이크로코드 ROM(232)으로부터의 일 실시예에 따른 하나 이상의 명령어를 완성하도록 마이크로-코드 시퀀스를 읽을 올바른 마이크로-명령어 포인터를 결정하는 엔트리 포인트 프로그래머블 로직 어레이(programmable logic array, PLA)를 말한다. 마이크로코드 ROM(232)이 명령어에 대한 마이크로-연산의 시퀀싱을 종료한 후에, 머신의 프론트 엔드(201)는 추적 캐시(230)로부터 마이크로-연산의 페칭을 재개할 수 있다.
비순차적 실행 엔진(203)은 실행을 위한 명령어를 준비할 수 있다. 비순차적 실행 로직은, 이들 로직이 파이프라인으로 내려가서 실행을 위해 스케줄링될 때, 성능을 최적화하기 위해, 명령어의 흐름을 가다듬고 재정렬하도록 복수의 버퍼를 갖는다. 할당자 로직은 실행을 위해 각 uop가 필요로 하는 머신 버퍼 및 자원을 할당한다. 레지스터 리네이밍 로직은 로직 레지스터를 레지스터 파일 내의 엔트리상으로 리네이밍한다. 또한, 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동 소수점 스케줄러(204), 및 단일 부동 소수점 스케줄러(206)와 같은 명령어 스케줄러의 앞에서, 할당자는 두 개의 uop 큐 - 하나는 메모리 연산을 위한 것이고 하나는 비-메모리 연산을 위한 것임 - 중의 한 큐 내의 각 uop마다 엔트리를 할당한다. uop 스케줄러(202, 204, 206)는 uop가 스케줄러의 종속 입력 레지스터 피연산자 소스의 준비상태 및 uop가 연산을 완료하기 위해서 필요로 하는 실행 자원의 가용성에 기초하여 실행할 준비가 되는 때를 결정한다. 일 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각 절반마다 스케줄링하는 한편, 다른 스케줄러는 메인 프로세서 클록 사이클 당 한번씩 스케줄링할 수 있다. 스케줄러는 디스패치(dispatch) 포트가 실행을 위해 uop를 스케줄링하도록 중재한다.
레지스터 파일(208, 210)은 스케줄러(202, 204, 206)와 실행 블록(211)의 실행 유닛(212, 214, 216, 218, 220, 222, 224) 사이에 배치될 수 있다. 각 레지스터 파일(208, 210)은 정수와 부동 소수점 연산을 각각 수행한다. 각 레지스터 파일(208, 210)은 아직 레지스터 파일에 기록되지 않은 막 완료된 결과를 새로운 종속 uop로 바이패스하거나 전달할 바이패스 네트워크를 포함할 수 있다. 정수 레지스터 파일(208)과 부동 소수점 레지스터 파일(210)은 서로 데이터를 주고받을 수 있다. 일 실시예에서, 정수 레지스터 파일(208)은 두 개의 별도의 레지스터 파일, 즉, 하위의 32비트 데이터를 위한 제 1 레지스터 파일, 상위의 32비트 데이터를 위한 제 2 레지스터 파일로 분할될 수 있다. 부동 소수점 레지스터 파일(210)은 부동 소수점 명령어가 전형적으로 64에서 128비트 폭의 피연산자를 갖기 때문에 128-비트 폭의 엔트리를 포함할 수 있다.
실행 블록(211)은 실행 유닛(212, 214, 216, 218, 220, 222, 224)을 포함할 수 있다. 실행 유닛(212, 214, 216, 218, 220, 222, 224)은 명령어를 실행할 수 있다. 실행 블록(211)은 마이크로-명령어가 실행을 위해 필요로 하는 정수 및 부동 소수점 데이터 피연산자 값을 저장하는 레지스터 파일(208, 210)을 포함할 수 있다. 일 실시예에서, 프로세서(200)는 많은 실행 유닛, 즉, 어드레스 생성 유닛(AGU)(212), AGU(214), 고속 ALU(216), 고속 ALU(218), 저속 ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)을 포함할 수 있다. 다른 실시예에서, 부동 소수점 실행 블록(222, 224)은 부동 소수점, MMX, SIMD 및 SSE, 또는 다른 연산을 실행할 수 있다. 또 다른 실시예에서, 부동 소수점 ALU(222)는 나누기, 제곱근, 나머지(remainder) 마이크로-연산을 수행하는 64-비트 x 64-비트 부동 소수점 디바이더를 포함할 수 있다. 다양한 실시예에서, 부동 소수점 값을 포함하는 명령어는 부동 소수점 하드웨어에 의해 처리될 수 있다. 일 실시예에서, ALU 연산은 고속 ALU 실행 유닛(216, 218)으로 넘겨질 수 있다. 고속 ALU(216, 218)는 효과적인 1/2 클록 사이클의 지연(latency)을 갖는 고속 연산을 실행할 수 있다. 일 실시예에서, 대부분의 복합 정수 연산(complex integer operation)은 저속 ALU(220)로 제공되는데, 이것은 저속 ALU(220)가 곱셈, 시프트(shifts), 플래그 로직 및 분기(branch) 프로세싱과 같은 오랜 지연 형태의 연산을 위한 정수 실행 하드웨어를 포함할 수 있기 때문이다. 메모리 로드/스토어 연산(memory load/store operation)은 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)는 부모 로드가 실행을 마치기 전에 종속 연산을 디스패치할 수 있다. uop는 추측적으로 스케줄링되어 프로세서(200)에서 실행되므로, 프로세서(200)는 메모리 미스(memory miss)를 처리할 로직을 포함할 수도 있다. 만일 데이터 로드가 데이터 캐시 내에서 미스이면, 스케줄러를 일시적으로 부정확한 데이터와 함께 남겨놓은, 파이프라인 내에 진행중인 종속 연산이 있을 수 있다. 재연(replay) 메커니즘은 부정확한 데이터를 사용하는 명령어를 추적하고 재실행한다. 오직 종속 연산만이 재연되고 독립 연산은 완료되는 것이 허용될 수 있다. 프로세서의 일 실시예에 따른 스케줄러와 재연 메커니즘은 문자열 비교 연산을 위한 명령어 시퀀스를 포착하도록 설계될 수도 있다.
용어 "레지스터"는 피연산자를 식별하기 위한 명령어의 일부로서 사용되는 온-보드(on-board) 프로세서 저장소 위치를 지칭할 수 있다. 즉, 레지스터는 (프로그래머의 관점으로부터) 프로세서의 외부로부터 사용 가능한 것들일 수 있다. 그러나 몇몇 실시예에서, 레지스터는 특정 타입의 회로로 제한되지 않는다. 오히려, 레지스터는 데이터를 저장하고, 데이터를 제공하며, 본 명세서에서 기술되는 함수를 수행할 수 있다. 본 명세서에서 기술되는 레지스터는 전용의 물리 레지스터, 레지스터 리네이밍을 사용하여 동적으로 할당된 물리 레지스터, 전용 및 동적으로 할당된 물리 레지스터의 조합 등과 같은 어떠한 종류의 상이한 기술을 사용하여 프로세스 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터는 32-비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 패킹된 데이터를 위한 8개의 멀티미디어 SIMD 레지스터를 포함할 수도 있다. 이하 논의를 위하여, 레지스터는 캘리포니아 산타클라라 소재의 인텔사로부터의 MMX 기술에 의해 가능한 마이크로프로세서 내의 (어떤 예에서는 'mm' 레지스터로 지칭되기도 하는) 64-비트 폭의 MMX™ 레지스터와 같은, 패킹된 데이터를 유지하도록 설계되는 데이터 레지스터일 수 있다. 정수 및 부동 소수점 포인트 형태로 가용한 이들 MMX 레지스터는 SIMD 및 SSE 명령어를 수반하는 패킹된 데이터 요소와 함께 작동할 수 있다. 유사하게, SSE2, SSE3, SSE4, 또는 (일반적으로 "SSEx"로 지칭되는) 능가하는 기술과 관련되는 8-비트 폭의 XMM 레지스터는 그러한 패킹된 데이터 피연산자를 유지할 수 있다. 일 실시예에서, 패킹된 데이터와 정수 데이터를 저장할 때는 레지스터를 두 데이터 타입 간에 구별할 필요가 없다. 일 실시예에서, 정수와 부동 소수점은 동일한 레지스터 파일 또는 상이한 레지스터 파일 내에 포함될 수 있다. 또한, 일 실시예에서, 부동 소수점과 정수 데이터는 상이한 레지스터 또는 동일한 레지스터에 저장될 수 있다.
다음 도면의 예에서, 많은 데이터 피연산자가 기술될 수 있다. 도 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 기술에 관련되는 패킹된 데이터 시퀀스에서, XMM 레지스터에 저장되는 데이터 요소의 수는 각 데이터 요소의 비트의 길이로 나누어지는 128비트일 수 있다. 유사하게 MMX와 SSE 기술 관련되는 패킹된 데이터 시퀀스에서, MMX 레지스터에 저장되는 데이터 요소의 수는 각 데이터 요소의 비트의 길이로 나누어지는 64비트일 수 있다. 비록 도 3a에 도시되는 데이터 타입은 128비트 길이지만, 본 개시의 실시예는 64-비트 폭이나 다른 크기의 피연산자로 연산될 수 있다. 이러한 예의 패킹된 데이터 포맷(320)은 128비트 길이이고, 8개의 패킹된 워드 데이터 요소를 포함할 수 있다. 각 패킹된 워드는 16비트의 정보를 포함할 수 있다. 도 3a의 패킹된 더블워드 포맷(330)은 128비트 길이이고, 4개의 패킹된 더블워드 데이터 요소를 유지할 수 있다. 각 패킹된 더블워드 요소는 32비트의 정보를 포함할 수 있다. 패킹된 쿼드워드는 128비트 길이이고, 2개의 패킹된 쿼드워드 데이터 요소를 유지할 수 있다.
도 3b는 본 개시의 실시예에 따른, 가능한 인-레지스터(in-register) 데이터 저장소 포맷을 예시한다. 각 패킹된 데이터는 하나 이상의 독립 데이터 요소를 포함할 수 있다. 3개의 패킹된 데이터 포맷, 패킹된 하프(packed half)(341), 패킹된 싱글(packed single)(342), 및 패킹된 더블(packed double)(343)이 도시된다. 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 요소를 유지한다. 하나 이상의 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343)의 다른 실시예는 부동 소수점 데이터 요소를 유지할 수 있다. 패킹된 하프(341)의 일 실시예는 8개의 16-비트 데이터 요소를 포함하는 128비트 길이일 수 있다. 패킹된 싱글(342)의 일 실시예는 4개의 32-비트 데이터 요소를 포함하는 128비트 길이일 수 있다. 패킹된 더블(343)의 일 실시예는 2개의 64-비트 데이터 요소를 포함하는 128비트 길이일 수 있다. 이와 같은 패킹된 데이터 포맷은 다른 레지스터 길이, 예를 들면, 96-비트, 160-비트, 192-비트, 224-비트, 256-비트 또는 그 이상으로 더 연장될 수 있다는 것이 이해될 것이다.
도 3c는 본 개시의 실시예에 따른, 멀티미디어 레지스터 내의 다양한 부호(signed) 및 무부호(unsigned) 패킹된 데이터 타입 표현을 예시한다. 무부호 패킹된 바이트 표현(344)은 SIMD 레지스터 내의 무부호 패킹된 바이트의 저장소를 표현한다. 각 바이트 데이터 요소에 대한 정보는 바이트 0은 비트 7 내지 비트 0 내에, 바이트 1은 비트 15 내지 비트 8 내에, 바이트 2는 비트 23 내지 비트 16 내에, 그리고 마지막으로 바이트 15는 비트 120 내지 비트 127 내에 저장될 수 있다. 따라서, 모든 가용한 비트는 레지스터 내에서 사용될 수 있다. 이러한 저장소 배치는 프로세서의 저장 효율을 증대시킨다. 또한, 16개 데이터 요소가 액세스됨으로써, 이제 하나의 연산은 16개 데이터 요소에 대하여 병렬로 수행될 수 있다. 부호 패킹된 바이트 표현(345)은 부호 패킹된 바이트의 저장소를 예시한다. 각 바이트 데이터 요소의 8번째 비트는 부호 지시자(sign indicator)일 수 있다는 것을 주목하자. 무부호 패킹된 워드 표현(346)은 워드 7 내지 워드 0가 어떻게 SIMD 레지스터 내에 저장되는지를 보여준다. 부호 패킹된 워드 표현(347)은 무부호 패킹된 워드 인-레지스터 표현(346)과 유사할 수 있다. 각 워드 데이터 요소의 16번째 비트는 부호 지시자일 수 있다는 것을 주목하자. 무부호 패킹된 더블워드 표현(348)은 더블워드 데이터 요소가 어떻게 저장되는지를 보여준다. 부호 패킹된 더블워드 표현(349)은 무부호 패킹된 더블워드 인-레지스터 표현(348)과 유사할 수 있다. 필요한 부호 비트는 각 더블워드 데이터 요소의 32번째 비트일 수 있다는 주목하자.
도 3d는 연산 인코딩(연산 코드)의 일 실시예를 예시한다. 또한, 포맷(360)은 intel.com/design/litcentr의 월드-와이드-웹(www) 상의 캘리포니아, 산타클라라 소재의 인텔사로부터 가용한, "IA-32 인텔 아키텍처 소프트웨어 개발자 매뉴얼 볼륨2(Intel Architecture Software Developer's Manual Volume 2): 명령어 집합 레퍼런스(Instruction Set Reference)"에 기술된 연산 코드 포맷의 타입에 대응하는 레지스터/메모리 피연산자 어드레싱 모드를 포함할 수 있다. 일 실시예에서, 명령어는 하나 이상의 필드(361, 362)에 의해 인코딩될 수 있다. 최대 두 개의 소스 피연산자 식별자(364, 365)를 비롯하여, 명령어 당 최대 두 개의 피연산자 위치가 식별될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일할 수 있으며, 반면에 다른 실시예에서 이들은 상이할 수 있다. 다른 실시예에서, 목적지 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일할 수 있으며, 반면에 다른 실시예에서 이들은 상이할 수 있다. 일 실시예에서, 소스 피연산자 식별자(364 및 365)에 의해 식별되는 소스 피연산자 중의 하나는 문자열 비교 연산의 결과에 의해 겹쳐서 기록될 수 있는 반면에, 다른 실시예에서 식별자(364)는 소스 레지스터 요소에 대응하며, 식별자(365)는 목적지 레지스터 요소에 대응할 수 있다. 일 실시예에서, 피연산자 식별자(364 및 365)는 32-비트 또는 64-비트 소스 및 목적지 피연산자를 식별할 수 있다.
도 3e는 본 개시의 실시예에 따른, 40비트 이상을 갖는 다른 가능한 연산 인코딩(연산 코드) 포맷(370)을 예시한다. 연산 코드 포맷(370)은 연산 코드 포맷(360)과 일치하며, 선택적 프리픽스 바이트(prefix byte)(378)를 포함한다. 일 실시예에 따른 명령어는 하나 이상의 필드(378, 371, 및 372)에 의해 인코딩될 수 있다. 명령어 당 최대 두 개의 피연산자 위치가 소스 피연산자 식별자(374 및 375)에 의해 그리고 프리픽스 바이트(378)에 의해 식별될 수 있다. 일 실시예에서, 프리픽스 바이트(378)는 32-비트 또는 64-비트 소스 및 목적지 피연산자를 식별하도록 사용될 수 있다. 일 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일할 수 있으며, 반면에 다른 실시예에서 이들은 상이할 수 있다. 다른 실시예에서, 목적지 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일할 수 있으며, 반면에 다른 실시예에서 이들은 상이할 수 있다. 일 실시예에서, 명령어는 피연산자 식별자(374 및 375)에 의해 식별되는 하나 이상의 피연산자를 연산하고, 피연산자 식별자(374 및 375)에 의해 식별되는 하나 이상의 피연산자는 명령어의 결과에 의해 겹쳐서 기록될 수 있는 반면에, 다른 실시예에서 식별자(374 및 375)에 의해 식별되는 피연산자는 다른 레지스터 내의 다른 데이터 요소에 기록될 수 있다. 연산 코드 포맷(360 및 370)은 MOD 필드(363 및 373)에 의해 그리고 광학적 스케일-인덱스-베이스 및 변위(displacement) 바이트에 의해 부분적으로 명시되는, 레지스터 투 레지스터(register to register), 메모리 투 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 이미디어트(register by immediate), 레지스터 투 메모리 어드레싱(register to memory addressing)을 허용한다.
도 3f는 본 개시의 실시예에 따른, 또 다른 가능한 연산 인코딩(연산 코드) 포맷을 보여준다. 64-비트 단일 명령어 다중 데이터(SIMD) 산술 연산은 코프로세서 데이터 프로세싱(coprocessor data processing, CDP) 명령어를 통해 수행될 수 있다. 연산 인코딩(연산 코드) 포맷(380)은 CDP 연산코드 필드(382 및 389)를 갖는 CDP 명령어를 도시한다. 다른 실시예의 CDP 명령어의 타입에 대해, 연산은 하나 이상의 필드(383, 384, 387, 및 388)에 의해 인코딩될 수 있다. 최대 두 개의 소스 피연산자 식별자(385, 390) 및 하나의 목적지 피연산자 식별자(386)를 포함하여, 명령어 당 최대 세 개의 피연산자 위치가 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32 및 64-비트 값에 대해 연산할 수 있다. 일 실시예에서, 명령어는 정수 데이터 요소에 대해 수행될 수 있다. 일부 실시예에서, 명령어는 조건 필드(381)를 사용하여 조건에 의해 실행될 수 있다. 일부 실시예에 대해서, 소스 데이터 크기는 필드(383)에 의해 인코딩될 수 있다. 일부 실시예에서, 영(Z), 음(negative)(N), 캐리(C), 및 오버플로우(V) 탐지는 SIMD 필드에 행해질 수 있다. 어떤 명령어에 대해서, 포화(saturation)의 타입은 필드(384)에 의해 인코딩될 수 있다.
도 4a는 본 개시의 실시예에 따른, 순차적 파이프라인(in-order pipeline) 및 레지스타 리네이밍 스테이지(register renaming stage), 비순차적 발행(out-of-order issue)/실행 파이프라인(execution pipeline)을 예시하는 블록도이다. 도 4b는 본 개시의 실시예에 따른, 프로세서 내에 포함되는 순차적 아키텍처 코어 및 레지스터 리네이밍 로직, 비순차적 발행/실행 로직을 예시하는 블록도이다. 도 4a의 실선 박스는 순차적 파이프라인을 예시하며, 점선 박스는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인을 예시한다. 유사하게, 도 4b의 실선 박스는 순차적 아키텍처 로직을 예시하며, 점선 박스는 레지스터 리네이밍 로직과 비순차적 발행/실행 로직을 예시한다.
도 4a에서, 프로세서 파이프라인(400)은 페치 스테이지(402), 길이 디코딩 스테이지(404), 디코딩 스테이지(406), 할당 스테이지(408), 리네이밍 스테이지(410), (디스패치 또는 발행으로도 알려진) 스케줄링 스테이지(412), 레지스터 읽기/메모리 읽기 스테이지(414), 실행 스테이지(416), 라이트백(write-back)/메모리-쓰기 스테이지(418), 예외처리 스테이지(422), 및 커밋(commit) 스테이지(424)를 포함할 수 있다.
도 4b에서, 화살표는 둘 이상의 유닛 간의 연결을 표시하며, 화살표의 방향은 이들 유닛 간의 데이터 흐름의 방향을 지시한다. 도 4b는 실행 엔진 유닛(450)에 연결되는 프론트 엔드 유닛(430)을 포함하는 프로세서 코어(490)를 도시하며, 둘 다 메모리 유닛(470)에 연결될 수 있다.
코어(490)는 축소된 명령어 집합 컴퓨팅(RISC) 코어, 복합 명령어 집합 컴퓨텅(CISC) 코어, 매우 긴 명령어 워드(VLIW) 코어, 또는 하이브리드나 대안의 코어 타입일 수 있다. 일 실시예에서, 코어(490)는, 예를 들면, 네트워크나 통신 코어, 압축 엔진, 그래픽 코어, 또는 그 유사한 것 같은, 특수 목적의 코어를 포함할 수 있다.
프론트 엔드 유닛(430)은 명령어 캐시 유닛(434)에 연결되는 분기 예측 유닛(432)을 포함할 수 있다. 명령어 캐시 유닛(434)은 명령어 변환 룩어사이드 버퍼(instruction translation lookaside buffer, TLB)(436)에 연결될 수 있다. TLB(436)는 디코딩 유닛(440)에 연결되는 명령어 페치 유닛(438)에 연결될 수 있다. 디코딩 유닛(440)은 명령어를 디코딩하고, 출력으로서 하나 이상의 마이크로-연산, 마이크로-코드 엔트리 포인트, 마이크로명령어, 다른 명령어, 또는 본래의 명령어로부터 디코딩되거나, 그렇지 않으면 반영되거나, 또는 도출되는 다른 제어 신호를 생성할 수 있다. 디코더는 다양한 상이한 메커니즘을 사용하여 구현될 수 있다. 적합한 메커니즘의 예는, 룩업 테이블, 하드웨어 구현, 프로그래머블 로직 어레이(PLA), 마이크로코드 읽기전용 메모리(ROM) 등을 포함하지만, 이것으로 제한되는 것은 아니다. 일 실시예에서, 명령어 캐시 유닛(434)은 메모리 유닛(470) 내의 레벨 2(L2) 캐시 유닛(476)에도 또한 연결될 수 있다. 디코딩 유닛(440)은 실행 엔진 유닛(450) 내의 리네임/할당자 유닛(452)에 연결될 수 있다.
실행 엔진 유닛(450)은 리타이어먼트 유닛(retirement unit)(454) 및 하나 이상의 스케줄러 유닛 집합(456)에 연결되는 리네임/할당자 유닛(452)을 포함할 수 있다. 스케줄러 유닛(456)은 예약 스테이션, 중앙 명령어 윈도우 등을 포함하는 많은 서로 다른 스케줄러를 나타낸다. 스케줄러 유닛(456)은 레지스터 파일 유닛(458)에 연결될 수 있다. 각 물리적 레지스터 파일 유닛(458)은 하나 이상의 물리적 레지스터 파일을 포함하며, 이들 중 서로 다른 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점 등, 상태(예를 들면, 실행될 다음 명령어의 어드레스인, 명령어 포인터) 등과 같은 하나 이상의 서로 다른 데이터 타입을 포함한다. 물리적 레지스터 파일 유닛(458)은 레지스터 리네이밍 및 비순차적 실행이 (예를 들면, 하나 이상의 재정렬 버퍼 및 하나 이상의 리타이어먼트 레지스터 파일을 사용하여, 하나 이상의 미래 파일, 하나 이상의 히스토리 버퍼, 및 하나 이상의 리타이어먼트 레지스터 파일을 사용하여, 그리고 레지스터 맵 및 레지스터 풀(pool) 등을 사용하여) 구현되는 다양한 방식을 보여주기 위해 리타이어먼트 유닛(154)과 겹쳐져 있다. 일반적으로, 아키텍처 레지스터는 프로세서의 외부 또는 프로그래머의 시각에서 가시적일 수 있다. 레지스터는 임의의 공지된 특정 타입의 회로로 제한되지 않는다. 다양한 상이한 타입의 레지스터는 본 명세서에서 설명되는 것처럼 이들 레지스터가 데이터를 저장하고 제공하는 한 적합할 수 있다. 적합한 레지스터의 예는, 이것으로 제한되는 것은 아니지만, 전용의 물리 레지스터, 레지스터 리네이밍을 사용하는 동적 할당 물리 레지스터 등을 포함할 수 있다. 리타이어먼트 유닛(454) 및 물리적 레지스터 파일 유닛(458)은 실행 클러스터(460)에 연결될 수 있다. 실행 클러스터(460)는 하나 이상의 실행 유닛(162)의 집합과 하나 이상의 메모리 액세스 유닛(464)의 집합을 포함할 수 있다. 실행 유닛(462)은 다양한 타입의 데이터(예를 들면, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산(예를 들면, 시프트, 더하기, 빼기, 곱하기)을 수행할 수 있다. 일부 실시예는 특정 함수나 함수 집합에 전용되는 많은 실행 유닛을 포함할 수 있는 반면에, 다른 실시예는 오직 하나의 실행 유닛이나 전체가 전체 함수를 수행하는 다중 실행 유닛을 포함할 수 있다. 스케줄러 유닛(456), 물리적 레지스터 파일 유닛(458), 및 실행 클러스터(460)는 복수로 표시될 수 있는데, 이것은 특정 실시예는 특정 타입의 데이터/연산에 대하여 별도의 파이프라인(예를 들면, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인이 있고, 이들은 각자가 자신의 스케줄러 유닛, 물리적 레지스터 파일 유닛, 및/또는 실행 클러스터를 가짐 - 그리고, 별도의 메모리 액세스 파이프라인의 경우, 특정 실시예는 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(464)을 갖도록 구현될 수 있음)을 생성하기 때문이다. 별도의 파이프라인이 사용되면, 이들 중 하나 이상의 파이프라인은 비순차적 발행/실행일 수 있으며, 나머지는 순차적일 수 있다는 것을 또한 이해하여야 한다.
메모리 액세스 유닛(464)의 집합은 메모리 유닛(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 테크놀로지의 MIPS 명령어 집합; 서니베일 소재의 ARM 홀딩스의 (NEON과 같은 선택적인 추가 익스텐션을 갖는) 명령어 집합)을 지원할 수 있다.
코어는 다양한 방식으로 (연산이나 스레드의 두 개 이상의 병렬 집합을 실행하는) 멀티스레딩을 지원할 수 있다는 것을 이해하여야 한다. 멀티스레딩 지원은, 예를 들면, 시간 분할된 멀티스레딩(time sliced multithreading), (단일 물리 코어는, 물리 코어가 병렬로 멀티스레딩하는 각 스레드에 대하여, 논리 코어를 제공하는) 동시 멀티스레딩, 또는 그들의 조합을 포함함으로써, 수행될 수 있다. 이러한 조합은, 예를 들면, 시간 분할된 페칭(time sliced fetching) 및 디코딩, 그리고, 그 이후에 Intel® 하이퍼스레딩 기술에서와 같은 동시적 멀티스레딩을 포함할 수 있다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 기술되지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수 있다는 것을 이해하여야 한다. 설명되는 프로세서의 실시예는 별도의 명령어 및 데이터 캐시 유닛(434/474) 및 공유 L2 캐시 유닛(476)을 포함하는 한편, 다른 실시예는 명령어 및 데이터에 대하여, 예를 들면, 레벨 1(L1) 내부 캐시, 또는 복합 레벨의 내부 캐시와 같은 단일 내부 캐시를 가질 수 있다. 일부 실시예에서, 시스템은 내부 캐시와, 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 다른 실시예에서, 모든 캐시는 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 5a는 본 개시의 실시예에 따른, 프로세서(500)의 블록도이다. 일 실시예에서, 프로세서(500)는 멀티코어 프로세서를 포함할 수 있다. 프로세서(500)는 하나 이상의 코어(502)에 통신으로 연결되는 시스템 에이전트(510)를 포함할 수 있다. 또한 코어(502) 및 시스템 에이전트(510)는 하나 이상의 캐시(506)에 통신으로 연결될 수 있다. 코어(502), 시스템 에이전트(510), 및 캐시(506)는 하나 이상의 메모리 제어 유닛(552)을 통해 통신으로 연결될 수 있다. 또한 코어(502), 시스템 에이전트(510), 및 캐시(506)는 메모리 제어 유닛(552)을 통해 그래픽 모듈(560)에 통신으로 연결될 수 있다.
프로세서(500)는 코어(502), 시스템 에이전트(510), 및 캐시(506)와 그래픽 모듈(560)을 상호연결하는 임의의 적합한 메커니즘을 포함할 수 있다. 일 실시예에서, 프로세서(500)는 코어(502), 시스템 에이전트(510), 및 캐시(506)와 그래픽 모듈(560)을 상호 연결하는 링-기반의 인터커넥트 유닛(508)을 포함할 수 있다. 다른 실시예에서, 프로세서(500)는 그러한 유닛을 상호 연결하는 많은 잘-알려진 기술을 포함할 수 있다. 링-기반의 인터커넥트 유닛(508)은 상호연결을 용이하게 하는 메모리 제어 유닛(552)을 활용할 수 있다.
프로세서(500)는 코어 내에 하나 이상의 레벨의 캐시, 캐시(506)와 같은 하나 이상의 공유 캐시 유닛, 또는 통합 메모리 제어 유닛(552)의 집합에 연결되는 외부 메모리(도시되지 않음)를 포함하는 메모리 계층(hierarchy)을 포함할 수 있다. 캐시(506)는 어떠한 적합한 캐시도 포함할 수 있다. 일 실시예에서, 캐시(506)는, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 레벨의 캐시와 같은 하나 이상의 중간-레벨 캐시, 최종 레벨 캐시(last level cache, LLC), 및/또는 이들의 조합을 포함할 수 있다.
다양한 실시예에서, 하나 이상의 코어(502)는 멀티스레딩을 수행할 수 있다. 시스템 에이전트(510)는 코어(502)를 조율하고 작동하는 컴포넌트를 포함할 수 있다. 시스템 에이전트 유닛(510)은 예를 들면 전력 제어 유닛(power control unit, PCU)을 포함할 수 있다. PCU는 코어(502)의 전력 상태를 통제하는 데 필요한 로직 및 컴포넌트일 수 있거나, 또는 이를 포함할 수 있다. 시스템 에이전트(510)는 하나 이상의 외부로 연결된 디스플레이 또는 그래픽 모듈(560)을 추출하는 디스플레이 엔진(512)일 수 있다. 시스템 에이전트(510)는 그래픽용 통신 버스를 위한 인터페이스(1214)일 수 있다. 일 실시예에서, 인터페이스(1214)는 PCI 익스프레스(PCI Express, PCIe)에 의해 구현될 수 있다. 다른 실시예에서, 인터페이스(1214)는 PCI 익스프레스 그래픽(PCI Express Graphics, PEG)에 의해 구현될 수 있다. 시스템 에이전트(510)는 다이렉트 미디어 인터페이스(direct media interface, DMI)(516)를 포함할 수 있다. DMI(516)는 컴퓨터 시스템의 마더보드 또는 다른 부분의 브리지 사이에 링크를 제공할 수 있다. 시스템 에이전트(510)는 컴퓨팅 시스템의 다른 구성요소에 PCIe 링크를 제공하는 PCIe 브리지(1218)를 포함할 수 있다. PCIe 브리지(1218)는 메모리 제어기(1220) 및 일관성 로직(1222)을 사용하여 구현될 수 있다.
코어(502)는 적합한 어느 방식으로도 구현될 수 있다. 코어(502)는 아키텍처 및/또는 명령어 집합의 맥락에서 동질적이거나 이질적일 수 있다. 일 실시예에서, 어떤 코어(502)는 순차적일 수 있는 반면 다른 것들은 비순차적일 수 있다. 다른 실시예에서, 둘 이상의 코어(502)는 동일한 명령어 집합을 실행하는 반면, 다른 것들은 명령어의 부분 집합만을 또는 상이한 명령어 집합을 실행할 수 있다.
프로세서(500)는 캘리포니아 산타클라라 소재의 인텔사로부터 구입 가능할 수 있는, Core™, i3, i5, i7, 2 Duo and Quad, Xeon™, Itanium™, XScale™ 또는 StrongARM™ 프로세서와 같은 범용 프로세서를 포함할 수 있다. 프로세서(500)는 ARM 홀딩스, MIPS, 등과 같은 다른 회사로부터 제공될 수 있다. 프로세서(500)는, 예를 들면, 네트워크나 통신 프로세서, 압축 엔진, 그래픽 프로세서, 코-프로세서, 임베디드 프로세서, 또는 그 유사한 것 같은 특수 목적의 프로세서 일수 있다. 프로세서(500)는 하나 이상의 칩에 구현될 수 있다. 프로세서(500)는, 예를 들면, BiCMOS, CMOS, 또는 NMOS와 같은 많은 프로세서 기술 중의 어느 것을 사용하여 하나 이상의 서브스트레이트(substrate) 상에 구현될 수 있다.
일 실시예에서, 캐시(506) 중의 특정한 캐시가 다중 코어(502)에 의해 공유될 수 있다. 다른 실시예에서, 캐시(506) 중의 특정한 캐시는 하나의 코어(502)에 지정될 수 있다. 캐시(506)를 코어(502)로 지정하는 것은 캐시 제어기 또는 다른 적합한 메커니즘에 의해 처리될 수 있다. 캐시(506) 중의 특정한 캐시는 특정한 캐시(506)의 시간 분할을 구현함으로써 하나 이상의 코어(502)에 의해 공유될 수 있다.
그래픽 모듈(560)은 통합 그래픽 프로세싱 서브시스템을 구현할 수 있다. 일 실시예에서, 그래픽 모듈(560)은 그래픽 프로세서를 포함할 수 있다. 또한, 그래픽 모듈(560)은 미디어 엔진(565)을 포함할 수 있다. 미디어 엔진(565)은 미디어 인코딩 및 비디오 디코딩을 제공할 수 있다.
도 5b는 본 개시의 실시예에 따른, 코어(502)의 예시적인 구현의 블록도이다. 코어(502)는 비순차적 엔진(580)에 통신으로 연결되는 프론트 엔드(570)를 포함할 수 있다. 코어(502)는 캐시 계층(503)을 통해 프로세서(500)의 다른 부분에 통신으로 연결될 수 있다.
프론트 엔드(570)는, 앞에서 설명된 것처럼 프론트 엔드(201)에 의해 전적으로 또는 부분적으로, 적합한 어느 방식으로도 구현될 수 있다. 일 실시예에서, 프론트 엔드(570)는 캐시 계층(503)을 통해 프로세서(500)의 다른 부분에 통신으로 연결될 수 있다. 다른 실시예에서, 프론트 엔드(570)는 프로세서(500)의 부분으로부터 명령어를 페치하고, 이들 명령어가 비순차적 실행 엔진(580)으로 넘겨질 때, 프로세서 파이프라인에서 나중에 사용될 명령어를 준비할 수 있다.
비순차적 실행 엔진(580)은, 앞에서 설명된 것처럼, 비순차적 실행 엔진(203)에 의해 전적으로 또는 부분적으로, 적합한 어느 방식으로도 구현될 수 있다. 비순차적 실행 엔진(580)은 실행을 위해 프론트 엔드(570)로부터 수신하는 명령어를 준비할 수 있다. 비순차적 실행 엔진(580)은 할당 모듈(1282)을 포함할 수 있다. 일 실시예에서, 할당 모듈(1282)은 특정의 명령어를 실행하기 위하여, 프로세서(500)의 자원이나, 레지스터나 버퍼 같은, 다른 자원을 할당할 수 있다. 할당 모듈(1282)은 메모리 스케줄러, 고속 스케줄러, 또는 부동 소수점 스케줄러와 같은 스케줄러에 할당할 수 있다. 이와 같은 스케줄러는 도 5b에서 자원 스케줄러(584)로 표현될 수 있다. 할당 모듈(1282)은 도 2와 관련하여 설명되는 할당 로직에 의해 전적으로 또는 부분적으로도 구현될 수 있다. 자원 스케줄러(584)는 특정 자원의 소스의 준비상태와 명령어를 실행하기 위해 필요한 실행 자원들의 가용성에 기초하여, 명령어가 실행될 준비가 되는 시점을 결정한다. 자원 스케줄러(584)는, 예를 들면, 위에서 논의한 것처럼, 스케줄러(202, 204, 206)에 의해 구현될 수 있다. 자원 스케줄러(584)는 하나 이상의 자원에 대하여 명령어의 실행을 스케줄링할 수 있다. 일 실시예에서, 그러한 자원은 코어(502)의 내부에 있을 수 있는데, 예를 들면, 자원(586)으로 도시될 수 있다. 다른 실시예에서, 그러한 자원은 코어(502)의 외부에 있을 수 있는데, 예를 들면, 캐시 계층(503)에 의해 액세스될 수 있다. 자원은, 예를 들면, 메모리, 캐시, 레지스터 파일, 또는 레지스터를 포함할 수 있다. 코어(502)의 내부의 자원은 도 5b의 자원(586)으로 표현될 수 있다. 필요 시, 자원(586)에 기록되거나 읽혀지는 값은, 예를 들면, 캐시 계층(503)을 통해 프로세서(500)의 다른 부분과 조율될 수 있다. 명령어에 자원이 할당됨에 따라, 이들 명령어는 재정렬 버퍼(588)에 배치될 수 있다. 재정렬 버퍼(588)는 명령어가 실행될 때 명령어를 추적할 수 있고 프로세서(500)의 적당한 기준에 기초하여 명령어의 실행을 선별적으로 재정렬할 수 있다. 일 실시예에서, 재정렬 버퍼(588)는 명령어 또는 독립적으로 실행될 일련의 명령어를 식별할 수 있다. 이러한 명령어 또는 일련의 명령어는 다른 그러한 명령어로부터 병렬로 실행될 수 있다. 코어(502)의 병렬 실행은 적합한 수의 별도의 실행 블록 또는 가상의 프로세서에 의해 수행될 수 있다. 일 실시예에서, 메모리, 레지스터, 및 캐시 같은 공유 자원은 소정의 코어(502) 내의 복수의 가상 프로세서에 액세스할 수 있다. 다른 실시예에서, 공유 자원은 프로세서(500) 내의 복수의 프로세싱 엔티티에 액세스할 수 있다.
캐시 계층(503)은 적합한 어느 방식으로도 구현될 수 있다. 예를 들면, 캐시 계층(503)은 캐시(572, 573) 같은 하나 이상의 하위 또는 중간-레벨 캐시를 포함할 수 있다. 일 실시예에서, 캐시 계층(503)은 캐시(572, 574)에 통신으로 연결되는 LLC(595)를 포함할 수 있다. 다른 실시예에서, LLC(595)는 프로세서(500)의 모든 프로세싱 엔티티에 액세스 가능한 모듈(590)에서 구현될 수 있다. 다른 예에서, 모듈(590)은 인텔사의 프로세서의 언코어(uncore) 모듈에서 구현될 수 있다. 모듈(590)은 코어(502)의 실행에 필요한 프로세서(500)의 부분이나 서브시스템을 포함할 수 있지만, 코어(502) 내에 구현되지 않을 수 있다. LLC(595) 이외에, 모듈(590)은, 예를 들면, 하드웨어 인터페이스, 메모리 일관성 조정기(memory coherency coordinator), 인터프로세서 인터커넥트, 명령어 파이프라인, 또는 메모리 할당자를 포함할 수 있다. 프로세서(500)에 가용한 RAM(599)으로의 액세스는 모듈(590) 그리고, 좀 더 상세하게는, LLC(595)를 통해 수행될 수 있다. 더욱이, 코어(502)의 다른 인스턴스는 유사하게 모듈(590)에 액세스 할 수 있다. 코어(502)의 인스턴스의 조율은 모듈(590)을 통해 부분적으로 용이해질 수 있다.
도 6 내지 도 8은 프로세서(500)를 포함하는 적합한 일 실시예의 시스템을 예시하는 한편, 도 9는 하나 이상의 코어(502)를 포함하는 일 실시예의 시스템온칩(SOC)을 예시할 수 있다. 랩톱, 데스크톱, 휴대용 PC, 개인용 디지털 보조기, 엔지니어링 워크스테이션, 서버, 네트워크 서버, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSP), 그래픽 디바이스, 비디오 게임 디바이스, 셋톱 박스, 마이크로 제어기, 셀폰, 이동식 미디어 플레이어, 휴대용 디바이스 및 다양한 다른 전자 디바이스에 대하여 당 기술분야에서 알려진 다른 시스템 디자인 및 구현도 적합할 수 있다. 일반적으로 프로세서 및/또는 본 명세서에서 개시되는 다른 실행 로직을 포함하는 매우 다양한 시스템 또는 전자 디바이스는 일반적으로 적합할 수 있다.
도 6은 본 개시의 실시예에 따른, 시스템(600)의 블록도를 예시한다. 시스템(600)은 하나 이상의 프로세서(610, 615)를 포함하고, 이들 프로세서는 그래픽 메모리 제어기 허브(GMCH)(620)에 연결될 수 있다. 추가적인 프로세서(615)의 선택적인 특성은 도 6에서 점선으로 표시된다.
각 프로세서(610, 615)는 프로세서(500)의 일부 버전일 수 있다. 그러나 통합 그래픽 로직 및 통합 메모리 제어 유닛은 프로세서(610, 615) 내에 존재하지 않을 수 있다는 것을 주지해야 한다. 도 6은 GMCH(620)가, 예를 들면, 동적 랜덤 액세스 메모리(DRAM)일 수 있는 메모리(640)에 연결될 수 있다. 적어도 하나의 실시예에서, DRAM은 비-휘발성 캐시와 연관될 수 있다.
GMCH(620)는 칩셋 또는 칩셋의 일부일 수 있다. GMCH(620)는 프로세서(610, 615)와 통신하고 프로세서(610, 615) 및 메모리(640) 간의 상호작용을 제어할 수 있다. GMCH(620)는 프로세서(610, 615)와 시스템(600)의 다른 구성요소 간의 가속 버스 인터페이스로서 작용할 수 있다. 일 실시예에서, GMCH(620)는 전면 버스(FSB)(695)와 같은 멀티-드롭 버스를 통해 프로세서(610, 615)와 통신할 수 있다.
또한, GMCH(620)는 (평판 디스플레이와 같은) 디스플레이(645)에 연결될 수 있다. 일 실시예에서, GMCH(620)는 통합 그래픽 가속기를 포함할 수 있다. GMCH(620)는 다양한 주변 디바이스를 시스템(600)에 연결하도록 사용되는 입출력(I/O) 제어기 허브(ICH)(650)에도 또한 연결될 수 있다. 각 그래픽 디바이스(660)는 다른 주변 디바이스(670)와 더불어 ICH(650)에 연결되는 개별 그래픽 디바이스를 포함할 수 있다.
다른 실시예에서, 추가 또는 상이한 프로세서가 시스템(600)에 존재할 수 있다. 예를 들면, 추가 프로세서(610, 615)는 프로세서(610)와 동일한 추가 프로세서, 프로세서(610)와 이질적이거나 비대칭일 수 있는 추가 프로세서, 가속기(예를 들면, 그래픽 가속기 또는 디지털 신호 처리(DSP) 유닛), 필드 프로그래머블 게이트 어레이, 또는 그 밖의 다른 프로세서를 포함할 수 있다. 아키텍처, 마이크로-아키텍처, 열적(thermal), 전력 소모 특징, 그리고 그와 유사한 것을 포함하는 다양한 장점의 다양한 측량의 맥락에서 물리적 자원(610, 615) 간의 여러 가지 차이점이 있을 수 있다. 이러한 차이는 프로세서(610, 615) 간의 비대칭성과 이질성으로 차이 자체를 효과적으로 나타낼 수 있다. 적어도 일 실시예에서, 다양한 프로세서(610, 615)가 동일한 다이 패키지에 상주할 수 있다.
도 7은 본 개시의 실시예에 따른, 제 2 시스템(700)의 블록도이다. 도 7에 도시된 것처럼, 멀티프로세서 시스템(700)은 포인트-투-포인트 인터커넥트 시스템을 포함할 수 있으며, 포인트-투-포인트 인터커넥트(750)를 통해 연결되는 제 1 프로세서(770) 및 제 2 프로세서(780)를 포함할 수 있다. 각 프로세서(770 및 780)는 하나 이상의 프로세서(610, 615) 같이 프로세서(500)의 임의의 버전일 수 있다.
도 7은 두 개의 프로세서(770, 780)를 예시하지만, 본 개시의 범위는 이것으로 제한되지 않는다는 것을 이해하여야 한다. 다른 실시예에서, 하나 이상의 추가 프로세서가 소정의 프로세서 내에 존재할 수 있다.
프로세서(770 및 780)는 각각 통합 메모리 제어기 유닛(772 및 782)을 포함하는 것으로 도시된다. 프로세서(770)는 버스 제어기 유닛의 일부로서 포인트-투-포인트(point-to-point, P-P) 인터페이스(776 및 778)를 포함할 수 있고; 유사하게, 제 2 프로세서(780)는 P-P 인터페이스(786 및 788)를 포함할 수 있다. 프로세서(770, 780)는 P-P 인터페이스 회로(778, 788)를 사용하여 포인트-투-포인트(P-P) 인터페이스(750)를 통해 정보를 교환할 수 있다. 도 7에 도시된 것처럼, IMCs(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)는 주변 소자 인터커넥터(Peripheral Component Interconnect, PCI) 버스, 또는 PCI 익스프레스 버스나 다른 3세대 I/O 인터커넥트 버스 같은 버스일 수 있으나, 본 개시의 범위는 이것으로 제한되는 것은 아니다.
도 7에 도시된 것처럼, 다양한 I/O 디바이스(714)는 제 1 버스(716)를 제 2 버스(720)에 연결하는 버스 브리지(718)와 함께, 제 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 제어 로직(control logic, "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 상의 선택적인 특징을 표현할 수 있다. 인터커넥트 유닛(902)은 하나 이상의 코어(902A-N)의 집합 및 공유 캐시 유닛(906)을 포함하는 애플리케이션 프로세서(910); 시스템 에이전트 유닛(910); 버스 제어기 유닛(916); 통합 메모리 제어기 유닛(914); 통합 그래픽 로직(908), 스틸 및/또는 비디오카메라 기능성을 제공하는 이미지 프로세서(924), 하드웨어 오디오 가속을 제공하는 오디오 프로세서(926), 그리고 비디오 인코딩/디코딩 가속을 제공하는 비디오 프로세서(928)를 포함하는 하나 이상의 멀티미디어 프로세서(920)의 집합; 정적 랜덤 액세스 메모리(SRAM) 유닛(930); 직접 메모리 액세스(DMA) 유닛(932); 하나 이상의 외부 디스플레이에 연결되는 디스플레이 유닛(940)에 연결될 수 있다.
도 10은 본 개시의 실시예에 따른, 적어도 하나의 명령어를 수행할 수 있는 중앙 처리 유닛(CPU) 및 그래픽 처리 유닛(GPU)을 포함하는 프로세서를 예시한다. 일 실시예에서, 적어도 일 실시예에 따른 연산을 수행하는 명령어는 CPU에 의해 수행될 수 있다. 다른 실시예에서, 명령어는 GPU에 의해 수행될 수 있다. 또 다른 실시예에서, 명령어는 CPU 및 GPU에 의해 수행되는 연산의 조합을 통해 수행될 수 있다. 예를 들면, 일 실시예에서, 일 실시예에 따른 명령어는 GPU 상의 실행을 위해 수신되어 디코딩될 수 있다. 그러나 디코딩된 명령어 내의 하나 이상의 연산은 CPU에 의해 수행되고 그 결과는 명령어의 최종 은퇴를 위해서 GPU로 반환될 수 있다. 그와 반대로, 일부 실시예에서, CPU는 주 프로세서로 작용하고 GPU는 코-프로세서로 작용할 수 있다.
일부 실시예에서, 고도로 병렬 처리되는 스루풋 프로세서(throughput processor)로부터 혜택을 받는 명령어는 GPU에 의해 수행될 수 있고, 반면에 상당한 파이프라인형 아키텍처로부터 혜택을 받는 프로세서의 성능으로 인해 혜택을 받는 명령어는 CPU에 의해 수행될 수 있다. 예를 들면, 그래픽, 과학 애플리케이션, 재무 애플리케이션 및 다른 병렬의 작업부하는 GPU의 성능으로부터 혜택을 받고 이에 따라서 실행될 수 있으며, 반면에 운영 체제 커널 또는 애플리케이션 코드와 같은 좀 더 순차적인 애플리케이션은 CPU에 좀 더 적합할 수 있다.
도 10에서, 프로세서(1000)는 CPU(1005), CPU(1010), 이미지 프로세서(1015), 비디오 프로세서(1020), USB 제어기(1025), UART 제어기(1030), SPI/SDIO 제어기(1035), 디스플레이 디바이스(1040), 메모리 인터페이스 제어기(1045), MIPI 제어기(1050), 플래시 메모리 제어기(1055), 듀얼 데이터 레이트(DDR) 제어기(1060), 보안 엔진(1065), 및 I2S/I2C 제어기(1070)를 포함한다. CPU 또는 GPU 및 다른 주변기기 인터페이스 제어기를 비롯한 다른 로직 및 회로가 도 10의 프로세서에 포함될 수 있다.
적어도 하나의 실시예의 하나 이상의 양태는 머신에 의해 판독될 때 머신으로 하여금 본 명세서에 설명되는 기술을 수행하는 로직을 제작하도록 유발하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독 가능한 매체에 저장되는 대표적인 데이터에 의해 구현될 수 있다. "IP 코어"로 알려진 그러한 표현은 유형의 머신 판독 가능한 매체("테이프")에 저장되어 다양한 고객이나 제조 설비에 제공되어 로직이나 프로세서를 실제로 만드는 제작 머신에 로딩될 수 있다. 예를 들면, ARM 홀딩스사에서 개발한 프로세서의 Cortex™ 패밀리와 같은 IP 코어, 그리고 중국 과학원 산하 컴퓨팅 기술 연구소에 의해 개발된 룽순 IP 코어는 많은 텍사스 인스트루먼트, 퀄컴, 애플, 또는 삼성과 같은 많은 고객이나 라이선시(licensees)에게 허가되거나 판매되어, 이들 고객이나 라이선시에 의해 제작되는 프로세서에 구현될 수 있다.
도 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)에 의해 선천적으로 실행될 수 없다는 것을 의미할 수 있다. 그러나 에뮬레이션 로직(1210)의 도움으로, 프로그램(1205)의 명령어는 프로세서(1215)에 의해 선천적으로 실행될 수 있는 명령어로 변환될 수 있다. 일 실시예에서, 에뮬레이션 로직은 하드웨어로 구현될 수 있다. 다른 실시예에서, 에뮬레이션 로직은 프로그램(1205) 타입의 명령어를 프로세서(1215)에 의해 선천적으로 실행될 수 있는 타입으로 변환하는 소프트웨어를 포함하는 유형의 머신 판독 가능한 매체에 구현될 수 있다. 다른 실시예에서, 에뮬레이션 로직은 고정-함수 또는 프로그래머블 하드웨어 및 유형의 머신 판독 가능한 매체에 저장되는 프로그램의 조합일 수 있다. 일 실시예에서, 프로세서는 에뮬레이션 로직을 포함하는 반면, 다른 실시예에서, 에뮬레이션 로직은 프로세서의 외부에 존재하며 제 3자에 의해 제공될 수 있다. 일 실시예에서, 프로세서는 프로세서에 포함되거나 연관되는 마이크로코드 또는 펌웨어를 실행하는 소프트웨어를 포함하는 유형의 머신 판독 가능한 매체에 구현되는 에뮬레이션 로직을 로드할 수 있다.
도 13은 본 개시의 실시예에 따른, 소스 명령어 집합 내의 2진 명령어를 타겟 명령어 집합 내의 2진 명령어로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도를 예시한다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안으로 명령어 변환기는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 다양한 조합으로 구현될 수 있다. 도 13은 고급 언어(1302)로 된 프로그램이 x86 컴파일러(1304)를 사용하여 컴파일되고, x86 2진 코드(1306)를 생성하여 적어도 하나의 x86 명령어 집합 코어(1316)를 갖는 프로세서에 의해 실행될 수 있다는 것을 보여준다. x86 명령어 집합 코어(1316)를 갖는 프로세서는, 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서와 상당히 동일한 결과를 수행하기 위하여, (1) 인텔 x86 명령어 집합 코어의 명령어 집합의 상당한 부분, 또는(2) 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서에서 작동하도록 의도된 애플리케이션의 오브젝트 코드 버전이나 다른 소프트웨어를, 호환 가능하게 실행하거나 프로세싱함으로써, 적어도 하나의 x86 명령어 집합 코어를 갖는 인텔 프로세서와 상당히 동일한 함수를 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1304)는 추가적인 연결 프로세싱을 가지고 또는 없이도, 적어도 하나의 x86 명령어 집합 코어(1316)를 갖는 프로세서상에 실행될 수 있는 2진 코드(1306)(예를 들면, 오브젝트 코드)를 생성하도록 작동할 수 있든 컴파일러를 나타낸다. 도 13은 고급 언어(1302)로 된 프로그램을 보여주는데, 이 프로그램은 다른 명령어 집합 컴파일러(1308)를 사용하여 컴파일되어 적어도 하나의 x86 명령어 집합 코어(1314) 없는 프로세서(예를 들면, 캘리포니아 서니베일 소재의 MIPS 테크놀로지의 MIPS 명령어 집합을 실행하는 그리고/또는 캘리포니아 서니베일 소재의 ARM 홀딩스의 ARM 명령어 집합을 실행하는, 코어를 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안의 명령어 집합 2진 코드(1310)를 생성한다.
명령어 변환기(1312)는 x86 2진 코드(1306)를 x86 명령어 집합 코어(1314) 없는 프로세서에 의해 선천적으로 실행될 수 있는 대안의 명령어 집합 2진 코드(1311)로 변환하도록 사용될 수 있다. 변환된 코드는 대안의 명령어 집합 컴파일러(1308)로부터의 결과인 대안의 명령어 집합 2진 코드(1310)와 동일하거나 동일하지 않을 수 있다; 그러나 변환된 코드는 동일한 일반적인 연산을 성취할 수 있고, 대안의 명령어 집합으로부터의 명령어로 구성될 수 있다. 따라서, 명령어 변환기(1312)는 에뮬레이션, 시뮬레이션, 또는 다른 프로세서를 통해 프로세서 또는 x86 명령어 집합 프로세서나 코어를 갖지 않는 다른 전자 디바이스가 x86 2진 코드(1306)를 실행할 수 있게 하는, 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낼 수 있다.
도 14는 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처(1400)의 블록도이다. 명령어 집합 아키텍처(1400)는 적합한 몇 개의 또는 어떤 종류의 컴포넌트라도 포함할 수 있다.
예를 들면, 명령어 집합 아키텍처(1400)는 하나 이상의 코어(1406, 1407)와 그래픽 프로세싱 유닛(1415)과 같은 프로세싱 엔티티를 포함할 수 있다. 코어(1406, 1407)는 적합한 임의의 메커니즘을 통해, 예를 들면, 버스 또는 캐시를 통해, 명령어 집합 아키텍처(1400)의 다른 부분에 통신으로 연결될 수 있다. 일 실시예에서, 코어(1406, 1407)는 L2 캐시 컨트롤(1408)을 통해 통신으로 연결되며, L2 캐시 컨트롤은 버스 인터페이스 유닛(1409) 및 L2 캐시(1410)를 포함할 수 있다. 코어(1406, 1407) 및 그래픽 프로세싱 유닛(1415)은 인터커넥트(1410)를 통해 상호 간에 그리고 명령어 집합 아키텍처(1400)의 다른 부분에 통신으로 연결될 수 있다. 일 실시예에서, 그래픽 프로세싱 유닛(1415)은 특정 비디오 신호가 인코딩되고 출력을 위해 디코딩되는 방식을 정의하는 비디오 코드(1420)를 사용할 수 있다.
명령어 집합 아키텍처(1400)는 인터페이스, 제어기, 또는 전자 디바이스나 시스템의 다른 부분과 인터페이스하거나 통신하는 다른 메커니즘을 얼마든지 어떤 종류라도 포함할 수 있다. 그러한 메커니즘은, 예를 들면, 주변기기, 통신 디바이스, 다른 프로세서, 또는 메모리와의 상호작용을 용이하게 할 수 있다. 도 14의 예에서, 명령어 집합 아키텍처(1400)는 액정 디스플레이(liquid crystal display, LCD) 비디오 인터페이스(1425), 가입자 인터페이스 모듈(subscriber interface module, SIM) 인터페이스(1430), 부트 ROM 인터페이스(1435), 동기적 동적 랜덤 액세스 메모리(SDRAM) 제어기(1440), 플래시 제어기(1445), 그리고 직렬 주변기기 인터페이스(serial peripheral interface, SPI) 마스터 유닛(1450)을 포함할 수 있다. LCD 비디오 인터페이스(1425)는, 예를 들면, GPU(1415)로부터, 또한, 예를 들면, 모바일 인더스트리 프로세서 인터페이스(mobile industry processor interface, MIPI)(1490) 또는 고화질 멀티미디어 인터페이스(high-definition multimedia interface, HDMI)(1495)를 통해, 디스플레이로 비디오 신호의 출력을 제공할 수 있다. 이와 같은 디스플레이는, 예를 들면, LCD를 포함할 수 있다. SIM 인터페이스(1430)는 SIM 카드나 디바이스로 가거나 오는 액세스를 제공할 수 있다. SDRAM 제어기(1440)는 SDRAM 칩 또는 모듈과 같은 메모리로 가거나 오는 액세스를 제공할 수 있다. 플래시 제어기(1445)는 플래시 메모리 또는 RAM의 다른 인스턴스와 같은 메모리로 가거나 오는 액세스를 제공할 수 있다. SPI 마스터 유닛(1450)은 블루투스 모듈(1470), 고속 3G 모뎀(1475), 위성 항법 시스템 모듈(1480), 또는 802.11 같은 통신 표준을 구현하는 무선 모듈(1485)과 같은, 통신 모듈로 가거나 오는 액세스를 제공할 수 있다.
도 15는 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처(1500)의 좀 더 상세한 블록도이다. 명령어 아키텍처(1500)는 명령어 집합 아키텍처(1400)의 하나 이상의 양태를 구현할 수 있다. 또한, 명령어 집합 아키텍처(1500)는 프로세서 내의 명령어의 실행을 위한 모듈 및 메커니즘을 예시할 수 있다.
명령어 아키텍처(1500)는 하나 이상의 실행 엔티티(1565)에 통신으로 연결되는 메모리 시스템(1540)을 포함할 수 있다. 또한, 명령어 아키텍처(1500)는 실행 엔티티(1565) 및 메모리 시스템(1540)에 통신으로 연결되는 유닛(1510)과 같은 캐싱 및 인터페이스 유닛을 포함할 수 있다. 일 실시예에서, 실행 엔티티(1564)로의 명령어 로딩이 하나 이상의 실행 스테이지에 의해 실행될 수 있다. 이러한 스테이지는, 예를 들면, 명령어 프리패치 스테이지(1530), 듀얼 명령어 디코딩 스테이지(1550), 레지스터 리네임 스테이지(155), 발행 스테이지(1560), 및 라이트백 스테이지(1570)를 포함할 수 있다.
다른 실시예에서, 메모리 시스템(1540)은 리타이어먼트 포인터(1582)를 포함할 수 있다. 리타이어먼트 포인터(1582)는 마지막 리타이어먼트 명령어의 프로그램 순서(program order, PO)를 식별하는 값을 저장할 수 있다. 리타이어먼트 포인터(1582)는, 예를 들면, 리타이어먼트 유닛(454)에 의해 설정될 수 있다. 만일 어느 명령어도 아직 은퇴하지 않았다면, 리타이어먼트 포인터(1582)는 널(null) 값을 포함할 수 있다.
실행 엔티티(1565)는 프로세서가 명령어를 실행하게 하는 메커니즘을 얼마든지 어떤 종류라도 포함할 수 있다. 도 15의 예에서, 실행 엔티티(1565)는 ALU/곱셈 유닛(MUL)(1566), ALU(1567), 그리고 부동 소수점 유닛(FPU)(1568)을 포함할 수 있다. 일 실시예에서, 그러한 엔티티는 소정의 어드레스(1569) 내에 포함되는 정보를 활용할 수 있다. 실행 엔티티(1565)는 스테이지(1530, 1550, 1555, 1560, 1570)와 결합하여 집합적으로 실행 유닛을 형성할 수 있다.
유닛(1510)은 적합한 어느 방식으로도 구현될 수 있다. 일 실시예에서, 유닛(1510)은 캐시 컨트롤을 수행할 수 있다. 그러한 일 실시예에서, 유닛(1510)은 캐시(1525)를 포함할 수 있다. 다른 실시예에서, 캐시(1525)는 0, 128k, 256k, 512k, 1M, 또는 2M 메모리 바이트와 같은 임의의 적합한 크기를 갖는 L2 통합 캐시(unified cache)로 구현될 수 있다. 또 다른 실시예에서, 캐시(1525)는 오류-수정 코드 메모리 내에 구현될 수 있다. 다른 실시예에서, 유닛(1510)은 프로세서 또는 전자 디바이스의 다른 부분과의 버스 인터페이싱을 수행할 수 있다. 그러한 실시예에서, 그러므로 유닛(1510)은 인터커넥트, 인트라프로세서 버스, 인터프로세서 버스, 또는 다른 통신 버스, 포트, 또는 라인을 통해 통신하는 버스 인터페이스 유닛(1520)을 포함할 수 있다. 버스 인터페이스 유닛(1520)은, 예를 들면, 실행 엔티티(1565)와 명령어 아키텍처(1500) 외부의 시스템의 부분 사이에서 데이터의 이송을 위한 메모리 및 입력/출력 어드레스의 생성을 수행하기 위해 인터페이싱을 제공할 수 있다.
그의 기능을 좀 더 용이하게 하기 위하여, 버스 인터페이스 유닛(1520)은 인터럽트 및 프로세서나 전자 디바이스의 다른 부분으로 다른 통신을 생성하는 인터럽트 제어 및 배포 유닛(1511)을 포함할 수 있다. 일 실시예에서, 버스 인터페이스 유닛(1520)은 다중 프로세싱 코어에 대한 캐시 액세스 및 일관성을 처리하는 스누프(snoop) 제어 유닛(1512)을 포함할 수 있다. 다른 실시예에서, 그러한 기능성을 제공하기 위하여, 스누프 제어 유닛(1512)은 서로 다른 캐시 간의 정보 교환을 처리하는 캐시-투-캐시 이송 유닛을 포함할 수 있다. 또 다른 실시예에서, 스누프 제어 유닛(1512)은 하나 이상의 스누프 필터(1514)를 포함할 수 있는데, 스누프 필터는 다른 캐시(도시되지 않음)의 일관성을 모니터링하여, 유닛(1510)과 같은 캐시 제어기가 그러한 모니터링을 직접 수행할 필요가 없도록 한다. 유닛(1510)은 명령어 아키텍처(1500)의 액션을 동기화하는 임의의 적합한 수의 타이머(1515)를 포함할 수 있다. 또한, 유닛(1510)은 AC 포트(1516)를 포함할 수 있다.
메모리 시스템(1540)은 명령어 아키텍처(1500)의 프로세싱 요구에 대한 정보를 저장하는 적합한 몇 개의 어떤 종류의 메커니즘도 포함할 수 있다. 일 실시예에서, 메모리 시스템(1504)은 메모리 또는 레지스터에 기록되거나 다시 읽혀지는 버퍼와 같은 정보를 저장하는 로드 스토어 유닛(1530)을 포함할 수 있다. 다른 예에서, 메모리 시스템(1504)은 물리 및 가상 어드레스 간의 어드레스 값의 룩업(look-up)을 제공하는 변환 룩어사이드 버퍼(translation lookaside buffer, TLB)(1545)를 포함할 수 있다. 또 다른 실시예에서, 인터페이스 유닛(1520)은 가상 메모리로의 액세스를 용이하게 하는 메모리 관리 유닛(memory management unit, MMU)(1544)을 포함할 수 있다. 또 다른 실시예에서, 메모리 시스템(1504)은, 지연을 위하여, 명령어가 실제로 실행되어야 하기 전에 메모리로부터의 명령어를 요청하는 프리패처(prefetcher)(1543)를 포함할 수 있다.
명령어를 실행하기 위한 명령어 아키텍처(1500)의 연산은 서로 다른 스테이지를 통해 수행될 수 있다. 예를 들면, 유닛(1510) 명령어 프리패치 스테이지(1530)를 사용하면, 프리패처(1543)를 통해 명령어에 접근할 수 있다. 수신된 명령어는 명령어 캐시(1532)에 저장될 수 있다. 프리패치 스테이지(1530)는 고속-루프 모드에 대한 옵션(1531)을 가능하게 할 수 있고, 소정의 캐시 내에 들어맞기에 충분히 작은 루프를 형성하는 일련의 명령어가 실행될 수 있다. 일 실시예에서, 그러한 명령어는, 예를 들면, 명령어 캐시(1532)로부터의 추가적인 명령어로 액세스할 필요없이 수행될 수 있다. 프리패치할 명령어의 결정은, 예를 들면, 분기 예측 유닛(1535)에 의해 수행될 수 있는데, 분기 예측 유닛은 글로벌 히스토리(global history)(1536) 내의 실행 지시, 타겟 어드레스(1537)의 지시, 또는 반환 스택(1538)의 콘텐츠에 액세스하여, 코드의 어떤 분기(1557)가 다음에 실행될지를 결정한다. 이러한 분기는 아마도 결과로 프리패치될 수 있다. 분기(1557)는 아래에서 기술되는 연산의 다른 스테이지를 통해 생성될 수 있다. 명령어 프리패치 스테이지(1530)는 명령어뿐만 아니라 향후 명령어에 대한 예측을 듀얼 명령어 디코딩 스테이지에 제공할 수 있다.
듀얼 명령어 디코딩 스테이지(1550)는 수신한 명령어를 실행될 마이크로코드 기반의 명령어로 변환할 수 있다. 듀얼 명령어 디코딩 스테이지(1550)는 클록 사이클 당 두 개의 명령어를 동시에 디코딩할 수 있다. 또한, 듀얼 명령어 디코딩 스테이지(1550)는 그 결과를 레지스터 리네임 스테이지(1555)로 넘겨줄 수 있다. 또한, 듀얼 명령어 디코딩 스테이지(1550)는 그의 디코딩 및 마이크로코드의 최종 실행의 결과로 생기는 임의의 분기를 결정할 수 있다. 그러한 결과는 분기(1557)로 입력될 수 있다.
레지스터 리네임 스테이지(1555)는 가상 레지스터 또는 다른 자원에 대한 참조를 물리 레지스터 또는 자원에 대한 참조로 변환할 수 있다. 레지스터 리네임 스테이지(1555)는 레지스터 풀(pool)(1556) 내의 이러한 맵핑의 표시를 포함할 수 있다. 레지스터 리네임 스테이지(1555)는 수신한 명령어를 변경하여 그 결과를 발행 스테이지(1560)로 송신할 수 있다.
발행 스테이지(1560)는 실행 엔티티(1565)로 커맨드를 발행하거나 디스패치할 수 있다. 그러한 발행은 비순차적 방식으로 수행될 수 있다. 일 실시예에서, 다중 명령어는 실행되기 전에 발행 스테이지(1560)에서 보류(hold)될 수 있다. 발행 스테이지(1560)는 그러한 다중 명령어를 보류하는 명령어 큐(1561)를 포함할 수 있다. 명령어는 발행 스테이지(1560)에 의해 특정의 명령어의 실행에 대한 유효성 및 적합성과 같은 수용 가능한 임의의 기준에 기초하여 특정 프로세싱 엔티티(1565)로 발행될 수 있다. 일 실시예에서, 발행 스테이지(1560)는 명령어 큐(1561) 내에 명령어를 재정할 수 있으며, 그래서 최초로 수신된 명령어가 최초로 실행되는 명령어가 아닐 수 있다. 명령어 큐(1561)의 정렬에 기초하여, 추가적인 분기시키는 정보가 분기(1557)에 제공될 수 있다. 발행 스테이지(1560)는 명령어를 실행할 실행 엔티티(1565)로 넘겨준다.
실행시, 라이트백 스테이지(1570)는 데이터를 레지스터, 큐, 또는 명령어 집합 아키텍처(1500)의 다른 구조에 기록하여 특정의 커맨드의 완료를 전달할 수 있다. 발행 스테이지(1560)에 배열된 명령어의 순서에 따라서, 라이트백 스테이지(1570)의 연산은 추가적인 명령어가 실행되는 것을 가능하게 할 수 있다. 명령어 집합 아키텍처(1500)의 성능은 추적 유닛(1575)에 의해 모니터링되거나 디버깅될 수 있다.
도 16은 본 개시의 실시예에 따른, 프로세서의 명령어 집합 아키텍처에 대한 실행 파이프라인(1600)의 블록도이다. 실행 파이프라인(1600)은, 예를 들면, 도 15의 명령어 집합 아키텍처(1500)의 연산을 예시할 수 있다.
실행 파이프라인(1600)은 스텝 또는 연산의 임의의 적합한 조합을 포함할 수 있다. (1605)에서, 다음에 실행될 분기의 예측이 수행될 수 있다. 일 실시예에서, 예측은 이전의 명령어 실행 및 그 결과에 기초할 수 있다. (1610)에서, 실행의 예측된 분기에 대응하는 명령어가 명령어 캐시로 로드될 수 있다. (1615)에서, 명령어 캐시 내의 하나 이상의 그와 같은 명령어가 실행을 위해 페치될 수 있다. (1620)에서, 페치된 명령어는 마이크로코드나 하나 이상의 특정 머신 언어로 디코딩될 수 있다. 일 실시예에서, 다중 명령어가 병렬로 디코딩될 수 있다. (1625)에서, 레지스터 또는 디코딩된 명령어 내의 다른 자원으로의 참조가 재할당될 수 있다. 예를 들면, 가상 레지스터에 대한 참조는 대응하는 물리 레지스터로의 참조로 대치될 수 있다. (1630)에서, 명령어는 실행을 위해 큐에 디스패치될 수 있다. (1640)에서, 명령어가 실행될 수 있다. 그러한 실행은 임의의 적합한 방식으로 수행될 수 있다. (1650)에서, 명령어는 적합한 실행 엔티티로 발행될 수 있다. 명령어가 실행되는 방식은 명령어를 실행하는 특정 엔티티에 따라 다를 수 있다. 예를 들면, (1655)에서, ALU는 산술 함수를 수행할 수 있다. ALU는 연산을 위해 단일 클록 사이클은 물론, 두 개의 시프터(shifter)도 활용할 수 있다. 일 실시예에서, (1655)에서, 두 개의 ALU가 채용될 수 있으며, 그래서 두 개의 명령어가 실행될 수 있다. (1660)에서, 결과 분기가 결정될 수 있다. 프로그램 카운터는 분기가 만들어지는 목적지를 지정하도록 사용될 수 있다. (1660)은 단일의 클록 사이클 내에서 실행될 수 있다. (1665)에서, 부동 소수점 계산이 하나 이상의 FUP에 의해 수행될 수 있다. 부동 소수점 연산은 두 개 내지 열 개의 사이클과 같은 다중 클록 사이클의 실행이 필요할 수 있다. (1670)에서, 곱하기 및 나누기 연산이 수행될 수 있다. 이러한 연산은 네 개의 클록 사이클에서 수행될 수 있다. (1675)에서, 레지스터 또는 파이프라인(1600)의 다른 부분으로의 로딩과 저장 연산이 수행될 수 있다. 그 연산은 로딩과 저장 어드레스를 포함할 수 있다. 그 연산은 네 개의 클록 사이클에서 수행될 수 있다. (1680)에서, 라이트백 연산은 (1655 내지 1675)의 결과 연산에 의해 요구되는 것처럼 수행될 수 있다.
도 17은 본 개시의 실시예에 따른, 프로세서(1710)를 활용하는 전자 디바이스(1700)의 블록도이다. 전자 디바이스(1700)는, 예를 들면, 노트북, 울트라북, 컴퓨터, 타워 서버, 랙 서버, 블레이드 서버, 랩톱, 데스크톱, 태블릿, 모바일 디바이스, 폰, 임베디드 컴퓨터, 또는 다른 적합한 임의의 전자 디바이스를 포함할 수 있다.
전자 디바이스(1700)는 임의의 적합한 수 또는 임의의 종류의 컴포넌트, 주변기기, 모듈 또는 디바이스에 통신으로 연결되는 프로세서(1710)를 포함할 수 있다. 이러한 연결은 I2C 버스, 시스템 관리 버스(system management bus, SMBus), 로우 핀 카운트(LPC) 버스, 고선명 오디오(high definition audio, HDA) 버스, 직렬 어드밴스 테크놀로지 어태치먼트(Serial Advance Technology Attachment, SATA) 버스, (버전 1, 2, 3) USB 버스, 유니버셜 동기 수신기/전송기(Universal Asynchronous Receiver/Transmitter, UART) 버스와 같은 임의의 적합한 종류의 버스 또는 인터페이스에 의해 수행될 수 있다.
이러한 컴포넌트는, 예를 들면, 디스플레이(1724), 터치 스크린(1725), 터치 패드(1730), 근접장 통신(near field communications, NFC) 유닛(1745), 센서 허브(1740), 열 센서(1746), 익스프레스 칩셋(express chipset, EC)(1735), 트러스티드 플랫폼 모듈(trusted platform module, TPM)(1738), BIOS/펌웨어/플래시 메모리(1722), 디지털 신호 프로세서(1760), 고체 상태 디스크(solid state disk, SSD) 또는 하드 디스크 드라이브(hard disk drive, HDD)와 같은 드라이브(1720), 무선 근거리 네트워크(wireless local area network, WLAN) 유닛(1750), 블루투스 유닛(1752), 무선 광역 네트워크(wireless wide area network, WWAN) 유닛(1756), 위성 항법 시스템(global positioning system, GPS), USB 3.0 카메라와 같은 카메라(1754), 또는, 예를 들면, LPDDR3 표준으로 구현되는 저전력 더블 데이터 레이트(low power double data rate, LPDDR) 메모리 유닛(1715)을 포함할 수 있다. 이들 컴포넌트는 임의의 적합한 방식으로 구현될 수 있다.
또한, 다양한 실시예에서, 다른 컴포넌트가 위에 논의된 컴포넌트를 통해 프로세서(1710)에 통신으로 연결될 수 있다. 예를 들면, 가속기(1741), 주변광 센서(ambient light sensor, ALS)(1742), 나침반(1743), 그리고 자이로스코프(1744)가 센서 허브(1740)에 통신으로 연결될 수 있다. 열 센서(1739), 팬(1737), 키보드(1746), 및 터치 패드(1730)는 EC(135)에 통신으로 연결될 수 있다. 스피커(1763), 헤드폰(1764), 및 마이크로폰(1765)은 오디오 유닛(1764)에 통신으로 연결되어, 결과적으로 DSP(1760)에 통신으로 연결될 수 있다. 오디오 유닛(1764)은, 예를 들면, 오디오 코덱 및 클래스 D 증폭기를 포함할 수 있다. SIM 카드(1757)는 WWAN 유닛(1756)에 통신으로 연결될 수 있다. WWAN 유닛(1756)뿐만 아니라, WWLN 유닛(1750) 및 블루투스 유닛(1752) 같은 컴포넌트가 차세대 폼팩터(next generation form factor, NGFF)로 구현될 수 있다.
본 개시의 실시예는 계산을 처리하는 벡터 포맷용 명령어 및 로직을 포함한다. 일 실시예에서, 이러한 계산은 유한차분 계산(finite-difference computation)을 포함할 수 있다. 예를 들면, 이러한 계산은 다차원의 미분 방정식 계산이나 추정, 등방성 계산, 또는 이방성 계산을 포함할 수 있다. 다른 실시예에서, 이러한 벡터 포맷은 테이블 벡터 포맷(tabular vector format)을 포함할 수 있다. 또 다른 실시예에서, 계산은 서로 다차원으로 인접한 다중, 오버래핑 데이터 포인트로부터 입력을 요구하는 계산을 포함할 수 있다. 도 18은 본 개시의 실시예에 따른, 계산 처리를 위한 벡터 포맷용 시스템(1800)의 일 실시예의 블록도이다. 계산은, 예를 들면, 프로세서(1804)에 의해 처리될 수 있다. 시스템(1800)은 본 명세서에서 기술되는 기능성을 수행하기 위하여 임의의 적합한 수 또는 종류의 구성요소를 포함할 수 있다. 또한, 시스템(1800)의 특정 구성요소가 본 명세서에서 특정 기능을 수행하는 것으로서 설명될 수 있지만, 시스템(1800)의 임의의 적합한 부분도 본 명세서에서 설명되는 기능성을 수행할 수 있다.
일 실시예에서, 계산 처리를 위한 벡터 포맷이 프로세서(1804)에 의해 수신되는 명령어에 적용될 수 있다. 프로세서(1804)에 의해 수신되는 명령어는 명령어 스트림(1802)을 포함할 수 있는데, 이 명령어 스트림은 컴파일러, 변환기(translator), 또는 다른 적합한 소스에 의해 생성될 수 있다. 명령어 스트림(1804)은, n-차원 등방성, 이방성, 또는 미분 방정식 함수와 같은 유한차분(FD) 계산 또는 함수를 위한 커맨드를 포함할 수 있다. 명령어 스트림(1804)은, 특정 데이터 포인트에 대해서, 각기 선형의 다차원으로 인접한 다중 데이터 포인트로부터의 입력을 요구하는 함수를 위한 커맨드를 포함할 수 있다. 다양한 실시예에서, "다차원"은 소스 데이터에 의해 표현되는 문제 공간의 물리적 실체나 도메인을 표현할 수 있다. 프로세서(1804) 내에 조작되거나 가공될 때, 다중 도메인은 필요에 따라서 컴퓨터 연산을 수행하기 위한 실제 데이터 구조로 평탄화될 수 있다. 커맨드는 FD 함수(1803)로서 참조될 수 있다. 그러한 실시예에서, 프로세서(1804)는 벡터 포맷팅 연산을 추가하여 FD 함수(1803)를 디코딩하거나, 해석하거나, 또는 수행함으로써 FD 함수(1803)의 실행을 구현할 수 있다. 그러한 벡터 포맷팅 연산은 프로세서(1804)의 임의의 적합한 부분에 의해서도 수행될 수 있는데, 이를테면, 프론트 엔드(1806), 디코더(1808), 또는 동적 2진 변환기(1816), 또는 저스트인타임(just-in-time) 컴파일러나 변환기, 최적화기, 또는 특수 코-프로세서나 실행 유닛 같은 도시되지 않은 다른 구성요소에 의해서도 수행될 수 있다. 다른 실시예에서, 계산 처리를 위한 벡터 포맷은 명령어가 프로세서(1804)에 도달하기 전에 FD 함수(1803)에 적용될 수 있다. 벡터 포맷팅은 컴파일러, 변환기, 최적화기, 또는 다른 적합한 엔티티에 의해 적용될 수 있다.
프로세서(1802)는 FD 함수(1803)의 처리, 그의 벡터 포맷팅 연산, 및 다른 명령어를 수행할 수 있다. 프로세서(1804)는 프로세서 코어, 논리 프로세서, 프로세서, 또는 도 1 내지 도 17에 도시된 것과 같은 다른 프로세싱 엔티티에 의해 일부분 구현될 수 있다. 다양한 실시예에서, 프로세서(1804)는 캐시, 메모리, 또는 다른 소스로부터 명령어를 페치하는 페치 유닛 및 명령어를 디코딩하는 디코더(1808)를 포함하는 프론트 엔드(1806)를 포함할 수 있다. 프로세서(1804)는 또한 명령어의 타이밍, 명령어의 순서, 및 코어(1814) 또는 실행 유닛(1820)으로 명령어를 할당하는 것을 결정하는 스케줄러를 포함할 수 있다. 프로세서(1804)는 또한 명령어를 실행하는 많은 타입 및 종류의 코어(1814) 또는 실행 유닛(1820)을 포함할 수 있다. 그러한 실행 유닛은, 예를 들면, 분기 실행 유닛, 정수 계산 실행 유닛(예를 들면, ALU), 부동 소수점 연산 실행 유닛(예를 들면, FPU), 및 메모리 액세스 실행 유닛을 포함할 수 있다. 또한, 프로세서(1804)는 성공적인 실행의 결과를, 예를 들면, 레지스터, 캐시, 또는 메모리(1818)로 커밋하는 리타이어먼트 유닛(1816)을 포함할 수 있다. 프로세서(1804)는 엘리어스(alias) 자원을 보유하기 위한 할당 유닛과 같은, 도시되지 않은 임의의 다른 적합한 컴포넌트를 포함할 수 있다. 다양한 실시예에서, 프로세서(1804)는 프로세서(1802)의 다이 내의 (읽기 전용 메모리 같은) 비-휘발성 머신 판독가능한 매체에 저장되는 마이크로-연산을 활용하여 실행하는 마이크로코드를 활용하여, 실행 유닛(1820)으로 하여금 명령어의 바람직한 연산을 수행하게 할 수 있다.
위에서 논의된 것처럼, FD 함수(1803)는 명령어 스트림(1802) 내의 FD 함수(1803)를 구현하기 위한 또는 프로세서(1804) 내의 FD 함수(1803)의 해석, 디코딩, 또는 평가의 결과로서 벡터 포맷 연산을 포함할 수 있다. 임의의 적합한 벡터 포맷팅 연산, 읽기, 또는 다른 명령어가 명령어 스트림(1802)에 추가되거나 또는 프로세서(1804)에서 실행되도록 디코딩되고 FD 함수(1803)에 추가될 수 있다. 포맷팅 연산, 읽기, 또는 다른 명령어의 특정 선택 및 순서는 특정 FD 함수(1803)의 실행 및 그것의 특정 파라미터를 구현하도록 만들어질 수 있다. 일 실시예에서, 그러한 포맷팅 연산은 데이터를 테이블 벡터로 읽어들이는 함수를 포함할 수 있다. 다른 실시예에서, 그러한 포맷팅 연산은 특정 FD 함수(1803) 및 그의 파라미터의 필요에 따른 실행을 위해서 테이블 벡터를 정렬하는 함수를 포함할 수 있다. 또 다른 실시예에서, 그러한 포맷팅 연산은 특정 FD 함수(1803) 및 그의 파라미터의 필요에 따른 실행을 위해서 테이블 벡터를 치환하는 함수를 포함할 수 있다.
일 실시예에서, FD 함수(1803)가 프로세서(1804)에 도달함에 따라서, FD 함수는 그의 실행을 특정하게 구현하는 포맷팅 연산을 포함하지 않을 수 있다. 다른 실시예에서, FD 함수(1803)는 컴파일되었을 수 있으며 포맷팅 연산은 명령어 스트림(1802)으로 배치되기 전에 FD 함수에 추가될 수 있다.
앞에서 설명된 것처럼, FD 함수(1803)의 함수는, 예를 들면 n-차원의 FD, 등방형, 이방형, 또는 미분 방정식 근사 함수를 포함할 수 있다. FD 함수는 미분 방정식의 해를 위한 수치적 체계를 포함할 수 있다. 다른 예에서, 함수는, 단일 포인트의 계산을 위하여, 다차원으로 서로 인접한 데이터 포인트로부터의 입력을 요구하도록 사용될 수 있다. 이들 함수 중 임의의 함수는 큰 데이터 집합의 시뮬레이션에 사용될 수 있다. 이러한 함수는 고성능 컴퓨팅에서, 예를 들면, 에너지 탐사에서의 지질학적 형성이나, 또는 그 밖의 적합한 애플리케이션을 시뮬레이션하는데 사용될 수 있다. 이들 함수의 구현은 상당히 많은 양의 부동 소수점 계산과 높은 메모리 대역폭을 요구할 수 있다. FD 함수는 데이터를 표현하도록 대규모 메모리 공간을 가로지르는 수치 스텐실(numerical stencil)의 애플리케이션을 요구할 수 있다. 그러한 데이터는 실세계 데이터를 포함할 수 있다. 따라서, FD 함수 내의 단일 포인트 계산은 각 차원의 복수의 데이터 조각에 액세스하는 것이 필요할 수 있다. FD 함수(1803)의 각 차원에 대해, FD 함수는 단일 포인트에서 그의 결과를 계산하는데 필요한 입력 값의 범위를 포함할 수 있다. 그 범위는 인접하지 않을 수 있다. 예를 들면, 16번째(16th order) 2차원 스텐실은 단일 타임 스텝 내에 각각의 새로운 값을 계산하기 위한 33개 입력 값을 요구할 수 있다. 전체 FD 기반의 문제에 대한 해법은 수십억 포인트가 계산되어야 할 수 있다. 프로세서(1804) 내의 SIMD 벡터화는 다중 포인트가 병렬로 계산될 수 있게 할 수 있다. 그러나 아래에서 설명되는 것처럼, SIMD 벡터화는 읽기 위해 필요한 데이터를 줄이지 않으며, 또한 FD 함수 실행을 수행하기 위해 만들어져야 하는 읽기의 양에 독자적으로 마찬가지로 영향을 미치지는 않는다. 다양한 실시예에서, FD 함수(1803)에 적용되는 벡터 포맷팅은 FD 함수(1803)에 의한 실행용 데이터를 취합하기 위해 요구되는 읽기의 수를 감소시키지 않는다.
도 18은 3차원 소스 데이터(1822)의 예를 예시한다. 그러한 데이터(1822)는 메모리 또는 프로세서(1804)에 의해 액세스 가능한 다른 위치를 비롯한 적합한 어느 장소에서도 상주할 수 있다. 데이터(1822)는 너무 커서 프로세서(1804)의 캐시 내에 완전하게 읽히거나 저장될 수 없다. FD 함수(1803)는 데이터(1822)를 처리하여 의도하는 함수의 결과를 결정할 수 있다. 앞서 논의된 것처럼, 특정 위치(x0, y0, z0)에서 FD 함수(1803)의 계산은 각 차원 x, y, z로부터 소스 데이터(1822)의 (인접하거나 그렇지 않은) 범위로부터의 입력이 필요할 수 있다. 이와 같은 입력을 얻기 위해, (A)에서 소스 데이터(1822)로부터 그러한 각각의 값이 읽혀져야 한다. (B)에서, 그러한 값은 FD 함수(1803)의 결과값을 계산하도록 사용될 수 있다. 일 실시예에서, FD 함수(1803)의 다중 값은 SIMD 벡터화 연산을 사용하여 병렬로 계산될 수 있다.
도 19는 본 개시의 실시예에 따른, FD 함수의 예를 예시한다. 스텐실(1902)은 특정 포인트(1903)에 대해, 다음의 4개와 이전의 4개 값을 x-방향으로, 다음의 4개와 이전의 4개 값을 y-방향으로, 다음의 4개와 이전의 4개 값을 z-방향으로 결정하는 것을 요구하는 예시적인 FD 함수의 표현이다. FD 함수의 특정 포인트(1803)를 계산하기 위해 필요한 값의 맵은 마스크 또는 스텐실이라 지칭될 수 있다. 등방성 함수에 대한 식(1904)의 예는 도 19에 명시된다.
도 20은 본 개시의 실시예에 따른, FD 함수의 예시적인 연산을 예시한다. 그래프(2002)는 FD 함수(1803)의 실행이 수행될 수 있는 (5, 5)의 단일 포인트를 보여준다. 단일 포인트는 FD 함수(1803)의 계산이 수행되는 수백만 이상의 포인트 중의 하나일 뿐이다.
그래프(2004)는 2차원의 8번째 등방성 FD 함수 계산을 위해 읽어들여야 하는 값을 보여주는 스텐실(2006)을 보여준다. 3차원 함수에 대해 또는 (16번째와 같은) 더 높은 번째의 함수에 대해서는 더 큰 스텐실이 필요할 수 있다. 도 20에서 고려되는 2차원 8번째 등방성 FD 함수에 대해서, 소정의 포인트, 소스 데이터 내의 소정의 포인트의 위의 4개 값, 아래 4개 값, 우측으로 4개 값, 그리고 좌측으로 4개 값이 FD 함수의 결과를 찾기 위해 고려될 수 있다.
스텐실(2006)의 값을 읽기 위하여, (A)의 각 데이터 포인트의 읽기(2003)가 수행되어서, FD 함수에 대한 (5, 5)의 계산에 필요한 값을 결정하도록 총 17개의 읽기가 필요할 수 있다. (B)의 SIMD 벡터 읽기(2005)를 사용하면, 하나 이상의 값이 값의 벡터로 한 번에 읽혀질 수 있다. 그러한 SIMD 벡터는 프로세서(1804)의 아키텍처 및 특징에 따라 정의될 수 있다. 예를 들면, 각기 x-방향의 연속하는 인덱스를 갖는, 16 길이의 SIMD 벡터 읽기가 활용 가능할 수 있다. 읽혀지는 값은 명시된 위치에 대응할 수 있으며, 또한 그 값을 벡터의 방향으로 뒤따르는 15개의 값에 대응할 수 있다. SIMD 벡터 읽기(2005)를 사용하면, 스텐실(2006)에 대응하는 소스 데이터 내의 값이 11개의 벡터 읽기로 읽혀질 수 있다. 만일 예시된 FD 함수가 3차원이면, 페이지로 들어가는 또 다른 4개의 값뿐만 아니라 (z-방향의) 해당 페이지의 외부로 가는 값에 대하여 다른 4개의 읽기가 생성될 수 있다. 또한, 더 많은 데이터가 이 읽기에서 수집됨으로써 병렬 벡터의 동시 실행이 용이해질 수 있다. 최초의 9개 읽기가 그래프(2006)에 예시되고, 10번째 읽기가 그래프(2008)에 예시되고, 그리고 11번째 읽기가 그래프(2010)에 도시된다. 16번째 등방성 2-D FD 함수에 대하여, 33개의 입력 데이터 값이 필요하다. SIMD 벡터 읽기(2005)의 19개의 다른 실행은 그러한 데이터를 입력하는데 사용될 수 있다. 벡터화가 단일 방향으로 수행될 때, 효율성은 벡터화의 방향(그래프(2006, 2008, 2010)의 예에서, x-방향)으로 얻을 수 있지만, 다중 읽기는 다른 방향에서 수행되어야 한다.
SIMD 벡터 읽기(2005)는 가능한 병렬의 16개 값의 읽기를 포함할 수 있지만, SIMD 벡터 읽기(2005)는 임의의 가능한 16개 값의 집합을 한 번에 읽지 못할 수 있다. SIMD 벡터 읽기(2005)는 단일 캐시 라인 내에 정렬되는 16개 요소를 병렬로 읽을 수 있다. 그래프(2006)의 예에서, 정렬된 하나는 열(column) 5에 있는 반면에, 다음 정렬된 것은 열 21에 있을 수 있다. SIMD 벡터 읽기(2005)는 이와 같은 하나의 범위를 하나의 청크(chunk)로 읽을 수 있다. 따라서, 그래프(2006) 내의 좌측 "팔 부분(arm)"의 읽기는 현재 프로세서에서 실제로 채용하는 전체 정렬(full alignment)를 보여줄 수 있다. 이러한 읽기는 사실 열 -11에 있고 열 4를 지나갈 수 있다. 따라서, 19개의 상이한 읽기가 스텐실을 충분히 덮기위해 필요할 수 있다.
일 실시예에서, 벡터 포맷팅은 FD 함수의 실행에 필요한 데이터를 읽어서 그 데이터가 2차원 또는 3차원 같은 하나 이상의 차원으로 벡터화되도록 적용될 수 있다. 이러한 포맷팅은 (C)에 보이는 것처럼 테이블 벡터 읽기(2011) 포맷을 포함할 수 있다. 다른 실시예에서, 벡터 포맷팅은 데이터가 하나 이상의 차원에서 읽혀지도록 하나 이상의 차원에 적용될 수 있다.
테이블 벡터 읽기(2011) 포맷은 임의의 적합한 방식으로 소스 데이터와 스텐실(2006)에 적용될 수 있다. 일 실시예에서, 테이블 벡터 읽기(2011)는 다음 4개의 값이 x-방향으로 읽히고, 다음 4개의 값이 y-방향으로 읽히는 특정 포인트에 적용될 수 있다. 테이블 벡터 읽기(2011)의 크기는 프로세서(1804)의 SIMD 벡터 읽기(2005)의 가용한 크기에 관련될 수 있다. 예를 들면, 테이블 벡터 읽기(2011)는 16개 값일 수 있다. 만일 64개 값의 벡터 읽기가 지원되면, 테이블 벡터 읽기(2011)는 8x8 2차원 읽기를 포함할 수 있다. 만일 (32개의 값과 같은) 불완전 정사각형의 벡터 읽기가 지원되면, 테이블 벡터 읽기(2011)는, 예를 들면, 8x4 2차원 읽기로 구현될 수 있다. 테이블 벡터 읽기(2011)의 적합한 어떠한 레이아웃이라도 사용될 수 있다. 예를 들면, 2x8 레이아웃은 도 20에 도시된 4x4 레이아웃 대신에 사용될 수 있다. 다른 예에서, 16-요소 SIMD는 3차원 읽기로 4x2x2 부분공간을 표현하는데 사용될 수 있다. 소스 데이터에 적용되도록 선택되는 레이아웃은 FD 함수를 실행하기 위해 필요한 소스 데이터의 형상에 좌우될 수 있다.
다른 실시예에서, 테이블 벡터 읽기(2011)는, 테이블 벡터 읽기(2011)의 차원을 고려하여, 스텐실(2006)의 모든 값을 전부 읽는 동안 읽기의 수를 최소화하기 위하여, 스텐실(2006)(또는 해당 FD 함수에 대한 임의의 다른 스텐실) 내의 포인트에 적용될 수 있다. 벡터 읽기가 적용되는 방법은, 예를 들면, FD 함수(1803)를 디코딩하고 변환하는 프로세서(1804)에 의해 결정되거나, 또는 FD 함수(1803)에 포함될 수 있다.
예를 들면, 그래프(2012)는 예시적인 FD 함수를 표현하는 스텐실(2006)에 테이블 벡터 읽기(2011)를 적용한 것을 예시한다. FD 함수의 명령어는 프로세서(1804)에 의해 수신될 수 있으며, 프로세서(1804)는 FD 함수의 계산을 수행하기 위해, 스텐실(2006)의 값이 읽혀져야 한다는 것을 결정할 수 있다. 또한, 프로세서(1804)는 스텐실(2006)의 값을 효율적으로 읽기 위해, 테이블 벡터 읽기(2011)의 다섯 인스턴스가 만들어질 수 있다는 것을 결정할 수 있다. 다섯 인스턴스 내의 테이블 벡터 읽기(2011)의 파라미터는 그래프(2012)에 예시된 읽기를 생성하기 위해 선택될 수 있다. 예를 들면, 테이블 벡터 읽기(2011)는 소스 데이터 내의 각 (5,2), (1,6), (5,6), (5,10), 및 (9,6)에 만들어져서 (5,6)에 대하여 FD 함수 결과를 산출할 수 있다. 벡터 읽기의 특정 개수는 선택된 특정 포인트, FD 함수의 순서, FD 함수의 차원의 개수에 종속될 수 있다. 이와 같이 읽기가 수행될 수 있는 곳과 이와 같이 다양한 FD 함수가 저장될 수 있는 곳 사이의 관계의 맵핑이 저장될 수 있고, 그럼으로써 특정 FD 함수가 주어지는 경우, 테이블 벡터 읽기(2011)의 특정 개수 및 위치가 특정 FD 함수의 읽기를 구현하기 위해 명시될 수 있다. 또한, 이러한 맵핑은 테이블 벡터 읽기(2011)의 다양한 가용한 레이아웃을 명시할 수 있다.
따라서, 도 20의 예에서, 5개 읽기가 8번째 2-D 함수와 그의 스텐실(2006)에 대한 값을 모두 읽기 위해 필요할 수 있다. 3-차원 함수에 대해, 페이지 바깥에 출현하는 추가적인 4개의 읽기가 z-방향의 값을 위해 필요할 수 있으며, 또한 페이지의 내부로 가는 z-방향의 값을 위해 추가적인 4개의 읽기가 필요할 수 있다. 16번째 2-D FD 함수에 대해, 테이블 벡터 읽기(2011)는 9일 수 있다. 따라서, 다양한 실시예에서, 선형 벡터에서 테이블 벡터로 벡터 읽기를 포맷팅하는 것은 FD 함수(1803)를 계산하기 위해 필요한 소스 데이터의 읽기의 수를 감소시킨다.
도 21은 본 개시의 실시예에 따른, 이방성 함수(2102)의 예시적인 연산을 보여준다. 비록 이방성 함수(2102)가 도 22에서 예로 사용되었지만, 적합한 어떠한 이방성 함수도 사용될 수 있다. 이방성 함수(2012)는 2차원 이방성 함수일 수 있다.
그래프(2104)는 이방성 함수(2102)의 실행이 수행될 수 있는 (5,5)에 있는 단일 포인트를 보여준다. 단일 포인트는 이방성 함수(2102)에 의한 계산이 수행되는 수백만 이상의 포인트 중의 오직 하나일 수 있다. 그래프(2104)는 이방성 함수(2102)를 사용하여 특정 포인트의 값을 계산하기 위해 읽혀져야 하는 값을 보여주는 스텐실(2106)을 예시한다. 3차원 함수 또는 더 높은 번째의 함수(예를 들면, 16번째)에 대해서는 더 큰 스텐실이 필요할 수 있다. 도 21에서 고려되는 2차원 8번째 등방성 함수에 대해서, 특정 포인트, 소스 데이터 내의 특정 포인트의 위의 4개 값, 아래 4개 값, 우측으로 4개 값, 그리고 좌측으로 4개 값이 소정의 포인트에 대해서 이방성 함수(2102)의 결과를 찾기 위해 고려될 수 있다. 또한, 대각선 위쪽 우측으로 4개의 값, 대각선 위쪽 좌측으로 4개의 값, 및 대각선 아래쪽 우측으로 4개의 값, 그리고 대각선 아래쪽 좌측으로 4개의 값은 특정 포인트에 대한 이방성 함수(2102)의 결과를 찾기 위해 고려될 수 있다.
스텐실(2016)의 값을 읽기 위하여, 만일 (도 20의 1x16 SIMD 벡터 읽기(2005)와 같은) 선형 SIMD 벡터 읽기가 계산하려는 값을 읽는데 사용되면, 총 27개의 읽기가 만들어질 수 있다. 이 총계는 각 4개의 대각선 영역에 대한 4개만이 아니라 도 20에 도시된 것도 포함한다.
일 실시예에서, 벡터 포맷팅은 데이터가 2차원 또는 3차원 같은 일차원 이상으로 벡터화되도록 이방성 함수(2102)를 실행하기 위해 데이터를 읽는데 적용될 수 있다. 이러한 포맷팅은 도 20에 도시된 테이블 벡터 읽기(2011) 포맷을 포함할 수 있다. 다른 실시예에서, 벡터 포맷팅은 데이터가 하나 이상의 차원으로 읽혀지도록 하나 이상의 차원에 적용될 수 있다.
테이블 벡터 읽기(2011) 포맷은 임의의 적합한 방식으로 소스 데이터와 스텐실(2106)에 적용될 수 있다. 테이블 벡터 읽기(2011)는 스텐실(2206)의 모든 값을 전부 읽는 동안 읽기의 수를 최소화하기 위해 스텐실(2206) 내의 포인트에 적용될 수 있다. 벡터 읽기가 적용되는 방법은, 예를 들면, 이방성 함수(2102)를 디코딩하고 변환하는 프로세서(1804)에 의해 결정되거나, 또는 이방성 함수(2102)와 함께 포함될 수 있다.
예를 들면, 그래프(2018)는 이방성 함수(2102)를 표현하는 스텐실(2016)에 테이블 벡터 읽기(2011)를 적용한 것을 예시한다. 일 실시예에서, 테이블 벡터 읽기(2011)는 그래프(2018)에 도시된 것처럼, 포인트 (1,2), (5,2), (9,2), (1,6), (5,6), (9,10), (1,10), (5,10), 및 (9,10)에 적용될 수 있다. 따라서, 9개 읽기가 만들어질 수 있다. 3-차원 함수에 대해, 페이지 바깥에 출현하는 추가적인 4개의 읽기가 z-방향의 값을 위해서 필요할 수 있으며, 또한 페이지의 내부로 가는 z-방향의 값을 위해 추가적인 4개의 읽기가 필요할 수 있다. 16번째 2-D FD 함수에 대해, 테이블 벡터 읽기(2011)는 9일 수 있다. 따라서, 다양한 실시예에서, 선형 벡터에서 테이블 벡터로 벡터 읽기를 포맷팅하는 것은 FD 함수(1803)를 계산하기 위해 필요한 소스 데이터의 읽기의 수를 감소시킬 수 있다.
도 22는 본 개시의 실시예에 따른, 테이블 벡터 읽기에 기초하여 계산하는 시스템(1800)의 예시적인 연산을 보여준다. FD 함수(1803)의 계산의 실행은 SIMD 벡터화를 사용하여 병렬로 실행될 수 있다. 도 22의 벡터 데이터는, 예를 들면, 벡터 레지스터에 저장될 수 있다. 계산의 병렬처리는 도 20에 도시된 읽기에 사용되는 테이블 벡터 레이아웃을 사용하여 계산을 함으로써 이루어질 수 있다. 따라서, 도 22의 벡터 계산을 사용하여 병렬로 수행되는 계산의 수는 도 20의 테이블 벡터 읽기의 크기와 같을 수 있다. 더욱이, 벡터 계산을 사용하여 병렬로 수행되는 계산의 수는 테이블 벡터 읽기 연산의 결과를 저장하는 테이블 벡터의 결과를 저장하는 레지스터와 동일한 크기일 수 있다.
그러나 데이터를 읽기 위해 사용되는 테이블 벡터 레이아웃을 사용하는 특정 포인트를 고려하면, 두 개의 상이한 테이블 벡터 읽기 동안 검색되는 데이터에 액세스하는 것이 필요할 수 있다. 만일 벡터 계산이 단일 테이블 벡터 읽기의 데이터를 저장하는 레지스터와 동일한 크기이면, 벡터 계산은 두 테이블 벡터 읽기를 모두 읽지 못할 수 있다. 일부 실시예에서, 포맷팅 명령어는 다중 벡터로부터 정보를 올바르게 취합하여 계산이 테이블 벡터 레이아웃(2206)에 따라서 만들어지도록 적용될 수 있다. 레이아웃(2206)은 도 20에 도시된 테이블 벡터 읽기의 레이아웃에 대응할 수 있다.
예를 들면, 그래프(2202)는 테이블 벡터 읽기에서 생성된 데이터의 제 1 벡터(Vector1)와 데이터의 제 2 벡터(Vector2)로부터 수신된 데이터를 보여줄 수 있다. 그래프(2204)에서, 예를 들면, 스텐실(1006)의 중앙 포인트로부터 y-방향으로 제거된 위치인 위치(5,5) 상에 벡터-전역(vector-wide)의 계산을 수행하기 위하여, Vector1 및 Vector2의 데이터에 액세스되어야 할 수 있다. 따라서, 데이터는 벡터-전역의 계산이 위치(5,5)에서 수행되도록 포맷팅되어야 할 수 있다. 특히, 추가적인 정보가 이와 같은 계산을 위해 요구될 수 있다.
일 실시예에서, 다중 테이블 벡터로부터의 정보에 액세스하기 위하여, 특화된 벡터 읽기 함수가 사용될 수 있다. 도 22의 예에서, 그러한 함수는 VALIGN으로 표시될 수 있다. 일 실시예에서, VALIGN은 단일 명령어로 구현될 수 있다. VALIGN은 두 벡터로부터의 두 부분이 합병되어야 한다는 것을 명시하는 적합한 어떠한 파라미터도 사용될 수 있다. 예를 들면, VALIGN은 제 1 벡터를 명시하는 파라미터, 제 1 벡터로부터 선택되어야 하는 요소, 제 2 벡터, 및 제 2 벡터로부터 선택되어야 하는 요소를 포함할 수 있다. VALIGN은 다른 적합한 파라미터 체계로 구현될 수 있다. 그래프(2204)의 예에서, VALIGN은 (-4로 표시되는) Vector1의 마지막 4개 요소가 (12로 표시되는) Vector2의 최초 12개 요소에 더해지는 것을 지정하도록 요청(call)될 수 있다, 즉, VALIGN(Vector1, -4, Vector2, 12). 일 실시예에서, 음의 값이 포함될 수 있다. 다른 예에서, Vector1과 Vector2 간의 관계가 추론되며, 얼마나 많은 Vector1의 마지막 값이 사용되는 지를 지시하는 단일 숫자만이 넘겨질 수 있다. 나머지 값은 Vector 2의 제 1 부분으로부터 추정될 수 있다.
그래프(2204)의 예에서, (한 위치 위로) (5,3)에 위치하도록 시프트되는 레이아웃(2206)에 대한 추가적인 계산을 완료하기 위해, VALIGN은 Vector1의 마지막 8개의 값이 Vector2의 최초 8개 값과 결합되도록 VALIGN(Vector1, -8, Vector2, 8)을 사용하여 요청될 수 있다. (한 위치 더 위로) (5,2)에 대신 배치되는 레이아웃(2206)에 대한 추가적인 계산을 위해, VALIGN은 Vector1의 마지막 12개의 값이 Vector2의 최초 4개 값과 결합되도록 VALIGN(Vector1, -12, Vector2, 4)을 사용하여 페치될 수 있다. 그러나 (한 위치 더위로) (5,1)에 대신 배치되는 레이아웃(2206)에 대한 추가적인 계산을 위해, 레이아웃(2206)은 Vector1 데이터로 향하면서 완료될 수 있다. 그런 경우에, VALIGN의 사용은 필요치 않고, 단순히 Vector1 데이터는 읽혀질 때 사용될 수 있다.
일 실시예에서, Vector2 이하의 벡터 내의 계산의 경우, Vector2를 가진 그러한 벡터의 요소를 결합하기 위해, 동일한 단계가 VALIGN의 상이한 파라미터를 사용하여 반복될 수 있다. 총 6개의 VALIGN은 레이아웃(2206)에 의해 y-방향으로 적용됨으로써 테이블 벡터 데이터에 대한 모든 계산을 수행하는데 사용될 수 있다. 6개의 VALIGN 호출(call)은 그래프(2202)의 "최상부" "팔 부분"과 중간 벡터와의 조합에 대하여 3개, 그리고 "최하부" 팔 부분과 중간 벡터와의 조합에 대하여 3개를 포함할 수 있다. Vector1에 대한 최상부의 전체 팔 부분에 액세스하는 것은 VALIGN 호출을 필요로 하지 않을 수 있다. 전체 중간 Vector2에 액세스하는 것은 VALIGN 호출을 필요로 하지 않을 수 있다. 다른 벡터에 대응하는 전체 "최하부" 팔 부분에 액세스하는 것은 VALIGN 호출을 필요로 하지 않을 수 있다. 16번째 스텐실에서, 2개의 추가적인 입력 벡터 및 6개의 추가적인 VALIGN 호출이 필요할 수 있다.
일단 특정 레이아웃이 읽혀지면, 16개의 결과는 테이블 형태의 SIMD 벡터 계산을 사용하여 병렬로 계산될 수 있다.
그래프(2210)는 "왼쪽" 팔 부분 내의 Vector3 및 Vector2에 대한 데이터의 결과적인 테이블 벡터를 보여준다. 위에서 y-방향으로 수행된 것과 같이 x-방향으로 유사한 계산을 수행하기 위하여, 레이아웃(2206)은 Vector2로부터 x-방향으로 왼쪽으로 시프트되며 그 안의 컴포넌트가 계산될 수 있다. Vector3 및 Vector2 모두 다로부터 데이터에 액세스하기 위하여, VALIGN은 위에 기술한 것과 유사한 방식으로 사용될 수 있다. 일 실시예에서, 테이블 벡터 계산 및 VALIGN은 레이아웃(2206)이 테이블 벡터 읽기(2011) 포맷으로 도시되는 것과 같은 값을 제공한다고 추정하면서 수행될 수 있다. 다른 실시예에서, x-방향으로 레이아웃(2206)의 위치를 시프팅하는 계산이 레이아웃(2206)의 콘텐츠를 먼저 치환하거나 전치함으로써 수행되어, 계산 및 VALIGN 연산은 마치 이들이 y-방향 관점으로부터 수행되는 것처럼 수행될 수 있다. 따라서, Vector3 및 Vector2는 치환되거나 전치될 수 있다. 다른 실시예에서, VALIGN 연산은 Vector3 및 Vector2의 요소를 합치도록 적용될 수 있으며, 이에 따라 계산이 수행될 수 있다. 마지막 결과는 메모리에 기록되기 전에 전치되어야 할 수 있다. 치환 연산은 연산(2212) 내에 예시될 수 있다.
Vector3 및 Vector2가 치환된 후에, VALIGN은 Vector3의 마지막 4개 요소를 Vector2의 최초의 12개 요소와; Vector3의 마지막 8개 요소를 Vector2의 최초의 8개 요소와; Vector3의 마지막 12개 요소를 Vector2의 최초의 4개 요소와 합하도록 수행될 수 있다. VALIGN은 왼쪽 팔 부분에 액세스하지 않아도 될 수 있다. 프로세스는 테이블 벡터를 치환하는 것을 포함하여 "오른쪽" 팔 부분에서 반복될 수 있다. 각 레이아웃 내의 데이터를 조립함으로써, SIMD 테이블 벡터 계산이 수행될 수 있다.
8번째 스텐실에서, (x-방향의 각 테이블 벡터마다 하나씩) 3개의 치환 연산뿐만 아니라, 총 6개의 VALIGN 호출이 팔 부분 및 중앙 부분의 조합을 처리하도록 필요할 수 있다. 16번째 스텐실의 경우에, 2개의 추가적인 입력 벡터뿐만 아니라 2개의 추가적인 치환과 6개의 추가적인 VALIGN 호출이 더 필요할 수 있다.
도 23은 본 개시의 실시예에 따른, 계산 처리를 위한 벡터 포맷을 적용하는 방법(2300)의 일 실시예의 흐름도이다. 방법(2300)은, 예를 들면, 프로세서(1804)에 의해 수행되는 연산을 예시할 수 있다. 방법(2300)의 어떤 부분은, 예를 들면, 라이브러리, 컴파일러, 또는 인터프리터에 의한 명령어 스트림(1802)의 생성에 의해 수행될 수 있다. 방법(2300)은 임의의 적합한 포인트에서 시작할 수 있으며 임의의 적합한 순서로 실행될 수 있다. 일 실시예에서, 방법(2300)은 (2305)에서 시작할 수 있다.
(2305)에서, 프로세서(1804)에서 실행될 명령어가 페치될 수 있다. 그러한 명령어는 FD 명령어의 형태를 포함할 수 있다. (2310)에서, 명령어는 디코딩될 수 있다. FD 명령어의 특정 타입 및 그의 파라미터가 결정될 수 있다.
일 실시예에서, (2315)에서 테이블 벡터 포맷이 FD 명령어에 적용되도록 결정될 수 있다. FD 명령어에 기초하여, 그 순서, 그 차원, 또는 다른 식별하는 측면, 입력 데이터의 특정 형상은 FD 명령어의 특정 데이터 포인트를 계산하는데 사용될 수 있다. 입력 데이터의 형상에 기초하여, 테이블 벡터의 형태 및 지원하는 명령어가 선택될 수 있다.
(2320)에서, 일 실시예에서, FD 명령어의 계산의 특정 포인트에 대한 입력 데이터의 형상을 반영하는 입력의 스텐실이 결정될 수 있다. 형상은 2 또는 3차원일 수 있다.
(2325)에서, 테이블 벡터 읽기 명령어는 FD 명령어를 지원하는 코드에 삽입될 수 있다. 일 실시예에서, 테이블 벡터 읽기 명령어는 스텐실이 테이블 벡터 읽기 명령어의 범위에 의해 덮어지도록 입력의 스텐실에 맵핑할 수 있다. 다른 실시예에서, 테이블 벡터의 수는 최소화될 수 있다. (스텐실의 각 부분에 의한 각각의 커버리지를 반영하는) 테이블 벡터 읽기의 특정 수 및 그 파라미터는 스텐실 및 FD 명령어 자체에 종속할 수 있다.
(2330)에서, 계산 명령어는 결과적인 테이블 벡터의 각 요소마다 삽입될 수 있다. 이와 같은 계산 명령어는 테이블 벡터 실행일 수 있다. 일 실시예에서, (2335)에서, 특정 벡터 계산을 지원하기 위한 정렬 및 치환 명령어가 필요에 따라 삽입될 수 있다. 단일 레지스터 또는 (읽기 명령어의 실행의 결과인) 테이블 벡터로부터의 데이터를 사용하여 만들어지는 벡터 계산은 정렬을 요구하지 않을 수 있다. 그러나 그러한 여러 레지스터 또는 테이블 벡터로부터의 데이터를 사용하여 만들어지는 벡터 계산은 그러한 여러 벡터로부터의 요소를 결합하기 위한 정렬을 요구할 수 있다. 정렬 명령어의 특정한 사용은 읽기 명령어로부터 반환되는 데이터의 형상에 따라서 이루어질 수 있다. 또한, 치환 명령어는 (x-방향 또는 z-방향과 같은) 부가적인 방향으로 벡터 계산을 수행하도록 삽입될 수 있다. 치환 명령어는 계산이 원래의 방향으로 수행되는 것과 동일한 방식으로 이러한 방향으로 계산이 진행될 수 있게 할 수 있다. 치환(permuting) 명령어의 특정 사용은 읽기 명령어로부터 반환되는 데이터의 형상에 따라서 이루어질 수 있다.
(2340)에서, 일 실시예에서, 명령어는 디스패치되고 실행될 수 있다. 일 실시예에서, 테이블 벡터 읽기는 위에 명시된 것처럼 수행될 수 있다. (2345)에서, 정렬은 필요에 따라 수행될 수 있으며 벡터 계산이 수행될 수 있다. 출력 데이터는 메모리, 캐시, 레지스터, 또는 다른 적합한 위치로 반환될 수 있다. (2350)에서, 다른 방향에 대해서, 치환 및 정렬은 필요에 따라서 수행될 수 있다. 벡터 계산이 수행될 수 있다. 출력 데이터는 반환될 수 있다. (2350)은 여러 방향에 대해서 수행될 수 있다.
(2355)에서, FD 명령어의 실행 시 추가적인 데이터 포인트가 계산되어야 하는지가 결정될 수 있다. 만일 그렇다면, 방법(2300)은 (2320)으로 되돌아갈 수 있다. 만일 그렇지 않다면, 방법(2300)은 (2360)으로 되돌아갈 수 있다.
(2360)에서, 커밋되지 않거나 기록되지 않은 데이터는 캐시, 메모리, 레지스터, 또는 다른 위치에 발행될 수 있다. (2365)에서, 명령어는 은퇴할 수 있다. 방법(2300)은 선택적으로 반복되거나, 필요에 따라 종료할 수 있다.
방법(2300)은 적합한 기준에 의해 개시될 수 있다. 또한, 비록 방법(2300)이 특정 요소의 연산을 서술하더라도, 방법(2300)은 요소의 임의의 적합한 조합 또는 형태로 수행될 수 있다. 예를 들면, 방법(2300)은 도 1 내지 도 22에 예시되는 요소 또는 방법(2300)을 구현하도록 작동할 수 있는 임의의 다른 시스템에 의해 구현될 수 있다. 이와 같이, 방법(2300)에 대하여 바람직한 개시 포인트 및 방법(2300)을 포함하는 요소의 순서는 선택된 구현에 좌우될 수 있다. 일부 실시예에서, 어떤 요소는 선택적으로 생략되고, 재구성되고, 반복되고, 또는 조합될 수 있다.
본 명세서에서 개시되는 메커니즘의 실시예는 하드웨어, 소프트웨어, 또는 그러한 구현 접근방법의 결합으로 구현될 수 있다. 본 개시의 실시예는 프로그래머블 시스템 상에서 실행하는 컴퓨터 프로그램 또는 프로그램 코드로 구현될 수 있으며, 시스템은 적어도 하나의 프로세서, (휘발성 및 비-휘발성 메모리 및/또는 저장 요소를 포함하는) 저장소 시스템, 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함할 수 있다.
프로그램 코드는 본 명세서에서 설명되는 함수를 수행하고 출력 정보를 생성하는 입력 명령어에 적용될 수 있다. 출력 정보는, 알려진 방식으로, 하나 이상의 디바이스에 적용될 수 있다. 본 출원의 목적상, 프로세싱 시스템은, 예를 들면, 디지털 신호 프로세서(DSP), 마이크로 제어기, 주문형 집적 회로(application specific integrated circuit, ASIC), 또는 마이크로프로세서와 같은 프로세서를 가진 시스템을 포함할 수 있다.
프로그램 코드는 고급의 절차적 또는 객체 지향 프로그램 언어로 구현되어 프로세싱 시스템과 소통할 수 있다. 프로그램 코드는, 필요에 따라서, 어셈블리 또는 기계어로 구현될 수도 있다. 사실, 본 명세서 설명되는 메커니즘은 특정 프로그래밍 언어에 제한되지 않는다. 어느 경우든, 언어는 컴파일되거나 해석된 언어일 수 있다.
적어도 하나의 실시예의 하나 이상의 측면은, 머신에 의해 읽힐 때 머신으로 하여금 본 명세서에서 설명되는 기술을 수행하는 로직을 만들 수 있게 하는, 프로세서 내의 다양한 로직을 표현하는 머신 판독 가능한 매체에 저장되는 대표적인 명령어에 의해 구현될 수 있다. "IP 코어"로 알려진 그러한 표현은 유형의 머신 판독 가능한 매체에 저장되어 다양한 고객이나 제조 설비에 제공되어 로직이나 프로세서를 실제로 만드는 제작 머신에 로딩될 수 있다.
이와 같은 머신 판독 가능한 저장 매체는 머신 또는 디바이스에 의해 제작되거나 형성되는 물품의 비-일시적인 유형의 구성을 포함하는데, 이러한 유형의 구성은, 제한하지 않고, 하드 디스크 같은 저장 매체, 플로피 디스크, 광디스크, 콤팩트디스크 읽기전용 메모리(CD-ROM), 재기록 가능한 콤팩트디스크(CD-RW), 및 광자기 디스크를 포함하는 다른 타입의 디스크, 읽기전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM) 같은 랜덤 액세스 메모리(RAM), 소거 가능한 프로그래머블 읽기전용 메모리(EPROM), 플래시 메모리, 전기적으로 소거 가능한 프로그래머블 읽기전용 메모리(EEPROM), 자기 또는 광학 카드와 같은 반도체 디바이스, 또는 전자적 명령어를 저장하기에 적합한 다른 임의의 타입의 미디어를 포함한다.
따라서, 본 개시의 실시예는 명령어를 포함하거나, 본 명세서에서 기술되는 구조, 회로, 장치, 프로세서 및/또는 시스템 특성을 정의하는, 하드웨어 기술 언어(Hardware Description Language, HDL)와 같은 디자인 데이터를 포함하는 비-일시적인 유형의 머신 판독 가능한 매체를 포함할 수 있다. 이와 같은 실시예는 프로그램 제품이라고도 지칭될 수도 있다.
어떤 경우에, 명령어 변환기는 명령어를 소스 명령어 집합으로부터 타겟 명령어 집합으로 변환하는데 사용될 수 있다. 예를 들면, 명령어 변환기는 하나의 명령어를 하나 이상의 다른 명령어로 (예를 들면, 정적 2진 변환, 동적 컴파일을 포함하는 동적 2진 변환을 사용하는) 변환(translate), 모핑(morph), 에뮬레이트, 그렇지 않으면, 변환(convert)하여, 코어에 의해 처리되도록 한다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어 또는 이들의 조합으로 구현될 수 있다. 명령어 변환기는 온 프로세서, 오프 프로세서, 또는 부분-온(part-on) 및 부분-오프(part-off) 프로세서일 수 있다.
그러므로 적어도 하나의 실시예에 따른 하나 이상의 명령어를 수행하는 기술이 개시된다. 특정의 예시적인 실시예가 기술되고 첨부 도면에 도시되었지만, 그러한 실시예는 그저 예시적일 뿐이지, 다른 실시예에 대한 제한이 아니며, 또한 본 발명의 기술 분야의 당업자에게는 본 개시를 학습해 볼 때 다양한 다른 변경이 명백하므로, 그러한 실시예는 특정의 해석 및 도시되고 설명된 구성으로 제한되지 않는다는 것이 이해될 것이다. 성장은 빠르지만 미래의 발전은 쉽게 예견되지 않는 본 기술분야에서, 개시된 실시예는 수반하는 청구범위에 존재하는 개시된 내용의 원칙이나 영역으로부터 벗어나지 않고도 기술적인 발전을 가능하게 함으로써, 구성 및 세부 사항에서 쉽게 변경 가능할 수 있다.

Claims (20)

  1. 프로세서로서,
    명령어를 페치하는 프론트 엔드(front end) - 상기 명령어는 복수의 차원에서 복수의 인접한 소스 데이터로부터의 입력을 사용하여 데이터 포인트를 계산함 - 와,
    상기 명령어를 디코딩하는 디코더와,
    코어를 포함하되,
    상기 코어는 상기 디코딩된 명령어에 기초하여,
    상기 복수의 인접한 소스 데이터를 읽는 복수의 테이블 벡터 읽기 연산(tabular vector read operation)을 수행하고,
    테이블 벡터 계산을 수행하여 상기 명령어를 실행하고 - 상기 테이블 벡터 계산은 상기 복수의 테이블 벡터 읽기 연산을 수행한 결과에 기초함 - ,
    상기 테이블 벡터 계산의 결과를 기록하는
    프로세서.
  2. 제 1 항에 있어서,
    상기 명령어는 유한-차분 함수(finite-difference function)인
    프로세서.
  3. 제 1 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하고 - 상기 제 2 레지스터 및 상기 제 1 레지스터는 동일한 크기를 가짐 - ,
    상기 제 1 벡터 레지스터 내의 결과 및 상기 제 2 벡터 레지스터 내의 결과에 기초하여 다른 테이블 벡터 계산을 수행하며,
    상기 테이블 벡터 계산은 복수의 계산을 병렬처리하는 것을 포함하고,
    상기 계산의 수는 상기 제 1 레지스터 및 상기 제 2 레지스터의 크기와 동일한
    프로세서.
  4. 제 1 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하고,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 부분을 결합하고 - 상기 결합된 부분은 테이블 벡터 계산의 크기와 동일함 - ,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 결합된 부분에 기초하여 다른 테이블 벡터 계산을 수행하는
    프로세서.
  5. 제 1 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터로 전치(transpose)하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터로 전치하고,
    다른 차원의 방향에서 상기 제 1 벡터 레지스터와 상기 제 2 벡터 레지스터에 기초하여 다른 테이블 벡터 계산을 수행하는
    프로세서.
  6. 제 1 항에 있어서,
    상기 테이블 벡터 읽기 연산을 수행하기 위하여,
    상기 코어는 또한,
    데이터 입력의 한 스텐실(stencil)을 읽기에 충분한 수의 테이블 읽기 연산을 맵핑하여 상기 데이터 포인트를 계산하며, 상기 스텐실은 상기 인접한 소스 데이터의 다차원 형상인
    프로세서.
  7. 제 1 항에 있어서,
    상기 테이블 벡터 읽기 연산을 수행하기 위하여,
    상기 코어는 또한,
    데이터 입력의 한 스텐실을 읽기에 충분한 최소의 테이블 읽기 연산을 맵핑하여 상기 데이터 포인트를 계산하며, 상기 스텐실은 상기 인접한 소스 데이터의 다차원 형상인
    프로세서.
  8. 프로세서 내에서 수행되는 방법으로서,
    복수의 차원에서 복수의 인접한 소스 데이터로부터의 입력을 사용하여 계산될 데이터 포인트를 결정하는 단계와,
    상기 복수의 인접한 소스 데이터를 읽는 복수의 테이블 벡터 읽기 연산을 수행하는 단계와,
    테이블 벡터 계산을 수행하여 상기 데이터 포인트를 계산하는 단계를 포함하되, 상기 테이블 벡터 계산은 상기 복수의 테이블 벡터 읽기 연산을 수행한 결과에 기초하는
    방법.
  9. 제 8 항에 있어서,
    상기 계산은 유한-차분 함수인
    방법.
  10. 제 8 항에 있어서,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하는 단계와,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하는 단계 - 상기 제 2 레지스터 및 상기 제 1 레지스터는 동일한 크기를 가짐 - 와,
    상기 제 1 벡터 레지스터 내의 결과 및 상기 제 2 벡터 레지스터 내의 결과에 기초하여 다른 테이블 벡터 계산을 수행하는 단계를 포함하되,
    상기 테이블 벡터 계산은 복수의 계산을 병렬처리하는 것을 포함하고,
    상기 계산의 수는 상기 제 1 레지스터 및 상기 제 2 레지스터의 크기와 동일한
    방법.
  11. 제 8 항에 있어서,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하는 단계와,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하는 단계와,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 부분을 결합하는 단계 - 상기 결합된 부분은 테이블 벡터 계산의 크기와 동일함 - 와,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 결합된 부분에 기초하여 다른 테이블 벡터 계산을 수행하는 단계를 포함하는
    방법.
  12. 제 8 항에 있어서,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터로 전치하는 단계와,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터로 전치하는 단계와,
    다른 차원의 방향에서 상기 제 1 벡터 레지스터와 상기 제 2 벡터 레지스터에 기초하여 다른 테이블 벡터 계산을 수행하는 단계를 더 포함하는
    방법.
  13. 제 8 항에 있어서,
    데이터 입력의 한 스텐실을 읽기에 충분한 수의 테이블 읽기 연산을 수행하여 상기 데이터 포인트를 계산하는 단계를 더 포함하되, 상기 스텐실은 상기 인접한 소스 데이터의 다차원 형상인
    방법.
  14. 명령어를 실행하기 위한 시스템으로서,
    명령어를 페치하는 프론트 엔드 - 상기 명령어는 복수의 차원에서 복수의 인접한 소스 데이터로부터의 입력을 사용하여 데이터 포인트를 계산함 - 와,
    상기 명령어를 디코딩하는 디코더와,
    코어를 포함하되,
    상기 코어는 상기 디코딩된 명령어에 기초하여,
    상기 복수의 인접한 소스 데이터를 읽는 복수의 테이블 벡터 읽기 연산을 수행하고,
    테이블 벡터 계산을 수행하여 상기 명령어를 실행하고 - 상기 테이블 벡터 계산은 상기 복수의 테이블 벡터 읽기 연산을 수행한 결과에 기초함 - ,
    상기 테이블 벡터 계산의 결과를 기록하는
    명령어 실행 시스템.
  15. 제 14 항에 있어서,
    상기 명령어는 유한-차분 함수인
    명령어 실행 시스템.
  16. 제 14 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하고 - 상기 제 2 레지스터 및 상기 제 1 레지스터는 동일한 크기를 가짐 - ,
    상기 제 1 벡터 레지스터 내의 결과 및 상기 제 2 벡터 레지스터 내의 결과에 기초하여 다른 테이블 벡터 계산을 수행하며,
    상기 테이블 벡터 계산은 복수의 계산을 병렬처리하는 것을 포함하고,
    상기 계산의 수는 상기 제 1 레지스터 및 상기 제 2 레지스터의 크기와 동일한
    명령어 실행 시스템.
  17. 제 14 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터에 저장하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터에 저장하고,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 부분을 결합하고 - 상기 결합된 부분은 테이블 벡터 계산의 크기와 동일함 - ,
    상기 제 1 벡터 레지스터 및 상기 제 2 벡터 레지스터의 결합된 부분에 기초하여 다른 테이블 벡터 계산을 수행하는
    명령어 실행 시스템.
  18. 제 14 항에 있어서,
    상기 코어는 또한,
    제 1 테이블 벡터 읽기 연산의 결과를 제 1 벡터 레지스터로 전치하고,
    제 2 테이블 벡터 읽기의 결과를 제 2 벡터 레지스터로 전치하고,
    다른 차원의 방향에서 상기 제 1 벡터 레지스터와 상기 제 2 벡터 레지스터에 기초하여 다른 테이블 벡터 계산을 수행하는
    명령어 실행 시스템.
  19. 제 14 항에 있어서,
    상기 테이블 벡터 읽기 연산을 수행하기 위하여,
    상기 코어는 또한,
    데이터 입력의 한 스텐실을 읽기에 충분한 수의 테이블 읽기 연산을 맵핑하여 상기 데이터 포인트를 계산하며, 상기 스텐실은 상기 인접한 소스 데이터의 다차원 형상인
    명령어 실행 시스템.
  20. 제 14 항에 있어서,
    상기 테이블 벡터 읽기 연산을 수행하기 위하여,
    상기 코어는 또한,
    데이터 입력의 한 스텐실을 읽기에 충분한 최소의 테이블 읽기 연산을 맵핑하여 상기 데이터 포인트를 계산하며, 상기 스텐실은 상기 인접한 소스 데이터의 다차원 형상인
    명령어 실행 시스템.
KR1020177005143A 2014-09-26 2015-08-19 계산 처리를 위한 벡터 포맷용 명령어 및 로직 KR102296619B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/498,064 US10061746B2 (en) 2014-09-26 2014-09-26 Instruction and logic for a vector format for processing computations
US14/498,064 2014-09-26
PCT/US2015/045899 WO2016048493A1 (en) 2014-09-26 2015-08-19 Instruction and logic for a vector format for processing computations

Publications (2)

Publication Number Publication Date
KR20170036036A KR20170036036A (ko) 2017-03-31
KR102296619B1 true KR102296619B1 (ko) 2021-08-31

Family

ID=55581737

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005143A KR102296619B1 (ko) 2014-09-26 2015-08-19 계산 처리를 위한 벡터 포맷용 명령어 및 로직

Country Status (7)

Country Link
US (1) US10061746B2 (ko)
EP (1) EP3198401A4 (ko)
JP (1) JP6415698B2 (ko)
KR (1) KR102296619B1 (ko)
CN (1) CN106575219B (ko)
TW (2) TWI590079B (ko)
WO (1) WO2016048493A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107315715B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行矩阵加/减运算的装置和方法
US10332407B2 (en) * 2017-07-07 2019-06-25 Walmart Apollo, Llc Systems and methods for providing emergency alerts at emergency landing areas of unmanned aerial vehicles
CN107833176A (zh) 2017-10-30 2018-03-23 上海寒武纪信息科技有限公司 一种信息处理方法及相关产品
US20210133854A1 (en) 2018-09-13 2021-05-06 Shanghai Cambricon Information Technology Co., Ltd. Information processing method and terminal device
US10896043B2 (en) * 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
JP7115563B2 (ja) * 2018-12-07 2022-08-09 日本電気株式会社 コンパイル装置、コンパイル方法、及び制御プログラム
CN115185524A (zh) * 2021-04-01 2022-10-14 北京希姆计算科技有限公司 向量指令的识别方法、装置、电子设备及计算机可读存储介质

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62120574A (ja) 1985-11-20 1987-06-01 Fujitsu Ltd ベクトル処理装置
GB2329043B (en) * 1997-09-05 2000-04-26 Geco As Method of determining the response caused by model alterations in seismic simulations
US6351802B1 (en) 1999-12-03 2002-02-26 Intel Corporation Method and apparatus for constructing a pre-scheduled instruction cache
US20130212353A1 (en) 2002-02-04 2013-08-15 Tibet MIMAR System for implementing vector look-up table operations in a SIMD processor
US7275148B2 (en) 2003-09-08 2007-09-25 Freescale Semiconductor, Inc. Data processing system using multiple addressing modes for SIMD operations and method thereof
US20060111881A1 (en) * 2004-11-23 2006-05-25 Warren Jackson Specialized processor for solving optimization problems
JP5279016B2 (ja) * 2008-11-21 2013-09-04 国立大学法人 東京大学 地球内部を伝播する地震波についての数値解析に用いる演算子生成方法、及び演算子生成装置、並びに地球内部を伝播する地震波についての数値解析を行うシミュレーション装置
US8892412B2 (en) * 2009-03-11 2014-11-18 Exxonmobil Upstream Research Company Adjoint-based conditioning of process-based geologic models
JP5443482B2 (ja) * 2009-05-21 2014-03-19 パナソニック株式会社 グラフィクス描画装置、グラフィクス描画方法、グラフィクス描画プログラム、グラフィクス描画プログラムを記録した記録媒体、グラフィクス描画用集積回路
US8423745B1 (en) * 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
US20110249744A1 (en) * 2010-04-12 2011-10-13 Neil Bailey Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core
US8582909B2 (en) * 2011-05-23 2013-11-12 Intel Corporation Adaptive multi-grid contrast optical flow
DE112011105664T5 (de) * 2011-09-26 2014-08-21 Intel Corporation Instruktion und Logik zum Bereitstellen einer Vektorstreuungs-Op- und -Hol-Op-Funktionalität
US9454366B2 (en) * 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9361115B2 (en) * 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US9772854B2 (en) * 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US10528345B2 (en) * 2015-03-27 2020-01-07 Intel Corporation Instructions and logic to provide atomic range modification operations
US9769356B2 (en) * 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor

Also Published As

Publication number Publication date
JP2017532639A (ja) 2017-11-02
JP6415698B2 (ja) 2018-10-31
CN106575219A (zh) 2017-04-19
TW201717056A (zh) 2017-05-16
CN106575219A8 (zh) 2017-07-11
TWI590079B (zh) 2017-07-01
TWI556118B (zh) 2016-11-01
EP3198401A4 (en) 2018-05-23
US10061746B2 (en) 2018-08-28
WO2016048493A1 (en) 2016-03-31
US20160092400A1 (en) 2016-03-31
TW201633182A (zh) 2016-09-16
EP3198401A1 (en) 2017-08-02
KR20170036036A (ko) 2017-03-31
CN106575219B (zh) 2020-06-09

Similar Documents

Publication Publication Date Title
CN108292215B (zh) 用于加载-索引和预取-聚集操作的指令和逻辑
CN108369516B (zh) 用于加载-索引和预取-分散操作的指令和逻辑
US9823925B2 (en) Instruction and logic for a logical move in an out-of-order processor
US20170286122A1 (en) Instruction, Circuits, and Logic for Graph Analytics Acceleration
KR102296619B1 (ko) 계산 처리를 위한 벡터 포맷용 명령어 및 로직
US10346170B2 (en) Performing partial register write operations in a processor
US10514927B2 (en) Instruction and logic for sorting and retiring stores
US20170177364A1 (en) Instruction and Logic for Reoccurring Adjacent Gathers
US20170177363A1 (en) Instructions and Logic for Load-Indices-and-Gather Operations
TW201732550A (zh) 用於載入索引和散佈運算之指令和邏輯
US20180074827A1 (en) Instruction and Logic for Dynamic Store Elimination
WO2017105715A1 (en) Instructions and logic for set-multiple-vector-elements operations
US9582432B2 (en) Instruction and logic for support of code modification in translation lookaside buffers
US20170351516A1 (en) Instruction and Logic for Total Store Elimination
US20210096866A1 (en) Instruction length decoding
US10133582B2 (en) Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
US10387797B2 (en) Instruction and logic for nearest neighbor unit
US9928066B2 (en) Instruction and logic for encoded word instruction compression
US20170177358A1 (en) Instruction and Logic for Getting a Column of Data
US20170177354A1 (en) Instructions and Logic for Vector-Based Bit Manipulation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant