KR20110112453A - 내적 연산을 수행하기 위한 명령 및 논리 - Google Patents

내적 연산을 수행하기 위한 명령 및 논리 Download PDF

Info

Publication number
KR20110112453A
KR20110112453A KR1020117020282A KR20117020282A KR20110112453A KR 20110112453 A KR20110112453 A KR 20110112453A KR 1020117020282 A KR1020117020282 A KR 1020117020282A KR 20117020282 A KR20117020282 A KR 20117020282A KR 20110112453 A KR20110112453 A KR 20110112453A
Authority
KR
South Korea
Prior art keywords
data
packed
product
operand
register
Prior art date
Application number
KR1020117020282A
Other languages
English (en)
Other versions
KR101300431B1 (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 KR20110112453A publication Critical patent/KR20110112453A/ko
Application granted granted Critical
Publication of KR101300431B1 publication Critical patent/KR101300431B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • 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
    • 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

Abstract

내적 연산을 수행하는 방법, 장치, 및 프로그램 수단. 일 실시예에서, 장치는 제1 명령을 실행하는 실행 리소스들을 포함한다. 상기 제1 명령에 응답하여, 상기 실행 리소스들은 적어도 2개의 피연산자의 내적과 동등한 결과 값을 저장 위치에 저장한다.

Description

내적 연산을 수행하기 위한 명령 및 논리{INSTRUCTION AND LOGIC FOR PERFORMING A DOT-PRODUCT OPERATION}
본 발명은 수학 연산을 수행하는 프로세싱 장치 및 관련 소프트웨어 및 소프트웨어 시퀀스의 분야에 관한 것이다.
컴퓨터 시스템은 우리 사회에 점점 더 많이 보급되었다. 컴퓨터의 프로세싱 능력은 매우 다양한 직업들에서 근로자들의 효율 및 생산성을 증가시켰다. 컴퓨터를 구입하고 소유하는 비용이 계속해서 떨어짐에 따라서, 더욱더 많은 소비자들이 보다 신형의 보다 빠른 머신을 이용할 수 있게 되었다. 또한, 많은 사람들이 자유로움 때문에 노트북 컴퓨터의 사용을 즐기고 있다. 모바일 컴퓨터는 사용자들이 사무실을 떠나거나 여행할 때 그들의 데이터를 용이하게 운반하여 그 데이터를 가지고 일할 수 있게 한다. 이러한 시나리오는 마케팅 직원과, 회사 임원에게, 그리고 학생들에게조차 매우 익숙한 것이다.
프로세서 기술이 진보함에 따라서, 이를 프로세서를 갖는 머신에서 실행하는 보다 새로운 소프트웨어 코드도 생성되고 있다. 사용자들은 일반적으로 사용중인 소프트웨어의 타입에 관계없이 그들의 컴퓨터로부터 보다 높은 성능을 기대하고 요구한다. 프로세서 내에서 실제로 수행되고 있는 명령들 및 연산들의 종류로부터 하나의 그러한 문제가 발생할 수 있다. 어떤 타입의 연산들은 그 연산들의 복잡성 및/또는 필요한 회로의 타입에 기초하여 완료하는 데 더 많은 시간을 요구한다. 이것은 어떤 복잡한 연산들이 프로세서 내에서 실행되는 방법을 최적화할 기회를 제공한다.
미디어 애플리케이션들은 10년 이상 마이크로프로세서 개발을 주도해오고 있다. 사실, 최근 수년 내 대부분의 컴퓨팅 업그레이드들은 미디어 애플리케이션들에 의해 주도되었다. 이들 업그레이드들은 주로 소비자 부문 내에서 일어났지만, 오락 증진 교육 및 통신 목적으로 기업 부문에서도 상당한 진보가 보여졌다. 그럼에도 불구하고, 미래의 미디어 애플리케이션들은 한층 더 높은 계산 요건을 요구할 것이다. 그 결과, 장래의 개인 컴퓨팅 경험은 사용하기가 더욱 용이할 뿐만 아니라, 시청각 효과에서 한층 더 윤택할 것이며, 더 중요한 것은, 컴퓨팅이 통신과 병합할 것이라는 점이다.
따라서, 이미지의 디스플레이뿐만 아니라, 총괄하여 콘텐츠라 불리는, 오디오 및 비디오 데이터의 재생은 현재의 컴퓨팅 장치에 있어서 점점 더 인기 있는 애플리케이션들이 되었다. 필터링 및 컨볼로션 연산들은 이미지 데이터 및 비디오 데이터 등의 콘텐츠 데이터에 대해 수행되는 가장 흔한 연산들 중 일부이다. 그러한 연산들은 계산 집약적(computationally intensive)이지만, 예를 들면, SIMD(single instruction multiple data) 레지스터와 같은, 다양한 데이터 저장 장치들을 이용한 효율적인 구현을 통하여 개발될 수 있는 높은 수준의 데이터 병렬 기능(parallelism)을 제공한다. 다수의 현재의 아키텍처들은 또한 다수의 피연산자에 대해 다양한 수학 연산들을 수행하고, 그에 의해 처리량을 줄이고 그 수학 연산들을 수행하는 데 필요한 클록 사이클의 수를 증가시키기 위해, 다중 연산, 명령, 또는 하위 명령(sub-instructions)(종종 "마이크로 연산"(micro-operations) 또는 "uops"라 불림)을 필요로 한다.
예를 들면, 프로세싱 장치, 시스템 또는 컴퓨팅 시스템 내의 다양한 데이터타입(datatype)들에 의해 표현되는 2개 이상의 수의 곱들을 더하는 것을 포함하는, 내적(dot-product)을 생성하는 데 필요한 하나 이상의 연산들을 수행하기 위해 다수의 명령들로 이루어지는 명령 시퀀스가 요구될 수 있다. 그러나, 그러한 종래 기술의 기법들은 내적을 생성하기 위하여 다수의 프로세싱 사이클들을 요구할 수 있고 프로세서 또는 시스템으로 하여금 불필요한 전력을 소비하게 할 수 있다. 또한, 일부 종래 기술의 기법들은 연산될 수 있는 피연산자 데이터타입들에서 제한될 수 있다.
현재 SIMD 내적 명령은 이용 가능하지 않다. SIMD 내적 명령의 존재 없이는, 오디오/비디오 압축, 프로세싱, 및 조작 등의 애플리케이션들에서 동일한 결과를 달성하기 위해 많은 수의 명령들 및 데이터 레지스터들이 요구될 수 있다.
본 발명의 실시예들에 따른 적어도 하나의 내적 명령은 코드 오버헤드(code overhead) 및 리소스 요건을 줄일 수 있다. 본 발명의 실시예들은 SIMD 관련 하드웨어를 이용하는 알고리즘으로서 내적 연산을 구현하는 방법을 제공한다.
현재, SIMD 레지스터 내의 데이터에 대해 내적 연산을 수행하는 것은 다소 어렵고 지루하다. 일부 알고리즘들은 산술 연산들을 실행하는 명령들의 실제 수보다 그 연산들을 위한 데이터를 준비하기 위해 더 많은 명령들을 필요로 한다. 본 발명의 실시예들에 따른 내적 연산의 실시예들을 구현함으로써, 내적 프로세싱을 달성하기 위해 필요한 명령들의 수가 대폭 감소될 수 있다.
본 발명은 첨부 도면들에서 제한이 아니라 예시로서 도시된다.
도 1a는 본 발명의 일 실시예에 따른 내적 연산을 위한 명령을 실행하는 실행 유닛들을 포함하는 프로세서와 함께 형성된 컴퓨터 시스템의 블록도이다.
도 1b는 본 발명의 대체 실시예에 따른 다른 예시적인 컴퓨터 시스템의 블록도이다.
도 1c는 본 발명의 다른 대체 실시예에 따른 또 다른 예시적인 컴퓨터 시스템의 블록도이다.
도 2는 본 발명에 따른 내적 연산을 수행하는 논리 회로들을 포함하는 일 실시예의 프로세스에 대한 마이크로 아키텍처의 블록도이다.
도 3a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 패킹된(packed) 데이터 타입 표현들을 도시한다.
도 3b는 대체 실시예에 따른 패킹된 데이터 타입들을 도시한다.
도 3c는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 부호 있는(signed) 및 부호 없는(unsigned) 패킹된 데이터 타입 표현들을 도시한다.
도 3d는 연산 부호(opcode) 포맷의 일 실시예를 도시한다.
도 3e는 대체 연산 부호(opcode) 포맷을 도시한다.
도 3f는 또 다른 대체 연산 부호 포맷을 도시한다.
도 4는 본 발명에 따른 패킹된 데이터 피연산자들에 대한 내적 연산을 수행하는 논리의 일 실시예의 블록도이다.
도 5a는 본 발명의 일 실시예에 따른 단일 정밀도(single precision) 패킹된 데이터 피연산자들에 대한 내적 연산을 수행하는 논리의 블록도이다.
도 5b는 본 발명의 일 실시예에 따른 배 정밀도(double precision) 패킹된 데이터 피연산자들에 대한 내적 연산을 수행하는 논리의 블록도이다.
도 6a는 본 발명의 일 실시예에 따른 내적 연산을 수행하는 회로의 블록도이다.
도 6b는 본 발명의 다른 실시예에 따른 내적 연산을 수행하는 회로의 블록도이다.
도 7a는 일 실시예에 따른, DPPS 명령을 실행함으로써 수행될 수 있는 연산들의 의사 코드 표현이다.
도 7b는 일 실시예에 따른, DPPD 명령을 실행함으로써 수행될 수 있는 연산들의 의사 코드 표현이다.
다음의 설명은 프로세싱 장치, 컴퓨터 시스템, 또는 소프트웨어 프로그램 내에서 내적 연산을 수행하는 기법의 실시예들을 설명한다. 다음의 설명에서는, 본 발명에 대한 보다 철저한 이해를 제공하기 위하여 프로세서 타입, 마이크로 아키텍처 조건, 이벤트, 인에이블먼트 메커니즘(enablement mechanisms) 등과 같은 다수의 구체적인 상세들이 제시된다. 그러나, 이 기술의 숙련자라면 본 발명이 그러한 구체적인 상세 없이도 실시될 수 있다는 것을 알 것이다. 또한, 본 발명을 불필요하게 모호하게 하는 것을 피하기 위해 일부 잘 알려진 구조, 회로 등은 상세히 제시되지 않았다.
다음의 실시예들은 프로세서에 관련하여 설명되지만, 다른 실시예들은 다른 타입의 집적 회로들 및 논리 장치들에 적용 가능하다. 본 발명의 동일한 기법들 및 교시들은 보다 높은 파이프라인 처리율 및 향상된 성능으로부터 이익을 얻을 수 있는 다른 타입의 회로들 및 반도체 장치들에 쉽게 적용될 수 있다. 본 발명의 교시들은 데이터 조작을 수행하는 임의의 프로세서 또는 머신에 적용 가능하다. 그러나, 본 발명은 256 비트, 128 비트, 64 비트, 32 비트, 또는 16 비트 데이터 연산을 수행하는 프로세서 또는 머신에 제한되지 않고 패킹된 데이터의 조작이 요구되는 임의의 프로세서 및 머신에 적용될 수 있다.
다음의 설명에서는, 설명을 위하여, 다수의 구체적인 상세들이 본 발명의 철저한 이해를 제공하기 위해 제시된다. 그러나, 이 기술의 통상의 기술을 가진 자라면 본 발명을 실시하기 위해 이들 구체적인 상세가 필요하지는 않다는 것을 알 것이다. 그 밖에도, 본 발명을 불필요하게 모호하게 하지 않기 위하여 잘 알려진 전기 구조들 및 회로들은 특히 상세히 제시되지 않았다. 또한, 다음의 설명은 예시들을 제공하고, 첨부 도면들은 설명을 위해 다양한 예시들을 보여준다. 그러나, 이들 예시들은 본 발명의 모든 가능한 구현들의 총망라한 목록을 제공하기 위한 것이라기보다는 본 발명의 예시들을 제공하기 위한 것에 불과하므로 제한적인 의미로 해석되어서는 안 된다.
아래의 예시들은 실행 유닛들 및 논리 회로들에 관련해서 명령 처리 및 분배를 설명하지만, 본 발명의 다른 실시예들은 소프트웨어로 달성될 수 있다. 일 실시예에서, 본 발명의 방법들은 머신 실행가능 명령들로 구현된다. 그 명령들은 그 명령들로 프로그램되어 있는 범용 또는 특수 목적 프로세서로 하여금 본 발명의 단계들을 수행하게 하기 위해 이용될 수 있다. 본 발명은 본 발명에 따른 프로세스를 수행하도록 컴퓨터(또는 다른 전자 장치)를 프로그램하기 위해 이용될 수 있는 명령들이 저장되어 있는 머신 또는 컴퓨터 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품 또는 소프트웨어로서 제공될 수 있다. 다르게는, 본 발명의 단계들은 그 단계들을 수행하기 위한 하드와이어된 논리(hardwired logic)를 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그램된 컴퓨터 컴포넌트들 및 주문형(custom) 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수도 있다. 그러한 소프트웨어는 시스템 내의 메모리 내에 저장될 수 있다. 유사하게, 그 코드는 네트워크를 통하여 또는 다른 컴퓨터 판독가능 매체를 경유하여 분배될 수 있다.
따라서 머신 판독가능 매체는 머신(예를 들면, 컴퓨터)이 판독할 수 있는 형태로 정보를 저장 또는 송신하는 임의의 메커니즘을 포함할 수 있지만, 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc, Read-Only Memory), 및 자기-광학 디스크, ROM(Read-Only Memory), RAM(Random Access Memory), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드, 플래시 메모리, 인터넷을 통한 송신, 전기, 광학, 음향 또는 다른 형태의 전파 신호(예를 들면, 반송파, 적외선 신호, 디지털 신호 등) 등에 제한되지 않는다. 따라서, 컴퓨터 판독가능 매체는 머신(예를 들면, 컴퓨터)이 판독할 수 있는 형태로 전자 명령 또는 정보를 저장 또는 송신하기에 적합한 임의의 타입의 매체/머신 판독가능 매체를 포함한다. 또한, 본 발명은 컴퓨터 프로그램 제품으로서 다운로드될 수도 있다. 그러므로, 프로그램은 원격 컴퓨터(예를 들면, 서버)로부터 요청 컴퓨터(예를 들면, 클라이언트)로 전송될 수 있다. 프로그램의 전송은 통신 링크(예를 들면, 모뎀, 네트워크 연결 등)를 통하여 반송파 또는 다른 전파 매체에 구현된 전기, 광학, 음향, 또는 다른 형태의 데이터 신호들을 경유하여 이루어질 수 있다.
디자인은 작성으로부터 시뮬레이션을 거쳐 제조에 이르기까지 다양한 단계들을 거칠 수 있다. 디자인을 표현하는 데이터는 다수의 방법으로 그 디자인을 표현할 수 있다. 먼저, 시뮬레이션에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어 또는 다른 기능적 기술 언어를 이용하여 표현될 수 있다. 또한, 논리 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 디자인 프로세스의 일부 단계들에서 생성될 수 있다. 더욱이, 대부분의 디자인들은, 일부 단계에서, 하드웨어 모델 내의 다양한 장치들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 종래의 반도체 제조 기법들이 이용되는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하기 위해 사용되는 마스크들에 대한 상이한 마스크 층들 상의 다양한 특징들의 유무를 지정하는 데이터일 수 있다. 디자인의 임의의 표현에서, 데이터는 임의의 형태의 머신 판독가능한 매체에 저장될 수 있다. 그러한 정보를 송신하기 위해 변조되거나 또는 다르게 생성된 광학 또는 전기파, 메모리, 또는 디스크 등의 자기 또는 광학 저장 장치는 머신 판독가능한 매체일 수 있다. 이들 매체들 중 어떤 것이라도 디자인 또는 소프트웨어 정보를 "반송"(carry) 또는 "표시"(indicate)할 수 있다. 코드 또는 디자인을 표시 또는 반송하는 전기 반송파가 송신되는 경우, 그 전기 신호의 복사, 버퍼링, 또는 재송신이 수행되는 한은, 새로운 사본이 만들어진다. 따라서, 통신 공급자 또는 네트워크 공급자는 본 발명의 기법들을 구현하는 물품(반송파)의 사본들을 만들 수 있다.
최신 프로세서들에서는, 각종의 코드 및 명령들을 처리 및 실행하기 위해 다수의 상이한 실행 유닛들이 이용된다. 일부 명령들은 보다 빠르게 완료하는 반면 다른 명령들은 엄청난 수의 클록 사이클을 필요로 할 수 있으므로 모든 명령들이 동등하게 생성되지는 않는다. 명령들의 처리율이 보다 빠를수록, 프로세스의 전체 성능은 더 낫다. 따라서 같은 수의 명령들을 가능한 한 빨리 실행하는 것이 유리할 것이다. 그러나, 복잡성이 더 크고 실행 시간 및 프로세서 리소스의 점에서 더 많은 것을 요구하는 어떤 명령들이 있다. 예를 들면, 부동 소수점 명령들, 로드/저장 동작들, 데이터 이동 등이 있다.
더욱더 많은 컴퓨터 시스템들이 인터넷 및 멀티미디어 애플리케이션들에서 사용됨에 따라서, 시간이 지나면서 추가적인 프로세서 지원이 도입되었다. 예를 들면, SIMD(Single Instruction, Multiple Data) 정수/부동 소수점 명령들 및 SSE(Streaming SIMD Extension)들은 특정 프로그램 태스크를 수행하는 데 필요한 명령들의 총수를 줄이고, 이는 또 전력 소비를 줄일 수 있는, 명령들이다. 이들 명령들은 복수의 데이터 엘리먼트들에 대해 병렬로 작용함으로써 소프트웨어 성능을 촉진할 수 있다. 그 결과, 비디오, 음성, 및 이미지/사진 프로세싱을 포함한 광범위한 애플리케이션들에서 성능 이득이 달성될 수 있다. 마이크로프로세서 및 유사한 타입의 논리 회로에서의 SIMD 명령들의 구현은 통상적으로 다수의 문제들을 수반한다. 또한, SIMD 연산들의 복잡성으로 인해 종종 데이터를 정확히 처리 및 조작하기 위하여 추가적인 회로가 요구된다.
본 발명의 실시예들은 내적 연산을 구현하기 위한 명령을 수반한다. 내적 연산은 일반적으로 적어도 2개의 값들을 곱하고 그 곱을 적어도 2개의 다른 값들의 곱에 더하는 것을 수반한다. 다른 내적을 생성하기 위해 다양한 내적 연산들의 결과를 더하는 것을 포함하는, 다른 변화들이 일반적인 내적 알고리즘에서 이루어질 수 있다. 예를 들면, 데이터 엘리먼트들에 적용되는 일 실시예에 따른 내적 연산은 일반적으로 다음과 같이 표현될 수 있다:
DEST1 ← SRC1 * SRC2;
DEST2 ← SRC3 * SRC4;
DEST3 ← DEST1 + DEST2;
패킹된 SIMD 데이터 피연산자에 있어서, 이 흐름(flow)은 각 피연산자의 각 데이터 엘리먼트에 적용될 수 있다.
상기 흐름에서, "DEST" 및 "SRC"는 대응하는 데이터 또는 피연산자의 소스(source) 및 데스티네이션(destination)을 나타내는 일반적인 용어들이다. 일부 실시예들에서, 그것들은 도시된 것들과는 다른 이름 또는 기능을 갖는 레지스터들, 메모리, 또는 다른 저장 영역들에 의해 구현될 수 있다. 예를 들면, 일 실시예에서, DEST1 및 DEST2는 제1 및 제2 임시(temporary) 저장 영역(예를 들면, "TEMP1" 및 "TEMP2" 레지스터)일 수 있고, SRC1 및 SRC2는 제1 및 제2 데스티네이션 저장 영역(예를 들면, "DEST1" 및 "DEST2" 레지스터)일 수 있다. 다른 실시예들에서, SRC 및 DEST 저장 영역들 중 2개 이상은 동일한 저장 영역(예를 들면, SIMD 레지스터) 내의 상이한 데이터 저장 엘리먼트들에 대응할 수 있다. 또한, 일 실시예에서, 내적 연산은 상기 일반적인 흐름에 의해 생성된 내적들의 합계를 생성할 수 있다.
도 1a는 본 발명의 일 실시예에 따른 내적 연산을 위한 명령을 실행하는 실행 유닛들을 포함하는 프로세서와 함께 형성된 예시적인 컴퓨터 시스템의 블록도이다. 시스템(100)은 여기서 설명되는 실시예에서와 같은, 본 발명에 따른, 데이터 처리를 위한 알고리즘들을 수행하는 논리를 포함하는 실행 유닛들을 이용하는 프로세서(102)와 같은 컴포넌트를 포함한다. 시스템(100)은 캘리포니아주, 산타 클라라의 인텔사로부터 입수가능한 PENTIUM® Ⅲ, PENTIUM® 4, XeonTM, Itanium®, XScaleTM 및/또는 StrongARMTM 마이크로프로세서들을 기반으로 하는 프로세싱 시스템들을 나타내지만, 다른 시스템들(다른 마이크로프로세서를 갖는 PC, 엔지니어링 워크스테이션, 셋톱 박스 등을 포함함)도 이용될 수 있다. 일 실시예에서, 샘플 시스템(100)은 워싱턴주, 레드먼드의 마이크로소프트사로부터 입수가능한 WINDOWSTM 운영 체제의 버전을 실행할 수 있지만, 다른 운영 체제들(예를 들면 UNIX 및 Linux), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스도 이용될 수 있다. 따라서, 본 발명의 실시예들은 하드웨어 회로와 소프트웨어의 임의의 특정 조합에 제한되지 않는다.
실시예들은 컴퓨터 시스템에 제한되지 않는다. 본 발명의 대체 실시예들은 핸드헬드 장치 및 임베디드 애플리케이션과 같은 다른 장치들에서 이용될 수 있다. 핸드헬드 장치의 일부 예시들은 휴대폰, 인터넷 프로토콜 장치, 디지털 카메라, PDA(personal digital assistant), 및 핸드헬드 PC를 포함한다. 임베디드 애플리케이션은 마이크로 컨트롤러, DSP(digital signal processor), 시스템 온 칩(system on a chip), 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, WAN(wide area network) 스위치, 또는 피연산자들에 대한 내적 연산을 수행하는 임의의 다른 시스템을 포함할 수 있다. 또한, 멀티미디어 애플리케이션들의 효율을 향상시키기 위해 명령들이 몇 개의 데이터에 동시에 작용할 수 있게 하는 일부 아키텍처들이 구현되었다. 데이터의 타입 및 볼륨이 증가함에 따라서, 컴퓨터 및 그의 프로세서는 보다 효율적인 방법으로 데이터를 조작하도록 강화되어야 한다.
도 1a는 본 발명의 일 실시예에 따른 하나 이상의 피연산자들로부터의 데이터 엘리먼트들의 내적을 계산하는 알고리즘을 수행하는 하나 이상의 실행 유닛들(108)을 포함하는 프로세서(102)와 함께 형성된 컴퓨터 시스템(100)의 블록도이다. 일 실시예는 단일 프로세서 데스크톱 또는 서버 시스템에 관련하여 설명될 수 있지만, 대체 실시예들은 멀티프로세서 시스템에 포함될 수 있다. 시스템(100)은 허브 아키텍처의 예시이다. 컴퓨터 시스템(100)은 데이터 신호를 처리하는 프로세서(102)를 포함한다. 프로세서(102)는 CISC(complex instruction set computer) 마이크로프로세서, RISC(reduced instruction set computing) 마이크로프로세서, VLIW(very long instruction word) 마이크로프로세서, 명령 세트들의 조합을 구현하는 프로세서, 또는, 예를 들면, DSP와 같은 임의의 다른 프로세서 장치일 수 있다. 프로세서(102)는 프로세서(102)와 시스템(100) 내의 다른 컴포넌트들 사이에 데이터 신호를 송신할 수 있는 프로세서 버스(110)에 연결된다. 시스템(100)의 엘리먼트들은 이 기술에 정통한 자들에게 잘 알려져 있는 각각의 종래의 기능들을 수행한다.
일 실시예에서, 프로세서(102)는 레벨 1(L1) 내부 캐시 메모리(104)를 포함한다. 아키텍처에 따라서, 프로세서(102)는 단일 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 다르게는, 다른 실시예에서, 캐시 메모리는 프로세서(102)의 외부에 존재할 수 있다. 다른 실시예들은 또한 특정 구현 및 필요에 따라서 내부 캐시와 외부 캐시 쌍방의 조합을 포함할 수 있다. 레지스터 파일(106)은 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터, 및 명령 포인터 레지스터를 포함하는 다양한 레지스터들에 상이한 타입의 데이터를 저장할 수 있다.
정수 및 부동 소수점 연산을 수행하는 논리를 포함하는 실행 유닛(108)도 프로세서(102) 내에 존재한다. 프로세서(102)는 또한 특정 매크로명령들(macro-instructions)에 대한 마이크로코드를 저장하는 마이크로코드(ucode) ROM을 포함한다. 이 실시예에 있어서, 실행 유닛(108)은 패킹된 명령 세트(109)를 처리하는 논리를 포함한다. 일 실시예에서, 패킹된 명령 세트(109)는 다수의 피연산자들의 내적을 계산하기 위한 패킹된 내적 명령을 포함한다. 명령들을 실행하는 관련 회로와 함께, 범용 프로세서(102)의 명령 세트에 패킹된 명령 세트(109)를 포함함으로써, 다수의 멀티미디어 애플리케이션에 의해 이용되는 연산들은 범용 프로세서(102)에서 패킹된 데이터를 이용하여 수행될 수 있다. 따라서, 다수의 멀티미디어 애플리케이션들은 패킹된 데이터에 대한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전폭(full width)을 이용함으로써 가속될 수 있고 보다 효율적으로 실행될 수 있다. 이에 의해 한번에 하나씩 데이터 엘리먼트를 하나 이상의 연산을 수행하기 위해 프로세서의 데이터 버스를 가로질러 보다 작은 단위의 데이터를 전송할 필요가 제거될 수 있다.
실행 유닛(108)의 대체 실시예들은 또한 마이크로컨트롤러, 임베디드 프로세서, 그래픽 장치, DSP, 및 다른 타입의 논리 회로에서도 이용될 수 있다. 시스템(100)은 메모리(120)를 포함한다. 메모리(120)는 DRAM(dynamic random access memory) 장치, SRAM(static random access memory) 장치, 플래시 메모리 장치, 또는 다른 메모리 장치일 수 있다. 메모리(120)는 프로세서(102)에 의해 실행될 수 있는 데이터 신호에 의해 표현된 데이터 및/또는 명령들을 저장할 수 있다.
시스템 논리 칩(116)은 프로세서 버스(110) 및 메모리(120)에 연결된다. 도시된 실시예의 시스템 논리 칩(116)은 MCH(memory controller hub)이다. 프로세서(102)는 프로세서 버스(110)를 통하여 MCH(116)에 통신할 수 있다. MCH(116)는 명령 및 데이터 저장을 위해 및 그래픽 커맨드, 데이터 및 텍스처의 저장을 위해 메모리(120)에 고대역폭 메모리 경로(118)를 제공한다. MCH(116)는 프로세서(102), 메모리(120), 및 시스템(100) 내의 다른 컴포넌트들 사이에 데이터 신호들을 디렉트(direct)하고 프로세서 버스(110), 메모리(120), 및 시스템 I/O(122) 사이에 그 데이터 신호들을 브리지(bridge)하기 위한 것이다. 일부 실시예들에서, 시스템 논리 칩(116)은 그래픽 컨트롤러(112)에 연결하기 위한 그래픽 포트를 제공할 수 있다. MCH(116)는 메모리 인터페이스(118)를 통하여 메모리(120)에 연결된다. 그래픽 카드(112)는 AGP(Accelerated Graphics Port) 인터커넥트(114)를 통하여 MCH(116)에 연결된다.
시스템(100)은 전용(proprietary) 허브 인터페이스 버스(122)를 이용하여 MCH(116)를 I/O 컨트롤러 허브(ICH)(130)에 연결한다. ICH(130)는 로컬 I/O 버스를 통하여 일부 I/O 장치들에의 직접 접속을 제공한다. 로컬 I/O 버스는 주변장치들을 메모리(122), 칩셋, 및 프로세서(102)에 접속하기 위한 고속 I/O 버스이다. 일부 예시들은 오디오 컨트롤러, 펌웨어 허브(플래시 BIOS)(128), 무선 송수신기(126), 데이터 저장 장치(124), 사용자 입력 및 키보드 인터페이스를 포함하는 레거시 I/O 컨트롤러, USB(Universal Serial Bus)와 같은 직렬 확장 포트, 및 네트워크 컨트롤러(134) 등이다. 데이터 저장 장치(124)는 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 장치, 플래시 메모리 장치, 또는 다른 대용량 저장 장치를 포함할 수 있다.
시스템의 다른 실시예에 있어서, 내적 명령을 갖는 알고리즘을 실행하는 실행 유닛은 시스템 온 칩과 함께 사용될 수 있다. 시스템 온 칩의 일 실시예는 프로세서 및 메모리로 이루어진다. 하나의 그러한 시스템에 대한 메모리는 플래시 메모리이다. 플래시 메모리는 프로세서 및 다른 시스템 컴포넌트들과 동일한 다이에 위치할 수 있다. 또한, 메모리 컨트롤러 또는 그래픽 컨트롤러와 같은 다른 논리 블록들도 시스템 온 칩 상에 위치할 수 있다.
도 1b는 본 발명의 일 실시예의 원리들을 구현하는 데이터 프로세싱 시스템(140)을 도시한다. 이 기술의 숙련자라면 여기서 설명된 실시예들은 본 발명의 범위에서 일탈하지 않고 대체 프로세싱 시스템과 함께 이용될 수 있다는 것을 쉽사리 알 것이다.
컴퓨터 시스템(140)은 내적 연산을 포함한 SIMD 연산을 수행할 수 있는 프로세싱 코어(159)를 포함한다. 일 실시예에 있어서, 프로세싱 코어(159)는, CISC, RISC 또는 VLIW 타입 아키텍처를 포함하지만, 이들에 제한되지 않는, 임의의 타입의 아키텍처의 프로세싱 유닛을 나타낸다. 프로세싱 코어(159)는 또한 하나 이상의 프로세스 기술에서 제조하기에 적합할 수 있고 머신 판독가능한 매체 상에서 충분히 상세히 표현됨으로써, 상기 제조를 용이하게 하기에 적합할 수 있다.
프로세싱 코어(159)는 실행 유닛(142), 레지스터 파일(들)(145)의 세트, 및 디코더(144)를 포함한다. 프로세싱 코어(159)는 또한 본 발명의 이해에 필요하지 않은 추가 회로(도시되지 않음)를 포함한다. 실행 유닛(142)은 프로세싱 코어(159)에 의해 수신된 명령들을 실행하는 데 이용된다. 실행 유닛(142)은, 전형적인 프로세서 명령들을 인지하는 것에 더하여, 패킹된 데이터 포맷들에 대한 연산을 수행하기 위한 패킹된 명령 세트(142) 내의 명령들을 인지할 수 있다. 패킹된 명령 세트(143)는 내적 연산을 지원하기 위한 명령들을 포함하고, 또한 다른 패킹된 명령들을 포함할 수도 있다. 실행 유닛(142)은 내부 버스에 의해 레지스터 파일(145)에 연결된다. 레지스터 파일(145)은 데이터를 포함한 정보를 저장하기 위한 프로세싱 코어(159) 상의 저장 영역을 나타낸다. 전술한 바와 같이, 패킹된 데이터를 저장하는 데 이용되는 저장 영역은 중요하지 않다는 것은 말할 것도 없다. 실행 유닛(142)은 디코더(144)에 연결된다. 디코더(144)는 프로세싱 코어(159)에 의해 수신된 명령들을 제어 신호들 및/또는 마이크로코드 엔트리 포인트(microcode entry point)들로 디코딩하는 데 이용된다. 이들 제어 신호 및/또는 마이크로코드 엔트리 포인트에 응답하여, 실행 유닛(142)은 적절한 연산을 수행한다.
프로세싱 코어(159)는 다양한 다른 시스템 장치들과 통신하기 위해 버스(141)와 연결되고, 여기서 다른 시스템 장치들은, 예를 들면, SDRAM(synchronous dynamic random access memory) 컨트롤(146), SRAM(static random access memory) 컨트롤(147), 버스트 플래시 메모리 인터페이스(148), PCMCIA/CF(personal computer memory card international association/compact flash) 카드 컨트롤(149), LCD(liquid crystal display) 컨트롤(150), DMA(direct memory access) 컨트롤러(151), 및 대체 버스 마스터 인터페이스(152)를 포함할 수 있지만, 이들에 제한되지는 않는다. 일 실시예에서, 데이터 프로세싱 시스템(140)은 또한 I/O 버스(153)를 통하여 다양한 I/O 장치들과 통신하기 위한 I/O 브리지(154)를 포함할 수도 있다. 그러한 I/O 장치들은, 예를 들면, UART(universal asynchronous receiver/transmitter)(155), USB(universal serial bus)(156), 블루투스 무선 UART(157) 및 I/O 확장 인터페이스(158)를 포함할 수 있지만, 이들에 제한되지는 않는다.
데이터 프로세싱 시스템(140)의 일 실시예는 모바일, 네트워크 및/또는 무선 통신을 제공하고 프로세싱 코어(159)는 내적 연산을 포함한 SIMD 연산들을 수행할 수 있다. 프로세싱 코어(159)는 왈쉬-아다마르(Walsh-Hadamard) 변환, FFT(fast Fourier transform), DCT(discrete cosine transform), 및 그 각각의 역변환들과 같은 이산 변환; 색공간 변환, 비디오 인코드 모션 추정 또는 비디오 디코드 모션 보상과 같은 압축/압축해제 기법; 및 PCM(pulse coded modulation)과 같은 MODEM(modulation/demodulation) 기능들을 포함하는 다양한 오디오, 비디오, 이미징 및 통신 알고리즘들로 프로그램될 수 있다. 본 발명의 일부 실시예들은 또한 3차원("3D") 모델링, 렌더링, 개체 충돌 검출(objects collision detection), 3D 개체 변환 및 조명 등과 같은 그래픽 애플리케이션들에도 적용될 수 있다.
도 1는 SIMD 내적 연산을 수행할 수 있는 데이터 프로세싱 시스템의 또 다른 실시예를 도시한다. 하나의 대체 실시예에 따르면, 데이터 프로세싱 시스템(160)은 메인 프로세서(166), SIMD 코프로세서(161), 캐시 메모리(167), 및 입출력 시스템(168)을 포함할 수 있다. 입출력 시스템(168)은 옵션으로 무선 인터페이스(169)에 연결될 수 있다. SIMD 코프로세서(161)는 내적 연산을 포함한 SIMD 연산들을 수행할 수 있다. 프로세싱 코어(170)는 하나 이상의 프로세스 기술에서 제조하기에 적합할 수 있고 머신 판독가능한 매체 상에서 충분히 상세히 표현됨으로써, 프로세싱 코어(170)를 포함하는 데이터 프로세싱 시스템(160)의 전부 또는 일부의 제조를 용이하게 하기에 적합할 수 있다.
일 실시예에 있어서, SIMD 코프로세서(161)는 실행 유닛(162) 및 레지스터 파일(들)(164)의 세트를 포함한다. 메인 프로세서(165)의 일 실시예는 실행 유닛(162)에 의해 실행하기 위한 SIMD 내적 계산 명령들을 포함하는 명령 세트(163)의 명령들을 인지하는 디코더(165)를 포함한다. 대체 실시예들에 있어서, SIMD 코프로세서(161)는 또한 명령 세트(163)의 명령들을 디코딩하는 디코더(165B)의 적어도 일부를 포함한다. 프로세싱 코어(170)는 또한 본 발명의 이해에 필요하지 않은 추가 회로(도시되지 않음)를 포함한다.
동작 시에, 메인 프로세서(166)는 캐시 메모리(167), 및/또는 입출력 시스템(168)과의 상호작용을 포함하는 일반적인 타입의 데이터 프로세싱 동작들을 제어하는 데이터 프로세싱 명령들의 스트림을 실행한다. 데이터 프로세싱 명령들의 스트림 내에는 SIMD 코프로세서 명령들이 삽입(embed)된다. 메인 프로세서(166)의 디코더(165)는 이들 SIMD 코프로세서 명령들을, 부착된 SIMD 코프로세서(161)에 의해 실행되어야 하는 타입인 것으로 인지한다. 따라서, 메인 프로세서(166)는 이들 SIMD 코프로세서 명령들(또는 SIMD 코프로세서 명령들을 나타내는 제어 신호들)을 코프로세서 버스(166) 상에 발행하고 이 코프로세서 버스(166)로부터 그것들은 임의의 부착된 SIMD 코프로세서들에 의해 수신된다. 이 경우, SIMD 코프로세서(161)는 그것에 의도된 임의의 수신된 SIMD 코프로세서 명령들을 수락하여 실행할 것이다.
SIMD 코프로세서 명령들에 의한 처리를 위해 무선 인터페이스(169)를 통하여 데이터가 수신될 수 있다. 일례로, 음성 통신이 디지털 신호의 형태로 수신될 수 있고, 이것은 음성 통신을 나타내는 디지털 오디오 샘플들을 재생하도록 SIMD 코프로세서 명령들에 의해 처리될 수 있다. 다른 예로, 압축된 오디오 및/또는 비디오가 디지털 비트 스트림의 형태로 수신될 수 있고, 이것은 디지털 오디오 샘플들 및/또는 모션 비디오 프레임들을 재생하도록 SIMD 코프로세서에 의해 처리될 수 있다. 프로세싱 코어(170)의 일 실시예에 있어서, 메인 프로세서(166), 및 SIMD 코프로세서(161)는, 실행 유닛(162), 레지스터 파일(들)(164)의 세트, 및 SIMD 내적 명령들을 포함한 명령 세트(163)의 명령들을 인지하는 디코더(165)를 포함하는 단일 프로세싱 코어(170)로 통합된다.
도 2는 본 발명의 일 실시예에 따른 내적 명령을 수행하는 논리 회로들을 포함하는 프로세스(200)에 대한 마이크로 아키텍처의 블록도이다. 내적 명령의 일 실시예에 있어서, 그 명령은 제1 데이터 엘리먼트와 제2 데이터 엘리먼트를 곱하고 이 곱을 제3 및 제4 데이터 엘리먼트의 곱에 더할 수 있다. 일부 실시예들에서, 내적 명령은 바이트, 워드, 더블워드, 쿼드워드 등의 사이즈는 물론, 단일 및 배 정밀도 정수 및 부동 소수점 데이터타입과 같은 데이터타입을 갖는 데이터 엘리먼트들에 작용하도록 구현될 수 있다. 일 실시예에서 인오더 프런트 엔드(in-order front end)(201)는 실행될 매크로명령들을 페치하고 그것들을 프로세서 파이프라인에서 나중에 사용되도록 준비하는 프로세서(200)의 부분이다. 프런트 엔드(201)는 몇 개의 유닛들을 포함할 수 있다. 일 실시예에서, 명령 프리페처(226)는 메모리로부터 매크로명령들을 페치하고 그것들을 명령 디코더(228)에 공급하고 명령 디코더(228)는 그것들을 마이크로명령(micro-instructions) 또는 마이크로연산(micro-operations)(마이크로 op 또는 uop로도 불림)이라 불리는 프리미티브(primitive)들로 디코딩한다. 일 실시예에서, 추적 캐시(trace cache)(230)는 디코딩된 uop들을 취하고 실행을 위해 그것들을 uop 큐(queue)(234) 내에 프로그램 순서 시퀀스들 및 트레이스들(program ordered sequences and traces)로 어셈블한다. 추적 캐시(230)가 복잡한 매크로명령과 마주치면, 마이크로코드 ROM(232)은 그 연산을 완료하는 데 필요한 uop들을 제공한다.
다수의 매크로명령들이 단일 마이크로 op로 변환되는 반면, 다른 것들은 전체 연산을 완료하기 위해 수 개의 마이크로 op들을 필요로 한다. 일 실시예에서, 매크로명령을 완료하기 위해 5개 이상의 마이크로 op들이 요구된다면, 디코더(228)는 매크로명령을 행하기 위해 마이크로코드 ROM(232)에 액세스한다. 일 실시예에 있어서, 패킹된 내적 명령은 명령 디코더(228)에서의 처리를 위하여 소수의 마이크로 op들로 디코딩될 수 있다. 다른 실시예에서, 패킹된 내적 알고리즘에 대한 명령은, 그 연산을 완수하기 위해 다수의 마이크로 op들이 요구된다면, 마이크로코드 ROM(232) 내에 저장될 수 있다. 추적 캐시(230)는 마이크로코드 ROM(232) 내의 내적 알고리즘에 대한 마이크로코드 시퀀스들을 판독하기 위한 정확한 마이크로명령 포인터를 결정하기 위해 엔트리 포인트 PLA(entry point programmable logic array)를 참조한다. 마이크로코드 ROM(232)이 현재의 매크로명령에 대한 마이크로 op들의 시퀀싱을 완료한 후에, 머신의 프런트 엔드(201)는 추적 캐시(230)로부터 마이크로 op들의 페치를 재개한다.
일부 SIMD 및 다른 멀티미디어 타입의 명령들은 복잡한 명령이라고 간주된다. 대부분의 부동 소수점 관련 명령들도 복잡한 명령이라고 간주된다. 그러므로, 명령 디코더(228)가 복잡한 매크로 명령과 마주치면, 그 매크로명령에 대한 마이크로코드 시퀀스를 검색하기 위해 적절한 위치에서 마이크로코드 ROM(232)이 액세스된다. 그 매크로명령을 수행하기 위해 필요한 다양한 마이크로 op들이, 적절한 정수 및 부동 소수점 실행 유닛들에서의 실행을 위해, 아웃오브오더(out-of-order) 실행 엔진(203)으로 통신된다.
아웃오브오더 실행 엔진(203)은 실행을 위해 마이크로명령들이 준비되는 곳이다. 아웃오브오더 실행 논리는 마이크로명령들이 실행을 위해 파이프라인을 따라 진행하고 스케줄링될 때 성능을 최적화하기 위해 마이크로명령들의 흐름을 매끄럽게 하고 재정리(re-order)하는 다수의 버퍼들을 갖는다. 할당기 논리(allocator logic)는 각 uop가 실행하기 위하여 필요로 하는 머신 버퍼들 및 리소스들을 할당한다. 레지스터 이름 변경 논리(register renaming logic)는 논리 레지스터들을 레지스터 파일 내의 항목들로 이름 변경한다. 할당기는 또한 명령 스케줄러들: 메모리 스케줄러, 고속 스케줄러(202), 저속/일반 부동 소수점 스케줄러(204), 및 단순 부동 소수점 스케줄러(206)의 앞에서, 하나는 메모리 동작을 위한 것이고 하나는 비메모리 동작을 위한 것인 2개의 uop 큐들 중 하나에서 각 uop에 대한 항목을 할당한다. uop 스케줄러들(202, 204, 206)은 그들의 종속 입력 레지스터 피연산자 소스들의 준비성(readiness) 및 uop들이 그들의 연산을 완료하기 위해 필요로 하는 실행 리소스들의 가용성(availability)에 기초하여 uop가 실행할 준비가 되어 있는 때를 결정한다. 이 실시예의 고속 스케줄러(202)는 메인 클록 사이클의 각 절반에서 스케줄링할 수 있는 반면, 다른 스케줄러들은 메인 프로세서 클록 사이클마다 한 번만 스케줄링할 수 있다. 스케줄러들은 디스패치 포트들에 대하여 중재하여 실행을 위한 uop들을 스케줄링한다.
레지스터 파일들(208, 210)은 실행 블록(211) 내에서 스케줄러들(202, 204, 206)과, 실행 유닛들(212, 214, 216, 218, 220, 222, 224) 사이에 위치한다. 정수 및 소수점 동작들에 대하여 각각 개별 레지스터 파일(208, 210)이 존재한다. 이 실시예의 각 레지스터 파일(208, 210)은 또한 레지스터 파일에 아직 기입되지 않은 막 완료된 결과들을 새로운 종속 uop들에 바이패스하거나 포워드할 수 있는 바이패스 네트워크를 포함한다. 정수 레지스터 파일(208) 및 부동 소수점 레지스터 파일(210)은 또한 서로 데이터를 통신할 수 있다. 일 실시예에 있어서, 정수 레지스터 파일(208)은 2개의 개별 레지스터 파일들, 즉 데이터의 하위 32 비트에 대한 하나의 레지스터 파일과 데이터의 상위 32 비트에 대한 제2 레지스터 파일로 분할된다. 일 실시예의 부동 소수점 레지스터(210)는 128 비트 폭 항목들을 갖는다. 이는 부동 소수점 명령들은 통상적으로 폭이 64 내지 128 비트인 피연산자를 갖기 때문이다.
실행 블록(211)은, 명령들이 실제로 실행되는, 실행 유닛들(212, 214, 216, 218, 220, 222, 224)을 포함한다. 이 섹션은 마이크로명령들이 실행할 필요가 있는 정수 및 부동 소수점 데이터 피연산자 값들을 저장하는 레지스터 파일들(208, 210)을 포함한다. 이 실시예의 프로세서(200)는 다수의 실행 유닛들: 어드레스 생성 유닛(address generation unit; AGU)(212), AGU(214), 고속(fast) ALU(216), 고속 ALU(218), 저속(slow) ALU(220), 부동 소수점 ALU(222), 부동 소수점 이동 유닛(224)으로 이루어진다. 이 실시예에 있어서, 부동 소수점 실행 블록들(222, 224)은 부동 소수점, MMX, SIMD, 및 SSE 연산들을 실행한다. 이 실시예의 부동 소수점 ALU(222)는 나눗셈, 제곱근, 및 나머지 마이크로 op들을 실행하는 64 비트 × 64 비트 부동 소수점 제산기(floating point divider)를 포함한다. 본 발명의 실시예들에 있어서, 부동 소수점 값을 수반하는 임의의 동작은 부동 소수점 하드웨어와 함께 일어난다. 예를 들면, 정수 포맷과 부동 소수점 포맷 간의 변환은 부동 소수점 레지스터 파일을 수반한다. 유사하게, 부동 소수점 제산 연산은 부동 소수점 제산기에서 일어난다. 한편, 부동 소수점이 아닌 수들 및 정수 타입은 정수 하드웨어 리소스들에 의해 처리된다. 단순한, 매우 빈번한 ALU 연산들은 고속 ALU 실행 유닛들(216, 218)로 간다. 이 실시예의 고속 ALU들(216, 218)은 1/2 클록 사이클의 유효 대기 시간(effective latency)을 가지고 고속 연산을 실행할 수 있다. 일 실시예에 있어서, 가장 복잡한 정수 연산들은 저속 ALU(220)로 간다. 이는 저속 ALU(220)는 승산기, 시프트, 플래그 논리, 및 분기 프로세싱과 같은 긴 대기 시간 타입의 연산들에 대한 정수 실행 하드웨어를 포함하기 때문이다. 메모리 로드/저장 동작들은 AGU들(212, 214)에 의해 실행된다. 이 실시예에 있어서, 정수 ALU들(216, 218, 220)은 64 비트 데이터 피연산자들에 대한 정수 연산들을 수행하는 것에 관련하여 설명된다. 대체 실시예들에서, ALU들(216, 218, 220)은 16, 32 128, 256 등을 포함한 각종의 데이터 비트들을 지원하도록 구현될 수 있다. 유사하게, 부동 소수점 유닛들(222, 224)은 다양한 폭의 비트들을 갖는 일단의 피연산자들(a range of operands)을 지원하도록 구현될 수 있다. 일 실시예에 있어서, 부동 소수점 유닛들(222, 224)은 SIMD 및 멀티미디어 명령들과 함께 128 비트 폭의 패킹된 데이터 피연산자들에 작용할 수 있다.
이 실시예에서, uops 스케줄러들(202, 204, 206)은 부모 로드(parent load)가 실행을 완료하기 전에 종속 연산들(dependent operations)을 디스패치한다. uop들은 프로세서(200)에서 추론적으로(speculatively) 스케줄링되고 실행되므로, 프로세서(200)는 또한 메모리 미스(memory miss)들을 처리하는 논리를 포함한다. 만일 데이터 로드가 데이터 캐시에서 미스하면, 일시적으로 부정확한 데이터를 가지고 스케줄러를 떠난 종속 연산들이 파이프라인 내에서 이동중일 수 있다. 리플레이 메커니즘(replay mechanism)은 부정확한 데이터를 이용하는 명령들을 추적하고 재실행한다. 종속 연산들만이 리플레이될 필요가 있고 비종속 연산들은 완료하도록 허용된다. 프로세서의 일 실시예의 스케줄러들 및 리플레이 메커니즘은 또한 내적 연산들을 위한 명령 시퀀스들을 캐치하도록 설계된다.
용어 "레지스터들"(registers)은 여기서 피연산자들을 식별하기 위해 매크로명령들의 일부로서 이용되는 온보드 프로세서 저장 위치들을 나타내기 위해 이용된다. 즉, 여기서 언급되는 레지스터들은 프로세서의 외부로부터(프로그래머의 시각으로부터) 보이는 것들이다. 그러나, 실시예의 레지스터들은 특정 타입의 회로에 의미가 제한되어서는 안 된다. 오히려, 실시예의 레지스터는 데이터를 저장 및 제공하고, 여기서 설명된 기능들을 수행할 수만 있으면 된다. 여기서 설명된 레지스터들은 전용 물리적 레지스터들, 레지스터 이름 변경을 이용하여 동적으로 할당되는 물리적 레지스터들, 전용 및 동적으로 할당되는 물리적 레지스터들의 조합 등과 같은 임의의 수의 상이한 기법들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. 일 실시예에서, 정수 레지스터들은 32 비트 정수 데이터를 저장한다. 일 실시예의 레지스터 파일은 또한 패킹된 데이터에 대하여 16개의 XMM 및 범용 레지스터들, 8개의 멀티미디어(예를 들면, "EM64T" 가산) 멀티미디어 SIMD 레지스터들을 포함한다. 이하의 설명에 있어서, 레지스터들은, 캘리포니아주, 산타 클라라의 인텔사로부터의 MMX 기술로 작동되는 마이크로프로세서들 내의 64 비트 폭의 MMXTM 레지스터들(일부 경우에 "mm" 레지스터라고도 불림)과 같은, 패킹된 데이터를 보유하도록 설계된 데이터 레지스터들인 것으로 이해된다. 정수 및 부동 소수점 형식들 모두에서 이용 가능한, 이들 MMX 레지스터들은 SIMD 및 SSE 명령들을 동반하는 패킹된 데이터 엘리먼트들과 함께 작용할 수 있다. 유사하게, SSE2, SSE3, SSE4, 또는 그 이상의(총칭하여 "SSEx"라고 불림) 기술에 관한 128 비트 폭의 XMM 레지스터들도 그러한 패킹된 데이터 피연산자들을 보유하기 위해 이용될 수 있다. 이 실시예에서, 패킹된 데이터 및 정수 데이터를 저장할 때, 레지스터들은 그 2개의 데이터 타입들을 구별할 필요가 없다.
다음의 도면들의 예시들에서는, 다수의 데이터 피연산자들이 설명된다. 도 3a는 본 발명의 일 실시예에 따른 멀티미디어 레지스터들 내의 다양한 패킹된 데이터 타입 표현들을 도시한다. 도 3a는 128 비트 폭의 피연산자에 대한 패킹된 바이트(310), 패킹된 워드(320), 및 패킹된 더블워드(dword)(330)에 대한 데이터 타입들을 도시한다. 이 예시의 패킹된 바이트 포맷(310)은 128 비트 길이이고 16개의 패킹된 바이트 데이터 엘리먼트들을 포함한다. 바이트는 여기서 8 비트의 데이터로서 정의된다. 각 바이트 데이터 엘리먼트에 대한 정보는 바이트 0의 경우 비트 7 내지 비트 0에, 바이트 1의 경우 비트 15 내지 비트 8에, 바이트 2의 경우 비트 23 내지 비트 16에, 및 마지막으로 바이트 15의 경우 비트 120 내지 비트 127에 저장된다. 따라서, 모든 유효 비트들이 레지스터에서 사용된다. 이러한 저장 배열은 프로세서의 저장 효율을 증가시킨다. 게다가, 16개의 데이터 엘리먼트들이 액세스될 경우, 이제는 하나의 연산이 16개의 데이터 엘리먼트들에 대해 병렬로 수행될 수 있다.
일반적으로, 데이터 엘리먼트는 동일한 길이의 다른 데이터 엘리먼트들과 함께 단일 레지스터 또는 메모리 위치에 저장되는 개개의 데이터이다. SSEx 기술에 관한 패킹된 데이터 시퀀스들에서, XMM 레지스터에 저장되는 데이터 엘리먼트들의 수는 128 비트를 개개의 데이터 엘리먼트의 비트 길이로 나눈 것이다. 유사하게, MMX 및 SSE 기술에 관한 패킹된 데이터 시퀀스들에서, MMX 레지스터에 저장되는 데이터 엘리먼트들의 수는 64 비트를 개개의 데이터 엘리먼트의 비트 길이로 나눈 것이다. 도 3a에 도시된 데이터 타입들은 128 비트 길이이지만, 본 발명의 실시예들은 64 비트 폭 또는 다른 사이즈의 피연산자들과 함께 작용할 수도 있다. 이 예시의 패킹된 워드 포맷(320)은 128 비트 길이이고 8개의 패킹된 워드 데이터 엘리먼트들을 포함한다. 각 패킹된 워드는 16 비트의 정보를 포함한다. 도 3a의 패킹된 더블워드 포맷(330)은 128 비트 길이이고 4개의 패킹된 더블워드 데이터 엘리먼트들을 포함한다. 각 패킹된 더블워드 데이터 엘리먼트는 32 비트의 정보를 포함한다. 패킹된 쿼드워드는 128 비트 길이이고 2개의 패킹된 쿼드워드 데이터 엘리먼트들을 포함한다.
도 3b는 대체의 레지스터 내 데이터 저장 포맷들을 도시한다. 각 패킹된 데이터는 2개 이상의 독립 데이터 엘리먼트를 포함할 수 있다. 3개의 패킹된 데이터 포맷들이 도시되어 있다; 패킹된 하프(packed half)(341), 패킹된 싱글(packed single)(342), 및 패킹된 더블(packed double)(343). 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343)의 일 실시예는 고정 소수점 데이터 엘리먼트들을 포함한다. 대체 실시예에 있어서 패킹된 하프(341), 패킹된 싱글(342), 및 패킹된 더블(343) 중 하나 이상은 부동 소수점 데이터 엘리먼트들을 포함할 수 있다. 패킹된 하프(341)의 하나의 대체 실시예는 8개의 16 비트 데이터 엘리먼트들을 포함하는 128 비트 길이이다. 패킹된 싱글(342)의 일 실시예는 128 비트 길이이고 4개의 32 비트 데이터 엘리먼트들을 포함한다. 패킹된 더블(343)의 일 실시예는 128 비트 길이이고 2개의 64 비트 데이터 엘리먼트들을 포함한다. 그러한 패킹된 데이터 포맷들은 다른 레지스터 길이들로, 예를 들면, 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번째 비트는 부호 지시자이다. 부호 없는 패킹된 워드 표현(346)은 SIMD 레지스터에서 워드 7 내지 워드 0가 어떻게 저장되는지를 도시한다. 부호 있는 패킹된 워드 표현(347)은 부호 없는 패킹된 워드의 레지스터 내 표현(346)과 유사하다. 각 워드 데이터 엘리먼트의 16번째 비트는 부호 지시자이다. 부호 없는 패킹된 더블워드 표현(348)은 더블워드 데이터 엘리먼트들이 어떻게 저장되는지를 나타낸다. 부호 있는 패킹된 더블워드 표현(349)은 부호 없는 패킹된 더블워드의 레지스터 내 표현(348)과 유사하다. 필요한 부호 비트는 각 더블워드 데이터 엘리먼트의 32번째 비트이다.
도 3d는 월드와이드웹(www) 상의 intel.com/design/litcentr에서 캘리포니아주, 산타 클라라의 인텔사로부터 입수 가능한 "IA-32 Intel Architecture Software Developer's Manual Volume 2: Instruction Set Reference"에서 기술된 연산 부호(opcode) 포맷의 타입과 대응하는 32개 이상의 비트, 및 레지스터/메모리 피연산자 어드레싱 모드들을 갖는 연산 부호(opcode) 포맷(360)의 일 실시예의 도시이다. 일 실시예에서, 내적 연산은 필드들(361 및 362) 중 하나 이상에 의해 인코딩될 수 있다. 2개까지의 소스 피연산자 식별자들(364 및 365)을 포함하여, 명령마다 2개까지의 피연산자 위치들이 식별될 수 있다. 내적 명령의 일 실시예에 있어서, 데스티네이션 피연산자 식별자(366)는 소스 피연산자 식별자(364)와 동일한 반면, 다른 실시예들에서 그것들은 상이하다. 대체 실시예에 있어서, 데스티네이션 피연산자 식별자(366)는 소스 피연산자 식별자(365)와 동일한 반면, 다른 실시예들에서 그것들은 상이하다. 내적 명령의 일 실시예에서, 소스 피연산자 식별자들(364 및 365)에 의해 식별된 소스 피연산자들 중 하나는 내적 연산의 결과에 의해 덮어쓰기되는 반면, 다른 실시예들에서 식별자(364)는 소스 레지스터 엘리먼트에 대응하고 식별자(365)는 데스티네이션 레지스터 엘리먼트에 대응한다. 내적 명령의 일 실시예에 있어서, 피연산자 식별자들(364 및 365)은 32 비트 또는 64 비트 소스 및 데스티네이션 피연산자들을 식별하는 데 이용될 수 있다.
도 3e는 40개 이상의 비트를 갖는 대체 연산 부호(opcode) 포맷의 도시이다. opcode 포맷(370)은 opcode 포맷(360)과 대응하고 옵션인 프리픽스 바이트(378)를 포함한다. 내적 연산의 타입은 필드들(378, 371, 및 372) 중 하나 이상에 의해 인코딩될 수 있다. 명령마다 2개까지의 피연산자 위치들이 소스 피연산자 식별자들(374 및 375)에 의해 및 프리픽스 바이트(378)에 의해 식별될 수 있다. 내적 명령의 일 실시예에 있어서, 프리픽스 바이트(378)는 32 비트 또는 64 비트 소스 및 데스티네이션 피연산자들을 식별하는 데 이용될 수 있다. 내적 명령의 일 실시예에 있어서, 데스티네이션 피연산자 식별자(376)는 소스 피연산자 식별자(374)와 동일한 반면, 다른 실시예들에서 그것들은 상이하다. 대체 실시예에 있어서, 데스티네이션 피연산자 식별자(376)는 소스 피연산자 식별자(375)와 동일한 반면, 다른 실시예들에서 그것들은 상이하다. 일 실시예에서, 내적 연산들은 피연산자 식별자들(374 및 375)에 의해 식별된 피연산자들 중 하나를 피연산자 식별자들(374 및 375)에 의해 식별된 다른 피연산자에 곱하고 그 피연산자 식별자들 중 하나는 내적 연산의 결과에 의해 덮어쓰기되는 반면, 다른 실시예들에서 식별자들(374 및 375)에 의해 식별된 피연산자들의 내적은 다른 레지스터 내의 다른 데이터 엘리먼트에 기입된다. opcode 포맷들(360 및 370)은 MOD 필드들(363 및 373)에 의해 및 옵션인 스케일 인덱스 베이스 및 변위(scale-index-base and displacement) 바이트들에 의해 부분적으로 지정되는 레지스터 투 레지스터(register to register), 메모리 투 레지스터(memory to register), 레지스터 바이 메모리(register by memory), 레지스터 바이 레지스터(register by register), 레지스터 바이 이미디엇(register by immediate), 레지스터 투 메모리(register to memory) 어드레싱을 허용한다.
다음으로 도 3f를 참조하여, 일부 대체 실시예들에서는, CDP(coprocessor data processing) 명령을 통하여 64 비트 SIMD(single instruction multiple data) 산술 연산이 수행될 수 있다. 연산 부호(opcode) 포맷(380)은 CDP opcode 필드들(382 및 389)을 갖는 하나의 그러한 CDP 명령을 도시한다. CDP 명령의 타입은, 내적 연산들의 대체 실시예들에 있어서, 필드들(383, 384, 387, 및 388) 중 하나 이상에 의해 인코딩될 수 있다. 2개까지의 소스 피연산자 식별자들(384 및 390) 및 하나의 데스티네이션 피연산자 식별자(386)를 포함하여, 명령마다 3개까지의 피연산자 위치들이 식별될 수 있다. 코프로세서의 일 실시예는 8, 16, 32, 및 64 비트 값들에 작용할 수 있다. 일 실시예에 있어서, 내적 연산은 정수 데이터 엘리먼트들에 대해 수행된다. 일부 실시예들에서, 내적 명령은 선택 필드(381)를 이용하여 조건부로 실행될 수 있다. 일부 내적 명령들에 있어서 소스 데이터 사이즈들은 필드(383)에 의해 인코딩될 수 있다. 내적 명령의 일부 실시예들에서는, SIMD 필드들에서 제로(Z), 네거티브(N), 캐리(C), 및 오버플로(V) 검출이 행해질 수 있다. 일부 명령들에 있어서, 포화(saturation)의 타입은 필드(384)에 의해 인코딩될 수 있다.
도 4는 본 발명에 따른 패킹된 데이터 피연산자들에 대한 내적 연산을 수행하는 논리의 일 실시예의 블록도이다. 본 발명의 실시예들은 전술한 것들과 같은 다양한 타입의 피연산자들과 작용하도록 구현될 수 있다. 하나의 구현에 있어서, 본 발명에 따른 내적 연산들은 특정 데이터 타입들에 작용하는 명령들의 세트로서 구현된다. 예를 들면, DPPS(dot-product packed single-precision) 명령은 정수 및 부동 소수점을 포함하는 32 비트 데이터 타입들에 대한 내적을 결정하기 위해 제공된다. 유사하게, DPPD(dot-product packed double-precision) 명령은 정수 및 부동 소수점을 포함하는 64 비트 데이터 타입들에 대한 내적을 결정하기 위해 제공된다. 이들 명령들은 상이한 이름을 갖고 있지만, 그것들이 수행하는 일반적인 내적 연산은 유사하다. 간결함을 위하여, 다음의 설명들 및 아래의 예시들은 데이터 엘리먼트들을 처리하는 내적 명령에 관련되어 있다.
일 실시예에서, 내적 명령은 제1 데이터 피연산자 DATA A(410)의 식별자, 제2 데이터 피연산자 DATA B(420)의 식별자, 및 그 내적 연산의 RESULTANT(440)에 대한 식별자(이것은 일 실시예에서 제1 데이터 피연산자 식별자들 중 하나와 동일한 식별자일 수 있다)를 포함하는 다양한 정보를 식별한다. 다음의 설명에 있어서, DATA A, DATA B, 및 RESULTANT는 일반적으로 피연산자 또는 데이터 블록이라고 불리지만, 그와 같이 제한되는 것은 아니고, 레지스터, 레지스터 파일, 및 메모리 위치도 포함한다. 일 실시예에서, 각 내적 명령(DPPS, DPPD)은 하나의 마이크로 연산(micro-operation)으로 디코딩된다. 대체 실시예에서, 각 명령은 데이터 피연산자들에 대한 내적 연산을 수행하는 다양한 개수의 마이크로 op들로 디코딩될 수 있다. 이 예시에 있어서, 피연산자들(410, 420)은 워드 폭의 데이터 엘리먼트들을 갖는 소스 레지스터/메모리에 저장된 128 비트 폭의 정보들이다. 일 실시예에서, 피연산자들(410, 420)은 128 비트 SSEx XMM 레지스터들과 같은 128 비트 길이의 SIMD 레지스터들에 보유된다. 일 실시예에 있어서, RESULTANT(440)도 XMM 데이터 레지스터이다. 또한, RESULTANT(440)는 소스 피연산자들 중 하나와 동일한 레지스터 또는 메모리 위치일 수도 있다. 특정 구현에 따라서, 피연산자들 및 레지스터들은 32, 64, 및 256 비트와 같은 다른 길이일 수 있고, 바이트, 더블워드, 또는 쿼드워드 사이즈의 데이터 엘리먼트들을 가질 수 있다. 이 예시의 데이터 엘리먼트들은 워드 사이즈이지만, 동일한 개념이 바이트 및 더블워드 사이즈의 엘리먼트들에 확장될 수 있다. 일 실시예에서, 데이터 피연산자들이 64 비트 폭인 경우, XMM 레지스터들 대신에 MMX 레지스터들이 이용된다.
이 예시에서의 제1 피연산자(410)는 4개의 데이터 엘리먼트들의 세트: A3, A2, A1, 및 A0로 이루어진다. 각 개개의 데이터 엘리먼트는 RESULTANT(440) 내의 데이터 엘리먼트 위치에 대응한다. 제2 피연산자(420)는 다른 4개의 데이터 세그먼트들의 세트: B3, B2, B1, 및 B0로 이루어진다. 여기서의 데이터 세그먼트들은 길이가 같고 각각은 단일 워드(16 비트)의 데이터로 이루어진다. 그러나, 데이터 엘리먼트들 및 데이터 엘리먼트 위치들은 워드 이외의 다른 입도들(granularities)을 가질 수 있다. 만일 각 데이터 엘리먼트가 바이트(8 비트), 더블워드(32 비트), 또는 쿼드워드(64 비트)이면, 128 비트 피연산자들은 16개의 바이트 폭, 4개의 더블워드 폭, 또는 2개의 쿼드워드 폭 데이터 엘리먼트들을 각각 가질 것이다. 본 발명의 실시예들은 특정 길이의 데이터 피연산자들 또는 데이터 세그먼트들에 제한되지 않고, 각 구현에 대하여 적절히 사이즈가 정해질 수 있다.
피연산자들(410, 420)은 레지스터 또는 메모리 위치 또는 레지스터 파일 또는 믹스(mix)에 존재할 수 있다. 데이터 피연산자들(410, 420)은 내적 명령과 함께 프로세서 내의 실행 유닛의 내적 계산 논리(430)로 보내진다. 내적 명령이 실행 유닛에 도달하는 때에는, 일 실시예에서, 그 명령은 프로세서 파이프라인에서 보다 일찍 디코딩되었을 수 있다. 따라서, 내적 명령은 마이크로 연산(uop) 또는 어떤 다른 디코딩된 포맷의 형태일 수 있다. 일 실시예에 있어서, 2개의 데이터 피연산자들(410, 420)은 내적 계산 논리(430)에서 수신된다. 내적 계산 논리(430)는 제1 피연산자(410)의 2개의 데이터 엘리먼트들의 제1 승산 곱(multiplication product)과, 제2 피연산자(420)의 2개의 데이터 엘리먼트들의 제2 승산 곱을 생성하고, 제1 및 제2 승산 곱들의 합계를, 제1 또는 제2 피연산자와 동일한 저장 위치에 대응할 수 있는, RESULTANT(440) 내의 적절한 위치에 저장한다. 일 실시예에서, 제1 및 제2 피연산자들로부터의 데이터 엘리먼트들은 단일 정밀도(예를 들면, 32 비트)인 반면, 다른 실시예들에서, 제1 및 제2 피연산자들로부터의 데이터 엘리먼트들은 배 정밀도(예를 들면, 64 비트)이다.
일 실시예에 있어서, 모든 데이터 위치들에 대한 데이터 엘리먼트들은 병렬로 처리된다. 다른 실시예에서, 데이터 엘리먼트 위치들의 특정 부분은 한 번에 함께 처리될 수 있다. 일 실시예에서, RESULTANT(440)는 DPPD가 수행되는지 DPPS가 수행되는지에 따라서, 각각, DOT-PRODUCTA31-0, DOT-PRODUCTA63-32, DOT-PRODUCTA95-64, DOT-PRODUCTA127-96(DPPS 명령 결과의 경우), 및 DOT-PRODUCTA63-0, DOT-PRODUCTA127-64(DPPD 명령 결과의 경우)의 2개 또는 4개의 가능한 내적 결과 위치로 이루어진다.
일 실시예에서, RESULTANT(440) 내의 내적 결과의 위치는 내적 명령과 관련된 선택 필드에 의존한다. 예를 들면, DPPS 명령의 경우, RESULTANT(440) 내의 내적 결과의 위치는, 선택 필드가 제1 값과 같다면 DOT-PRODUCTA31-0이고, 선택 필드가 제2 값과 같다면 DOT-PRODUCTA63-32이고, 선택 필드가 제3 값과 같다면 DOT-PRODUCTA95-64이고, 선택 필드가 제4 값과 같다면 DOT-PRODUCTA127-96이다. DPPD 명령의 경우, RESULTANT(440) 내의 내적 결과의 위치는, 선택 필드가 제1 값과 같다면 DOT-PRODUCTA63-0이고, 선택 필드가 제2 값과 같다면 DOT-PRODUCTA127-64이다.
도 5a는 본 발명의 일 실시예에 따른 내적 명령의 연산을 도시한다. 구체적으로, 도 5a는 일 실시예에 따른 DPPS 명령의 연산을 도시한다. 일 실시예에서, 도 5a에 도시된 예시의 내적 연산은 실질적으로 도 4의 내적 계산 논리(430)에 의해 수행될 수 있다. 다른 실시예들에서, 도 5a의 내적 연산은 하드웨어, 소프트웨어, 또는 그의 어떤 조합을 포함하는 다른 논리에 의해 수행될 수 있다.
다른 실시예들에서, 도 4, 5A, 및 5B에 도시된 연산들은 내적 결과를 생성하기 위해 임의의 조합 또는 순서로 수행될 수 있다. 일 실시예에서, 도 5b는 각각 32 비트의 4개까지의 단일 정밀도 부동 소수점 또는 정수 값들, A0-A3을 저장하는 저장 위치들을 포함하는 128 비트 소스 레지스터(501a)를 도시한다. 유사하게 도 5a에는 각각 32 비트의 4개까지의 단일 정밀도 부동 소수점 또는 정수 값들, B0-B3을 저장하는 저장 위치들을 포함하는 128 비트 데스티네이션 레지스터(505a)가 도시되어 있다. 일 실시예에서, 소스 레지스터에 저장된 각 값 A0-A3은 데스티네이션 레지스터의 대응하는 위치에 저장된 대응하는 값 B0-B3에 곱해지고, A0*B0, A1*B1, A2*B2, A3*B3(여기서는 "곱"(product)이라 불림)은 각각 32 비트의 4개까지의 단일 정밀도 부동 소수점 또는 정수 값들을 저장하는 저장 위치들을 포함하는 제1 128 비트 임시 레지스터("TEMP1")(510a)의 대응하는 저장 위치에 저장된다.
일 실시예에서, 곱들의 쌍들은 함께 더해지고 각 합계(여기서는 "중간 합계"(intermediate sum)라 불림)는 제2 128 비트 임시 레지스터("TEMP2")(515a) 및 제3 128 비트 임시 레지스터("TEMP3")(520a)의 저장 위치에 저장된다. 일 실시예에서 상기 곱들은 제1 및 제2 임시 레지스터들의 최하위 32 비트 엘리먼트 저장 위치에 저장된다. 다른 실시예들에서, 그것들은 제1 및 제2 임시 레지스터들의 다른 엘리먼트 저장 위치들에 저장될 수 있다. 또한, 일부 실시예들에서, 상기 곱들은 동일한 레지스터, 예를 들면, 제1 또는 제2 임시 레지스터에 저장될 수 있다.
일 실시예에서, 상기 중간 합계들은 함께 더해지고(여기서는 "최종 합계"(final sum)라 불림) 제4 128 비트 임시 레지스터("TEMP4")(525a)의 저장 엘리먼트에 저장된다. 일 실시예에서, 상기 최종 합계는 TEMP4의 최하위 32 비트 저장 엘리먼트에 저장되는 반면, 다른 실시예들에서 그 최종 합계는 TEMP4의 다른 저장 엘리먼트들에 저장된다. 그 후 최종 합계는 데스티네이션 레지스터(505a)의 저장 엘리먼트에 저장된다. 최종 합계가 저장될 정확한 저장 엘리먼트는 내적 명령 내에서 구성 가능한 변수들에 의존할 수 있다. 일 실시예에서는, 최종 합계가 저장될 데스티네이션 레지스터 저장 엘리먼트를 결정하기 위해 다수의 비트 저장 위치들을 포함하는 즉시 필드(immediate field)("IMMy[x]")가 이용될 수 있다. 예를 들면, 일 실시예에서, IMM8[0] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 데스티네이션 레지스터의 저장 엘리먼트 B0에 저장되고, IMM8[1] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 데스티네이션 레지스터의 저장 엘리먼트 B1에 저장되고, IMM8[2] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 데스티네이션 레지스터의 저장 엘리먼트 B2에 저장되고, IMM8[3] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 데스티네이션 레지스터의 저장 엘리먼트 B3에 저장된다. 다른 실시예들에서는, 데스티네이션 레지스터에서 최종 합계가 저장될 저장 엘리먼트를 결정하기 위해 다른 즉시 필드들이 이용될 수 있다.
일 실시예에서, 도 5a에 도시된 연산에서 각 승산 및 가산 연산이 수행되는지를 제어하기 위해 즉시 필드들이 이용될 수 있다. 예를 들면, IMM8[4]는 A0가 B0와 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다. 유사하게, IMM8[5]는 A1이 B1과 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다. 마찬가지로, IMM8[6]은 A2가 B2와 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다. 마지막으로, IMM8[7]은 A3가 B3과 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다.
도 5b는 일 실시예에 따른 DPPD 명령의 연산을 도시한다. DPPS와 DPPD 명령들 간의 한 가지 차이는 DPPD는 단일 정밀도 값들 대신에 배 정밀도 부동 소수점 및 정수 값들(예를 들면, 64 비트 값들)에 작용한다는 것이다. 따라서, 일 실시예에서, DPPS 명령보다 DPPD 명령을 수행함에 있어서 관리할 데이터 엘리먼트들의 수가 더 적고 따라서 수반되는 중간 연산들 및 저장 유닛들(예를 들면, 레지스터들)의 수가 더 적다.
일 실시예에서, 도 5b는 각각 64 비트의 2개까지의 배 정밀도 부동 소수점 또는 정수 값들, A0-A1을 저장하는 저장 엘리먼트들을 포함하는 128 비트 소스 레지스터(501b)를 도시한다. 유사하게 도 5b에는 각각 64 비트의 2개까지의 배 정밀도 부동 소수점 또는 정수 값들, B0-B1을 저장하는 저장 위치들을 포함하는 128 비트 데스티네이션 레지스터(505b)가 도시되어 있다. 일 실시예에서, 소스 레지스터에 저장된 각 값 A0-A1은 데스티네이션 레지스터의 대응하는 위치에 저장된 대응하는 값 B0-B1에 곱해지고, A0*B0, A1*B1(여기서는 "곱"이라 불림)은 각각 64 비트의 2개까지의 배 정밀도 부동 소수점 또는 정수 값들을 저장하는 저장 위치들을 포함하는 제1 128 비트 임시 레지스터("TEMP1")(510b)의 대응하는 저장 엘리먼트에 저장된다.
일 실시예에서, 곱들의 쌍들은 함께 더해지고 각 합계(여기서는 "최종 합계"라 불림)는 제2 128 비트 임시 레지스터("TEMP2")(515b)의 저장 엘리먼트에 저장된다. 일 실시예에서 상기 곱들 및 최종 합계는 각각 제1 및 제2 임시 레지스터들의 최하위 64 비트 엘리먼트 저장 위치에 저장된다. 다른 실시예들에서, 그것들은 제1 및 제2 임시 레지스터들의 다른 엘리먼트 저장 위치들에 저장될 수 있다.
일 실시예에서, 최종 합계는 데스티네이션 레지스터(505b)의 저장 엘리먼트에 저장된다. 최종 합계가 저장될 정확한 저장 엘리먼트는 내적 명령 내에서 구성 가능한 변수들에 의존할 수 있다. 일 실시예에서는, 최종 합계가 저장될 데스티네이션 레지스터 저장 엘리먼트를 결정하기 위해 다수의 비트 저장 위치들을 포함하는 즉시 필드("IMMy[x]")가 이용될 수 있다. 예를 들면, 일 실시예에서, IMM8[0] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 데스티네이션 레지스터의 저장 엘리먼트 B0에 저장되고, IMM8[1] 필드가 제1 값(예를 들면, "1")을 포함한다면, 최종 합계는 저장 엘리먼트 B1에 저장된다. 다른 실시예들에서는, 데스티네이션 레지스터에서 최종 합계가 저장될 저장 엘리먼트를 결정하기 위해 다른 즉시 필드들이 이용될 수 있다.
일 실시예에서, 도 5b에 도시된 내적 연산들에서 각 승산 연산이 수행되는지를 제어하기 위해 즉시 필드들이 이용될 수 있다. 예를 들면, IMM8[4]는 A0가 B0와 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다. 유사하게, IMM8[5]는 A1이 B1과 곱해지고 그 결과가 TEMP1에 저장될 것인지를 표시(예를 들면 "0" 또는 "1"로 설정됨으로써)하기 위해 이용될 수 있다. 다른 실시예들에서는, 내적의 승산 연산들을 수행할지를 결정하기 위한 다른 제어 기법들이 이용될 수 있다.
도 6a는 일 실시예에 따른 단일 정밀도 정수 또는 부동 소수점에 대한 내적 연산을 수행하는 회로(600a)의 블록도이다. 이 실시예의 회로(600a)는, 승산기들(610a-613a)을 통하여, 2개의 레지스터들(601a 및 605a)의 대응하는 단일 정밀도 엘리먼트들을 곱하고, 그의 결과들은 즉시 필드 IMM8[7:4]를 이용하여 멀티플렉서들(615a-618a)에 의해 선택될 수 있다. 다르게는, 멀티플렉서들(615a-618a)은 각 엘리먼트에 대한 승산 연산의 대응하는 곱 대신에 제로 값을 선택할 수 있다. 멀티플렉서들(615a-618a)에 의한 선택의 결과는 그 후 가산기(620a)에 의해 함께 더해지고, 그 결과는, 멀티플렉서들(625a-628a)을 이용하여 가산기(620a)로부터의 대응하는 합계 결과를 선택하는, 즉시 필드 IMM8[3:0]의 값에 따라서 결과 레지스터(630a)의 엘리먼트들 중 임의의 것에 저장된다. 일 실시예에서, 멀티플렉서들(625a-628a)은 결과 엘리먼트에 저장될 합계 결과가 선택되지 않으면 제로들을 선택하여 결과 레지스터(630a)의 엘리먼트를 채울 수 있다. 다른 실시예들에서는, 다양한 승산 곱들의 합계들을 생성하기 위해 보다 많은 가산기들이 이용될 수 있다. 또한, 일부 실시예들에서는, 곱 또는 합계 결과들이 더 연산될 때까지 그것들을 저장하기 위해 중간 저장 엘리먼트들이 이용될 수 있다.
도 6b는 일 실시예에 따른 단일 정밀도 정수 또는 부동 소수점에 대한 내적 연산을 수행하는 회로(600b)의 블록도이다. 이 실시예의 회로(600b)는, 승산기들(610b, 612b)을 통하여, 2개의 레지스터들(601b 및 605b)의 대응하는 단일 정밀도 엘리먼트들을 곱하고, 그의 결과들은 즉시 필드 IMM8[7:4]를 이용하여 멀티플렉서들(615b, 617b)에 의해 선택될 수 있다. 다르게는, 멀티플렉서들(615b, 617b)은 각 엘리먼트에 대한 승산 연산의 대응하는 곱 대신에 제로 값을 선택할 수 있다. 멀티플렉서들(615b, 617b)에 의한 선택의 결과는 그 후 가산기(620b)에 의해 함께 더해지고, 그 결과는, 멀티플렉서들(625b, 627b)을 이용하여 가산기(620b)로부터의 대응하는 합계 결과를 선택하는, 즉시 필드 IMM8[3:0]의 값에 따라서 결과 레지스터(630b)의 엘리먼트들 중 임의의 것에 저장된다. 일 실시예에서, 멀티플렉서들(625b, 627b)은 결과 엘리먼트에 저장될 합계 결과가 선택되지 않으면 제로들을 선택하여 결과 레지스터(630b)의 엘리먼트를 채울 수 있다. 다른 실시예들에서는, 다양한 승산 곱들의 합계들을 생성하기 위해 보다 많은 가산기들이 이용될 수 있다. 또한, 일부 실시예들에서는, 곱 또는 합계 결과들이 더 연산될 때까지 그것들을 저장하기 위해 중간 저장 엘리먼트들이 이용될 수 있다.
도 7a는 일 실시예에 따른, DPPS 명령을 수행하는 연산들의 의사 코드 표현이다. 도 7a에 도시된 의사 코드는 즉시 필드("IMM8[4]")에 저장된 즉시 값이 "1"과 같은 경우에만 소스 레지스터("SRC") 내의 비트들 31-0에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 데스티네이션 레지스터("DEST") 내의 비트들 31-0에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 임시 레지스터("TEMP1")의 비트들 31-0에 저장되는 것을 나타낸다. 그렇지 않다면, 비트 저장 위치들 31-0은 모두 제로(all zeros)와 같은 널 값을 포함할 수 있다.
또한 도 7a에는 즉시 필드("IMM8[5]")에 저장된 즉시 값이 "1"과 같은 경우에만 SRC 레지스터 내의 비트들 63-32에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 DEST 레지스터 내의 비트들 63-32에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 TEMP1 레지스터의 비트들 63-32에 저장되는 것을 나타내는 의사 코드가 도시되어 있다. 그렇지 않다면, 비트 저장 위치들 63-32는 모두 제로와 같은 널 값을 포함할 수 있다.
유사하게 도 7a에는 즉시 필드("IMM8[6]")에 저장된 즉시 값이 "1"과 같은 경우에만 SRC 레지스터 내의 비트들 95-64에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 DEST 레지스터 내의 비트들 95-64에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 TEMP1 레지스터의 비트들 95-64에 저장되는 것을 나타내는 의사 코드가 도시되어 있다. 그렇지 않다면, 비트 저장 위치들 95-64는 모두 제로와 같은 널 값을 포함할 수 있다.
마지막으로, 도 7a에는 즉시 필드("IMM8[7]")에 저장된 즉시 값이 "1"과 같은 경우에만 SRC 레지스터 내의 비트들 127-96에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 DEST 레지스터 내의 비트들 127-96에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 TEMP1 레지스터의 비트들 127-96에 저장되는 것을 나타내는 의사 코드가 도시되어 있다. 그렇지 않다면, 비트 저장 위치들 127-96은 모두 제로와 같은 널 값을 포함할 수 있다.
다음으로, 도 7a는 TEMP1의 비트들 31-0이 비트들 63-32에 더해지고 그 결과가 제2 임시 레지스터("TEMP2")의 비트 저장소 31-0에 저장되는 것을 도시한다. 유사하게, TEMP1의 비트들 95-64가 비트들 127-96에 더해지고 그 결과가 제3 임시 레지스터("TEMP3")의 비트 저장소 31-0에 저장된다. 마지막으로, TEMP2의 비트들 31-0이 TEMP3의 비트들 31-0에 더해지고 그 결과가 제4 임시 레지스터("TEMP4")의 비트 저장소 31-0에 저장된다.
일 실시예에서, 임시 레지스터들에 저장된 데이터는 그 후 DEST 레지스터에 저장될 수 있다. 데이터를 저장할 DEST 레지스터 내의 특정 위치는 IMM8[x] 내의 필드들과 같은 DPPS 명령 내의 다른 필드들에 의존할 수 있다. 특히, 도 7a는, 일 실시예에서, TEMP4의 비트들 31-0이, IMM8[0]이 "1"과 같다면 DEST 비트 저장소 31-0에 저장되고, IMM8[1]이 "1"과 같다면 DEST 비트 저장소 63-32에 저장되고, IMM8[2]가 "1"과 같다면 DEST 비트 저장소 95-64에 저장되고, 또는 IMM8[3]이 "1"과 같다면 DEST 비트 저장소 127-96에 저장되는 것을 도시한다. 그렇지 않다면, 대응하는 DEST 비트 엘리먼트는 모드 제로와 같은 널 값을 포함할 것이다.
도 7b는 일 실시예에 따른, DPPD 명령을 수행하는 연산들의 의사 코드 표현이다. 도 7b에 도시된 의사 코드는 즉시 필드("IMM8[4]")에 저장된 즉시 값이 "1"과 같은 경우에만 소스 레지스터("SRC") 내의 비트들 63-0에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 데스티네이션 레지스터("DEST") 내의 비트들 63-0에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 임시 레지스터("TEMP1")의 비트들 63-0에 저장되는 것을 나타낸다. 그렇지 않다면, 비트 저장 위치들 63-0은 모두 제로와 같은 널 값을 포함할 수 있다.
또한, 도 7b에는 즉시 필드("IMM8[5]")에 저장된 즉시 값이 "1"과 같은 경우에만 SRC 레지스터 내의 비트들 127-64에 저장된 단일 정밀도 부동 소수점 또는 정수 값이 DEST 레지스터 내의 비트들 127-64에 저장된 단일 정밀도 부동 소수점 또는 정수 값에 곱해지고 그 결과가 TEMP1 레지스터의 비트들 127-64에 저장되는 것을 나타내는 의사 코드가 도시되어 있다. 그렇지 않다면, 비트 저장 위치들 127-64는 모두 제로와 같은 널 값을 포함할 수 있다.
다음으로, 도 7b는 TEMP1의 비트들 63-0이 비트들 127-64에 더해지고 그 결과가 제2 임시 레지스터("TEMP2")의 비트 저장소 63-0에 저장되는 것을 도시한다. 일 실시예에서, 임시 레지스터들에 저장된 데이터는 그 후 DEST 레지스터에 저장될 수 있다. 데이터를 저장할 DEST 레지스터 내의 특정 위치는 IMM8[x] 내의 필드들과 같은 DPPS 명령 내의 다른 필드들에 의존할 수 있다. 특히, 도 7b는, 일 실시예에서, IMM8[0]이 "1"과 같다면 TEMP2의 비트들 63-0이 DEST 비트 저장소 63-0에 저장되고, 또는 IMM8[1]이 "1"과 같다면 TEMP2의 비트들 63-0이 DEST 비트 저장소 127-64에 저장되는 것을 도시한다. 그렇지 않다면, 대응하는 DEST 비트 엘리먼트는 모드 제로와 같은 널 값을 포함할 것이다.
도 7a 및 7b에 개시된 연산들은 본 발명의 하나 이상의 실시예들에서 이용될 수 있는 연산들의 하나의 표현에 불과하다. 구체적으로, 도 7a 및 7b에 도시된 의사 코드는 128 비트 레지스터들을 갖는 하나 이상의 프로세서 아키텍처에 따라 수행되는 연산들에 대응한다. 다른 실시예들은 임의의 사이즈의 레지스터, 또는 다른 타입의 저장 영역을 갖는 프로세서 아키텍처들에서 수행될 수 있다. 또한, 다른 실시예들은 도 7a 및 7b에 도시된 바로 그 레지스터들을 이용하지 않을 수 있다. 예를 들면, 일부 실시예들에서는, 피연산자들을 저장하기 위해 상이한 개수의 임시 레지스터들이 이용되거나, 또는 아무것도 이용되지 않을 수도 있다. 마지막으로, 본 발명의 실시예들은 임의의 수의 레지스터들 또는 데이터타입들을 이용하는 다수의 프로세서들 또는 프로세싱 코어들 사이에서 수행될 수 있다.
이와 같이, 내적 연산을 수행하는 기법들이 개시되었다. 어떤 정해진 예시적인 실시예들이 설명되고 첨부 도면들에서 도시되었지만, 그러한 실시예들은 단지 설명에 도움이 되는 것일 뿐이고 광범위한 발명을 제한하는 것이 아니며, 이 명세서를 숙독한 이 기술 분야의 통상의 기술을 가진 자라면 다양한 다른 변형들을 생각해낼 수 있으므로, 이 발명은 도시되고 설명된 그 특정 구성들 및 배열들에 제한되지 않는다는 것을 이해해야 한다. 성장이 빠르고 추가적인 진보가 쉽사리 예견되지 않는, 이와 같은 기술 분야에서, 개시된 실시예들은 본 명세서의 원리들 또는 첨부된 청구항들의 범위에서 일탈하지 않고 가능하게 하는 기술적 진보에 의해 촉진되는 대로 배열 및 상세에서 쉽사리 변경될 수 있다.

Claims (17)

  1. 내적 연산을 수행하는 프로세서로서,
    내적 명령을 페치하는(fetch) 페처(fetcher);
    상기 페처에 의해 페치되는 상기 내적 명령을 디코딩하는 디코더;
    상기 내적 명령을 스케줄링하는 스케줄러;
    적어도 두 개의 피연산자에 대해 상기 내적 명령을 수행하는 실행 유닛 - 상기 피연산자 각각은 내적 결과를 생성하기 위해 상기 내적에 그들 곱들(products)의 포함을 프로그래밍가능하게 선택할 수 있도록 제1 데이터타입의 상응하는 복수의 패킹된 값을 갖음 - ; 및
    상기 적어도 두 개의 피연산자와 상기 내적 결과를 저장하는 레지스터 파일
    을 포함하는 프로세서.
  2. 제1항에 있어서,
    상기 제1 데이터타입은 정수 데이터타입인 프로세서.
  3. 제1항에 있어서,
    상기 제1 데이터타입은 부동 소수점 데이터타입인 프로세서.
  4. 제1항에 있어서,
    상기 적어도 두 개의 피연산자는 각각 2개의 패킹된 값들만을 갖는 프로세서.
  5. 제1항에 있어서,
    상기 적어도 두 개의 피연산자는 각각 4개의 패킹된 값들만을 갖는 프로세서.
  6. 제1항에 있어서,
    상기 복수의 패킹된 값들 각각은 단일 정밀도(single-precision) 값이고 32 비트에 의해 표현되는 프로세서.
  7. 제1항에 있어서,
    상기 복수의 패킹된 값들 각각은 배 정밀도(double-precision) 값이고 64 비트에 의해 표현되는 프로세서.
  8. 제1항에 있어서,
    상기 적어도 두 개의 피연산자 및 상기 내적 결과는 128 비트까지의 데이터를 저장하는 상기 레지스터 파일 내의 적어도 두 개의 레지스터에 저장되는 프로세서.
  9. 제1항에 있어서,
    상기 내적 명령은 소스 피연산자 지시자(source operand indicator), 데스티네이션 피연산자 지시자(destination operand indicator), 및 적어도 하나의 즉시 값 지시자(immediate value indicator)를 포함하는 프로세서.
  10. 제9항에 있어서,
    상기 소스 피연산자 지시자는 상기 복수의 패킹된 값을 저장하는 복수의 엘리먼트를 갖는 상기 레지스터 파일 내의 소스 레지스터의 어드레스를 포함하는 프로세서.
  11. 제9항에 있어서,
    상기 데스티네이션 피연산자 지시자는 상기 복수의 패킹된 값을 저장하는 복수의 엘리먼트를 갖는 상기 레지스터 파일 내의 데스티네이션 레지스터의 어드레스를 포함하는 프로세서.
  12. 데이터 프로세싱 시스템으로서,
    캐시 메모리;
    입력/출력 시스템;
    상기 캐시 메모리에 연결되어 데이터 프로세싱 명령들의 스트림을 수행하는 메인 프로세서 - 상기 메인 프로세서는 상기 캐시 메모리와 상기 입력/출력 시스템과의 상호작용을 포함하는 일반적인 타입의 데이터 프로세싱 동작들을 제어하는 데이터 프로세싱 명령들의 스트림을 실행함 -;
    적어도 두 개의 피연산자에 대한 내적 연산을 수행하기 위한 내적 명령을 포함하는 데이터 프로세싱 명령들의 SIMD 코프로세서 스트림 (SIMD coprocessor stream)을 수신하고 실행하는 SIMD 코프로세서 - 상기 피연산자 각각은 제1 데이터타입의 상응하는 복수의 패킹된 값을 갖고 내적 결과를 생성하기 위해 상기 내적에 그들 곱들(products)의 포함을 프로그래밍가능하게 선택할 수 있음 - ; 및
    상기 적어도 두 개의 피연산자와 상기 내적 결과를 저장하는 레지스터 파일
    를 포함하는 데이터 프로세싱 시스템.
  13. 프로세서로서,
    3차원 (3D) 변환과 조명 (lighting) 연산들을 수행하기 위한 복수의 레지스터 및 명령 디코더를 갖는 부동 소수점 SIMD (single-instruction-multiple-data) 코프로세서;
    레벨 1 (L1) 캐시 메모리;
    레벨 2 (L2) 캐시 메모리;
    DMA(direct memory access) 로직; 및
    외부 메모리를 접속하는 인터페이스를 포함하고,
    상기 부동 소수점 SIMD 코프로세서는
    내적 명령을 수신하며 - 상기 내적 명령은 제1 엘리먼트, 제2 엘리먼트, 제3 엘리먼트 및 제4 엘리먼트를 갖는 제1 소스 피연산자와 또 다른 제1 엘리먼트, 또 다른 제2 엘리먼트, 또 다른 제3 엘리먼트 및 또 다른 제4 엘리먼트를 갖는 제2 소스 피연산자를 포함함 -,
    상기 명령 디코더를 사용하여 상기 내적 명령을 디코드하고,
    상기 내적 명령을 디코딩하는 것에 응답하여 상기 내적 명령을 실행하며,
    상기 내적 명령을 실행하는 것은,
    상기 제1 소스 피연산자의 상기 제1 엘리먼트를 상기 제2 소스 피연산자의 상기 대응하는 제1 엘리먼트와 곱하여 제1 곱을 생성하고,
    상기 제1 소스 피연산자의 상기 제2 엘리먼트를 상기 제2 소스 피연산자의 상기 대응하는 제2 엘리먼트와 곱하여 제2 곱을 생성하며,
    상기 제1 소스 피연산자의 상기 제3 엘리먼트를 상기 제2 소스 피연산자의 상기 대응하는 제3 엘리먼트와 곱하여 제3 곱을 생성하고,
    상기 제1 소스 피연산자의 상기 제4 엘리먼트를 상기 제2 소스 피연산자의 상기 대응하는 제4 엘리먼트와 곱하여 제4 곱을 생성하며,
    상기 제1 곱, 상기 제2 곱, 상기 제3 곱 및 제4 곱의 합계를 생성하는 것인,
    프로세서.
  14. 32 이상 비트를 갖는 명령 세트와, IA-32 Intel 명령 세트에 기술된 바와 같은 연산부호(opcode) 포맷에 대응하는 레지스터/메모리 피연산자 어드레싱(addressing) 모드들을 추가적으로 지원하는 프로세서로서,
    제1 소스 피연산자 식별자, 제2 소스 피연산자 식별자, 및 데스티네이션 식별자를 갖는 SIMD 코프로세서 내적 명령을 디코드하는 디코더;
    정수 레지스터 및 부동 소수점 레지스터를 포함하는 레지스터 파일;
    상기 레지스터 파일 내의 상기 레지스터들을 이름 변경하는 레지스터 이름 변경기 (register renamer) - 상기 레지스터 파일은 제1 패킹된 피연산자를 저장하는 식별된 제1 소스 레지스터 및 제2 패킹된 피연산자를 저장하는 식별된 제2 소스 레지스터를 포함함 -;
    상기 디코더로부터 마이크로 연산들(micro-operations)을 보유하는 큐(queue);
    상기 소스 레지스터들 내의 종속 피연산자들의 준비성(readiness)에 기초하여 상기 연산들의 실행을 스케줄링하는 스케줄러;
    상기 레지스터 파일에 연결되고, 상기 제1 패킹된 피연산자의 데이터 엘리먼트들에 대해 상기 제2 패킹된 연산자의 대응하는 데이터 엘리먼트들을 이용해 상기 SIMD 코프로세서 내적 연산을 수행하는 실행 유닛; 및
    상기 실행 유닛의 내적 결과를 저장하는 식별된 데스티네이션 레지스터
    를 포함하는 프로세서.
  15. SIMD 내적 명령에 의해 표시되는 제어 값에 따라 상기 내적 명령을 수행하는 컴퓨터 구현 방법으로서,
    제1 패킹된 피연산자 및 제2 패킹된 피연산자로부터의 데이터 값들 각각을 그들 곱들이 내적에 포함되는 하기 위해 상기 제어 값에 따라 선택하는 단계;
    선택된 제1 곱을 생성하기 위해 상기 제1 패킹된 피연산자의 제1 데이터 엘리먼트와 상기 제2 패킹된 피연자의 제1 데이터 엘리먼트를 곱하는 단계;
    선택된 제2 곱을 생성하기 위해 상기 제1 패킹된 피연산자의 제2 데이터 엘리먼트와 상기 제2 패킹된 피연자의 제2 데이터 엘리먼트를 곱하는 단계; 및
    내적 결과를 생성하기 위해 상기 선택된 제1 곱을 상기 선택된 제2 곱에 더하는 단계
    를 포함하는 방법.
  16. 시스템으로서,
    SIMD 내적 명령을 저장하는 제1 메모리; 및
    상기 제1 메모리와 연결되어 복수의 피연산자에 대해 상기 SIMD 내적 명령을 수행하는 프로세서를 포함하고,
    상기 복수의 피연산자 각각은 상기 내적에 그들 곱들이 포함되도록 하기 위해 상기 SIMD 내적 명령에 의해 선택할 수 있는 복수의 상응하는 패킹된 값을 포함하는,
    시스템.
  17. 프로세서로서,
    제1 및 제2 데이터 값을 포함하는 제1 패킹된 피연산자를 저장하는 소스 레지스터;
    제3 및 제4 데이터 값을 포함하는 제2 패킹된 피연산자를 저장하는 데스티네이션 레지스터; 및
    SIMD 내적 명령을 수행하는 논리(logic)을 포함하고,
    상기 논리는 내적에 상기 제1 패킹된 피연산자 및 제2 패킹된 피연산자로부터의 데이터 값들 각각을 그들 곱들이 내적에 포함되도록 하기 위해 상기 내적 명령에 의해 표시되는 제어 값에 따라 선택하며,
    상기 논리는 상기 선택된 제1 및 제3 데이터 값들을 곱하여 제1 곱을 생성하는 제1 곱셈기(multiplier)와 상기 선택된 제2 및 제4 데이터 값들을 곱하여 제2 곱을 생성하는 제2 곱셈기를 포함하고,
    상기 논리는 상기 제1 및 제2 곱을 더하여 적어도 하나의 합(sum)을 산출하는 적어도 하나의 덧셈기를 더 포함하는,
    프로세서.
KR1020117020282A 2006-09-20 2007-09-20 내적 연산을 수행하기 위한 명령 및 논리 KR101300431B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/524,852 US20080071851A1 (en) 2006-09-20 2006-09-20 Instruction and logic for performing a dot-product operation
US11/524,852 2006-09-20
PCT/US2007/079098 WO2008036859A1 (en) 2006-09-20 2007-09-20 Instruction and logic for performing a dot-product operation

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020097005675A Division KR101105527B1 (ko) 2006-09-20 2007-09-20 내적 연산을 수행하기 위한 명령 및 논리

Publications (2)

Publication Number Publication Date
KR20110112453A true KR20110112453A (ko) 2011-10-12
KR101300431B1 KR101300431B1 (ko) 2013-08-27

Family

ID=39189946

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020097005675A KR101105527B1 (ko) 2006-09-20 2007-09-20 내적 연산을 수행하기 위한 명령 및 논리
KR1020117020282A KR101300431B1 (ko) 2006-09-20 2007-09-20 내적 연산을 수행하기 위한 명령 및 논리

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020097005675A KR101105527B1 (ko) 2006-09-20 2007-09-20 내적 연산을 수행하기 위한 명령 및 논리

Country Status (7)

Country Link
US (5) US20080071851A1 (ko)
JP (1) JP4697639B2 (ko)
KR (2) KR101105527B1 (ko)
CN (5) CN102622203A (ko)
DE (1) DE112007002101T5 (ko)
RU (1) RU2421796C2 (ko)
WO (1) WO2008036859A1 (ko)

Families Citing this family (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
US8332452B2 (en) * 2006-10-31 2012-12-11 International Business Machines Corporation Single precision vector dot product with “word” vector write mask
US9495724B2 (en) * 2006-10-31 2016-11-15 International Business Machines Corporation Single precision vector permute immediate with “word” vector write mask
KR20080067075A (ko) * 2007-01-15 2008-07-18 주식회사 히타치엘지 데이터 스토리지 코리아 광디스크의 암호화 데이터 기록 및 재생방법
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9513905B2 (en) 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
US9747105B2 (en) 2009-12-17 2017-08-29 Intel Corporation Method and apparatus for performing a shift and exclusive or operation in a single instruction
US8577948B2 (en) 2010-09-20 2013-11-05 Intel Corporation Split path multiply accumulate unit
US8688957B2 (en) 2010-12-21 2014-04-01 Intel Corporation Mechanism for conflict detection using SIMD
CN102184521B (zh) * 2011-03-24 2013-03-06 苏州迪吉特电子科技有限公司 高性能图像处理系统及图像数据处理方法
DE112011105665T5 (de) * 2011-09-26 2014-08-21 Intel Corporation Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
GB2508312B (en) * 2011-09-26 2020-04-22 Intel Corp Instruction and logic to provide vector load-op/store-op with stride functionality
WO2013077845A1 (en) 2011-11-21 2013-05-30 Intel Corporation Reducing power consumption in a fused multiply-add (fma) unit of a processor
CN102520906A (zh) * 2011-12-13 2012-06-27 中国科学院自动化研究所 支持定浮点可重构的向量长度可配置的向量点积累加网络
CN104303141A (zh) * 2011-12-22 2015-01-21 英特尔公司 用于从寄存器提取写掩码的系统、装置和方法
CN104011651B (zh) * 2011-12-22 2017-10-20 英特尔公司 用于执行向量计算指令的方法、装置和系统
US20130339689A1 (en) * 2011-12-29 2013-12-19 Srikanth T. Srinivasan Later stage read port reduction
US20140195783A1 (en) * 2011-12-29 2014-07-10 Krishnan Karthikeyan Dot product processors, methods, systems, and instructions
US9268596B2 (en) 2012-02-02 2016-02-23 Intel Corparation Instruction and logic to test transactional execution status
US20130311753A1 (en) * 2012-05-19 2013-11-21 Venu Kandadai Method and device (universal multifunction accelerator) for accelerating computations by parallel computations of middle stratum operations
CN105760138B (zh) * 2012-06-29 2018-12-11 英特尔公司 用于测试事务性执行状态的系统
US9411584B2 (en) 2012-12-29 2016-08-09 Intel Corporation Methods, apparatus, instructions, and logic to provide vector address conflict detection functionality
US9411592B2 (en) 2012-12-29 2016-08-09 Intel Corporation Vector address conflict resolution with vector population count functionality
JP6378515B2 (ja) * 2014-03-26 2018-08-22 株式会社メガチップス Vliwプロセッサ
US11544214B2 (en) 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register
US9898286B2 (en) 2015-05-05 2018-02-20 Intel Corporation Packed finite impulse response (FIR) filter processors, methods, systems, and instructions
US20170046153A1 (en) * 2015-08-14 2017-02-16 Qualcomm Incorporated Simd multiply and horizontal reduce operations
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
US10007519B2 (en) * 2015-12-22 2018-06-26 Intel IP Corporation Instructions and logic for vector bit field compression and expansion
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
US9875084B2 (en) * 2016-04-28 2018-01-23 Vivante Corporation Calculating trigonometric functions using a four input dot product circuit
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
US10049082B2 (en) 2016-09-15 2018-08-14 Altera Corporation Dot product based processing elements
CN106874796B (zh) * 2017-02-16 2021-03-30 中云信安(深圳)科技有限公司 系统运行中指令流的安全检测和容错方法
JP7148526B2 (ja) * 2017-02-23 2022-10-05 アーム・リミテッド データ処理装置におけるベクトルによる要素演算
GB2560159B (en) 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
WO2018174934A1 (en) 2017-03-20 2018-09-27 Intel Corporation Systems, methods, and apparatus for matrix move
CN106951211B (zh) * 2017-03-27 2019-10-18 南京大学 一种可重构定浮点通用乘法器
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN107220702B (zh) * 2017-06-21 2020-11-24 北京图森智途科技有限公司 一种低计算能力处理设备的计算机视觉处理方法及装置
GB2563878B (en) * 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US11803377B2 (en) * 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US10749502B2 (en) * 2017-09-29 2020-08-18 Intel Corporation Apparatus and method for performing horizontal filter operations
CN109034382A (zh) 2017-10-30 2018-12-18 上海寒武纪信息科技有限公司 场景或物体的识别方法及相关产品
CN109871236A (zh) * 2017-12-01 2019-06-11 超威半导体公司 具有低功率并行矩阵乘法流水线的流处理器
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11669326B2 (en) * 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11409525B2 (en) * 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US10921122B2 (en) * 2018-02-06 2021-02-16 Stmicroelectronics S.R.L. Tilt event detection device, system and method
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US10657442B2 (en) * 2018-04-19 2020-05-19 International Business Machines Corporation Deep learning accelerator architecture with chunking GEMM
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10642614B2 (en) * 2018-09-29 2020-05-05 Intel Corporation Reconfigurable multi-precision integer dot-product hardware accelerator for machine-learning applications
US10768895B2 (en) * 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
US11366663B2 (en) * 2018-11-09 2022-06-21 Intel Corporation Systems and methods for performing 16-bit floating-point vector dot product instructions
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US20200210517A1 (en) * 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
JP7408671B2 (ja) 2019-03-15 2024-01-05 インテル コーポレイション シストリックアレイに対するブロックスパース演算のためのアーキテクチャ
US20220179787A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for improving cache efficiency and utilization
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
KR102474054B1 (ko) * 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서
US11263291B2 (en) 2020-06-26 2022-03-01 Intel Corporation Systems and methods for combining low-mantissa units to achieve and exceed FP64 emulation of matrix multiplication
US11972230B2 (en) 2020-06-27 2024-04-30 Intel Corporation Matrix transpose and multiply
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions

Family Cites Families (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1020060A (en) * 1910-08-19 1912-03-12 Otis Elevator Co Conveyer.
US1467622A (en) * 1922-04-20 1923-09-11 Crawford E Mcmurphy Nest box
JPS6297060A (ja) * 1985-10-23 1987-05-06 Mitsubishi Electric Corp デイジタルシグナルプロセツサ
US5119484A (en) * 1987-02-24 1992-06-02 Digital Equipment Corporation Selections between alternate control word and current instruction generated control word for alu in respond to alu output and current instruction
US4949250A (en) * 1988-03-18 1990-08-14 Digital Equipment Corporation Method and apparatus for executing instructions for a vector processing system
DE58908705D1 (de) * 1989-09-20 1995-01-12 Itt Ind Gmbh Deutsche Schaltungsanordnung zur Produktsummenberechnung.
JPH05242065A (ja) * 1992-02-28 1993-09-21 Hitachi Ltd 情報処理装置及びシステム
US5669010A (en) * 1992-05-18 1997-09-16 Silicon Engines Cascaded two-stage computational SIMD engine having multi-port memory and multiple arithmetic units
US5311459A (en) * 1992-09-17 1994-05-10 Eastman Kodak Company Selectively configurable integrated circuit device for performing multiple digital signal processing functions
ZA938324B (en) * 1992-11-24 1994-06-07 Qualcomm Inc Pilot carrier dot product circuit
US5422799A (en) * 1994-09-15 1995-06-06 Morrison, Sr.; Donald J. Indicating flashlight
GB9514684D0 (en) * 1995-07-18 1995-09-13 Sgs Thomson Microelectronics An arithmetic unit
EP0847551B1 (en) * 1995-08-31 2012-12-05 Intel Corporation A set of instructions for operating on packed data
US6385634B1 (en) * 1995-08-31 2002-05-07 Intel Corporation Method for performing multiply-add operations on packed data
US5983257A (en) * 1995-12-26 1999-11-09 Intel Corporation System for signal processing using multiply-add operations
US5793661A (en) * 1995-12-26 1998-08-11 Intel Corporation Method and apparatus for performing multiply and accumulate operations on packed data
US6128726A (en) * 1996-06-04 2000-10-03 Sigma Designs, Inc. Accurate high speed digital signal processor
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
JP3790307B2 (ja) 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US5987490A (en) * 1997-11-14 1999-11-16 Lucent Technologies Inc. Mac processor with efficient Viterbi ACS operation and automatic traceback store
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
US6115812A (en) * 1998-04-01 2000-09-05 Intel Corporation Method and apparatus for efficient vertical SIMD computations
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
US6484255B1 (en) * 1999-09-20 2002-11-19 Intel Corporation Selective writing of data elements from packed data based upon a mask using predication
US6574651B1 (en) * 1999-10-01 2003-06-03 Hitachi, Ltd. Method and apparatus for arithmetic operation on vectored data
US6353843B1 (en) * 1999-10-08 2002-03-05 Sony Corporation Of Japan High performance universal multiplier circuit
US7062526B1 (en) * 2000-02-18 2006-06-13 Texas Instruments Incorporated Microprocessor with rounding multiply instructions
US6557022B1 (en) * 2000-02-26 2003-04-29 Qualcomm, Incorporated Digital signal processor with coupled multiply-accumulate units
JP3940542B2 (ja) * 2000-03-13 2007-07-04 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6675286B1 (en) * 2000-04-27 2004-01-06 University Of Washington Multimedia instruction set for wide data paths
WO2001089098A2 (en) * 2000-05-05 2001-11-22 Lee Ruby B A method and system for performing permutations with bit permutation instructions
US6728874B1 (en) * 2000-10-10 2004-04-27 Koninklijke Philips Electronics N.V. System and method for processing vectorized data
US7072929B2 (en) * 2000-11-01 2006-07-04 Pts Corporation Methods and apparatus for efficient complex long multiplication and covariance matrix implementation
US6774903B1 (en) * 2000-11-06 2004-08-10 Ati International Srl Palette anti-sparkle enhancement
US6922716B2 (en) * 2001-07-13 2005-07-26 Motorola, Inc. Method and apparatus for vector processing
US6813627B2 (en) * 2001-07-31 2004-11-02 Hewlett-Packard Development Company, L.P. Method and apparatus for performing integer multiply operations using primitive multi-media operations that operate on smaller operands
US20040054877A1 (en) * 2001-10-29 2004-03-18 Macy William W. Method and apparatus for shuffling data
US7158141B2 (en) * 2002-01-17 2007-01-02 University Of Washington Programmable 3D graphics pipeline for multimedia applications
JP3857614B2 (ja) * 2002-06-03 2006-12-13 松下電器産業株式会社 プロセッサ
CN1685309B (zh) * 2002-09-24 2010-08-11 美商内数位科技公司 计算上高效数学引擎
KR101005718B1 (ko) * 2003-05-09 2011-01-10 샌드브리지 테크놀로지스, 인코포레이티드 포화와 함께 또는 포화 없이 다중 오퍼랜드들의 누산을 위한 프로세서 감소 유닛
US6862027B2 (en) * 2003-06-30 2005-03-01 Microsoft Corp. System and method for parallel execution of data generation tasks
US7689641B2 (en) * 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
US7539714B2 (en) * 2003-06-30 2009-05-26 Intel Corporation Method, apparatus, and instruction for performing a sign operation that multiplies
US7546330B2 (en) * 2003-09-30 2009-06-09 Broadcom Corporation Systems for performing multiply-accumulate operations on operands representing complex numbers
KR20060044102A (ko) * 2004-11-11 2006-05-16 삼성전자주식회사 복수 개의 동일한 부분곱 계산 모듈을 포함하는 다중곱셈기 및 다중 곱셈 방법
US8074051B2 (en) * 2004-04-07 2011-12-06 Aspen Acquisition Corporation Multithreaded processor with multiple concurrent pipelines per thread
US7475222B2 (en) * 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats
US20060149804A1 (en) * 2004-11-30 2006-07-06 International Business Machines Corporation Multiply-sum dot product instruction with mask and splat
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation

Also Published As

Publication number Publication date
CN101187861A (zh) 2008-05-28
CN105022605B (zh) 2018-10-26
RU2009114818A (ru) 2010-10-27
CN102004628B (zh) 2015-07-22
CN101187861B (zh) 2012-02-29
US20080071851A1 (en) 2008-03-20
KR101300431B1 (ko) 2013-08-27
KR20090042329A (ko) 2009-04-29
US20140032624A1 (en) 2014-01-30
CN107741842B (zh) 2021-08-06
JP2008077663A (ja) 2008-04-03
WO2008036859A1 (en) 2008-03-27
US20130290392A1 (en) 2013-10-31
CN105022605A (zh) 2015-11-04
US20140032881A1 (en) 2014-01-30
DE112007002101T5 (de) 2009-07-09
KR101105527B1 (ko) 2012-01-13
CN102004628A (zh) 2011-04-06
CN107741842A (zh) 2018-02-27
CN102622203A (zh) 2012-08-01
JP4697639B2 (ja) 2011-06-08
US20170364476A1 (en) 2017-12-21
RU2421796C2 (ru) 2011-06-20

Similar Documents

Publication Publication Date Title
KR101300431B1 (ko) 내적 연산을 수행하기 위한 명령 및 논리
JP7052171B2 (ja) プロセッサ、システム及び方法
US10684855B2 (en) Method and apparatus for performing a shift and exclusive or operation in a single instruction
KR100597930B1 (ko) 라운드 및 시프트를 갖는 simd 정수 곱셈 하이

Legal Events

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

Payment date: 20160727

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170804

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180730

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190729

Year of fee payment: 7