KR101515311B1 - 승산-승산-누산 명령 수행 - Google Patents
승산-승산-누산 명령 수행 Download PDFInfo
- Publication number
- KR101515311B1 KR101515311B1 KR1020137010323A KR20137010323A KR101515311B1 KR 101515311 B1 KR101515311 B1 KR 101515311B1 KR 1020137010323 A KR1020137010323 A KR 1020137010323A KR 20137010323 A KR20137010323 A KR 20137010323A KR 101515311 B1 KR101515311 B1 KR 101515311B1
- Authority
- KR
- South Korea
- Prior art keywords
- coefficient
- sum
- multiplication
- instruction
- operations
- Prior art date
Links
- 239000013598 vector Substances 0.000 claims description 40
- 238000000034 method Methods 0.000 claims description 19
- 230000004044 response Effects 0.000 claims description 5
- 238000009825 accumulation Methods 0.000 claims description 4
- 230000009977 dual effect Effects 0.000 claims description 4
- 238000003860 storage Methods 0.000 abstract description 10
- 238000007792 addition Methods 0.000 description 37
- 230000015654 memory Effects 0.000 description 23
- 238000010586 diagram Methods 0.000 description 20
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 14
- 238000012545 processing Methods 0.000 description 11
- 239000000872 buffer Substances 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000012432 intermediate storage Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computer Hardware Design (AREA)
- Advance Control (AREA)
- Image Processing (AREA)
- Executing Machine-Instructions (AREA)
Abstract
일 실시예에서, 본 발명은 다수의 실행 유닛을 갖는 프로세서를 포함하고, 실행 유닛 중의 적어도 하나는, 다수의 승산기 및 가산기를 포함하는 승산-누산(MAC) 유닛을 갖고 사용자 레벨 승산-승산-누산 명령을 실행하여 목적지 저장 장치를 픽셀 블록의 픽셀에 대한 절대값에 각각 대응하는 복수의 엘리먼트로 채우는 회로를 포함한다. 다른 실시예가 기재되고 청구된다.
Description
현대 마이크로프로세서는 일반적으로 명령을 얻은 다음 명령의 처리를 시작하는 하나 이상의 프론트 엔드 스테이지(front-end stage)을 포함하는 상이한 스테이지를 갖는 파이프라인을 포함한다. 이들 스테이지는 소위 매크로 명령 포맷으로 종종 수신된 명령을 프로세서에 의해 사용가능한 포맷, 예를 들어, 하나 이상의 마이크로 명령 또는 소위 μop로 배치한다. 이들 μop는 프로세서 파이프라인의 추가의 부분으로 전달된다. 예를 들어, 비순차(out-of-order) 엔진이 명령들을 그것들의 프로그램 순서로부터 처리 목적에 더 효율적인 순서로 리오더링(reorder)할 수 있다. 이 비순차 엔진으로부터, 명령들은 다수의 실행 유닛 중의 하나 이상의 실행 유닛에 제공될 수 있다. 이 실행 유닛들은 프로세서의 계산 엔진들이고 데이터에 대해 다양한 산술 및 논리 연산 등의 다양한 연산을 수행할 수 있다. 상이한 프로세서들은 상이한 타입의 실행 유닛들을 가질 수 있다. 이들 실행 유닛에서 결과가 얻어지면, 결과적인 데이터는, 비순차 실행된 명령을 다시 프로그램 순서로 리오더링할 수 있는 리오더 엔진 등의 프로세서의 하나 이상의 백 엔드 스테이지(back-end stage)에 제공될 수 있다. 백 엔드 스테이지는 유효하게 완료된 명령을 퇴거시키는 퇴거 유닛(retirement unit)을 더 포함할 수 있다.
역사적으로, 프로세서는 8비트, 16비트, 32비트 또는 다른 폭 값 등의 스컬러 값에 대하여 동작하도록 구성되었다. 처리 속도 및 트랜지스터 수가 증가함에 따라, 많은 프로세서는 벡터 유닛을 포함시키기 시작했다. 벡터 유닛은 다수의 데이터 유닛에 대하여 단일 명령을 수행하는데 사용되고, 여기서 명령은 소위 SIMD(single instruction multiple data) 형태일 수 있다. 이러한 벡터 처리는 특히 그래픽 및 다른 계산 집약 작업 부하들에 적당할 수 있다. 소정의 사용자 레벨 명령이 벡터 데이터에 대하여 어떤 연산을 수행하기 위해 도입되었으나, 벡터 데이터를 처리하는데 있어서 여전히 비효율성이 존재한다. 또한, 소정의 실행 유닛이 벡터 연산을 처리하도록 구성되었으나, 이들 하드웨어 유닛 또한 소정의 벡터 처리에 대하여 비효율적일 수 있다.
도 1은 본 발명의 실시예에 따른 방법의 흐름도.
도 2는 그려질 다각형을 갖는 픽셀 그룹의 블록도.
도 3은 본 발명의 다른 실시예에 따른 방법의 흐름도.
도 4는 본 발명의 실시예에 따른 승산-승산-누산 명령을 처리하는 로직의 하드웨어 구현의 블록도.
도 5는 본 발명의 실시예에 따른 승산-누산(MAC) 유닛의 블록도.
도 6은 본 발명의 일 실시예에 따른 프로세서 코어의 블록도.
도 7은 본 발명의 실시예에 따른 프로세서의 블록도.
도 8은 본 발명의 다른 실시예에 따른 프로세서의 블록도.
도 9는 본 발명의 실시예에 따른 시스템의 블록도.
도 2는 그려질 다각형을 갖는 픽셀 그룹의 블록도.
도 3은 본 발명의 다른 실시예에 따른 방법의 흐름도.
도 4는 본 발명의 실시예에 따른 승산-승산-누산 명령을 처리하는 로직의 하드웨어 구현의 블록도.
도 5는 본 발명의 실시예에 따른 승산-누산(MAC) 유닛의 블록도.
도 6은 본 발명의 일 실시예에 따른 프로세서 코어의 블록도.
도 7은 본 발명의 실시예에 따른 프로세서의 블록도.
도 8은 본 발명의 다른 실시예에 따른 프로세서의 블록도.
도 9는 본 발명의 실시예에 따른 시스템의 블록도.
다양한 실시예에서, 사용자 레벨 벡터 명령이 피연산자 세트에 대하여 다수의 연산을 효율적으로 수행하는데 사용될 수 있다. 특히, 사용자 레벨 벡터 명령이 벡터 데이터에 대하여 여기에 SUPERMADD 연산이라고 기재된 승산-승산-가산 연산을 수행하는데 사용되어 프로세서 하드웨어가 복수의 상이한 사용자 레벨 명령 및 더 많은 산술 계산을 필요로 하는 다수의 연산을 효율적으로 수행할 수 있게 해준다. 또한, 일부의 실시예는 프로세서 하드웨어가 이 벡터 연산을 효율적으로 수행하도록 할 수 있다.
본 발명의 실시예를 이용하면, 들어오는 데이터를 처리하는데 더 높은 스루풋이 실현될 수 있다. 증가하는 스루풋에 더하여, 예를 들어, 승산-승산-가산 연산의 다수의 레벨에서 수행되는 연산의 공통성의 이해에 기초하여, 단일 사용자 레벨 명령만을 제공하여 다수의 입력 데이터 피연산자에 대하여 다수의 산술 연산을 수행함으로써, 결과를 실현하는 감소된 수의 연산이 발생할 수 있다.
본 발명의 범위는 이 점에서 제한되지 않지만, 실시예는 특히 그래픽 처리에 적절할 수 있다. 많은 그래픽 작업 부하들에서, 디스플레이의 개별 화소에 대한 픽셀 정보를 나타내는 데이터의 그룹에 소정의 연산이 수행된다. 이러한 작업 부하들에서, 픽셀의 그룹, 예를 들어, 4×4 픽셀 블록 또는 다른 그러한 수가 식별될 수 있다. 이러한 각각의 픽셀 블록에 대하여, 다양한 연산이 그래픽 작업 부하에서 수행될 수 있다.
예를 들어, 픽셀 데이터는 버텍스 쉐이더(vertex shader)에서 처리되어, 적어도 부분적으로 블록의 픽셀에 의해 표현되는 형상, 예를 들어, 삼각형의 정점들(vertices)에 대한 속성 정보을 결정할 수 있다. 버텍스 쉐이더는 블록의 픽셀에 대한 보간된 속성 값을 얻도록 동작할 수 있다. 본 발명의 범위는 이 점에서 제한되지 않지만, 일 구현예에서, 이 보간은 무게중심 보간일 수 있고 특히 원근 수정(perspective correction) 및 비원근 수정을 제공할 수 있다. 버텍스 쉐이더에서의 이러한 동작 후에, 처리된 정보는 예를 들어 추가의 처리가 발생할 수 있는 픽셀 쉐이더에 제공될 수 있다. 본 발명의 실시예에 따라 명령을 이용하여 보간 또는 다른 연산을 처리하는데 사용되는 연산에 관한 추가의 세부사항은 이하에서 설명한다.
여기에 기재된 개념을 더 잘 이해하기 위하여, 벡터 연산에 대한 배경이 기재된다. 일부의 SIMD(single instruction multiple data) 및 다른 멀티미디어 타입의 명령은 복합 명령으로서 간주된다. 대부분의 부동 소수점 관련 명령도 복합 명령이다. 따라서, 명령 디코더가 복합 매크로 명령을 만나면, 마이크로코드에 액세스하여 그 매크로 명령에 대한 마이크로코드 시퀀스를 검색할 수 있다. 그 매크로 명령을 수행하는 다양한 μop가 예를 들어 비순차(out-of-order) 실행 로직으로 전달되고, 이 실행 로직은 마이크로 명령이 파이프라인을 통해 흐르고 실행을 위해 스케줄링됨에 따라 성능을 최적화하기 위해 마이크로 명령의 플로우를 원활하게 하고(smooth out) 리오더링하는 버퍼를 가질 수 있다. 할당 로직이 각 μop가 실행하기 위하여 필요로 하는 버퍼 및 자원을 할당한다. 재명명(renaming) 로직이 논리 레지스터를 레지스터 파일 내의 엔트리(예를 들어, 물리적 레지스터)로 재명명할 수 있다.
일 실시예에서, 벡터 명령은 다양한 팩 데이터 타입 표현(packed data type representation)으로 실행될 수 있다. 이들 데이터 타입은 128 비트 폭(128 bits wide) 피연산자에 대한 팩 바이트, 팩 워드 및 팩 더블워드(dword)를 포함할 수 있다. 일 예로서, 팩 바이트 포맷은 128 비트의 길이를 가질 수 있고 16개의 팩 바이트 데이터 엘리먼트(소위 16 폭 벡터)를 포함한다. 바이트는 8 비트의 데이터로 정의된다. 바이트 데이터 엘리먼트에 대한 정보는 바이트 0에 대한 비트 7 내지 비트 0, 바이트 1에 대한 비트 15 내지 비트 8, 바이트 2에 대한 비트 23 내지 비트 16, 및 마지막으로 바이트 15에 대한 비트 120 내지 비트 127에 저장될 수 있다.
일반적으로, 데이터 엘리먼트는 동일한 길이의 다른 데이터 엘리먼트와 함께 단일 레지스터 또는 메모리 위치에 저장된 개별 데이터이다. 일부의 팩 데이터 시퀀스에서, 레지스터에 저장된 데이터 엘리먼트의 수는 128 비트를 개별 데이터 엘리먼트의 비트 길이로 나눈 값일 수 있다. 데이터 타입이 128 비트의 길이를 가질 수 있지만, 본 발명의 실시예는 또한 64 비트 폭 또는 다른 사이즈의 피연산자로 동작할 수 있다. 팩 데이터 포맷은 다른 레지스터 길이, 예를 들어, 96 비트, 160 비트, 192 비트, 224 비트, 256 비트 이상으로 더 확장될 수 있다. 또한, 다양한 부호 또는 무부호 팩 데이터 타입 표현이 본 발명의 실시예에 따라 멀티미디어 레지스터에서 처리될 수 있다.
이제 도 1을 참조하면, 본 발명의 실시예에 따른 방법의 흐름도가 도시된다. 도 1에 도시된 바와 같이, 단일 사용자 레벨 명령을 실행하여 승산-승산-가산 연산을 효율적으로 구현하는데 수행되는 연산의 하이 레벨 도면이 기재된다. 도 1에 보이는 바와 같이, 비순차 아키텍처를 갖는 프로세서 등의 프로세서의 하나 이상의 부분 내에서 구현될 수 있는 방법(100)이 도시된다. 보이는 바와 같이, 방법(100)은 듀얼 승산-가산 명령을 수신함으로써 시작할 수 있다(블록 110). 이 명령은 예를 들어 프로세서 프론트 엔드에서 수신된 사용자 레벨 또는 매크로 명령일 수 있다. 이 명령의 수신에 응답하여, 명령은 예를 들어 역시 프론트 엔드의 명령 디코더에서 디코딩될 수 있다(블록 120).
다음으로, 디코딩된 명령은, 명령과 함께 수신된 하나 이상의 피연산자와 함께, 실행 유닛으로 전송될 수 있다(블록 130). 일부의 실시예에서, 이 실행 유닛은 승산-누산(MAC) 유닛일 수 있지만, 본 발명의 범위는 이에 제한되지 않는다. MAC 유닛으로 직접 전송되는 것으로 도시되지만, 일부의 구현예에서, 디코딩된 명령은 먼저 임시 저장소, 예를 들어, 디코딩 명령 큐(queue)에 저장된 후에 예를 들어 비순차 로직에 제공할 수 있고, 비순차 로직은 데이터 및 원하는 실행 유닛이 이용가능해짐에 따라 데이터에 대한 연산을 더 효율적으로 수행하기 위해 이 SUPERMADD 명령을 포함하는 프로그램의 명령 플로우를 리오더링하기로 결정할 수 있다.
도 1을 여전히 참조하면, 명령에 대한 모든 데이터가 이용가능해지고 소정의 실행 유닛이 또한 이용가능해지면, 제어가 블록(140)으로 넘어가서 디코딩 명령이 실행될 수 있다. 또한, 명령의 결과는 목적지 저장소에 저장될 수 있다. 예를 들어, 사용자 레벨 명령이 결과에 대한 목적지 위치를 식별할 수 있고, 목적지 위치는 벡터 레지스터에 대응할 수 있고 따라서 하나 이상의 벡터 형태의 결과 데이터가 적절하게 저장되어 결과는 추가의 프로그램 실행에 사용될 수 있다. 도 1의 실시예에서는 이 특정한 구현예로 도시되지만, 본 발명의 범위는 이에 제한되지 않는다.
그래픽 작업 부하들에서, SUPERMADD 명령을 사용하는 하나의 예는 픽셀 블록에 대하여 픽셀 보간을 처리하는 것이다. 이제 도 2를 참조하면, 그려질 다각형을 갖는 픽셀의 그룹의 블록도가 도시되어 있다. 도 2에 보이는 바와 같이, 픽셀 블록(180)은 4×4 픽셀 매트릭스일 수 있다. 도 2의 예에서 16개의 개별 픽셀로 도시되지만, 상이한 실시예에서, 더 많거나 더 적은 픽셀이 픽셀 블록을 구성할 수 있다. 예를 들어, 다른 구현예에서, SUPERMADD 명령은 더 적은 픽셀(예를 들어, 2×2 블록) 또는 더 많은 픽셀, 예를 들어, 16×16 이상의 블록에 대하여 수행될 수 있다. 또한, X 및 Y 차원의 픽셀의 수는 동일할 필요가 없고 베이스2 값을 가질 필요가 없다. 도 2에 도시된 바와 같이, 픽셀 블록(180) 내에서, 블록의 3개의 픽셀에 존재하는 정점을 갖는 삼각형(185)이 존재한다. 물론, 다른 구현예에서, 삼각형 또는 다른 다각형이 주어진 픽셀 블록 내에 존재하는 하나 이상의 정점을 가질 수 있고 또 다른 그러한 픽셀 블록으로 확장할 수 있다. 쉐이딩 동작, 예를 들어, 버텍스 쉐이딩 동작의 일부로서, 블록의 상이한 픽셀의 속성이 결정될 수 있다. 이러한 속성은 픽셀이 쉐이딩되는 하나 이상의 컬러(예를 들어, RGB 값)에 대응하는 속성 등의 다른 속성과 함께 픽셀 위치 정보, 예를 들어, XYZ 값에 대응할 수 있다.
도 2에 도시된 것 등의 픽셀의 블록을 처리할 때, 예를 들어, X 및 Y 방향의 픽셀에 관한 위치 정보가 먼저 블록의 단일 기준 픽셀을 이용하여 결정될 수 있다. 도 2를 참조하면, 픽셀(190)은 블록에 대한 기준 픽셀에 대응할 수 있다. 따라서, 이 단일 픽셀에 대한 XY 값에 기초하여, 이 기준 픽셀로부터 블록의 다른 픽셀의 각각에 대한 오프셋 값이 결정될 수 있다. 개별 계산을 수행하여 각각의 픽셀의 XY 오프셋을 결정하는(이는 32개의 상이한 가산 연산을 이용할 수 있음) 대신, 실시예는 공통 오프셋이 X 및 Y 방향의 다수의 픽셀에 적용될 수 있다는 사실을 이용하여 수행될 수학적 연산의 수를 감소시킬 수 있다.
픽셀 쉐이딩 동작에서, 픽셀 값이 결정된 후에, 상수가 각각의 값에 적용되어 추가의 연산에 제공될 수 있는 결과를 형성한다. 여기서, X 및 Y 값의 각각에 대한 개별 승산 연산을 수행하는 대신에, 실시예는 다시 이들 픽셀 값 각각에 단일 상수가 적용된다는 사실을 이용하여 수행되는 연산의 수를 감소시킬 수 있다.
이하에서 더 설명하는 바와 같이, 상이한 구현예는 다음의 일반 형태, AX+BY+C의 결과를 얻는데 수행되는 수학적 연산의 수를 최적화할 수 있으며, 여기서, X 및 Y는 기준 값이고 A, B 및 C는 상수 계수이다.
실시예가 수행될 필요가 있는 명령의 시퀀스를 단일 사용자 레벨 명령을 통해 어떻게 최적화할 수 있는지를 이해하기 위하여, 종래의 다수의 사용자 레벨 벡터 가산 및 승산 연산을 이용하여 원하는 결과를 얻도록 수행될 수 있는 예시적인 명령 세트를 고려하는 것이 유익하다.
표 1을 참조하면, 다수의 사용자 레벨 명령을 이용하여 상기 식의 결과를 실현하기 위하여 수행될 수 있는 예시적인 명령이 도시된다.
요컨대, 이들 명령은, 벡터 레지스터를 픽셀 좌표 값(예를 들어, X 및 Y 값)으로 채우고, 승산을 실행하고, 그 후 추가로 상수를 각각의 픽셀에 더하여 결과를 실현하는데 사용될 수 있으며, 결과는 그래픽 작업 부하의 다른 부분에 의해 나중에 사용하기 위해 벡터 레지스터 등의 목적지 저장소에 저장될 수 있다. 설명의 목적으로, 벡터 레지스터는 16개의 개별 데이터 엘리먼트의 저장을 위해, 소위 16 폭 레지스터를 제공한다. 이 실시예에서, 각각의 데이터 엘리먼트는 부동 소수점 32 비트 포맷일 수 있지만, 16 비트 정수 값 등의 다른 포맷도 가능하다.
표 2를 참조하면, 각각의 픽셀 위치에서 평가된 평면 식 Ax+By+C의 결과에 대응하는 16개의 값의 세트를 얻기 위하여 표 1의 상기 명령에 의해 수행된 연산을 나타내는 표가 도시된다.
보이는 바와 같이, 표 2의 제2 라인에서 시작하여, (100, 200)의 기준 픽셀 값, 즉, 기준 픽셀에 대하여 100의 X 값 및 200의 Y 값을 가정한다. 그 후, 벡터 가산에 대응할 수 있는 제1 가산 연산을 통해, 0, 1, 2 및 3의 값을 갖는 픽셀 오프셋이 기준 X 값에 더해질 수 있다. 이 종래의 연산에서, 16개의 상이한 가산 연산이 발생한다. (표 2의 제4 라인에 보이는 바와 같이) Y 기준 픽셀에 대하여 유사한 연산이 발생한다. 그러나, 대신에 4번째 픽셀 값마다 픽셀에 사용되는 값이 증가한다는 점에 유의한다. 그러나, 16개의 가산 연산은 여전히 수행된다. 이들 2개의 벡터 가산 명령은 한 쌍의 벡터 레지스터를 블록의 각각의 픽셀에 대한 XY 값에 대응하는 픽셀 오프셋 값으로 채운다. 그 후, 이들 개별 픽셀 값의 각각을 취하여, 이들을 주어진 상수 값(즉, X 픽셀에 대한 제1 계수(A) 및 Y 픽셀에 대한 제2 계수(B))으로 승산하고, 제1 벡터 승산 가산 명령에 대하여 추가의 값, 즉, 상수 값(C)을 가산하는 벡터 승산-가산 명령의 쌍이 수행된다. 따라서, 이들 4개의 벡터 명령의 결론에서, 그리고 16 폭 벡터를 16개의 픽셀의 픽셀 블록을 나타내는 것으로 가정하여, 상기 4개의 명령은 32개의 개별 가산 및 32개의 개별 승산 연산을 나타낸다. 또한, 32 비트 승산이 32개의 가산의 구현을 실질적으로 요구함에 따라 승산 연산은 계산적으로 비쌀 수 있다.
상술한 바와 같이, 다양한 실시예에서, 단일 벡터 승산-승산-가산 명령이 실행될 수 있다. 이 명령에 의해 및 대체할 수 있는 종래의 일련의 명령의 이해에 의해, 감소된 수의 가산 및 승산 연산에 대한 상이한 최적화가 실현되어 높은 계산, 면적 및 전력 소비 효율로 승산-승산-가산 명령을 수행할 수 있다.
감소된 가산 및 승산 연산의 일 예로서, 상기 표 2에 표시된 픽셀 오프셋 연산은 복수 회 동일한 계산을 수행한다는 것을 인식할 수 있다. 따라서, 하나의 최적화로서, 오프셋 값의 각각에 대하여 단일 계산만이 수행된다. 또한, 승산 연산은 가산 연산보다 비싸다는 것을 인식할 수 있다. 따라서, 단일 승산 연산이 수행되어 주어진 계수와 하나의 픽셀 값의 곱을 얻을 수 있고, 가산(및/또는 후술하는 바와 같이 감산)이 수행되어 다른 값을 얻을 수 있다.
이제 표 3을 참조하면, X 및 Y 방향에 대한 4개의 개별 픽셀 오프셋을 얻는 예시적인 연산이 도시된다.
보이는 바와 같이, X 값(100) 및 Y 값(200)의 기준 픽셀을 가정하고, A×100의 단일 승산 연산이 수행될 수 있고, 그 후 3번의 가산 연산, 즉, A×100의 곱에 A, 2A 및 3A의 가산이 수행될 수 있다. 마찬가지로, 200의 값을 갖는 기준 픽셀(Y)에 대하여 동일한 연산이 수행될 수 있다.
추가의 최적화로서, 소정의 실시예는, 곱+3A의 가산이 가산 및 시프트 연산을 필요로 하기 때문에, 블록의 에지보다는 블록 내에 있는 다른 값(예를 들어, 상이한 픽셀 위치)이 기준 픽셀로서 사용될 수 있다는 사실을 이용할 수 있다. 예를 들어, (예를 들어 도 2에서 185로 마크된 픽셀에 대응하는) 101, 201의 XY 값을 갖는 기준 픽셀이 사용되는 것으로 가정한다. 이하의 표 4는 수행될 수 있는 연산, 즉, 해당 계수 및 이 기준 픽셀 값에 의한 단일 승산 및 3번의 가산 연산, 즉, -A, +A 및 +2A을 나타내고, 각각의 가산은 단순한 가산 연산을 통해 구현될 수 있다(Y 픽셀에 대하여 동일한 연산이 수행될 수 있다). 표 4를 참조하여, 2개의 벡터를 픽셀 오프셋 값으로 채우는 연산은 각각 단일 승산 및 3번의 가산 연산을 이용하여 수행될 수 있다.
그 후 상수 값(C)의 가산으로 최종 결과를 실현하기 위하여, 16개의 가산 연산이 수행될 수 있다. 그러나, 다시 추가의 효율성이 존재할 수 있다는 것에 유의한다.
특히, 표 4에 대하여 상술한 제1 레벨 연산에 대신하여, 표 5에서처럼, 승산 연산은 승산-누산으로서 구현될 수 있고, 여기서 각각의 기준 값은 해당 계수와 승산하고 상수 값은 이들 곱의 합에 가산된다. 이것은 상술한 3번의 가산 연산 전에 발생한다.
원하는 승산-승산-누산 명령의 결과를 효율적으로 얻기 위하여 다음의 표 6에 따른 연산이 수행될 수 있다.
표 6에 보이는 바와 같이, 베이스 값은 2번의 승산 연산을 이용하여 얻어질 수 있고, 각각의 승산 연산은 계수에 대응하는 피승수 및 픽셀 기준 값에 대응하는 승수를 갖는다. 결과적인 2개의 곱은 그 후 상수 값(예를 들어, C)과 함께 합산되어 베이스 값을 실현할 수 있다. (예를 들어, X 값에 대한) 제1 계수가 가산되고, 감산되고, 2X 값이 또한 가산되어 3개의 가산 연산을 실현하여 벡터 레지스터의 소정의 엔트리를 채울(populate) 수 있다. 상기로부터 4개의 값을 이용하여, 즉, 베이스 값 및 이들 3개의 상이한 가산 연산의 합을 이용하여, 12번의 가산 연산이 수행될 수 있고, 즉, 3개의 중간 합 값의 각각은 제로, 제2 계수, 마이너스 제2 계수, 및 2×제2 계수와 합산될 수 있고, 그 결과는 벡터 레지스터의 나머지 엔트리를 채울 수 있다. 따라서, 2개의 단일 승산 및 17개의 가산 연산을 이용하여, 최종 결과가 달성된다. 이에 반해, 종래의 명령을 이용한 표 1 및 2를 다시 참조하면, 동일한 결과는 32번의 상이한 승산 및 64번의 가산 연산을 필요로 한다. 각각의 승산 연산은 대략 8개의 상이한 가산 연산에 대응하고, 상당한 계산 효율이 실현될 수 있다.
이제 도 3을 참조하면, 본 발명의 일 실시예에 따른 방법의 흐름도가 도시되어 있다. 특히, 도 3의 방법(200)은 예컨대 프로세서의 퓨즈드(fused) 부동 소수점 승산 누산 유닛에서 승산-승산-누산 명령을 실행하는데 수행되는 연산에 대응한다. 보이는 바와 같이, 방법(200)은 제1 피연산자 값과 제1 계수의 제1 승산을 수행함으로써 시작될 수 있다(블록 210). 특히, 상술한 보간에 관련하여, 제1 피연산자는 예를 들어 X 좌표축에서 기준 픽셀에 대응할 수 있고 제1 계수는 소정의 가중치 또는 상수에 대응할 수 있다. 유사한 승산 연산이 제2 피연산자와 제2 계수 사이에 수행될 수 있다(블록 220). 다시, 이 승산은 (예를 들어, Y 좌표 축에서의) 기준 픽셀 값과 제2 가중치 사이에 수행될 수 있다. 이어서 블록(230)에서, 2개의 곱이 제3항, 예를 들어, 상수(C)와 합산될 수 있다. 이 가산 연산은 베이스 값을 얻을 수 있다. 이 베이스 값은 목적지 저장소의 선택된 위치에 저장될 수 있다. 예를 들어, 베이스 값은 제1 좌표축(예를 들어, X축)에 대한 픽셀에 대한 보간 값에 대응할 수 있다. 그 후, 제어는 블록(240)로 진행하여 베이스 값과, 제1 계수, 제1 계수의 마이너스 값 및 제1 계수의 2배 사이에 가산들이 수행될 수 있다. 표 6에 기재된 바와 같이, 이들 값은 베이스 값에 적용될 수 있다. 또한, 이들 베이스 합 연산(즉, 베이스 합)의 결과가 목적지 저장소의 다수의 위치의 각각에 저장될 수 있다. 예를 들어, 16 폭 벡터에 관련하여, 베이스 합은 벡터 레지스터의 3개의 위치에 저장될 수 있다.
이제 블록(250)을 참조하여, 유사한 가산 연산, 즉, 이들 베이스 합 각각과, 제2 계수, 마이너스 제2 계수 및 제2 계수의 2배 사이의 가산이 수행될 수 있다. 마찬가지로, 이들 합의 각각은 단일 벡터 레지스터의 다른 부분 또는 제2 벡터 레지스터의 부분일 수 있는 목적지 저장소의 주어진 위치에 저장될 수 있다. 각각의 계수가 각각의 베이스 합과의 가산 연산을 통해 적용되어, 12개의 상이한 가산 연산을 야기하고 12개의 상이한 합을 각각 하나 이상의 목적지 저장소의 하나의 위치에 저장할 수 있다. 도 3의 실시예에서는 이 특정한 구현예가 도시되지만, 본 발명의 범위은 이에 제한되지 않는다. 또한, 도 3에 기재된 연산은 단일 승산-승산-누산 명령의 실행을 위한 것이며, 이는 이 명령 전후에 수행되는 추가의 연산을 갖는 그래픽 작업 부하(graphic workload)의 일부일 수 있다.
이제 도 4를 참조하면, 본 발명의 실시예에 따라 승산-승산-누산 명령을 처리하는 로직의 하드웨어 구현의 블록도이다. 로직(300)은 프로세서 파이프라인의 일부일 수 있다. 예를 들어, 로직(300)은 승산 누산 유닛, 예를 들어, 부동 소수점 승산 누산 유닛 등의 프로세서 내의 실행 유닛일 수 있다. 그러나, 다른 구현예에서, MAC 유닛과는 별도의 전용 회로가 사용될 수 있다.
여전히 도 4를 참조하여, 로직(300)은 승산기 및 가산기를 포함하는 복수의 레벨을 갖는 트리 구조로서 구현될 수 있다. 도 4에 도시된 특정한 구현예에서, 2개의 승산기 및 17개의 가산기가 존재할 수 있지만, 본 발명의 범위는 이에 한정되지 않는다. 일반적으로, 로직(300)은 승산-승산-가산 연산을 수행하여 벡터에 다수의 데이터 엘리먼트를 덧붙이도록 구성될 수 있고, 각각의 데이터 엘리먼트는 예를 들어 픽셀 블록의 주어진 픽셀에 대한 값에 대응한다.
보이는 바와 같이, 로직(300)의 제1 레벨은 승산기쌍(305a-305b)를 포함할 수 있고, 이들 각각의 승산기는 입력 기준 값(예를 들어, X 및 Y)을 해당 계수(예를 들어, A 및 B)와 승산한다. 결과적인 곱은 2개의 곱을 더하여 제1 합을 얻는 제1 가산기(310)에 제공될 수 있고, 제1 합은 그 후 제2 가산기(320)에서 제3 계수(예를 들어, C)와 결합된다. 이 결과적인 베이스 항은 그 후 다른 레벨의 가산기들(330a-330c)에 제공될 수 있고, 각각의 가산기는 제1 계수(예를 들어, A, -A 및 2A)의 표현 사이의 가산을 수행한다. 이들 결과적인 합은 그 후 다른 레벨의 가산기들(340a-340c)에 제공되고, 각각의 가산기는 제2 레벨의 해당 가산기로부터의 합과 제2 계수(예를 들어, 0, B, -B 및 2B)의 표현을 가산하는 복수의 개별 가산기를 포함한다. 가산기의 각각의 결과적인 합은 상술한 바와 같이 하나 이상의 벡터 레지스터에 덧붙여져 예를 들어 그래픽 처리시 연산을 효율적으로 수행할 수 있다. 도 4의 실시예에서 이 특정한 구현예가 도시되지만, 본 발명의 범위는 이에 제한되지 않는다.
도 5는 본 발명의 실시예에 따른 MAC 유닛의 블록도이다. 보이는 바와 같이, MAC 유닛(400)은 주어진 연산의 실행을 지시하는 입력 명령(예를 들어, 하나 이상의 μop의 형태로) 및 연관된 피연산자를 수신하도록 구성될 수 있다. SUPERMADD 명령의 컨텍스트에서, 피연산자는 다수의 기준 값, 계수, 상수 등을 포함할 수 있다. 예를 들어, 일 실시예에서, 사용자 레벨 명령은 연산 코드 및 다수의 입력 값을 포함할 수 있고 다음의 형태를 취할 수 있다.
SUPERMADD 피연산자1, 피연산자2
여기서, 피연산자1은 메모리에 저장된 A, B, C(일 실시예에서, 각각 서로 옆에 저장된 FP32 값일 수 있음)를 갖는 메모리 위치이고, 피연산자2는 레지스터(예를 들어 X 및 Y에 대한 2개의 32 비트 정수 값을 유지하는 64 비트 정수 레지스터)이다. 다른 실시예에서, 레지스터는 X 및 Y에 대한 2개의 16 비트 정수 값을 유지하는 32 비트 정수 레지스터일 수 있다. 다른 실시예에서, 레지스터는 X 및 Y에 대한 2개의 8 비트 정수 값을 유지하는 16 비트 정수 레지스터일 수 있다.
여전히 도 5를 참조하면, MAC 유닛은 승산기(410a-410b)를 포함하고, 각각의 승산기는 일 실시예에서 압축기 트리로서 구현될 수 있다. 승산기로부터 얻어진 곱은 복수의 가산기 레벨(420a-420d) 중 선택된 것에 적용될 수 있다. 이러한 4개의 레벨로서 도시되지만, 더 많거나 적은 레벨이 상이한 실시예에 존재할 수 있다. 또한, 임시 저장소(430)는 베이스 항, 중간 값, 최종 값 등의 MAC 유닛에서 산출된 값의 중간 저장을 제공할 수 있다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 프로세서 코어의 블록도가 도시되어 있다. 도 6에 도시된 바와 같이, 프로세서 코어(500)는 멀티스테이지 파이프라인 비순차 프로세서일 수 있다. 프로세서 코어(500)는 본 발명의 실시예에 따라 SUPERMADD 명령의 실행과 연관하여 사용되는 다양한 특징을 나타내기 위해 도 6에서 비교적 간략화된 도시로 도시되어 있다. 도 6에 도시된 바와 같이, 코어(500)는, 프로세서에서 실행될 명령을 페치하고 그 명령을 프로세서에서 나중에 사용할 수 있도록 준비하는데 사용될 수 있는 프론트 엔드 유닛(510)을 포함한다. 예를 들어, 프론트 엔드 유닛(510)은 페치 유닛(501), 명령 캐시(503) 및 명령 디코더(505)를 포함할 수 있다. 일부의 구현예에서, 프론트 엔드 유닛(510)은 마이크로오퍼레이션 저장 장치뿐만 아니라 마이크로코드 저장 장치와 함께 트레이스 캐시(trace cache)를 더 포함할 수 있다. 페치 유닛(501)은 예를 들어 메모리 또는 명령 캐시(503)로부터 매크로 명령을 페치하고 그 매크로 명령을 명령 디코더(505)로 공급하여 프리미티브(primitive), 즉, 프로세서에 의해 실행될 마이크로오퍼레이션으로 디코딩한다. 프론트 엔드 유닛(510)에서 처리될 이러한 하나의 명령은 본 발명의 실시예에 따른 사용자 레벨 SUPERMADD 명령일 수 있다. 이러한 명령은 프론트 엔드 유닛이 다양한 마이크로오퍼레이션을 액세스하도록 하여 상술한 바와 같이 연산의 실행을 가능하게 한다.
프론트 엔드 유닛(510)과 실행 유닛(520) 사이에는 마이크로 명령을 수신하고 실행을 위해 마이크로 명령을 준비하는데 사용될 수 있는 비순차(out-of-order; OOO) 엔진(515)이 결합된다. 특히, OOO 엔진(515)은, 마이크로 명령 플로우를 리오더링하고 실행에 필요한 다양한 자원을 할당하고 레지스터 파일(530) 및 확장 레지스터 파일(535) 등의 다양한 레지스터 파일 내의 저장 위치로의 논리적 레지스터의 재명명을 제공하는 다양한 버퍼를 포함할 수 있다. 레지스터 파일(530)은 정수 및 부동 소수점 연산에 대한 개별 레지스터 파일을 포함할 수 있다. 확장 레지스터 파일(535)은 레지스터마다 벡터 사이즈 유닛, 예를 들어, 256 또는 512 비트의 저장을 제공할 수 있다.
여러 특수 하드웨어 중에서, 예를 들어, 다양한 정수, 부동 소수점 및 SIMD(single instruction multiple data) 로직 유닛을 포함하는 다양한 자원이 실행 유닛(520)에 존재할 수 있다. 예를 들어, 이러한 실행 유닛은 하나 이상의 산술 로직 유닛(ALU)(522)을 포함할 수 있다. 또한, 본 발명의 실시예에 따른 MAC 유닛(524)이 존재할 수 있다.
실행 유닛으로부터의 결과는 퇴거 로직(retirement logic), 즉, 리오더 버퍼(ROB)(540)에 제공될 수 있다. 특히, ROB(540)는 실행되는 명령과 연관된 정보를 수신하는 다양한 어레이 및 로직을 포함할 수 있다. 그 후, 이 정보를 ROB(540)가 조사하여 명령이 유효하게 퇴거되고 결과 데이터가 프로세서의 아키텍처 상태에 커밋(commit)될 수 있는지, 또는 명령의 적절한 퇴거를 막는 하나 이상의 예외가 발생했는지를 결정한다. 물론, ROB(540)는 퇴거와 연관된 다른 연산을 처리할 수 있다.
도 6에 도시된 바와 같이, ROB(540)는, 일 실시예에서, 로우 레벨 캐시(예를 들어, L1 캐시)일 수 있는 캐시(550)에 결합되지만, 본 발명은 이에 제한되지 않는다. 또한, 실행 유닛(520)은 캐시(550)에 직접 결합될 수 있다. 캐시(550)로부터, 더 높은 레벨의 캐시, 시스템 메모리 등과의 데이터 통신이 발생할 수 있다. 도 6의 실시예에서 하이 레벨로 도시되지만, 본 발명의 범위는 이에 제한되지 않는다. 예를 들어, 도 6의 구현예는 예컨대 소위 x86 ISA 아키텍처의 비순차 머신에 대한 것이지만, 본 발명의 범위는 이에 제한되지 않는다. 즉, 다른 실시예는 순차 프로세서, ARM 기반 프로세서 등의 RISC(reduced instruction set computing) 프로세서, 또는 도 8에 대하여 이하에서 도시된 바와 같은 에뮬레이션 엔진 및 연관된 로직 회로를 통해 상이한 ISA의 명령 및 연산을 에뮬레이팅할 수 있는 다른 타입의 ISA의 프로세서에서 구현될 수 있다.
이제 도 7을 참조하면, 본 발명의 실시예에 따른 프로세서의 블록도가 도시되어 있다. 도 7에 도시된 바와 같이, 프로세서(600)는 복수의 코어(610a-610n)를 포함하는 멀티코어 프로세서일 수 있다. 일 실시예에서, 이러한 각각의 코어는 도 6에서 상술한 코어(500)로서 구성될 수 있다. 다양한 코어는 접속부(615)를 통해 다양한 컴포넌트를 포함하는 언코어(uncore)(620)에 결합될 수 있다. 보이는 바와 같이, 언코어(620)는 마지막 레벨 캐시일 수 있는 공유 캐시(630)를 포함할 수 있다. 또한, 언코어는 IMC(integrated memory controller)(640), 다양한 인터페이스(650) 및 전력 관리 유닛(655)을 포함할 수 있고, 전력 관리 유닛은 소정의 코어를 설정할 적절한 저전력 상태를 결정할 수 있다. 또한, 전력 관리 유닛(655)은 복수의 제어 신호를 생성하여 주어진 코어뿐만 아니라 다른 프로세서 유닛의 다양한 컴포넌트들이 저전력 상태로 들어가도록 할 수 있다. 보이는 바와 같이, 프로세서(600)는 예를 들어 메모리 버스를 통해 시스템 메모리(660)와 통신할 수 있다. 또한, 인터페이스(650)에 의해 주변 장치, 대용량 저장 장치 등의 다양한 오프칩(off-chip) 컴포넌트에 접속될 수 있다. 도 7의 실시예에서 이 특정 구현예가 도시되지만, 본 발명은 이에 제한되지 않는다.
다른 실시예에서, 프로세서 아키텍처는 프로세서가 소스 ISA라 불리우는 제1 ISA의 명령을 실행할 수 있도록 에뮬레이션 특징을 포함할 수 있고, 여기서 아키텍처는 타겟 ISA라 불리는 제2 ISA에 따른다. 일반적으로, OS 및 애플리케이션 프로그램을 포함하는 소프트웨어가 소스 ISA로 컴파일링되고, 하드웨어가 특수 성능 및/또는 에너지 효율 특징을 가지고 주어진 하드웨어 구현을 위해 특별히 설계된 타겟 ISA를 구현한다.
이제 도 8을 참조하면, 본 발명의 다른 실시예에 따른 프로세서의 블록도가 도시되어 있다. 도 8에 나타낸 바와 같이, 시스템(700)은 프로세서(710) 및 메모리(720)를 포함한다. 메모리(720)는 시스템 및 애플리케이션 소프트웨어를 유지하는 종래의 메모리(722) 및 타겟 ISA를 위해 설치된 소프트웨어를 유지하는 은폐 메모리(724)를 포함한다. 보이는 같이, 프로세서(710)는 소스 코드를 타겟 코드로 변환하는 에뮬레이션 엔진(730)을 포함한다. 에뮬레이션은 해석(interpretation) 또는 바이너리 변환으로 수행될 수 있다. 코드를 처음 만났을 때 종종 그것에 해석이 사용된다. 그 후, 빈번히 실행되는 코드 영역(예를 들어, 핫스팟)이 다이나믹 프로파일링을 통해 발견됨에 따라, 그 코드 영역은 타겟 ISA로 변환되고 은폐 메모리(724) 내의 코드 캐시에 저장된다. 변환 프로세스의 일부로서 최적화가 수행되고 매우 자주 사용되는 코드는 나중에 한층 더 최적화될 수 있다. 코드의 변환된 블록은 코드 캐시(724)에 유지되어 반복적으로 재사용될 수 있다.
도 8을 여전히 참조하면, 멀티코어 프로세서의 하나의 코어일 수 있는 프로세서(710)는 명령 캐시(I-캐시)(750)에 명령 포인터 어드레스를 제공하는 프로그램 카운터(740)를 포함한다. 보이는 바와 같이, I-캐시(750)는 또한 주어진 명령 어드레스에 대해 미스(miss) 시에 은폐 메모리부(724)로부터 직접 타겟 ISA 명령을 수신할 수 있다. 따라서, I-캐시(750)는, 매크로 명령 레벨에 있을 수 있는 입력 명령을 수신하고 프로세서 파이프라인(770) 내에서 실행하기 위하여 명령을 마이크로 명령으로 변환하는 타겟 ISA의 디코더일 수 있는 디코더(760)에 제공될 수 있는 타겟 ISA 명령을 저장할 수 있다. 본 발명은 이에 제한되지 않지만, 파이프라인(770)은 명령을 수행하고 퇴거시키는 다양한 스테이지를 포함하는 비순차 파이프라인일 수 있다. 상술한 다양한 실행 유닛이 본 발명의 실시예에 따라 사용자 레벨 듀얼 승산-누산 명령을 실행하기 위해 파이프라인(770) 내에 존재할 수 있다. 즉, 프로세서(710)가 사용자 레벨 승산-승산 누산 명령이 제공되는 마이크로 아키텍처와 상이한 마이크로 아키텍처인 구현예에서도, 명령은 기본 하드웨어 상에서 실행될 수 있다.
실시예는 많은 상이한 시스템 타입으로 구현될 수 있다. 도 9를 참조하면, 본 발명의 실시예에 따른 시스템의 블록도가 도시된다. 도 9에 도시된 바와 같이, 마이크로프로세서 시스템(800)은 포인트-투-포인트 상호 접속 시스템이고 포인트-투-포인트 상호 접속부(850)를 통해 결합된 제1 프로세서(870) 및 제2 프로세서(880)를 포함한다. 도 9에 도시된 바와 같이, 프로세서(870 및 880)의 각각은 제1 및 제2 프로세서 코어(즉, 프로세서 코어(874a 및 874b) 및 프로세서 코어(884a 및 884b))를 포함하는 멀티코어 프로세서일 수 있지만, 잠재적으로 더 많은 코어가 프로세서 내에 존재할 수 있다. 상술한 바와 같이, 프로세서 코어는 본 발명의 실시예에 따라 사용자 레벨 승산-승산 명령을 수행하는 MAC 유닛 또는 다른 로직을 포함할 수 있다.
도 9를 여전히 참조하면, 제1 프로세서(870)는 MCH(memory controller hub)(872) 및 포인트-투-포인트(P-P) 인터페이스(876 및 878)를 더 포함한다. 마찬가지로, 제2 프로세서(880)는 MCH(882) 및 P-P 인터페이스(886 및 888)를 포함한다. 도 9에 도시된 바와 같이, MCH(872 및 882)는 프로세서를 각각의 프로세서에 국부적으로 부착된 메인 메모리(예를 들어, 동적 랜덤 액세스 메모리(DRAM))의 일부일 수 있는 각각의 메모리, 즉, 메모리(832) 및 메모리(834)에 결합한다. 제1 프로세서(870) 및 제2 프로세서(880)는 각각 P-P 상호 접속부(852 및 854)를 통해 칩셋(890)에 결합될 수 있다. 도 9에 도시된 바와 같이, 칩셋(890)은 P-P 인터페이스(894 및 898)를 포함한다.
또한, 칩셋(890)은 칩셋(890)을 P-P 상호 접속부(839)에 의해 고성능 그래픽 엔진(838)과 결합하는 인터페이스(892)를 포함한다. 칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 결합될 수 있다. 도 9에 도시된 바와 같이, 다양한 입출력(I/O) 장치(814)가 제1 버스(816)를 제2 버스(820)에 결합하는 버스 브리지(818)와 함께 제1 버스(816)에 결합될 수 있다. 일 실시예에서, 예를 들어 키보드/마우스(822), 통신 장치(826), 및 코드(830)를 포함할 수 있는 디스크 드라이버 또는 다른 대용량 저장 장치 등의 데이터 저장 유닛(828)을 포함하는 다양한 장치가 제2 버스(820)에 결합될 수 있다. 또한, 오디오 I/O(824)가 제2 버스(820)에 결합될 수 있다.
실시예는 코드로 구현될 수 있고 명령을 수행하도록 시스템을 프로그래밍하는데 사용될 수 있는 명령이 저장된 저장 매체 상에 저장될 수 있다. 저장 매체는, 제한되지 않지만, 플로피 디스크, 광 디스크, 광 디스크를 포함하는 디스크, SSD(solid state drives), 콤팩트 디스크 판독 전용 메모리(CD-ROM), CD-RW(compact disk rewritable), 판독 전용 메모리(ROM), 동적 랜덤 액세스 메모리(DRAM) 또는 정적 랜덤 액세스 메모리(SRAM) 등의 랜덤 액세스 메모리(RAM), 소거가능 프로그래머블 판독 전용 메모리(EPROM), 플래시 메모리, 전기적으로 소거가능한 프로그래머블 판독 전용 메모리(EEPROM), 자기 또는 광 카드, 또는 전자 명령을 저장하기에 적합한 임의의 다른 타입의 미디어와 같은 임의의 타입의 비일시적(non-transitory) 저장 매체를 포함할 수 있다.
본 발명은 제한된 수의 실시예에 대하여 설명하였지만, 당업자는 이로부터 수많은 변형 및 변경을 인식할 것이다. 첨부된 청구범위는 본 발명의 사상 및 범위 내에 있는 모든 이러한 변형 및 변경을 커버하는 것으로 의도된다.
Claims (20)
- 복수의 실행 유닛을 갖는 프로세서를 포함하고,
상기 실행 유닛들 중 적어도 하나는 회로를 포함하고,
상기 회로는,
제1 기준 값과 제1 계수를 승산하여 제1 곱을 얻는 제1 승산기;
제2 기준 값과 제2 계수를 승산하여 제2 곱을 얻는 제2 승산기;
상기 제1 및 제2 곱을 결합하여 제1 합을 얻는 제1 가산기;
상기 제1 합과 상수를 결합하여 베이스 값을 얻는 제2 가산기;
상기 베이스 값을 상기 제1 계수의 복수의 표현(representation) 중의 하나와 결합하여 제1 합 세트를 각각이 얻는 제3 레벨의 가산기들; 및
상기 제1 합 세트를 상기 제2 계수의 복수의 표현 중의 하나와 결합하여 제2 합 세트를 각각이 얻는 제4 레벨의 가산기들
을 포함하고,
상기 회로는 상기 제3 및 제4 레벨의 가산기들 중의 하나의 출력을 각각이 저장하기 위한 복수의 위치를 갖는 벡터 목적지 저장소를 채우는(populate) 것인 장치. - 제1항에 있어서, 상기 복수의 위치의 각각의 위치는 픽셀 블록의 픽셀에 대응하는 장치.
- 제1항에 있어서, 상기 회로는 승산-누산(MAC) 유닛의 일부인 장치.
- 제1항에 있어서, 상기 회로는 사용자 레벨 승산-승산-가산 명령에 응답하여 상기 벡터 목적지 저장소를 채우는 것인 장치.
- 제4항에 있어서, 상기 회로는 상기 제1 및 제2 기준 값 및 상기 사용자 레벨 승산-승산-가산 명령과 연관된 상기 상수를 수신하는 것인 장치.
- 제5항에 있어서, 상기 프로세서는 상기 제1 및 제2 기준 값 및 상기 사용자 레벨 승산-승산-가산 명령을 수신하는 프론트 엔트 유닛을 더 포함하는 장치.
- 제4항에 있어서, 상기 회로는 상기 사용자 레벨 승산-승산-가산 명령에 응답하여 2번의 승산 연산 및 16번보다 많은 가산 연산을 수행하는 것인 장치.
- 프로세서의 프론트 엔드 유닛에서 듀얼 승산-가산 명령을 수신하는 단계;
상기 듀얼 승산-가산 명령을 디코딩하고 상기 디코딩된 명령 및 이에 따른 피연산자를 상기 프로세서의 실행 유닛으로 전송하는 단계; 및
상기 실행 유닛에서 상기 디코딩된 명령을 실행하는 단계
를 포함하고,
상기 실행하는 단계는 복수의 승산 연산, 제1 가산 및 제2 가산을 수행하여 베이스 값을 얻는 단계, 제1 세트의 가산기들에서 상기 베이스 값을 조작하여 중간 합 값들을 얻는 단계, 제2 세트의 가산기들에서 상기 중간 합 값들 각각을 조작하여 최종 합 값들을 얻는 단계, 및 적어도 상기 중간 합 값들 및 최종 합 값들을 목적지 저장소에 저장하는 단계를 포함하는 방법. - 제8항에 있어서, 상기 복수의 승산 연산을 수행하는 단계는,
제1 피연산자와 제1 계수의 제1 승산을 수행하여 제1 곱을 얻는 단계; 및
제2 피연산자와 제2 계수의 제2 승산을 수행하여 제2 곱을 얻는 단계
를 포함하는 방법. - 제9항에 있어서, 상기 제1 가산을 수행하는 단계는 상기 제1 곱과 상기 제2 곱을 결합하여 제1 합을 얻는 단계를 포함하는 방법.
- 제10항에 있어서, 상기 제2 가산을 수행하는 단계는 상기 제1 합과 상수를 결합하여 상기 베이스 값을 얻는 단계를 포함하는 방법.
- 제11항에 있어서, 상기 베이스 값을 조작하는 단계는 상기 베이스 값과, 상기 제1 계수, 상기 제1 계수의 마이너스 값, 및 상기 제1 계수의 2배 사이의 가산 연산들을 수행하여 상기 중간 합 값들을 얻는 단계를 포함하는 방법.
- 제12항에 있어서, 상기 중간 합 값들 각각을 조작하는 단계는 상기 중간 합 값들 각각과, 상기 제2 계수, 상기 제2 계수의 마이너스 값, 및 상기 제2 계수의 2배 간의 가산 연산들을 수행하여 상기 최종 합 값들을 얻는 단계를 포함하는 방법.
- 복수의 실행 유닛을 갖는 프로세서 - 상기 실행 유닛들 중 적어도 하나는, 복수의 승산기 및 복수의 가산기를 포함하는 승산-누산(MAC) 유닛을 포함하고 사용자 레벨 승산-승산-누산 명령을 실행하여 목적지 저장소를 픽셀 블록의 픽셀에 대한 값에 각각 대응하는 복수의 엘리먼트로 채우는 회로를 포함하고, 상기 복수의 가산기의 수는 상기 픽셀 블록 내의 픽셀의 수를 초과함 -; 및
상기 프로세서에 결합된 동적 랜덤 액세스 메모리(DRAM)
를 포함하는 시스템. - 제14항에 있어서, 상기 MAC 유닛은 상기 사용자 레벨 승산-승산-누산 명령의 단일 명령에 응답하여 복수의 승산 연산 및 복수의 가산 연산을 수행하는 것인 시스템.
- 제15항에 있어서, 상기 단일 명령은 제1 기준 엘리먼트 및 제2 기준 엘리먼트, 제1 계수 및 제2 계수, 및 상수와 연관되는 시스템.
- 제16항에 있어서, 상기 MAC 유닛은,
상기 제1 기준 엘리먼트를 상기 제1 계수와 승산하여 제1 곱을 얻는 제1 승산기;
상기 제2 기준 엘리먼트를 상기 제2 계수와 승산하여 제2 곱을 얻는 제2 승산기;
상기 제1 곱과 상기 제2 곱을 결합하여 제1 합을 얻는 제1 가산기; 및
상기 제1 합과 상기 상수를 결합하여 베이스 값을 얻는 제2 가산기
를 포함하는 시스템. - 제17항에 있어서, 상기 MAC 유닛은,
상기 베이스 값을 상기 제1 계수의 복수의 표현(representation) 중의 하나와 결합하여 제1 합 세트를 얻는 제3 레벨의 가산기들 - 상기 제1 합 세트의 각각은 절대값들 중의 하나에 대응함 - ; 및
상기 제1 합 세트를 상기 제2 계수의 복수의 표현 중의 하나와 결합하여 제2 합 세트를 얻는 제4 레벨의 가산기들 - 상기 제2 합 세트의 각각은 절대값들 중의 하나에 대응함 -
을 더 포함하는 시스템. - 제17항에 있어서, 베이스 합은 절대값들 중의 하나에 대응하는 시스템.
- 제15항에 있어서, 상기 MAC 유닛은 상기 단일 명령에 응답하여 상기 복수의 승산 연산 및 X보다 많은 가산 연산을 수행하고, X는 상기 목적지 저장소의 상기 복수의 엘리먼트의 수에 대응하고, 상기 MAC 유닛은 X보다 많은 가산기를 포함하는 시스템.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/889,916 US8478969B2 (en) | 2010-09-24 | 2010-09-24 | Performing a multiply-multiply-accumulate instruction |
US12/889,916 | 2010-09-24 | ||
PCT/US2011/053154 WO2012040666A2 (en) | 2010-09-24 | 2011-09-24 | Performing a multiply-multiply-accumulate instruction |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130056905A KR20130056905A (ko) | 2013-05-30 |
KR101515311B1 true KR101515311B1 (ko) | 2015-04-24 |
Family
ID=45871877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137010323A KR101515311B1 (ko) | 2010-09-24 | 2011-09-24 | 승산-승산-누산 명령 수행 |
Country Status (7)
Country | Link |
---|---|
US (3) | US8478969B2 (ko) |
KR (1) | KR101515311B1 (ko) |
CN (1) | CN103221916B (ko) |
DE (1) | DE112011103213T5 (ko) |
GB (1) | GB2497698B (ko) |
TW (1) | TWI528276B (ko) |
WO (1) | WO2012040666A2 (ko) |
Families Citing this family (72)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8650240B2 (en) * | 2009-08-17 | 2014-02-11 | International Business Machines Corporation | Complex matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
US8577950B2 (en) * | 2009-08-17 | 2013-11-05 | International Business Machines Corporation | Matrix multiplication operations with data pre-conditioning in a high performance computing architecture |
US9600281B2 (en) * | 2010-07-12 | 2017-03-21 | International Business Machines Corporation | Matrix multiplication operations using pair-wise load and splat operations |
TWI476640B (zh) | 2012-09-28 | 2015-03-11 | Ind Tech Res Inst | 時間資料序列的平滑化方法與裝置 |
CN103268223B (zh) * | 2013-04-26 | 2016-06-29 | 深圳中微电科技有限公司 | 在编译过程中改善乘加类指令执行性能的方法 |
US9830999B2 (en) | 2014-06-05 | 2017-11-28 | Micron Technology, Inc. | Comparison operations in memory |
US9898252B2 (en) | 2014-09-03 | 2018-02-20 | Micron Technology, Inc. | Multiplication operations in memory |
US9904515B2 (en) | 2014-09-03 | 2018-02-27 | Micron Technology, Inc. | Multiplication operations in memory |
US9747961B2 (en) | 2014-09-03 | 2017-08-29 | Micron Technology, Inc. | Division operations in memory |
US9589602B2 (en) | 2014-09-03 | 2017-03-07 | Micron Technology, Inc. | Comparison operations in memory |
US10032493B2 (en) | 2015-01-07 | 2018-07-24 | Micron Technology, Inc. | Longest element length determination in memory |
US9583163B2 (en) | 2015-02-03 | 2017-02-28 | Micron Technology, Inc. | Loop structure for operations in memory |
US9898253B2 (en) | 2015-03-11 | 2018-02-20 | Micron Technology, Inc. | Division operations on variable length elements in memory |
US9741399B2 (en) | 2015-03-11 | 2017-08-22 | Micron Technology, Inc. | Data shift by elements of a vector in memory |
US10146537B2 (en) | 2015-03-13 | 2018-12-04 | Micron Technology, Inc. | Vector population count determination in memory |
US9892767B2 (en) | 2016-02-12 | 2018-02-13 | Micron Technology, Inc. | Data gathering in memory |
US9697876B1 (en) | 2016-03-01 | 2017-07-04 | Micron Technology, Inc. | Vertical bit vector shift in memory |
US9910637B2 (en) | 2016-03-17 | 2018-03-06 | Micron Technology, Inc. | Signed division in memory |
US10607665B2 (en) | 2016-04-07 | 2020-03-31 | Micron Technology, Inc. | Span mask generation |
US10153008B2 (en) | 2016-04-20 | 2018-12-11 | Micron Technology, Inc. | Apparatuses and methods for performing corner turn operations using sensing circuitry |
US9659605B1 (en) | 2016-04-20 | 2017-05-23 | Micron Technology, Inc. | Apparatuses and methods for performing corner turn operations using sensing circuitry |
US10042608B2 (en) | 2016-05-11 | 2018-08-07 | Micron Technology, Inc. | Signed division in memory |
US10275243B2 (en) | 2016-07-02 | 2019-04-30 | Intel Corporation | Interruptible and restartable matrix multiplication instructions, processors, methods, and systems |
US11029951B2 (en) | 2016-08-15 | 2021-06-08 | Micron Technology, Inc. | Smallest or largest value element determination |
WO2018174936A1 (en) | 2017-03-20 | 2018-09-27 | Intel Corporation | Systems, methods, and apparatuses for tile matrix multiplication and accumulation |
US10043570B1 (en) | 2017-04-17 | 2018-08-07 | Micron Technology, Inc. | Signed element compare in memory |
US10147467B2 (en) | 2017-04-17 | 2018-12-04 | Micron Technology, Inc. | Element value comparison in memory |
WO2019009870A1 (en) | 2017-07-01 | 2019-01-10 | Intel Corporation | SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE |
CN108475188A (zh) * | 2017-07-31 | 2018-08-31 | 深圳市大疆创新科技有限公司 | 数据处理方法和设备 |
KR102491068B1 (ko) * | 2017-11-17 | 2023-01-19 | 에스케이하이닉스 주식회사 | 메모리 장치에 대한 태스크들을 스케줄링하는 반도체 장치 및 이를 포함하는 시스템 |
US11816483B2 (en) | 2017-12-29 | 2023-11-14 | Intel Corporation | Systems, methods, and apparatuses for matrix operations |
US11023235B2 (en) | 2017-12-29 | 2021-06-01 | Intel Corporation | Systems and methods to zero a tile register pair |
US11809869B2 (en) | 2017-12-29 | 2023-11-07 | Intel Corporation | Systems and methods to store a tile register pair to memory |
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 |
US11789729B2 (en) | 2017-12-29 | 2023-10-17 | Intel Corporation | Systems and methods for computing dot products of nibbles in two tile operands |
US10664287B2 (en) | 2018-03-30 | 2020-05-26 | Intel Corporation | Systems and methods for implementing chained tile operations |
US10432240B1 (en) | 2018-05-22 | 2019-10-01 | Micron Technology, Inc. | Wireless devices and systems including examples of compensating power amplifier noise |
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 |
US10866786B2 (en) | 2018-09-27 | 2020-12-15 | Intel Corporation | Systems and methods for performing instructions to transpose rectangular tiles |
US10990396B2 (en) | 2018-09-27 | 2021-04-27 | Intel Corporation | Systems for performing instructions to quickly convert and use tiles as 1D vectors |
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 |
US10963246B2 (en) | 2018-11-09 | 2021-03-30 | Intel Corporation | Systems and methods for performing 16-bit floating-point matrix dot product instructions |
KR20200072307A (ko) * | 2018-12-12 | 2020-06-22 | 삼성전자주식회사 | 뉴럴 네트워크에서의 부하 균형을 위한 장치 및 방법 |
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 |
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 |
US11175891B2 (en) | 2019-03-30 | 2021-11-16 | Intel Corporation | Systems and methods to perform floating-point addition with selected rounding |
US10990397B2 (en) | 2019-03-30 | 2021-04-27 | Intel Corporation | Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator |
US10763905B1 (en) | 2019-06-07 | 2020-09-01 | Micron Technology, Inc. | Wireless devices and systems including examples of mismatch correction scheme |
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 |
CN112579042B (zh) * | 2019-09-29 | 2024-04-19 | 广州希姆半导体科技有限公司 | 计算装置及方法、芯片、电子设备及计算机可读存储介质 |
US11714875B2 (en) | 2019-12-28 | 2023-08-01 | Intel Corporation | Apparatuses, methods, and systems for instructions of a matrix operations accelerator |
US10972139B1 (en) | 2020-04-15 | 2021-04-06 | Micron Technology, Inc. | Wireless devices and systems including examples of compensating power amplifier noise with neural networks or recurrent neural networks |
US11972230B2 (en) | 2020-06-27 | 2024-04-30 | Intel Corporation | Matrix transpose and multiply |
US11496341B2 (en) | 2020-08-13 | 2022-11-08 | Micron Technology, Inc. | Wireless devices and systems including examples of compensating I/Q imbalance with neural networks or recurrent neural networks |
US20220057993A1 (en) * | 2020-08-21 | 2022-02-24 | Memryx Incorporated | Martix multiplication engines |
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 |
TWI752713B (zh) | 2020-11-04 | 2022-01-11 | 臺灣發展軟體科技股份有限公司 | 資料處理電路及故障減輕方法 |
US12001385B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for loading a tile of a matrix operations accelerator |
US12001887B2 (en) | 2020-12-24 | 2024-06-04 | Intel Corporation | Apparatuses, methods, and systems for instructions for aligning tiles of a matrix operations accelerator |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030009502A1 (en) | 2001-06-29 | 2003-01-09 | Nec Corporation | Complex vector operation processor with pipeline processing function and system using the same |
US20030229659A1 (en) | 2002-06-08 | 2003-12-11 | Dror Halahmi | Bit exactness support in dual-MAC architecture |
US20100121898A1 (en) | 2008-11-10 | 2010-05-13 | Crossfield Technology LLC | Floating-point fused dot-product unit |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4563750A (en) * | 1983-03-04 | 1986-01-07 | Clarke William L | Fast Fourier transform apparatus with data timing schedule decoupling |
US4665500A (en) * | 1984-04-11 | 1987-05-12 | Texas Instruments Incorporated | Multiply and divide unit for a high speed processor |
US6003058A (en) * | 1997-09-05 | 1999-12-14 | Motorola, Inc. | Apparatus and methods for performing arithimetic operations on vectors and/or matrices |
US6446193B1 (en) * | 1997-09-08 | 2002-09-03 | Agere Systems Guardian Corp. | Method and apparatus for single cycle processing of data associated with separate accumulators in a dual multiply-accumulate architecture |
US6571268B1 (en) * | 1998-10-06 | 2003-05-27 | Texas Instruments Incorporated | Multiplier accumulator circuits |
US6523055B1 (en) * | 1999-01-20 | 2003-02-18 | Lsi Logic Corporation | Circuit and method for multiplying and accumulating the sum of two products in a single cycle |
US6820189B1 (en) * | 1999-05-12 | 2004-11-16 | Analog Devices, Inc. | Computation core executing multiple operation DSP instructions and micro-controller instructions of shorter length without performing switch operation |
US6611856B1 (en) * | 1999-12-23 | 2003-08-26 | Intel Corporation | Processing multiply-accumulate operations in a single cycle |
JP3935678B2 (ja) * | 2001-01-31 | 2007-06-27 | 富士通株式会社 | Simd積和演算方法、積和演算回路、および、半導体集積回路装置 |
US7010558B2 (en) * | 2001-04-19 | 2006-03-07 | Arc International | Data processor with enhanced instruction execution and method |
US7107305B2 (en) * | 2001-10-05 | 2006-09-12 | Intel Corporation | Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions |
JP4408712B2 (ja) * | 2004-01-26 | 2010-02-03 | 富士通マイクロエレクトロニクス株式会社 | 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 |
US7467176B2 (en) * | 2004-02-20 | 2008-12-16 | Altera Corporation | Saturation and rounding in multiply-accumulate blocks |
US7353244B2 (en) * | 2004-04-16 | 2008-04-01 | Marvell International Ltd. | Dual-multiply-accumulator operation optimized for even and odd multisample calculations |
US8631224B2 (en) * | 2007-09-13 | 2014-01-14 | Freescale Semiconductor, Inc. | SIMD dot product operations with overlapped operands |
-
2010
- 2010-09-24 US US12/889,916 patent/US8478969B2/en active Active
-
2011
- 2011-09-21 TW TW100133928A patent/TWI528276B/zh not_active IP Right Cessation
- 2011-09-24 DE DE112011103213T patent/DE112011103213T5/de not_active Withdrawn
- 2011-09-24 KR KR1020137010323A patent/KR101515311B1/ko not_active IP Right Cessation
- 2011-09-24 GB GB1305501.7A patent/GB2497698B/en active Active
- 2011-09-24 CN CN201180056299.7A patent/CN103221916B/zh not_active Expired - Fee Related
- 2011-09-24 WO PCT/US2011/053154 patent/WO2012040666A2/en active Application Filing
-
2013
- 2013-03-04 US US13/783,963 patent/US8683183B2/en active Active
-
2014
- 2014-01-31 US US14/169,491 patent/US9110655B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030009502A1 (en) | 2001-06-29 | 2003-01-09 | Nec Corporation | Complex vector operation processor with pipeline processing function and system using the same |
US20030229659A1 (en) | 2002-06-08 | 2003-12-11 | Dror Halahmi | Bit exactness support in dual-MAC architecture |
US20100121898A1 (en) | 2008-11-10 | 2010-05-13 | Crossfield Technology LLC | Floating-point fused dot-product unit |
Also Published As
Publication number | Publication date |
---|---|
WO2012040666A3 (en) | 2012-07-19 |
US20130179661A1 (en) | 2013-07-11 |
US20140149717A1 (en) | 2014-05-29 |
US8683183B2 (en) | 2014-03-25 |
WO2012040666A2 (en) | 2012-03-29 |
TW201218070A (en) | 2012-05-01 |
CN103221916A (zh) | 2013-07-24 |
US20120079252A1 (en) | 2012-03-29 |
GB2497698B (en) | 2019-10-02 |
DE112011103213T5 (de) | 2013-08-01 |
GB201305501D0 (en) | 2013-05-08 |
US8478969B2 (en) | 2013-07-02 |
TWI528276B (zh) | 2016-04-01 |
CN103221916B (zh) | 2016-08-17 |
KR20130056905A (ko) | 2013-05-30 |
GB2497698A (en) | 2013-06-19 |
US9110655B2 (en) | 2015-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101515311B1 (ko) | 승산-승산-누산 명령 수행 | |
US11797302B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
RU2263947C2 (ru) | Целочисленное умножение высокого порядка с округлением и сдвигом в архитектуре с одним потоком команд и множеством потоков данных | |
KR101105527B1 (ko) | 내적 연산을 수행하기 위한 명령 및 논리 | |
US11816481B2 (en) | Generalized acceleration of matrix multiply accumulate operations | |
Thakkur et al. | Internet streaming SIMD extensions | |
US11188330B2 (en) | Vector multiply-add instruction | |
KR101009095B1 (ko) | 다목적 배정도 기능 유닛을 구비한 그래픽 프로세서 | |
Oberman et al. | AMD 3DNow! technology: Architecture and implementations | |
Raman et al. | Implementing streaming SIMD extensions on the Pentium III processor | |
JP5201641B2 (ja) | 重複オペランドを使用したsimdの内積演算 | |
KR20210086447A (ko) | 행렬 연산 가속기의 명령어들을 위한 장치들, 방법들, 및 시스템들 | |
US7580968B2 (en) | Processor with scaled sum-of-product instructions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20180328 Year of fee payment: 4 |
|
LAPS | Lapse due to unpaid annual fee |