KR101482540B1 - 중첩된 피연산자들을 갖는 simd 내적 연산들 - Google Patents

중첩된 피연산자들을 갖는 simd 내적 연산들 Download PDF

Info

Publication number
KR101482540B1
KR101482540B1 KR20107007865A KR20107007865A KR101482540B1 KR 101482540 B1 KR101482540 B1 KR 101482540B1 KR 20107007865 A KR20107007865 A KR 20107007865A KR 20107007865 A KR20107007865 A KR 20107007865A KR 101482540 B1 KR101482540 B1 KR 101482540B1
Authority
KR
South Korea
Prior art keywords
source register
subset
vector
vector elements
elements
Prior art date
Application number
KR20107007865A
Other languages
English (en)
Other versions
KR20100075494A (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 KR20100075494A publication Critical patent/KR20100075494A/ko
Application granted granted Critical
Publication of KR101482540B1 publication Critical patent/KR101482540B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register

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 Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

데이터 프로세싱 시스템(10)은 복수의 범용 레지스터들(34), 및 적어도 2개의 내적들을 동시에 수행하기 위한 벡터 내적 명령을 포함하는, 하나 이상의 명령들을 실행하기 위한 프로세서 회로를 포함한다. 벡터 내적 명령은 복수의 벡터 요소들을 각각 저장하기 위한 제 1 소스 레지스터 및 제 2 소스 레지스터를 식별하고, 제 1 내적은 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 제 2 내적은 제 1 소스 레지스터의 벡터 요소들의 제 2 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 한다. 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 상이하고, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트의 적어도 2개의 벡터 요소들은 중첩한다.

Description

중첩된 피연산자들을 갖는 SIMD 내적 연산들{SIMD DOT PRODUCT OPERATIONS WITH OVERLAPPED OPERANDS}
본 명세서는 일반적으로 데이터 프로세싱 시스템에 관한 것이며, 더 구체적으로는, 데이터 프로세싱 시스템 내에서의 중첩된 피연산자들을 갖는 SIMD 내적 연산들에 관한 것이다.
벡터의 다수의 요소들에 대한 연산들의 병렬 실행을 허용함으로써 데이터 프로세싱 시스템들에서의 증가된 성능이 성취될 수 있다. 예를 들면, 단일-명령 다중-데이터(single-instruction multiple-data; SIMD) 스칼라 프로세서(scalar processor)("쇼트-벡터 머신(short-vector machine)이라고도 칭해짐)는 임의의 기존의 스칼라 범용 레지스터(general purpose register; GPR)를 사용하면서, 제한된 벡터 프로세싱을 허용한다. 예를 들면, 32개의 스칼라 64-비트 GPR들을 갖는 데이터 프로세싱 시스템에서, 각각의 스칼라 레지스터는 2개의 32-비트 벡터 요소들, 4개의 14-비트 벡터 요소들, 또는 8개의 8-비트 벡터 요소들을 보유할 수 있으므로, 2개의 32-비트 벡터 연산들, 4개의 16-비트 벡터 연산들, 또는 8개의 8-비트 벡터 연산들을 수행할 수 있다.
SIMD 아키텍처(architecture)는 이미지 프로세싱과 같은 다양한 여러 알고리즘(algorithm)들 또는 선형 필터(linear filter)들을 광범위하게 사용하는 다른 알고리즘에 대한 성능 강화를 위해 수정가능하다. 그러나, 언더라잉 하드웨어 벡터(underlying hardware vector)들의 디멘전(dimension)들이 이러한 알고리즘들 내에서 프로세싱되는 어레이(array)들의 디멘전들의 효율적인 맵핑(mapping)을 허용하지 않을 때 비효율들이 발생한다.
본 발명은 상기한 바와 같은 종래 기술의 비효율들을 개선할 수 있는 데이터 프로세싱 시스템 및 동시적인 내적 연산들을 수행하기 위한 방법을 제공하고자 하는 것이다.
본 발명의 하나의 실시예에 따르면, 복수의 범용 레지스터들, 및 하나 이상의 명령들을 실행하기 위한 프로세서 회로를 포함하는 데이터 프로세싱 시스템이 제공되며, 하나 이상의 명령들은 적어도 2개의 내적들을 동시에 수행하기 위한 벡터 내적 명령을 포함하고, 벡터 내적 명령은 복수의 범용 레지스터들로부터 제 1 소스 레지스터 및 복수의 범용 레지스터들로부터 제 2 소스 레지스터를 식별하고, 제 1 소스 레지스터 및 제 2 소스 레지스터 각각은 복수의 벡터 요소들을 저장하고, 적어도 2개의 내적들 중 제 1 내적은 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트(subset)와 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 적어도 2개의 내적들 중 제 2 내적은 제 1 소스 레지스터의 벡터 요소들의 제 2 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 하며, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 상이하고, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트의 적어도 2개의 벡터 요소들은 중첩한다.
본 발명은 유사한 요소들에는 동일한 참조 번호들이 병기되어 있는 첨부 도면들에 의해 예로서 설명되고, 상기 첨부 도면들에 의해 제한되지 않는다. 도면들 내의 요소들은 간소화 및 명확화를 위해 도시되며, 반드시 크기대로 도시되어 있지는 않다.
도 1은 본 발명의 일 실시예에 따른 데이터 프로세싱 시스템을 블록도 형태로 도시한 도면.
도 2는 본 발명의 일 실시예에 따른 도 1의 데이터 프로세싱 시스템에 의해 실행될 수 있는 SIMD 내적 명령을 도시한 도면.
도 3은 본 발명의 일 실시예에 따른 SIMD 내적 연산 동안의 도 1의 스칼라 레지스터 및 실행 유닛들의 부분을 블록도 형태로 도시한 도면.
도 4는 본 발명의 일 실시예에 따른 오프세트(offset)들을 사용한 SIMD 내적 연산 동안의 도 1의 스칼라 레지스터 및 실행 유닛들의 부분을 블록도 형태로 도시한 도면.
많은 량의 이용가능한 데이터 병렬성(parallelism) 동안, SIMD 연산들은 이미지 프로세싱 알고리즘들과 같은, 다양한 여러 알고리즘들에서 광범위하게 사용되는 벡터×매트릭스(vector by matrix) 및 매트릭스×매트릭스(matrix by matrix) 연산들의 개선된 성능을 허용할 수 있다. 예를 들면, 현재 이미지 프로세싱 알고리즘들 뿐만 아니라, 다른 알고리즘들은 피처 인식 프로세서(feature recognition process)의 부분으로서 선형 필터들을 광범위하게 사용한다. 그러나, 언더라잉 하드웨어 벡터들의 디멘전들이 이러한 알고리즘들 내에서 프로세싱되는 어레이들 또는 매트릭스들의 디멘전들의 효율적인 맵핑을 허용하지 않을 때 비효율들이 발생할 수 있다. 예를 들면, 하나의 현재 이용가능한 SIMD 아키텍처는 상위의 4개의 벡터 요소들 및 하위의 4개의 요소들에 대해 독립적인 내적 연산들을 수행하는 것을 다루기 위하여 명령들이 제공되는 8 바이트의 벡터들(8개의 개별적인 바이트 벡터 요소들)을 지원한다. 이것은 4×4 매트릭스들 및 4개의-요소 벡터들에 대한 연산에 매우 효율적이지만, 이미지 프로세싱 알고리즘들에서 통용되는 3×3 및 5×5 매트릭스들에 대해 연산할 때 효율이 감소된다.
예를 들면, 많은 이미지 프로세싱 알고리즘들에서, 픽셀 및 이의 가장 가까운 8개의 이웃들(따라서, 3×3 매트릭스들을 포함하는) 또는 24개의 이웃들(따라서, 5×5 매트릭스들을 포함하는)에 대해 연산들이 수행된다. 5×5 선형 필터들은 전형적으로 3×3 선형 필터들에 비하여 더 적은 아티팩트(artifact)들을 갖는 더 양호한 결과들을 생성하지만, 덜 효율적이고, 더 많은 계산들을 필요로 한다. 그러므로, 본 발명의 하나의 실시예에서, 현재 이용가능한 SIMD 아키텍처를 사용하여 수행되는 3×3 매트릭스 연산의 효율과 동일하거나 상기 효율을 초과하는 5×5 매트릭스 연산의 효율을 허용할 수 있는 개선된 SIMD 내적 명령이 제공된다. 하나의 실시예에서, 이 개선된 효율은 SIMD 아키텍처 내의 단지 2개의 추가적인 8 비트 × 8 비트 승산기(multiplier)들의 댓가로 성취될 수 있다.
본원에 사용된 바와 같은, 용어 "버스(bus)"는 데이터, 어드레스(address)들, 제어, 또는 상태와 같은, 하나 이상의 다양한 유형들의 정보를 전달하는데 사용될 수 있는 복수의 신호들 또는 컨덕터(conductor)들을 칭하는데 사용된다. 본원에 논의된 바와 같은 컨덕터들은 단일 컨덕터, 복수의 컨덕터들, 단방향성 컨덕터들, 또는 양방향성 컨덕터들인 것과 연관하여 도시 또는 설명될 수 있다. 그러나, 상이한 실시예들은 컨덕터들의 구현을 변화시킬 수 있다. 예를 들면, 양방향성 컨덕터들이라기보다는 오히려, 개별적인 단방향성 컨덕터들이 사용될 수 있고, 그 역도 또한 마찬가지이다. 또한, 복수의 컨덕터들이 다수의 신호들을 직렬로 또는 시간 멀티플렉싱된 방식으로 전달하는 단일 컨덕터로 교체될 수 있다. 마찬가지로, 다수의 신호들을 반송하는(carrying) 단일 컨덕터들이 이러한 신호들의 서브세트들을 반송하는 다양한 여러 컨덕터들로 나누어질 수 있다. 그러므로, 신호들을 전달하기 위한 많은 옵션들이 존재한다.
도 1은 본 발명의 하나의 실시예에 따른 데이터 프로세싱 시스템(10)을 블록도 형태로 도시한다. 데이터 프로세싱 시스템(10)은 프로세서(14), 메모리(12), 입력/출력(I/O)(16), 다른 주변장치들(18), 및 시스템 버스(20)를 포함한다. 메모리(12)는 컨덕터들(22)을 통하여 시스템 버스(20)에 양방향성으로 결합되고, I/O(16)는 컨덕터들(24)을 통하여 시스템 버스(20)에 양방향성으로 결합되고, 다른 주변장치들(18)은 컨덕터들(26)을 통하여 시스템 버스(20)에 양방향성으로 결합되고, 프로세서(14)는 컨덕터들(58)을 통하여 시스템 버스(20)에 양방향성으로 결합된다. 하나의 실시예에서, 다른 주변장치들(18)은 각각이 유니버설 비동기 수신기 송신기(universal asynchronous reciver transmitter; UART), 실시간 클록(real time clock; RTC), 키보드 제어기, 다른 메모리 등과 같은, 임의의 유형의 주변장치일 수 있는 하나 이상의 주변장치들을 포함할 수 있다. 다른 주변장치들(18) 중 일부 또는 모두는 컨덕터들(62)을 통하여 데이터 프로세싱 시스템(10) 외부의 정보를 전달할 수 있다. I/O 회로(16)는 예를 들면, 컨덕터들(60)을 통하여 데이터 프로세싱 시스템(10) 외부의 정보를 수신 또는 제공하는 임의의 유형의 I/O 회로를 포함할 수 있다. 메모리(12)는 예를 들면, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 비휘발성 메모리(예를 들면, 플래시), 등과 같은 임의의 유형의 메모리일 수 있다. 데이터 프로세싱 시스템(10)은 도시된 것들 이외의 요소들을 포함하거나, 도시된 것보다 더 많거나 더 적은 요소들을 포함할 수 있다. 예를 들면, 데이터 프로세싱 시스템(10)은 임의의 수의 메모리들 및 프로세서들을 포함할 수 있다.
프로세서(14)는 예를 들면, 마이크로프로세서, 마이크로제어기, 디지털 신호 프로세서, 등과 같은 임의의 유형의 프로세서일 수 있다. 하나의 실시예에서, 프로세서(14)는 프로세서 코어 또는 프로세서 회로라고 칭해질 수 있다. 또 다른 실시예에서, 프로세서(14)는 다중-프로세서 데이터 프로세싱 시스템에서의 많은 프로세서들 중 하나일 수 있다. 더욱이, 이와 같이 도시되어 있지는 않을지라도, 프로세서(14)는 파이프라인(pipeline)형 프로세서일 수 있다. 도 1에 도시된 실시예에서, 프로세서(14)는 제어 유닛(28), 명령 유닛(30), 실행 유닛들(32), 스칼라 레지스터 파일(scalar register file)(34), 버스 인터페이스 유닛(bus interface unit; BIU)(36), 및 로드/저장 유닛(load/store unit)(38)을 포함한다. 제어 유닛(28)은 컨덕터들(40)을 통하여 명령 유닛(30)에, 컨덕터들(42)을 통하여 실행 유닛들(32)에, 컨덕터들(46)을 통하여 스칼라 레지스터 파일(34)에, 및 컨덕터들(48)을 통하여 로드/저장 유닛(38)에 양방향성으로 결합된다. 실행 유닛들(32)은 컨덕터들(44)을 통하여 스칼라 레지스터 파일(34)에 양방향성으로 결합되고, 스칼라 레지스터 파일(34)은 컨덕터들(50)을 통하여 로드/저장 유닛(38)에 양방향성으로 결합된다. BIU(36)는 컨덕터들(54)을 통하여 명령 유닛(30)에, 그리고 컨덕터들(52)을 통하여 로드/저장 유닛(38)에 양방향성으로 결합된다. 프로세서(14)는 컨덕터들(58)에 결합되는 컨덕터들(56)을 통하여 시스템 버스(20)와 양방향성으로 통신할 수 있다. 프로세서(14)가 도시된 것보다 더 많은 회로를 포함할 수 있고, 부가적인 회로가 또한 컨덕터들(58)에 결합될 수 있다는 점을 주의하라. 즉, 컨덕터들(56)은 컨덕터들(58) 중 일부 또는 모두를 통하여 시스템 버스(20)와 통신할 수 있다. 프로세서(14) 중 일부 또는 모두가 프로세싱 회로라고 칭해질 수 있다는 점을 주의하라.
동작 시에, 명령 유닛(30)이 BIU(36) 및 시스템 버스(20)를 통하여 메모리(12)와 같은, 메모리로부터 명령들을 페칭(fetching)하고, 제어 정보를 제어 유닛(28)으로부터 수신하고 제어 유닛(28)에 제공한다. 명령 유닛(30)은 종래 기술에 공지된 바와 같은 임의의 유형의 명령 유닛일 수 있고, 종래 기술에 공지된 바와 같이 동작하므로, 본원에 더 상세히 설명되지 않을 것이다. 그러므로, 명령 유닛(30)은 예를 들면, 실행 유닛들(32) 및 로드/저장 유닛(38)을 통해 이러한 수신된 명령들의 실행을 제어하는 제어 유닛(28)에 명령들을 제공하고, 상기 실행 유닛들(32) 및 로드/저장 유닛(38) 둘 모두는 필요에 따라, 직접적으로, 또는 제어 유닛(28)을 통하여 스칼라 레지스터 파일(34)과 통신할 수 있다. 예를 들면, 제어 유닛(28)은 로드/저장 유닛(38) 및 BIU(36)를 통하여, 명령들을 실행하기 위해 필요에 따라 (메모리(12)와 같은) 메모리로부터 스칼라 레지스터 파일(34) 내의 레지스터들로 데이터를 로딩할 수 있고, 명령들을 실행하기 위해 필요에 따라 스칼라 레지스터 파일(34) 내의 레지스터들로부터 (메모리(12)와 같은) 메모리로 데이터를 저장할 수 있다. 예를 들면, 하나의 실시예에서, 로드/저장 유닛(38)은 제어 유닛(28)으로부터 컨덕터들(48)을 통하여 제공되는 제어 정보에 기초하여 컨덕터들(50)을 통해 (데이터를 판독 및 기록하도록) 스칼라 레지스터 파일(34)과 직접적으로 통신할 수 있다. 실행 유닛들(32)은 스칼라 레지스터 파일(34) 내에 저장된 데이터를 사용하여 산술, 논리, 시프팅, 또는 다른 연산들을 수행하고, 제어 유닛(28)에 의하여 명령 유닛(30)으로부터 수신되는 명령들을 실행하기 위하여 필요에 따라 스칼라 레지스터 파일(34) 내에 등록하도록 결과들을 저장할 수 있다. 실행 유닛들(32)은 예를 들면, 산술 논리 유닛(arithmetic logic unit; ALU)들, 플로팅 포인트 유닛(floating point unit)들, 등을 포함할 수 있고, 이러한 유닛들은 예를 들면, 승산기들, 가산기들, 누산기들, 중간 결과들의 저장을 위한 저장장치, 등을 포함할 수 있다.
스칼라 레지스터 파일(34)은 N개의 범용 레지스터(GPR)들을 포함하며, 여기서 N은 1보다 크거나 1과 동일한 임의의 정수일 수 있다. 하나의 실시예에서, 스칼라 레지스터 파일(34)은 32개의 64-비트 레지스터들을 포함한다. 본원에 사용된 바와 같은, 스칼라 레지스터는 1차원 맵을 가지므로, 단지 하나의 데이터 로우(row)(예를 들면, 1×M-비트 레지스터)만을 보유하며, 여기서 M은 1보다 크거나 1과 동일한 임의의 정수일 수 있다. 하나의 실시예에서, M은 64이므로, 각각의 레지스터는 64-비트 량을 저장할 수 있다. 스칼라 레지스터 파일(34)은 제어 정보 또는 데이터를 컨덕터들(46)을 통하여 제어 유닛(28)에 제공하거나 제어 유닛(28)으로부터 수신할 수 있다.
프로세서(14)의 동작은 일반적으로 당업자에 의해 이해된다. 그러므로, 프로세서(14)는 도 2 내지 도 4와 연관하여 설명되는 다양한 실시예들을 이해하는데 있어서 필요한 그러한 부분들을 제외하고는 본원에 더 상세히 설명되지 않을 것이다. 스칼라 범용 레지스터 파일에 저장된 피연산자들을 갖는 데이터 프로세싱 시스템들에 대한 기존의 디자인들이 본원에 설명되는 내적 명령들을 실행하기 위하여 필요에 따라 변경될 수 있다는 점을 또한 주의하라. 더욱이, 스칼라 레지스터 파일들이 사용될 수 있기 때문에, 현재 존재하는 디자인들이 본원에 설명될 명령들을 허용하도록 개장될(retrofitted) 수 있다는 점을 주의하라. (그러나, 본원에 설명된 실시예들이 임의의 유형의 레지스터 파일과 함께 사용될 수 있고, 스칼라 레지스터 파일들로만 제한되지 않는다는 점을 주의하라.)
도 2는 예를 들면, 도 1의 프로세서(14)와 같은, 프로세싱 회로에 의해 실행될 수 있는 내적 명령을 도시한다. 예를 들면, 이 명령은 명령 유닛(30)에 의해 페칭될 수 있는데, 상기 유닛은 상기 명령을 적절한 바와 같이 제어 유닛(28)에 제공한다. 그러므로, 제어 유닛(28)은 이하에 더 상세히 설명되는 바와 같이, 데이터를 저장하기 위하여 필요에 따라 스칼라 레지스터 파일(34)을 사용하여 필요에 따라, 수신된 명령을 실행하도록 로드/저장 유닛(38) 및 실행 유닛들(32)에 지시할 수 있다. 본원에 사용된 바와 같은, 벡터 요소(또는 레지스터 요소)가 기껏해야 스칼라 GPR의 크기일 수 있지만, GPR의 크기보다 더 작을 수도 있는 요소를 칭한다는 점을 주의하라. 예를 들면, 스칼라 레지스터 파일(34)이 64-비트 레지스터들(M=64)을 포함하는 경우에, 벡터 요소는 64 비트 이하의 크기로 이루어질 수 있다. 예를 들면, 벡터 요소는 바이트(8 비트)일 수 있어서, 하나의 64-비트 GPR가 8개의 벡터 요소들을 보유할 수 있다. 또한, 벡터 요소는 하프워드(halfword)(16 비트)일 수 있어서, 하나의 64-비트 GPR가 4개의 벡터 요소들을 보유할 수 있다. 유사하게, 벡터 요소는 워드(32 비트)일 수 있어서, 하나의 64-비트 GPR가 2개의 요소들을 보유할 수 있다. 본원에 사용된 바와 같은, 바이트가 "b"로 표기되고, 하프워드가 "h"로 표기되고, 워드가 "w"로 표기된다는 점을 또한 주의하라. (대안적인 실시예들에서, 워드 또는 하프워드가 상이하게 규정될 수 있다는 점을 주의하라. 예를 들면, 워드는 32비트라기보다는 오히려 16비트를 나타낼 수 있다. 그러나, 본원에 사용된 바와 같은, 워드는 설명의 용이함을 위하여 32비트를 나타낸다.)
도 2는 내적 명령(evdotp5b[a])을 도시한다. 이 명령은 2개의 동시적인 5바이트 벡터 내적들을 수행한다. 하나의 실시예에서, evdotp5b[a]는 목적지 레지스터(rD), 2개의 소스 레지스터들(rA 및 rB), 및 오프세트가 지정되도록 하는 32-비트 명령이다. "a"가 명령의 종단에서 존재할 때(예를 들면, evdot5ba), 누산(accumulation)이 나타내어지고, "a"가 명령의 종단에 존재하지 않을 때(예를 들면, evdot5b), 누산이 나타내어지지 않는다. 그러므로, 도 2의 실시예에서 도시된 바와 같이, evdotp5b[a] 명령은 예를 들면, 연산코드(opcode), 목적지 레지스터(rD), 2개의 소스 레지스터들(rA 및 rB), 오프세트, A 비트, 및 서브연산코드(subopcode)와 같은 다양한 필드들을 포함한다. 대안적인 실시예들에서, 필드들이 상이하게 배열될 수 있고, 상이한 수의 비트들이 도 2에 제공된 배열 이외의 다양한 필드들 각각 및 명령을 규정하는데 사용될 수 있다는 점을 주의하라.
도 2의 명령은 5 바이트의 2개의 동시적인 내적 연산들을 수행한다. 목적지(rD) 내의 각각의 워드에 대하여, rA 내의 부호가 있는 정수 벡터 요소들 및 rB 내의 부호가 없는 정수 벡터 요소들의 5개의 쌍들이 승산되어, 5개의 16-비트 중간 곱(intermediate product)들을 생성한다. 이러한 중간 곱들은 32 비트로 부호-확장되고, 함께 가산되어 2개의 합들을 생성한다. "a"가 상기 명령 내에 존재하지 않는 경우에, 누산이 수행되지 않으므로, 중간 곱들의 2개의 합들 각각이 rD의 대응하는 워드 내로 배치된다. 즉, 2개의 합들 중 하나는 비트 위치들(0 내지 31)과 같이 rD의 제 1 워드 요소에 저장되는 반면, 상기 명령의 2개의 결과들 중 다른 하나는 비트 위치들(32 내지 63)과 같이 rD의 제 2 워드 요소에 저장된다. "a"가 상기 명령 내에 존재하는 경우에, 누산이 수행된다. 이 경우에, 2개의 합들 각각은 누산기(ACC1 또는 ACC2)의 대응하는 워드에 가산되고, rD의 대응하는 워드 내에 저장된다. 그 후, rD에서의 결과가 누산기 내로 배치된다.
하나의 실시예에서, rA의 동일한 5개의 벡터 요소들이 동시적인 내적 연산들 둘 모두에 대해 사용되는 반면, rB의 5개의 벡터 요소들의 2개의 상이한 서브세트들이 2개의 동시적인 내적 연산들 둘 모두에 대해 사용된다. 즉, 이 실시예에서, rB의 5개의 벡터 요소들의 제 1 서브세트가 2개의 동시적인 내적 연산들 중 하나에 사용되고, rB의 5개의 벡터 요소들의 제 2 서브세트가 2개의 동시적인 내적 연산들 중 다른 하나에 사용된다. 하나의 실시예에서, 제 1 서브세트 및 제 2 서브세트는 중첩 벡터 요소들을 포함한다. 예를 들면, 도 3을 참조하여 설명되는 바와 같이, rA 내의 제 1의 5개의 벡터 요소들이 동시적인 내적 연산들 둘 모두에 사용될 수 있는 반면, rB로부터의 제 1 서브세트가 rB의 제 1의 5개의 벡터 요소들을 포함할 수 있고, rB로부터의 제 2 서브세트가 rB의 제 2 내지 제 6의 벡터 요소들을 포함할 수 있다. 이 실시예에서, 동시적인 내적 연산들에 사용되는 rB의 벡터 요소들의 2개의 서브세트들이 rB 내에서 하나의 요소 만큼 서로 단순히 시프트(shift)되어, rB로부터의 제 1 서브세트 및 제 2 서브세트의 5개의 벡터 요소들 중 4개가 중첩하게 된다는 점을 주의하라. 하나의 실시예에서, 2개의 동시적인 내적 연산들에 대한 피연산자들이 rA의 계수들 및 rB의 데이터 샘플들의 세트로부터 2개의 출력들을 계산하는 5×5 필터링 연산들을 원조하기 위하여 선택될 수 있다. 하나의 실시예에서, 2개의 독립적인 출력들을 생성하기 위하여 제 1 픽셀 값(X)과 동일한 로우 내의 가장 가까운 이웃들(제 1 픽셀 값(X)은 rB의 제 3 벡터 요소에 대응함)이 하나의 계산적인 내적에 포함될 수 있는 반면, 제 2 픽셀 값(Y)의 가장 가까운 이웃들(제 2 픽셀 값(Y)은 rB의 제 4 요소에 대응함)이 제 2 동시적인 내적 연산에 포함될 수 있다. 이 경우에, X 및 Y의 이웃들이 중첩하므로, rB의 요소들의 중첩 벡터들이 동시적인 내적 계산들에 포함된다.
오프세트 필드는 rA의 어느 5개의 벡터 요소들이 내적 연산을 위해 선택되어야 하는지를 표시한다. 즉, 오프세트가 제로(zero)이거나 오프세트가 존재하지 않는 경우에, (도 3의 예에서와 같이) 제 1의 5개의 벡터 요소들이 사용되어야 하지만; 오프세트가 2인 경우에, (도 4의 예에서와 같이) 제 3 내지 제 7 벡터 요소들이 사용되어야 한다. 2의 오프세트(오프세트=2)을 사용하는 도 4를 참조하여 설명되는 바와 같이, rA의 제 3 내지 제 7 벡터 요소들이 동시적인 내적 연산 둘 모두에 사용되는 반면, rB로부터의 제 1 서브세트가 rB의 제 3 내지 제 7 벡터 요소들을 포함하고, rB로부터의 제 2 서브세트가 rB의 제 4 내지 제 8 벡터 요소들을 포함한다. 도 3 및 도 4의 예들에서, rA의 5개의 벡터 요소들 및 rB의 제 1 서브세트의 5개의 벡터 요소들이 동일한 벡터 요소 위치들(즉, 도 3의 제 1의 5개의 벡터 요소들 및 도 4의 제 3 내지 제 7 벡터 요소들)에 대응한다는 점을 주의하라. 그러나, rB에 대해 추가적인 오프세트 필드를 사용하는 것과 같은 대안적인 실시예들에서는, 그렇지 않을 수 있다. 대안적인 실시예에서, rA의 벡터 요소들 및 rB의 벡터 요소들에 대한 독립적인 오프세트 필드들이 지정될 수 있다. 추가적으로, 대안적인 실시예는 rB의 요소들의 제 1 서브세트 및 제 2 서브세트의 상이한 중첩 정도를 제공할 수 있다.
도시된 실시예들에서, rA, rB 및 rD 각각은 스칼라 레지스터 파일(34)의 64-비트 레지스터들 중 하나이다. 또한, 도 2의 실시예에서, 소스 레지스터(rA)는 5개의 부호가 있는 정수 요소들을 제공하고, 소스 레지스터(rB)는 5개의 부호가 없는 정수 요소들을 제공한다. 그러나, 대안적인 실시예들에서, rA 및 rB 각각이 부호가 있거나 부호가 없는 벡터 요소들을 저장할 수 있고, rA 및 rB 각각이 분수 또는 정수 벡터 요소들을 저장할 수 있다는 점을 주의하라. 그러므로, rA 및 rB 각각이 부호가 있는지 또는 부호가 없는지, 분수인지 또는 정수인지의 여부를 나타내기 위하여 상이한 연산코드 또는 서브연산코드 인코딩들이 사용될 수 있다. 대안적으로, rA 및 rB 각각이 부호가 있는지 또는 부호가 없는지, 분수인지 또는 정수인지의 여부를 나타내기 위하여 evdotp5b[a]의 추가적인 필드들이 사용될 수 있다. 또한, 중간 곱들이 모듈로 곱(modulo product)인지 또는 포화 곱(saturate product)인지의 여부 또는 중간 곱들의 합들이 수행되어야 하는지 또는 차들이 수행되어야 하는지의 여부를 나타내기 위하여 상이한 연산코드 또는 서브연산코드 인코딩들 또는 추가적인 필드들이 사용될 수 있다. 또한, 일 대안적인 실시예에서, rA의 제 1의 5개의 벡터 요소들이 항상 사용되는 경우에, 오프세트 필드가 존재하지 않을 수 있다. 또 다른 실시예에서, rB의 어느 요소들이 선택되어야 하는지를 나타내기 위하여 제 2 오프세트 필드가 또한 제공될 수 있다. 또한, 명령들의 필드들을 나타내는데 사용되는 명령 포맷들이 변화할 수 있다는 점을 주의하라. 예를 들면, 사용자가 상이한 옵션들을 선택하도록 하기 위하여 상이한 조합의 옵션들을 제공하는 상이한 명령들이 모두 함께 사용되거나 명령의 추가적인 필드들이 사용될 수 있다. evdotp5b[a] 명령의 연산의 상이한 예들이 이하의 도 3 및 도 4를 참조하여 논의될 것이다.
도 3은 실행 유닛들(32) 및 스칼라 레지스터 파일(34)의 부분 및 (누산이 수행되고, 오프세트 필드가 존재하지 않거나 제로로서 제공되는) evdotp5ba 명령의 연산을 도시한 일례의 데이터 흐름을 도시한다. 도 3은 소스 레지스터(rA)를 나타내는 레지스터(66), 소스 레지스터(rB)를 나타내는 레지스터(64), 및 제 1 워드(WORD 1) 및 제 2 워드(WORD 2)를 갖는 목적지 레지스터(rD)를 나타내는 레지스터(94)를 포함한다. 도 3은 또한 중간 곱들을 저장하는 저장 위치들(68 및 70), 및 내적들을 저장하는 저장 위치(86)를 포함한다. 도 3은 또한 제 1 워드(ACC1) 및 제 2 워드(ACC2)를 포함하는 누산기(88)를 포함한다. 도 3은 또한 2개의 동시적인 내적 연산들 중 하나를 수행하는데 사용되는 승산기들(71 내지 75)과 가산기(82), 및 2개의 동시적인 내적 연산들 중 다른 하나를 수행하기 위한 승산기들(76 내지 80)과 가산기(84)를 포함한다. 도 3은 또한 내적 결과들 각각을 누산기(88)에서의 값들과 가산하고 rD를 업데이트하는데 사용되는 가산기들(90 및 92)을 포함한다. rD를 업데이트한 이후에, 누산기(88)가 rD의 업데이트된 값으로 업데이트된다는 점을 주의하라.
동작 시에, rA(레지스터 66)는 8개의 벡터 요소들(a0 내지 a7)을 저장하고, rB(레지스터 64)는 8개의 벡터 요소들(b0 내지 b7)을 저장한다. 도 3의 예가 오프세트를 지정하지 않거나 제로의 오프세트를 사용하기 때문에, 동시적인 내적 연산들 둘 모두가 rA의 제 1의 5개의 벡터 요소들(a0 내지 a4)을 사용한다. 그러므로, 2개의 동시적인 내적 연산들 중 하나는 rB의 제 1의 5개의 벡터 요소들(b0 내지 b4)을 사용하는 반면, 2개의 동시적인 내적 연산들 중 다른 하나는 b0 내지 b4에 비하여 하나의 요소 만큼 시프트된 rB의 다음의 5개의 벡터 요소들(b1 내지 b5)을 사용한다. b0 내지 b4가 rB의 제 1 서브세트라고 칭해질 수 있고, b1 내지 b5가 rB의 제 2 서브세트라고 칭해질 수 있다는 점을 주의하라. 저장 위치(70)는 곱 쌍들(a0 내지 a4 및 b0 내지 b4)에 대응하는 5개의 중간 곱들을 저장한다. 즉, 승산기(76)는 a0을 b0과 승산하고, 그 결과를 저장 위치(70)의 제 1 필드에 저장하고, 승산기(77)는 a1을 b1과 승산하고, 그 결과를 저장 위치(70)의 제 2 필드에 저장하고, 승산기(78)는 a2를 b2와 승산하고, 그 결과를 저장 위치(70)의 제 3 필드에 저장하고, 승산기(79)는 a3을 b3과 승산하고, 그 결과를 저장 위치(70)의 제 4 필드에 저장하고, 승산기(80)는 a4를 b4와 승산하고, 그 결과를 저장 위치(70)의 제 5 필드에 저장한다. 그 후, 이러한 5개의 중간 곱들은 가산기(84)에 의해 합산되고, 이 결과적인 합이 저장 위치(86)의 제 1 워드에 저장된다. 저장 위치(68)는 곱 쌍들(a0 내지 a4 및 b1 내지 b5)에 대응하는 5개의 중간 곱들을 저장한다. 즉, 승산기(71)는 a0를 b1과 승산하고, 그 결과를 저장 위치(68)의 제 1 필드에 저장하고, 승산기(72)는 a1을 b2와 승산하고, 그 결과를 저장 위치(68)의 제 2 필드에 저장하고, 승산기(73)는 a2를 b3과 승산하고, 그 결과를 저장 위치(68)의 제 3 필드에 저장하고, 승산기(74)는 a3을 b4와 승산하고, 그 결과를 저장 위치(68)의 제 4 필드에 저장하고, 승산기(75)는 a4를 b5와 승산하고, 그 결과를 저장 위치(68)의 제 5 필드에 저장한다. 그 후, 이러한 5개의 중간 곱들은 가산기(82)에 의해 합산되고, 이 결과적인 합이 저장 위치(86)의 제 2 워드에 저장된다.
그러므로, 레지스터(86)가 제 1 결과에 대해 승산기들(76 내지 80)과 가산기(84) 및 제 2 결과에 대해 승산기들(71 내지 75)과 가산기(82)를 사용하여 동시에 수행되었던 2개의 내적 결과들을 저장한다는 점을 주의하라. 그 후, 가산기(90)가 (a0 내지 a4 및 b0 내지 b4의 내적에 기인하는) 제 1 내적 결과를 누산기(88)의 제 1 워드에 저장된 대응하는 누산기 값(ACC 1)에 가산하는데 사용되는데, 여기서, 결과적인 합이 rD(레지스터 94)의 제 1 대응 워드(WORD 1)에 저장된다. 유사하게, 가산기(92)가 (a0 내지 a4 및 b1 내지 b5의 내적에 기인하는) 제 2 내적 결과를 누산기(88)의 제 2 워드에 저장된 대응하는 누산기 값(ACC 2)에 가산하는데 (가산기(90)에 의해 수행된 가산과 동시에) 사용되는데, 여기서, 결과적인 합이 rD의 제 2 대응 워드(WORD 2)에 저장된다. 그 후, rD에 저장된 값들은 새로운 결과들로 ACC 1 및 ACC 2의 값들을 업데이트하기 위하여 누산기(88)에 저장될 수 있다.
누산이 수행되어서는 안되는 실시예에서, 도 3의 레지스터(86)가 rD를 나타내는데, 여기서, rD가 2개의 동시적인 내적 연산들의 결과들을 직접 저장한다는 점을 주의하라.
도 4는 실행 유닛들(32) 및 스칼라 레지스터 파일(34)의 부분 및 (누산이 수행되고, 오프세트 필드가 2로 설정되는) evdotp5ba 명령의 연산을 도시한 또 다른 예의 데이터 흐름을 도시한다. 도 4의 동작은 동일한 요소들에는 동일한 번호들이 병기되어 있는 도 3의 동작과 유사하다. 도 4의 데이터 흐름은 rA의 벡터 요소들의 오프세트에 대응하는 2의 오프세트가 사용된다는 점을 제외하면, 도 3의 데이터 흐름과 유사하다. 즉, a0 내지 a4와 b0 내지 b4 및 a0 내지 a4와 b1 내지 b5의 동시적인 내적들을 수행하는 도 3의 예와 달리, 도 4의 예는 a2 내지 a6과 b2 내지 b6 및 a2 내지 a6과 b3 내지 b7의 동시적인 내적들을 수행한다. 즉, 사용되는 rA의 5개의 벡터 요소들이 a0으로부터 2 만큼 오프세트된다. 그러므로, 유사하게, rB의 제 1 서브세트의 5개의 벡터 요소들 및 rB의 제 2 서브세트의 5개의 벡터 요소들이 도 3의 예의 대응하는 서브세트들에 비하여 2 만큼 오프세트된다. 도 3의 예에서와 같이, rB의 제 2 서브세트(b3 내지 b7)이 rB의 제 1 서브세트(b2 내지 b6)에 비하여 하나의 요소 만큼 시프트되어, rB의 5개의 벡터 요소들 중 4개가 2개의 동시적인 내적 연산들에서 중첩되고 있다는 점을 주의하라.
도 4의 예를 참조하면, 저장 위치(70)는 곱 쌍들(a2 내지 a6 및 b2 내지 b6)에 대응하는 5개의 중간 곱들을 저장한다. 즉, 승산기(76)는 a2를 b2와 승산하고, 그 결과를 저장 위치(70)의 제 1 필드에 저장하고, 승산기(77)는 a3을 b3과 승산하고, 그 결과를 저장 위치(70)의 제 2 필드에 저장하고, 승산기(78)는 a4를 b4와 승산하고, 그 결과를 저장 위치(70)의 제 3 필드에 저장하고, 승산기(79)는 a5를 b5와 승산하고, 그 결과를 저장 위치(70)의 제 4 필드에 저장하고, 승산기(80)는 a6을 b6과 승산하고, 그 결과를 저장 위치(70)의 제 5 필드에 저장한다. 그 후, 이러한 5개의 중간 곱들은 가산기(84)에 의해 합산되고, 이 결과적인 합이 저장 위치(86)의 제 1 워드에 저장된다. 저장 위치(68)는 곱 쌍들(a2 내지 a6 및 b3 내지 b7)에 대응하는 5개의 중간 곱들을 저장한다. 즉, 승산기(71)는 a2를 b3과 승산하고, 그 결과를 저장 위치(68)의 제 1 필드에 저장하고, 승산기(72)는 a3을 b4와 승산하고, 그 결과를 저장 위치(68)의 제 2 필드에 저장하고, 승산기(73)는 a4를 b5와 승산하고, 그 결과를 저장 위치(68)의 제 3 필드에 저장하고, 승산기(74)는 a5를 b6과 승산하고, 그 결과를 저장 위치(68)의 제 4 필드에 저장하고, 승산기(75)는 a6을 b7과 승산하고, 그 결과를 저장 위치(68)의 제 5 필드에 저장한다. 그 후, 이러한 5개의 중간 곱들은 가산기(82)에 의해 합산되고, 이 결과적인 합이 저장 위치(86)의 제 2 워드에 저장된다.
그러므로, 레지스터(86)가 제 1 결과에 대해 승산기들(76 내지 80)과 가산기(84) 및 제 2 결과에 대해 승산기들(71 내지 75)과 가산기(82)를 사용하여 동시에 수행되었던 2개의 내적 결과들을 저장한다는 점을 주의하라. 그 후, 가산기(90)가 (a2 내지 a6 및 b2 내지 b6의 내적에 기인하는) 제 1 내적 결과를 누산기(88)의 제 1 워드에 저장된 대응하는 누산기 값(ACC 1)에 가산하는데 사용되는데, 여기서, 결과적인 합이 rD(레지스터 94)의 제 1 대응 워드(WORD 1)에 저장된다. 유사하게, 가산기(92)가 (a2 내지 a6 및 b3 내지 b7의 내적에 기인하는) 제 2 내적 결과를 누산기(88)의 제 2 워드에 저장된 대응하는 누산기 값(ACC 2)에 가산하는데 (가산기(90)에 의해 수행된 가산과 동시에) 사용되는데, 여기서, 결과적인 합이 rD의 제 2 대응 워드(WORD 2)에 저장된다. 그 후, rD에 저장된 값들은 새로운 결과들로 ACC 1 및 ACC 2의 값들을 업데이트하기 위하여 누산기(88)에 저장될 수 있다.
누산이 수행되어서는 안되는 실시예에서, 도 4의 레지스터(86)가 rD를 나타내는데, 여기서, rD가 2개의 동시적인 내적 연산들의 결과들을 직접 저장한다는 점을 주의하라.
8개의 벡터 요소들을 각각 저장하는 레지스터들을 사용하여 효율적인 3×3 또는 4×4 매트릭스 연산들을 제공하는 시스템들에서, 한 쌍의 내적 연산들이 소스 레지스터들로부터의 4개의 요소들의 대응하는 디스조인트(disjoint)(즉, 중첩되지 않는) 세트들에 대해 수행되는 전형적으로 8개의 승산기들만이 제공된다는 점을 주의하라. 그러나, 이와 같은 시스템들은 5×5 매트릭스 연산들에 대해(또는 8개의 벡터 요소 레지스터들과 양호하게 매치(match)하지 않는 다른 디멘전들에 대해) 비효율적이다. 그러므로, 본원에 설명된 바와 같이, 2개의 추가적인 승산기들(예를 들면, 75 및 80) 및 소스 레지스터(rB)의 중첩하는 서브세트들의 사용을 통하여, 5×5 내적 연산의 개선된 효율이 성취될 수 있다. 이러한 유형의 연산들은 5×5 매트릭스 연산들에 매우 의존하는 애플리케이션들(applications)에서 유용할 수 있다. 또 다른 디멘전의 매트릭스 연산들에 매우 의존할 수 있는 다른 유형들의 연산들에서, 적은 수의 추가적인 승산기들이 존재하고 a0 내지 aN의 b0 내지 bN과의, 및 a0 내지 aN의 b1 내지 b(N+1)과의 동시적인 내적들이 수행될 수 있는 evdotp5b[a] 명령과 유사한 명령이 사용될 수 있다. 일 대안적인 실시예에서, rA 및 rB의 상이한 서브세트들이 사용될 수 있다. 예를 들면, 도 3에 제공된 rA 및 rB의 예시적 서브세트들이라기보다는 오히려, rA의 제 1 서브세트와 rB의 제 1 서브세트, 및 rA의 제 2 서브세트와 rB의 제 2 서브세트의 동시적인 내적들이 수행될 수 있고, 여기서, rA의 서브세트들 각각은 동일한 서브세트 또는 중첩 요소들을 갖는 상이한 서브세트들일 수 있고, rB의 서브세트들 각각은 또한 동일한 서브세트 또는 중첩 요소들을 갖는 상이한 서브세트들일 수 있다. 또한, 추가적인 오프세트가 rB의 요소들에 대해 제공될 수 있다. 예를 들면, 도 3에서, 2의 오프세트가 rB에 대해 지정되었다면, b0 내지 b4인 rB의 제 1 서브세트 및 b1 내지 b5인 제 2 서브세트가라기보다는 오히려, 2개의 내적 연산들 중 하나에 대한 제 1 서브세트는 b2 내지 b6이고, 다른 내적 연산에 대한 제 2 서브세트는 b3 내지 b7일 것이다. 또한, rB의 제 2 서브세트가 rB의 제 1 서브세트에 대하여 얼마나 많은 벡터 요소들 만큼 시프트되는지를 나타내기 위하여 rB의 요소들에 대해 추가적인 중첩 지정자(overlap specifier)가 또한 제공될 수 있다. 예를 들면, 도 3에서, rB에 대해 2의 중첩 지정자가 지정되었던 경우에, b0 내지 b4인 rB의 제 1 서브세트 및 b1 내지 b5인 제 2 서브세트가라기보다는 오히려, 2개의 내적 연산들 중 하나에 대한 제 1 서브세트는 b0 내지 b4이고, 다른 내적 연산에 대한 제 2 서브세트는 b2 내지 b6일 것이다.
예를 들면, 5개의 벡터 요소들의 2개의 동시적인 내적 연산들이 수행되는 5×5 내적 연산과 같은 어떤 매트릭스 연산들의 효율을 개선시키는 명령 및 회로가 제공되었다는 점이 이제는 인식되어야 하며, 여기서, 상기 2개의 동시적인 내적 연산들은 중첩하는 피연산자들을 사용한다. 더욱이, 8개의 벡터 요소 레지스터들을 사용한 효율적인 3×3 또는 4×4 매트릭스 연산들을 위하여, 전형적으로 8개의 승산기들만이 시스템에서 제공된다. 그러나, 2개의 추가적인 승산기들의 존재 및 중첩 피연산자들의 사용을 통하여, 8개의 벡터 요소 레지스터들을 사용한 더 효율적인 5×5 매트릭스 연산이 성취될 수 있다.
설명된 evdotp5b[a] 명령 변형들 이외에, 본 발명의 일 실시예는 또한 한 쌍의 4×4 내적 계산들을 포함하는 종래의 내적 연산들을 수행하도록 추가적인 공지된 명령들을 지원할 수 있다. 4×4 내적 연산들 동안, 추가적인 승산기들은 사용되지 않은 채로 유지되고, 전력 오프(power off)될 수 있거나 불필요한 에너지 소모를 방지하도록 게이팅(gating)될 수 있다. 추가적인 승산기들 및 연관된 합산 회로의 인에이블링(enabling)은 데이터 프로세싱 시스템의 전력 소모를 최적화하기 위하여 수행되는 연산의 유형에 기초하여 조건화될 수 있다. 대안적으로, 추가적인 승산기들의 출력들은 실행되는 명령의 부분으로서 필요하지 않을 때, 강제로 제로와 같은 미리 결정된 출력 값이 될 수 있다.
하나의 실시예에서, 데이터 프로세싱 시스템은 복수의 범용 레지스터들, 및 하나 이상의 명령들을 실행하기 위한 프로세서 회로를 포함하며, 하나 이상의 명령들은 적어도 2개의 내적들을 동시에 수행하기 위한 벡터 내적 명령을 포함하고, 벡터 내적 명령은 복수의 범용 레지스터들로부터 제 1 소스 레지스터 및 복수의 범용 레지스터들로부터 제 2 소스 레지스터를 식별하고, 제 1 소스 레지스터 및 제 2 소스 레지스터 각각은 복수의 벡터 요소들을 저장하고, 적어도 2개의 내적들 중 제 1 내적은 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 적어도 2개의 내적들 중 제 2 내적은 제 1 소스 레지스터의 벡터 요소들의 제 2 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 하며, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 상이하고, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트의 적어도 2개의 벡터 요소들은 중첩한다.
부가적인 실시예에서, 벡터 내적 명령은 제 1 내적의 결과 및 제 2 내적의 결과를 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 부가적인 실시예에서, 프로세서 회로는 누산기를 추가로 포함하고, 벡터 내적 명령은 제 1 내적의 결과 및 누산기의 제 1 값의 합 및 제 2 내적의 결과 및 누산기의 제 2 값의 합을 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 부가적인 실시예에서, 제 1 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 동일한 서브세트이다.
또 다른 부가적인 실시예에서, 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트는 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트와 동일한 벡터 요소 위치들에 대응한다.
또 다른 부가적인 실시예에서, 벡터 내적 명령은 적어도 제 1 소스 레지스터의 어느 벡터 요소들이 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트에 포함되어야 하는지를 나타내는데 사용하기 위한 오프세트를 추가로 나타낸다. 더 부가적인 실시예에서, 벡터 내적 명령은 적어도 제 2 소스 레지스터의 어느 벡터 요소들이 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트에 포함되어야 하는지를 나타내는데 사용하기 위한 제 2 오프세트를 추가로 나타낸다.
또 다른 부가적인 실시예에서, 벡터 내적 명령은 적어도 제 2 소스 레지스터의 어느 벡터 요소들이 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트에 포함되어야 하는지를 나타내는데 사용하기 위한 오프세트를 추가로 나타낸다.
또 다른 실시예에서, 데이터 프로세싱 시스템은 복수의 범용 레지스터들, 및 하나 이상의 명령들을 실행하기 위한 프로세서 회로를 포함하며, 하나 이상의 명령들은 적어도 2개의 내적들을 동시에 수행하기 위한 벡터 내적 명령을 포함하고, 벡터 내적 명령은 복수의 범용 레지스터들로부터 제 1 소스 레지스터, 및 복수의 범용 레지스터들로부터 제 2 소스 레지스터를 식별하고, 제 1 소스 레지스터 및 제 2 소스 레지스터 각각은 복수의 벡터 요소들을 저장하고, 적어도 2개의 내적들 중 제 1 내적은 제 1 소스 레지스터의 5개의 벡터 요소들의 제 1 서브세트와 제 2 소스 레지스터의 5개의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 적어도 2개의 내적들 중 제 2 내적은 제 1 소스 레지스터의 5개의 벡터 요소들의 제 2 서브세트와 제 2 소스 레지스터의 5개의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 하며, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트의 4개의 벡터 요소들은 중첩한다.
또 다른 실시예의 부가적인 실시예에서, 벡터 내적 명령은 제 1 내적의 결과 및 제 2 내적의 결과를 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 프로세서 회로는 누산기를 추가로 포함하고, 벡터 내적 명령은 제 1 내적의 결과와 누산기의 제 1 값의 합 및 제 2 내적의 결과와 누산기의 제 2 값의 합을 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 제 1 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 동일한 서브세트이다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트는 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트와 동일한 벡터 요소 위치들에 대응한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 벡터 내적 명령에 의해 식별된 제 1 소스 레지스터 및 제 2 소스 레지스터 각각은 8개의 벡터 요소들을 저장하기 위한 것이며, 프로세서 회로는 5개가 제 1 내적을 수행하기 위한 것이고 다른 5개가 제 2 내적을 수행하기 위한 것인 10개의 승산기들을 포함한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 벡터 내적 명령은 적어도 제 1 소스 레지스터 또는 제 2 소스 레지스터의 어느 벡터 요소들이 제 1 소스 레지스터 또는 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트에 포함되어야 하는지를 표시하는데 사용하기 위한 오프세트를 추가로 나타낸다.
또 다른 실시예에서, 동시적인 내적 연산들을 수행하기 위한 방법은 복수의 범용 레지스터들을 제공하는 단계, 및 하나 이상의 명령들을 실행하기 위한 프로세서 회로를 제공하는 단계를 포함하며, 하나 이상의 명령들은 적어도 2개의 내적들을 동시에 수행하기 위한 벡터 내적 명령을 포함하고, 벡터 내적 명령은 복수의 범용 레지스터들로부터 제 1 소스 레지스터, 및 복수의 범용 레지스터들로부터 제 2 소스 레지스터를 식별하고, 제 1 소스 레지스터 및 제 2 소스 레지스터 각각은 복수의 벡터 요소들을 저장하고, 적어도 2개의 내적들 중 제 1 내적은 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 적어도 2개의 내적들 중 제 2 내적은 제 1 소스 레지스터의 벡터 요소들의 제 2 서브세트와 제 2 소스 레지스터의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 하며, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 상이하고, 제 2 소스 레지스터의 제 1 서브세트 및 제 2 서브세트의 적어도 2개의 벡터 요소들은 중첩한다.
또 다른 실시예의 부가적인 실시예에서, 벡터 내적 명령은 제 1 내적의 결과 및 제 2 내적의 결과를 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 프로세서 회로는 누산기를 추가로 포함하고, 벡터 내적 명령은 제 1 내적의 결과와 누산기의 제 1 값의 합 및 제 2 내적의 결과와 누산기의 제 2 값의 합을 저장하기 위한 목적지 레지스터를 추가로 식별한다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 제 1 소스 레지스터의 제 1 서브세트 및 제 2 서브세트는 동일한 서브세트이다.
또 다른 실시예의 또 다른 부가적인 실시예에서, 벡터 내적 명령은 적어도 제 1 소스 레지스터 또는 제 2 소스 레지스터의 어느 벡터 요소들이 제 1 소스 레지스터 또는 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트에 포함되어야 하는지를 표시하는데 사용하기 위한 오프세트를 추가로 나타낸다.
본 발명을 구현하는 장치가 대체로 당업자들에게 공지되어 있는 전자 구성요소들 및 회로들로 구성되기 때문에, 본 발명의 근원적인 개념들의 이해 및 인식을 위하여, 그리고 본 발명의 내용들을 모호하게 하거나 본 발명의 교시들(teachings)로부터 벗어나지 않게 하기 위해, 상술된 바와 같이 필요하다고 간주되는 것보다 임의의 더 큰 정도까지 회로 세부사항들이 설명되지는 않을 것이다.
상기 실시예들 중 일부는 인식될 수 있는 바와 같이, 다양한 여러 정보 프로세싱 시스템들을 사용하여 구현될 수 있다. 예를 들면, 도 1 및 이의 논의가 일 예시적인 정보 프로세싱 SIMD 아키텍처를 설명할지라도, 이 예시적인 아키텍처는 단지 본 발명의 다양한 양태들을 논의하는데 유용한 참조를 제공하기 위하여 제시된다. 물론, 상기 아키텍처의 설명은 논의의 목적을 위하여 간소화되었고, 본 발명에 따라 사용될 수 있는 많은 상이한 유형들의 적절한 아키텍처들 중 단지 하나이다. 당업자들은 논리 블록들 사이의 경계들이 단지 설명적이고 대안적인 실시예들이 논리 블록들 또는 회로 요소들을 병합할 수 있거나 다양한 논리 블록들 또는 회로 요소들 상에 기능의 대안적인 분해를 부과할 수 있다는 점을 인식할 것이다.
따라서, 본원에 설명된 아키텍처들이 단지 예시적이고, 실제로, 동일한 기능을 성취하는 많은 다른 아키텍처들이 구현될 수 있다는 점이 이해되어야 한다. 추상적인, 그러나 여전히 명확한 의미에서, 동일한 기능을 성취하는 구성요소들의 배열은 희망하는 기능이 성취되도록 효율적으로 "연관된다(associated)". 그러므로, 특정 기능을 성취하기 위하여 조합된 본원의 임의의 2개의 구성요소들은 아키텍처들 또는 중개 구성요소들에 관계없이, 희망하는 기능이 성취되도록 서로 "연관되는" 것으로 간주될 수 있다. 마찬가지로, 그렇게 연관된 임의의 2개의 구성요소들은 또한 희망하는 기능을 성취하기 위하여 "동작적으로 접속된(operably connected)" 또는 "동작적으로 결합된(operably coupled)" 것으로 간주될 수 있다.
또한, 예를 들면, 하나의 실시예에서, 시스템(10)의 도시된 요소들은 단일 집적 회로 상에, 또는 동일한 디바이스 내에 위치된 회로이다. 대안적으로, 시스템(10)은 서로와 상호접속된 임의의 수의 별도의 집적 회로들 또는 별도의 디바이스들을 포함할 수 있다. 예를 들면, 메모리(12)는 프로세서(14)와 동일한 집적 회로 또는 별도의 집적 회로 상에 위치되거나 시스템(10)의 다른 요소들로부터 별개로 분리된 또 다른 주변장치 또는 슬레이브(slave) 내에 위치될 수 있다. 다른 주변장치들(18) 및 I/O 회로(16)가 또한 별도의 집적 회로들 또는 디바이스들 상에 위치될 수 있다. 또한, 예를 들면, 시스템(10) 또는 이의 부분들은 물리적 회로의 소프트 또는 코드 표현들 또는 물리적 회로 내로 전환가능한 논리적 표현들일 수 있다. 이와 같이, 시스템(10)은 임의의 적절한 형태의 하드웨어 기술 언어로 구현될 수 있다.
더욱이, 당업자들은 상술된 동작들의 기능 사이의 경계들이 단지 설명적이라는 점을 인식할 것이다. 다수의 동작들의 기능은 단일 동작 내로 조합되고/조합되거나, 단일 동작의 기능이 부가적인 동작들로 분배될 수 있다. 더구나, 대안적인 실시예들은 특정 동작의 다수의 인스턴스(instance)들을 포함할 수 있고, 동작들의 순서는 다양한 다른 실시예들에서 변경될 수 있다.
하나의 실시예에서, 시스템(10)은 개인용 컴퓨터 시스템과 같은 컴퓨터 시스템이다. 다른 실시예들은 상이한 유형들의 컴퓨터 시스템들을 포함할 수 있다. 컴퓨터 시스템들은 하나 이상의 사용자들에게 독립적인 계산력을 제공하도록 설계될 수 있는 정보 핸들링 시스템(information handling system)들이다. 컴퓨터 시스템들은 메인프레임(mainframe)들, 미니컴퓨터(minicomputer)들, 서버(server)들, 워크스테이션(workstation)들, 개인용 컴퓨터들, 노트패드(notepad)들, 개인 휴대용 정보 단말기들(personal digital assistants), 전자 게임들, 자동 또는 다른 임베딩(embedding)된 시스템들, 셀 전화들 및 다양한 다른 무선 디바이스들을 포함하지만, 이에 제한되지 않는 많은 형태들에서 발견될 수 있다. 전형적인 컴퓨터 시스템은 적어도 하나의 프로세싱 유닛, 연관된 메모리 및 다수의 입력/출력(I/O) 디바이스들을 포함한다.
본 발명이 특정 실시예들을 참조하여 본원에 설명되어 있을지라도, 이하의 청구항들에서 설명된 바와 같은 본 발명의 범위를 벗어남이 없이 다양한 변경들 및 변화들이 행해질 수 있다. 예를 들면, 다른 SIMD 아키텍처들이 사용될 수 있고, 벡터 요소들의 상이한 서브세트들이 규정될 수 있다. 따라서, 명세서 및 도면들은 제한적인 의미라기보다는 설명적인 의미로 간주되어야 하고, 모든 이와 같은 변경들은 본 발명의 범위 내에 포함되도록 의도된다. 특정 실시예들과 관련하여 본원에 설명되는 임의의 이점들, 장점들 또는 문제들에 대한 해결책들은 임의의 청구항 또는 모든 청구항들의 결정적이거나, 필수적이거나, 본질적인 특징 또는 요소로서 해석되어서는 안된다.
본원에 사용된 바와 같은 용어 "결합된"은 직접적 결합 또는 기계적 결합으로 제한되어서는 안된다.
더욱이, 본원에 사용된 바와 같은 용어("a" 또는 "an")는 하나 또는 하나 이상으로서 규정된다. 또한, 청구항들에서의 "적어도 하나의" 및 "하나 이상의"와 같은 도입 구들의 사용은 동일한 청구항이 "a" 또는 "an"과 같은 부정 관사들 및 도입 구들 "하나 이상의" 또는 "적어도 하나의"를 포함할 때에도, 부정 관사들 "a" 또는 "an"에 의한 또 다른 청구항 요소의 도입이 이와 같은 도입된 청구항 요소를 포함하는 임의의 특정 청구항을 하나의 이와 같은 요소만을 포함하는 발명들로 제한하는 것을 나타내는 것으로 해석되어서는 안된다. 이것은 정관사들의 사용에 대해서도 그러하다.
다르게 진술되지 않는다면, "제 1" 및 "제 2"와 같은 용어들은 이러한 용어들이 설명하는 요소들 사이를 임의로 구별하는데 사용된다. 따라서, 이들 용어들은 반드시 이러한 요소들의 시간적인 또는 다른 우선순위를 표시하고자 하는 것은 아니다.
10: 데이터 프로세싱 시스템 12: 메모리
14: 프로세서 16: 입력/출력 회로
18: 다른 주변장치들 20: 시스템 버스
22, 24, 42, 46, 48, 52, 56, 58, 60, 62: 컨덕터들
28: 제어 유닛 30: 명령 유닛
32: 실행 유닛들
34: 스칼라 레지스터 파일
36: 버스 인터페이스 유닛 38: 로드/저장 유닛
64, 66, 86, 94: 레지스터
71, 72, 73, 74, 75, 76, 77, 78, 79, 80: 승산기
82, 84, 90, 92: 가산기 88: 누산기

Claims (20)

  1. 데이터 프로세싱 시스템(data processing system)에 있어서:
    복수의 범용 레지스터들; 및
    하나 이상의 명령들을 실행하기 위한 프로세서 회로로서, 상기 하나 이상의 명령들은 적어도 2개의 내적들(dot products)을 동시에 수행하기 위한 벡터 내적 명령을 포함하고, 상기 벡터 내적 명령은 상기 복수의 범용 레지스터들로부터 제 1 소스 레지스터 및 상기 복수의 범용 레지스터들로부터 제 2 소스 레지스터를 식별하고, 상기 제 1 소스 레지스터 및 상기 제 2 소스 레지스터 각각은 복수의 벡터 요소들을 저장하고, 상기 적어도 2개의 내적들 중 제 1 내적은 상기 제 1 소스 레지스터의 벡터 요소들의 제 1 서브세트(subset)와 상기 제 2 소스 레지스터의 벡터 요소들의 제 1 서브세트 사이에서 수행되어야 하고, 상기 적어도 2개의 내적들 중 제 2 내적은 상기 제 1 소스 레지스터의 벡터 요소들의 제 2 서브세트와 상기 제 2 소스 레지스터의 벡터 요소들의 제 2 서브세트 사이에서 수행되어야 하고, 상기 제 2 소스 레지스터의 상기 제 1 서브세트 및 제 2 서브세트는 상이하고, 상기 제 2 소스 레지스터의 상기 제 1 서브세트 및 제 2 서브세트의 적어도 2개의 벡터 요소들은 중첩하고, 상기 제 2 소스 레지스터의 적어도 2개의 중첩하는 벡터 요소들의 각각은 상기 제 1 소스 레지스터의 상이한 벡터 요소들과 상기 제 1 내적 및 상기 제 2 내적 모두에 이용되는, 상기 프로세서 회로를 포함하는, 데이터 프로세싱 시스템.
  2. 제 1 항에 있어서,
    상기 제 1 소스 레지스터의 상기 제 1 서브세트 및 제 2 서브세트는 동일한 서브세트인, 데이터 프로세싱 시스템.
  3. 제 1 항에 있어서,
    상기 제 1 소스 레지스터의 벡터 요소들의 상기 제 1 서브세트는 상기 제 2 소스 레지스터의 벡터 요소들의 상기 제 1 서브세트와 동일한 벡터 요소 위치들에 대응하는, 데이터 프로세싱 시스템.
  4. 제 1 항에 있어서,
    상기 벡터 내적 명령은 적어도 상기 제 1 소스 레지스터의 어느 벡터 요소들이 상기 제 1 소스 레지스터의 벡터 요소들의 상기 제 1 서브세트에 포함되어야 하는지를 나타내는데 사용하기 위한 오프세트(offset)를 추가로 나타내는, 데이터 프로세싱 시스템.
  5. 제 1 항에 있어서,
    상기 벡터 내적 명령은 적어도 상기 제 2 소스 레지스터의 어느 벡터 요소들이 상기 제 2 소스 레지스터의 벡터 요소들의 상기 제 1 서브세트에 포함되어야 하는지를 나타내는데 사용하기 위한 오프세트를 추가로 나타내는, 데이터 프로세싱 시스템.
  6. 삭제
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
KR20107007865A 2007-09-13 2008-07-28 중첩된 피연산자들을 갖는 simd 내적 연산들 KR101482540B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/854,630 2007-09-13
US11/854,630 US8631224B2 (en) 2007-09-13 2007-09-13 SIMD dot product operations with overlapped operands
PCT/US2008/071327 WO2009035774A1 (en) 2007-09-13 2008-07-28 Simd dot product operations with overlapped operands

Publications (2)

Publication Number Publication Date
KR20100075494A KR20100075494A (ko) 2010-07-02
KR101482540B1 true KR101482540B1 (ko) 2015-01-14

Family

ID=40452385

Family Applications (1)

Application Number Title Priority Date Filing Date
KR20107007865A KR101482540B1 (ko) 2007-09-13 2008-07-28 중첩된 피연산자들을 갖는 simd 내적 연산들

Country Status (4)

Country Link
US (1) US8631224B2 (ko)
JP (1) JP5201641B2 (ko)
KR (1) KR101482540B1 (ko)
WO (1) WO2009035774A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8595467B2 (en) * 2009-12-29 2013-11-26 International Business Machines Corporation Floating point collect and operate
US8478969B2 (en) * 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
JP5528976B2 (ja) 2010-09-30 2014-06-25 株式会社メガチップス 画像処理装置
WO2013101018A1 (en) 2011-12-29 2013-07-04 Intel Corporation Dot product processors, methods, systems, and instructions
US9355061B2 (en) 2014-01-28 2016-05-31 Arm Limited Data processing apparatus and method for performing scan operations
GB2523805B (en) * 2014-03-06 2021-09-01 Advanced Risc Mach Ltd Data processing apparatus and method for performing vector scan operation
GB2553783B (en) 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10049082B2 (en) 2016-09-15 2018-08-14 Altera Corporation Dot product based processing elements
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
GB2563878B (en) * 2017-06-28 2019-11-20 Advanced Risc Mach Ltd Register-based matrix multiplication
WO2019005132A1 (en) 2017-06-30 2019-01-03 Intel Corporation APPARATUS AND METHOD FOR MULTIPLICATION AND CUMULATION OF COMPLEX VALUES
US11334319B2 (en) * 2017-06-30 2022-05-17 Intel Corporation Apparatus and method for multiplication and accumulation of complex values
US11409525B2 (en) * 2018-01-24 2022-08-09 Intel Corporation Apparatus and method for vector multiply and accumulate of packed words
US10642620B2 (en) * 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920013922A (ko) * 1990-12-28 1992-07-30 오오가 노리오 내적연산회로
KR20000047576A (ko) * 1998-10-30 2000-07-25 디. 크레이그 노룬드 신호 처리 분산 산술 구조

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0375868A (ja) * 1989-08-17 1991-03-29 Sony Corp 行列データ乗算装置
JPH05267992A (ja) * 1992-03-18 1993-10-15 Sony Corp フイルタ回路
US5721892A (en) * 1995-08-31 1998-02-24 Intel Corporation Method and apparatus for performing multiply-subtract operations on packed data
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US6094637A (en) 1997-12-02 2000-07-25 Samsung Electronics Co., Ltd. Fast MPEG audio subband decoding using a multimedia processor
US6230253B1 (en) * 1998-03-31 2001-05-08 Intel Corporation Executing partial-width packed data instructions
JP2000322235A (ja) * 1999-05-07 2000-11-24 Sony Corp 情報処理装置
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
JP3935678B2 (ja) * 2001-01-31 2007-06-27 富士通株式会社 Simd積和演算方法、積和演算回路、および、半導体集積回路装置
US6901422B1 (en) 2001-03-21 2005-05-31 Apple Computer, Inc. Matrix multiplication in a vector processing system
US6898691B2 (en) 2001-06-06 2005-05-24 Intrinsity, Inc. Rearranging data between vector and matrix forms in a SIMD matrix processor
US7103756B2 (en) * 2002-09-30 2006-09-05 Hewlett-Packard Development Company, L.P. Data processor with individually writable register subword locations
US7275147B2 (en) * 2003-03-31 2007-09-25 Hitachi, Ltd. Method and apparatus for data alignment and parsing in SIMD computer architecture
US6847313B2 (en) * 2003-06-30 2005-01-25 Intel Corporation Rational sample rate conversion
GB2409061B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
US8332452B2 (en) 2006-10-31 2012-12-11 International Business Machines Corporation Single precision vector dot product with “word” vector write mask

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920013922A (ko) * 1990-12-28 1992-07-30 오오가 노리오 내적연산회로
KR20000047576A (ko) * 1998-10-30 2000-07-25 디. 크레이그 노룬드 신호 처리 분산 산술 구조

Also Published As

Publication number Publication date
US8631224B2 (en) 2014-01-14
KR20100075494A (ko) 2010-07-02
JP5201641B2 (ja) 2013-06-05
US20090077345A1 (en) 2009-03-19
WO2009035774A1 (en) 2009-03-19
JP2010539593A (ja) 2010-12-16

Similar Documents

Publication Publication Date Title
KR101482540B1 (ko) 중첩된 피연산자들을 갖는 simd 내적 연산들
KR102258024B1 (ko) 엘리먼트 폭들을 변경시키는 명령들을 사용하여 가변 길이 벡터들에 대해 연산하도록 구성된 벡터 프로세서
US11188330B2 (en) Vector multiply-add instruction
KR101515311B1 (ko) 승산-승산-누산 명령 수행
CN101495959B (zh) 组合微处理器内的多个寄存器单元的方法和设备
WO2005099383A2 (en) Processor having compound instruction and operation formats
US20190310847A1 (en) Complex multiply instruction
US20110072238A1 (en) Method for variable length opcode mapping in a VLIW processor
US6915411B2 (en) SIMD processor with concurrent operation of vector pointer datapath and vector computation datapath
CN112434256B (zh) 矩阵乘法器和处理器
KR20180052721A (ko) 이미지 프로세서용 다기능 실행 레인
US6820189B1 (en) Computation core executing multiple operation DSP instructions and micro-controller instructions of shorter length without performing switch operation
EP1936492A1 (en) SIMD processor with reduction unit
WO2008077803A1 (en) Simd processor with reduction unit
WO2007041047A2 (en) Computer processor architecture comprising operand stack and addressable registers
US7580968B2 (en) Processor with scaled sum-of-product instructions
JP3547316B2 (ja) プロセッサ

Legal Events

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

Payment date: 20190102

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200102

Year of fee payment: 6