KR102471606B1 - 내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷 - Google Patents
내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷 Download PDFInfo
- Publication number
- KR102471606B1 KR102471606B1 KR1020197018849A KR20197018849A KR102471606B1 KR 102471606 B1 KR102471606 B1 KR 102471606B1 KR 1020197018849 A KR1020197018849 A KR 1020197018849A KR 20197018849 A KR20197018849 A KR 20197018849A KR 102471606 B1 KR102471606 B1 KR 102471606B1
- Authority
- KR
- South Korea
- Prior art keywords
- register
- rounding
- data item
- instruction
- rule
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- 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
- G06F7/49942—Significance control
- G06F7/49947—Rounding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- 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/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- 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/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Executing Machine-Instructions (AREA)
Abstract
프로세서는 제1 데이터 아이템을 저장하는 제1 저장소, 제2 저장소, 및 명령어를 인코딩하는 논리 회로를 포함하는 실행 유닛을 포함하고, 명령어는 제1 저장소의 식별자를 저장하는 제1 필드, 제2 저장소의 식별자를 저장하는 제2 필드, 및 라운딩 규칙을 표현하는 식별자를 저장하는 제3 필드를 포함하고, 실행 유닛은 명령어를 실행하여, 제1 데이터 아이템에 기초하여 제2 데이터 아이템을 생성하고, 명령어에 의해 지정된 라운딩 규칙에 따라 제2 데이터 아이템을 라운딩하고, 제2 저장소에 라운딩된 제2 데이터 아이템을 저장한다.
Description
본 출원은 2016년 12월 15일자로 출원된 미국 가출원 제62/434,521호에 대해 우선권을 주장하며, 그 내용은 본 명세서에 참고로 통합된다.
본 개시는 프로세서, 보다 구체적으로는 프로세서와 관련된 명령어 세트 아키텍처(ISA)에 관한 것으로서, ISA의 부동 소수점 명령어들 각각은 해당 부동 소수점 명령어에 구체적으로 적용 가능한 라운딩 규칙을 지정한다.
프로세서들(예컨대, 중앙 처리 유닛(CPU)들)은 시스템 소프트웨어(예를 들어, 운영 체제) 및 사용자 소프트웨어 애플리케이션들을 포함하는 소프트웨어 애플리케이션들을 실행할 수 있다. 프로세서의 마이크로아키텍처는 명령어들의 세트를 지정하는 명령어 세트 아키텍처(ISA)에 따라 설계될 수 있다. 소프트웨어 프로그램이 프로세서의 실행 파이프라인 상에서 실행될 수 있는 이러한 명령어들의 집합으로 컴파일될 수 있다. ISA에서 지정된 명령어들은 (예를 들어, 입력들로서 또는 출력들로서) 부동 소수점 값들을 처리하는 명령어들을 포함할 수 있다. 이러한 명령어들은 ISA의 부동 소수점 명령어들로서 지칭된다.
본 개시는 이하에 주어진 상세한 설명으로부터 그리고 본 개시의 다양한 실시예들의 첨부 도면들로부터 더 완전하게 이해될 것이다. 그러나, 도면들은 본 개시를 특정 실시예들로 제한하는 것으로 간주되지 않아야 하며, 단지 설명 및 이해를 위한 것이다.
도 1은 본 개시의 일 실시예에 따른 프로세서(102)를 포함하는 시스템을 도시한다.
도 2는 본 개시의 일 실시예에 따른 라운딩 규칙의 식별자를 저장하기 위한 필드를 포함할 수 있는 부동 소수점 명령어를 도시한다.
도 3은 본 개시의 일 실시예에 따른 부동 소수점 변환 명령어들을 도시한다.
도 1은 본 개시의 일 실시예에 따른 프로세서(102)를 포함하는 시스템을 도시한다.
도 2는 본 개시의 일 실시예에 따른 라운딩 규칙의 식별자를 저장하기 위한 필드를 포함할 수 있는 부동 소수점 명령어를 도시한다.
도 3은 본 개시의 일 실시예에 따른 부동 소수점 변환 명령어들을 도시한다.
컴퓨터에서, 부동 소수점 값들은 실수의 표현으로 해석될 수 있는 다수의 비트를 사용하여 표현될 수 있다. 하나의 일반적인 표현은 IEEE 754 기술 표준에 따라 정의된 바와 같은 binary32 포맷이다. binary32 포맷의 32 비트는 부호 비트(S), 8 지수 비트 및 23 분수 비트를 포함할 수 있다.
이 포맷으로 인코딩된 32 비트 워드는 표 1에 표시된 바와 같은 다음의 의사 코드를 사용하여 실수로 변환될 수 있다.
이 예에서, 부호 비트 S는 실수가 양(+)의 수 또는 음(-)의 수인지를 결정하는 데 사용되며, 지수 값 255(즉, 모두 1들)는 +/- 무한대 및 다른 예외 조건들을 표현하는 데 사용된다. 유한 수의 비트를 사용하는 표현은 유한 수의 실수 값을 표현할 수 있을 뿐이며, 특히 그러한 표현을 사용하여 표현할 수 없는 일부 실수들이 존재한다. 예를 들어, IEEE binary32 포맷은 기껏해야 232 개의 실수 값을 표현할 수 있다. 이것은 소정의 실수들이 표현될 수 없다는 것을 의미한다.
십진수 33554432(16 진수로는 0x200_0000) 및 숫자 1을 고려한다. 이 양 숫자는 각자 binary32 포맷으로 S=0, 지수=152, 분수=0 및 S=0, 지수=127, 분수=0으로 정확하게 표현될 수 있다. 그러나, 이들의 합계인 33554433(0x200_0001)은 이러한 포맷으로 표현될 수 없는데, 이는 합계의 표현이 binary32 포맷의 분수 부분에 할당된 비트들의 수를 초과하는 25 비트 분수를 필요로 하기 때문이다.
실수 값이 특정 부동 소수점 포맷으로 정확히 표현될 수 없을 때, 라운딩 연산이 발생할 수 있다. 일부 구현들에서, 라운딩 연산은 해당 포맷(예를 들어, binary32 포맷)으로 표현될 수 있는 대안적인 실수를 선택하는 것이다. 통상적으로, 선택되는 대안적인 실수는 다음으로 가장 큰 표현 가능한 실수 또는 다음으로 가장 작은 표현 가능한 실수일 수 있다.
덧셈, 뺄셈, 곱셈 및/또는 나눗셈과 같은 부동 소수점 연산들을 수행할 때, 종종 이들 연산의 정확한 결과는 부동 소수점 포맷으로 표현될 수 없다. 이러한 상황에서, 프로세서는 표현될 수 있는 대안적인 숫자를 결정하기 위해 라운딩 연산을 실행해야 할 필요가 있을 수 있다. 프로세서는 라운딩 규칙들에 기초하여 특정 라운딩 방법을 선택할 수 있다. 사용될 수 있는 라운딩 규칙들 중 일부는 다음과 같다.
● 가장 가까운 값으로 라운딩(round to the nearest): 가장 가까운 값으로 라운딩함; 숫자가 중간에 속할 경우, 이 숫자는 짝수(0) 최하위 비트를 갖는 가장 가까운 값으로 라운딩된다.
● 0을 향해 라운딩(round toward 0): 0을 향해 라운딩한다(절단으로도 알려짐).
● + 무한대를 향해 라운딩(round toward + Infinity): 양의 무한대를 향해 라운딩한다(라운딩 업 또는 상한(ceiling)으로도 알려짐).
● - 무한대를 향해 라운딩(round toward - Infinity): 음의 무한대를 향해 라운딩한다(라운딩 다운 또는 하한(bottom)으로도 알려짐).
상이한 라운딩 규칙들의 적용은 상이한 라운딩 결과들을 생성할 수 있다.
라운딩은 또한 부동 소수점 수가 정수로 변환될 때 프로세서에서 발생할 수 있다. 그러한 경우, 프로세서는 결정된 라운딩 규칙을 사용하여 부동 소수점 포맷으로 표현된 실수 값을 가장 가까운 정수로 변환할 수 있다. 정수 결과들은 사용된 라운딩 규칙에 따라 상이할 수 있다. 예를 들어, 표 2에 표시된 바와 같은 다음 예들을 고려한다. 상이한 라운딩 규칙들의 사용은 상이한 결과들을 생성할 수 있다.
규칙/값 | +11.5 | +12.5 | -11.5 | -12.5 |
가장 가까운 값 | +12 | +12 | -12 | -12 |
0을 향함 | +11 | +12 | -11 | -12 |
+무한대를 향함 | +12 | +13 | -11 | -12 |
-무한대를 향함 | +11 | +12 | -12 | -13 |
라운딩은 정수 대 부동 소수점 변환의 경우에도 발생할 수 있다. 예를 들어, 정수 포맷으로 표현된 32 비트 정수를 binary32 비트 포맷으로 변환할 때, 정수 0x200_0001은 정확하게 표현될 수 없으며, 변환 전에 아마도 0x200_0000 또는 0x200_0004로 라운딩된다.
프로세서의 일부 구현들에서, 라운딩 규칙은 프로세서 아키텍처의 사양에서 결정된다. 다른 구현들에서, 사용될 수 있는 라운딩 규칙들은 프로그래밍 인터페이스를 통해 프로세서에 의해 액세스 가능한 레지스터(부동 소수점 제어 레지스터라고 함)에서 지정된다. 이러한 시나리오에서, 부동 소수점 연산(또는 부동 소수점/정수 변환)이 표현 불가능한 결과를 생성할 때, 프로세서는 부동 소수점 제어 레지스터를 검사하여 적용할 라운딩 규칙을 결정하며, 결과는 결정된 라운딩 규칙에 기초하여 라운딩된다.
사용되는 라운딩 규칙의 선택은 부동 소수점 연산들의 시퀀스의 전체 결과에 영향을 줄 수 있다. 결과적으로, 특수 응용들에서, 상이한 라운딩 규칙들의 선택은 더 높거나 더 낮은 품질의 최종 결과를 유발할 수 있다. 그러한 응용들에서, 프로그램은 적절한 라운딩 규칙(또는 규칙들)을 선택할 수 있다. 그러나 일반적으로 소프트웨어 애플리케이션은 부동 소수점 연산들에 사용되는 라운딩 규칙을 지정하지 않는다. 규칙이 지정되지 않을 때, 디폴트 라운딩 규칙이 사용된다. 디폴트 라운딩 규칙은 일반적으로 프로그래밍 언어와 관련되며, 종종 가장 가까운 값으로의 라운딩 규칙이다.
부동 소수점 수에서 정수로 변환할 때의 라운딩 방법의 선택은 프로그래밍 언어의 함수 라이브러리 안에 라운딩 함수들로서 명시적으로 정의될 수 있다. 이어서, 프로그래머는 코드에서 이러한 라운딩 함수들(예를 들어, 상한, 라운딩 또는 하한)을 사용하여 원하는 라운딩 규칙을 특정 숫자에 명시적으로 적용할 수 있다.
부동 소수점 라운딩 모드를 제어하는 유일한 방법이 부동 소수점 제어 레지스터인 경우, 라운딩 모드를 명시적으로 지정하는 라이브러리 함수는 라운딩 모드를 관리하는 것과 관련된 오버 헤드를 증가시킬 것이다. 예를 들어, 상한 함수에 대한 의사 코드 시퀀스가 표 3에 표시되어 있다.
여기서는, 이 코드 시퀀스 내의 5 개의 명령어 라인 중 3 개가 라운딩 모드를 조작하는 것과 관련되며, 이는 계산 오버헤드의 증가를 유발한다는 점에 유의한다.
라운딩 모드를 자주 전환하는 것은, 특히 현대의 무질서 수퍼스칼라 프로세서들과 관련하여 계산상 비쌀 수 있다. 일부 구현들에서, 라운딩 모드를 판독 및/또는 기입하는 것은 다수의 프로세서 사이클을 소비할 수 있다. 이것은 종종 직렬화 연산이며, 병렬 및 무질서 부동 소수점 실행을 금지한다.
코드 시퀀스에서 라운딩 모드가 자주 변경될 필요가 있는 경우들이 발생한다. 하나의 예는 C 프로그램에서 일반적으로 부동 소수점 연산들이 가장 가까운 수로의 라운딩을 사용하여 수행되는 반면에 부동 소수점 대 정수 변환이 0으로의 라운딩을 사용하여 지정되는 경우이다. 이것은 나중에 정수들로 라운딩되는 부동 소수점 연산들을 포함하는 연산들의 시퀀스가 빈번한 라운딩 모드 변경들을 가질 것이라는 것을 의미한다. 발생하는 다른 시나리오는 사용자가 코드의 특정 영역에 적용되는 부동 소수점 라운딩 모드를 제어하기를 명시적으로 원하는 경우이다. 이러한 기능을 적절히 지원하기 위해, 부동 소수점 라운딩 모드 레지스터는 제어가 코드의 해당 영역을 떠날 때마다 언어에 대한 디폴트 모드로 재설정될 필요가 있다. 이것 또한 매우 비싼 것으로 밝혀졌다.
본 개시의 실시예들은 라운딩을 요구할 수 있는 부동 소수점 명령어에 적용될 라운딩 규칙을 지정하는 명령어들을 포함하는 명령어 세트 아키텍처를 제공한다. 일 실시예에서, 명령어는 라운딩 규칙을 명령어의 속성으로서 직접 지정할 수 있다. 언어에 의해 특정 라운딩 모드가 요구되는 경우, 라운딩 규칙은 명령어 내의 즉석 값을 사용하여 명시적으로 인코딩될 수 있으며, 따라서 부동 소수점 레지스터를 관리할 필요가 없어진다. 다른 실시예에서, 명령어는 부동 소수점 제어 레지스터로부터 명령어에 대한 라운딩 규칙을 표현하는 식별자가 판독되도록 지정할 수 있다. 이것은 사용자가 사용되는 라운딩 규칙에 대한 제어를 수행하고 애플리케이션 프로그램에서 라운딩 규칙을 동적으로 변경하기를 원하는 경우를 지원한다. 따라서, 본 개시의 실시예들은 ISA의 부동 소수점 변환 명령어들을 포함하는 부동 소수점 명령어로 하여금 원하는 라운딩 모드를 정확하게 지정하거나 부동 소수점 제어 레지스터에 의해 제공되는 디폴트 라운딩 모드가 사용되도록 지정하게 하기 위한 수단을 제공한다.
도 1은 본 개시의 일 실시예에 따른 프로세서(102)를 포함하는 시스템 온 칩(SoC)(100)을 도시한다. 프로세서(102)는 SoC(100)와 같은 반도체 칩셋 상에 제조된 논리 회로를 포함할 수 있다. 프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 또는 멀티 코어 프로세서의 처리 코어일 수 있다. 도 1에 도시된 바와 같이, 프로세서(102)는 명령어 실행 파이프라인(104) 및 레지스터 파일(106)을 포함할 수 있다. 파이프라인(104)은 다수의 파이프라인 스테이지를 포함할 수 있고, 각각의 스테이지는 프로세서(102)의 명령어 세트 아키텍처(ISA)에서 지정된 명령어를 완전히 실행하는 데 필요한 멀티 스테이지 프로세스 내의 특정 스테이지의 연산들을 수행하도록 제조된 논리 회로를 포함한다. 일 실시예에서, 파이프라인(104)은 명령어 인출/디코드 스테이지(110), 데이터 인출 스테이지(112), 실행 스테이지(114) 및 후기입 스테이지(write back stage)(116)를 포함할 수 있다.
프로세서(102)는 프로세서(102)와 관련된 레지스터들(108, 109)을 더 포함할 수 있는 레지스터 파일(106)을 포함할 수 있다. 일 실시예에서, 레지스터 파일(106)은 각자가 파이프라인(104)에서 실행되는 명령어들에 의해 처리되는 데이터 아이템들을 저장하기 위해 소정 수("길이"로서 지칭됨)의 비트를 포함할 수 있는 범용 레지스터들(108, 109)을 포함할 수 있다. 예를 들어, 구현들에 따라, 레지스터들(108, 109)은 64 비트, 128 비트, 256 비트 또는 512 비트 레지스터들일 수 있다. 레지스터들(108, 109) 각각은 하나 이상의 데이터 아이템을 저장할 수 있다. 레지스터들(108, 109)은 부동 소수점 데이터 아이템들 및/또는 고정 소수점 데이터 아이템들을 저장하도록 구현될 수 있으며, 부동 소수점 데이터 아이템들은 실수들을 표현할 수 있고, 고정 소수점 데이터 아이템들은 정수들을 표현할 수 있다.
프로그램의 소스 코드는 프로세서(102)와 관련된 명령어 세트 아키텍처(ISA)에서 정의된 일련의 기계 실행 가능 명령어들로 컴파일될 수 있다. 프로세서(102)가 실행 가능 명령어들을 실행하기 시작할 때, 이러한 기계 실행 가능 명령어들은 파이프라인(104) 상에 배치되어 순차적으로 실행될 수 있다. 명령어 인출/디코드 스테이지(110)는 파이프라인(104) 상에 배치된 명령어를 검색하고, 명령어와 관련된 식별자를 식별할 수 있다. 명령어 식별자는 수신된 명령어를 프로세서(102)의 ISA에서 지정된 명령어(118)의 회로 구현과 관련시킬 수 있다.
ISA에서 지정된 명령어들은 범용 레지스터(GPR)들(108, 109)에 저장된 데이터 아이템들을 처리하도록 설계될 수 있다. 데이터 인출 스테이지(112)는 GPR(108)로부터 처리될 (예를 들어, 부동 소수점 또는 고정 소수점) 데이터 아이템들을 검색할 수 있다. 실행 스테이지(114)는 프로세서(102)의 ISA에서 지정된 명령어들을 실행하기 위한 논리 회로를 포함할 수 있다.
일 실시예에서, 실행 스테이지(114)와 관련된 논리 회로는 다수의 "실행 유닛"(또는 기능 유닛)을 포함할 수 있으며, 이들 각각은 하나의 각각의 명령어를 실행하도록 전용화된다. 이들 실행 유닛에 의해 실행되는 모든 명령어들의 집합은 프로세서(102)와 관련된 명령어 세트를 구성할 수 있다. 데이터 인출 스테이지(112)에 의해 검색된 데이터 아이템들을 처리하기 위한 명령어의 실행 후에, 후기입 스테이지(116)는 결과들을 출력하여 GPR들(108, 109)에 저장할 수 있다.
일 실시예에서, 프로세서(102)의 ISA는 부동 소수점 명령어를 정의할 수 있고, 프로세서(102)의 실행 스테이지(114)는 ISA에서 정의된 부동 소수점 명령어의 하드웨어 구현을 포함하는 실행 유닛(118)을 포함할 수 있다. 부동 소수점 명령어는 제1 레지스터(108)의 식별자를 저장하기 위한 제1 필드(120)(또는 피연산자), 제2 레지스터(109)의 식별자를 저장하기 위한 제2 필드(122)(또는 피연산자) 및 라운딩 규칙을 표현하는 식별자를 저장하기 위한 제3 필드(124)(또는 피연산자)를 포함할 수 있다. 명령어는, 실행될 때, 제1 데이터 아이템(부동 소수점 데이터 아이템 또는 고정 소수점 데이터 아이템)을 판독하고, 제1 레지스터에 저장된 제1 데이터 아이템에 기초하여 결과 값(부동 소수점 데이터 아이템)을 계산하고, 명령어의 제3 필드에서 지정된 라운딩 규칙을 사용하여 결과 값을 라운딩하여 결과를 제2 레지스터(109)에 저장하기 위한 연산들을 포함할 수 있다. 이러한 방식으로, 본 개시의 실시예들은 프로그램이 명령어별 라운딩 규칙을 지정하게 할 수 있다. 명령어별 라운딩 규칙 구현은 프로세서(102)에 의해 실행되는 모든 명령어들에 대해 하나의 라운딩 규칙(예를 들어, 디폴트 라운딩 규칙)을 사용하는 것이 아니라 상이한 라운딩 규칙들과 관련된 상이한 명령어들을 허용한다.
일 실시예에서, 라운딩 규칙은 제3 필드(124)에 저장된 즉석 값에 의해 식별될 수 있다. 예를 들어, 즉석 값은 정수일 수 있고, 상이한 정수 값들이 상이한 라운딩 규칙들에 대응할 수 있다. 다른 실시예에서, 제3 필드(124)는 레지스터 파일(106)의 제3 레지스터(126)의 식별자를 저장할 수 있으며, 레지스터(126)는 특정 라운딩 규칙에 대응하는 식별자를 저장할 수 있다. (예를 들어, 레지스터(126)를 통한) 라운딩 규칙의 간접 지정은 애플리케이션을 프로그래밍하는 프로그래머에게 추가적인 유연성을 제공할 수 있다.
도 2는 본 개시의 일 실시예에 따른 라운딩 규칙의 식별자를 저장하기 위한 필드를 포함할 수 있는 부동 소수점 명령어를 도시한다. 도 2에 도시된 바와 같이, 명령어(200)는 ISA에서 연산 필드(202), 타겟 레지스터 필드(204), 제1 입력 레지스터 필드(206), 제2 입력 레지스터 필드(208), 연산 타입 필드(210) 및 라운딩 규칙 필드(212)를 포함하도록 ISA에서 지정될 수 있다. 연산 필드(202)는 부동 소수점 연산에 대한 식별자(예를 들어, fadd)를 저장할 수 있다. 타겟 레지스터 필드(204)는 출력을 저장하기 위해 프로세서와 관련된 부동 소수점 레지스터를 지정할 수 있다. 제1 입력 레지스터 필드(206) 및 제2 입력 레지스터 필드(208)는 입력 값들(또는 함께 더해질 값들)을 저장하는 부동 소수점 레지스터들을 지정할 수 있다. 연산 타입 필드(210)는 부동 소수점 타입(예를 들어, 단일 정밀도 또는 이중 정밀도)을 표현하는 값을 저장할 수 있다. 라운딩 규칙 필드(212)는 라운딩 규칙의 타입을 표현하는 식별자(FRM)를 저장할 수 있다.
예를 들어, GPTX 아키텍처에서의 명령어 fadd_s_rzero $f3,$f1,$f2는 라운딩 규칙 0으로의 라운딩을 사용하여 콘텐츠 $f1과 $f2를 단일 정밀도 부동 소수점 덧셈하고 결과들을 $f3에 다시 저장할 것을 지정한다.
FRM 값에 인코딩된 고정 라운딩 규칙들은 다음을 포함할 수 있다.
● rnear: 가장 가까운 값으로 라운딩한다(예를 들어, 식별자 RNEAR과 관련됨).
● rzero: 0으로 라운딩한다(예를 들어, 식별자 RZERO와 관련됨).
● rdown: 라운딩 다운한다(예를 들어, 식별자 RDOWN과 관련됨).
● rup: 라운딩 업한다(예를 들어, 식별자 RUP와 관련됨).
FRM 식별자에 대해 이용 가능한 다른 인코딩은 rdyn이며, 이는 부동 소수점 제어 레지스터에서 지정된 라운딩 규칙이 사용되어야 함을 지정하고, 따라서 (고정 규칙을 사용하는 것이 아니라) 라운딩 규칙들을 간접적으로 지정한다.
정수에서 부동 소수점 수로의 변환 동안에, 프로세서는 정수를 범용 레지스터에 저장하고 결과를 부동 소수점 레지스터에 저장할 수 있다. 범용 레지스터에서 부동 소수점 레지스터로의 복사 동안, 정수 값은 필요한 경우에는 라운딩을 사용하여 등가의 부동 소수점 표현으로 변환된다. 라운딩은 프로세서가 부동 소수점 레지스터로부터 부동 소수점 값을 범용 레지스터들에 복사하는 명령어를 실행할 때 유사하게 발생할 수 있으며, 부동 소수점 값은 명령어에서 지정된 라운딩 규칙에 기초하여 정수 값으로 변환된다.
ISA의 일 구현에서, 이러한 명령어들은 범용 레지스터에 저장된 정수를 부동 소수점 레지스터에 저장되는 부동 소수점 값으로 그리고 부동 소수점 레지스터 내의 부동 소수점 값을 범용 레지스터에 저장되는 정수로 각각 변환하는 fcvtr(정수로부터 부동 소수점으로 변환) 및 rcvtf(부동 소수점으로부터 정수로 변환) 명령어들이다. 이러한 명령어들의 FRM 필드는 변환 동안 적용될 라운딩 규칙의 선택을 지정할 수 있다.
도 3은 본 개시의 일 실시예에 따른 fcvtr 명령어(302) 및 rcvtf 명령어(304)를 도시한다. fcvtr 명령어(302)의 사양은 부동 소수점 레지스터(부동 소수점 레지스터는 부동 소수점 값을 저장함)에 대한 참조를 저장하기 위한 부동 소수점 레지스터 필드(306) 및 범용 레지스터(범용 레지스터는 정수를 저장함)에 대한 참조를 저장하기 위한 범용 레지스터 필드를 포함할 수 있다. 명령어 fcvtr(302)은 라운딩 규칙 필드(310)에서 지정된 라운딩 규칙에 기초하여 부동 소수점 값을 정수로 변환한다. 유사하게, rcvtf 명령어(304)의 사양은 (정수를 저장하는) 범용 레지스터에 대한 참조를 저장하기 위한 범용 레지스터 필드(312) 및 (부동 소수점 값을 저장하는) 부동 소수점 레지스터에 대한 참조를 저장하기 위한 부동 소수점 레지스터 필드(314)를 포함할 수 있다. 명령어 rcvtf(304)는 라운딩 규칙 필드(316)에서 지정된 라운딩 규칙에 기초하여 정수를 부동 소수점 값으로 변환한다.
범용 레지스터들(예를 들어, fcvtr 또는 rcvtf)로/로부터 복사할 수 있는 명령어들과 관련하여, 라운딩 규칙들은 원시 규칙(raw rule)으로 지칭되는 추가적인 라운딩 규칙을 포함할 수 있다. 일 실시예에서, 원시 규칙은 식별자 RAW를 갖는 fcvtr 명령어의 라운딩 규칙 필드(310)(또는 rcvtf 명령어의 필드(316))에서 지정될 수 있다. 원시 규칙하에서, 소스 레지스터(범용 또는 부동 소수점) 내의 비트들은 변환 없이 그대로 타겟 레지스터(부동 소수점/범용 레지스터)에 직접 복사(예를 들어, 비트 대 비트 복사)된다. 원시 규칙의 사용은 값의 교란 없이 부동 소수점 레지스터에서 동일한(또는 더 큰) 길이의 범용 레지스터로의 그리고 그 반대로의 부동 소수점 값들의 복사를 가능하게 한다.
부동 소수점 수를 정수로 변환하는 명령어와 관련하여, 본 개시의 실시예들은 정의되지 않은 숫자(NaN)들의 핸들링에 관한 추가적인 라운딩 규칙을 제공할 수 있다. 정의되지 않은 숫자는 무한대 값을 표현할 수 있다. 이 라운딩 규칙은 다음 중 하나로 선택되도록 NaN 대 정수 변환을 지정할 수 있다.
● 모든 NaN들이 0으로 변환되거나,
● +NaN/-NaN이 표현 가능한 최대 양의/최대 음의 정수 값으로 변환되거나,
● 모든 NaN이 표현 가능한 최대 양의 값으로 변환되거나,
● 모든 NaN이 표현 가능한 최대 음의 값으로 변환된다.
rcvtf 명령어와 관련하여, 도 3에 도시된 바와 같이, rcvtf 명령어(304)는 (전술한 바와 같은) NaN 대 정수 변환 규칙이 지정될 수 있는 NaN 규칙 필드(318)를 포함할 수 있다.
일 실시예에서, 표 3에 표시된 바와 같은 상한 함수는 표 4의 다음의 코드에 의해 rcvtf 명령어를 사용하여 구현될 수 있다.
명령어는 명시적으로 라운딩 규칙을 인코딩하므로, 부동 소수점 제어 레지스터를 조작할 필요가 없으며, 따라서 라운딩 모드들을 전환하는 것과 관련된 오버헤드가 감소한다.
본 개시는 제한된 수의 실시예들과 관련하여 설명되었지만, 이 분야의 기술자들은 그러한 실시예들로부터의 다수의 수정 및 변경을 인식할 것이다. 첨부된 청구항들은 본 개시의 진정한 사상 및 범위 내에 속하는 바와 같은 그러한 모든 수정들 및 변경들을 커버하는 것으로 의도된다.
설계는 창작으로부터 제조 시뮬레이션에 이르는 다양한 스테이지들을 거칠 수 있다. 설계를 표현하는 데이터는 다수의 방식으로 설계를 표현할 수 있다. 먼저, 시뮬레이션들에서 유용한 바와 같이, 하드웨어는 하드웨어 기술 언어 또는 다른 기능 기술 언어를 사용하여 표현될 수 있다. 또한, 논리 및/또는 트랜지스터 게이트들을 갖는 회로 레벨 모델이 설계 프로세스의 일부 스테이지들에서 생성될 수 있다. 또한, 대부분의 설계들은 소정 단계에서 하드웨어 모델에서 다양한 디바이스들의 물리적 배치를 표현하는 데이터의 레벨에 도달한다. 전통적인 반도체 제조 기술들이 사용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하는 데 사용되는 마스크들에 대한 상이한 마스크 층들 상의 다양한 피처들의 존재 또는 부재를 지정하는 데이터일 수 있다. 설계의 임의의 표현에서, 데이터는 임의 형태의 기계 판독 가능 매체에 저장될 수 있다. 메모리, 또는 디스크와 같은 자기 또는 광학 저장소는 정보를 전송하도록 변조되거나 생성된 광학 또는 전기 파동을 통해 전송된 그러한 정보를 저장하는 기계 판독 가능 매체일 수 있다. 코드 또는 설계를 나타내거나 운반하는 전기 반송파가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송이 수행될 정도까지, 새로운 사본이 작성된다. 따라서, 통신 제공자 또는 네트워크 제공자는 본 개시의 실시예들의 기술들을 구현하는, 반송파에 인코딩된 정보와 같은 물품(article)을 유형적인 기계 판독 가능 매체 상에 적어도 일시적으로 저장할 수 있다.
본 명세서에서 사용되는 바와 같은 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 지칭한다. 예로서, 모듈은 마이크로컨트롤러에 의해 실행되도록 적응된 코드를 저장하기 위한 비일시적 매체와 관련된 마이크로컨트롤러와 같은 하드웨어를 포함한다. 따라서, 모듈에 대한 언급은 일 실시예에서 비일시적 매체 상에 유지될 코드를 인식 및/또는 실행하도록 특별히 구성된 하드웨어를 지칭한다. 또한, 다른 실시예에서, 모듈의 사용은 미리 결정된 연산들을 수행하기 위해 마이크로컨트롤러에 의해 실행되도록 특별히 적응된 코드를 포함하는 비일시적 매체를 지칭한다. 그리고, 추측할 수 있는 바와 같이, 또 다른 실시예에서, 모듈이라는 용어는 (이 예에서) 마이크로컨트롤러와 비일시적 매체의 조합을 지칭할 수 있다. 종종, 분리된 것으로 도시된 모듈 경계들은 일반적으로 변하고, 잠재적으로 중첩되다. 예를 들어, 제1 모듈 및 제2 모듈은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있는 반면, 소정의 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 잠재적으로 유지할 수 있다. 일 실시예에서, 논리라는 용어의 사용은 트랜지스터들, 레지스터들 또는 다른 하드웨어, 예를 들어 프로그래밍 가능 논리 디바이스들과 같은 하드웨어를 포함한다.
일 실시예에서 '구성된'이라는 표현의 사용은 지정된 또는 결정된 작업을 수행하기 위해 장치, 하드웨어, 논리 또는 요소를 배열, 조립, 제조, 판매 제의, 수입 및/또는 설계하는 것을 지칭한다. 이 예에서, 동작하고 있지 않은 장치 또는 그의 요소는 상기 지정된 작업을 수행하도록 설계, 결합 및/또는 상호 연결되는 경우에 여전히 지정된 작업을 수행하도록 '구성된다'. 단지 설명을 위한 예로서, 논리 게이트는 동작 동안 0 또는 1을 제공할 수 있다. 그러나, 클럭에 인에이블 신호를 제공하도록 '구성된' 논리 게이트는 1 또는 0을 제공할 수 있는 모든 잠재적 논리 게이트를 포함하지는 않는다. 대신에, 논리 게이트는 동작 동안 1 또는 0 출력이 클럭을 인에이블하는 소정의 방식으로 결합된 논리 게이트이다. '구성된'이라는 용어의 사용은 동작을 요구하지 않는 대신에 장치, 하드웨어 및/또는 요소의 잠재적 상태에 초점을 맞춘 것이며, 잠재적 상태에서 장치, 하드웨어 및/또는 요소는 장치, 하드웨어 및/또는 요소가 동작하고 있을 때 특정 작업을 수행하도록 설계된다는 점에 다시 한 번 유의한다.
또한, 일 실시예에서 '~하기 위해', '~할 수 있는' 및/또는 '~하도록 동작할 수 있는'이라는 표현들의 사용은 소정의 장치, 논리, 하드웨어 및/또는 요소가 지정된 방식으로의 장치, 논리, 하드웨어 및/또는 요소의 사용을 가능하게 하는 방식으로 설계된 것을 지칭한다. 일 실시예에서 '~하기 위해', '~할 수 있는' 또는 '~하도록 동작할 수 있는'이라는 표현들의 사용은 장치, 논리, 하드웨어 및/또는 요소의 잠재적 상태를 지칭하며, 잠재적 상태에서 장치, 논리, 하드웨어 및/또는 요소는 동작하고 있는 것이 아니라, 지정된 방식으로의 장치의 사용을 가능하게 하는 방식으로 설계된다는 점에 다시 한 번 유의한다.
본 명세서에서 사용되는 바와 같이, 값은 숫자, 상태, 논리 상태 또는 이진 논리 상태의 임의의 알려진 표현을 포함한다. 종종, 논리 레벨들, 논리 값들 또는 논리적 값들의 사용은 또한 이진 논리 상태들을 간단히 표현하는 1들 및 0들로 지칭된다. 예를 들어, 1은 하이 논리 레벨을 지칭하고, 0은 로우 논리 레벨을 지칭한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 논리 값 또는 다수의 논리 값을 유지할 수 있다. 그러나 컴퓨터 시스템들에서는 값들의 다른 표현들이 사용되어 왔다. 예를 들어, 십진수 10은 910의 이진값 및 십육진 문자 A로 표현될 수도 있다. 따라서, 값은 컴퓨터 시스템에서 유지될 수 있는 정보의 임의의 표현을 포함한다.
또한, 상태들은 값들 또는 값들의 부분들에 의해 표현될 수 있다. 예로서, 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 표현할 수 있는 반면, 논리 0과 같은 제2 값은 비 디폴트 상태를 표현할 수 있다. 또한, 재설정 및 설정이라는 용어들은 일 실시예에서 각각 디폴트 및 업데이트된 값 또는 상태를 지칭한다. 예를 들어, 디폴트 값은 잠재적으로 하이 논리 값, 즉 재설정을 포함할 수 있는 반면, 업데이트된 값은 잠재적으로 로우 논리 값, 즉 설정을 포함할 수 있다. 값들의 임의의 조합이 임의 수의 상태들을 표현하는 데 이용될 수 있다는 점에 유의한다.
전술한 방법들, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예들은 처리 요소에 의해 실행 가능한, 기계 액세스 가능, 기계 판독 가능, 컴퓨터 액세스 가능 또는 컴퓨터 판독 가능 매체 상에 저장된 명령어들 또는 코드를 통해 구현될 수 있다. 비일시적 기계 액세스 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템과 같은 기계에 의해 판독 가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 비일시적 기계 액세스 가능 매체는 랜덤 액세스 메모리(RAM), 예를 들어 정적 RAM(SRAM) 또는 동적 RAM(DRAM); ROM; 자기 또는 광학 저장 매체; 플래시 메모리 디바이스들; 전기 저장 디바이스들; 광학 저장 디바이스들; 음향 저장 디바이스들; 일시적(전파) 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들)로부터 수신된 정보를 유지하기 위한 다른 형태의 저장 디바이스들 등을 포함하며, 일시적 신호들은 그들로부터 정보를 수신할 수 있는 비일시적 매체들과 구별된다.
본 개시의 실시예들을 수행하기 위한 논리를 프로그래밍하는 데 사용되는 명령어들은 DRAM, 캐시, 플래시 메모리 또는 다른 저장소와 같은 시스템 내의 메모리 내에 저장될 수 있다. 또한, 명령어들은 네트워크를 통해 또는 다른 컴퓨터 판독 가능 매체들을 통해 배포될 수 있다. 따라서, 기계 판독 가능 매체는 플로피 디스켓들, 광학 디스크들, 컴팩트 디스크 판독 전용 메모리(CD-ROM들) 및 광자기 디스크들, 판독 전용 메모리(ROM들), 랜덤 액세스 메모리(RAM), 소거 및 프로그래밍 가능 판독 전용 메모리(EPROM), 전기적 소거 및 프로그래밍 가능 판독 전용 메모리(EEPROM), 자기 또는 광학 카드들, 플래시 메모리, 또는 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들어, 반송파들, 적외선 신호들, 디지털 신호들 등)을 통한 인터넷을 통한 정보의 전송에 사용되는 유형적인 기계 판독 가능 저장소와 같이 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 정보를 저장 또는 전송하기 위한 메커니즘을 포함할 수 있지만, 이에 한정되지 않는다. 따라서, 컴퓨터 판독 가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형태로 전자 명령어들 또는 정보를 저장 또는 전송하기에 적합한 임의의 타입의 유형적인 기계 판독 가능 매체를 포함한다.
본 명세서 전반에서 "하나의 실시예" 또는 "일 실시예"에 대한 언급은 실시예와 관련하여 설명되는 특정 특징, 구조 또는 특성이 본 개시의 적어도 하나의 실시예에 포함됨을 의미한다. 따라서, 본 명세서 전반의 다양한 곳들에서의 "하나의 실시예에서" 또는 "일 실시예에서"라는 표현들의 출현들은 반드시 모두가 동일한 실시예를 지칭하는 것은 아니다. 또한, 특정 특징들, 구조들 또는 특성들은 하나 이상의 실시예에서 임의의 적절한 방식으로 조합될 수 있다.
전술한 명세서에서는, 특정 실시예들을 참조하여 상세한 설명이 이루어졌다. 그러나, 첨부된 청구항들에 설명된 바와 같은 본 개시의 더 넓은 사상 및 범위를 벗어나지 않으면서 다양한 수정들 및 변경들이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면들은 제한적인 것이 아니라 예시적인 것으로 간주되어야 한다. 또한, 실시예 및 다른 예시적인 언어의 전술한 사용은 반드시 동일한 실시예 또는 동일한 예를 지칭하는 것이 아니라, 잠재적으로 동일한 실시예뿐만 아니라 상이하고 구별되는 실시예들을 지칭할 수 있다.
Claims (20)
- 프로세서로서,
제1 레지스터, 제2 레지스터 및 제3 레지스터를 포함하는 범용 레지스터 파일 ― 상기 제1 레지스터는 제1 데이터 아이템을 저장함 ―; 및
명령어를 실행하기 위한 논리 회로를 포함하는 실행 유닛
을 포함하고, 상기 명령어는:
상기 제1 레지스터를 표현하는 제1 식별자;
상기 제2 레지스터를 표현하는 제2 식별자; 및
라운딩 규칙에 대응하는 식별 값을 저장하는 상기 제3 레지스터를 표현하는 제3 식별자
를 포함하고, 상기 실행 유닛은 상기 명령어를 실행하여:
상기 제1 데이터 아이템에 기초하여 제2 데이터 아이템을 생성하고;
상기 명령어에 의해 지정된 상기 라운딩 규칙에 따라 상기 제2 데이터 아이템을 라운딩하고;
상기 제2 레지스터에 상기 라운딩된 제2 데이터 아이템을 저장하는, 프로세서. - 제1 항에 있어서,
상기 명령어는 상기 프로세서와 관련된 명령어 세트 아키텍처(ISA)에서 지정되는, 프로세서. - 삭제
- 제1 항에 있어서,
상기 제1 레지스터는 상기 제2 레지스터와 다르거나 상기 제1 레지스터와 동일한 것인, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터에 저장된 상기 제1 데이터 아이템 및 상기 제2 레지스터에 저장된 상기 제2 데이터 아이템은 부동 소수점 포맷으로 표현되는, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터에 저장된 상기 제1 데이터 아이템은 부동 소수점 포맷으로 표현되고, 상기 제2 레지스터에 저장된 상기 제2 데이터 아이템은 고정 소수점 포맷으로 표현되는, 프로세서. - 제1 항에 있어서,
상기 라운딩 규칙은 가장 가까운 값으로 라운딩하는 규칙, 0을 향해 라운딩하는 규칙, 양의 무한대를 향해 라운딩하는 규칙 또는 음의 무한대를 향해 라운딩하는 규칙 중 하나인, 프로세서. - 제1 항에 있어서,
상기 명령어는 덧셈, 뺄셈, 곱셈 또는 나눗셈 연산 중 하나를 포함하는, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터에 저장된 상기 제1 데이터 아이템의 값은 부호 비트를 포함하는 복수의 비트들에 의해 표현되고, 비트들의 제1 서브세트가 지수를 표현하고, 비트들의 제2 세트가 분수를 표현하는, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터 및 상기 제2 레지스터는 동일한 길이를 갖는 부동 소수점 레지스터들인, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터 및 상기 제2 레지스터는 부동 소수점 레지스터들이고, 상기 제1 레지스터는 상기 제2 레지스터보다 더 많은 비트들을 포함하는, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터는 부동 소수점 값을 저장하기 위한 부동 소수점 레지스터이고, 상기 제2 레지스터는 정수를 저장하기 위한 범용 레지스터이고, 상기 명령어는 상기 명령어에 지정된 상기 라운딩 규칙을 사용하는 실수 대 정부 변환 연산을 포함하는, 프로세서. - 제1 항에 있어서,
상기 제1 레지스터는 정수를 저장하기 위한 범용 레지스터이고, 상기 제2 레지스터는 실수 값을 저장하기 위한 부동 소수점 레지스터이고, 상기 명령어는 상기 명령어에 지정된 상기 라운딩 규칙을 사용하는 정수 대 실수 변환 연산을 포함하는, 프로세서. - 제1 항에 있어서,
상기 라운딩 규칙은 정의되지 않은 수를 0으로 변환하는 규칙, 정의되지 않은 수를 복수의 비트들을 사용하여 표현 가능한 최대 수로 변환하는 규칙 또는 정의되지 않은 수를 복수의 비트들을 사용하여 표현 가능한 최소 수로 변환하는 규칙 중 적어도 하나인, 프로세서. - 삭제
- 제1 항에 있어서,
실행될 때, 상기 프로세서는 상기 논리 회로를 사용하여, 미리 결정된 수의 프로세서 클럭 사이클들을 사용하여 상기 명령어를 완료하는, 프로세서. - 시스템으로서,
메모리; 및
상기 메모리에 통신 가능하게 결합된 프로세서
를 포함하고, 상기 프로세서는:
제1 레지스터, 제2 레지스터 및 제3 레지스터를 포함하는 범용 레지스터 파일 ― 상기 제1 레지스터는 제1 데이터 아이템을 저장함 ―; 및
명령어를 인코딩하는 논리 회로를 포함하는 실행 유닛
을 포함하고, 상기 명령어는:
상기 제1 레지스터를 표현하는 제1 식별자;
상기 제2 레지스터를 표현하는 제2 식별자; 및
라운딩 규칙에 대응하는 식별 값을 저장하는 상기 제3 레지스터를 표현하는 제3 식별자
를 포함하고, 상기 실행 유닛은 상기 명령어를 실행하여:
상기 제1 데이터 아이템에 기초하여 제2 데이터 아이템을 생성하고;
상기 명령어에 의해 지정된 상기 라운딩 규칙에 따라 상기 제2 데이터 아이템을 라운딩하고;
상기 제2 레지스터에 상기 라운딩된 제2 데이터 아이템을 저장하는, 시스템. - 삭제
- 제17 항에 있어서,
상기 제1 레지스터는 상기 제2 레지스터와 다르거나 상기 제1 레지스터와 동일한 것인, 시스템. - 제17 항에 있어서,
상기 제1 레지스터에 저장된 상기 제1 데이터 아이템 및 상기 제2 레지스터에 저장된 상기 제2 데이터 아이템은 부동 소수점 포맷으로 표현되는, 시스템.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662434521P | 2016-12-15 | 2016-12-15 | |
US62/434,521 | 2016-12-15 | ||
US15/841,959 | 2017-12-14 | ||
US15/841,959 US20180173527A1 (en) | 2016-12-15 | 2017-12-14 | Floating point instruction format with embedded rounding rule |
PCT/US2017/066677 WO2018112345A1 (en) | 2016-12-15 | 2017-12-15 | Floating point instruction format with embedded rounding rule |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190104329A KR20190104329A (ko) | 2019-09-09 |
KR102471606B1 true KR102471606B1 (ko) | 2022-11-25 |
Family
ID=62559336
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197018849A KR102471606B1 (ko) | 2016-12-15 | 2017-12-15 | 내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20180173527A1 (ko) |
EP (1) | EP3555742B1 (ko) |
KR (1) | KR102471606B1 (ko) |
CN (1) | CN110140109A (ko) |
WO (1) | WO2018112345A1 (ko) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10310814B2 (en) * | 2017-06-23 | 2019-06-04 | International Business Machines Corporation | Read and set floating point control register instruction |
US10379851B2 (en) | 2017-06-23 | 2019-08-13 | International Business Machines Corporation | Fine-grained management of exception enablement of floating point controls |
US10514913B2 (en) | 2017-06-23 | 2019-12-24 | International Business Machines Corporation | Compiler controls for program regions |
US10684852B2 (en) | 2017-06-23 | 2020-06-16 | International Business Machines Corporation | Employing prefixes to control floating point operations |
US10481908B2 (en) | 2017-06-23 | 2019-11-19 | International Business Machines Corporation | Predicted null updated |
US10725739B2 (en) | 2017-06-23 | 2020-07-28 | International Business Machines Corporation | Compiler controls for program language constructs |
US10740067B2 (en) | 2017-06-23 | 2020-08-11 | International Business Machines Corporation | Selective updating of floating point controls |
US11366663B2 (en) | 2018-11-09 | 2022-06-21 | Intel Corporation | Systems and methods for performing 16-bit floating-point vector dot product instructions |
CN112395003A (zh) * | 2019-08-14 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 运算方法、装置及相关产品 |
CN112395004A (zh) * | 2019-08-14 | 2021-02-23 | 上海寒武纪信息科技有限公司 | 运算方法、***及相关产品 |
CN111486888A (zh) * | 2020-04-14 | 2020-08-04 | 新石器慧通(北京)科技有限公司 | 误差校正方法、装置及无人车辆 |
US11269632B1 (en) * | 2021-06-17 | 2022-03-08 | International Business Machines Corporation | Data conversion to/from selected data type with implied rounding mode |
US20230308113A1 (en) * | 2022-03-25 | 2023-09-28 | International Business Machines Corporation | Reduced logic conversion of binary integers to binary coded decimals |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030055860A1 (en) * | 1998-10-06 | 2003-03-20 | Jean-Pierre Giacalone | Rounding mechanisms in processors |
US20080089448A1 (en) * | 2006-09-29 | 2008-04-17 | Analog Devices, Inc. | Fixed-point implementation of a joint detector |
US20100241834A1 (en) * | 2007-11-05 | 2010-09-23 | Sandbridge Technologies, Inc. | Method of encoding using instruction field overloading |
US20110029760A1 (en) * | 2009-07-28 | 2011-02-03 | Via Technologies, Inc. | Non-atomic scheduling of micro-operations to perform round instruction |
US20110093682A1 (en) * | 1994-12-02 | 2011-04-21 | Alexander Peleg | Method and apparatus for packing data |
US20120324136A1 (en) * | 2011-06-14 | 2012-12-20 | Nimrod Alexandron | Representation of data relative to varying thresholds |
US20130151576A1 (en) * | 2011-12-07 | 2013-06-13 | Arm Limited | Apparatus and method for rounding a floating-point value to an integral floating-point value |
US20140095891A1 (en) * | 2012-09-28 | 2014-04-03 | Gilbert M. Wolrich | Instruction set for sha1 round processing on 128-bit data paths |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267186A (en) * | 1990-04-02 | 1993-11-30 | Advanced Micro Devices, Inc. | Normalizing pipelined floating point processing unit |
DE4434895C2 (de) * | 1993-12-23 | 1998-12-24 | Hewlett Packard Co | Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen |
US5511016A (en) * | 1994-11-30 | 1996-04-23 | International Business Machines Corporation | Method for store rounding and circuit therefor |
US5812439A (en) * | 1995-10-10 | 1998-09-22 | Microunity Systems Engineering, Inc. | Technique of incorporating floating point information into processor instructions |
US5892697A (en) * | 1995-12-19 | 1999-04-06 | Brakefield; James Charles | Method and apparatus for handling overflow and underflow in processing floating-point numbers |
US6058410A (en) * | 1996-12-02 | 2000-05-02 | Intel Corporation | Method and apparatus for selecting a rounding mode for a numeric operation |
US6253311B1 (en) * | 1997-11-29 | 2001-06-26 | Jp First Llc | Instruction set for bi-directional conversion and transfer of integer and floating point data |
US7058937B2 (en) * | 2002-04-12 | 2006-06-06 | Intel Corporation | Methods and systems for integrated scheduling and resource management for a compiler |
US9223751B2 (en) * | 2006-09-22 | 2015-12-29 | Intel Corporation | Performing rounding operations responsive to an instruction |
US8327120B2 (en) * | 2007-12-29 | 2012-12-04 | Intel Corporation | Instructions with floating point control override |
US20110004644A1 (en) * | 2009-07-03 | 2011-01-06 | Via Technologies, Inc. | Dynamic floating point register precision control |
CN101692202B (zh) * | 2009-09-27 | 2011-12-28 | 龙芯中科技术有限公司 | 一种64比特浮点乘加器及其浮点运算流水节拍处理方法 |
US8914430B2 (en) * | 2010-09-24 | 2014-12-16 | Intel Corporation | Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions |
BR112014004600A2 (pt) * | 2011-09-26 | 2017-06-13 | Intel Corp | Instrução e lógica para prover operação de carga/armazenamento de vetor com funcionalidade de passo |
WO2013095535A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Floating point rounding processors, methods, systems, and instructions |
US9513871B2 (en) * | 2011-12-30 | 2016-12-06 | Intel Corporation | Floating point round-off amount determination processors, methods, systems, and instructions |
WO2014105011A1 (en) * | 2012-12-26 | 2014-07-03 | Intel Corporation | Coalescing adjacent gather/scatter operations |
CN106030510A (zh) * | 2014-03-26 | 2016-10-12 | 英特尔公司 | 三源操作数浮点加法处理器、方法、***和指令 |
-
2017
- 2017-12-14 US US15/841,959 patent/US20180173527A1/en active Pending
- 2017-12-15 EP EP17881366.3A patent/EP3555742B1/en active Active
- 2017-12-15 KR KR1020197018849A patent/KR102471606B1/ko active IP Right Grant
- 2017-12-15 WO PCT/US2017/066677 patent/WO2018112345A1/en unknown
- 2017-12-15 CN CN201780071430.4A patent/CN110140109A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110093682A1 (en) * | 1994-12-02 | 2011-04-21 | Alexander Peleg | Method and apparatus for packing data |
US20030055860A1 (en) * | 1998-10-06 | 2003-03-20 | Jean-Pierre Giacalone | Rounding mechanisms in processors |
US20080089448A1 (en) * | 2006-09-29 | 2008-04-17 | Analog Devices, Inc. | Fixed-point implementation of a joint detector |
US20100241834A1 (en) * | 2007-11-05 | 2010-09-23 | Sandbridge Technologies, Inc. | Method of encoding using instruction field overloading |
US20110029760A1 (en) * | 2009-07-28 | 2011-02-03 | Via Technologies, Inc. | Non-atomic scheduling of micro-operations to perform round instruction |
US20120324136A1 (en) * | 2011-06-14 | 2012-12-20 | Nimrod Alexandron | Representation of data relative to varying thresholds |
US20130151576A1 (en) * | 2011-12-07 | 2013-06-13 | Arm Limited | Apparatus and method for rounding a floating-point value to an integral floating-point value |
US20140095891A1 (en) * | 2012-09-28 | 2014-04-03 | Gilbert M. Wolrich | Instruction set for sha1 round processing on 128-bit data paths |
Also Published As
Publication number | Publication date |
---|---|
WO2018112345A1 (en) | 2018-06-21 |
CN110140109A (zh) | 2019-08-16 |
EP3555742A4 (en) | 2020-08-26 |
EP3555742A1 (en) | 2019-10-23 |
KR20190104329A (ko) | 2019-09-09 |
EP3555742B1 (en) | 2023-07-19 |
US20180173527A1 (en) | 2018-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102471606B1 (ko) | 내장형 라운딩 규칙을 갖는 부동 소수점 명령어 포맷 | |
RU2656730C2 (ru) | Процессоры, способы, системы и команды для сложения трех операндов-источников с плавающей запятой | |
US10140046B2 (en) | Supporting data compression using match scoring | |
CN117349584A (zh) | 实行16位浮点矩阵点积指令的***和方法 | |
CN112099852A (zh) | 可变格式、可变稀疏矩阵乘法指令 | |
JP6711480B2 (ja) | ベクトルインデックスロードおよびストアのための方法および装置 | |
CN110879724A (zh) | 用于深度学习和其它算法的fp16-s7e8混合精度 | |
US20190065202A1 (en) | Pointer-size controlled instruction processing | |
CN117724766A (zh) | 用于执行将矩阵变换为行交错格式的指令的***和方法 | |
JP7351060B2 (ja) | 浮動小数点データを圧縮するためのシステム | |
CN117724763A (zh) | 用于矩阵操作加速器的指令的装置、方法和*** | |
JP2017538213A (ja) | アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置 | |
JP2019197531A (ja) | 連鎖タイル演算を実施するためのシステムおよび方法 | |
JP5947879B2 (ja) | マスクレジスタを用いてジャンプを行うシステム、装置、および方法 | |
JP5806748B2 (ja) | 書き込みマスク・レジスタの末尾の最下位マスキング・ビットを判定するためのシステム、装置、および方法 | |
JP2018500651A (ja) | マスクレジスタとベクトルレジスタとの間で可変に拡張するための方法および装置 | |
KR102161682B1 (ko) | 이미디에이트 핸들링 및 플래그 핸들링을 위한 프로세서 및 방법 | |
JP6835436B2 (ja) | マスクをマスク値のベクトルに拡張するための方法および装置 | |
KR20210028075A (ko) | 범위-특정 계수 세트를 사용하여 단항 함수를 수행하는 시스템 | |
JP6807073B2 (ja) | 高速ベクトルによる動的なメモリ競合検出 | |
CN116860334A (zh) | 用于计算两个区块操作数中的半字节的数量积的***和方法 | |
JP2018507453A (ja) | 命令フローを最適化するチェックを実行するための装置および方法 | |
CN116880906A (zh) | 用于8位浮点矩阵点积指令的装置、方法和*** | |
JP2009093513A (ja) | 命令ビット長削減方法 | |
CN104823153A (zh) | 引导变化预测器逻辑 |
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 |