KR101020430B1 - 동적 범위 조정 부동 소수점 실행 유닛 - Google Patents
동적 범위 조정 부동 소수점 실행 유닛 Download PDFInfo
- Publication number
- KR101020430B1 KR101020430B1 KR1020090057261A KR20090057261A KR101020430B1 KR 101020430 B1 KR101020430 B1 KR 101020430B1 KR 1020090057261 A KR1020090057261 A KR 1020090057261A KR 20090057261 A KR20090057261 A KR 20090057261A KR 101020430 B1 KR101020430 B1 KR 101020430B1
- Authority
- KR
- South Korea
- Prior art keywords
- floating point
- operand
- execution unit
- instruction
- field
- Prior art date
Links
- 238000007667 floating Methods 0.000 title claims abstract description 268
- 238000000034 method Methods 0.000 claims description 22
- 230000008569 process Effects 0.000 claims description 13
- 230000004044 response Effects 0.000 claims description 10
- 238000004364 calculation method Methods 0.000 abstract description 3
- 230000015654 memory Effects 0.000 description 141
- 238000004891 communication Methods 0.000 description 130
- 238000012545 processing Methods 0.000 description 61
- 239000013598 vector Substances 0.000 description 38
- 239000000872 buffer Substances 0.000 description 15
- 238000010586 diagram Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 5
- 230000002457 bidirectional effect Effects 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 230000014616 translation Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 241000894006 Bacteria Species 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Images
Classifications
-
- 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
-
- 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
- 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/5443—Sum of products
-
- 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/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/382—Reconfigurable for different fixed word lengths
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Nonlinear Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Advance Control (AREA)
Abstract
부동 소수점 실행 유닛은 부동 소수점 계산을 위해 확장된 범위를 동적으로 제공하기 위하여 추가적인 지수 비트로 사용하기 위해 부동 소수점 값의 유효수 비트의 부분 집합을 선택적으로 용도 변경할 수 있다. 부동 소수점 피연산자의 유효수 필드는 제1 및 제2 부분을 포함하는 것으로 고려될 수 있는데, 여기서 제1 부분은 부동 소수점 값의 유효수를 표현하기 위하여 제2 부분과 결합될 수 있으며, 또는 확장된 범위를 제공하기 위해 부동 소수점 값의 지수를 표현하기 위하여 부동 소수점 피연산자의 지수 필드와 결합될 수 있다.
부동 소수점(floating point), 확장 범위(extended-range), 단일 정밀도(single precision), 2배 정밀도(double precision), 지수(exponent), 가수, 유효수(significand)
Description
본 발명은 일반적으로 데이터 처리에 관한 것으로서, 보다 구체적으로는 프로세서 아키텍쳐와 그 내부의 부동 소수점 실행 유닛들(floating point execution units)에 관한 것이다.
부동 소수점 실행 유닛은 복잡한 수학 연산의 처리를 가속시키기 위해 컴퓨터 프로세서 내에서 자주 사용된다. 부동 소수점 연산은 하나 또는 그 이상의 부동 소수점 값들을 사용하여 수학 연산을 수행하는 것과 관련된다. 부동 소수점 값은 일반적으로 지수(exponent)와 유효수(significand)의 조합으로 표시된다. 유효수(분수(fraction) 또는 가수(mantissa)로도 지칭될 수 있음)는 미리 정해진 정확도를 갖는 부동 소수점 값내의 숫자들(digits)을 나타내며, 지수는 부동 소수점 값을 위한 이진점(binary point)의 상대적인 위치를 나타낸다.
일반적인 부동 소수점 실행 유닛은 그가 지원하도록 설계된 부동 소수점 표준에 의해 정의되는 지수 범위 내에 맞는 산술 연산들을 수행하는 것으로 제한된다. 두 개의 널리 쓰이는 주요 부동 소수점 표준은 단일 정밀도 및 2배 정밀도 IEEE-754이다. 단일 정밀도 표준은 32비트를 사용하는데 반하여, 2배 정밀도 표준은 64비트를 사용한다. 단일 정밀도 표준은 부호(sign)를 표시하는데 1비트를 사용하고, 바이어스 지수(biased exponent)를 나타내는데 8비트를 사용하고, 유효수를 표시하는데 나머지 23비트를 사용한다. 이 표준은 단일 정밀 숫자가 대략 -2128에서 2128 범위 내에 있을 수 있도록 한다. 2배 정밀 표준은 바이어스 지수를 위해 11비트를 사용하기 때문에 휠씬 큰 범위의 부동 소수점 값들(약 -21024 및 21024)을 허용한다. 이에 더하여, 2배 정밀 표준은 유효수로 52비트를 포함하여, 실질적으로 훨씬 큰 정밀도를 제공한다.
부동 소수점 실행 유닛들은 스칼라 실행 유닛들 또는 벡터 실행 유닛들로 구현될 수 있다. 스칼라 실행 유닛들은 일반적으로 스칼라 부동 소수점 값들을 처리하는데 반하여, 벡터 실행 유닛들은 복수의 스칼라 부동 소수점 값들을 포함하는 벡터들을 처리한다. 벡터 부동 소수점 처리 유닛들은 여러 3D 그래픽 하드웨어 디자인에서 매우 인기가 많아졌는데, 이것은 3D 그래픽 처리에서 처리된 많은 데이터가 곧바로 벡터화(vectorizable)될 수 있기 때문이다(예를 들어, 공간내의 객체들의 좌표들은 3 또는 4 부동 소수점 값들로 자주 표현된다). 많은 일반적인 디자인에 있어서, 벡터 부동 소수점 실행 유닛들은 부동 소수점 벡터들 내의 워드(word)들을 처리하는데 4개의 단일 정밀도 부동 소수점 유닛들을 사용할 것인데, 이것은 3D 그래픽내의 대부분의 산술 연산이 일반적으로 단일 정밀도 범위 내에서 이루어지기 때문이다. 그러나, 몇몇 상황에서는 단일 정밀도 부동 소수점 값들은 몇몇 연산들에 대해서는 충분하지 못할 수 있으며, 2배 정밀도 산술 연산이 필요할 수 있다.
2배 정밀도 부동 소수점 실행 유닛들은 보다 넓은 범위 산술 연산을 다루는데 보다 신축적이기는 하나, 2배 정밀도 부동 소수점 값들을 처리하는데 필요한 추가 회로로 인해 전력 소비, 성능 및 칩상의 공간 등과 관련하여 많은 비용을 지불해야 할 수도 있다. 일반적으로, 4 워드 2배 정밀도 부동 소수점 벡터 실행 유닛은 단일 정밀도 유닛에 비하여 약 2.5 내지 3배의 회로 영역을 차지한다. 이에 더하여, 2배 정밀도 유닛들은 단일 정밀도 유닛들에 비해서 성능이 떨어지고, 전력 소비가 크다. 산술 연산이 단일 정밀도 표준에 따른 한계보다 너무 큰 범위를 갖는 경우에는 종종 2배 정밀도 스칼라 유닛(벡터 유닛이 아님)에 의해 연산이 수행되어야 하며, 이것은 성능을 크게 떨어뜨린다. 이에 더하여, 많은 일반적인 그래픽 처리 유닛들(GPU들)에서는, 칩상에 2배 정밀도 유닛들이 존재하지 않으며, 따라서 연산이 CPU에서 수행되어야 하는데, 이것은 성능을 더욱 더 떨어뜨린다.
그러나, 많은 상황에서, 특히 컴퓨터 그래픽 처리 상황에서, 2배 정밀도 부동 소수점 숫자들이 필요한 것은 그들이 제공하는 수적인 정밀도보다는 그들의 큰 지수 범위 때문에 필요한 경우가 많다는 것이 발견되었다. 예를 들어, 컴퓨터 게임 분야에 있어서, 게임 개발자가 크기가 상당히 변하는 3D 그래픽 장면내에 객체들을 위치시키고 스케일(scale)하고자 하는 경우가 있을 수 있다. 예를 들어, 시청자가 고속으로 행성 크기의 객체를 향해서 항해하는 우주선 내에 위치하는 장면을 상상해 보자. 카메라가 객체에 다가가면 다가갈수록 보다 자세한 세부사항이 관찰될 수 있다. 궁극적으로는, 카메라는 객체의 표면위에 직접 위치하게 되고 회로 또는 박테리아와 같은 미시적 세부 사항들에 초점을 맞추어 확대해 보여주기 시작할 수 있다. 개발자는 예술적 연출과 성능을 위해 이 장면이 연속적이고 측정 단위를 변경하지 않는 것을 원한다. 이와 같은 많은 경우에 있어서, 단일 정밀도 부동 소수점 값들은 필요한 범위를 제공하지 못한다.
그러므로, 부동 소수점 실행 유닛이 보다 정밀한 부동 소수점 실행 유닛이 사용되는 경우 있어야 할 추가 회로 없이도 위한 보다 넓은 범위의 부동 소수점 값들을 다룰 수 있도록 하는 능력을 제공하는 것에 대한 요구가 당업계에 존재한다.
본 발명은 부동 소수점 연산들을 위한 확장된 범위를 동적으로 제공할 수 있도록 선택적으로 부동 소수점 값내의 유효수 비트들의 일부분(subset)을 추가 지수 비트들로 용도변경(repurpose) 할 수 있는 부동 소수점 실행 유닛을 제공하여, 종래기술과 연관된 상술된 문제점들 및 다른 문제점들을 해결한다. 구체적으로, 부동 소수점 피연산자(operand)의 유효수 필드가 제1 및 제2 부분을 포함하는 것을 고려할 수 있으며, 제1 부분은 부동 소수점 값을 위한 유효수를 표현하도록 제2 부분과 연결될 수 있거나, 제1 부분은 확장된 범위를 제공하기 위해, 부동 소수점 값의 지수를 표현하도록 부동 소수점 연산자의 지수 필드와 연결될 수 있다.
본 발명의 일 측면에 부합하게, 회로 구성은 부동 소수점 연산자들을 수신하도록 구성되는 피연산자 입력을 포함하며, 여기서 피연산자 입력에 의해 수신되는 각 부동 소수점 연산자는 지수 필드와 제1 부분 및 제2 부분을 포함하는 유효수 필드로 구성될 수 있다. 회로 구성은 또한 연산자 입력에 결합되고 부동 소수점 명령들을 실행하는 동안에 연산자 입력으로부터 수신한 부동 소수점 연산자들을 처리하도록 구성되는 부동 소수점 실행 유닛을 포함한다. 부동 소수점 실행 유닛은 피연산자 입력에 의해 수신된 제1 부동 소수점 피연산자를 위한 제1 부동 소수점 명령어를, 제1 부동 소수점 피연산자의 지수 필드에 저장된 데이터를 지수로 사용하고 제1 부동 소수점 피연산자의 유효수 필드의 제1 및 제2 부분내에 저장된 데이터를 유효수로서 사용하기 위해 연결함으로써 실행하도록 구성된다. 부동 소수점 실행 유닛은 또한 피연산자 입력으로부터 수신한 제2 부동 소수점 피연산자를 위한 제2 부동 소수점 명령어를, 제2 부동 소수점 피연산자의 유효수 필드의 제1 부분과 지수 필드에 저장된 데이터를 지수로 사용하기 위해 연결하고 제2 부동 소수점 피연산자의 유효수 필드의 제2 부분내에 저장된 데이터를 유효수로서 사용함으로써 실행하도록 구성된다.
본 발명의 다른 측면에 따라, 부동 소수점 실행 유닛에서 부동 소수점 명령어를 실행하는 방법은, 제1 및 제2 부동 소수점 명령어를 수신하는 단계를 포함하며, 제1 부동 소수점 명령어는 제1 부동 소수점 피연산자를 식별하고, 제2 부동 소수점 명령어는 제2 부동 소수점 피연산자를 식별하여, 제1 및 제2 부동 소수점 피연산자 각각은 지수 필드 및 유효수 필드로 구성되며, 유효수 필드는 제1 부분 및 제2 부분을 포함한다. 제1 부동 소수점 피연산자의 지수 필드, 유효수 필드의 제1 부분 및 유효수 필드의 제2 부분은, 제2 부동 소수점 피연산자의 지수 필드, 유효수 필드의 제1 부분 및 유효수 필드의 제2 부분과 동일한 비트에 각각 맵핑된다. 본 방법은, 지수로서 제1 부동 소수점 피연산자의 지수 필드에 저장된 데이터를 사용하고 유효수로서의 사용을 위해 제1 부동 소수점 피연산자의 유효수 필드의 제1 및 제2 부분에 저장된 데이터를 연결시킴으로써 부동 소수점 실행 유닛에서 제1 부동 소수점 명령어를 실행하는 단계, 및 지수로서의 사용을 위해 제2 부동 소수점 피연산자의 유효수 필드의 제1 부분 및 지수 필드에 저장된 데이터를 연결하고 유효수로서 제2 부동 소수점 피연산자의 유효수 필드의 제2 부분에 저장된 데이터를 사용함으로써 부동 소수점 실행 유닛에서 제2 부동 소수점 명령어를 실행하는 단계를 포함한다.
본 발명을 특징짓는 이러한 장점 및 특징과 기타 장점 및 특징은 본 명세서에 첨부됨 특허청구범위에 열거되며, 이와 관련한 추가적인 부분을 형성한다. 그러나, 본 발명 및 그의 사용을 통해 얻어지는 장점 및 목적의 더 나은 이해를 위 해, 도면 및 이에 동반하는 설명 부분이 참조되어야 하며, 상기 설명 부분에서는 본 발명의 예시적인 실시예가 있다.
본 발명은, 2배 정밀도 수와 종종 연관되는 추가적인 회로 영역 및 성능 문제를 회피하면서도, 단일 정밀도 수와 비교할 때 훨씬 큰 범위의 수를 허용한다. 또한, 통상적으로 최소한의 회로 변경이 요구되며, 따라서 종래의 부동 소수점 파이프라인 내에 최소한의 또는 타이밍 문제를 가지고 구현될 수 있다.
본 발명에 따른 실시예들은 부동 소수점 수의 유효수 비트 또는 분수 부분(subset of fraction)을 선택적으로 추가적인 지수 비트로 간주하는 동적 범위 조정 부동 소수점 실행 유닛을 사용하며, 다른 지수 바이어스를 가정하여 증가한 부동 소수점 범위를 제공한다. 추가적으로, 올바른 유효수 비트를 부동 소수점 실행 유닛의 유효수 경로 내로 시프트하고 적절한 지수 바이어스를 사용하기 위해 특수 계산 명령어, 또는 대안적으로 특수 모드가 몇몇 실시예에서 정의될 수 있다. 또한, 몇몇 실시예에서는, 예컨대 과다한 오버플로우(overflow) 조건에 대응하여, 확장 범위 모드로의 자동 전환이 수행될 수 있다.
하드웨어 및 소프트웨어 환경
몇몇 시점을 통해 유사한 도면부호가 유사한 부분을 나타내는 도면을 보면, 도 1은 본 발명의 실시예들에 따른 데이터 처리에서 유용한 예시적인 컴퓨터(10)를 포함하는 예시적인 자동화된 연산 기계를 도시한다. 도 1의 컴퓨터(10)는 적어도 하나의 컴퓨터 프로세서(12; 또는 'CPU')와, 고속 메모리 버스(16) 및 버스 어댑터(18)를 통해 프로세서(12) 및 컴퓨터(10)의 다른 컴포넌트들에 연결되는 임의 추출 기억 장치(10)('RAM')을 포함한다.
RAM(14)에는, 어플리케이션 프로그램(20), 예컨대, 워드 프로세싱, 스프레드 시트, 데이터베이스 운영, 비디오 게임, 주식 시장 시뮬레이션, 원자 퀀텀 프로세스 시뮬레이션, 또는 다른 사용자-레벨 어플리케이션들과 같은 특정 데이터 처리를 수행하기 위한 사용자-레벨 컴퓨터 프로그램 명령어들의 모듈이 저장된다. 또한, 운영 체제(22)도 RAM(14)에 저장된다. 본 발명의 실시예들에 관련되어 유용한 운영 체제에는 유닉스(UNIXTM), 리눅스(LinuxTM), 마이크로소프트 윈도우즈 XP(Microsoft Windows XPTM), AIXTM, IMB의 i5/OSTM, 또는 본 기술분야의 당업자에게 가능한 기타 다른 운영체제가 포함된다. 도 1의 예에서의 운영 체제(22) 및 어플리케이션(20)은 RAM(14) 안에 도시되었지만, 이러한 소프트웨어의 많은 컴포넌트들은, 예컨대 디스크 드라이브(24)와 같은 비휘발성 메모리에도 저장된다.
이하에서 더 명확해질 바와 같이, 본 발명에 따른 실시예들은 네트워크-온-칩(Network On Chip: NOC) 집적 회로 장치, 또는 칩 내에 구현될 수 있으며, 이러한 것으로서, 컴퓨터(10)는 두개의 예시적인 NOC(비디오 어댑터(26) 및 코프로세서(28))를 포함하는 것으로 도시된다. 선택적으로 그래픽 어댑터라 불릴 수도 있는 NOC 비디오 어댑터(26)는 디스플레이 스크린 또는 컴퓨터 모니터와 같은 디스플 레이 장치(30)로의 그래픽 출력을 위해 특수 설계된 입출력(I/O) 어댑터의 일례이다. NOC 비디오 어댑터(26)는 고속 비디오 버스(32), 버스 어댑터(18) 및 고속 버스인 전면(front side) 버스(34)를 통해 프로세서(12)에 연결된다. NOC 코프로세서(28)는 버스 어댑터(18) 및 고속 버스인 전면 버스(34 및 36)를 통해 프로세서(12)에 연결된다. 도 1의 NOC 코프로세서는 예컨대 메인 프로세서(12)의 명령에 따른 특정 데이터 처리 작업을 가속하기 위해 최적화될 수 있다.
도 1의 예시적인 NOC 비디오 어댑터(26) 및 NOC 코프로세서(28)는 각각 집적 프로세서(IP) 블록, 라우터, 메모리 통신 제어기, 및 네트워크 인터페이스 제어기를 포함하는 NOC를 포함하며, 상세사항은 도 2 및 3과 관련하여 이하에서 더 자세하게 논의될 것이다. NOC 비디오 어댑터 및 NOC 코프로세서는 각각 병렬 처리를 사용하는 프로그램에 최적화되며, 또한 공유 메모리로의 신속한 임의 액세스를 요구한다. 그러나, 본 기술문서를 이용하는 본 기술분야의 당업자라면, 본 발명이 NOC 장치 및 장치 아키텍쳐 이외의 장치 및 장치 아키텍쳐에서도 구현될 수 있음을 이해할 것이다. 따라서 본 발명은 NOC 장치 내에서의 구현에 한정되는 것이 아니다.
도 1의 컴퓨터(10)는 확장 버스(40) 및 버스 어댑터(18)를 통해 프로세서(12) 및 컴퓨터(10)의 다른 컴포넌트들과 연결되는 디스크 드라이브 어댑터(38)를 포함한다. 디스크 드라이브 어댑터(38)는 디스크 드라이브(24)의 형태로 비휘발성 데이터 저장소를 컴퓨터(10)에 연결하며, 예컨대, IDE(Integrated Drive Electronics) 어댑터, SCSI(Small Computer System Interface) 어댑터, 및 본 기술 분야의 당업자에게 가능한 기타 어댑터를 사용하여 구현될 수 있다. 비휘발성 컴퓨터 메모리도, 광학 디스크 드라이브, 전기적으로 소거가능한 프로그램가능 읽기 전용 메모리(소위 'EEPROM' 또는 '플래시' 메모리), RAM 드라이브, 본 기술분야의 당업자에게 가능한 기타 장치로서 구현될 수 있다.
컴퓨터(10)는, 예컨대 컴퓨터 디스플레이 스크린과 같은 디스플레이 장치로의 출력 및 키보드와 마우스 같은 사용자 입력 장치(44)로부터의 사용자 입력을 제어하기 위한 소프트웨어 드라이버 및 컴퓨터 하드웨어를 통해 사용자-지향 입/출력을 구현하는 하나 이상의 입/출력(I/O) 어댑터(42)도 포함한다. 또한, 컴퓨터(10)는 다른 컴퓨터(48)와의 데이터 통신 및 데이터 통신 네트워크(50)와의 데이터 통신을 위한 통신 어댑터(46)를 포함한다. 이러한 데이터 통신은, RS-232 접속을 통해서, USB(Universal Serial Bus)와 같은 외부 버스를 통해서, IP 데이터 통신 네트워크와 같은 데이터 통신 네트워크를 통해서, 그리고 본 기술분야의 당업자에게 가능한 다른 방식을 통해서 직렬적으로 수행될 수 있다. 통신 어댑터는 데이터 통신의 하드웨어 레벨을 구현하며, 이를 통해 한 컴퓨터가 직접 또는 데이터 통신 네트워크를 통해 데이터 통신을 다른 컴퓨터로 전송한다. 컴퓨터(10)에서 사용하기에 적절한 통신 어댑터의 예에는, 유선 다이얼-업 통신, 유선 데이터 통신 네트워크 통신을 위한 이더넷(IEEE 802.3) 어댑터, 및 무선 데이터 통신 네트워크 통신을 위한 802.11 어댑터가 포함된다.
추가적인 설명으로서, 도 2는 본 발명의 실시예에 따른 예시적인 NOC(102)의 기능 블록도를 열거한다. 도 2의 NOC는 '칩'(100) 상에, 즉 집적 회로 상에 구현 된다. NOC(102)는, 상호접속된 노드로 그룹화되는 집적 프로세서('IP') 블록(104), 라우터(110), 메모리 통신 제어기(106) 및 네트워크 인터페이스 제어기(108)를 포함한다. 각각의 IP 블록(104)은 메모리 통신 제어기(106) 및 네트워크 인터페이스 제어기(108)를 통해 라우터(110)에 적합화된다. 각각의 메모리 통신 제어기는 IP 블록 및 메모리 간의 통신을 제어하며, 각각의 네트워크 인터페이스 제어기(108)는 라우터(110)를 통해 IP 블록 간(inter-IP block) 통신을 제어한다.
NOC(102)에서, 각각의 IP 블록은 NOC 내의 데이터 처리를 위한 빌딩 블록으로 사용되는 동기화 또는 비동기화 로직 설계의 재사용가능 유닛을 나타낸다. 'IP 블록'이라는 용어는, 개체에 의해 소유되는, 즉 반도체 회로의 다른 사용자 또는 설계자에게 라이센스되는 개체의 지적 재산인 설계으로서의 IP 블록을 실질적으로 가리키는 '지적 재산 블록'이라는 의미로 때때로 확장된다. 그러나, 본 발명의 범위에서는, IP 블록이 임의의 특정 소유가 될 필요가 없으며, 따라서 본 명세서에서는 위의 용어는 항상 '집적 회로 블록'으로 확장된다. 여기서 특정하는 바와 같이, IP 블록은 지적 재산의 대상일 수도 아닐수도 있는 로직 셀의 재사용가능 유닛 또는 칩 레이아웃 설계이다. IP 블록은 ASIC 칩 설계 또는 FPGA 로직 설계로 형성될 수 있는 로직 코어이다.
한 가지 비유를 통하여 IP 블록을 설명하자면, NOC 설계에 있어서의 IP 블록은, 컴퓨터 프로그래밍에 있어서의 라이브러리, 또는 PCB 설계에 있어서의 개별적인 집적 회로 컴포넌트와 같다. 본 발명의 실시예에 따른 NOC에서 IP 블록은, 일 반적인 게이트 네트리스트(generic gate netlists)로서, 또는 완전한 특수 마이크로프로세서나 범용 마이크로프로세서로서, 또는 당업자가 잘 알고 있는 기타 여러 방법에 의해서 구현될 수 있다. 네트리스트는 IP 블록의 논리적 기능에 대한 불-대수 표현(Boolean-algebra representation) (게이트, 표준 셀)으로서, 고수준 프로그램 어플리케이션을 위한 어셈블리-코드 리스팅과 유사하다. NOC는, 예컨대 베릴로그(Verilog) 또는 VHDL과 같은 하드웨어 기술 언어로 기술되는, 조합 가능한 형태(synthesizable form)로 구현될 수도 있다. 네트리스트 및 조합 가능한 구현뿐만 아니라, NOC는 또한 저수준의 물리적인 기술(physical descriptions)로 제공될 수도 있다. SERDES, PLL, DAC, ADC 등과 같은 아날로그 IP 블록 구성요소는 GDSII와 같은 트랜지스터-레이아웃 포맷으로 배포될 수 있다. IP 블록의 디지털 구성요소 또한 종종 레이아웃 포맷으로 제공되기도 한다. 본 발명에 따라 구현된 다른 로직 회로뿐만 아니라 IP 블록 또한 컴퓨터 데이터 파일의 형태로 배포될 수 있다는 것을 이해할 것이며, 예컨대 이러한 로직을 구현하는 회로 구성의 기능 및/또는 레이아웃을 여러 세부적인 수준으로 정의하는 로직 정의 프로그램 코드의 형태로 배포될 수 있다. 따라서, 완전한 기능을 하는 집적 회로 장치 및 이러한 장치를 이용하는 데이터 처리 시스템으로 구현된 회로 구성의 환경에서 본 발명을 설명할 것이지만, 본원 명세서에 개시된 내용을 참조할 수 있는 당업자라면, 본 발명에 따른 회로 구성은 여러 가지 형태의 프로그램 제품으로 배포될 수 있고, 본 발명은 실제 배포를 수행하기 위해 사용되는 컴퓨터 판독가능 매체 또는 신호 포함 매체(signal bearing media)의 특정 타입과 무관하게 동일하게 적용될 수 있다는 점을 이해할 것이다. 컴퓨터 판독가능 매체 또는 신호 포함 매체의 예로는, 휘발성 및 비휘발성 메모리 장치, 플로피 디스크, 하드디스크 드라이브, CD-ROM, (특히) DVD와 같은 물리적이고 기록 가능한 타입의 매체, 디지털 및 아날로그 통신 링크와 같은 전송형 매체(transmission type media) 등을 들 수 있으나, 이에 한정되는 것은 아니다.
도 2의 예에서, 각각의 IP 블록(104)은 메모리 통신 제어기(106)를 통해 라우터(110)에 적합화된다. 각각의 메모리 통신 제어기는 IP 블록과 메모리 사이에 데이터 통신을 제공하는데 적합하도록 구성된 동기식 및 비동기식 로직 회로의 집합이다. IP 블록과 메모리 사이의 이러한 통신의 예로는, 메모리 로드 명령어 및 메모리 저장 명령어 등을 들 수 있다. 메모리 통신 제어기(106)에 대해서는 도 3을 참조하여 보다 자세히 후술한다. 각각의 IP 블록(104)은, 네트워크 인터페이스 제어기(108)를 통해서 라우터(110)에 적합화되기도 하는데, 네트워크 인터페이스 제어기(108)는 라우터(110)를 통한 IP 블록(104) 간의 통신을 제어한다. IP 블록간 통신의 예로는, 병렬 어플리케이션(parallel application) 및 파이프라인 어플리케이션(pipelined applications)에서의 IP 블록들 사이에, 데이터 및 그 데이터를 처리하기 위한 명령어를 전달하는 메시지를 들 수 있다. 네트워크 인터페이스 제어기(108) 또한 도 3을 참조하여 보다 자세히 후술한다.
라우터(110) 및 이들 사이의 대응 링크(corresponding links; 118)는 NOC의 네트워크 동작을 구현한다. 링크(118)는 모든 라우터를 연결하는 물리적이고 병렬적인 와이어 버스 상에 구현되는 패킷 구조일 수 있다. 즉, 각각의 링크는 모든 헤더 정보 및 페이로드 데이터를 포함하는 데이터 스위칭 패킷 전체를 동시에 수용할 수 있을 만큼 충분히 넓은 와이어 버스 상에 구현될 수 있다. 만약 패킷 구조가, 예를 들어 8바이트의 헤더와 56바이트의 페이로드 데이터를 포함하는 64바이트를 포함할 경우, 각 링크의 범위를 정하는 와이어 버스는 64바이트 너비의 512개의 와이어일 수 있다. 또한, 각 링크는 양방향일 수 있는데, 만약 링크 패킷 구조가 64바이트를 포함하는 경우, 와이어 버스는 네트워크 내의 각 라우터와 그 이웃 각각 사이에 실제로 1024개의 와이어를 포함한다. 이러한 구현에서, 메시지는 하나 이상의 패킷을 포함할 수 있지만, 각 패킷은 와이어 버스의 폭에 정확히 들어 맞을 것이다. 이와 달리, 링크는 패킷의 일 부분만을 수용할 수 있는 폭을 가지는 와이어 버스 상에 구현될 수도 있는데, 이 경우 패킷은 복수의 비트(beats)로 분할되며, 결과적으로 링크가 16바이트의 폭 또는 128개의 와이어에 구현되는 경우 64바이트 패킷은 4개의 비트로 분할될 수 있다. 원하는 성능 특성과 실제의 물리적인 한계로 인하여, 여러 가지 구현에 따라 서로 다른 버스 폭이 사용될 수 있다는 점을 이해할 것이다. 만약 와이어 버스의 각 섹션과 라우터 사이의 연결을 포트로 지칭한다면, 각각의 라우터는, 네트워크 상에서의 네 방향의 데이터 전송을 위한 각각 하나의 포트와, 메모리 통신 제어기 및 네트워크 인터페이스 제어기를 통해 특정 IP 블록으로 라우터를 적합화하기 위한 다섯 번째 포트, 이렇게 다섯 개의 포트를 포함한다.
각각의 메모리 통신 제어기(106)는 IP 블록과 메모리 사이의 통신을 제어한다. 메모리는, 오프-칩 메인 RAM(off-chip main RAM; 112), 메모리 통신 제어 기(106)를 통해 IP 블록에 직접 연결된 메모리(114), IP 블록(116)으로서 사용 가능한 온-칩 메모리(on-chip memory) 및 온-칩 캐시를 포함할 수 있다. NOC(102)에서, 예컨대 온-칩 메모리(114, 116) 중 하나는 온-칩 캐시 메모리로서 구현될 수 있다. 이러한 모든 메모리 형태가 동일한 주소 공간, 물리적 주소, 또는 가상 주소 내에 배치될 수 있으며, IP 블록에 직접 부착된 메모리에 대해서도 마찬가지이다. 따라서 메모리 주소 지정된 메시지(memory addressed messages)는 IP 블록과의 관계에서 완전히 양방향일 수 있는데, 왜냐하면 이러한 메모리는 네트워크 내의 어디서나 임의의 IP 블록으로부터 직접 주소가 지정될 수 있기 때문이다. IP 블록 상의 메모리(116)는 그 IP 블록 또는 NOC 내의 임의의 다른 IP 블록으로부터 주소 지정될 수 있다. 메모리 통신 제어기에 직접 부착된 메모리(114)는 그 메모리 통신 제어기에 의해서 네트워크에 적합화된 IP 블록에 의해 주소 지정될 수 있으며, 또한 NOC 내의 어디서나 임의의 다른 IP 블록으로부터 주소 지정될 수 있다.
NOC(102)는, 본 발명의 실시예에 따른 NOC를 위한 두 가지 대안적인 메모리 아키텍처를 보여주는 두 개의 메모리 관리 유닛(MMU; 120 및 122)을 포함한다. MMU(120)는 IP 블록 내에 구현되고, IP 블록 내의 프로세서가 가상 메모리 내에서 동작할 수 있도록 하는 반면, NOC의 나머지 아키텍처 전체는 물리적인 메모리 주소 공간에서 동작하도록 한다. MMU(122)는 칩 밖에 구현되고, 데이터 통신 포트(124)를 통하여 NOC에 연결된다. 포트(124)는 NOC와 MMU 사이의 신호를 처리하는(conduct) 데에 필요한 핀과 다른 상호 접속(interconnections)뿐만 아니라, 메시지 패킷을 NOC 패킷 포맷으로부터 외부의 MMU(122)가 요구하는 버스 포맷으로 변 환하기에 충분한 능력(intelligence)을 포함한다. MMU가 외부 위치에 있다는 것은, 오프-칩 MMU(122)가 처리하는 오프-칩 메모리의 물리적인 주소로의 모든 변환을 이용하여, NOC의 모든 IP 블록 내의 모든 프로세서가 가상 메모리 주소 공간에서 동작할 수 있다는 것을 의미한다.
MMU(120, 122)를 사용하여 도시된 두 개의 메모리 아키텍처에 더하여, 데이터 통신 포트(126)는 본 발명의 실시예에서 사용될 수 있는 NOC들에서 유용한 제3 메모리 아키텍처를 도시한다. 포트(126)는 NOC(102)의 IP 블록(104)과 오프-칩 메모리(112) 사이에 직접 연결(direct connection)을 제공한다. 처리 경로에 MMU가 없는 경우, 이 아키텍처는 NOC의 모든 IP 블록에 의한 물리적 주소 공간을 활용하는 것을 제공한다. 양방향으로 주소 공간을 공유하는데 있어서, NOC의 모든 IP 블록은 포트(126)로 직접 연결되는 IP 블록을 통해 지향되는, 로드(loads) 및 저장을 포함하는 메모리 주소 지정된 메시지들에 의해 주소 공간의 메모리에 액세스할 수 있다. 포트(126)는 NOC와 오프-칩 메모리(112) 사이의 신호를 전달하기 위해 필요한 핀들 및 상호접속들을 포함할 뿐 아니라, 메시지 패킷을 NOC 패킷 포맷에서 오프-칩 메모리(112)에 의해 요구되는 버스 포맷으로 변환하기 위한 충분한 능력을 포함한다.
도 2의 예에서, IP 블록 중 하나가 호스트 인터페이스 프로세서(128)로 지정된다. 호스트 인터페이스 프로세서(128)는 NOC가 설치될 수 있는 호스트 컴퓨터(10)와 NOC 사이의 인터페이스를 제공하고, 예를 들어, NOC의 IP 블록들 사이에서 호스트 컴퓨터로부터의 데이터 처리 요청을 수신하고 발행하는(dispatch) 것을 포함하는, NOC 상의 다른 IP 블록들로의 데이터 처리 서비스를 제공한다. 예를 들어, 어느 NOC는 도 1과 관련하여 앞서 설명된 바와 같이 보다 대형의 컴퓨터(10) 상에 비디오 그래픽 어댑터(26) 또는 코프로세서(coprocessor; 28)를 구현할 수 있다. 도 2의 예에서, 호스트 인터페이스 프로세서(128)는 데이터 통신 포트(130)를 통해 보다 대형의 호스트 컴퓨터에 연결된다. 포트(130)는 NOC와 호스트 컴퓨터 사이의 신호를 전달하기 위해 필요한 핀들 및 상호접속들을 포함할 뿐 아니라, 메시지 패킷을 NOC 패킷 포맷에서 호스트 컴퓨터(10)에 의해 요구되는 버스 포맷으로 변환하기 위한 충분한 능력을 포함한다. 도 1의 컴퓨터의 NOC 코프로세서의 예에서, 그러한 포트는 NOC 코프로세서(28)의 링크 구조 및, NOC 코프로세서(28)와 버스 어댑터(18) 사이의 전면부 버스(front side bus; 36)에 대해 요구되는 프로토콜 사이에서 데이터 통신 포맷 변환을 제공한다.
다음으로, 도 3은 도면부호(132)에 집합적으로 도시된 NOC(102)의 IP 블록(104), 메모리 통신 제어기(106), 네트워크 인터페이스 제어기(108) 및 라우터(110) 내에 구현되는 컴포넌트들을 보다 상세히 도시하는 기능적 블록도이다. IP 블록(104)은 컴퓨터 프로세서(134) 및 I/O 기능성(I/O functionality; 136)을 포함한다. 이 예에서, 컴퓨터 메모리는 IP 블록(104)의 RAM(138)의 세그먼트에 의해 표시된다. 도 2와 관련하여 앞서 설명된 바와 같이, 메모리는 각각의 IP 블록 상의 콘텐츠가 NOC의 임의의 IP 블록으로부터 주소 지정이 가능하고(addressable) 액세스가 가능한 물리적 주소 공간의 세그먼트를 점유할 수 있다. 각각의 IP 블록의 프로세서(134), I/O 기능(136) 및 메모리(138)는 IP 블록을 일반적으로 프로그 래밍가능한 마이크로 컴퓨터(generally programmable microcomputers)로서 효율적으로 구현한다. 그러나, 앞서 설명된 바와 같이, 본 발명의 범위에서, 일반적으로 IP 블록은 NOC 내에서 데이터 처리를 위한 빌딩 블록으로 사용되는 동기적 또는 비동기적 논리의 재사용가능한 유닛을 표시한다. 따라서, IP 블록을 일반적으로 프로그래밍가능한 마이크로컴퓨터로서 구현하는 것은 설명의 목적을 위해 유용한 일반적인 실시예일 뿐, 본 발명을 그에 한정하는 것은 아니다.
도 3의 NOC(102)에서, 각각의 메모리 통신 제어기(106)는 복수의 메모리 통신 실행 엔진(140)을 포함한다. 각각의 메모리 통신 실행 엔진(140)은 네트워크와 IP 블록(104) 사이의 양방향 메모리 통신 명령어 흐름(141, 142, 144)을 포함하는, IP 블록(104)으로부터의 메모리 통신 명령어를 실행하도록 인에이블된다. 메모리 통신 제어기에 의해 실행되는 메모리 통신 명령어는 특정 메모리 통신 제어기를 통해 라우터에 적합한 IP 블록으로부터 발생할 뿐 아니라, NOC(102)의 임의의 장소에 있는 임의의 IP 블록(104)으로부터 발생할 수도 있다. 즉, NOC의 임의의 IP 블록은 메모리 통신 명령어를 생성하여, 그 메모리 통신 명령어를, 그 메모리 통신 명령어의 실행을 위한 다른 IP 블록과 연관된 다른 메모리 통신 제어기로 NOC의 라우터를 통하여 전송할 수 있다. 그러한 메모리 통신 명령어는, 예를 들어 변환 참조 버퍼 제어 명령어(translation lookaside buffer control instructions), 캐시 제어 명령어, 배리어 명령어(barrier instructions) 및 메모리 로드 및 저장 명령어를 포함할 수 있다.
각각의 메모리 통신 실행 엔진(140)은 다른 메모리 통신 실행 엔진들과 별개 로 그리고 병렬적으로 완전한 메모리 통신 명령어를 실행하도록 인에이블된다. 메모리 통신 실행 엔진들은 메모리 통신 명령어의 동시적 처리량에 최적화된 스케일러블 메모리 트랜잭션 프로세서를 구현한다. 메모리 통신 제어기(106)는 다수의 메모리 통신 명령어의 동시 실행을 위해 동시에 실행될 수 있는 다수의 메모리 통신 실행 엔진(140)을 지원한다. 새로운 메모리 통신 명령어는 메모리 통신 제어기(106)에 의해 메모리 통신 엔진(140)에 할당되고, 메모리 통신 실행 엔진(140)은 다수의 응답 이벤트를 동시에 받아들일 수 있다. 이 예에서, 모든 메모리 통신 실행 엔진들(140)은 동일하다. 따라서, 메모리 통신 제어기(106)에 의해 동시에 핸들링될 수 있는 메모리 통신 명령어의 수를 조절하는(scaling) 것은 메모리 통신 실행 엔진(140)의 수를 조절하는 것에 의해 구현된다.
도 3의 NOC(102)에서, 각 네트워크 인터페이스 제어기(108)는 라우터들(110)을 통한 IP 블록들(104) 간의 통신을 위하여 통신 명령어들을 명령 포맷(command format)에서 네트워크 패킷 포맷으로 변환하도록 인에이블된다. 통신 명령어들은 IP 블록(104) 또는 메모리 통신 제어기(106)에 의해 명령 포맷으로 공식화되고, 명령 포맷으로 네트워크 인터페이스 제어기(108)에 제공될 수 있다. 명령 포맷은 IP 블록(104) 및 메모리 통신 제어기(106)의 아키텍처 레지스터 파일(architectural register files)을 따르는 원시 포맷(native format)일 수 있다. 네트워크 패킷 포맷은 전형적으로 네트워크의 라우터(110)를 통한 전송에 필요한 포맷이다. 이러한 메시지 각각은 하나 이상의 네트워크 패킷들로 이루어진다. 네트워크 인터페이스 제어기 내에서 명령 포맷으로부터 패킷 포맷으로 변환된 이러한 통신 명령어들 의 예로는, IP 블록들 및 메모리 사이에서의 메모리 로드 명령어 및 메모리 저장 명령어들이 포함된다. 이러한 통신 명령어에는, 병렬 어플리케이션과 파이프라인 어플리케이션에서의 IP 블록들 사이에, 데이터 및 그 데이터를 처리하기 위한 명령어를 전달하는 메시지를 IP 블록들 사이에 전송하는 통신 명령어가 포함될 수 있다.
도 3의 NOC(102)에서, 각 IP 블록은 IP 블록의 메모리 통신 제어기를 통해 메모리로부터 및 메모리로, 그리고 네트워크 인터페이스 제어기를 통해 네트워크로, 메모리 주소 기반 통신(memory-address-based communications)을 전송하도록 인에이블된다. 메모리 주소 기반 통신은 IP 블록의 메모리 통신 제어기의 메모리 통신 실행 엔진에 의해 실행되는 로드 명령어 또는 저장 명령어와 같은 메모리 액세스 명령어이다. 이러한 메모리 주소 기반 통신은 전형적으로 IP 블록에서 시작되어, 명령 포맷으로 공식화되고, 실행을 위해 메모리 통신 제어기로 전달된다.
많은 메모리 주소 기반 통신들은 메시지 트래픽으로 실행되는데, 이는 어떠한 IP 블록이 임의의 특정 메모리 주소 기반 통신을 시작하였는지에 관계없이, 액세스될 임의의 메모리가 물리적 메모리 주소 공간 어디에나 위치될 수 있고, 온-칩(on-chip)이거나 오프-칩(off-chip)일 수 있고, NOC 내 임의의 메모리 통신 제어기에 직접 부착되거나, 궁극적으로 NOC의 임의의 IP 블록을 통해 액세스될 수 있기 때문이다. 따라서, NOC(102)에서, 메시지 트래픽으로 실행되는 모든 메모리 주소 기반 통신들은, 명령 포맷으로부터 패킷 포맷으로 변환하고 메시지로 네트워크를 통해 통신하기 위해 메모리 통신 제어기로부터 연관된 네트워크 인터페이스 제어기 로 전달된다. 패킷 포맷으로 변환하면서, 네트워크 인터페이스 제어기는 메모리 주소 기반 통신에 의해 액세스될 메모리 주소 또는 주소들에 따라 패킷에 대한 네트워크 주소를 식별할 수도 있다. 메모리 주소 기반 메시지들은 메모리 주소들로 주소 지정된다. 각 메모리 주소는 네트워크 인터페이스 제어기에 의해 네트워크 주소, 전형적으로 물리적 메모리 주소들의 일부 영역에 대하여 책임이 있는 메모리 통신 제어기의 네트워크 위치로 맵핑된다. 메모리 통신 제어기(106)의 네트워크 위치는 자연적으로 그 메모리 통신 제어기의 연관된 라우터(110), 네트워크 인터페이스 제어기(108) 및 IP 블록(104)의 네트워크 위치가 된다. 각 네트워크 인터페이스 제어기 내의 명령어 변환 로직(105)은 NOC의 라우터들을 통해 메모리 주소 기반 통신들을 전송할 목적으로 메모리 주소들을 네트워크 주소들로 변환할 수 있다.
네트워크의 라우터(110)들로부터 메시지 트래픽을 수신한 후, 각 네트워크 인터페이스 제어기(108)는 메모리 명령어들에 대해 각 패킷을 검사(inspect)한다. 메모리 명령어를 포함하는 각 패킷은 추가적인 처리를 위해 패킷의 나머지 페이로드(payload)를 IP 블록으로 전송하기 전에 메모리 명령어를 실행하는, 수신 네트워크 인터페이스 제어기와 연관된 메모리 통신 제어기(106)로 전달된다. 이러한 방식으로, IP 블록이 특정 메모리 콘텐츠에 따라 메시지로부터 명령어들의 실행을 시작하기 전에 IP 블록에 의한 데이터 처리를 지원하도록 메모리 콘텐츠가 항상 준비된다.
도 3의 NOC(102)에서, 각 IP 블록(104)은 자신의 메모리 통신 제기(106)를 우회(bypass)하고, IP 블록 간(inter-IP block), 네트워크 주소 지정된 통신(146) 을 IP 블록의 네트워크 인터페이스 제어기(108)를 통해 네트워크로 직접 전송하도록 인에이블된다. 네트워크 주소가 지정된 통신은 네트워크 주소에 의해 다른 IP 블록으로 향하게 되는 메시지이다. 이러한 메시지는 파이프라인 어플리케이션에서의 작업 데이터, SIMD 어플리케이션에서의 IP 블록들 사이에서의 단일 프로그램 처리를 위한 다중의 데이터 등을 전송하는데, 이는 당업자가 생각할 수 있다. 이러한 메시지는 NOC의 라우터들을 통해 메시지가 향할 네트워크 주소를 아는 시작 IP 블록(originating IP block)에 의해 처음부터 네트워크 주소가 지정된다는 점에서 메모리 주소 기반 통신과 구별된다. 이러한 네트워크 주소가 지정된 통신은 IP 블록에 의해 I/O 함수들(136)을 통해 IP 블록의 네트워크 인터페이스 제어기에 명령 포맷으로 직접 전달되며, 이후 네트워크 인터페이스 제어기에 의해 패킷 포맷으로 변환되고 NOC의 라우터들을 통해 다른 IP 블록으로 전송된다. 이러한 네트워크 주소 지정된 통신(146)은 쌍방향이며, NOC의 각 IP 블록으로 및 IP 블록으로부터 잠재적으로 진행하며, 임의의 특정 어플리케이션에서의 사용에 의존한다. 그러나, 각 네트워크 인터페이스 제어기는 이러한 통신을 연관된 라우터로부터 수신하고 연관된 라우터로 전송하도록 인에이블되며, 각 네트워크 인터페이스 제어기는 연관된 메모리 통신 제어기(106)를 우회하여 이러한 통신을 직접 연관된 IP 블록으로부터 수신하고 연관된 IP 블록으로 전송하도록 인에이블된다.
또한, 도 3의 예에서의 각 네트워크 인터페이스 제어기(108)는 타입에 의해 네트워크 패킷들을 특징짓는 네트워크 상의 가상 채널(virtual channel)을 구현하도록 인에이블된다. 각 네트워크 인터페이스 제어기(108)는 NOC 상의 전송을 위해 라우터(110)로 패킷 폼의 명령을 전달하기 전에 각 통신 명령어를 타입에 따라 분류하고 네트워크 패킷 포맷의 필드에서의 명령어의 타입을 기록하는 가상 채널 구현 로직(148)을 포함한다. 통신 명령어 타입의 예에는 IP 블록 간 네트워크 주소 기반 메시지, 요청 메시지, 요청 메시지에 대한 응답, 캐시로 향하는 무효 메시지, 메모리 로드 및 저장 메시지, 및 메모리 로드 메시지에 대한 응답 등이 포함된다.
도 3의 예에서의 각 라우터(110)는 라우팅 로직(152), 가상 채널 제어 로직(154) 및 가상 채널 버퍼(156)를 포함한다. 라우팅 로직은 전형적으로 라우터(110), 링크(118), 및 라우터들 간의 버스 와이어에 의해 형성되는 네트워크에서의 데이터 통신을 위한 데이터 통신 프로토콜 스택을 구현하는 동기 및 비동기 로직의 네트워크로서 구현된다. 라우팅 로직(152)은, 당업자가 라우팅 테이블을 이용하여 오프-칩 네트워크 내에 결합시킬 수 있는 기능성을 포함하는데, 여기서 라우팅 테이블은, 적어도 몇몇의 실시예들에서, NOC에서 사용하기에는 너무 느리고 귀찮은 것으로 간주된다. 동기 및 비동기 로직의 네트워크로서 구현되는 라우팅 로직은 단일 클록 사이클만큼 신속하게 라우팅 결정을 하도록 구성될 수 있다. 본 예에서의 라우팅 로직은 라우터에서 수신되는 각 패킷을 전달하기 위한 포트를 선택함으로써 패킷들을 라우팅한다. 각 패킷은 패킷이 라우팅될 네트워크 주소를 포함한다.
앞서 메모리 주소 기반 통신을 설명하면서, 각 메모리 주소는 네트워크 인터페이스 제어기에 의해 메모리 통신 제어기의 네트워크 위치, 네트워크 주소로 맵핑되는 것으로 설명되었다. 메모리 통신 제어기(106)의 네트워크 주소는 자연히 그 메모리 통신 제어기의 연관된 라우터(110), 네트워크 인터페이스 제어기(108) 및 IP 블록(104)의 네트워크 위치이기도 하다. 따라서, IP 블록 간 또는 네트워크 주소 기반 통신에서, 어플리케이션 레벨 데이터 처리에 있어서 네트워크 주소를 NOC의 라우터, 링크 및 버스 와이어에 의해 형성되는 네트워크 내의 IP 블록의 위치로 보는 것은 전형적이다. 도 2는 이러한 네트워크의 한 조직이, 각 네트워크 주소가 예컨대 메시(mesh)의 연관된 라우터, IP 블록, 메모리 통신 제어기 및 네트워크 인터페이스 제어기의 각 집합에 대한 유일한 식별자 또는 메시의 그러한 집합의 x, y 좌표로서 구현될 수 있는, 행과 열의 메시임을 도시하고 있다.
도 3의 NOC(102)에서, 각 라우터(110)는 둘 이상의 가상 통신 채널을 구현하며, 각 가상 통신 채널은 통신 타입에 의해 특징지어진다. 통신 명령어 타입 및 가상 채널 타입은 앞서 언급한 IP 블록 간 네트워크 주소 기반 메시지, 요청 메시지, 요청 메시지에 대한 응답, 캐시로 향하는 무효 메시지, 메모리 로드 및 저장 메시지, 메모리 로드 메시지에 대한 응답 등을 포함한다. 가상 채널을 지원하여, 도 3의 예에서의 각 라우터(110)는 가상 채널 제어 로직(154) 및 가상 채널 버퍼(156)도 포함한다. 가상 채널 제어 로직(154)은 할당된 통신 타입에 대하여 각 수신된 패킷을 검사하고, NOC 상의 이웃하는 라우터로 포트를 통해 전송하기 위해 그 통신 타입에 대한 발신(outgoing) 가상 채널 버퍼에 각 패킷을 위치시킨다.
각 가상 채널 버퍼(156)는 유한한 저장 공간을 가진다. 짧은 시간 주기 동안 많은 패킷들이 수신되는 경우, 가상 채널 버퍼는 더 이상의 패킷들이 버퍼에 넣어질 수 없도록 가득 찰 수 있다. 다른 프로토콜에서는, 버퍼가 가득 찬 가상 채 널에 도달하는 패킷들이 버려질 것이다. 그러나, 본 예에서의 각 가상 채널 버퍼(156)는, 가상 채널 제어 로직을 통해 주변의 라우터들에게 가상 채널에서 전송을 중지하라고, 즉 특정 통신 타입의 패킷의 전송을 중지하라고 알리도록 버스 와이어의 제어 신호로 인에이블된다. 하나의 가상 채널이 그렇게 중지되면, 다른 가상 채널들은 영향을 받지 않으며 전체 용량으로 동작을 계속할 수 있다. 제어 신호는 각 라우터를 통해 각 라우터의 연관된 네트워크 인터페이스 제어기(108)로 광범위하게 전송된다. 각 네트워크 인터페이스 제어기는 자신의 연관된 메모리 통신 제어기(106) 또는 자신의 연관된 IP 블록(104)으로부터 이러한 신호의 수신 후, 중지된 가상 채널에 대한 통신 명령어들을 수락하는 것을 거절하도록 구성된다. 이러한 방식으로, 가상 채널의 중지는 가상 채널을 구현하는 모든 하드웨어에, 시작 IP 블록에까지 광범위하게 영향을 미친다.
가상 채널에서 패킷 전송을 중지하는 것의 하나의 효과는 어떠한 패킷도 버려지지 않는다는 것이다. 예컨대 인터넷 프로토콜과 같은 어떠한 신뢰할 수 없는 프로토콜에서, 라우터가 패킷이 버려져야만 하는 상황에 직면했을 때, 도 3의 예에서의 라우터는 버퍼 공간이 다시 이용가능해 질 때까지 자신의 가상 채널 버퍼(156) 및 가상 채널 제어 로직(154)에 의해 가상 채널에서의 모든 패킷 전송을 중지하여, 패킷들을 버릴 필요를 제거할 수 있다. 따라서, 도 3의 NOC는 매우 얇은 층의 하드웨어로 고신뢰도의 네트워크 통신 프로토콜을 구현할 수 있다.
또한, 도 3의 예시적인 NOC는 온-칩 및 오프-칩 메모리 캐시들 사이에서 캐시 일관성(cache coherency)을 유지하도록 구성될 수 있다. 각 NOC는 각각이 동일 한 기초의 메모리 주소 공간에 대하여 동작하는 다중의 캐시를 지원한다. 예를 들어, 캐시는 IP 블록에 의해, 메모리 통신 제어기에 의해, 또는 NOC 외부의 캐시 제어기에 의해 제어될 수 있다. 도 2의 예에서의 온-칩 메모리(114, 116) 중 하나는 온-칩 캐시로 구현될 수도 있으며, 본 발명의 범위 내에서 캐시 메모리는 오프-칩으로도 구현될 수 있다.
도 3에 도시된 각 라우터(110)는 다섯 개의 포트, 즉 버스 와이어(118)를 통해 다른 라우터에 연결되는 네 개의 포트(158A-D)와, 네트워크 인터페이스 제어기(108) 및 메모리 통신 제어기(106)를 통해 각 라우터를 그 연관된 IP 블록(104)에 연결하는 제5의 포트(160)를 포함한다. 도 2 및 도 3의 도시로부터 알 수 있는 바와 같이, NOC(102)의 라우터(110)와 링크(118)는 각 라우터에서 수직 및 수평 포트들을 연결하는 수직 및 수평 링크들로 메시 네트워크(mesh network)를 형성한다. 도 3의 도시에서, 예컨대 포트(158A, 158C 및 160)는 수직 포트로 칭해지며, 포트(158B 및 158D)는 수평 포트로 칭해진다.
도 4는 명령어 유닛(IU; 162), 실행 유닛(XU; 164), 보조 실행 유닛(AXU; 166)에 분할된 처리 요소로서 구현된, 본 발명에 따른 IP 블록(104)의 하나의 예시적인 구현을 다른 방식으로 도시한다. 도시된 구현에서, IU(162)는 L1 명령어 캐시(iCACHE; 170)로부터 명령을 수신하는 복수의 명령어 버퍼(168)를 포함한다. 각각의 명령어 버퍼(168)는 복수의, 예컨대 네 개의 대칭 멀티쓰레드(SMT) 하드웨어 쓰레드 중 하나 전용으로 제공된다. 유효-실제 변환 유닛(effective-to-real translation unit; 172) (iERAT)이 iCACHE(170)에 연결되고, 복수의 쓰레드 인출 시퀀서(thread fetch sequencer; 174)로부터의 명령어 인출 요청(instruction fetch request)을 저순위 메모리(lower order memory)로부터 명령어를 추출하기(retrieval) 위한 실제 주소로 변환하기 위하여 사용된다. 각각의 쓰레드 인출 시퀀서(174)가 특정 하드웨어 쓰레드용으로 제공되고, 연관된 쓰레드에 의해서 실행될 명령어가 적절한 실행 유닛에 발행되기(dispatch) 위해 iCACHE로 확실히 인출되도록 하기 위해 사용된다. 도 4에도 도시된 바와 같이, 명령어 버퍼(168)에 인출된 명령어는 분기 예측 로직(branch prediction logic; 176)에 의해 모니터링될 수도 있으며, 이는 실행중인 쓰레드 내의 분기로부터 야기되는 명령어 캐시 미스를 최소화하기 위해 각각의 쓰레드 인출 시퀀서(174)에게 힌트를 제공한다.
IU(162)는 각각의 하드웨어 쓰레드용으로 제공된 의존성/발급 로직 블록(dependency/issue logic block; 178)을 포함하며, 명령어 버퍼(168)로부터 XU(164)로의 명령어의 발급을 제어하고 의존성을 해결한다. 나아가, 도시된 실시예에서, 별개의 의존성/발급 로직(180)이 AXU(166) 내에 제공되며, 따라서 여러 쓰레드에 의해 별개의 명령어들이 XU(164) 및 AXU(166)에 동시에 발급되도록 한다. 다른 실시예에서, 로직(180)이 IU(162)에 배치되거나, 또는 완전히 생략되어 로직(178)이 AXU(166)에 명령어를 발할 수도 있다.
XU(164)는, 고정 소수점 로직(184), 분기 로직(186), 및 로드/저장 로직(188)에 결합된 한 세트의 범용 레지스터(GPR's; 182)를 포함하는 고정 소수점 실행 유닛(fixed point execution unit)으로서 구현된다. 로드/저장 로직(188)은, dERAT 로직(192)에 의해 제공되는 유효-실제 변환과 함께 L1 데이터 캐시(dCACHE; 190)에 결합된다. XU(164)는 실질적으로 모든 명령어 집합, 예컨대 32b 또는 64b 파워 PC 명령어 집합(PowerPC instruction set)의 전부 또는 일부를 구현하도록 구성될 수 있다.
AXU(166)는, 하나 이상의 실행 블록(194)과 전용 의존성/발급 로직(180)을 포함하는 보조 실행 유닛으로서 동작한다. AXU(166)는 임의의 수의 실행 블록을 포함할 수 있고, 예컨대 부동 소수점 유닛, 또는 예컨대 암호화/복호화 유닛, 코프로세서, 벡터 처리 유닛, 그래픽 처리 유닛, XML 처리 유닛 등과 같은 하나 이상의 특수한 실행 유닛 등 실질적으로 모든 타입의 실행 유닛을 구현할 수 있다. 도시된 실시예에서, AXU(166)는 예컨대 AXU 아키텍처 상태(AXU architected state) 및 XU 아키텍처 상태(XU architected state) 사이의 직접적인 이동을 지원하기 위하여, XU(164)로의 고속 보조 인터페이스를 포함한다.
IP 블록(104)과의 통신은 NOC(102)에 연결된 네트워크 인터페이스 제어기(108)를 통해서 도 2와 관련하여 전술한 방법으로 관리될 수 있다. 메시지-기반 통신과 함께, 예컨대 L2 캐시 메모리를 액세스하기 위하여 주소-기반 통신이 제공될 수 있다. 예를 들어, 각각의 IP 블록(104)은 IP 블록들 사이에 노드 간 상호 통신을 처리하기 위해서 전용의 인-박스 및/또는 아웃-박스를 포함할 수 있다.
본 발명의 실시예는 도 1 내지 도 4와 관련하여 전술한 하드웨어 및 소프트웨어 환경 내에서 구현될 수 있다. 그러나, 본원 명세서에 개시된 내용을 참조할 수 있는 당업자라면, 본 발명은 다양한 환경에서 구현될 수 있으며, 본 발명의 진정한 사상과 범위를 벗어나지 않으면서도, 전술한 하드웨어 및 소프트웨어 환경에 다른 변경이 가해질 수 있다는 것을 이해할 것이다. 그러므로, 본 발명은 명세서에 설명한 특정 하드웨어 및 소프트웨어로 한정되지 않는다.
동적 범위 조정 부동 소수점 실행 유닛
이제 도 5를 참조하면, 도 5에는 본 발명에 따른 동적 범위 조정 부동 소수점 실행 유닛(202)을 포함하는 예시적인 처리 유닛(200)이 도시되어 있다. 처리 유닛(200)은 예컨대, 도 1 내지 도 4의 IP 블록(104)과 같은 IP 블록 내의 프로세서 코어로서 구현될 수 있다. 이와 달리, 처리 유닛(200)은 단일 또는 멀티 코어 마이크로프로세서 또는 마이크로컨트롤러를 포함하는, 명령어를 발급 및 실행하는 다른 프로세서 아키텍처로 구현될 수 있다.
동적 범위 조정 부동 소수점 실행 유닛(202)은 발급 로직(204)으로부터 부동 소수점 명령어를 수신하는 벡터 부동 소수점 실행 유닛으로서 구현된다. 발급 로직(204)은 도면부호(206)로 도시된, 복수의(N) 쓰레드로부터의 명령어를 발급할 수 있는 발급 선택 로직(208)을 포함한다. 발급 선택 로직(208)은 여러 쓰레드에 의한 명령어의 발급을 스케쥴링하도록 동작하고, 당업자들에게 일반적으로 알려진 방법으로 명령어들 사이의 의존성을 관리하기 위한 로직을 포함하는 것이 통상적이다. 복수의 실행 유닛(202)이 지원되는 경우, 발급 선택 로직(208)은 각 사이클 마다 복수의 실행 유닛에 복수의 명령어를 발급할 수도 있다. 하지만 몇몇 실시예에서, 단 하나의 실행 유닛만이 지원될 수 있고, 나아가 몇몇 실시예에서는 명령어의 멀티-쓰레드 발급이 지원되지 않을 수도 있다.
동적 범위 조정 부동 소수점 실행 유닛(202)은 발급 유닛(204)에 의해 실행 유닛에 발급된 명령어를 처리하고, 발급 로직(202)에 의해 발급된 명령어에 기초하여 레지스터 파일(210) 내에 저장된 데이터를 처리하여 대상 데이터를 다시 레지스터 파일에 저장할 수 있는 멀티-스테이지 실행 파이프라인(212)에 결합된 레지스터 파일(210)을 포함한다. 실행 유닛(202)은 실행 유닛, 예컨대 일반 부동 소수점 유닛, 또는 그래픽 처리 유닛, 암호화/복호화 유닛, 코프로세서, XML 처리 유닛 등과 같은 특수 실행 유닛 등 몇 가지 종류의 실행 유닛으로서 구현될 수 있으며, 벡터 또는 스칼라 기반 유닛 중 하나로도 구현될 수 있다. 또한, 몇몇 실시예에서, 본 발명에 따른 동적 범위 조정 부동 소수점 실행 유닛(202)은 단 하나의 처리 경로(processing lane)를 포함할 수 있다.
도 5에 개시된 구현에서, 예컨대 멀티-스테이지 실행 파이프라인(212)은, 예컨대 이미지 처리에 사용될 수 있는 벡터 부동 소수점 유닛으로서 구현될 수 있으며, 이는 발급 로직(204)에 의해 실행 유닛에 발급된 단일 명령어 복수 데이터(SIMD) 명령어를 처리한다. 레지스터 파일(210)은 복수의(예컨대, 128개의) 벡터 레지스터(214)를 포함하며, 이들 각각은 복수의(예컨대, 4) 워드를 포함한다. 선택된 레지스터에 부동 소수점 값을 기입하고, 선택된 레지스터들의 내용을 처리를 위해 파이프라인(212)에 출력하기 위하여, 복수의 레지스터 파일 입력 및 출력(도시 생략)이 제공된다. 처리를 위해 부동 소수점 벡터를 파이프라인에 제공하기 위하여, 레지스터 파일(210)과 멀티-스테이지 실행 파이프라인(212) 사이에 복수의 피연산자 입력(216)이 제공된다. 파이프라인(212)은, 발급 로직(204)에 의해 발급 된 명령에 기초하여 레지스터 파일(210) 내에 저장된 벡터를 처리하고, 레지스터 파일(210) 내의 벡터 레지스터에 대상 데이터를 저장할 수 있는 복수의(예컨대, 4개의) 처리 경로 또는 서브 유닛(218)을 포함한다.
실행 유닛(202)이 이미지 처리 응용에서 사용될 수 있는 부동 소수점 유닛으로서 구성되는 경우, 각각의 경로(218)는 부동 소수점 명령어를 처리하도록 구성된다. 다양한 종류의 부동 소수점 아키텍처가 대안적으로 사용될 수 있지만, 실행 유닛(202)은 A, B, 및 C로 표시되는 세 개의 벡터 피연산자를 연산할 수 있는 파이프라인 부동 소수점 실행 아키텍처(pipelined floating point execution architecture)를 포함한다. 벡터 연산을 위하여, 네 개의 32-bit 워드 벡터가 지원되며, 각각의 벡터 내의 워드는 X, Y, Z, 및 W로 표시되고, 그러므로 각각의 처리 경로(218)는 세 개의 피연산자 워드를 각 벡터로부터 하나씩 수신한다. 따라서, 예컨대 각각의 벡터로부터 X 워드를 처리하는 처리 경로(218)에 대하여, 그 처리 경로에 공급된 피연산자는 AX, BX, CX로 표시된다.
각각의 처리 경로(218)는 하나 이상의 다른 처리 경로와 병렬적으로 연산을 수행하도록 구성된다. 예를 들어, 각각의 처리 경로는 외적(cross product) 또는 내적(dot product) 연산을 수행하기 위하여 한 쌍의 피연산자를 곱할 수 있다. 벡터 유닛의 각기 다른 처리 경로 내에서 각기 다른 피연산자 쌍을 곱함으로써, 벡터 연산이 보다 빠르고 효율적으로 수행될 수 있다.
성능을 보다 더 개선시키기 위하여 각각의 처리 경로(218)도 파이프라이닝된다. 따라서, 각각의 처리 경로(218)는 피연산자에 대해 하나 이상의 연산을 수행 하기 위한 복수의 파이프라인 스테이지를 포함한다. 예를 들어, 제1 스테이지로서, 각각의 처리 경로는 피연산자 A와 C를 곱하기 위한 곱셈기(220)를 포함할 수 있다. 본 발명의 일 실시예에서, 도 5에 도시된 바와 같이 피연산자의 곱셈은 파이프라인의 제1 스테이지에서 수행될 수 있다.
각각의 처리 경로(218)는, 곱셈의 계산과 병렬적으로, 피연산자 B를 곱셈기(220)가 계산한 곱(product)과 정렬하기 위하여 정렬기(222)를 포함할 수도 있다. 비록 도 5에서 정렬이 동일한 파이프라인 스테이지에 도시되었지만, 당업자라면 다른 실시예에서는 곱셈과 정렬이 별개의 파이프라인에서 수행될 수 있다는 것을 이해할 것이다.
각각의 처리 경로(218)는 둘 이상의 피연산자를 덧셈하기 위한 덧셈기(224)도 포함할 수 있다. (도 5에 도시된) 일 실시예에서, 각각의 덧셈기(224)는, (섬(sum)과 캐리(carry)로 출력되는) 곱셈기(220)가 계산한 곱을 수신하여, 정렬기(220)에 의해 정렬된 피연산자 출력에 그 곱을 더하도록 구성될 수 있다. 그러므로, 각각의 처리 경로(218)는 곱셈-덧셈 명령어를 수행할 수 있도록 구성될 수 있다. 당업자라면 벡터 연산에서 곱셈-덧셈 명령어가 자주 수행된 다는 것을 이해할 것이다. 따라서, 수 개의 곱셈 덧셈 명령어를 병렬적인 경로에서 처리함으로써, 벡터 처리의 효율이 상당히 개선될 수 있다.
도 5에 도시된 바와 같이, 각각의 처리 경로(218)는 정규화 스테이지(normalizing stage) 및 반올림 스테이지(rounding stage)도 포함할 수 있다. 따라서, 각각의 처리 경로에 정규화기(normalizer; 226)가 제공될 수 있다. 정규 화기(226)는 계산된 값을 편리한 지수 형태로 표현하도록 구성될 수 있다. 예를 들어, 정규화기(226)가 연산의 결과 값으로 0.0000063을 수신할 수 있다. 정규화기(226)는, 이 값을 예컨대 6.3x10-6과 같이 좀 더 적합한 지수 형태로 변환할 수 있다. 반올림 스테이지는 계산된 값을 원하는 소수점 자리수로 반올림 할 수 있는 반올림기(rounder; 228)를 포함할 수 있다. 예를 들어, 결과에 단 세 자리의 소수점만을 원하는 경우, 계산된 값 10.5682349는 10.568로 반올림될 수 있다. 본 발명의 일 실시예에서, 반올림기(228)는 이 반올림기가 작동하도록 설계된 특정 정밀도(precision)의 부동 소수점 수의 최하위 수(least significant bits)를 반올림할 수 있다.
당업자라면 본 발명의 실시예가, 도 5에 도시되고 앞서 설명한 특정 파이프라인 스테이지, 컴포넌트, 및 컴포넌트 배열에 한정되지 않는다는 것을 이해할 것이다. 예를 들어, 정렬기(222)는 몇몇 실시예에서 피연산자 B, 곱셈기(220에 의해 계산된 곱, 또는 이들 모두를 정렬하도록 구성될 수 있다. 나아가, 본 발명의 실시예는 도 5에 도시된 특정 컴포넌트에 한정되지 않는다. 도시된 컴포넌트들의 임의의 조합, 및 선행-0 예측기(leading zero anticipators), 나눗셈기(dividers) 등의(다만, 이에 한정되는 것은 아님) 추가적인 컴포넌트가 본 발명에 따른 각각의 처리 경로(218)에 포함될 수 있다.
동적 범위 조정 부동 소수점 실행 유닛(202)은, 제1 타입의 부동 소수점 명령어의 실행 중에는 제1 부동 소수점 포맷이 사용되고, 제2 타입의 부동 소수점 명 령어의 실행 중에는 제2 부동 소수점 포맷이 사용되도록 복수의 부동 소수점 포맷을 지원한다. 도시된 실시예에서, 두 부동 소수점 포맷은 동일한 크기의 부동 소수점 값(예컨대, 32비트)에 기초하지만, 한 포맷에서 유효수 비트로 사용되는 비트의 부분이 다른 포맷에서는 지수 비트로 사용되도록 용도 변경되는 점에서 서로 다르다.
예를 들어, 도 6의 도면부호(240)에 도시된 바와 같이, 예시적인 일 실시예에서는, 확장 범위 부동 소수점 포맷(extended range floating point format)이 IEEE745 단일 정밀도 (비 확장) 부동 소수점 포맷과 유사하게 구성될 수 있다. IEEE745 단일 정밀도 포맷에서는, 8비트의 단일 정밀도(SP) 지수 필드 및 23비트의 SP 유효수 필드와 함께, 1 비트의 부호 필드가 제공된다. 확장 범위 부동 소수점 포맷은 여전히 총 32비트를 사용하지만, IEEE745의 유효수 필드는 제1 및 제2 부분(242, 244)으로 분할되어, 제1 부분은 SP 지수 필드와 연결되어 확장 범위(ER) 지수 필드를 위한 11비트를 제공하고, SP 유효수 필드의 제2 부분(244)에 있는 나머지 20비트는 ER 유효수 필드로 사용된다. 또한, 추가 지수 비트에 기초하여 지수 바이어스(exponent bias)는 십진수 1023이 되는데, 이는 잘 알려진 바와 같이 2배 정밀도 부동 소수점 값을 위해 사용되는 바이어스와 동일하다.
도시된 실시예에서, 단일 정밀도 포맷에 기초한 부동 소수점 명령어는 비 확장 범위 부동 소수점 명령어라고 지칭되는 반면, 확장 범위 포맷에 기초한 부동 소수점 명령어는 확장 범위 부동 소수점 명령어라고 지칭된다. 결과적으로, 실행 유닛(202)이 비 확장 범위 부동 소수점 명령어를 실행할 때, 피연산자로 제공되는 임 의의 부동 소수점 값을 디코딩하여, 지수 필드에 저장된 데이터를 지수로 사용하고, 유효수 필드의 제1 및 제2 부분에 저장된 데이터를 연결하여 유효수로 사용한다. 반면에, 실행 유닛(202)이 확장 범위 부동 소수점 명령어를 실행하는 경우에는, 피연산자로 제공된 임의의 부동 소수점 값을 디코딩하여, 지수 필드와 유효수 필드의 제1 부분에 저장된 데이터를 연결하여 지수로 사용하고, 유효수 필드의 제2 부분에 저장된 데이터를 유효수로 사용한다.
도시된 실시예에서 이용된 범위 확장 포맷은, 2배 정밀도 장치보다 훨씬 적은 회로 영역을 소비하면서도 단일 정밀도 유닛과 거의 같은 성능을 가지지만, 단일 정밀도의 수를 이용할 경우 보통 오버플로우(overflow) 하였을 계산을 수행 가능하게 한다. 또한, 일반적으로 이 포맷을 수용하기 위하여 추가적인 메모리 저장소가 필요하지 않다. 또한, 일반적으로 단일 정밀도 유닛에서 확장 범위 포맷을 지원하기 위해 필요한 회로 변경은 사실상 최소한이다.
예컨대 도 7은 지수 경로(exponent path; 252) 및 유효수 경로(significand path; 254)를 포함하는 예시적인 부동 소수점 실행 유닛(250)의 부분의 간략한 표현을 도시한 것이며, 이들은 각각 부동 소수점 값의 지수 및 유효수 부분에 적용되는 부동 소수점 처리 로직을 나타낸다. 이러한 표현에서는, 단 하나의 피연산자 입력만이 도시되었으나, 통상적으로 복수의 피연산자 입력 또한 지원된다는 것을 이해할 것이다. 통상 8비트 지수 경로를 포함하는 단일 정밀도 부동 소수점 유닛과는 달리, 부동 소수점 유닛(250)은 11비트의 지수 경로(252)를 포함한다. 그러나, 단일 정밀도 유닛과 실행 유닛(250) 모두 통상 23비트의 유효수 경로를 포함한 다.
비 확장 범위/단일 정밀도 모드 또는 확장 범위 모드 중 하나로 동작하도록 실행 유닛(250)의 모드를 제어하기 위하여, 확장 범위 모드 제어 로직 블록(256)이 사용된다. 블록(256)은, 지수 경로(252) 및 유효수 경로(254)에 각각 연결된 한 쌍의 멀티플렉서(258, 260)를 제어함으로써 이를 수행한다.
지수 경로에 있어서 멀티플렉서(258)는, "000b"가 최상위 비트로서 연결된 지수 필드에서 비트를 선택하여 사실상 8비트의 지수를 가지게 하거나(비 범위 확장 모드), 또는 유효수 필드의 제1 부분의 세 비트가 최하위 비트로서 연결된 지수 필드에서 비트를 선택하여 11비트의 지수를 가지게 한다(범위 확장 모드). 유효수 경로에 있어서 멀티플렉서(260)는 유효수 필드의 제1 및 제2 부분으로부터 23비트를 선택하거나(비 범위 확장 모드), 유효수 필드 내의 비트를 3비트 왼쪽으로 시프트하고 최하위 비트로서 값 "000b"를 시프트 인(shift in)하는 시프트 로직(262)의 출력을 선택한다(범위 확장모드). 유효수 경로(254)는 부호 필드도 수신하는데, 이는 두 모드 동안 변하지 않는다.
따라서, 예컨대 32비트 부동 소수점 값 "01011011110010111101000011100110"이 있을 때, 이 값을 단일 정밀도/비 확장 범위로 디코딩하면, 지수는 "00010110111"이 되고 유효수가 "1.0010111101000011100110"이 된다. 그러나 확장 범위 포맷에서 이 값은 지수가 "10110111100", 유효수가 "1.0111101000011100110000"으로 디코딩된다.
잘 알려진 바와 같이, 도시된 실시예에서, 포맷에 관계없이 부동 소수점 값 을 레지스터 파일(210) 내에 동일한 포맷으로 저장할 필요가 있을 수 있다. 따라서, 부동 소수점 실행 유닛의 유효수 경로에 의한 처리 전에 확장 범위 포맷의 부동 소수점 값의 유효수 비트들이 하나 이상의 비트만큼 왼쪽으로 시프트 되듯이, 레지스터 파일에 어떤 결과를 저장하기에 앞서서, 실행 유닛에 의해 출력된 임의의 부동 소수점 결과 값의 유효수 비트 또한 동일한 비트 수만큼 오른쪽으로 시프트 될 필요가 있을 수 있다.
예컨대, 도 5를 다시 참조하면, 실행 유닛(202)에서는, 멀티-스테이지 실행 파이프라인(212)이 대상 데이터(230)를 부동 소수점 벡터 결과의 형태로 출력한다. 실행 유닛이 확장 범위 부동 소수점 명령어를 처리할 때, 부동 소수점 값들의 유효수 비트들을 각각 좌우로 시프트하기 위해 도면부호(232) 및 도면부호 (234)로 도시된 시프트 로직이 실행 유닛(202)에 제공된다. 시프트 로직(234)은, 종래에 부동 소수점 실행 유닛에서 부동 소수점 결과 값이 그 다음의 부동 소수점 명령어에 의해 사용될 때 레지스터 파일을 우회하기 위하여 사용되는 우회 로직(bypass logic)과도 결합되며, 따라서 시프트 로직(234)은 대상 데이터(230)도 수신한다.
도 8은 시프트 로직(232 및 234) 내부를 보다 더 상세히 도시하고 있다. 이 도면에는 단 하나의 처리 경로(218)만이 도시되었으며, 보다 나은 이해를 위하여, (도 7과 관련하여 전술한 바 있는) 지수 경로, 유효수 경로, 및 지수 경로에 배치될 수 있는 별도의 및 연결 로직(concatenation logic)은 도시되지 않았다. 그러나 통상적으로 실행 유닛(202)에서는, 도 7과 관련하여 전술한 것과 유사한 11비트 지수 경로 및 연결 로직이 사용된다는 것을 이해할 것이다.
그러므로 시프트 로직(232)은 멀티플렉서(270)를 포함하며, 비 확장 범위 부동 소수점 벡터 결과에 대하여, 레지스터에 그대로 저장하기 위하여, 도면부호(230)에서의 부동 소수점 벡터 출력 결과의 해당 워드를 벡터 레지스터 파일(210)에 직접 전달한다. 그러나, 확장 범위 부동 소수점 벡터 결과에 대해서는, 해당하는 워드의 유효수 필드를 오른쪽으로 세 비트만큼 시프트(및 최하위 비트 3비트를 폐기)하여 지수 필드의 최하위 3비트가 유효수 필드의 제1 부분에 기입될 수 있도록, 오른쪽 시프트 로직(272)이 사용된다.
실행 유닛(202)이 세 개의 피연산자 벡터를 수신하는 경우, 시프트 로직(234)은, 비 확장 범위 부동 소수점 피연산자들에 대해 부동 소수점 벡터 피연산자로부터의 해당 워드를 그대로 전달하는 세 개의 멀티플렉서(274)를 포함한다. 하지만, 확장 범위 부동 소수점 피연산자들에 대해서는, 파이프라인의 유효수 경로에 맞게 유효수를 적절히 정렬하도록, 해당 워드의 유효수 필드를 왼쪽으로 세 비트만큼 시프트(및 최하위 비트로서 "000b"를 부가)하기 위해 왼쪽 시프트 로직(276)이 사용된다. 각각의 멀티플렉서(274)는 상응하는 우회 멀티플렉서(bypass multiplexer; 278)의 한 입력부로 출력하는데, 우회 멀티플렉서는, 당업자에게 잘 알려진 방식으로, 부동 소수점 피연산자 벡터로부터의 해당 워드 또는 부동 소수점 벡터 결과로부터의 해당 워드 중 하나를 통과시킨다.
확장 범위와 확장 범위 포맷의 부동 소수점 값 사이에서 동적 범위 조정 부동 소수점 실행 유닛이 전환될 수 있는 방식은 본 발명에 따른 여러 실시예들에서 각기 다를 수 있다. 예를 들어, 어플리케이션 개발자가 확장 범위 포맷 명령어의 사용 여부를 선택할 수 있도록, 비 확장 범위 및 확장 범위 포맷의 부동 소수점 명령어를 모두 이용하여 명령어 집합을 정의할 수 있다. 다른 실시예에서의 명령어는, 부동 소수점 명령어가 확장 범위 부동 소수점 명령어를 사용해야 하는지 여부를 정의하는 모드 비트 또는 2차 오피코드(opcodes)를 포함할 수 있다. 다른 실시예에서는, 예컨대 특수 레지스터(SPR)를 통하여 소프트웨어에 의해 동작 모드를 설정할 수 있어서, 어플리케이션 프로그램이 SPR에 기입함으로써 모드를 선택할 수 있다.
또 다른 실시예에서는, 모드 간 전환이 사실상 자동화될 수 있다. 예컨대, 일 실시예에서, 오버플로우 상태가 과도하게 많을 경우에 응답하여, 확장 범위 모드로 자동으로 전환하는 것이 바람직할 수 있다. 예를 들어, 도 9는 도 7의 확장 범위 모드 제어 로직(256) 내에 구현될 수 있는 루틴(280)을 도시한다. 루틴(280)에서는, 부동 소수점 명령어 오버플로우가 블록(282)에서 추적된다. 블록(284)은 오버플로우의 수가 임계치를 넘었는지 여부를 결정하고, 만약 그렇다면, 블록(286)에서 실행 유닛을 확장 범위 모드로 설정한다. 만약 오버플로우의 수가 임계치를 초과하지 않는다면, 실행 유닛은 블록(288)에서 비 확장 모드로 설정된다. 이어서, 블록(282)에서 오버플로우의 추적이 계속된다. 확장 범위 모드를 선택하는 기준은, 예컨대 임계치를 초과하는 오버플로우의 총 수, 임계치를 초과하는 오버플로우를 발생시키는 명령어의 백분율, 임계치를 초과하는 특정 시간 프레임 동안의 오버플로우의 수 등에 기초하여 선택되는 등, 여러 실시예에 따라 달라질 수 있음을 이해할 것이다.
그러므로 전술한 실시예들은, 2배 정밀도 수와 종종 연관되는 추가적인 회로 영역 및 성능 문제를 회피하면서도, 단일 정밀도 수와 비교할 때 훨씬 큰 범위의 수를 허용한다. 또한, 통상적으로 최소한의 회로 변경이 요구되며, 따라서 종래의 부동 소수점 파이프라인 내에 최소한의 또는 타이밍 문제를 가지고 구현될 수 있다.
본 발명의 진정한 사상 및 범주를 벗어나지 않으면서도, 도시된 실시예에 여러 가지 변경이 가해질 수 있다. 예를 들어, 유효수 필드의 제1 및 제2 부분 각각의 크기와, 지수 필드의 크기는 실시예마다 달라질 수 있으며, 본 발명은 특히 단일 정밀도 부동 소수점 값과 함께 사용하는 것만으로 한정되지 않는다. 또한, 구현에 따라 둘 이상의 부동 소수점 포맷이 지원될 수 있다. 본원 명세서에 개시된 내용을 참조할 수 있는 당업자에게는 다른 변경 사항들 또한 명백할 것이다. 그러므로, 본 발명은 특허청구범위에 의해 정의된다.
도 1은 본 발명의 실시예들에 따른 데이터 처리에서 유용한 예시적인 컴퓨터를 포함하는 예시적인 자동화된 컴퓨팅 장치의 블록도.
도 2는 도 1의 컴퓨터에서 구현되는 예시적인 NOC의 블록도.
도 3은 도 2의 NOC로부터의 노드의 예시적인 구현을 더욱 상세하게 도시한 블록도.
도 4는 도 2의 NOC로부터의 IP 블록의 예시적인 구현을 도시한 블록도.
도 5는 본 발명에 따른 동적 범위 조정 벡터 부동 소수점 실행 유닛을 포함하고 도 2의 NOC로부터의 IP 블록 내에 구현될 수 있는 처리 유닛의 블록도.
도 6은 도 5의 동적 범위 조정 벡터 부동 소수점 실행 유닛에서의 사용에 형식적으로 적합한(formatsuitable) 예시적인 확장 범위 부동 소수점 수(floating point number)의 블록도.
도 7은 도 5의 동적 범위 조정 벡터 부동 소수점 실행 유닛에서의 시프트 및 연결 로직의 예시적인 구현의 블록도.
도 8은 도 5의 동적 범위 조정 벡터 부동 소수점 실행 유닛에서의 처리 경로들(processing lanes) 중 하나의 블록도.
도 9는 도 7에서 참조되는 확장 범위 모드 제어 로직에서 구현될 수 있는 자동 확장 범위 모드 선택 루틴의 프로그램 흐름을 도시한 흐름도.
<도면의 주요부분에 대한 부호의 설명>
12: 프로세서
26: NOC 비디오 어뎁터
28: NOC 코프로세서
104: IP 블록
106: 메모리 통신 제어기
108: 네트워크 인터페이스 제어기
110: 라우터
258, 260: 멀티플렉서
Claims (10)
1) 레지스터 파일;
2) 단일 정밀도 부동 소수점 실행 유닛(single precision floating point execution unit);
3) 제1 시프트 로직;
4) 제2 시프트 로직; 및
5) 연결 로직(concatenation logic)
을 포함하며,
상기 레지스터 파일은 32비트 부동 소수점 값을 저장하도록 구성된 복수의 레지스터를 포함하고, 각각의 부동 소수점 값은, 1비트의 부호 필드, 8비트의 지수 필드(exponent field), 및 3비트의 제1 부분 및 20비트의 제2 부분을 포함하는 23비트의 유효수 필드(significand field)로 구성되며,
상기 단일 정밀도 부동 소수점 실행 유닛은, 상기 레지스터 파일에 결합되며, 상기 부동 소수점 실행 유닛에 의해 실행되는 제1 부동 소수점 명령어에 의해 식별되고 상기 레지스터 파일의 제1 소스 레지스터(first source register)에 저장된 제1 입력 부동 소수점 값을 처리하여, 상기 레지스터 파일의 제1 목적 레지스터(first destination register)에 제1 출력 부동 소수점 값을 저장하도록 구성되고,
상기 부동 소수점 실행 유닛에 의해 실행되는 제2 부동 소수점 명령어에 의해 식별되고 상기 레지스터 파일의 제2 소스 레지스터에 저장된 제2 입력 부동 소수점 값을 처리하여, 상기 레지스터 파일의 제2 목적 레지스터에 제2 출력 부동 소수점 값을 저장하도록 구성되며,
상기 부동 소수점 실행 유닛은 지수 경로(exponent path) 및 유효수 경로(significand path)를 포함하고,
상기 제1 부동 소수점 명령어는 비 확장 범위 부동 소수점 명령어(non-extended range floating point instruction)이고, 상기 제2 부동 소수점 명령어는 확장 범위 부동 소수점 명령어(extended range floating point instruction)이며,
상기 부동 소수점 실행 유닛은, 상기 제1 입력 부동 소수점 값의 상기 지수 필드에 저장된 데이터를 지수로 사용하고, 유효수로 사용하기 위해 상기 제1 입력 부동 소수점 값의 상기 유효수 필드의 상기 제1 및 제2 부분에 저장된 데이터를 연결함으로써(concatenating), 상기 제1 부동 소수점 명령어를 실행하도록 구성되고,
상기 부동 소수점 실행 유닛은, 지수로 사용하기 위해 상기 제2 입력 부동 소수점 값의 상기 지수 필드와 상기 유효수 필드의 상기 제1 부분에 저장된 데이터를 연결하고, 상기 제2 입력 부동 소수점 값의 상기 유효수 필드의 상기 제2 부분에 저장된 데이터를 유효수로 사용함으로써, 상기 제2 부동 소수점 명령어를 실행하도록 구성되며,
상기 부동 소수점 실행 유닛은, 제1 모드에서 상기 제1 부동 소수점 명령어를 실행하고, 제2 모드에서 상기 제2 부동 소수점 명령어를 실행하도록 구성되고,
상기 부동 소수점 실행 유닛은, 임계치에 도달한 오버플로우 상태들의 수에 응답하여 상기 제1 모드로부터 상기 제2 모드로 자동으로 전환하거나, 또는 특수 레지스터(special purpose register)에 저장된 데이터에 기초하여 상기 제1 모드와 상기 제2 모드 사이에서 전환하도록 구성되며,
상기 제1 시프트 로직은 상기 부동 소수점 실행 유닛의 상기 유효수 경로에 결합되고, 상기 레지스터 파일로부터 입력 부동 소수점 값을 수신하도록 구성되며,
상기 제1 시프트 로직은, 상기 제2 부동 소수점 명령어가 확장 범위 부동 소수점 명령어임에 기초하여 상기 제2 부동 소수점 명령어의 실행 중에 상기 제2 입력 부동 소수점 값의 상기 유효수 필드의 상기 제2 부분의 데이터를 왼쪽으로 세 비트만큼 선택적으로 시프트하도록 구성되고,
상기 제1 시프트 로직은, 상기 제1 부동 소수점 명령어가 비 확장 범위 부동 소수점 명령어임에 기초하여 상기 제1 입력 부동 소수점 값의 상기 유효수 필드를 그대로(unmodified) 전달하도록 더 구성되고,
상기 제2 시프트 로직은 상기 부동 소수점 실행 유닛의 상기 유효수 경로에 결합되고, 상기 부동 소수점 실행 유닛으로부터 출력 부동 소수점 값을 수신하도록 구성되며,
상기 제2 시프트 로직은, 상기 제2 부동 소수점 명령어가 확장 범위 부동 소수점 명령어임에 기초하여 상기 제2 부동 소수점 명령어의 실행 중에 상기 제2 출력 부동 소수점 값의 상기 유효수 필드의 상기 제2 부분의 데이터를 오른쪽으로 세 비트만큼 선택적으로 시프트하도록 구성되고,
상기 제2 시프트 로직은, 상기 제1 부동 소수점 명령어가 비 확장 범위 부동 소수점 명령어임에 기초하여 상기 제1 출력 부동 소수점 값의 상기 유효수 필드를 그대로 전달하도록 더 구성되며,
상기 연결 로직은 상기 부동 소수점 실행 유닛의 상기 지수 경로에 연결되고, 상기 제2 부동 소수점 명령어가 확장 범위 부동 소수점 명령어임에 기초하여 상기 제2 부동 소수점 명령어의 실행 중에 상기 제2 입력 부동 소수점 값의 상기 지수 필드와 상기 유효수 필드의 상기 제1 부분으로부터의 데이터를 연결하도록 구성되는, 회로 구성.
1) 피연산자 입력부(operand input); 및
2) 부동 소수점 실행 유닛
을 포함하고,
상기 피연산자 입력부는 부동 소수점 피연산자를 수신하도록 구성되고, 상기 피연산자 입력부에 의해 수신된 각각의 부동 소수점 피연산자는 지수 필드, 및 제1 부분과 제2 부분을 포함하는 유효수 필드로 구성되며,
상기 부동 소수점 실행 유닛은 상기 피연산자 입력부에 결합되고, 부동 소수점 명령어의 실행 중에 상기 피연산자 입력부로부터 수신된 부동 소수점 피연산자를 처리하도록 구성되며,
상기 부동 소수점 실행 유닛은, 제1 부동 소수점 피연산자의 상기 지수 필드에 저장된 데이터를 지수로서 사용하고, 유효수로 사용하기 위해 상기 제1 부동 소수점 피연산자의 상기 유효수 필드의 상기 제1 및 제2 부분에 저장된 데이터를 연결함으로써, 상기 피연산자 입력부에 의해 상기 제1 부동 소수점 피연산자가 수신된 제1 부동 소수점 명령어를 실행하도록 구성되고,
상기 부동 소수점 실행 유닛은, 지수로 사용하기 위해 제2 부동 소수점 피연산자의 상기 지수 필드와 상기 유효수 필드의 상기 제1 부분에 저장된 데이터를 연결하고, 상기 제2 부동 소수점 피연산자의 상기 유효수 필드의 상기 제2 부분에 저장된 데이터를 유효수로 사용함으로써, 상기 피연산자 입력부에 의해 상기 제2 부동 소수점 피연산자가 수신된 제2 부동 소수점 명령어를 실행하도록 구성되며,
상기 부동 소수점 실행 유닛은, 제1 모드에서 상기 제1 부동 소수점 명령어를 실행하고, 제2 모드에서 상기 제2 부동 소수점 명령어를 실행하도록 구성되고,
상기 부동 소수점 실행 유닛은, 임계치에 도달한 오버플로우 상태들의 수에 응답하여 상기 제1 모드로부터 상기 제2 모드로 자동으로 전환하거나, 또는 특수 레지스터에 저장된 데이터에 기초하여 상기 제1 모드와 상기 제2 모드 사이에서 전환하도록 구성되는, 회로 구성.
제2항에 있어서,
상기 피연산자 입력부에 의해 수신된 각각의 부동 소수점 피연산자는 32비트를 포함하고 단일 정밀도 부동 소수점 값을 저장하도록 구성되며, 각각의 부동 소 수점 피연산자는 1비트를 가지는 부호 필드를 포함하며, 각각의 부동 소수점 피연산자의 상기 지수 필드는 8비트를 포함하고, 각각의 부동 소수점 피연산자의 상기 유효수 필드의 상기 제1 부분은 3비트를 가지고, 각각의 부동 소수점 피연산자의 상기 유효수 필드의 상기 제2 부분은 20비트를 가지는, 회로 구성.
제2항에 있어서,
복수의 부동 소수점 레지스터를 포함하는 레지스터 파일을 더 포함하고,
상기 레지스터 파일은, 상기 부동 소수점 실행 유닛의 상기 피연산자 입력부에 결합된 출력부와 상기 부동 소수점 실행 유닛의 결과 출력을 수신하기 위해 결합된 입력부를 포함하는, 회로 구성.
제4항에 있어서,
상기 부동 소수점 실행 유닛은 지수 경로와 유효수 경로를 포함하고,
상기 부동 소수점 실행 유닛은 결과 부동 소수점 값을 상기 결과 출력에 출력하도록 구성되며,
상기 결과 부동 소수점 값은 지수 필드, 및 제1 부분과 제2 부분을 포함하는 유효수 필드를 포함하도록, 각각의 부동 소수점 피연산자와 동일한 방법으로 포맷화되고,
상기 부동 소수점 실행 유닛의 상기 유효수 경로의 도입부(beginning)에 근 접하여 배치되고(disposed proximate) 상기 피연산자 입력부에 결합된 제1 시프트 로직 - 상기 제1 시프트 로직은, 상기 제2 부동 소수점 명령어의 실행 중에 상기 제2 부동 소수점 피연산자의 상기 유효수 필드의 상기 제2 부분에 저장된 데이터를 선택적으로 시프트하도록 구성됨 -; 및
상기 부동 소수점 실행 유닛의 상기 유효수 경로의 종결부(end)에 근접하여 배치된 제2 시프트 로직 - 상기 제2 시프트 로직은, 상기 제2 부동 소수점 명령어의 실행 중에 상기 결과 부동 소수점 값의 상기 유효수 필드의 상기 제2 부분에 저장된 데이터를 선택적으로 시프트하도록 구성되며, 상기 제1 및 제2 시프트 로직은 동일한 수의 비트를 반대 방향으로 시프트함 -
을 더 포함하는 회로 구성.
제5항에 있어서,
상기 부동 소수점 실행 유닛은, 상기 지수 경로에 결합되며 상기 제2 부동 소수점 명령어의 실행 중에 상기 제2 부동 소수점 피연산자의 상기 지수 필드와 상기 유효수 필드의 상기 제1 부분의 데이터를 연결하도록 구성된 로직을 포함하는, 회로 구성.
삭제
제2항의 회로 구성을 포함하는 집적 회로 장치.
제2항의 회로 구성을 정의하는 로직 정의 프로그램 코드를 포함하는 컴퓨터 판독가능 기록 매체.
부동 소수점 실행 유닛에서 부동 소수점 명령어를 실행하는 방법으로서,
제1 및 제2 부동 소수점 명령어를 수신하는 단계 -
상기 제1 부동 소수점 명령어는 제1 부동 소수점 피연산자를 식별하고 상기 제2 부동 소수점 명령어는 제2 부동 소수점 피연산자를 식별하고,
상기 제1 및 제2 부동 소수점 피연산자 각각은 지수 필드, 및 제1 부분 및 제2 부분을 포함하는 유효수 필드로 구성되고,
상기 제1 부동 소수점 피연산자의 상기 지수 필드, 상기 유효수 필드의 제1 부분, 및 상기 유효수 필드의 제2 부분은, 상기 제2 부동 소수점 피연산자의 상기 지수 필드, 상기 유효수 필드의 제1 부분, 및 상기 유효수 필드의 제2 부분과 동일한 비트에 각각 맵핑됨 -;
상기 제1 부동 소수점 피연산자의 상기 지수 필드에 저장된 데이터를 지수로서 사용하고, 유효수로서의 사용을 위해 상기 제1 부동 소수점 피연산자의 상기 유효수 필드의 상기 제1 및 제2 부분에 저장된 데이터를 연결시킴으로써 상기 부동 소수점 실행 유닛에서 상기 제1 부동 소수점 명령어를 실행하는 단계; 및
지수로서의 사용을 위해 상기 제2 부동 소수점 피연산자의 상기 지수 필드 및 상기 유효수 필드의 상기 제1 부분에 저장된 데이터를 연결하고, 상기 제2 부동 소수점 피연산자의 상기 유효수 필드의 상기 제2 부분에 저장된 데이터를 유효수로서 사용함으로써, 상기 부동 소수점 실행 유닛에서 상기 제2 부동 소수점 명령어를 실행하는 단계를 포함하며,
제1 모드에서 상기 제1 부동 소수점 명령어를 실행하고, 제2 모드에서 상기 제2 부동 소수점 명령어를 실행하고,
임계치에 도달한 오버플로우 상태들의 수에 응답하여 상기 제1 모드로부터 상기 제2 모드로 자동으로 전환하거나, 또는 특수 레지스터에 저장된 데이터에 기초하여 상기 제1 모드와 상기 제2 모드 사이에서 전환하는,
부동 소수점 명령어를 실행하는 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/177,444 US8412760B2 (en) | 2008-07-22 | 2008-07-22 | Dynamic range adjusting floating point execution unit |
US12/177,444 | 2008-07-22 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20100010473A KR20100010473A (ko) | 2010-02-01 |
KR101020430B1 true KR101020430B1 (ko) | 2011-03-08 |
Family
ID=41569582
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020090057261A KR101020430B1 (ko) | 2008-07-22 | 2009-06-25 | 동적 범위 조정 부동 소수점 실행 유닛 |
Country Status (3)
Country | Link |
---|---|
US (2) | US8412760B2 (ko) |
JP (1) | JP5431044B2 (ko) |
KR (1) | KR101020430B1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9811317B2 (en) | 2014-09-18 | 2017-11-07 | Samsung Electronics Co., Ltd. | Method and apparatus for controlling range of representable numbers |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9411586B2 (en) * | 2011-12-23 | 2016-08-09 | Intel Corporation | Apparatus and method for an instruction that determines whether a value is within a range |
US10289412B2 (en) | 2012-02-09 | 2019-05-14 | Qualcomm Incorporated | Floating point constant generation instruction |
US9520180B1 (en) | 2014-03-11 | 2016-12-13 | Hypres, Inc. | System and method for cryogenic hybrid technology computing and memory |
US9742630B2 (en) * | 2014-09-22 | 2017-08-22 | Netspeed Systems | Configurable router for a network on chip (NoC) |
US10019227B2 (en) | 2014-11-19 | 2018-07-10 | International Business Machines Corporation | Accuracy-conserving floating-point value aggregation |
US10348563B2 (en) | 2015-02-18 | 2019-07-09 | Netspeed Systems, Inc. | System-on-chip (SoC) optimization through transformation and generation of a network-on-chip (NoC) topology |
US10218580B2 (en) | 2015-06-18 | 2019-02-26 | Netspeed Systems | Generating physically aware network-on-chip design from a physical system-on-chip specification |
US9817661B2 (en) * | 2015-10-07 | 2017-11-14 | Arm Limited | Floating point number rounding |
US10042607B2 (en) | 2016-08-22 | 2018-08-07 | Altera Corporation | Variable precision floating-point multiplier |
US10452124B2 (en) | 2016-09-12 | 2019-10-22 | Netspeed Systems, Inc. | Systems and methods for facilitating low power on a network-on-chip |
US10055195B2 (en) | 2016-09-20 | 2018-08-21 | Altera Corporation | Variable precision floating-point adder and subtractor |
US20180159786A1 (en) | 2016-12-02 | 2018-06-07 | Netspeed Systems, Inc. | Interface virtualization and fast path for network on chip |
US10063496B2 (en) | 2017-01-10 | 2018-08-28 | Netspeed Systems Inc. | Buffer sizing of a NoC through machine learning |
US10469337B2 (en) | 2017-02-01 | 2019-11-05 | Netspeed Systems, Inc. | Cost management against requirements for the generation of a NoC |
US10970042B2 (en) * | 2017-11-20 | 2021-04-06 | Intel Corporation | Integrated circuits with machine learning extensions |
US11175892B2 (en) | 2017-11-20 | 2021-11-16 | Intel Corporation | Integrated circuits with machine learning extensions |
US11144457B2 (en) | 2018-02-22 | 2021-10-12 | Netspeed Systems, Inc. | Enhanced page locality in network-on-chip (NoC) architectures |
US10547514B2 (en) | 2018-02-22 | 2020-01-28 | Netspeed Systems, Inc. | Automatic crossbar generation and router connections for network-on-chip (NOC) topology generation |
US10983910B2 (en) | 2018-02-22 | 2021-04-20 | Netspeed Systems, Inc. | Bandwidth weighting mechanism based network-on-chip (NoC) configuration |
US11023377B2 (en) | 2018-02-23 | 2021-06-01 | Netspeed Systems, Inc. | Application mapping on hardened network-on-chip (NoC) of field-programmable gate array (FPGA) |
US11176302B2 (en) | 2018-02-23 | 2021-11-16 | Netspeed Systems, Inc. | System on chip (SoC) builder |
WO2020059074A1 (ja) * | 2018-09-20 | 2020-03-26 | 株式会社Pfu | データ構造、情報処理装置、方法及びプログラム |
US10871946B2 (en) | 2018-09-27 | 2020-12-22 | Intel Corporation | Methods for using a multiplier to support multiple sub-multiplication operations |
US10642614B2 (en) * | 2018-09-29 | 2020-05-05 | Intel Corporation | Reconfigurable multi-precision integer dot-product hardware accelerator for machine-learning applications |
US10732932B2 (en) | 2018-12-21 | 2020-08-04 | Intel Corporation | Methods for using a multiplier circuit to support multiple sub-multiplications using bit correction and extension |
FR3093571B1 (fr) * | 2019-03-08 | 2021-03-19 | Commissariat Energie Atomique | Procédé et dispositif de représentation en virgule flottante avec précision variable |
US11693626B2 (en) * | 2019-06-18 | 2023-07-04 | Cirrus Logic, Inc. | Variable accuracy computing system |
KR20210085461A (ko) | 2019-12-30 | 2021-07-08 | 삼성전자주식회사 | 프로세싱 장치 및 프로세싱 장치에서 부동 소수점 연산을 처리하는 방법 |
CN116594589B (zh) * | 2019-12-31 | 2024-03-26 | 华为技术有限公司 | 浮点数乘法计算的方法、装置和算术逻辑单元 |
GB2600915B (en) * | 2020-10-07 | 2023-02-15 | Graphcore Ltd | Floating point number format |
CN112905125B (zh) * | 2021-03-04 | 2023-02-07 | 中电普信(北京)科技发展有限公司 | 一种基于计算机高精度计算的数据存储及读取方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11161468A (ja) * | 1997-11-25 | 1999-06-18 | Nec Field Service Ltd | 浮動小数点演算回路およびこの浮動小数点演算回路を備 えたコンピュータ |
US20040254970A1 (en) * | 2003-06-11 | 2004-12-16 | Stmicroelectronics, Inc., Carrollton, Texas | Apparatus and method for adjusting exponents of floating point numbers |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3742198A (en) * | 1971-03-19 | 1973-06-26 | Bell Telephone Labor Inc | Apparatus for utilizing a three-field word to represent a floating point number |
JPS6097435A (ja) * | 1983-11-02 | 1985-05-31 | Hitachi Ltd | 演算処理装置 |
US4603323A (en) * | 1984-05-25 | 1986-07-29 | International Business Machines Corporation | Method for extending the exponent range of an IBM 370-type floating point processor |
JPS61141033A (ja) * | 1984-12-14 | 1986-06-28 | Hitachi Ltd | 演算処理装置 |
JPH03263219A (ja) * | 1990-03-14 | 1991-11-22 | Nec Corp | 浮動小数点乗算器 |
JP2651267B2 (ja) * | 1990-07-26 | 1997-09-10 | 富士通株式会社 | 演算処理装置及び演算処理方法 |
JPH04107730A (ja) * | 1990-08-29 | 1992-04-09 | Nec Corp | 浮動小数点加算器 |
JPH05216620A (ja) * | 1991-10-31 | 1993-08-27 | Internatl Business Mach Corp <Ibm> | 浮動小数点を正規化する方法及び回路 |
US5268855A (en) * | 1992-09-14 | 1993-12-07 | Hewlett-Packard Company | Common format for encoding both single and double precision floating point numbers |
US6253299B1 (en) * | 1999-01-04 | 2001-06-26 | International Business Machines Corporation | Virtual cache registers with selectable width for accommodating different precision data formats |
US6405305B1 (en) * | 1999-09-10 | 2002-06-11 | Advanced Micro Devices, Inc. | Rapid execution of floating point load control word instructions |
US7529912B2 (en) * | 2002-02-12 | 2009-05-05 | Via Technologies, Inc. | Apparatus and method for instruction-level specification of floating point format |
US7428566B2 (en) * | 2004-11-10 | 2008-09-23 | Nvidia Corporation | Multipurpose functional unit with multiply-add and format conversion pipeline |
US8595279B2 (en) * | 2006-02-27 | 2013-11-26 | Qualcomm Incorporated | Floating-point processor with reduced power requirements for selectable subprecision |
US7885992B2 (en) * | 2006-06-22 | 2011-02-08 | Honeywell International Inc. | System and method for implementing irregular data formats |
US20110004644A1 (en) * | 2009-07-03 | 2011-01-06 | Via Technologies, Inc. | Dynamic floating point register precision control |
-
2008
- 2008-07-22 US US12/177,444 patent/US8412760B2/en not_active Expired - Fee Related
-
2009
- 2009-06-25 KR KR1020090057261A patent/KR101020430B1/ko not_active IP Right Cessation
- 2009-07-07 JP JP2009161036A patent/JP5431044B2/ja not_active Expired - Fee Related
-
2013
- 2013-03-11 US US13/793,240 patent/US9223753B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11161468A (ja) * | 1997-11-25 | 1999-06-18 | Nec Field Service Ltd | 浮動小数点演算回路およびこの浮動小数点演算回路を備 えたコンピュータ |
US20040254970A1 (en) * | 2003-06-11 | 2004-12-16 | Stmicroelectronics, Inc., Carrollton, Texas | Apparatus and method for adjusting exponents of floating point numbers |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9811317B2 (en) | 2014-09-18 | 2017-11-07 | Samsung Electronics Co., Ltd. | Method and apparatus for controlling range of representable numbers |
Also Published As
Publication number | Publication date |
---|---|
US20130191432A1 (en) | 2013-07-25 |
KR20100010473A (ko) | 2010-02-01 |
JP2010027049A (ja) | 2010-02-04 |
US20100023568A1 (en) | 2010-01-28 |
JP5431044B2 (ja) | 2014-03-05 |
US9223753B2 (en) | 2015-12-29 |
US8412760B2 (en) | 2013-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101020430B1 (ko) | 동적 범위 조정 부동 소수점 실행 유닛 | |
US8930432B2 (en) | Floating point execution unit with fixed point functionality | |
US8356162B2 (en) | Execution unit with data dependent conditional write instructions | |
US9594557B2 (en) | Floating point execution unit for calculating packed sum of absolute differences | |
US7945764B2 (en) | Processing unit incorporating multirate execution unit | |
US7809925B2 (en) | Processing unit incorporating vectorizable execution unit | |
US8028153B2 (en) | Data dependent instruction decode | |
US8139061B2 (en) | Floating point execution unit for calculating a one minus dot product value in a single pass | |
US8892851B2 (en) | Changing opcode of subsequent instruction when same destination address is not used as source address by intervening instructions | |
US9507599B2 (en) | Instruction set architecture with extensible register addressing | |
US7904700B2 (en) | Processing unit incorporating special purpose register for use with instruction-based persistent vector multiplexer control | |
US10521234B2 (en) | Concurrent multiple instruction issued of non-pipelined instructions using non-pipelined operation resources in another processing core | |
US9021004B2 (en) | Execution unit with inline pseudorandom number generator | |
US9195463B2 (en) | Processing core with speculative register preprocessing in unused execution unit cycles | |
US7904699B2 (en) | Processing unit incorporating instruction-based persistent vector multiplexer control | |
US9092257B2 (en) | Vector execution unit with prenormalization of denormal values | |
US8984260B2 (en) | Predecode logic autovectorizing a group of scalar instructions including result summing add instruction to a vector instruction for execution in vector unit with dot product adder | |
US20130111186A1 (en) | Instruction address adjustment in response to logically non-significant operations |
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 | ||
LAPS | Lapse due to unpaid annual fee |