KR20160120249A - 수학적 함수를 연산하는 시스템 및 방법 - Google Patents

수학적 함수를 연산하는 시스템 및 방법 Download PDF

Info

Publication number
KR20160120249A
KR20160120249A KR1020160042910A KR20160042910A KR20160120249A KR 20160120249 A KR20160120249 A KR 20160120249A KR 1020160042910 A KR1020160042910 A KR 1020160042910A KR 20160042910 A KR20160042910 A KR 20160042910A KR 20160120249 A KR20160120249 A KR 20160120249A
Authority
KR
South Korea
Prior art keywords
hardware stage
inverse function
opcode
stage
arguments
Prior art date
Application number
KR1020160042910A
Other languages
English (en)
Other versions
KR102503498B1 (ko
Inventor
카오 웨이-룬
종 레판
Original Assignee
비반테 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/680,791 external-priority patent/US9703530B2/en
Application filed by 비반테 코포레이션 filed Critical 비반테 코포레이션
Publication of KR20160120249A publication Critical patent/KR20160120249A/ko
Application granted granted Critical
Publication of KR102503498B1 publication Critical patent/KR102503498B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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/548Trigonometric functions; Co-ordinate transformations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/544Methods 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Image Generation (AREA)

Abstract

수학적 함수는 연산 코드에 따라 단일 파이프라인을 사용하여 RCP, SQRT, EXP 또는 LOG에 대한 데이터 표를 사용하여 다항식 근사(예를 들어, 2차 근사 등)를 수행하는 단일 파이프라인으로 연산된다. 또한 SIN과 COS은 근사 ((-1)^IntX)*Sin(π*Min(FracX, 1.0 - FracX)/Min(FracX, 1.0 - FracX)에 따라 파이프라인을 사용하여 연산된다. 파이프라인 부분은 표와 보간을 사용하여 Sin(π*FracX)을 근사시키고, 후속 스테이지는 이 근사를 FracX로 승산한다. 1.0에 근접한 x의 입력 변수에 대해 LOG2(x-1)/(x-1)은 표와 보간을 사용하여 제1 파이프라인 부분을 사용하여 연산되고 이후 (x-1)로 승산된다. DIV 연산은 또한 필요에 따라 언더플로우를 피하기 위해 스케일업된 입력 인수에 수행될 수 있다. 역삼각 함수는 전처리 스테이지와 후처리 스테이지를 사용하여 계산되어 단일 파이프라인으로부터 다수의 역삼각 함수를 획득할 수 있다.

Description

수학적 함수를 연산하는 시스템 및 방법{SYSTEMS AND METHODS FOR COMPUTING MATHEMATICAL FUNCTIONS}
관련 출원
본 출원은 2014년 9월 15일에 출원된, 발명의 명칭이 "Systems and Methods for Computing Mathematical Functions"인 미국 출원 번호 14/486,891의 부분 계속 출원이다.
기술 분야
본 발명은 일반적으로 컴퓨터 시스템 분야에 관한 것으로, 보다 상세하게는 그래픽 프로세서 칩을 위한 연산 기능에 관한 것이다.
그래픽 프로세서 칩은 전통적으로 고속 드로잉 및 렌더링 속력(fast drawing and rendering speed)을 위해 하드웨어로 구현된 여러 수학적 함수를 사용한다. 이들 수학적 함수의 일부 예는 역수 함수("RCP"), 역수 제곱근 함수("SQRT"), 지수 함수("EXP") 및 로그 함수("LOG")를 포함한다. 이들 수학적 함수는 종래 기술에서 상이한 알고리즘을 갖는 별도의 회로 블록으로 구현된다.
예를 들어, 종래 기술에서 3개의 사이클의 RCP을 구현할 때, 부동 소숫점 수(floating point number)(x)는 최상위 비트(most significant bit)("MSB") 부분(x0)과 최하위 비트(least significant bit)("LSB") 부분(x1)(여기서 x1=x-x0)의 연쇄로 표현될 수 있다. x의 역수의 주된 계산은 가수(mantissa)를 계산하는 것이다. 가수는 일반적으로 종래 기술에서 2개의 항의 함수, 즉: f(x)=a+b(x-x0)로 계산되고, 여기서 a와 b는 데이터 룩업 표(look up table)이다. 일반적인 예에서, 21 비트를 초과하는 정밀도가 그래픽 프로세서에 요구되는 경우, 요구되는 정밀도를 달성하기 위해 데이터 룩업 표(a 및 b) 각각에서 16,000개가 넘는 엔트리가 요구될 수 있다. 이것은 14 비트(x0)와 214개의 엔트리를 각각 갖는 데이터 룩업 표들에 기초한다. 이러한 큰 데이터 룩업 표를 하드웨어로 구현하는 것은 데이터 룩업 표의 사이즈에 비례하는 큰 게이트 카운트(gate count)를 야기한다. 그래픽 프로세서 칩은 여러 수학적 함수를 하드웨어로 구현하는 것을 포함할 수 있다. 종래 기술의 예에서, 이들 수학적 함수 각각은 큰 게이트 카운트를 요구하고 일반적으로 다른 방법들과 결합된다. 종래 기술에서는 별도의 로직 회로와 별도의 큰 데이터 룩업 표에 의해 이들 수학적 함수 각각을 구현하는 것이 공통적인 기술이다. 높은 속력과 모바일 애플리케이션으로 인해 점점 더 많은 집적과 더 적은 전력 소비를 요구함에 따라, 여러 수학적 함수를 구현하는데 효율적인 알고리즘을 수립하는 것이 요구된다.
본 발명의 잇점을 용이하게 이해하기 위하여, 앞서 간략히 설명된 본 발명을 보다 상세히 설명하는 것이 첨부 도면에 예시된 특정 실시예를 참조하여 제공된다. 이들 도면은 본 발명의 단지 일반적인 실시예를 도시하는 것일 뿐 본 발명의 범위를 제한하는 것으로 고려되어서는 안된다는 것을 주지하면서, 본 발명은 첨부 도면을 사용하여 추가적인 특정 사항으로 상세히 설명된다:
도 1은 컴퓨터 시스템의 개략 블록도;
도 2는 본 발명의 일 실시예에 따른 6개의 스테이지로 통일된 하드웨어 파이프라인(6 stage unified hardware pipeline)을 도시하는 블록도;
도 3은 본 발명의 일 실시예에 따른 3개의 스테이지 RCP 하드웨어 파이프라인라인을 도시하는 블록도;
도 4는 본 발명의 일 실시예에 따른 여러 예시적인 데이터 룩업 표를 계산하는 알고리즘을 도시하는 흐름도;
도 5는 본 발명의 일 실시예에 따른 대안적인 통일된 하드웨어 파이프라인을 도시하는 흐름도; 및
도 6은 본 발명의 일 실시예에 따른 역삼각 함수(inverse trigonometric function)를 계산하는 대안적인 파이프라인을 도시하는 흐름도.
일반적으로 도면에 도시되고 설명된 바와 같이 본 발명의 성분들은 여러 상이한 구성으로 배열되고 설계될 수 있는 것으로 용이하게 이해된다. 따라서, 도면에 도시된 본 발명의 실시예의 이하 보다 상세한 설명은 청구범위에 청구된 본 발명의 범위를 제한하려고 의도된 것이 아니라, 본 발명에 따라 현재 고려되고 있는 실시예의 특정 예를 단지 예시하려는 것으로 이해된다. 현재 설명된 실시예는 동일한 부분이 도면 전체에 걸쳐 동일한 부호로 지시된 도면을 참조하여 가장 잘 이해될 수 있을 것이다.
본 발명은 종래 기술과, 특히, 이 기술 분야에서 현재 이용가능한 장치 및 방법으로 아직 완전히 해결하지 못한 문제와 필요에 대응하여 창안된 것이다.
본 발명에 따른 실시예는 장치, 방법, 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 따라서, 본 발명은 완전히 하드웨어인 실시예, (펌웨어, 상주 소프트웨어, 마이크로-코드 등을 포함하는) 완전히 소프트웨어인 실시예, 또는 본 명세서에서 일반적으로 "모듈" 또는 "시스템"으로 모두 언급될 수 있는 소프트웨어와 하드웨어의 측면을 결합하는 실시예의 형태를 취할 수 있다. 나아가, 본 발명은 컴퓨터-사용가능한 프로그램 코드를 구현하는 표현의 임의의 유형적인 매체에 구현된 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 이상의 컴퓨터-사용가능한 또는 컴퓨터-판독가능한 매체의 임의의 조합이 사용될 수 있다. 예를 들어, 컴퓨터-판독가능한 매체는 휴대용 컴퓨터 디스켓, 하드 디스크, 랜덤 액세스 메모리(RAM) 디바이스, 판독 전용 메모리(ROM) 디바이스, 소거가능한 프로그래밍가능한 판독 전용 메모리(EPROM 또는 플래쉬 메모리) 디바이스, 휴대용 컴팩트 디스크 판독 전용 메모리(CDROM), 광 저장 디바이스, 및 자기 저장 디바이스 중 하나 이상을 포함할 수 있다. 선택된 실시예에서, 컴퓨터-판독가능한 매체는 명령 실행 시스템, 장치, 또는 디바이스에 의해 또는 이들 성분과 연결되어, 사용되는 프로그램을 포함하거나 저장하거나 통신하거나 전파하거나 운반할 수 있는 임의의 비-일시적인 매체를 포함할 수 있다.
본 발명의 연산을 수행하는 컴퓨터 프로그램 코드는 객체 지향 프로그래밍 언어, 예를 들어, Java, Smalltalk, C++ 등과, 종래의 절차 프로그래밍 언어, 예를 들어 "C" 프로그래밍 언어 또는 이와 유사한 프로그래밍 언어를 포함하는 하나 이상의 프로그래밍 언어의 임의의 조합으로 기록될 수 있다. 프로그램 코드는 독립 소프트웨어 패키지로서 컴퓨터 시스템에서 완전히 실행되거나, 독립 하드웨어 유닛에서 실행되거나, 부분적으로 컴퓨터로부터 일정 거리 이격된 원격 컴퓨터에서 실행되거나, 또는 원격 컴퓨터 또는 서버에서 실행될 수 있다. 원격 컴퓨터 또는 서버에서 실행되는 시나리오에서, 원격 컴퓨터는 근거리 네트워크(LAN) 또는 광역 네트워크(WAN)를 포함하는 임의의 유형의 네트워크를 통해 컴퓨터에 연결되거나, 또는 (예를 들어, 인터넷 서비스 제공자를 사용하여 인터넷을 통해) 외부 컴퓨터에 연결이 이루어질 수 있다.
본 발명은 본 발명의 실시예에 따라 방법, 장치(시스템) 및 컴퓨터 프로그램 제품의 흐름도 및/또는 블록도를 참조하여 아래에 설명된다. 흐름도 및/또는 블록도의 각 블록과, 흐름도 및/또는 블록도에서 블록의 조합은 컴퓨터 프로그램 명령 또는 코드에 의해 구현될 수 있는 것으로 이해된다. 이들 컴퓨터 프로그램 명령은 일반 목적 컴퓨터, 특수 목적 컴퓨터, 또는 다른 프로그래밍가능한 데이터 처리 장치의 프로세서에 제공되어, 컴퓨터 또는 다른 프로그래밍가능한 데이터 처리 장치의 프로세서를 통해 실행되는 명령이 흐름도 및/또는 블록도의 블록 또는 블록들에 지정된 기능/동작을 구현하는 수단을 생성하는 기계를 형성하도록 구성될 수 있다.
이들 컴퓨터 프로그램 명령은 또한 비-일시적인 컴퓨터-판독가능한 매체에 저장될 수 있고, 이 컴퓨터-판독가능한 매체에 저장된 명령은 컴퓨터 또는 다른 프로그래밍가능한 데이터 처리 장치를 특정 방식으로 기능하도록 지시하여, 흐름도 및/또는 블록도의 블록 또는 블록들에 지정된 기능/동작을 구현하는 명령 수단을 포함하는 제조 물품을 형성하도록 구성될 수 있다.
컴퓨터 프로그램 명령은 또한 컴퓨터 또는 다른 프로그래밍가능한 데이터 처리 장치에 로딩되어, 일련의 연산 단계를 컴퓨터 또는 다른 프로그래밍가능한 장치에서 수행하여 컴퓨터 또는 다른 프로그래밍가능한 장치에서 실행되는 명령이 흐름도 및/또는 블록도의 블록 또는 블록들에 지정된 기능/동작을 구현하는 공정을 제공하는 컴퓨터로-구현되는 공정을 형성하도록 구성될 수 있다.
도 1은 예시적인 연산 디바이스(100)를 도시하는 블록도이다. 연산 디바이스(100)는 본 명세서에 설명된 것과 같은 여러 절차를 수행하는데 사용될 수 있다. 연산 디바이스(100)는 서버, 클라이언트, 또는 임의의 다른 연산 개체로 기능할 수 있다. 연산 디바이스는 본 명세서에 설명된 여러 모니터링 기능을 수행할 수 있고, 본 명세서에 설명된 애플리케이션 프로그램과 같은 하나 이상의 애플리케이션 프로그램을 실행할 수 있다. 연산 디바이스(100)는 데스크톱 컴퓨터, 노트북 컴퓨터, 서버 컴퓨터, 핸드헬드 컴퓨터, 태블릿 컴퓨터 등과 같은 여러 연산 디바이스 중 어느 것일 수 있다.
연산 디바이스(100)는 모두 버스(112)에 연결된, 하나 이상의 프로세서(들)(102), 하나 이상의 메모리 디바이스(들)(104), 하나 이상의 인터페이스(들)(106), 하나 이상의 대용량 저장 디바이스(들)(108), 하나 이상의 입력/출력(I/O) 디바이스(들)(110), 및 디스플레이 디바이스(130)를 포함한다. 프로세서(들)(102)는 메모리 디바이스(들)(104) 및/또는 대용량 저장 디바이스(들)(108)에 저장된 명령을 실행하는 하나 이상의 프로세서 또는 제어기를 포함한다. 프로세서(들)(102)는 캐시 메모리와 같은 여러 유형의 컴퓨터-판독가능한 매체를 더 포함할 수 있다.
메모리 디바이스(들)(104)는 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM)(114)) 및/또는 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM)(116))와 같은 여러 컴퓨터-판독가능한 매체를 포함한다. 메모리 디바이스(들)(104)는 플래쉬 메모리와 같은 재기록가능한 ROM을 더 포함할 수 있다.
대용량 저장 디바이스(들)(108)는 자기 테이프, 자기 디스크, 광 디스크, 솔리드-스테이트 메모리(예를 들어, 플래쉬 메모리) 등과 같은 여러 컴퓨터 판독가능한 매체를 포함한다. 도 1에 도시된 바와 같이, 특정 대용량 저장 디바이스는 하드 디스크 드라이브(124)이다. 여러 드라이브는 또한 대용량 저장 디바이스(들)(108)에 포함되어 여러 컴퓨터 판독가능한 매체로부터 판독을 수행하거나 및/또는 이에 기록을 수행할 수 있다. 대용량 저장 디바이스(들)(108)는 이동식 매체(126) 및/또는 비-이동식 매체를 포함한다.
I/O 디바이스(들)(110)는 데이터 및/또는 다른 정보를 연산 디바이스(100)에 입력하거나 이로부터 검색할 수 있는 여러 디바이스를 포함한다. 예시적인 I/O 디바이스(들)(110)는 커서 제어 디바이스, 키보드, 키패드, 마이크로폰, 모니터 또는 다른 디스플레이 디바이스, 스피커, 프린터, 네트워크 인터페이스 카드, 모뎀, 렌즈, CCD 또는 다른 이미지 캡처 디바이스 등을 포함한다.
디스플레이 디바이스(130)는 정보를 연산 디바이스(100)의 하나 이상의 사용자에 디스플레이할 수 있는 임의의 유형의 디바이스를 포함한다. 예시적인 디스플레이 디바이스(130)는 모니터, 디스플레이 단말, 비디오 프로젝션 디바이스 등을 포함한다.
인터페이스(들)(106)는 연산 디바이스(100)가 다른 시스템, 디바이스, 또는 연산 환경과 상호 작용할 수 있는 여러 인터페이스를 포함한다. 예시적인 인터페이스(들)(106)는, 근거리 네트워크(LAN), 광역 네트워크(WAN), 무선 네트워크, 및 인터넷과의 인터페이스와 같은 임의의 개수의 상이한 네트워크 인터페이스(120)를 포함한다. 다른 인터페이스(들)는 사용자 인터페이스(118)와 주변 디바이스 인터페이스(122)를 포함한다. 인터페이스(들)(106)는 하나 이상의 사용자 인터페이스 요소(118)를 더 포함할 수 있다. 인터페이스(들)(106)는 프린터, 포인팅 디바이스(마우스, 트랙 패드 등), 키보드 등을 위한 인터페이스와 같은 하나 이상의 주변 인터페이스를 더 포함할 수 있다.
버스(112)를 통해, 프로세서(들)(102), 메모리 디바이스(들)(104), 인터페이스(들)(106), 대용량 저장 디바이스(들)(108), 및 I/O 디바이스(들)(110)는 서로 통신할 수 있고, 버스(112)에 연결된 다른 디바이스 또는 성분과 통신할 수 있다. 버스(112)는 시스템 버스, PCI 버스, IEEE 1394 버스, USB 버스 등과 같은 여러 유형의 버스 구조 중 하나 이상을 나타낸다.
예시를 위하여, 프로그램 및 다른 실행가능한 프로그램 성분은 본 명세서에 이산 블록으로 도시되어 있지만, 이러한 프로그램과 성분은 연산 디바이스(100)의 상이한 저장 부품들에 여러 개 상주할 수 있고, 프로세서(들)(102)에 의해 실행되는 것으로 이해된다. 대안적으로, 본 명세서에 설명된 시스템과 절차는 하드웨어로 구현되거나, 또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 조합으로 구현될 수 있다. 예를 들어, 하나 이상의 응용 특정 집적 회로(ASIC)는 본 명세서에 설명된 시스템과 절차 중 하나 이상을 수행하도록 프로그래밍될 수 있다.
도 2는 본 발명의 일 실시예에 따른 6개의 스테이지로 통일된 하드웨어 파이프라인을 도시하는 블록도이다. 여기서, 블록(101), 블록(103), 블록(105), 블록(107), 블록(109), 블록(111), 및 블록(113)은 파이프라인의 레지스터 스테이지(register stage)들이다. 블록(102)은 부동 소숫점-고정 소숫점 변환기(floating point to fixed point converter)이다. 블록(112)은 고정 소숫점-부동 소숫점 변환기이다. 일 예에서, 블록(112)은 EXP 함수를 구현하는 연산 코드(opcode)(즉, 구성(configuration) 명령, 마이크로-코드 등)에 따라 바이패스 회로(bypassing function)이도록 구성될 수 있다. 다른 예에서 블록(102)은 LOG 함수를 구현하는 다른 연산 코드(즉, 구성 명령, 마이크로-코드 등)에 따라 바이패스 회로이도록 구성될 수 있다. 또 다른 예에서, 두 블록(102)과 블록(112)은 RCP 함수 또는 SQRT 함수를 구현하는 또 다른 연산 코드(즉, 구성 명령, 마이크로-코드 등)에 따라 바이패스 회로이도록 구성될 수 있다. 일부 예에서, 블록(104, 106, 108, 및 110)은 별도의 데이터 룩업 표에 기초하여 RCP, SQRT, EXP, LOG 등과 같은 수학적 함수를 계산하기 위해 2차 근사의 여러 부분을 구현할 수 있다. 예를 들어, 블록(104)은 부동 소숫점 수(x)의 가수에 대응하는 정수(i)에 기초하여 c에 대한 데이터 표를 룩업한다. 또한, 블록(106)은 b에 대한 데이터 표를 룩업한다. 동일한 파이프라인 스테이지 동안, 블록(106)은 또한 c(x-x0)를 계산한다. 유사하게, 블록(108)은 a에 대한 데이터 표를 룩업하고, b(x-x0)와 c(x-x0)(x-x1)를 계산한다. 블록(110)은 2차 근사를 계산하기 위해 3개의 항을 합산한다. 상기 설명은 앞서 설명된 상세로 제한되지 않고, 상기 설명에 자명하게 이루어지는 여러 변형이나 변경이 이루어질 수 있을 것이다.
도 3은 본 발명의 일 실시예에 따른 3개의 스테이지 RCP 하드웨어 파이프라인을 도시하는 블록도이다. 여기서, 블록(201), 블록(203), 블록(205), 및 블록(207)은 파이프라인의 레지스터 스테이지이다. 일부 예에서, 블록(202), 블록(204), 및 블록(206)은 2차 근사의 여러 부분을 구현할 수 있다. 예를 들어, 블록(202)은 부동 소숫점 수의 가수의 MSB에 대응하는 정수(i)에 기초하여 b 및 c에 대한 데이터 표를 룩업한다. 동일한 파이프라인 스테이지 동안, 블록(202)은 또한 (x-x0)(x-x1)을 계산한다. 또한, 블록(204)은 a에 대한 데이터 표를 룩업하고 b(x-x0)와 c(x-x0)(x-x1)를 계산한다. 일부 구현에서 (x1-x)는 NOT(x-x0)으로 계산될 수 있고, 여기서 NOT은 1을 0으로 변경하고 0을 1로 변경하는 비트방식의 연산이다. 블록(206)은 2차 근사를 계산하기 위해 3개의 항을 합산한다. 상기 설명은 앞서 설명된 상세로 제한되지 않고, 상기 설명에 자명하게 이루어지는 여러 변형이나 변경이 이루어질 수 있을 것이다.
도 4는 본 발명의 일 실시예에 따른 여러 데이터 룩업 표를 계산하는 예시적인 알고리즘을 도시하는 흐름도이다. 여기서, 예시적인 알고리즘은 SQRT에 대해 데이터 표(a, b 및 c)를 연산하기 위해 예시된다. 이 예에서, 표[0][i]=a, 표[1][i]=b 및 표[2][i]=c이다. 3개의 선형 방정식을 사용하여 3개의 값(a, b 및 c)을 연산한다. 이들 3개의 방정식은 세그먼트(segment)(301)의 시작점(즉, x), 중간점(즉, x--5) 및 종료점(즉, x1)을 제일 먼저 연산하는 것에 의해 풀린다. 블록(302)과 블록(303)은 부동 소숫점 포맷(floating point format)에서 a, b 및 c를 연산한다. 블록(304)은 a, b 및 c를 정수 포맷으로 변환한다. 블록(305)은 반올림(rounding)을 수행하고 최종 값을 생성한다. 다른 예로서, 블록(302)에서 "sqrt" 함수는 역수 함수로 대체되어, RCP에 대해 데이터 표(a, b 및 c)를 연산하는 알고리즘을 적응시킬 수 있다. 다른 예에서, 블록(302)에서 "sqrt" 함수는 다른 함수(예를 들어, EXP, LOG 등)로 대체되어, 이 다른 함수에 대해 데이터 표(a, b 및 c)를 연산하는 알고리즘을 적응시킬 수 있다. 상기 설명은 앞서 설명된 상세 사항으로 제한되지 않고, 상기 설명에 자명하게 이루어지는 여러 변형이나 변경이 이루어질 수 있을 것이다. 도 4의 흐름도는 64개의 엔트리의 표를 구현하기에 적절할 수 있다. 다른 개수의 엔트리, 예를 들어, 128개의 엔트리도 사용될 수 있다.
전술된 방법은, 모바일 그래픽 칩에서 예를 들어, 버텍스 쉐이더(vertex shader)와 픽셀 쉐이더(pixel shader)에 대해 부동 소숫점 값에서 하나의 통일된 하드웨어 파이프라인으로 전술된 초월 함수(transcendental function)의 리스트를 연산하는 통일된 방법을 제공한다. 이 기술은 다음 함수, 즉: F(x) = 1/x; F(x) = 1/x^(1/2); F(x) = 2^x 그리고 F(x) = LOG2(x)를 연산하는 것에 기초할 수 있다.
이들 함수는 다음 함수, 즉: F(x) = a + b(x-x0) + c(x-x0)(x-x1) (이후 "보간 함수")을 수행하는 통일된 하드웨어 파이프로 구현된다. 근사는 64개, 128개, 또는 일부 다른 개수의 세그먼트에서 수행될 수 있고, 여기서 x0은 세그먼트의 시작 값이고, x1은 세그먼트의 종료 값이다. X0은 x의 MSB(최상위 비트) 부분이고, (x - x0)는 x의 LSB(최하위 비트) 부분이다. x의 값은 x0 내지 x1 (x0 <= x < x1)이다. 값 a, b 및 c은 하드웨어에 구현된 표와 같은 3개의 별도의 표로부터 온다.
EXP에 대해, 통일된 하드웨어 파이프 전에 부동 소숫점-고정 소숫점 수 변환 스테이지가 위치된다. LOG에 대해, 통일된 하드웨어 파이프 후에 고정 소숫점-부동 소숫점 수 변환이 있다. 하드웨어 흐름과 함수는, 각 함수에 대해 선택된 표가 상이한 것을 제외하고는, 4개의 함수 각각에 대해 동일하다. 입력 연산 코드는 이 함수를 선택한다. 이 접근법에 기초하여 낮은 레이턴시 효율의 RCP (역수) 구현이 3개의 사이클로 감소될 수 있다.
도 5를 참조하면, 로직 디바이스는 도 1 및 도 2의 파이프라인에 추가되어, Sin(πx), Cos(πx), LOG2(x) 및 DIV(즉 y/x)의 계산을 가속시킬 수 있다. 예를 들어, 추가적인 로직은 수식, 즉: Sin(πx) = Sin(π*(IntX + FracX)) = (-1)^IntX *Sin(π*FracX)에 기초하여 구현될 수 있고, 여기서 IntX는 입력 부동 소숫점 인수(x)의 정수 부분이고, FracX는 입력(x)의 소수 부분(fractional portion)이다. 따라서, Sin(πx)을 직접 근사화하는 대신, 이것은 F(x) = Sin(π*FracX)/FracX에 따라 근사화될 수 있다. 따라서, 도 5의 변형된 파이프라인은 추가적인 파이프라인(500)을 사용하여 추가적인 출력(출력2)을 형성할 수 있고, 출력2는 예를 들어 부동 소수점-고정 소수점(Float2Fixed) 변환 로직(202)으로부터 FracX와 같다. 파이프라인은 Sin(πx) = F(x)*출력2를 연산하도록 더 변경될 수 있고, 여기서, F(x)는, 예를 들어, 파이프라인 스테이지(203-214)에 따라 함수 Sin(π*FracX)/FracX의 근사이다. 구체적으로, F(x)는 예를 들어 본 명세서에 앞서 설명된 파이프라인 및 방법에 따라 입력 인수로서 FracX의 값에 따라 선택된 표의 엔트리들 중에서 보간한 결과이다. 예시된 실시예에서, F(x)를 출력2로 승산(multiplication)하는 것은 파이프라인의 스테이지(216)에서 수행될 수 있다. Cos(πx)에 대해, Cos(πx) = Sin(π(x+0.5))이다. 그래서 Sin(πx)의 동일한 로직을 사용하여 결과를 취할 수 있다. 일부 실시예에서, Sin(πx)은, 만약 (FracX <= 0.5f)인 경우, F(x) = Sin(π*FracX)/FracX 및 출력2 = FracX를 사용하여 연산되고, 여기서 0.5f는 1/2와 같은 부동 소숫점 값이다. 일부 실시예에서, Sin(πx)에 대해, FracX > 0.5f인 경우, F(x) = Sin(π*(1.0 - FracX))/(1.0 - FracX)이고, 출력2는 1.0-FracX이다. 예를 들어, 보다 일반적으로, Sin(πx)에 대해, F(x) = ((-1)^IntX)*Sin(π*Min(FracX, 1.0 - FracX))/Min(FracX, 1.0 - FracX)이고, 출력2는 Min(FracX, 1.0 - FracX)이고, 여기서 IntX는 x의 정수 부분이다.
입력 인수(x)가 1.0에 근접할 때, Log2(x)는 매우 작다. LOG2(x)를 직접 근사시키는 대신, 이것은 F(x) = Log2(x - 1)/(x - 1)로 근사화될 수 있다. 따라서, LOG2에 대해 출력2는 x - 1과 같게 설정될 수 있다. 그래서 LOG2(x) = F(x)*출력2이고, 여기서 출력2는 (x - 1)과 같고 F(x)는 본 명세서에 설명된 하드웨어 파이프라인 내 표와 보간을 사용하여 연산된 LOG2(x-1)/(x-1)의 근사이다. 이 변경이 수행되는 x의 값은 사용되는 부동 소숫점 표현에 기초하여 선택된다. 예를 들어, 일부 실시예에서, x가 [0.75, 1.5) 범위에 있을 때, F(x) = LOG2(x-1)/(x-1)이고, 출력2 = (x-1)이다. 그렇지 않은 경우, LOG2(x)에 대해, F(x) = LOG2(x)이고 출력2 = 1.0f이다.
DIV(예를 들어, y/x)에 대해, 관계 y/x = y*(1/x) = y*Rcp(x)를 사용하면, |x| > 2^126일 때, 32 비트 부동 소숫점 표현에서 1/x = 0이므로, 1/x에서 언더플로우(underflow) 문제가 있을 수 있다. 최대 부동 소숫점 값이 2^127*1.11111111이고 "부동 소숫점 정규 표현(normal expression)"에서, 최소 값은 2^(-126)이므로, |x| > 2^126에서는 언더플로우가 발생한다. 비정규수(denormalized number)를 사용하는 경우, 최소 값은 2^(-149)일 수 있다. 이 경우에, 두 입력 인수(x 및 y)는 2^32, 즉 y/x = (y/2^32)/(x/2^32)로 스케일링될 수 있다. 그래서 하드웨어 파이프라인에서, x가 (예를 들어 2^64를 초과하는) 일정 범위에 있을 때 추가적인 파이프라인 스테이지를 사용하여 두 y/x를 스케일다운할 수 있다. 이 추가적인 스테이지는, 표 값을 선택하고 본 명세서에 설명된 보간 단계를 수행하는 파이프라인 단계 전에 수행될 수 있다.
G(x) = Acos(x)/Sqrt(1-x*x)는 [0, 1.0]에서 매우 연속(smooth)이고, 즉 그 미분은 유한하고, 다항식을 사용하여 용이하게 근사화된다. G(x)는 SinPi(x)/x에 대해 전술된 바와 유사한 방식으로 근사화될 수 있다. 특히, 인수는 부동 소숫점으로부터 24 비트 고정 소숫점 값으로 변환될 수 있고, G(x)는 전술된 바와 같이 룩업 표와 다항식 근사를 사용하여 고정 소숫점 형태로 수행될 수 있고, 다항식 근사의 출력은 부동 소숫점 값으로 변환될 수 있다. 특히, 다항식 근사는 전술된 바와 같이 구간적 2차 근사(piecewise quadratic approximation)를 사용하여 수행될 수 있다. 나아가, aTan2(x,y)에 대한 전처리 함수(pre-process function)는 ±무한대(infinity)의 (x,y) 성분을 조절하는데 사용될 수 있다.
Acos(x)는 다음과 같이 G(x)로부터 획득될 수 있다:
Acos(x) = G(x) * Sqrt(1-x*x) 및
Acos(-x) = π - G(-x)*Sqrt(1-x*x) (x ≥ 0인 경우),
상기 2개의 수식을 통일하기 위하여(그렇지 않은 경우 "if else" 명령이 요구될 수 있다), 일부 실시예는 함수 G(Z)에 기초하여 2개의 입력(x, y)과 출력(Out1 및 Out2)을 취하는 함수(out1, out2) = InvTrig(x, y, 연산 코드)를 사용하고, 여기서 Z는 연산 코드에 기초하여 결정된 입력이다.
도 6을 참조하면, 역삼각 함수를 연산하는 장치가 예시적으로 제시될 수 있다. 전처리 스테이지(pre-processing stage)(600)는 입력 인수(x) 또는 입력 인수(x 및 y)를 처리하고 하나 이상의 출력을 생성한다. 특히, 전처리 스테이지(600)는 표 1에 약술된 입력 인수에 응답하여 출력 인수를 제공하는데 효과적인 회로를 포함할 수 있다.
전치-프로세스 스테이지 함수
연산 코드 입력 인수(들) 출력 인수(들)
ACos(x), ACosPi(x) x, 무정의(don't care) u = 1 - x*x (Fma를 사용)
s = Sqrt(u)
ASin(x), ASinPi(x) x,
무정의
u = 1 - x*x (Fma를 사용)
s = Sqrt(u)
ATan(x) ATanPi(x), x,
무정의
u = 1 + x*x (Fma를 사용)
s = Rsqrt(u)
t = s*x
ATan2(x,y), ATan2Pi(x,y),
입력 (s, t)
x, y (x', y') = 새로운(x, y)
u = x'*x' + y'*y' (Dp2를 사용)
v = Rsqrt(u)
s = x'*v
t = y'*v
전처리 스테이지(600)로부터 출력 인수는 스테이지(602)에 입력될 수 있고, 이 스테이지(602)는, 전처리 스테이지의 출력 인수 및/또는 표 2에 약술된 원래의 입력 인수를, 이 입력 인수와 함께 수신된 연산 코드에 따라 처리하는 함수 "InvTrig()"를 실행한다. InvTrig 스테이지(602)는 2개의 출력(Out1 및 Out2)을 생성할 수 있고, 이들 출력 중 하나 또는 둘 모두가 사용될 수 있다. 표 1에서, "Fma"는, 오버플로우(overflow)를 회피하기 위해 a와 b의 정밀도를 감소시키는 것과 대조적으로, c를 가산하기 전에 높은 정밀도로 a와 b에 함수 a*b+c를 수행하는 연산을 말한다. 표 1에서, "Dp2"는, 듀얼 정밀도(dual precision)로 함수 a*b+kc*d를 수행하는 함수, 즉 오버플로우를 회피하기 위해 절반 정밀도로 인수(a, b, c, 및 d)를 사용하여 승산 (a*b)과 (c*d)을 수행하고 최대 정밀도로 가산을 수행하는 함수를 말한다.
InvTrig() 함수
연산 코드 Out1 Out2
ACos(x), ACosPi(x) G(|x|)*Sign(x) x ≥ 0 ? 0 : π
ASin(x), ASinPi(x) G(s) Not Used
ATan(x) ATanPi(x), s < 2^(-40) ? 0 : G(s) s < 2^(-40) ? Sign(x)* π/2 : 0
ATan2(x,y), ATan2Pi(x,y),
입력 (s, t)
G(s)*(Sign(s))
(Sign(x) = Sign(s))
x ≥ 0 ? 0 : Sign(t)*π
(Sign(y) = Sign(s))
표 2에서 명백한 바와 같이, 각 연산 코드에 대해 입력 인수의 적어도 일부 값은 함수 G(Z)를 계산하는 것을 초래한다(여기서 Z는 표 2에서 약술된 x, s 등이다). 예시된 실시예에서 G(Z)는 값 G(Z) = Acos(Z)/Sqrt(1 - x*x)를 출력한다. G(Z)를 연산하는 것은 도 5의 파이프라인을 사용하여 수행될 수 있다. 또한, Sqrt(제곱근)와 Rsqrt(제곱근의 역수)는 또한 도 2 내지 도 5의 파이프라인의 속성 중 일부 또는 전부를 구비할 수 있는 파이프라인(604)을 사용하여 계산될 수 있다. 구체적으로, 이들 함수의 값은 계수(a, b, c)에 대해 룩업 표를 사용하여 연산되고 전술된 바와 같이 보간될 수 있다.
InvTrig 스테이지(602)의 출력들 중 하나 또는 둘 모두는 전처리 스테이지(600)의 출력들 중 하나 이상의 출력과 원래의 입력 인수를 따라 후처리 스테이지(post-processing stage)(606)에 의해 처리되어 연산 코드에 대응하는 역삼각 함수를 근사화시키는 출력(608)을 획득할 수 있다. 특히, 후처리 스테이지(606)에 의해 수행되는 연산과, 각 연산 코드에 대해 연산되는 값은 표 3에 제시된다. 1/Pi의 값은 전치-연산되어 (0.31830988618379067153776752674503f) 필요할 때마다 연산될 필요가 없다.
후치-프로세서 스테이지 함수
연산 코드 최종 결과(w)
ACos(x), w = s*Out1 + Out2
ACosPi(x) w = (s*Out1 + Out2)*(1/Pi)
ASin(x), w = Out1*x
ASinPi(x) w = Out1*x*Pi
ATan(y) w = Out1*t + Out2
ATanPi(y) w = (Out1*t + Out2)*(1/Pi)
ATan2(x,y), w = Out1*t + Out2
ATan2Pi(x,y), w = (Out1*t + Out2)*(1/Pi)
새로운(x,y)의 연산이 이제 설명된다. 특히 새로운(x, y)은 오버플로우, 언더플로우, 0으로 나누는 것, 및 일부 입력 인수에 대해 발생할 수 있는 다른 에러를 회피하는데 사용될 수 있다. 예를 들어, 새로운(x, y)은 Atan2pi의 출력이 Atan2pi에 대한 OpenCL 표준의 요구조건에 순응할 수 있도록 출력(x' 및 y')을 생성할 수 있다:
atan2pi ( ±0, -0 ) = ±1.
atan2pi ( ±0, +0 ) = ±0.
atan2pi ( ±0, x )는 x < 0인 경우 ±1을 리턴(return)한다.
atan2pi ( ±0, x )는 x > 0인 경우 ±0을 리턴한다.
atan2pi ( y, ±0 )는 y < 0인 경우 -0.5를 리턴한다.
atan2pi ( y, ±0 )는 y > 0인 경우 0.5를 리턴한다.
atan2pi ( ±y, -∞)는 유한 y > 0인 경우 ±1을 리턴한다.
atan2pi ( ±y, +∞)는 유한 y > 0인 경우 ±0을 리턴한다.
atan2pi ( ±∞, x )는 유한 x인 경우 ±0.5를 리턴한다.
atan2pi (±∞, -∞)는 ±0.75를 리턴한다.
atan2pi (±∞, +∞)는 ±0.25를 리턴한다.
예시된 실시예에서, 전술된 결과들은 표 4에서 아래에 설명된 새로운(x, y)을 구현하는 것에 의해 달성된다. 예를 들어, x = y = 2^68인 경우, 새로운 (x, y)이 사용되지 않은 경우, u = (x*x + y*y) = 2^137이어서, 이는 오버플로우 (max = 2^127*1.11111…)를 초래한다. u = +무한대(inf)인 경우, v = 0, (s, t) = (0, 0)이다. 최종 결과는 그리하여 w = 0이다. 올바른 결과는 0.25이다. x = y = 2^(-68)인 경우, 언더플로우이고, u = 0, v = 무한대, (s, t) = 무한대이어서 잘못된 결과가 또한 발생한다. 최종 결과는 w = Nan이다. G(s) 계산에서 |s| > 1.0인 경우, InvTrig의 출력은 out1 = out2 = Nan일 수 있다.
새로운(x, y) 함수 정의
입력 y 입력 x 출력 y' 출력 x'
Nan x Nan x
y Nan y Nan
±0 Sign(x) = 0 ±eps (t = ±0, G(s) = 1) 4.0
±0 Sign(x) = 1 ±eps (t = ±0, -G(s) = ±1) -4.0
±y
(y>비정규수)
±0 ±4.0 (sign as Y) Eps (eps는, 2^(-126, fp32에 대해 최소 양의 정규 부동 소숫점 수)일 수 있다)
±y
(비정규수<y<Inf)
±Inf ±eps ±4.0
±Inf ±x
(비정규수<x<
Inf)
±4.0 Eps
±Inf ±Inf ±1 ±1
0이 아닌 x 0이 아닌 y, |x| ≥ |y| y' = y * 2^k1
(|x'|가 범위 [2^40 내지 2^41) 내에 있게 하는 k1)
x' = x * 2^k1
(|x'|가 범위 [2^40 내지 2^41) 내에 있게 하는 k1)
0이 아닌 x 0이 아닌 y, |x| < |y| y' = y * 2^k2
(|y'|가 범위 [2^40 내지 2^41) 내에 있게 하는 k2)
x' = x * 2^k2
(|y'|가 범위 [2^40 내지 2^41) 내에 있게 하는 k2)
전술된 장치 및 방법은 수 개의 명령으로 Asin, Acos, Atan, Atan, 및 Atan2 중 다수 또는 전부를 수행할 수 있는 2개의 입력과 2개의 출력 함수(전처리 스테이지(600)와 InvTrig 스테이지(602))를 제공한다.
본 발명의 상기 설명된 실시예는 예시와 설명으로 제공된다. 이 실시예는 설명된 정밀한 형태로 본 발명을 제한하려고 의도된 것이 아니다. 특히, 본 명세서에 설명된 본 발명의 기능적 구현은, 하드웨어, 소프트웨어, 펌웨어, 및/또는 다른 이용가능한 기능적 성분 또는 형성 블록으로 균등하게 구현될 수 있다는 것과, 네트워크는 유선, 무선, 또는 유선과 무선의 조합일 수 있는 것으로 이해된다. 다른 변형과 실시예도 상기 개시 내용에 비춰 가능하므로, 본 발명의 범위는 이하 청구범위에 의한 것을 제외하고는 상기 상세한 설명에 의해서는 제한되지 않는 것으로 의도된다.
본 발명은 본 발명의 사상이나 본질적 특성을 벗어남이 없이 다른 특정 형태로 구현될 수 있다. 설명된 실시예는 모든 측면에서 단지 예시적인 것으로서, 발명을 제한하지 않는 것으로 고려되어야 한다. 본 발명의 범위는 그리하여 상기 설명에 의해서가 아니라 첨부된 청구범위에 의해서만 한정된다. 청구범위의 의미와 균등 범위 내에 있는 모든 변경은 본 발명의 범위 내에 있는 것으로 해석된다.
본 발명의 청구범위는 다음과 같다:

Claims (20)

  1. 수학적 함수를 연산하는 장치로서, 상기 장치는,
    연산 코드(opcode)와 하나 이상의 입력 인수(input argument)를 입력으로 취하고, 상기 하나 이상의 입력 인수와 연산 코드에 따라 하나 이상의 출력 인수를 생성하도록 구성된 전처리 하드웨어 스테이지 회로;
    값 G(Z)을 계산하도록 구성된 역함수 하드웨어 스테이지로서, Z는, 상기 연산 코드가 Acos이 아닌 역함수(inverse function)에 대응하는 경우에는 상기 출력 인수들 중 하나이고, 상기 연산 코드가 Acos에 대응할 때에는 상기 하나 이상의 입력 인수 중 하나이고, G(Z) = Acos(Z)/Sqrt(1-Z*Z)인, 상기 역함수 하드웨어 스테이지; 및
    상기 연산 코드에 따라 상기 하나 이상의 입력 인수와 상기 하나 이상의 출력 인수 중 적어도 하나의 인수와 G(Z)를 처리하여 최종 결과를 획득하도록 구성된 후처리 하드웨어 스테이지를 포함하는 것을 특징으로 하는 장치.
  2. 제1항에 있어서, 상기 역함수 하드웨어 스테이지는 하나 이상의 룩업 표(look up table)로부터 G(Z)를 계산하도록 구성된 것을 특징으로 하는 장치.
  3. 제2항에 있어서, 상기 역함수 하드웨어 스테이지는 상기 하나 이상의 룩업 표로부터 값을 사용하여 다항식 근사(polynomial approximation)를 수행하는 것에 의해 상기 하나 이상의 룩업 표로부터 G(Z)를 계산하도록 구성된 것을 특징으로 하는 장치.
  4. 제3항에 있어서, 상기 역함수 하드웨어 스테이지는 (Z-Z0)와 (Z-Z1)의 값을 사용하여 다항식을 연산하는 것에 의해 상기 다항식 근사를 수행하도록 구성되고, 상기 하나 이상의 룩업 표는 Z 미만인 Z0에 대응하는 값과, Z를 초과하는 Z1에 대응하는 값을 포함하고, Z0와 Z1의 값에 대응하는 것을 특징으로 하는 장치.
  5. 제4항에 있어서, 역함수 하드웨어 스테이지는 (Z - Z1)을 NOT(Z-Z0)으로 계산하도록 구성된 것을 특징으로 하는 장치.
  6. 제4항에 있어서, 상기 역함수 하드웨어 스테이지는 (Z - Z0)*(Z-Z1)의 값을 사용하여 다항식을 더 연산하는 것에 의해 상기 다항식 근사를 수행하도록 구성된 것을 특징으로 하는 장치.
  7. 제6항에 있어서, 상기 역함수 하드웨어 스테이지는 G(Z) = a + b*(Z-Z0) + c*(Z-Z0)*(Z-Z1)을 계산하는 것에 의해 상기 다항식 근사를 수행하도록 구성되고, 값 a, b, 및 c는 값 Z0과 Z1에 대응하고, 상기 하나 이상의 룩업 표로부터 검색되는 것을 특징으로 하는 장치.
  8. 제1항에 있어서, 상기 전처리 하드웨어 스테이지는 표 1과 표 4에 따른 상기 입력 인수에 따라 상기 출력 인수를 계산하도록 구성된 것을 특징으로 하는 장치.
  9. 제1항에 있어서, 상기 후처리 하드웨어 스테이지는 표 2에 따른 상기 연산 부호, 입력 인수, 출력 인수, 및 G(Z)에 따라 상기 최종 결과를 계산하도록 구성된 것을 특징으로 하는 장치.
  10. 제1항에 있어서, 상기 전처리, 역함수, 및 후처리 하드웨어 스테이지는 상기 연산 코드에 따라 Asin, Acos, Atan, 및 Atan2에 대응하는 최종 결과를 생성하도록 구성된 것을 특징으로 하는 장치.
  11. 수학적 함수를 연산하는 방법으로서, 상기 방법은,
    전처리 하드웨어 스테이지에 의해, 연산 코드와 1개 또는 2개의 입력 인수를 수신하는 단계;
    상기 전처리 하드웨어 스테이지에 의해, 상기 입력 인수와 상기 1개 또는 2개의 입력 인수와 상기 연산 코드에 따라 1개 또는 2개의 출력 인수를 생성하는 단계;
    역함수 하드웨어 스테이지 회로에 의해, 값 G(Z)을 처리하는 단계로서, Z는, 상기 연산 코드가 Acos이 아닌 역함수에 대응하는 경우에는 상기 출력 인수들 중 하나이고, 상기 연산 코드가 Acos에 대응할 때에는 상기 하나 이상의 입력 인수 중 하나이고, G(Z) = Acos(Z)/Sqrt(1-Z*Z)인, 상기 처리하는 단계; 및
    후처리 하드웨어 스테이지에 의해, 상기 연산 코드에 따라 상기 하나 이상의 입력 인수와 상기 하나 이상의 출력 인수 중 적어도 하나의 인수와 G(Z)를 처리하여 최종 결과를 획득하는 단계를 포함하는 것을 특징으로 하는 방법.
  12. 제11항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, 하나 이상의 룩업 표로부터 G(Z)를 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  13. 제12항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, 상기 하나 이상의 룩업 표로부터 값을 사용하여 다항식 근사를 수행하는 것에 의해 상기 하나 이상의 룩업 표로부터 G(Z)를 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  14. 제13항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, (Z-Z0)과 (Z-Z1)의 값을 사용하여 다항식을 연산하는 것에 의해 상기 다항식 근사를 계산하는 단계를 더 포함하고, 상기 하나 이상의 룩업 표는 Z 미만인 Z0에 대응하는 값과, Z를 초과하는 Z1에 대응하는 값을 포함하고, Z0와 Z1의 값에 대응하는 것을 특징으로 하는 방법.
  15. 제14항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, (Z - Z1)을 NOT(Z-Z0)으로 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  16. 제14항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, (Z - Z0)*(Z-Z1)의 값을 사용하여 상기 다항식 근사를 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  17. 제16항에 있어서, 상기 역함수 하드웨어 스테이지에 의해, G(Z) = a + b*(Z-Z0) + c*(Z-Z0)*(Z-Z1)을 계산하는 것에 의해 상기 다항식 근사를 계산하는 단계를 더 포함하고, 값 a, b, 및 c는 값 Z0과 Z1에 대응하고, 상기 하나 이상의 룩업 표로부터 검색되는 것을 특징으로 하는 방법.
  18. 제11항에 있어서, 상기 전처리 하드웨어 스테이지에 의해, 표 1과 표 4에 따른 상기 입력 인수에 따라 상기 출력 인수를 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  19. 제11항에 있어서, 상기 전처리 하드웨어 스테이지에 의해, 표 2에 따른 상기 연산 부호, 입력 인수, 출력 인수, 및 G(Z)에 따라 상기 최종 결과를 계산하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  20. 제11항에 있어서, 상기 최종 결과는 상기 연산 코드에 따라 Asin, Acos, Atan, 및 Atan2 중 하나에 대응하는 것을 특징으로 하는 방법.
KR1020160042910A 2015-04-07 2016-04-07 수학적 함수를 연산하는 시스템 및 방법 KR102503498B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/680,791 2015-04-07
US14/680,791 US9703530B2 (en) 2006-07-25 2015-04-07 Systems and methods for computing mathematical functions

Publications (2)

Publication Number Publication Date
KR20160120249A true KR20160120249A (ko) 2016-10-17
KR102503498B1 KR102503498B1 (ko) 2023-02-23

Family

ID=55808945

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160042910A KR102503498B1 (ko) 2015-04-07 2016-04-07 수학적 함수를 연산하는 시스템 및 방법

Country Status (3)

Country Link
EP (1) EP3079056B1 (ko)
JP (1) JP6770777B2 (ko)
KR (1) KR102503498B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230015758A (ko) 2021-07-23 2023-01-31 세종대학교산학협력단 선형 보간법을 이용한 삼각함수 계산 방법 및 장치
WO2023008984A1 (ko) * 2021-07-30 2023-02-02 주식회사 사피온코리아 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180217814A1 (en) * 2017-02-02 2018-08-02 Vivante Corporation Systems And Methods For Computing Mathematical Functions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005275626A (ja) * 2004-03-23 2005-10-06 Fujitsu Ltd 演算種別と精度を選択可能な近似演算処理方法および近似演算処理装置
JP2006059084A (ja) * 2004-08-19 2006-03-02 Renesas Technology Corp データプロセッサ、データ処理方法及び演算処理プログラム
JP2008071336A (ja) * 2006-07-25 2008-03-27 Vivante Corp 同一の技術に基づくrcp,sqrt,expおよびlog関数の単一データパス浮動小数点実行及び少ない待ち時間のrcp

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05509185A (ja) * 1990-07-19 1993-12-16 モトローラ・インコーポレーテッド 逆三角関数の値を求めるための装置および方法
US9600236B2 (en) * 2006-07-25 2017-03-21 Vivante Corporation Systems and methods for computing mathematical functions
US8862650B2 (en) * 2010-06-25 2014-10-14 Altera Corporation Calculation of trigonometric functions in an integrated circuit device

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005275626A (ja) * 2004-03-23 2005-10-06 Fujitsu Ltd 演算種別と精度を選択可能な近似演算処理方法および近似演算処理装置
JP2006059084A (ja) * 2004-08-19 2006-03-02 Renesas Technology Corp データプロセッサ、データ処理方法及び演算処理プログラム
JP2008071336A (ja) * 2006-07-25 2008-03-27 Vivante Corp 同一の技術に基づくrcp,sqrt,expおよびlog関数の単一データパス浮動小数点実行及び少ない待ち時間のrcp

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230015758A (ko) 2021-07-23 2023-01-31 세종대학교산학협력단 선형 보간법을 이용한 삼각함수 계산 방법 및 장치
WO2023008984A1 (ko) * 2021-07-30 2023-02-02 주식회사 사피온코리아 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치
KR20230018742A (ko) * 2021-07-30 2023-02-07 주식회사 사피온코리아 부동 소수점 표현에서 함수 근사를 연산하는 방법 및 장치

Also Published As

Publication number Publication date
KR102503498B1 (ko) 2023-02-23
JP2016201108A (ja) 2016-12-01
EP3079056A2 (en) 2016-10-12
EP3079056B1 (en) 2020-12-16
EP3079056A3 (en) 2017-01-25
JP6770777B2 (ja) 2020-10-21

Similar Documents

Publication Publication Date Title
CN106990937B (zh) 一种浮点数处理装置和处理方法
JP5731937B2 (ja) ベクトル浮動小数点引数削減
US20210182026A1 (en) Compressing like-magnitude partial products in multiply accumulation
US9600236B2 (en) Systems and methods for computing mathematical functions
KR20170034217A (ko) 프로세싱 장치 및 프로세싱 장치에서 연산을 수행하는 방법
US20130091189A1 (en) Single datapath floating point implementation of RCP, SQRT, EXP and LOG functions and a low latency RCP based on the same techniques
Low et al. A memory-efficient tables-and-additions method for accurate computation of elementary functions
KR102503498B1 (ko) 수학적 함수를 연산하는 시스템 및 방법
US9703530B2 (en) Systems and methods for computing mathematical functions
KR102559930B1 (ko) 수학적 함수들을 연산하기 위한 시스템 및 방법들
de Lassus Saint-Geniès et al. Exact lookup tables for the evaluation of trigonometric and hyperbolic functions
WO2018196750A1 (zh) 处理乘加运算的装置和处理乘加运算的方法
JP2010067251A (ja) 許容誤差内の整数除算回路
JPH04291418A (ja) 除算回路の前処理装置
JP6646350B2 (ja) 様々な数値フォーマットのデータを用いてデータに基づく関数モデルを計算するためのモデル計算ユニット、および制御装置
KR102281047B1 (ko) 4개의 입력 내적 회로를 사용하는 삼각 함수 계산
CN116700666A (zh) 一种浮点数处理方法及装置
EP3923132A1 (en) Device for performing multiply/accumulate operations
TW201712570A (zh) 三角函數計算方法以及裝置
Park et al. Effective fixed-point pipelined divider for mobile rendering processors
JP6308845B2 (ja) 演算装置、演算方法、及びプログラム
JPH04216127A (ja) 平方根演算装置

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