KR20210028075A - 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 - Google Patents
범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 Download PDFInfo
- Publication number
- KR20210028075A KR20210028075A KR1020200077636A KR20200077636A KR20210028075A KR 20210028075 A KR20210028075 A KR 20210028075A KR 1020200077636 A KR1020200077636 A KR 1020200077636A KR 20200077636 A KR20200077636 A KR 20200077636A KR 20210028075 A KR20210028075 A KR 20210028075A
- Authority
- KR
- South Korea
- Prior art keywords
- entry
- range
- value
- entries
- processor
- Prior art date
Links
Images
Classifications
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/02—Digital function generators
- G06F1/03—Digital function generators working, at least partly, by table look-up
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/17—Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/552—Powers or roots, e.g. Pythagorean sums
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/556—Logarithmic or exponential functions
-
- 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
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/57—Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Nonlinear Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Logic Circuits (AREA)
- Power Sources (AREA)
- Executing Machine-Instructions (AREA)
- Complex Calculations (AREA)
Abstract
본 방법은, 복수의 엔트리를 저장― 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되며, 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하는 단계와, 부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제1 엔트리를 선택하는 단계와, 부동 소수점 입력 값에서 제1 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 출력 값을 계산하는 단계를 포함한다.
Description
본 개시물은 일반적으로 컴퓨터 개발 분야에 관한 것이며, 구체적으로는 데이터 처리에 관한 것이다.
프로세서는 입력으로서 하나의 인수를 취하여 출력을 생성하는 단항 함수(unary function)를 수행할 수 있다. 단항 함수로서는, 초월 함수(예컨대, tanh, log2, exp2, sigmoid), 무리 함수(예컨대, sqrt, 1/sqrt), 및 머신 러닝 및 신경망에 유용한 일반적인 유리 함수(예컨대, 1/x)를 예로 들 수 있다. 입력 값(x)에 대한 일부 단항 함수는 덧셈, 뺄셈, 및 곱셈과 같은 기본적인 수학적 연산을 사용해서는 용이하게 수행할 수 없다.
도 1은 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템을 예시한다.
도 2는 특정 실시형태들에 따른 단항 함수의 다수의 범위를 예시한다.
도 3은 특정 실시형태들에 따른 제1 산술 엔진을 예시한다.
도 4는 특정 실시형태들에 따른 제2 산술 엔진을 예시한다.
도 5는 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 제1 플로우를 예시한다.
도 6은 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 제2 플로우를 예시한다.
도 7은 특정 실시형태들에 따른 예시적인 필드-프로그램 가능 게이트 어레이(FPGA)를 예시한다.
도 8a는 특정 실시형태들에 따른 예시적인 순차적(in-order) 파이프라인 및 예시적인 레지스터 리네이밍(register renaming), 비순차적(out-of-order) 발행/실행 파이프라인을 모두 예시하는 블록도이다.
도 8b는 특정 실시형태들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시형태를 모두 예시하는 블록도이다.
도 9a 및 도 9b는 특정 실시형태들에 따른, 코어가 칩 내의 여러 논리 블록들(동일한 타입의 및/또는 상이한 타입의 다른 코어들을 잠재적으로 포함함) 중 하나인 보다 특정한 예시적인 순차적 코어 아키텍처의 블록도를 예시한다.
도 10은 특정 실시형태들에 따른, 하나 초과의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 또한 통합 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 11, 도 12, 도 13, 및 도 14는 특정 실시형태들에 따른 예시적인 컴퓨터 아키텍처들의 블록도들이다.
도 15는 특정 실시형태들에 따른 소스 명령어 세트의 이진 명령어를 타깃 명령어 세트의 이진 명령어로 변환하기 위한 소프트웨어 명령어 컨버터의 사용을 대조하는 블록도이다.
여러 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
도 2는 특정 실시형태들에 따른 단항 함수의 다수의 범위를 예시한다.
도 3은 특정 실시형태들에 따른 제1 산술 엔진을 예시한다.
도 4는 특정 실시형태들에 따른 제2 산술 엔진을 예시한다.
도 5는 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 제1 플로우를 예시한다.
도 6은 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 제2 플로우를 예시한다.
도 7은 특정 실시형태들에 따른 예시적인 필드-프로그램 가능 게이트 어레이(FPGA)를 예시한다.
도 8a는 특정 실시형태들에 따른 예시적인 순차적(in-order) 파이프라인 및 예시적인 레지스터 리네이밍(register renaming), 비순차적(out-of-order) 발행/실행 파이프라인을 모두 예시하는 블록도이다.
도 8b는 특정 실시형태들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시형태를 모두 예시하는 블록도이다.
도 9a 및 도 9b는 특정 실시형태들에 따른, 코어가 칩 내의 여러 논리 블록들(동일한 타입의 및/또는 상이한 타입의 다른 코어들을 잠재적으로 포함함) 중 하나인 보다 특정한 예시적인 순차적 코어 아키텍처의 블록도를 예시한다.
도 10은 특정 실시형태들에 따른, 하나 초과의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 또한 통합 그래픽을 가질 수 있는 프로세서의 블록도이다.
도 11, 도 12, 도 13, 및 도 14는 특정 실시형태들에 따른 예시적인 컴퓨터 아키텍처들의 블록도들이다.
도 15는 특정 실시형태들에 따른 소스 명령어 세트의 이진 명령어를 타깃 명령어 세트의 이진 명령어로 변환하기 위한 소프트웨어 명령어 컨버터의 사용을 대조하는 블록도이다.
여러 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
단항 함수는 전체적으로 또는 부분적으로 프로세서에 존재하는 룩업 테이블(lookup table: LUT)들로 실현될 수 있다. 일부 시스템에 있어서는, LUT가 사용자 정의된 함수를 구현하는 데 필요한 유연성을 제공할 수도 있다. 일부 프로세서는 명령 필드를 통해 선택 가능한 다수의 상이한 테이블 형식의 함수들(예컨대, 입력에 기초하여 룩업을 이용할 수 있는 함수들)을 제공할 수 있다. 최소 정밀도 단위(최종 자릿수)(unit of least precision: ULP)가 균일할 경우(예컨대, 함수에 제공된 모든 입력이 동일한 ULP를 가짐), LUT는 상대적으로 인덱싱하기 쉬울 수 있다. 예를 들어, LUT에 대한 인덱스는 단순히 우향-시프트된(right-shifted) 입력 값일 수 있으며, 함수에 대한 출력은 LUT 내의 해당 위치에 존재하는 값일 수 있거나 또는 선택된 값과 다음 값 사이의 선형 보간일 수 있다. 그러나, 입력으로서 부동-소수점(FP) 수(floating-point(FP) number)를 이용하는 프로세서에 있어서는, ULP가 균일하지 않으며, 테이블 형식의 함수를 구현하는 것이 훨씬 더 어려워진다. FP 입력에 대한 ULP의 가변적인 특성으로 인해, 입력의 단순한 우향-시프트는 일반적으로 LUT 인덱스를 결정하기 위한 실용적인 방법이 아니다.
본 개시물의 다양한 실시형태들은 입력으로서 FP 수를 갖는 단항 함수를 수행하기 위한 강력한 해법을 제공한다. 본 개시물의 특정 실시형태들에 있어서, 단항 함수는 입력에 대한 가능한 값들에 걸쳐 연속적으로 배열되는 일련의 멱급수 근사식(power series approximation)에 의해 구현된다. 예를 들어, 테이블 형식의 함수 결과는 멱급수(예컨대, a0 + a1x + a2x2 형식)의 평가에 의해 결정될 수 있으며, 여기서 x는 (잠재적으로 조작되는) 입력 값이고, a0, a1, 및 a2는 LUT로부터의 계수들이다. 특정 실시형태들에 있어서, 해당 계수들은 2-스테이지 프로세스에 의해 결정된다. 먼저, 입력 FP 값이 연속적인 범위들에 대하여 비교된다. 각각의 범위의 개시 값은 임의의 FP 수일 수 있지만, 특정 범위의 종료 값은 다음 범위의 개시 값보다 한 ULP 작은 FP 값이다. 다음으로, 일단 입력 값의 범위가 결정되면, 해당 범위 내의 입력 값의 오프셋에 기초하여 계수 세트(예컨대, a0, a1, 및 a2)가 선택된다(따라서, 상이한 범위들이 일련의 상이한 계수 세트들과 연관될 수 있고, 한 범위의 상이한 구간들이 상이한 계수 세트들과 연관될 수 있음). 범위마다의 계수 세트들의 수는 유연하며(예컨대, 0 내지 N이고, N은 임의의 적절한 정수임), 일부 실시형태에 있어서는, 해당 범위에 걸쳐 수치적으로 균일하게 분포될 수 있다(다만, 불균일한 분포도 가능함). 이어서, 계수 세트를 입력 값 x와 함께 사용하여 단항 함수의 결과를 계산한다. 아래에서 더 자세하게 설명되는 바와 같이, 일부 함수는, 계수를 이용하지 않는, 또는 그렇지 않으면 해당 함수의 특성에 기초하여 최적화된, 하나 이상의 범위를 가질 수 있다.
전술한 바와 같이, 단항 함수에 대한 입력은 FP 수일 수 있다. 임의의 적절한 FP 수가 다양한 실시형태들에서 사용될 수 있으며, 여기서 FP 수는 유효 숫자(significand)(가수(mantissa)라고도 함) 및 지수(exponent) 비트를 포함할 수 있다. FP 수는 부호 비트를 또한 포함할 수 있다. 다양한 실시예로서, FP 수는 미니플로트(minifloat) 포맷(예컨대, 8비트 포맷), 반-정밀도 부동 소수점 포맷(FP16), 브레인 부동 소수점(Brain Floating Point) 포맷(bfloat16), 단-정밀도 부동 소수점 포맷(FP32), 배-정밀도 부동 소수점 포맷(FP64), 또는 그 밖의 적절한 FP 포맷을 따를 수 있다.
도 1은 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템(100)을 예시한다. 묘사된 실시형태에 있어서, 시스템(100)은 매트릭스 처리 유닛(104)에 결합되는 중앙 처리 장치(CPU)(102)를 포함한다. 매트릭스 처리 유닛(104)은 메모리(106) 및 산술 엔진(108)을 포함한다(묘사된 실시형태에 있어서는, 메모리(106)가 산술 엔진 내에 있음). 메모리는 제어 레지스터(110) 및 룩업 테이블(112)을 포함한다. 산술 엔진(108)은 제어 레지스터(110)의 구성에 따라 룩업 테이블(112)에 액세스하여 범위-특정 계수를 취득하고 단항 함수를 수행하도록 동작 가능하다. 다양한 실시형태들에 있어서, CPU(102)는 코드를 실행하고 명령 및 입력을 매트릭스 처리 유닛(104)에 송신할 수 있으며, 해당 매트릭스 처리 유닛은 명령을 수행하여 결과를 CPU(102)에 회신할 수 있다. 다양한 실시형태들에 있어서, CPU(102)는 매트릭스 처리 유닛(104)에 의한 단항 함수의 수행을 요청할 수 있고 해당 요청이 매트릭스 처리 유닛(104)에 의해 산술 엔진(108)에 전달될 수 있거나, 또는 CPU(102)는 일부 다른 연산을 요청할 수 있고 매트릭스 처리 유닛(104)은 요청된 연산을 실행하기 위해 단항 함수가 수행되어야 한다고 판정할 수 있고 산술 엔진(108)에게 단항 함수를 수행하라고 지시할 수 있다. 다양한 실시형태들에 있어서, 시스템(100)은 사용자가 임의의 적절한 인터페이스를 통해 함수를 정의하도록 제어 레지스터(110)를 프로그래밍하게 할 수 있다.
프로세서(100)가 특정 실시형태를 묘사하지만, 다른 실시형태들이 본 명세서에서 고려된다. 예를 들어, 일부 실시형태들에 있어서, 산술 엔진(108)이 매트릭스 처리 유닛에 포함되는 것이 아니라, 상이한 타입의 프로세서(예컨대, CPU(102) 또는 다른 프로세서)에 포함된다.
시스템(100)의 프로세서들(예컨대, CPU(102), 매트릭스 처리 유닛(104), 또는 산술 엔진(108)을 포함하는 다른 프로세서) 각각은 마이크로프로세서, 내장형 프로세서, 디지털 신호 프로세서(DSP), 네트워크 프로세서, 핸드헬드 프로세서, 애플리케이션 프로세서, 코-프로세서, 시스템-온-칩(SOC), 또는 코드(즉, 소프트웨어 명령어)를 실행하고/실행하거나 다른 처리 연산을 수행하는 다른 장치를 포함할 수 있다.
CPU(102)는 하나 이상의 처리 요소(예컨대, 코어)를 포함할 수 있다. 일 실시형태에 있어서, 처리 요소는 소프트웨어 스레드를 지원하는 회로를 의미한다. 하드웨어 처리 요소로서는, 스레드 유닛, 스레드 슬롯, 스레드, 처리 유닛, 콘텍스트, 콘텍스트 유닛, 논리적 프로세서, 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍처 상태와 같은 프로세서에 대한 상태를 유지할 수 있는 임의의 다른 요소를 예로 들 수 있다. 다시 말해, 일 실시형태에 있어서, 처리 요소는 소프트웨어 스레드, 운영 체제, 애플리케이션, 또는 그 밖의 코드와 같은 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 의미한다.
코어는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로에 위치하는 로직부를 의미할 수 있고, 각각 독립적으로 유지된 아키텍처 상태는 적어도 일부 전용 실행 리소스와 연관된다. 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로에 위치되는 임의의 로직부를 의미할 수 있고, 독립적으로 유지된 아키텍처 상태는 실행 리소스에 대한 액세스를 공유한다. 알 수 있듯이, 특정 리소스들이 공유되고 다른 리소스들이 아키텍처 상태에 대하여 전용일 경우, 하드웨어 스레드 및 코어의 표기 사이의 선이 겹친다. 그러나, 종종, 코어 및 하드웨어 스레드는 운영 체제에 의해 개별적인 논리적 프로세서로서 간주되고, 운영 체제는 각각의 논리적 프로세서에서 연산을 개별적으로 스케줄링할 수 있다.
다양한 실시형태들에 있어서, 프로세서에 포함될 수 있는 처리 요소는 하나 이상의 산술 논리 유닛(ALU), 부동 소수점 유닛(FPU), 캐시, 명령 파이프라인, 인터럽트 처리 하드웨어, 레지스터, 또는 처리 요소의 동작을 용이하게 하기 위한 그 밖의 하드웨어를 또한 포함할 수 있다.
매트릭스 처리 유닛(104)은 (예컨대, 딥 러닝 애플리케이션을 위해) 매트릭스와 연관되는 계산을 가속화하는 기능을 수행하는 회로를 포함할 수 있다. 다양한 실시형태들에 있어서, 매트릭스 처리 유닛(104)은 벡터-벡터 연산, 매트릭스-벡터 연산, 및 매트릭스-매트릭스 연산 중 하나 이상을 수행할 수 있다. 특정 실시형태들에 있어서, 매트릭스 처리 유닛(104)은 곱셈 및 나눗셈, 덧셈 및 뺄셈, 논리적 연산자(예컨대, |, &, ^, ~), 산술 및 논리적 시프트, 비교 연산자(>, <, ==, !=), 난수 생성, 및 프로그램 가능 함수 중 하나 이상과 같이, 매트릭스에 대한 원소별(element-wise) 연산을 수행할 수 있다. 일부 실시형태에 있어서, 매트릭스 처리 유닛(104)은 또한 행/열/매트릭스에서의 최대 값 및 인덱스, 행/열/매트릭스에서의 최소 값 및 인덱스, 및 행/열/매트릭스에 걸친 가산 중 하나 이상과 같이, 매트릭스의 원소들에 걸친 연산을 수행할 수 있다.
산술 엔진(108)은 하나 이상의 단항 함수를 수행하는 회로를 포함한다. 다양한 실시형태들에 있어서, 산술 엔진(108)은 이진 함수(예컨대, 2개의 입력에 기초하여 연산을 수행하는 함수)를 수행하도록 동작 가능할 수도 있다. 특정 실시형태에 있어서, 산술 엔진(108)은 매트릭스 처리 유닛(104)에 의한 매트릭스 곱셈 이전의 입력 데이터에 대한 이진 함수, 뿐만 아니라 매트릭스 곱셈이 수행된 이후의 출력 데이터에 대한 이진 함수 및 단항 함수를 수행하도록 동작 가능하다. 특정 실시형태에 있어서, 산술 엔진은 사이클마다 32개의 bfloat16 원소 또는 16개의 FP32 원소를 처리할 수 있지만, 다른 실시형태들에 있어서는, 산술 엔진이 사이클마다 다른 수의 원소를 처리하도록 조정될 수 있다.
산술 엔진(108)은 메모리(106)를 포함할 수 있다. 다른 실시형태들에 있어서, 산술 엔진(108)은 산술 엔진(108)의 일부가 아닌 메모리(106)에 액세스할 수 있다. 메모리(106)는 임의의 비휘발성 메모리 및/또는 휘발성 메모리를 포함할 수 있다. 메모리(106)는 임의의 적절한 타입의 메모리를 포함할 수 있으며, 다양한 실시형태들에 있어서 특정 속도, 기술, 또는 메모리의 폼 팩터로 제한되지 않는다. 묘사된 실시형태에 있어서, 메모리(106)는 제어 레지스터(110) 및 룩업 테이블(112)을 포함한다. 다른 실시형태들에 있어서, 제어 레지스터(110) 및 룩업 테이블(112)은 별개의 메모리에 저장될 수 있다.
룩업 테이블(112)은 하나 이상의 단항 함수에 대한 계수 세트를 포함할 수 있다. 예를 들어, 제1 단항 함수의 경우, 룩업 테이블(112)은 복수의 테이블 엔트리를 포함할 수 있고, 각각의 엔트리는 제1 단항 함수에 대한 입력 값 범위의 각각의 부분에 대한 계수들을 포함한다. 따라서, 제1 단항 함수에 대한 제1 테이블 엔트리는 해당 함수에 대한 입력 값이 제1 입력 값 범위의 제1 부분 내에 있을 경우에 사용될 계수 세트를 포함할 수 있고, 제1 단항 함수에 대한 제2 엔트리는 해당 함수에 대한 입력 값이 제1 입력 값 범위의 제2 부분 내에 있을 경우에 사용될 상이한 계수 세트를 포함할 수 있는 등이다. 유사하게, 룩업 테이블(112)은 제1 함수의 제2 범위에 대한 별개의 일련의 계수 세트, 제1 함수의 제3 범위에 대한 다른 일련의 계수 세트 등을 포함할 수 있다. 유사하게, 룩업 테이블(112)은 다른 함수들에 대한 별개의 일련의 계수 세트들을 포함할 수 있다. 다양한 실시형태들에 있어서, 엔트리는 압축 계수 또는 비-압축 계수를 저장할 수 있다.
해당 계수들은 입력 값에 기초하여 단항 함수의 출력 값을 계산하는 데 사용되는 멱급수를 정의하기 위해 사용될 수 있다. 특정 실시형태에 있어서, 멱급수는 a0 + a1x + a2x2 형식을 취하고, 여기서 x는 입력 값이고, a0, a1, 및 a2는 룩업 테이블(112)로부터 검색되는 계수 세트이다. 다른 실시형태들에 있어서는, 상이한 멱급수가 사용될 수 있다. 예를 들어, 멱급수는 a0 + a1x + a2x2 + a3x3 형식을 취할 수 있다. 출력을 계산하는 데 필요한 추가적인 로직부 뿐만 아니라 룩업 테이블(112)에 저장될 증가된 수의 계수로 인해 산술 엔진(108)의 점유 공간이 증가하지만, 더 높은 차수를 갖는 유사한 멱급수가 사용될 수 있다.
룩업 테이블에 저장되는 범위들 및 상응하는 엔트리들의 수는 단항 함수의 복잡성에 따라 달라질 수 있다. 예를 들어, 고도로 최적화된 함수는 매우 적은 엔트리(예컨대, 16개 이하의 계수 세트)를 소비할 수 있는 반면, 곡선 및 비대칭 함수(예컨대, S 형상)는 훨씬 더 많은 엔트리(예컨대, 약 90개의 계수 세트)를 이용할 수 있다.
도 2는 특정 실시형태들에 따른 단항 함수 tanh의 복수의 범위를 예시한다. 일부 실시형태에 있어서, 묘사된 범위들(202, 204, 206, 208, 및 210)은 각각 하나 이상의 계수 세트와 연관될 수 있다(여기서, 해당 범위들은 각각 임의의 적절한 수의 계수 세트를 이용할 수 있으며 상이한 범위들은 상이한 수의 계수 세트를 가질 수 있음). 구역의 각 구간(여기서, 구간은 2개의 얇은 수직선 사이에 있는 입력 값들을 포함하는 영역으로 묘사됨)은 상이한 계수 세트에 의해 규정될 수 있다. 다양한 실시형태들에 있어서, 한 범위 내의 구간들은 크기가 동일하다. 예를 들어, 하나의 계수 세트는 -2.0 내지 -1.8의 x 값에 적용될 수 있고, 다음 계수 세트는 -1.8 내지 -1.6의 x 값에 적용될 수 있는 등이다.
일반적으로, 샘플링 밀도(즉, 입력 값 구역의 단위 당 계수 세트의 수)는 비-선형성이 높은 범위에 대하여 더 높다. 따라서, 범위(204) 및 범위(208)에 대하여 사용되는 계수 세트의 수는 다른 범위들에 대하여 사용되는 계수 세트의 수보다 훨씬 높다. 범위(202)가 -1에 대하여 점근적(asymptotic)(즉, 범위의 입력 값들에 걸쳐 -1의 일정한 출력 값을 가짐)이기 때문에, 이 전체 범위는 a0 = -1, a1 = 0, 및 a2 = 0인 단일의 계수 세트를 이용할 수 있다(a0 + a1x + a2x2 형식의 멱급수를 가정함). 유사하게, 범위(210)가 1에 대하여 점근적이기 때문에, 또한 이 전체 범위는 a0 = 1, a1 = 0, 및 a2 = 0인 단일의 계수 세트를 이용할 수 있다. 범위(206)는 선형이므로, 이 또한 a0 = 0, a1 = 1, 및 a2 = 0인 단일의 계수 세트를 이용할 수 있으며, 이 범위에서는 출력 방정식이 단순히 x이다(즉, 출력이 입력과 같음).
도 2에 묘사된 범위들은 단지 예시일뿐이다. 다른 구현예들에 있어서는, 단항 함수가 더 많거나 적은 구역들로 분할될 수 있다. 후술되는 바와 같이, 저장된 계수의 수를 줄이기 위해 추가적인 최적화가 이루어질 수 있다. 예를 들어, tanh 함수가 원점에 대하여 대칭이기 때문에, 범위(208)에 대한 계수 세트는 범위(204)에 대하여 (적절한 부호 변경으로) 재사용될 수 있고, 그에 따라 범위(204)에 속하는 입력 값이 범위(208)와 연관되는 계수 세트의 룩업이 될 수 있다. 다른 실시예로서, 출력 값이 일정한 구역(예컨대, 202 및 210) 또는 출력 값이 입력 값과 동일한 구역(예컨대, 206)의 경우, 범위는 출력 값을 지정하는 모드와 연관될 수 있으며, 해당 범위 내의 입력에서 함수가 평가될 경우에는 룩업 테이블(112)에 액세스할 필요가 없다. 따라서, 이러한 구역들은 연관된 계수 세트를 저장하지 않고 구현될 수 있다. 대안으로서, 이러한 구역들은 계수 세트를 이용하는 상기 실시예에 따라 구현될 수 있다.
다시 도 1을 참조하면, 메모리(106)는 복수의 제어 레지스터(110)를 또한 포함한다. 이들 제어 레지스터는 산술 엔진(108)에 의해 구현되는 단항 함수들 각각에 대한 연산을 정의한다. 가능한 제어 레지스터의 실시예들이 아래에서 정의되지만, 본 개시물은 본 명세서에서 설명되는 기능을 구현하는 아래의 또는 다른 제어 레지스터들의 임의의 적절한 변형을 포함한다. 각각의 레지스터에 대한 실제 비트 수는 구체적인 구현예에 따라 달라질 수 있다. 특정 실시형태에 있어서, 구현된 각각의 함수는 해당 함수에 대하여 전용인 각각의 레지스터 세트와 연관된다.
이네이블 레지스터(Enable Register) ― 이 레지스터는 함수를 활성화하도록 설정될 수 있다. 특정 실시형태에 있어서, 이 레지스터가 설정되지 않고 함수를 실행하기 위한 요청이 수신될 경우, 출력 값은 NaN(not a number)으로 설정된다.
범위 수 레지스터(Number of Ranges Register) ― 이 레지스터는 함수에 대하여 활성화되는 범위 수를 정의한다. 범위 수가 8로 제한될 경우 이 레지스터에 대하여 3비트가 사용될 수 있지만, 다른 실시형태들은 더 많거나 적은 범위를 허용할 수 있다. 함수가 활성화되면, 적어도 하나의 범위가 유효해진다. 각각의 함수는 연관된 범위 수 레지스터(Number of Ranges Register)를 가질 수 있다.
범위 모드 레지스터(Range Mode Register) ― 이 레지스터는 범위의 모드를 지정하므로 이 레지스터가 복수 존재할 수 있으며, 각각의 레지스터는 함수에 대하여 상이한 범위에 대응한다. 특정 실시형태에 있어서, 선택에 이용 가능한 모드들은 룩업(lookup) 모드, 상수(constant) 모드, 및 아이덴티티(identity) 모드이다. 룩업 모드는, 테이블 룩업이 수행되어야 하고 결과적인 멱급수가 함수의 출력을 생성하도록 계산되어야 한다고 지정한다. 아이덴티티 모드는, 출력 값이 입력 값과 동일해야 한다(그에 따라 룩업이 수행될 필요가 없음)고 지정한다. 상수 모드는, 특정 상수(제어 레지스터(110)들 또는 그 밖의 로컬(locale) 중 하나에 저장될 수 있음)가 출력 값으로서 반환되어야 한다(그에 따라 룩업이 수행될 필요가 없음)고 지정한다.
개시 값 레지스터(Start Value Register) ― 이 레지스터는 범위의 개시 값(예컨대, 포괄적일 수 있음)을 지정하고, 여기서 개시 값은 해당 범위 내의 최저 입력 값 x이다. 이 레지스터는 복수 존재할 수 있고, 각각의 레지스터는 해당 함수에 대하여 상이한 범위에 대응한다. 특정 실시형태에 있어서, 개시 값은 FP32 포맷이지만, 본 명세서에서 또는 다른 어느 곳에서 설명되는 다른 포맷들이 사용될 수 있다. 개시 값 레지스터(Start Value Register)는 입력 값이 어느 범위에 속하는지에 대한 결정을 가능하게 할 수 있다(예컨대, FP 입력 값은 어느 범위가 입력 값을 포함하는지를 결정하기 위해 다양한 개시 값들과 비교될 수 있음).
기준 어드레스 레지스터(Base Address Register) ― 이 레지스터는 특정 범위에 할당된 룩업 테이블의 테이블 엔트리들의 기준 어드레스를 지정한다. 따라서, 이 레지스터는 복수 존재할 수 있고, 각각의 레지스터는 해당 함수에 대하여 상이한 범위에 대응한다. 기준 어드레스는 상응하는 계수 세트를 포함하는 관련 테이블 엔트리의 어드레스를 결정하기 위해 해당 범위 내의 입력 값의 위치와 함께 사용될 수 있다.
오프셋 값 레지스터(Offset Value Register) ― 이 레지스터는 해당 범위 내의 입력 값의 오프셋을 도출하는 데 사용되는 오프셋 값(예컨대, 사용자에 의해 제공되는 사전에 계산된 정수 값)을 저장한다. 실시형태에 있어서, 사전에 계산된 정수 값은 해당 범위 내의 입력 값의 오프셋을 결정하기 위해 입력 값으로부터 감산될 수 있다. 따라서, 오프셋 값은 정수 포맷의 범위의 개시일 수 있다. 이 레지스터는 복수 존재할 수 있고, 각각의 레지스터는 해당 함수에 대하여 상이한 범위에 대응한다. 특정 실시형태에 있어서, 범위가 상수 모드로 설정될 경우, 상수(또는 상수에 대한 지시자)는 오프셋 값을 대신하여 오프셋 값 레지스터에 저장될 수 있다.
지수 스팬 레지스터(Exponent Span Register) ― 이 레지스터는 해당 범위의 지수 "스팬(span)"을 나타내는 값(예컨대, 경우에 따라 범위가 다수의 지수에 걸쳐있을 수 있기 때문에, 해당 범위에 속하는 입력 값들 중 가능한 최대 지수 값)을 저장한다. 함수가 감소 연산을 이용할 경우, 입력이 룩업에 앞서 1과 2 사이의 수로 정규화되기 때문에, 이 값은 0일 수 있다. 지수 스팬 레지스터에 저장되는 값은, 입력 값들이 상이한 지수 값들을 가지는지의 여부와 관계없이, 오프셋 값(정수일 수 있음)이 입력 값들 중 어느 하나에 적용될 수 있도록 해당 범위 내의 입력 값들이 동일한 지수로 변환되는 것을 허용할 수 있다. 이 레지스터는 복수 존재할 수 있고, 각각의 레지스터는 해당 함수에 대하여 상이한 범위에 대응한다.
시프트 레지스터(Shift Register) ― 이 레지스터는 범위 내의 입력 값의 오프셋에 적용되는 시프트량을 나타내는 값(예컨대, 입력 값에서 오프셋 값을 차감하여 얻어지는 값)을 저장한다. 일부 실시형태에 있어서, 이 값은 사용자에 의해 제공될 수 있다. 특정 실시형태에 있어서, 이 값은 해당 범위 내의 계수 세트의 수에 기초한다. 예를 들어, 시프트 레지스터(Shift Register)에 기록되는 값은, 2z가 해당 범위 내의 계수 세트의 수를 나타내고 실제 시프트량이 다른 수 y에서 z를 차감함으로써 결정될 경우, z일 수 있다(예컨대, 가수 또는 정규화된 가수를 나타내는 비트 수를 나타냄). 이 레지스터는 복수 존재할 수 있고, 각각의 레지스터는 해당 함수에 대하여 상이한 범위에 대응한다.
대칭 모드 레지스터(Symmetry Mode Register) ― 이 레지스터는 함수의 대칭성을 지정한다. 예를 들어, 대칭 모드는 없음(none), y-축선(y-axis), 또는 원점(origin)일 수 있다. 일부 단항 함수(예컨대, 일부 딥 러닝 함수)는 대칭성을 가지므로, 상응하는 음의 범위 및 양의 범위에 대한 계수 세트를 저장하는 대신, 단일의 일련의 세트가 두 범위에 대하여 저장될 수 있다. 대칭 모드가 없음일 경우, 대칭 최적화는 적용되지 않는다. 대칭 모드가 y-축선일 경우, 함수는 입력 값의 절대값을 사용해서 평가될 수 있다. 대칭 모드가 원점일 경우, 함수는 입력 값의 절대값을 사용해서 평가될 수 있고, 원래의 입력이 음이었을 경우에는 출력의 부호가 반대로 되어 최종 출력을 생성한다. 각각의 함수는 자체의 대칭 모드 레지스터(Symmetry Mode Register)를 가질 수 있다.
특정 실시형태에 있어서, 이 레지스터(또는 다른 레지스터)에서의 값은 함수에 대하여 일부 다른 사용자 정의 모드(custom mode)를 지정할 수 있다. 예를 들어, neg_as_nan 모드는, 입력 값이 음일 경우, 룩업이 수행되지 않아야 하되, NaN이 출력으로서 반환되어야 한다고 지정할 수 있다(예컨대, 이러한 모드는 함수가 sqrt(x)이거나 음수에 대해서는 연산하지 않는 다른 함수일 경우에 유용할 수 있음).
특수 사례 레지스터(Special Case Registers) ― 이 레지스터는 함수에 대하여 특정 입력 값이 수신될 경우(예컨대, 정확히 0, +무한대, 또는 -무한대) 특수 사례 처리가 적용되어야 하는지의 여부를 지정할 수 있다. 예를 들어, 특정 입력 값의 경우, 특수 사례 레지스터는 특수 처리가 적용되지 않는다는 것 또는 룩업을 수행하지 않고 캐시된 미리 정의된 상수가 출력 값으로서 반환되어야 한다는 것을 지정할 수 있다. 대안으로서, 특수 사례 레지스터는 NaN이 반환되어야 한다고 지정할 수 있다(예컨대, 함수가 역수 연산이고 입력이 0일 경우).
함수 모드 레지스터(Function Mode Register) ― 함수-특정 최적화를 지정한다(해당되는 경우). 예를 들어, 잘 알려진 일부 함수(예컨대, sqrt(x), 1/x, 1/sqrt(x), log2(x), 2x)의 경우, 결과의 지수(또는 그것과 매우 가까운 값)는 상당히 사소한 추가 논리(예컨대, 8-비트 정수 가산)로 알고리즘적으로 도출될 수 있다. 이러한 경우, 룩업 연산 및 멱급수 계산은 입력 가수(그에 따라, 입력 값이 감소 연산을 통해 1과 2 사이의 값으로 감소될 수 있음) 또는 함수에 필요한 룩업 테이블 엔트리의 수를 극적으로 감소시킬 수 있는 입력 값의 다른 부분을 포함하도록 제한될 수 있다. 일부 상황에 있어서, 함수 모드는 제어 레지스터를 통해 지정되는 다른 모드들보다 우선한다(예컨대, 함수 1/x의 경우, 대칭 모드는 대칭 모드의 설정에 관계없이 원점으로 강제될 수 있음). 함수-특정 최적화의 연산을 도 4와 관련하여 보다 상세하게 설명할 것이다.
압축 모드 레지스터(Compression Mode Register) ― 이 레지스터는 룩업 테이블 엔트리에 대한 압축 해제 알고리즘을 지정한다(룩업 테이블에서 계수들이 압축될 경우). 특정 실시형태에 있어서, 2가지 압축 모드가 사용된다. 제1 압축 모드는 계수들의 범위에 제한을 두되, 정확한 출력을 생성하는 반면, 제2 압축 모드는 계수들의 범위를 제한하지 않고, 그에 따라 덜 정확한 출력을 대가로, 부동 소수점 입력의 전체 범위를 허용한다. 특정 실시형태에 있어서, 룩업 테이블의 각각의 엔트리는 지정된 압축 해제 알고리즘에 따라 (예컨대, 64 비트에서 96 비트로) 압축 해제된 3가지 계수에 대한 데이터를 포함한다.
도 3은 특정 실시형태들에 따른 산술 엔진(300)을 묘사한다. 산술 엔진(300)은 산술 엔진(108)의 특성들 중 어느 하나의 특성을 포함할 수 있으며, 그 반대도 마찬가지이다. 묘사된 실시형태에 있어서, 산술 엔진(300)은 두 스테이지의 융합된 승산-가산기(FMA)(302 및 304)를 포함한다. 각각의 스테이지는 N개의 FMA를 갖고, 여기서 N은 임의의 적절한 정수이고, 각각의 FMA는 별개의 입력 값 x에 대하여 연산할 수 있고(예컨대, 벡터 또는 매트릭스의 원소), 그에 따라 N개의 독립적인 LUT들이 병렬적으로 처리될 수 있다(예컨대, 단일 명령 다중 데이터(SIMD) 방법을 통해).
묘사된 실시형태에 있어서, 구현된 멱급수는 a0 + a1x + a2x2의 형식으로 되며, 이는 도시된 결과 (a0 + (a1 + a2x)*x)와 등가이다. LUT 계수(306)는 룩업 테이블(112)로부터 취득된다. 입력 x 및 계수 a1 + a2는 제1 스테이지에 제공되어 중간 결과 (a1 + a2x)를 생성한다. 이어서, 이 중간 결과는 입력 x 및 계수 a0과 함께 제2 스테이지에 제공되어 최종 결과를 생성한다.
특정 실시형태가 묘사되어 있지만, 다른 실시형태들이 멱급수 결과를 계산하기 위한 임의의 다른 적절한 회로를 포함할 수 있다. 예를 들어, FMA 이외의 회로가 사용될 수 있다. 상기에 시사된 바와 같이, 다른 실시형태들이 상이한 멱급수를 평가할 수 있다. 예를 들어, 다른 FMA 스테이지가 산술 엔진(300)에 추가되어 멱급수 a0 + a1x + a2x2 + a3x3을 평가할 수 있다. 일반적으로, N개의 FMA 스테이지를 포함하는 산술 엔진(108)은 멱급수에 따른 출력 값을 N의 거듭제곱으로 계산할 수 있다.
도 4는 특정 실시형태들에 따른 산술 엔진(400)을 예시한다. 산술 엔진(400)은 산술 엔진(108)의 특성들 중 어느 하나의 특성을 포함할 수 있으며, 그 반대도 마찬가지이다. 묘사된 산술 엔진(400)은 단항 엔진(402) 및 이진 엔진(404)을 포함한다. 다양한 실시형태들에 있어서, 단항 엔진(402)은 단항 함수 수행 전용의 회로를 포함할 수 있는 반면, 이진 엔진(404)은 단항 함수 뿐만 아니라 이진 함수를 지원할 수 있는 회로를 포함할 수 있다(도시되어 있지 않지만, 이진 함수의 수행시에는, 단-정밀도(SP) FMA(406 및 408)에 대한 입력들이 다른 입력들에 결합될 수도 있음). 다른 실시형태들에 있어서, 도시된 컴포넌트들은 임의의 적절한 산술 엔진 또는 다른 시스템 또는 장치 내에 포함될 수 있다(예컨대, 이진 엔진(404) 내에 도시된 컴포넌트들은 반드시 이진 엔진에 포함될 필요는 없음).
실시형태에 있어서, 단항 엔진(402)은 계수(이 실시형태에서는 a0, a1, 및 a2)를 생성하고 전술한 제어 레지스터에 의해 지정되는 최적화를 수행할 수 있다. 묘사된 실시형태에 있어서, 단항 엔진(402)은 룩업 테이블(410)(룩업 테이블(112)의 임의의 특성을 가질 수 있음)을 포함할 수 있다. 도시되어 있지 않지만, 단항 엔진(402)은 제어 레지스터(예컨대, 제어 레지스터(110)들 중 어느 하나)를 또한 포함할 수 있다.
묘사된 실시형태에 있어서, 단항 엔진(402)은 제어 모듈(412)을 또한 포함한다. 제어 모듈(412)은 입력 값 x 및 x에 대하여 수행될 단항 함수의 지시(indication)를 수신할 수 있다. 제어 모듈(412)은 입력을 어떻게 처리할지를 결정하기 위해 제어 레지스터(csr)에 액세스할 수 있다. 예를 들어, 제어 모듈(412)은 입력 값이 어느 범위에 대응하는지를 결정할 수 있다(예컨대, 입력 값을 단항 함수와 연관되는 하나 이상의 개시 값 레지스터(Start Value Register)와 비교하는 것에 의함). 제어 모듈(412)은 또한 범위-특정 거동을 결정할 수 있다. 예를 들어, 제어 모듈(412)은 룩업이 수행되어야 하는지의 여부를 결정할 수 있다. 룩업이 수행되어야 하면, 제어 모듈(412)은 입력 값 x 및 제어 레지스터에서 이용 가능한 정보에 기초하여 LUT(410)로의 어드레스("테이블 인덱스(table index)"로 묘사됨)를 계산한다. 이 어드레스는 LUT(410)에 전달되고, LUT(410)로부터 상응하는 계수들이 검색된다. 제어 모듈(412)은 또한 룩업이 수행되지 않을 경우(예컨대, 입력이 단일 출력을 갖는 범위에 속할 경우) 상수 또는 다른 값(예컨대, NaN)을 검색하도록 동작하거나 또는 제어 레지스터가 해당 범위에 대한 아이덴티티 모드를 지정할 경우 입력 값을 출력하도록 (또는 후처리 모듈(414)에게 그와 같이 행하게끔 지시하도록) 동작할 수 있다.
일부 실시형태에 있어서, 제어 모듈(412)은 감소 연산이 수행되어야 하는지의 여부를 결정할 수 있다. 예를 들어, 전술한 바와 같이, 일부 함수의 경우 결과의 지수가 용이하게 계산될 수 있고, 그에 따라 멱급수는 전체 입력 값이 아니라 입력 값의 가수(또는 입력 값의 다른 감소된 부분)에 대하여 간단히 연산할 수 있다. 제어 모듈(412)이 감소 연산이 수행되어야 한다고 판정할 경우, 제어 모듈(412)은 입력 값으로부터 감소된 값(예컨대, 가수)을 추출하고 감소된 값을 x'로서 출력할 수 있다. 또한, 지수(예컨대, 입력 x의 실제 지수 또는 입력 x를, 예컨대 1과 2 사이의 값으로 감소시키기 위해 입력 x에 적용되는 승수에 기초한 지수) 및 입력의 부호는 제어 모듈(412)에 의해 "사이드밴드 데이터(sideband data)"로서 출력될 수 있다. 일부 실시형태에 있어서, 사이드밴드 데이터는 또한, 후처리 모듈(414)이 최종 지수 및 부호를 계산할 수 있게 하는 임의의 적절한 정보(예컨대, 단항 함수의 지시 또는 지수 및/또는 부호에 대하여 수행될 연산의 지시)를 포함할 수 있다. 일부 실시형태에 있어서, 사이드밴드 데이터는 출력이 특정 값(예컨대, 함수가 제곱근이고 입력 값이 음인 경우와 같이, 출력이 유효하지 않을 경우의 NaN)으로 변환되어야 한다고 지시하는 정보를 포함할 수 있다.
제어 모듈(412)이 감소 연산이 수행되지 않아야 한다고 판정할 경우, 제어 모듈(412)은 입력 값 x를 x'로서 출력할 수 있다(또한, 사이드밴드 데이터는 생략될 수 있거나 또는 사이드밴드 데이터가 존재하지 않음을 지시하는 값으로 설정될 수 있음).
FMA(406 및 408)는, x'가 실제 입력 값인지 또는 감소된 입력 값인지의 여부와 관계없이, FMA(302 및 304)에 대하여 전술한 것과 유사한 방식으로 동작할 수 있다. FMA(406 및 408)가 단-정밀도 FMA로서 예시되어 있지만, FMA들은 임의의 적절한 수 포맷을 연산하도록 구성될 수 있다. FMA(408)의 출력은, 산술 엔진(400)에 의해 최종 출력 값이 출력되기 전에 임의의 처리가 수행되도록 후처리 모듈(414)에 제공될 수 있다.
다양한 실시형태에 있어서, 산술 엔진(400)은 복수의 상이한 입력 포맷에 대한 단항 함수를 수행할 수 있다. 예를 들어, 더 짧은 포맷(예컨대, bfloat16)을 갖는 입력 값에 대한 연산을 할 경우, 입력 값은 더 긴 포맷(예컨대, FP32)으로 변환되지 않을 수 있고, 입력 값이 더 긴 포맷에 도달할 때와 동일한 회로 FMA들이 사용될 수 있다. 더 짧은 포맷이 출력에 적합하면, 산술 엔진(400)은 (예컨대, 후처리 모듈(414)을 통해) 결과를 즉각적으로 다운컨버팅할 수 있다.
다양한 실시형태에 있어서, 비정규화 수(denormal) 및 NaN은 임의의 적절한 방식으로 산술 엔진에 의해 처리될 수 있다. 예를 들어, 비정규화 입력 값은 처리에 앞서 0(예컨대, +0)으로 변환될 수 있고 비정규화 범위에서의 최종 결과는 부호가 붙은 0으로 플러시(flush)될 수 있다(선택된 범위가 상수 모드에 있고 상수가 비정규화 값으로 프로그래밍되었을 경우는 제외). 다른 실시예로서, 입력 NaN 값은 필요에 따라 비신호 값(quiet)으로 되어 결과에 전파될 수 있다. 실제 미정의(indefinite) 타입의 비신호 NaN은 다양한 무효한 처리 사례(예컨대, 입력 값이 어떠한 정의된 범위 부분에도 속하지 않았을 경우)에 대하여 생성될 수 있다.
도 5는 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 플로우(500)를 예시한다. 다양한 실시형태들에 있어서, 플로우는 산술 엔진(108) 및/또는 회로를 포함하는 다른 적절한 로직부에 의해 수행될 수 있다.
502에서, 함수의 ID 및 입력 값이 수신된다. 504에서, 특수 사례가 입력 값에 적용되는지의 여부에 대한 결정이 이루어진다. 예를 들어, 레지스터는 입력 값이 특수 사례가 적용되는 값(예컨대, 정확히 0, +무한대, 또는 -무한대)과 일치하는지를 확인하도록 검사될 수 있다. 특수 사례가 적용되면, 506에서 상응하는 특수 값이 출력되고 플로우가 종료된다. 특수 사례가 적용되지 않으면, 플로우가 508로 이동한다.
508에서, 입력 값에 감소가 적용되어야 하는지의 여부에 대한 결정이 이루어진다. 감소가 적용되어야 하면, 510에서 입력 값이 감소된다. 특정 실시형태에 있어서, 이는 입력 값의 가수를 추출하는 것 및 입력 값의 지수 및 부호를 후속 처리를 위해 사이드밴드 데이터에 위치시키는 것을 수반한다. 감소 이후에(또는 감소가 수행될 필요가 없는 경우에), 플로우는 512로 이동한다.
512에서, 함수의 범위가 입력 값에 기초하여 식별된다. 514에서, 식별된 범위의 모드가 결정된다. 모드가 아이덴티티 모드이면, 516에서 입력 값이 출력되고 플로우가 종료된다. 모드가 상수 모드이면, 518에서 연관된 상수가 검색되어 출력되고 플로우가 종료된다.
모드가 룩업 모드이면, 520에서 룩업이 수행된다. 이는 범위의 개시 어드레스 및 해당 범위 내의 입력 값의 오프셋에 기초하여 룩업 테이블의 어드레스를 결정하는 것을 포함할 수 있다. 룩업은 계수 세트를 반환할 수 있다. 522에서, 계수에 의해 정의되는 멱급수가 입력 값에 대하여 계산된다. 524에서 결과가 출력되고 플로우가 종료된다.
도 6은 특정 실시형태들에 따른 범위-특정 계수 세트를 사용하여 단항 함수를 수행하기 위한 플로우(600)를 예시한다. 602는 복수의 엔트리를 저장하는 것을 포함하고, 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되며, 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함한다. 604는 부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제1 엔트리를 선택하는 것을 포함한다. 606은 부동 소수점 입력 값에서 제1 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 출력 값을 계산하는 것을 포함한다.
도 2 내지 도 6에서 설명되는 플로우들은 단지 특정 실시형태들에서 발생할 수 있는 동작들을 나타내는 것이다. 다른 실시형태들에 있어서는, 추가적인 동작이 수행될 수 있다. 본 개시물의 다양한 실시형태들은 본 명세서에서 설명되는 기능을 달성하기 위한 임의의 적절한 시그널링 메커니즘을 고려한다. 도 2 내지 도 6에서 예시되는 동작들 중 일부는 적절히 반복, 결합, 수정, 또는 생략될 수 있다. 부가적으로, 특정 실시형태들의 범주로부터 일탈함이 없이 임의의 적절한 순서로 동작들이 수행될 수 있다.
아래에서는 도면들을 참조하여 상기의 실시형태들을 구현하기 위한 예시적인 아키텍처 및 시스템을 상세히 설명한다. 예를 들어, 매트릭스 처리 유닛(104) 및/또는 산술 엔진(108)은 아래에 예시되는 프로세서들 또는 시스템들 중 어느 하나에 포함되거나 결합될 수 있다. 일부 실시형태에 있어서, 전술한 하나 이상의 하드웨어 컴포넌트 및/또는 명령은 아래에서 상술된 대로 에뮬레이션(emulate)되거나, 또는 소프트웨어 모듈로서 구현된다.
도 7은 특정 실시형태들에 따른 필드-프로그램 가능 게이트 어레이(FPGA)(700)를 예시한다. 특정 실시형태에 있어서, 산술 엔진(108)은 FPGA(700)에 의해 구현될 수 있다(예컨대, 산술 엔진(108)의 기능은 연산 로직부(704)의 회로에 의해 구현될 수 있음). FPGA는 구성 가능한 로직부를 포함하는 반도체 장치일 수 있다. FPGA는 FPGA의 로직부가 어떻게 구성되어야 하는지를 정의하는 임의의 적절한 포맷을 갖는 데이터 구조(예컨대, 비트스트림)를 통해 프로그래밍될 수 있다. FPGA는 FPGA가 제작된 후에 임의의 횟수로 다시 프로그래밍될 수 있다.
묘사된 실시형태에 있어서, FPGA(700)는 구성 가능한 로직부(702), 연산 로직부(704), 통신 컨트롤러(706), 및 메모리 컨트롤러(710)를 포함한다. 구성 가능한 로직부(702)는 하나 이상의 커널을 구현하도록 프로그래밍될 수 있다. 커널은 하나 이상의 입력 세트를 수신할 수 있는 FPGA의 구성된 로직부를 포함하고, 구성된 로직부를 사용해서 입력 세트를 처리하고, 하나 이상의 출력 세트를 제공할 수 있다. 커널은 임의의 적절한 타입의 처리를 수행할 수 있다. 다양한 실시형태에 있어서, 커널은 프리픽스(prefix) 디코더 엔진을 포함할 수 있다. 일부 FPGA(700)는 한 번에 하나의 커널을 실행하는 것으로 제한될 수 있지만, 다른 FPGA들은 다수의 커널을 동시에 실행할 수도 있다. 구성 가능한 로직부(702)는 임의의 적절한 타입의 논리 게이트(예컨대, AND 게이트, XOR 게이트) 또는 논리 게이트의 조합(예컨대, 플립 플롭, 룩업 테이블, 가산기, 승산기, 멀티플렉서, 디멀티플렉서)과 같이, 임의의 적절한 로직부를 포함할 수 있다. 일부 실시형태에 있어서, 로직부는 (적어도 부분적으로) FPGA의 논리 컴포넌트들 사이의 프로그램 가능 인터커넥트를 통해 구성된다.
연산 로직부(704)는 커널을 정의하는 데이터 구조에 액세스하여 구성 가능한 로직부(702)를 데이터 구조에 기초하여 구성하고 FPGA의 기타 연산을 수행할 수 있다. 일부 실시형태에 있어서, 연산 로직부(704)는 데이터 구조에 기초하여 FPGA(700)의 메모리(예컨대, 비휘발성 플래시 메모리 또는 SRAM 기반 메모리)에 제어 비트를 기록할 수 있고, 제어 비트는 로직부를 구성하도록 동작한다(예컨대, 구성 가능한 로직부의 부분들 사이의 특정 인터커넥트를 활성화 또는 비활성화하는 것에 의함). 연산 로직부(704)는, 임의의 적절한 메모리(예컨대, 랜덤 액세스 메모리(RAM))를 포함하는 하나 이상의 메모리 장치, 하나 이상의 트랜시버, 클록 회로, FPGA에 배치되는 하나 이상의 프로세서, 하나 이상의 컨트롤러, 또는 그 밖의 적절한 로직부와 같이, 임의의 적절한 로직부(구성 가능한 로직부 또는 고정된 로직부로 구현될 수 있음)를 포함할 수 있다.
통신 컨트롤러(706)는 FPGA(700)가 (예컨대, 데이터 세트를 압축하기 위한 커맨드를 수신하기 위해) 컴퓨터 시스템의 다른 컴포넌트들(예컨대, 압축 엔진)과 통신하게 할 수 있다. 메모리 컨트롤러(710)는 FPGA가 컴퓨터 시스템의 메모리로부터 데이터(예컨대, 오퍼랜드 또는 결과)를 판독하거나 해당 메모리에 데이터를 기록하게 할 수 있다. 다양한 실시형태들에 있어서, 메모리 컨트롤러(710)는 직접 메모리 액세스(DMA) 컨트롤러를 포함할 수 있다.
프로세서 코어들은 상이한 방식들로, 상이한 목적들로, 또한 상이한 프로세서들에서 구현될 수 있다. 예를 들면, 이러한 코어들의 구현예는, 1) 범용 컴퓨팅을 위해 의도된 범용 순차적 코어; 2) 범용 컴퓨팅을 위해 의도된 고성능 범용 비순차적 코어; 3) 주로 그래픽 및/또는 과학적 (스루풋) 컴퓨팅을 위해 의도된 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현예는, 1) 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 순차적 코어 및/또는 범용 컴퓨팅을 위해 의도된 하나 이상의 범용 비순차적 코어를 포함하는 CPU; 및 2) 주로 그래픽 및/또는 과학적 (스루풋) 컴퓨팅을 위해 의도된 하나 이상의 특수 목적 코어를 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들에 의하면, 1) CPU와는 별도의 칩 상의 코프로세서; 2) CPU와 동일한 패키지에 있는 별도의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우, 이러한 코프로세서를 때때로 통합된 그래픽 및/또는 과학적 (스루풋) 로직부와 같은 특수 목적 로직부, 또는 특수 목적 코어라고도 함); 및 4) 전술한 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)라고도 함), 전술한 코프로세서, 및 추가적인 기능을 동일한 다이 상에 포함할 수 있는 시스템-온-칩을 포함할 수 있는 상이한 컴퓨터 시스템 아키텍처들이 초래된다. 다음으로, 예시적인 코어 아키텍처를 설명하고, 예시적인 프로세서 및 컴퓨터 아키텍처의 설명으로 이어진다.
도 8a는 본 개시물의 실시형태들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인을 모두 예시하는 블록도이다. 도 8b는 본 개시물의 실시형태들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시형태를 모두 예시하는 블록도이다. 도 8a 및 도 8b에서 실선 박스는 순차적 파이프라인 및 순차적 코어를 예시하는 반면, 점선 박스의 선택적 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 예시한다. 순차적 양태가 비순차적 양태의 서브세트임을 고려하여, 비순차적 양태를 설명한다.
도 8a에서, 프로세서 파이프라인(800)은 페치 스테이지(802), 길이 디코드 스테이지(804), 디코드 스테이지(806), 할당 스테이지(808), 리네이밍 스테이지(810), 스케줄링(디스패치 또는 발행이라고도 함) 스테이지(812), 레지스터 판독/메모리 판독 스테이지(814), 실행 스테이지(816), 라이트 백(write back)/메모리 기록 스테이지(818), 예외 처리 스테이지(822), 및 커밋 스테이지(824)를 포함한다.
도 8b는 실행 엔진 유닛(850)에 결합되는 전위 유닛(830)을 포함하는 프로세서 코어(890)를 도시하고, 상기 두 유닛은 모두 메모리 유닛(870)에 결합된다. 코어(890)는 축소 명령어 세트 컴퓨팅(RISC) 코어, 복합 명령어 세트 컴퓨팅(CISC) 코어, 훨씬 긴 명령어(VLIW) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. 또 다른 선택안으로서, 코어(890)는, 예를 들어 네트워크 또는 통신 코어, 압축 및/또는 압축 해제 엔진, 코프로세서 코어, 범용 컴퓨팅 그래픽 처리 유닛(GPGPU) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
전위 유닛(830)은 디코드 유닛(840)에 결합된, 명령어 페치 유닛(838)에 결합된, 명령어 변환 색인 버퍼(TLB)(836)에 결합된, 명령어 캐시 유닛(834)에 결합된 브랜치 예측 유닛(832)을 포함한다. 디코드 유닛(840)(또는 디코더)은 명령어를 디코딩할 수 있으며, 또한 출력으로서 하나 이상의 마이크로-연산, 마이크로-코드 엔트리 점, 마이크로 명령어, 그 밖의 명령어, 또는 원래의 명령어로부터 디코딩된, 또는 달리 반영된, 또는 도출된 다른 제어 신호를 생성할 수 있다. 디코드 유닛(840)은 다양한 상이한 메커니즘을 사용해서 구현될 수 있다. 적절한 메커니즘으로서는, 룩업 테이블, 하드웨어 구현예, 프로그램 가능 논리 어레이(PLA), 마이크로코드 판독 전용 메모리(ROM) 등을 예로 들 수 있지만, 이들로 제한되는 것은 아니다. 일 실시형태에 있어서, 코어(890)는 (예컨대, 디코드 유닛(840) 내의 또는 그렇지 않으면 전위 유닛(830) 내의) 특정 매크로 명령어에 대한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다. 디코드 유닛(840)은 실행 엔진 유닛(850) 내의 리네임/할당기 유닛(852)에 결합된다.
실행 엔진 유닛(850)은 회수 유닛(854) 및 하나 이상의 스케줄러 유닛(들)(856) 세트에 결합되는 리네임/할당기 유닛(852)을 포함한다. 스케줄러 유닛(들)(856)은 예약 스테이션, 중앙 명령어 윈도우 등을 포함하는 임의의 수의 상이한 스케줄러를 나타낸다. 스케줄러 유닛(들)(856)은 물리적 레지스터 파일(들) 유닛(들)(858)에 결합된다. 물리적 레지스터 파일(들) 유닛(858)들 각각은 하나 이상의 물리적 레지스터 파일을 나타내고, 서로 다른 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 타입을 저장한다. 일 실시형태에 있어서, 물리적 레지스터 파일(들) 유닛(858)은 벡터 레지스터 유닛, 기록 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이들 레지스터 유닛은 아키텍처 벡터 레지스터, 벡터 마스크 레지스터, 및 범용 레지스터를 제공할 수 있다. 물리적 레지스터 파일(들) 유닛(들)(858)은 (예컨대, 재배열 버퍼(들) 및 회수 레지스터 파일(들)을 사용하거나; 미래 파일(들), 이력 버퍼(들), 및 회수 레지스터 파일(들)을 사용하거나; 레지스터 맵 및 레지스터 풀(pool)을 사용하거나 하는 등으로) 레지스터 리네이밍 및 비순차적 실행을 구현할 수 있는 다양한 방식을 예시하기 위해 회수 유닛(854)에 의해 중첩된다. 회수 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 실행 클러스터(들)(860)에 결합된다. 실행 클러스터(들)(860)는 하나 이상의 실행 유닛(862) 세트 및 하나 이상의 메모리 액세스 유닛(864) 세트를 포함한다. 실행 유닛(862)은 다양한 타입의 데이터(예컨대, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대하여 다양한 연산(예컨대, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시형태는 특정 함수 또는 함수 세트에 대하여 전용인 다수의 실행 유닛을 포함할 수 있는 반면, 다른 실시형태들은 모든 함수를 모두 수행하는 단일의 실행 유닛 또는 복수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(856), 물리적 레지스터 파일(들) 유닛(들)(858), 및 실행 클러스터(들)(860)는, 특정 실시형태들이 특정 타입의 데이터/연산에 대하여 별개의 파이프라인(예컨대, 각각 자체 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인 ― 별개의 메모리 액세스 파이프라인의 경우에는, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(864)을 갖는 특정 실시형태들이 구현됨)을 생성하기 때문에, 복수형이 가능한 것으로 도시된다. 별개의 파이프라인들이 사용되는 경우, 이들 파이프라인 중 하나 이상은 비순차적 발행/실행 파이프라인일 수 있으며, 나머지가 순차적 파이프라인이라는 점을 또한 이해해야 한다.
메모리 액세스 유닛(864) 세트는 레벨 2(L2) 캐시 유닛(876)에 결합되는 데이터 캐시 유닛(874)에 결합되는 데이터 TLB 유닛(872)을 포함하는 메모리 유닛(870)에 결합된다. 예시적인 일 실시형태에 있어서, 메모리 액세스 유닛(864)은 각각 메모리 유닛(870) 내의 데이터 TLB 유닛(872)에 결합된 로드 유닛, 어드레스 저장 유닛, 및 데이터 저장 유닛을 포함할 수 있다. 메모리 유닛(870) 내의 레벨 2(L2) 캐시 유닛(876)에는 명령어 캐시 유닛(834)이 더 결합된다. L2 캐시 유닛(876)은 하나 이상의 다른 레벨의 캐시 및 궁극적으로는 메인 메모리에 결합된다.
실시예로서, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 파이프라인(800)을 다음과 같이 구현할 수 있다: 1) 명령어 페치(838)는 페치 및 길이 디코딩 스테이지(802 및 804)를 수행하고; 2) 디코드 유닛(840)은 디코드 스테이지(806)를 수행하고; 3) 리네임/할당기 유닛(852)은 할당 스테이지(808) 및 리네이밍 스테이지(810)를 수행하고; 4) 스케줄러 유닛(들)(856)은 스케줄 스테이지(812)를 수행하고; 5) 물리적 레지스터 파일(들) 유닛(들)(858) 및 메모리 유닛(870)은 레지스터 판독/메모리 판독 스테이지(814)를 수행하고; 실행 클러스터(860)는 실행 스테이지(816)를 수행하고; 6) 메모리 유닛(870) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 라이트 백/메모리 기록 스테이지(818)를 수행하고; 7) 다양한 유닛들이 예외 처리 스테이지(822)에 포함될 수 있고; 그리고 8) 회수 유닛(854) 및 물리적 레지스터 파일(들) 유닛(들)(858)은 커밋 스테이지(824)를 수행한다.
코어(890)는 본 명세서에서 설명되는 명령어(들)를 포함하는 하나 이상의 명령어 세트(예컨대, x86 명령어 세트(더 새로운 버전이 추가된 일부 확장명을 가짐); 미국 캘리포니아(CA) 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트; 미국 캘리포니아 서니베일 소재의 ARM Holdings의 ARM 명령어 세트(NEON과 같은 선택적인 추가 확장명을 가짐))를 지원할 수 있다. 일 실시형태에 있어서, 코어(890)는 패킹된 데이터 명령어 세트 확장명(예컨대, AVX1, AVX2)을 지원하기 위한 로직부를 포함하고, 이로써 다수의 멀티미디어 애플리케이션에 의해 사용되는 연산이 패킹된 데이터를 사용해서 수행될 수 있게 된다.
코어가 멀티스레딩(연산 또는 스레드의 2개 이상의 병렬 세트를 실행)을 지원할 수 있고, 시간 분할 멀티스레딩, 동시 멀티스레딩(물리적 코어가 동시에 멀티스레딩하고 있는 스레드들 각각에 대하여 단일의 물리적 코어가 논리적 코어를 제공함), 또는 이들의 조합(예컨대, Intel® Hyperthreading technology에서와 같이 시간 분할 페칭 및 디코딩과 그 이후의 동시 멀티스레딩)을 포함하여 다양한 방식으로 멀티스레딩을 지원할 수 있다는 점을 이해해야 한다.
레지스터 리네이밍을 비순차적 실행의 맥락에서 설명하지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수 있다는 점을 이해해야 한다. 또한, 예시된 프로세서의 실시형태는 별개의 명령어 및 데이터 캐시 유닛(834/874) 및 공유 L2 캐시 유닛(876)을 포함하지만, 대안적인 실시형태들은, 예를 들어, 레벨 1(L1) 내부 캐시, 또는 다중 레벨의 내부 캐시와 같이, 명령어 및 데이터 모두에 대하여 단일의 내부 캐시를 가질 수 있다. 일부 실시형태에 있어서, 시스템은 내부 캐시와 코어 및/또는 프로세서의 외부에 있는 외부 캐시의 조합을 포함할 수 있다. 대안으로서, 모든 캐시가 코어 및/또는 프로세서 외부의 캐시일 수 있다.
도 9a 및 도 9b는 코어가 칩 내의 여러 논리 블록들(동일한 타입의 및/또는 상이한 타입의 다른 코어들을 잠재적으로 포함함) 중 하나인 보다 특정한 예시적인 순차적 코어 아키텍처의 블록도를 예시한다. 논리 블록들은 고-대역폭 인터커넥트 네트워크(예컨대, 환상 네트워크(ring network))를 통해 용례에 따라 일부 고정 함수 로직부, 메모리 I/O 인터페이스, 및 그 밖의 필요한 I/O 로직부와 통신한다.
도 9a는, 다양한 실시형태에 따라, 온-다이(on-die) 인터커넥트 네트워크(902)에의 그 연결 및 레벨 2(L2) 캐시(904)의 그 로컬 서브세트와 함께, 싱글 프로세서 코어의 블록도이다. 일 실시형태에 있어서, 명령어 디코더(900)는 패킹된 데이터 명령어 세트 확장명을 갖는 x86 명령어 세트를 지원한다. L1 캐시(906)는 스칼라 유닛 및 벡터 유닛으로의 캐시 메모리에 대한 저-지연 액세스를 허용한다. (설계를 간략화하기 위한) 일 실시형태에 있어서, 스칼라 유닛(908) 및 벡터 유닛(910)은 별개의 레지스터 세트(제각기, 스칼라 레지스터(912) 및 벡터 레지스터(914))를 사용하고, 이들 사이에 전송되는 데이터는 메모리에 기록되고 나서 레벨 1(L1) 캐시(906)로부터 리드 백(read back)되는 반면, 대안적인 실시형태들은 상이한 접근법을 사용할 수 있다(예컨대, 단일 레지스터 세트를 사용하거나, 또는 데이터가 기록 및 리드 백되지 않고 2개의 레지스터 파일 사이에서 전송될 수 있게 하는 통신 경로를 포함함).
L2 캐시의 로컬 서브세트(904)는 별개의 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다(일부 실시형태에 있어서는, 프로세서 코어당 하나). 각각의 프로세서 코어는 L2 캐시의 자체 로컬 서브세트(904)로의 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는 그 L2 캐시 서브세트(904)에 저장되고 또한 자체의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로, 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기록되는 데이터는 자체의 L2 캐시 서브세트(904)에 저장되고 또한 필요에 따라 다른 서브세트들로부터 플러시된다. 환상 네트워크는 공유 데이터에 대한 코히런시(coherency)를 보장한다. 환상 네트워크는 양방향성이어서 프로세서 코어들, L2 캐시들 및 다른 논리 블록들과 같은 에이전트들이 칩 내에서 서로 통신할 수 있게 한다. 특정 실시형태에 있어서, 각각의 환상 데이터-경로는 방향마다 1012-비트 폭이다.
도 9b는 실시형태들에 따른 도 9a에서의 프로세서 코어의 일부분의 확대도이다. 도 9b는 벡터 유닛(910) 및 벡터 레지스터(914)에 대한 더 상세한 부분뿐만 아니라 L1 데이터 캐시(906A)(L1 캐시(906)의 일부분)를 포함한다. 구체적으로, 벡터 유닛(910)은 정수 명령어, 단-정밀도 부동 명령어, 및 배-정밀도 부동 명령어 중 하나 이상을 실행하는 16-폭 벡터 처리 유닛(VPU)(16-폭 ALU(928) 참조)이다. VPU는 스위즐 유닛(920)에 의한 레지스터 입력들의 스위즐링(swizzling), 수치 변환 유닛(922A, 922B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(924)에 의한 복제를 지원한다. 기록 마스크 레지스터(926)는 결과적인 벡터 기록들을 서술(predicate)하는 것을 허용한다.
도 10은 다양한 실시형태들에 따른, 하나 초과의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 또한 통합 그래픽을 가질 수 있는 프로세서(1000)의 블록도이다. 도 10의 실선 박스는 단일 코어(1002A), 시스템 에이전트(1010), 및 하나 이상의 버스 컨트롤러 유닛(1016) 세트를 구비한 프로세서(1000)를 예시하는 반면, 점선 박스의 선택적 추가는 다중 코어(1002A 내지 1002N), 시스템 에이전트 유닛(1010) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(1014) 세트, 및 특수 목적 로직부(1008)를 구비한 대안적인 프로세서(1000)를 예시한다.
따라서, 프로세서(1000)의 상이한 구현예들은 다음을 포함할 수 있다: 1) (하나 이상의 코어를 포함할 수 있는) 통합 그래픽 및/또는 과학적 (스루풋) 로직부인 특수 목적 로직부(1008) 및 하나 이상의 범용 코어(예컨대, 범용 순차적 코어, 범용 비순차적 코어, 또는 이 둘의 조합)인 코어(1002A 내지 1002N)를 구비한 CPU; 2) 주로 그래픽 및/또는 과학적 (처리량) 로직부를 위해 의도된 많은 수의 특수 목적 코어인 코어(1002A 내지 1002N)를 구비한 코프로세서; 및 3) 많은 수의 범용 순차적 코어인 코어(1002A 내지 1002N)를 구비한 코프로세서. 따라서, 프로세서(1000)는 범용 프로세서, 또는 예를 들어 네트워크 또는 통신 프로세서, 압축 및/또는 압축 해제 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고-스루풋 MIC(many integrated core) 코프로세서(예컨대, 30개 이상의 코어를 포함함), 임베디드 프로세서와 같은 코프로세서 또는 특수 목적 프로세서, 또는 논리적 연산을 수행하는 그 밖의 고정된 또는 구성 가능한 로직부일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(1000)는, 예를 들어 BiCMOS, CMOS, 또는 NMOS와 같은 다수의 프로세스 기술 중 어느 하나를 이용하여 하나 이상의 기판의 일부가 될 수 있거나, 및/또는 이들 기판 상에 구현될 수 있다.
다양한 실시형태에 있어서, 프로세서는 대칭 또는 비대칭일 수 있는 임의의 수의 처리 요소를 포함할 수 있다. 일 실시형태에 있어서, 처리 요소는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직부를 의미한다. 하드웨어 처리 요소로서는, 스레드 유닛, 스레드 슬롯, 스레드, 처리 유닛, 콘텍스트, 콘텍스트 유닛, 논리적 프로세서, 하드웨어 스레드, 코어, 및/또는 실행 상태 또는 아키텍처 상태와 같은 프로세서에 대한 상태를 유지할 수 있는 임의의 다른 요소를 예로 들 수 있다. 다시 말해, 일 실시형태에 있어서, 처리 요소는 소프트웨어 스레드, 운영 체제, 애플리케이션, 또는 그 밖의 코드와 같은 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 의미한다. 물리적 프로세서(또는 프로세서 소켓)는 일반적으로 코어 또는 하드웨어 스레드와 같은 임의의 수의 다른 처리 요소를 잠재적으로 포함하는 집적 회로를 의미한다.
코어는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로에 위치되는 로직부를 의미할 수 있고, 각각 독립적으로 유지된 아키텍처 상태는 적어도 일부 전용 실행 리소스와 연관된다. 하드웨어 스레드는 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로에 위치되는 임의의 로직부를 의미할 수 있고, 독립적으로 유지된 아키텍처 상태는 실행 리소스에 대한 액세스를 공유한다. 알 수 있듯이, 특정 리소스들이 공유되고 다른 리소스들이 아키텍처 상태에 대하여 전용일 경우, 하드웨어 스레드 및 코어의 표기 사이의 선이 겹친다. 그러나, 종종, 코어 및 하드웨어 스레드는 운영 체제에 의해 개별적인 논리적 프로세서로서 간주되고, 운영 체제는 각각의 논리적 프로세서에서 연산을 개별적으로 스케줄링할 수 있다.
메모리 계층 구조는 코어 내의 하나 이상의 레벨의 캐시, 일련의 또는 하나 이상의 공유 캐시 유닛(1006), 및 통합 메모리 컨트롤러 유닛(1014) 세트에 결합된 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛(1006) 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨의 캐시와 같은 하나 이상의 중간-레벨 캐시, 최종 레벨 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 일 실시형태에 있어서, 환상 기반 인터커넥트 유닛(1012)은 특수 목적 로직부(예컨대, 통합 그래픽 로직부)(1008), 공유 캐시 유닛(1006) 세트, 및 시스템 에이전트 유닛(1010)/통합 메모리 컨트롤러 유닛(들)(1014)을 상호 접속하지만, 대안적인 실시형태에서는 이러한 유닛들을 상호 접속하기 위해 임의의 수의 공지된 기법이 사용될 수 있다. 일 실시형태에 있어서, 하나 이상의 캐시 유닛(1006)과 코어(1002A 내지 1002N) 사이의 코히런시가 유지된다.
일부 실시형태에 있어서, 코어(1002A 내지 1002N) 중 하나 이상은 멀티스레딩을 할 수 있다. 시스템 에이전트(1010)는 코어(1002A 내지 1002N)를 조정하고 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(1010)은 예를 들어 전력 제어 유닛(PCU) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어(1002A 내지 1002N) 및 특수 목적 로직부(1008)의 전력 상태를 조절하는 데 필요한 로직부 및 컴포넌트일 수 있거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부적으로 접속된 디스플레이를 구동하기 위한 것이다.
코어(1002A 내지 1002N)는 아키텍처 명령어 세트의 관점에서 동질적 또는 이질적일 수 있다; 즉, 코어(1002A 내지 1002N) 중 2개 이상은 동일한 명령어 세트를 실행할 수 있는 한편, 나머지 코어는 해당 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
도 11 내지 도 14는 예시적인 컴퓨터 아키텍처들의 블록도이다. 랩톱, 데스크톱, 핸드헬드 PC, 개인용 정보 단말기(PDA), 엔지니어링 워크스테이션, 서버, 네트워크 장치, 네트워크 허브, 스위치, 임베디드 프로세서, 디지털 신호 프로세서(DSP), 그래픽 장치, 비디오 게임 장치, 셋톱 박스, 마이크로 컨트롤러, 휴대폰, 휴대용 미디어 플레이어, 핸드헬드 장치, 및 다양한 그 밖의 전자 장치에 대해 본 기술 분야에 알려진 다른 시스템 설계 및 구성도 본 개시물에서 설명되는 방법을 수행하기에 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직부를 포함할 수 있는 매우 다양한 시스템 또는 전자 장치가 일반적으로 적합하다.
도 11은 본 개시물의 일 실시형태에 따른 시스템(1100)의 블록도를 묘사한다. 시스템(1100)은 컨트롤러 허브(1120)에 결합된 하나 이상 프로세서(1110, 1115)를 포함할 수 있다. 일 실시형태에 있어서, 컨트롤러 허브(1120)는 (별개의 칩들 상에 또는 동일한 칩 상에 있을 수 있는) 입력/출력 허브(IOH)(1150) 및 그래픽 메모리 컨트롤러 허브(GMCH)(1190)를 포함하고; GMCH(1190)는 메모리(1140) 및 코프로세서(1145)에 결합되는 메모리 컨트롤러 및 그래픽 컨트롤러를 포함하고; IOH(1150)는 입력/출력(I/O) 장치(1160)를 GMCH(1190)에 결합한다. 대안적으로, 메모리 컨트롤러 및 그래픽 컨트롤러 중 하나 또는 둘 모두는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(1140) 및 코프로세서(1145)는 프로세서(1110)에 직접 결합되고, 컨트롤러 허브(1120)는 IOH(1150)를 포함하는 단일 칩이다.
추가적인 프로세서(1115)의 선택적 특성은 도 11에서 파선으로 묘사되어 있다. 각각의 프로세서(1110, 1115)는 본 명세서에서 설명된 처리 코어들 중 하나 이상을 포함할 수 있고, 프로세서(1000)의 일부 버전일 수 있다.
메모리(1140)는, 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 그 밖의 적절한 메모리, 또는 이들의 임의의 조합일 수 있다. 메모리(1140)는 컴퓨터 시스템(1100)의 기능을 제공하기 위해 프로세서(1110, 1115)에 의해 사용되는 데이터와 같은 임의의 적절한 데이터를 저장할 수 있다. 예를 들어, 실행된 프로그램 또는 프로세서(1110, 1115)에 의해 액세스되는 파일과 연관되는 데이터는 메모리(1140)에 저장될 수 있다. 다양한 실시형태에 있어서, 메모리(1140)는 프로세서(1110, 1115)에 의해 사용 또는 실행된 데이터 및/또는 명령어 시퀀스를 저장할 수 있다.
적어도 하나의 실시형태에 있어서, 컨트롤러 허브(1120)는 FSB(frontside bus)와 같은 멀티-드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트-투-포인트 인터페이스, 또는 유사한 접속부(1195)를 통해 프로세서(들)(1110, 1115)와 통신한다.
일 실시형태에 있어서, 코프로세서(1145)는, 예를 들어, 고-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 및/또는 압축 해제 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시형태에 있어서, 컨트롤러 허브(1120)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처, 마이크로아키텍처, 열, 전력 소비 특성 등을 포함하여 가치를 판단하는 여러 기준들의 관점에서 물리적인 리소스들(1110, 1115) 사이에 다양한 차이가 있을 수 있다.
일 실시형태에 있어서, 프로세서(1110)는 일반적인 타입의 데이터 처리 연산을 제어하는 명령어를 실행한다. 명령어 내에는 코프로세서 명령어가 내재될 수 있다. 프로세서(1110)는 이들 코프로세서 명령어를 부속된 코프로세서(1145)에 의해 실행되어야 하는 타입인 것으로 인식한다. 따라서, 프로세서(1110)는 코프로세서 버스 또는 다른 인터커넥트 상에서 이러한 코프로세서 명령어(또는 코프로세서 명령어를 나타내는 제어 신호)를 코프로세서(1145)에게 발행한다. 코프로세서(들)(1145)는 수신된 코프로세서 명령어를 수용하고 실행한다.
도 12는 본 개시물의 실시형태에 따른 제1의 더욱 특정한 예시적인 시스템(1200)의 블록도를 묘사한다. 도 12에 도시된 바와 같이, 멀티프로세서 시스템(1200)은 포인트-투-포인트 인터커넥트 시스템이고, 포인트-투-포인트 인터커넥트(1250)를 통해 결합되는 제1 프로세서(1270) 및 제2 프로세서(1280)를 포함한다. 프로세서(1270) 및 프로세서(1280) 각각은 프로세서(1000)의 일부 버전일 수 있다. 본 개시물의 일 실시형태에 있어서, 프로세서들(1270 및 1280)은 제각기 프로세서들(1110 및 1115)이고, 한편 코프로세서(1238)는 코프로세서(1145)이다. 다른 실시형태에 있어서, 프로세서들(1270 및 1280)은 제각기 프로세서(1110) 및 코프로세서(1145)이다.
프로세서들(1270 및 1280)이 통합 메모리 컨트롤러(IMC) 유닛들(1272 및 1282)을 제각기 포함하는 것으로 도시되어 있다. 프로세서(1270)는 그 버스 컨트롤러 유닛들의 일부로서 포인트-투-포인트(P-P) 인터페이스들(1276 및 1278)을 포함할 수 있고, 이와 유사하게 제2 프로세서(1280)는 P-P 인터페이스들(1286 및 1288)을 포함한다. 프로세서들(1270, 1280)은 P-P 인터페이스 회로들(1278, 1288)을 사용하여 포인트-투-포인트(P-P) 인터페이스(1250)를 통해 정보를 교환할 수 있다. 도 12에 도시된 바와 같이, IMC들(1272, 1282)은 프로세서들을 각자의 메모리들, 즉 메모리(1232) 및 메모리(1234)에 결합하고, 이 메모리들은 각자의 프로세서에 로컬로 부속되는 메인 메모리의 부분들일 수 있다.
프로세서들(1270, 1280)은 각각 포인트-투-포인트 인터페이스 회로들(1276, 1294, 1286, 1298)을 사용하여 개별 P-P 인터페이스들(1252, 1254)을 통해서 칩셋(1290)과 정보를 교환할 수 있다. 칩셋(1290)은 선택적으로 고성능 인터페이스(1239)를 통해 코프로세서(1238)와 정보를 교환할 수 있다. 일 실시형태에 있어서, 코프로세서(1238)는, 예를 들어, 고-스루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 및/또는 압축 해제 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시되지 않음)는 어느 한 프로세서에 포함되거나 또는 두 프로세서의 외부이지만 여전히 P-P 인터커넥트를 통해 프로세서들과 접속될 수 있으므로, 프로세서가 저전력 모드에 놓이는 경우 두 프로세서 중 어느 하나의 또는 둘 모두의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(1290)은 인터페이스(1296)를 통해 제1 버스(1216)에게 결합될 수 있다. 일 실시형태에 있어서, 제1 버스(1216)는 PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스, 또는 다른 제3세대 I/O 인터커넥트 버스와 같은 버스일 수 있지만, 본 개시물의 범위가 이것으로 제한되는 것은 아니다.
도 12에 도시된 바와 같이, 다양한 I/O 장치(1214)가, 제1 버스(1216)를 제2 버스(1220)에 결합하는 버스 브리지(1218)와 함께, 제1 버스(1216)에 결합될 수 있다. 일 실시형태에 있어서, 코프로세서, 고-스루풋 MIC 프로세서, GPGPU, 가속기(예컨대, 그래픽 가속기 또는 디지털 신호 처리(DSP) 유닛과 같은 것), 필드 프로그램 가능 게이트 어레이, 또는 임의의 다른 프로세서와 같은 하나 이상의 추가적인 프로세서(들)(1215)가 제1 버스(1216)에 결합된다. 일 실시형태에 있어서, 제2 버스(1220)는 LPC(Low Pin Count) 버스일 수 있다. 예를 들어, 키보드 및/또는 마우스(1222), 통신 장치(1227), 및 일 실시형태에 있어서, 디스크 드라이브 또는 명령어/코드 및 데이터(1230)를 포함할 수 있는 다른 대용량 저장 장치와 같은 저장 유닛(1228)을 포함하는 다양한 장치들이 제2 버스(1220)에 결합될 수 있다. 또한, 오디오 I/O(1224)가 제2 버스(1220)에 결합될 수 있다. 다른 아키텍처들이 본 개시물에 의해 고려된다는 점에 유의한다. 예를 들어, 도 12의 포인트-투-포인트 아키텍처 대신에, 시스템은 멀티-드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
도 13은 본 개시물의 실시형태에 따른 제2의 더욱 특정한 예시적인 시스템(1300)의 블록도를 묘사한다. 도 12 및 도 13에서의 유사한 요소들은 유사한 참조 번호들을 가지며, 도 12의 특정 양태들은 도 13의 다른 양태들을 모호하게 하는 것을 피하기 위해 도 13에서 생략되어 있다.
도 13은 프로세서들(1270, 1280)이 통합 메모리 및 I/O 제어 로직부("CL")(1272 및 1282)를 제각기 포함할 수 있다는 것을 예시한다. 따라서, CL(1272, 1282)은 통합 메모리 컨트롤러 유닛을 포함하고, 또한 I/O 제어 로직부를 포함한다. 도 13은 메모리들(1232, 1234)이 CL(1272, 1282)에 결합될 뿐만 아니라, I/O 장치(1314)도 제어 로직부(1272, 1282)에 결합된다는 것을 예시한다. 레거시 I/O 장치(1315)가 칩셋(1290)에 결합된다.
도 14는 본 개시물의 실시형태에 따른 SoC(1400)의 블록도를 묘사한다. 도 10에서의 유사한 요소들은 유사한 참조 버호를 갖는다. 또한, 점선 박스들은 더욱 진보된 SoC에 관한 선택적인 특징들이다. 도 14에서, 인터커넥트 유닛(들)(1402)은, 하나 이상의 코어(1002A 내지 1002N) 세트 및 공유 캐시 유닛(들)(1006)을 포함하는 애플리케이션 프로세서(1410); 시스템 에이전트 유닛(1010); 버스 컨트롤러 유닛(들)(1016); 통합 메모리 컨트롤러 유닛(들)(1014); 통합 그래픽 로직부, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서(1420) 또는 그 세트; SRAM(static random access memory) 유닛(1430); DMA(direct memory access) 유닛(1432); 및 하나 이상의 외부 디스플레이에 결합하기 위한 디스플레이 유닛(1440)에 결합된다. 일 실시형태에 있어서, 코프로세서(들)(1420)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 및/또는 압축 해제 엔진, GPGPU, 고-스루풋 MIC 프로세서, 임베디드 프로세서 등과 같은 특수 목적 프로세서를 포함한다.
경우에 따라, 명령어를 소스 명령어 세트로부터 타깃 명령어 세트로 변환하기 위해 명령어 컨버터가 사용될 수 있다. 예를 들어, 명령어 컨버터는 명령어를 코어에 의해 처리될 하나 이상의 다른 명령어로 번역(예컨대, 정적 이진 번역, 동적 편집을 포함한 동적 이진 번역을 사용함), 변형, 에뮬레이션, 내지는 변환할 수 있다. 명령어 컨버터는 소프트웨어, 하드웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 명령어 컨버터는 온 프로세서(on processor), 오프 프로세서(off processor), 또는 일부 온 및 일부 오프 프로세서(part on and part off processor)일 수 있다.
도 15는 본 개시물의 실시형태들에 따른 소스 명령어 세트의 이진 명령어를 타깃 명령어 세트의 이진 명령어로 변환하기 위한 소프트웨어 명령어 컨버터의 사용을 대조하는 블록도이다. 예시된 실시형태에 있어서는, 명령어 컨버터가 소프트웨어 명령어 컨버터이지만, 대안으로서 명령어 컨버터는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합으로 구현될 수 있다. 도 15는 고급 언어(1502)의 프로그램이 x86 컴파일러(1504)를 사용하여 기본적으로 적어도 하나의 x86 명령어 세트 코어를 가진 프로세서(1516)에 의해 실행될 수 있는 x86 이진 코드(1506)를 생성하도록 컴파일될 수 있음을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 가진 프로세서(1516)는, 실질적으로 적어도 하나의 x86 명령어 세트 코어를 가진 인텔(Intel) 프로세서와 동일한 결과를 달성하기 위해, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 상당한 부분을, 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 가진 인텔 프로세서에서의 실행 대상인 애플리케이션 또는 기타 소프트웨어의 목적 코드 버전을 적합하게 실행 내지는 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 가진 인텔 프로세서와 실질적으로 동일한 기능을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1504)는, 추가적인 연결 처리로 또는 추가적인 연결 처리 없이, 적어도 하나의 x86 명령어 세트 코어를 가진 프로세서(1516)에서 실행될 수 있는 x86 이진 코드(1506)(예컨대, 목적 코드)를 생성하도록 동작 가능한 컴파일러를 나타낸다. 유사하게, 도 15는 고급 언어(1502)의 프로그램이 대안적인 명령어 세트 컴파일러(1508)를 사용하여 기본적으로 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(1514)(예컨대, 미국 캘리포니아 서니베일 소재의 MIPS Technologies의 MIPS 명령어 세트를 실행 및/또는 미국 캘리포니아 서니베일 소재의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어를 가진 프로세서)에 의해 실행될 수 있는 대안적인 명령어 세트 이진 코드(1510)를 생성하도록 컴파일될 수 있음을 도시한다. 명령어 컨버터(1512)는 x86 이진 코드(1506)를 기본적으로 x86 명령어 세트 코어를 갖지 않는 프로세서(1514)에 의해 실행될 수 있는 코드로 변환하는 데 사용된다. 이 변환된 코드는 이를 가능하게 하는 명령어 컨버터를 구성하는 것이 어렵기 때문에 대안적인 명령어 세트 이진 코드(1510)와 동일하지는 않겠지만, 변환된 코드는 일반적인 연산을 달성하고 대안적인 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 컨버터(1512)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 기타 전자 장치가 x86 이진 코드(1506)를 실행할 수 있게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
설계는 창작에서 제작을 위한 시뮬레이션에 이르는 다양한 단계를 거칠 수 있다. 설계를 표현하는 데이터는 설계를 다양한 방식으로 나타낼 수 있다. 먼저, 시뮬레이션에서 유용한 바와 같이, 하드웨어는 하드웨어 설명 언어(HDL) 또는 다른 기능 설명 언어를 사용해서 표현될 수 있다. 추가적으로, 논리 및/또는 트랜지스터 게이트를 갖는 회로 레벨 모델이 설계 프로세스의 몇몇 단계에서 생성될 수 있다. 더욱이, 대부분의 설계는, 일부 단계에서, 하드웨어 모델에서 다양한 장치들의 물리적인 배치를 표현하는 데이터 레벨에 도달한다. 종래의 반도체 제조 기술을 사용하는 경우, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하는 데 사용되는 마스크의 상이한 마스크 레이어들에서 다양한 특징의 유무를 특정하는 데이터일 수 있다. 일부 구현예에 있어서, 이러한 데이터는 GDS II(Graphic Data System II), OASIS(Open Artwork System Interchange Standard), 또는 유사한 포맷과 같은 데이터베이스 파일 포맷으로 저장될 수 있다.
일부 구현예에 있어서, 소프트웨어 기반 하드웨어 모델, 및 HDL 및 기타 기능 설명 언어 객체는 다른 실시예들 중에서도 레지스터 전송 언어(RTL)를 포함할 수 있다. 이러한 객체는, 설계 도구가 HDL 객체(또는 모델)를 수용하고, 설명된 하드웨어의 속성에 대해 HDL 객체를 파싱하고, 해당 객체로부터 물리적 회로 및/또는 온-칩 레이아웃을 결정할 수 있도록 기계-파싱 가능한 것일 수 있다. 설계 도구의 출력은 물리적 장치를 제조하는 데 사용될 수 있다. 예를 들면, 설계 도구는, HDL 객체로 모델링된 시스템을 실현하기 위해 구현되는 다른 속성들 중에서도 버스 폭, 레지스터(사이즈 및 타입을 포함), 메모리 블록, 물리적 링크 경로, 구조 토폴로지와 같은 다양한 하드웨어 및/또는 펌웨어 요소들의 구성을 HDL 객체로부터 결정할 수 있다. 설계 도구는 시스템-온-칩(SoC) 및 기타 하드웨어 장치의 토폴로지 및 구조적 구성을 결정하기 위한 도구를 포함할 수 있다. 일부 사례에 있어서, HDL 객체는 설명된 하드웨어를 제조하기 위해 제조 장비에 의해 사용될 수 있는 모델 및 설계 파일을 개발하기 위한 기준으로서 사용될 수 있다. 실제로, HDL 객체 자체는 설명된 하드웨어를 제조하기 위해 제조 시스템 소프트웨어로의 입력으로서 제공될 수 있다.
설계의 임의의 표현에 있어서, 설계를 표현하는 데이터는 임의의 형태의 기계 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 스토리지는 상기와 같은 정보를 전송하도록 변조된 내지는 생성된 광학 또는 전자 파를 통해 전송되는 정보를 저장하기 위한 기계 판독 가능 매체일 수 있다. 코드 또는 설계를 지시 또는 운반하는 전자 반송파가 전송될 경우, 전기 신호의 복사, 버퍼링, 또는 재전송을 수행하는 범위에서, 새로운 복사가 이루어진다. 따라서, 통신 제공자 또는 네트워크 제공자는, 본 개시물의 실시형태들의 기술을 구현하는, 반송파에 인코딩된 정보와 같은 물품을 유형의 기계-판독 가능 매체 상에 적어도 일시적으로 저장할 수 있다.
다양한 실시형태들에 있어서, 설계의 표현을 저장하는 매체는 제조 시스템(예컨대, 집적 회로 및/또는 관련 컴포넌트를 제조할 수 있는 반도체 제조 시스템)에 제공될 수 있다. 설계 표현은 시스템에게 전술한 기능들의 임의의 조합을 수행할 수 있는 장치를 제조하라고 지시할 수 있다. 예를 들어, 설계 표현은 어떤 컴포넌트들을 제조할지, 컴포넌트들을 어떻게 함께 결합해야 할지, 컴포넌트들을 장치 상의 어디에 배치할지에 관하여, 및/또는 제조될 장치에 관한 다른 적절한 사양에 관하여 시스템에게 지시할 수 있다.
따라서, 적어도 하나의 실시형태의 하나 이상의 양태는, 기계에 의한 판독시에, 기계로 하여금 본 명세서에서 설명되는 기술을 수행하기 위한 로직부를 만들게 하는, 프로세서 내의 다양한 로직부를 표현하는 기계-판독 가능 매체 상에 저장된 전형적인 명령어들에 의해 구현될 수 있다. 흔히 "IP 코어"라고 불리는 이러한 표현은 비일시적인 유형의 기계 판독 가능 매체에 저장되고 로직부 또는 프로세서를 제조하는 제조 장치에 로딩하기 위해 다양한 고객 또는 제조 설비에 공급될 수 있다.
본 명세서에 개시되는 메커니즘들의 실시형태들은 하드웨어로, 소프트웨어로, 펌웨어로, 또는 이러한 구현 방법들의 조합으로 구현될 수 있다. 본 개시물의 실시형태들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 비휘발성 메모리 및/또는 저장 요소를 포함), 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램 가능 시스템에서 실행되는 컴퓨터 프로그램 또는 프로그램 코드로 구현될 수 있다.
도 12에 예시되는 코드(1230)와 같은 프로그램 코드는 본 명세서에서 설명되는 기능을 수행하고 출력 정보를 생성하기 위해 입력 명령어에 적용될 수 있다. 출력 정보는 하나 이상의 출력 장치에 공지된 방식으로 적용될 수 있다. 본원의 목적에 맞게, 처리 시스템은, 예를 들어, 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 반도체(ASIC), 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과의 통신을 위해 고급 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 또한, 프로그램 코드는, 원하는 경우, 어셈블리 또는 기계 언어로 구현될 수도 있다. 실제로, 본 명세서에서 설명되는 메커니즘은 범위가 임의의 특정 프로그래밍 언어로 제한되지 않는다. 다양한 실시형태들에 있어서, 언어는 컴파일러형 또는 해석형 언어일 수 있다.
전술한 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시형태들은 처리 요소에 의해 실행 가능한(내지는 액세스 가능한) 기계-액세스 가능, 기계 판독 가능, 컴퓨터 액세스 가능, 또는 컴퓨터 판독 가능 매체에 저장된 명령어 또는 코드를 통해 구현될 수 있다. 기계-액세스 가능/판독 가능 매체는 정보를 컴퓨터 또는 전자 시스템과 같은 기계에 의해 판독 가능한 형태로 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 기계-액세스 가능 매체는, 정보를 수신할 수 있는 비-일시적인 매체와는 구별되는, 정적 RAM(SRAM) 또는 동적 RAM(DRAM)과 같은 RAM(random-access memory); 자기 또는 광학 저장 매체; 플래시 메모리 장치; 전기 저장 장치; 광학 저장 장치; 음향 저장 장치; 일시적인(전파된) 신호(예컨대, 반송파, 적외선 신호, 디지털 신호)로부터 수신되는 정보를 유지하기 위한 다른 형태의 저장 장치 등을 포함한다.
본 개시물의 실시형태들을 수행하기 위한 프로그램 논리에 사용되는 명령어는 DRAM, 캐시, 플래시 메모리, 또는 그 밖의 스토리지와 같은 시스템의 메모리 내에 저장될 수 있다. 더욱이, 명령어는 네트워크를 통해 또는 다른 컴퓨터 판독 가능 매체를 거쳐 배포될 수 있다. 따라서, 기계-판독 가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장 또는 전송하기 위한 임의의 메커니즘을 포함할 수 있고, 제한되는 것은 아니지만, 플로피 디스켓, 광학 디스크, 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), 자기 또는 광학 카드, 플래시 메모리, 또는 유형의 기계-판독 가능 스토리지를 포함할 수 있다. 따라서, 컴퓨터-판독 가능 매체는 기계(예컨대, 컴퓨터)에 의해 판독 가능한 형태로 전자 명령어 또는 정보를 저장 또는 전송하기에 적합한 임의의 타입의 유형의 기계-판독 가능 매체를 포함한다.
임의의 적절한 로직부는 CPU(102), 매트릭스 처리 유닛(104), 산술 엔진(108), 메모리(106), FMA(302, 304, 406, 및 408), 제어 모듈(412), 룩업 테이블(112 또는 410), 제어 레지스터(110), 후처리 모듈(414), FPGA(700), 본 명세서에서 설명된 다른 컴포넌트, 또는 이들 컴포넌트 중 임의의 컴포넌트의 임의의 서브컴포넌트와 같은 다양한 컴포넌트의 기능 중 임의의 기능을 구현하는 데 사용될 수 있다. "로직부"는 하나 이상의 기능을 수행하기 위한 하드웨어, 펌웨어, 소프트웨어 및/또는 각각의 조합을 의미할 수 있다. 실시예로서, 로직부는 마이크로-컨트롤러 또는 프로세서에 의해 실행되도록 되어 있는 코드를 저장하기 위해 비일시적 매체와 연관되는 마이크로-컨트롤러 또는 프로세서와 같은 하드웨어를 포함할 수 있다. 따라서, 일 실시형태에 있어서, 로직부에 대한 참조는 비일시적 매체에 유지될 코드를 인식 및/또는 실행하도록 구체적으로 구성된 하드웨어를 의미한다. 더욱이, 다른 실시형태에 있어서, 로직부의 사용은 미리 결정된 연산을 수행하기 위해 구체적으로 마이크로컨트롤러에 의해 실행되도록 되어 있는 코드를 포함하는 비일시적 매체를 의미한다. 그리고, 또 다른 실시형태에 있어서, 추론될 수 있듯이, (이 실시예에서의) 로직부라는 용어는 하드웨어 및 비일시적 매체의 조합을 의미할 수 있다. 다양한 실시형태들에 있어서, 로직부는 소프트웨어 명령어를 실행하도록 동작 가능한 마이크로프로세서 또는 다른 처리 요소, 주문형 반도체(ASIC)와 같은 이산 로직부, 필드 프로그램 가능 게이트 어레이(FPGA)와 같은 프로그래밍된 논리 장치, 명령어를 포함하는 메모리 장치, 논리 장치들의 조합(예컨대, 인쇄 회로 기판 상에서 발견됨), 또는 다른 적절한 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 로직부는, 예컨대, 트랜지스터에 의해 구현될 수 있는 하나 이상의 게이트 또는 다른 회로 컴포넌트를 포함할 수 있다. 일부 실시형태에 있어서, 로직부는 또한 완전히 소프트웨어로 구현될 수 있다. 소프트웨어는 비일시적인 컴퓨터 판독 가능 저장 매체에 기록되는 소프트웨어 패키지, 코드, 명령어, 명령어 세트 및/또는 데이터로 구현될 수 있다. 펌웨어는 메모리 장치에 하드-코딩된(예컨대, 비휘발성) 코드, 명령어 또는 명령어 세트 및/또는 데이터로 구현될 수 있다. 종종, 별개인 것으로 예시된 로직부 경계들은 흔히 다를 수 있으며 잠재적으로는 겹친다. 예를 들어, 제1 및 제2 로직부는 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 공유할 수 있지만, 잠재적으로는 일부 독립적인 하드웨어, 소프트웨어, 또는 펌웨어를 유지한다.
일 실시형태에 있어서, '~하기 위한(to)' 또는 "~하도록 구성되는(configured to)'과 같은 문구의 사용은, 지정된 또는 결정된 태스크를 수행하기 위해 장치, 하드웨어, 로직부, 또는 요소를 배치, 조립, 제조, 판매, 수입 및/또는 설계하는 것을 의미한다. 이 실시예에서, 동작하고 있지 않은 장치 또는 그 요소는 상기 지정된 태스크를 수행하도록 설계, 결합, 및/또는 상호 접속될 경우 여전히 지정된 태스크를 '수행하도록 구성된다'. 오로지 예시적인 실시예로서, 논리 게이트는 동작 동안 0 또는 1을 제공할 수 있다. 다만, 이네이블 신호를 클록에 '제공하도록 구성되는' 논리 게이트는 1 또는 0을 제공할 수 있는 모든 잠재적인 논리 게이트를 포함하는 것은 아니다. 대신에, 논리 게이트는 동작 동안 1 또는 0 출력이 클록을 활성화하는 방식으로 결합되는 것이다. '~하도록 구성되는'이라는 용어의 사용은 동작을 필요로 하는 것이 아니고, 대신에 장치, 하드웨어, 및/또는 요소의 잠재적인 상태에 초점을 맞춘다는 점에 다시 한번 유의해야 하며, 잠재적인 상태에서의 장치, 하드웨어, 및/또는 요소는 장치, 하드웨어, 및/또는 요소가 동작할 때 특정 태스크를 수행하도록 설계된다.
더욱이, 일 실시형태에 있어서, '~을 할 수 있는(capable of/to)', 및/또는 '~하도록 동작 가능한(operable to)'이라는 문구의 사용은 일부 장치, 로직부, 하드웨어, 및/또는 요소가 지정된 방식으로 해당 장치, 로직부, 하드웨어, 및/또는 요소의 사용을 가능하게 하는 방식으로 설계된다는 것을 의미한다. 상기와 같이, 일 실시형태에 있어서, ~하기 위한, ~을 할 수 있는, 또는 ~하도록 동작 가능한이라는 문구의 사용은 장치, 로직부, 하드웨어, 및/또는 요소의 잠재적인 상태를 의미한다는 점에 유의해야 하고, 여기서 장치, 로직부, 하드웨어, 및/또는 요소는 동작하고 있지 않지만, 지정된 방식으로 장치를 사용할 수 있도록 설계된다.
본 명세서에서 사용되는 값은 수, 상태, 논리적 상태, 또는 이진 논리적 상태의 임의의 알려진 표현을 포함한다. 흔히, 논리 레벨, 논리 값, 또는 논리적 값의 사용을 단순히 이진 논리 상태를 나타내는 1 및 0이라고도 한다. 예를 들어, 1은 높은 논리 레벨을 의미하고 0은 낮은 논리 레벨을 의미한다. 일 실시형태에 있어서, 트랜지스터 또는 플래시 셀과 같은 기억 소자는 단일의 논리적 값 또는 다수의 논리적 값을 유지할 수 있다. 그러나, 컴퓨터 시스템에서 다른 값 표현이 사용되었다. 예를 들어, 십진수 10은 이진 값 1010 및 16진수 문자 A로 표현될 수도 있다. 따라서, 값은 컴퓨터 시스템에 유지될 수 있는 정보의 임의의 표현을 포함한다.
또한, 상태는 값 또는 값의 부분들로 표현될 수 있다. 실시예로서, 논리적 1(one)과 같은 제1 값은 디폴트 또는 초기 상태를 나타낼 수 있지만, 논리적 영(zero)과 같은 제2 값은 비-디폴트 상태를 나타낼 수 있다. 또한, 일 실시형태에 있어서, 재설정 및 설정이라는 용어는 제각기 디폴트 및 업데이트된 값 또는 상태를 의미한다. 예를 들어, 디폴트 값은 잠재적으로 높은 논리적 값, 즉 재설정을 포함하는 반면, 업데이트된 값은 잠재적으로 낮은 논리적 값, 즉 설정을 포함한다. 임의의 수의 상태를 나타내기 위해 값들의 임의의 조합을 이용할 수 있다는 점에 유의한다.
하기의 실시예들은 본 명세서에 따른 실시형태들에 속한다. 실시예 1은, 복수의 엔트리를 저장― 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되며, 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하기 위한 메모리와, 회로를 포함하는 산술 엔진을 포함하되, 상기 산술 엔진은, 부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제1 엔트리를 선택하고, 부동 소수점 입력 값에서 제1 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 출력 값을 계산하는, 프로세서이다.
실시예 2는 실시예 1의 청구 대상을 포함할 수 있으며, 산술 엔진은 제2 부동 소수점 입력 값이 제2 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제2 엔트리를 선택하고, 제2 부동 소수점 입력 값에서 제2 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 제2 출력 값을 계산한다.
실시예 3은 실시예 1 내지 실시예 2 중 어느 하나의 청구 대상을 포함할 수 있으며, 평가된 멱급수 근사식은 a0 + a1x + a2x2이고, x는 부동 소수점 입력 값이며, a0, a1, 및 a2는 제1 엔트리의 계수 세트이다.
실시예 4는 실시예 1 내지 실시예 3 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 복수의 범위 중 제1 범위이고, 산술 엔진은 부동 소수점 입력 값을 복수의 범위의 복수의 개시 값과 비교함으로써 부동 소수점 입력 값이 제1 범위 내의 값이라고 판정한다.
실시예 5는 실시예 4의 청구 대상을 포함할 수 있으며, 메모리는 제2의 복수의 엔트리를 저장하고, 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되며, 복수의 제2 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함한다.
실시예 6은 실시예 1 내지 실시예 5 중 어느 하나의 청구 대상을 포함할 수 있으며, 제1 엔트리의 선택은 요청이 산술 엔진에 의해 실행 가능한 복수의 단항 함수 중 제1 단항 함수를 지정한다는 판정에 더 기초한다.
실시예 7은 실시예 6의 청구 대상을 포함할 수 있으며, 산술 엔진은 복수의 단항 함수 중 제2 단항 함수를 지정하는 요청에 응답하여 제2 부동 소수점 입력으로부터 가수를 추출하고, 제2 부동 소수점 입력의 지수 및 부호를 제외하고 추출된 가수에 대한 멱급수 근사식을 평가하고, 멱급수 근사식은 제2 부동 소수점 입력에 기초하여 메모리로부터 검색되는 계수들에 의해 정의된다.
실시예 8은 실시예 1 내지 실시예 7 중 어느 하나의 청구 대상을 포함할 수 있으며, 산술 엔진은 제2 부동 소수점 입력 값이 특수 사례에 대응한다고 판정하고 특수 사례에 대응하는 값을 출력한다.
실시예 9는 실시예 1 내지 실시예 8 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고, 산술 엔진은, 제2 부동 소수점 입력이 복수의 범위 중 제2 범위 내에 있다고 판정하고, 제2 범위가 상수 모드에서 동작하도록 지정되어 있다고 판정하며, 제2 범위와 연관되는 상수를 제2 출력 값으로서 출력한다.
실시예 10은 실시예 1 내지 실시예 9 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고, 산술 엔진은, 제2 부동 소수점 입력이 복수의 범위 중 제2 범위 내에 있다고 판정하고; 제2 범위가 아이덴티티 모드에서 동작하도록 지정되어 있다고 판정하며, 제2 부동 소수점 입력을 제2 출력 값으로서 출력한다.
실시예 11은, 복수의 엔트리를 저장― 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되며, 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하는 단계와, 부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제1 엔트리를 선택하는 단계와, 부동 소수점 입력 값에서 제1 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 출력 값을 계산하는 단계를 포함하는 방법이다.
실시예 12는 실시예 11의 청구 대상을 포함할 수 있으며, 방법은 제2 부동 소수점 입력 값이 제2 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제2 엔트리를 선택하는 단계와, 제2 부동 소수점 입력 값에서 제2 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 제2 출력 값을 계산하는 단계를 더 포함한다.
실시예 13은 실시예 11 내지 실시예 12 중 어느 하나의 청구 대상을 포함할 수 있으며, 평가된 멱급수 근사식은 a0 + a1x + a2x2이고, x는 부동 소수점 입력 값이며, a0, a1, 및 a2는 제1 엔트리의 계수 세트이다.
실시예 14는 실시예 11 내지 실시예 13 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 복수의 범위 중 제1 범위이고, 방법은 부동 소수점 입력 값을 복수의 범위의 복수의 개시 값과 비교함으로써 부동 소수점 입력 값이 제1 범위 내의 값이라고 판정하는 단계를 더 포함한다.
실시예 15는 실시예 14의 청구 대상을 포함할 수 있으며, 방법은 제2의 복수의 엔트리를 저장하는 단계를 더 포함하고, 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되고, 복수의 제2 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함한다.
실시예 16은 실시예 11 내지 실시예 15 중 어느 하나의 청구 대상을 포함할 수 있으며, 제1 엔트리의 선택은 요청이 산술 엔진에 의해 실행 가능한 복수의 단항 함수 중 제1 단항 함수를 지정한다는 판정에 더 기초한다.
실시예 17은 실시예 16의 청구 대상을 포함할 수 있으며, 방법은 복수의 단항 함수 중 제2 단항 함수를 지정하는 요청에 응답하여 제2 부동 소수점 입력으로부터 가수를 추출하는 단계와, 제2 부동 소수점 입력의 지수 및 부호를 제외하고 추출된 가수에 대한 멱급수 근사식을 평가하는 단계를 더 포함하고, 멱급수 근사식은 제2 부동 소수점 입력에 기초하여 메모리로부터 검색되는 계수들에 의해 정의된다.
실시예 18은 실시예 11 내지 실시예 17 중 어느 하나의 청구 대상을 포함할 수 있으며, 방법은 제2 부동 소수점 입력 값이 특수 사례에 대응한다고 판정하는 단계 및 특수 사례에 대응하는 값을 출력하는 단계를 더 포함한다.
실시예 19는 실시예 11 내지 실시예 18 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고, 방법은, 제2 부동 소수점 입력이 복수의 범위 중 제2 범위 내에 있다고 판정하는 단계와, 제2 범위가 상수 모드에서 동작하도록 지정되어 있다고 판정하는 단계와, 제2 범위와 연관되는 상수를 제2 출력 값으로서 출력하는 단계를 더 포함한다.
실시예 20은 실시예 11 내지 실시예 19 중 어느 하나의 청구 대상을 포함할 수 있으며, 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고, 방법은, 제2 부동 소수점 입력이 복수의 범위 중 제2 범위 내에 있다고 판정하는 단계와, 제2 범위가 아이덴티티 모드에서 동작하도록 지정되어 있다고 판정하는 단계와, 제2 부동 소수점 입력을 제2 출력 값으로서 출력하는 단계를 더 포함한다.
실시예 21은, 복수의 단항 함수의 구성을 지정하기 위해 복수의 구성 레지스터를 포함하는 제1 메모리와, 복수의 단항 함수 중 제1 단항 함수와 연관되는 복수의 엔트리를 저장― 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되고, 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하기 위한 제2 메모리와, 산술 엔진을 포함하되, 상기 산술 엔진은 부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 복수의 엔트리 중 제1 엔트리를 선택하고; 또한 부동 소수점 입력 값에서 제1 엔트리의 계수 세트에 의해 정의되는 멱급수 근사식을 평가함으로써 출력 값을 계산하는, 시스템이다.
실시예 22는 실시예 21의 청구 대상을 포함할 수 있으며, 제2 메모리는 복수의 단항 함수 중 제2 단항 함수와 연관되는 제2의 복수의 엔트리를 저장하고, 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되며, 제2의 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함한다.
실시예 23은 실시예 21 내지 실시예 22 중 어느 하나의 청구 대상을 포함할 수 있으며, 시스템은 산술 엔진을 포함하는 매트릭스 처리 유닛을 더 포함한다.
실시예 24는 실시예 21 내지 실시예 23 중 어느 하나의 청구 대상을 포함할 수 있으며, 산술 엔진은 멱급수 근사식을 평가하기 위해 복수의 융합된 승산-가산기를 포함한다.
실시예 25는 실시예 21 내지 실시예 24 중 어느 하나의 청구 대상을 포함할 수 있으며, 시스템은 산술 엔진을 포함하는 프로세서에 통신 가능하게 결합되는 배터리, 프로세서에 통신 가능하게 결합되는 디스플레이, 또는 프로세서에 통신 가능하게 결합되는 네트워크 인터페이스를 더 포함한다.
본 명세서 전체에서 "일 실시형태" 또는 "실시형태"라는 언급은 해당 실시형태와 관련하여 설명된 특정한 특징, 구조, 또는 특성이 본 개시물의 적어도 하나의 실시형태에 포함된다는 것을 의미한다. 따라서, 본 명세서 전체의 여러 곳에서 "일 실시형태에 있어서" 또는 "실시형태에 있어서"라는 문구가 나오지만, 이는 반드시 전부 동일한 실시형태를 의미하는 것은 아니다. 더욱이, 특정한 특징, 구조, 또는 특성은 하나 이상의 실시형태에서 임의의 적절한 방식으로 결합될 수 있다.
전술한 명세서에서는, 구체적인 예시적인 실시형태들을 참조하여 상세한 설명이 제공되었다. 그러나, 첨부된 청구항들에 제시된 바와 같은 본 개시물의 보다 넓은 정신 및 범위로부터 일탈함이 없이 다양한 수정 및 변경이 이루어질 수 있음은 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다. 더욱이, 전술한 실시형태 및 다른 예시적인 언어의 사용은 반드시 동일한 실시형태 또는 동일한 실시예를 의미하는 것은 아니며, 잠재적으로 동일한 실시형태뿐만 아니라 상이하고 구별적인 실시형태들을 의미할 수도 있다.
Claims (20)
- 프로세서로서,
복수의 엔트리를 저장― 상기 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되고, 상기 복수의 엔트리의 각각의 엔트리는 멱급수 근사식(power series approximation)을 정의하는 계수 세트를 포함함 ―하기 위한 메모리와,
회로를 포함하는 산술 엔진을 포함하되, 상기 산술 엔진은,
부동 소수점(floating point) 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 상기 복수의 엔트리 중 상기 제1 엔트리를 선택하고,
상기 부동 소수점 입력 값에서 상기 제1 엔트리의 계수 세트에 의해 정의되는 상기 멱급수 근사식을 평가함으로써 출력 값을 계산하는,
프로세서.
- 제1항에 있어서,
상기 산술 엔진은,
제2 부동 소수점 입력 값이 제2 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 상기 복수의 엔트리 중 상기 제2 엔트리를 선택하고,
상기 제2 부동 소수점 입력 값에서 상기 제2 엔트리의 계수 세트에 의해 정의되는 상기 멱급수 근사식을 평가함으로써 제2 출력 값을 계산하는,
프로세서.
- 제1항에 있어서,
상기 평가된 멱급수 근사식은 a0 + a1x + a2x2이고, 상기 x는 상기 부동 소수점 입력 값이며, a0, a1, 및 a2는 상기 제1 엔트리의 계수 세트인,
프로세서.
- 제1항에 있어서,
상기 범위는 복수의 범위 중 제1 범위이고,
상기 산술 엔진은 상기 부동 소수점 입력 값을 상기 복수의 범위의 복수의 개시 값(start values)과 비교함으로써 상기 부동 소수점 입력 값이 상기 제1 범위 내의 값이라고 판정하는,
프로세서.
- 제4항에 있어서,
상기 메모리는 제2의 복수의 엔트리를 저장하고, 상기 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되며, 상기 복수의 제2 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함하는,
프로세서.
- 제1항에 있어서,
상기 제1 엔트리의 선택은 요청이 상기 산술 엔진에 의해 실행 가능한 복수의 단항 함수 중 제1 단항 함수를 지정한다는 판정에 더 기초하는,
프로세서.
- 제6항에 있어서,
상기 산술 엔진은,
상기 복수의 단항 함수 중 제2 단항 함수를 지정하는 요청에 응답하여 제2 부동 소수점 입력으로부터 가수(mantissa)를 추출하고,
상기 제2 부동 소수점 입력의 지수(exponent) 및 부호를 제외하고 상기 추출된 가수에 대한 멱급수 근사식을 평가― 상기 멱급수 근사식은 상기 제2 부동 소수점 입력에 기초하여 상기 메모리로부터 검색되는 계수들에 의해 정의됨 ―하는,
프로세서.
- 제1항에 있어서,
상기 산술 엔진은 제2 부동 소수점 입력 값이 특수 사례(special case)에 대응한다고 판정하고 상기 특수 사례에 대응하는 값을 출력하는,
프로세서.
- 제1항에 있어서,
상기 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고,
상기 산술 엔진은,
제2 부동 소수점 입력이 상기 복수의 범위 중 제2 범위 내에 있다고 판정하고,
상기 제2 범위가 상수 모드(constant mode)에서 동작하도록 지정되어 있다고 판정하며,
상기 제2 범위와 연관되는 상수를 제2 출력 값으로서 출력하는,
프로세서.
- 제1항에 있어서,
상기 범위는 단항 함수와 연관되는 복수의 범위 중 제1 범위이고,
상기 산술 엔진은,
제2 부동 소수점 입력이 상기 복수의 범위 중 제2 범위 내에 있다고 판정하고,
상기 제2 범위가 아이덴티티 모드(identity mode)에서 동작하도록 지정되어 있다고 판정하며,
상기 제2 부동 소수점 입력을 제2 출력 값으로서 출력하는,
프로세서.
- 방법으로서,
복수의 엔트리를 저장― 상기 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되며, 상기 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하는 단계와,
부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 상기 복수의 엔트리 중 상기 제1 엔트리를 선택하는 단계와,
상기 부동 소수점 입력 값에서 상기 제1 엔트리의 계수 세트에 의해 정의되는 상기 멱급수 근사식을 평가함으로써 출력 값을 계산하는 단계를 포함하는,
방법.
- 제11항에 있어서,
제2 부동 소수점 입력 값이 제2 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 상기 복수의 엔트리 중 상기 제2 엔트리를 선택하는 단계와,
상기 제2 부동 소수점 입력 값에서 상기 제2 엔트리의 계수 세트에 의해 정의되는 상기 멱급수 근사식을 평가함으로써 제2 출력 값을 계산하는 단계를 더 포함하는
방법.
- 제11항에 있어서,
상기 평가된 멱급수 근사식은 a0 + a1x + a2x2이고, 상기 x는 상기 부동 소수점 입력 값이며, a0, a1, 및 a2는 상기 제1 엔트리의 계수 세트인,
방법.
- 제11항에 있어서,
제2의 복수의 엔트리를 저장― 상기 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되고, 상기 복수의 제2 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하는 단계를 더 포함하는,
방법.
- 제11항에 있어서,
상기 제1 엔트리의 선택은 요청이 산술 엔진에 의해 실행 가능한 복수의 단항 함수 중 제1 단항 함수를 지정한다는 판정에 더 기초하는,
방법.
- 시스템으로서,
복수의 단항 함수의 구성을 지정하기 위해 복수의 구성 레지스터를 포함하는 제1 메모리와,
상기 복수의 단항 함수 중 제1 단항 함수와 연관되는 복수의 엔트리를 저장― 상기 복수의 엔트리의 각각의 엔트리는 입력 값 범위의 한 부분과 연관되고, 상기 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하기 위한 제2 메모리와,
산술 엔진을 포함하되, 상기 산술 엔진은,
부동 소수점 입력 값이 제1 엔트리와 연관된 입력 값 범위의 한 부분 내의 값이라는 판정에 기초하여 상기 복수의 엔트리 중 상기 제1 엔트리를 선택하고,
상기 부동 소수점 입력 값에서 상기 제1 엔트리의 계수 세트에 의해 정의되는 상기 멱급수 근사식을 평가함으로써 출력 값을 계산하는,
시스템.
- 제16항에 있어서,
상기 제2 메모리는 상기 복수의 단항 함수 중 제2 단항 함수와 연관되는 제2의 복수의 엔트리를 저장― 상기 제2의 복수의 엔트리의 각각의 엔트리는 제2 입력 값 범위의 한 부분과 연관되고, 상기 제2의 복수의 엔트리의 각각의 엔트리는 멱급수 근사식을 정의하는 계수 세트를 포함함 ―하는,
시스템.
- 제16항에 있어서,
상기 산술 엔진을 포함하는 매트릭스 처리 유닛을 더 포함하는
시스템.
- 제16항에 있어서,
상기 산술 엔진은 상기 멱급수 근사식을 평가하기 위해 복수의 융합된 승산-가산기를 포함하는
시스템.
- 제16항에 있어서,
상기 산술 엔진을 포함하는 프로세서에 통신 가능하게 결합되는 배터리, 상기 프로세서에 통신 가능하게 결합되는 디스플레이, 또는 상기 프로세서에 통신 가능하게 결합되는 네트워크 인터페이스를 더 포함하는
시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/557,959 | 2019-08-30 | ||
US16/557,959 US11520562B2 (en) | 2019-08-30 | 2019-08-30 | System to perform unary functions using range-specific coefficient sets |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210028075A true KR20210028075A (ko) | 2021-03-11 |
Family
ID=68839315
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200077636A KR20210028075A (ko) | 2019-08-30 | 2020-06-25 | 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11520562B2 (ko) |
EP (1) | EP3786780B1 (ko) |
JP (1) | JP2021039730A (ko) |
KR (1) | KR20210028075A (ko) |
CN (1) | CN112445454A (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022015743A (ja) * | 2020-07-09 | 2022-01-21 | キヤノン株式会社 | 装置、方法、及びプログラム |
KR20220102824A (ko) | 2021-01-14 | 2022-07-21 | 에스케이하이닉스 주식회사 | 룩업 테이블을 이용하여 비선형 함수를 연산하는 반도체 장치 |
US20230072105A1 (en) * | 2021-08-31 | 2023-03-09 | Intel Corporation | Bfloat16 comparison instructions |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5331582A (en) | 1991-12-16 | 1994-07-19 | Pioneer Electronic Corporation | Digital signal processor using a coefficient value corrected according to the shift of input data |
US20040044710A1 (en) * | 2002-08-28 | 2004-03-04 | Harrison John R. | Converting mathematical functions to power series |
GB0411880D0 (en) | 2004-05-27 | 2004-06-30 | Imagination Tech Ltd | Method and apparatus for efficient evaluation of "table-based" mathematical functions |
US9411756B2 (en) * | 2012-06-18 | 2016-08-09 | Blackberry Limited | Function approximation circuitry |
US20150019604A1 (en) * | 2013-07-10 | 2015-01-15 | Texas Instruments Deutschland Gmbh | Function accelerator |
US20180081634A1 (en) * | 2016-09-22 | 2018-03-22 | Qualcomm Incorporated | Piecewise polynomial evaluation instruction |
US10169296B2 (en) | 2016-12-30 | 2019-01-01 | Intel Corporation | Distributed matrix multiplication for neural networks |
US20180188972A1 (en) | 2016-12-30 | 2018-07-05 | Intel Corporation | Matrix storage using data shifting memory |
EP4160449A1 (en) | 2016-12-30 | 2023-04-05 | Intel Corporation | Deep learning hardware |
US10949496B2 (en) | 2016-12-30 | 2021-03-16 | Intel Corporation | Dimension shuffling using matrix processors |
US10482155B2 (en) | 2016-12-30 | 2019-11-19 | Intel Corporation | Winograd algorithm on a matrix processing architecture |
US10228937B2 (en) | 2016-12-30 | 2019-03-12 | Intel Corporation | Programmable matrix processing engine |
US11748625B2 (en) | 2016-12-30 | 2023-09-05 | Intel Corporation | Distributed convolution for neural networks |
US10198401B2 (en) | 2016-12-30 | 2019-02-05 | Intel Corporation | Max pooling in a matrix processing architecture |
GB2572622B (en) * | 2018-04-05 | 2022-02-16 | Imagination Tech Ltd | Evaluating a mathematical function in a computational environment |
GB2580138B (en) * | 2018-12-21 | 2021-01-13 | Graphcore Ltd | Function approximation |
-
2019
- 2019-08-30 US US16/557,959 patent/US11520562B2/en active Active
-
2020
- 2020-06-22 JP JP2020106689A patent/JP2021039730A/ja active Pending
- 2020-06-22 EP EP20181387.0A patent/EP3786780B1/en active Active
- 2020-06-24 CN CN202010589937.2A patent/CN112445454A/zh active Pending
- 2020-06-25 KR KR1020200077636A patent/KR20210028075A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
EP3786780B1 (en) | 2023-06-07 |
US20190384575A1 (en) | 2019-12-19 |
JP2021039730A (ja) | 2021-03-11 |
US11520562B2 (en) | 2022-12-06 |
CN112445454A (zh) | 2021-03-05 |
EP3786780A1 (en) | 2021-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11645135B2 (en) | Hardware apparatuses and methods for memory corruption detection | |
US10503505B2 (en) | Read and write masks update instruction for vectorization of recursive computations over independent data | |
KR102471606B1 (ko) | 내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷 | |
JP7351060B2 (ja) | 浮動小数点データを圧縮するためのシステム | |
CN117349584A (zh) | 实行16位浮点矩阵点积指令的系统和方法 | |
CN112099852A (zh) | 可变格式、可变稀疏矩阵乘法指令 | |
US11055613B2 (en) | Method and apparatus for a binary neural network mapping scheme utilizing a gate array architecture | |
CN115421686A (zh) | 用于深度学习和其它算法的fp16-s7e8混合精度 | |
CN108885586B (zh) | 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令 | |
TW202334810A (zh) | 可中斷及可重啟矩陣乘法指令、處理器、方法和系統 | |
CN111767516A (zh) | 用于利用所选择的舍入来执行浮点加法的系统和方法 | |
US10135463B1 (en) | Method and apparatus for accelerating canonical huffman encoding | |
CN107003839B (zh) | 用于移位和乘法器的指令执行方法、处理器和系统 | |
KR20210028075A (ko) | 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 | |
CN112148251A (zh) | 跳过无意义的矩阵运算的系统和方法 | |
US10437562B2 (en) | Apparatus and method for processing sparse data | |
CN104823153B (zh) | 用于执行指令的处理器、归一化加法运算的方法、通信设备、机器可读介质、用于处理指令的设备和设备 | |
US20160378480A1 (en) | Systems, Methods, and Apparatuses for Improving Performance of Status Dependent Computations | |
JP5798650B2 (ja) | 短整数の乗算の数を減らすためのシステム、装置、および方法 | |
TW201732577A (zh) | 浮點加法低指令函數單元 | |
US12131250B2 (en) | Inner product convolutional neural network accelerator | |
US20190102671A1 (en) | Inner product convolutional neural network accelerator |