KR20160007514A - 근사 컴퓨팅 명령어를 수행하는 프로세서 - Google Patents

근사 컴퓨팅 명령어를 수행하는 프로세서 Download PDF

Info

Publication number
KR20160007514A
KR20160007514A KR1020157031075A KR20157031075A KR20160007514A KR 20160007514 A KR20160007514 A KR 20160007514A KR 1020157031075 A KR1020157031075 A KR 1020157031075A KR 20157031075 A KR20157031075 A KR 20157031075A KR 20160007514 A KR20160007514 A KR 20160007514A
Authority
KR
South Korea
Prior art keywords
processor
approximate
instruction
calculation
prefix
Prior art date
Application number
KR1020157031075A
Other languages
English (en)
Other versions
KR101770491B1 (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
Application filed by 비아 얼라이언스 세미컨덕터 씨오., 엘티디. filed Critical 비아 얼라이언스 세미컨덕터 씨오., 엘티디.
Publication of KR20160007514A publication Critical patent/KR20160007514A/ko
Application granted granted Critical
Publication of KR101770491B1 publication Critical patent/KR101770491B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders

Abstract

프로세서는 프로세서가 근사 방식으로 연속 계산을 수행하도록 명령하는 명령어를 복호화하는 디코더 및 명령어에 응답해서 근사 방식으로 연속 계산을 수행하는 함수 유닛을 포함한다. 명령어는 프로세서가 프로세서의 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령한다. 에러량은 근사 방식으로 프로세서에 의해 수행된 계산의 결과와 연관된 에러량을 나타낸다. 프로세서는 또한 명령어에 응답해서 에러량을 소거한다. 또 다른 명령어는 수행될 계산을 특정하고 프로세서가 근사 방식으로 계산을 수행되어야 함을 나타내는 프리픽스를 포함한다. 함수 유닛은 프리픽스에 의해 특정된 근사 방식으로 명령어에 의해 특정된 계산을 수행한다.

Description

근사 컴퓨팅 명령어를 수행하는 프로세서{PROCESSOR THAT PERFORMS APPROXIMATE COMPUTING INSTRUCTIONS}
본 출원은 각각이 전체로 참조에 의해 여기 병합된, 근사 컴퓨팅 명령어를 수행하는 프로세서; 초과 근사 컴퓨팅 에러로부터 복구하는 프로세서; 근사 컴퓨팅 함수 유닛을 갖는 프로세서로 명명된, 2014년 2월 10일에 출원된, 미국가출원, 제61/937,741호에 기반해 우선권을 주장하는, 2014년 10월 23일에 출원된 미국 정규출원 제14/522,512호에 대한 우선권을 주장한다.
근사 컴퓨팅의 영역에서 상당량의 이론적 작업이 있었다. 근사 컴퓨팅은 잠재적으로 감소된 정확도를 위한 변경에서 파워 소비를 감소시키는 방식으로 계산을 수행하는 것을 시도한다. 근사 컴퓨팅이 학계의 화제였음에도, 상업적으로 실행가능한 프로세서에서 근사 컴퓨팅을 사용하는 방법에 관해 거의 논의되지 않았다.
본 발명의 목적은 상업적으로 실행가능한 프로세서에서 근사 컴퓨팅을 사용하는 방법을 제공하는 것이다.
일 측면에서 본 발명은 프로세서를 제공한다. 프로세서는 프로세서가 근사 방식으로 연속 계산을 수행하도록 명령하는 명령어를 복호화하도록 구성된 디코더를 포함한다. 프로세서는 또한 명령어에 응답해서 근사 방식으로 연속 계산을 수행하도록 구성된 함수 유닛을 포함한다.
또 다른 측면에서, 본 발명은 프로세서에 의해 수행된 방법을 제공한다. 방법은 프로세서가 근사 방식으로 연속 계산을 수행하도록 명령하는 명령어를 프로세서에 의해 복호화하는 단계를 포함한다. 방법은 또한 명령어를 복호화하는 것에 응답해서 근사 방식으로 연속 계산을 프로세서에 의해 수행하는 단계를 포함한다.
더 또 다른 측면에서, 본 발명은 프로세서를 제공한다. 프로세서는 범용 레지스터 및 프로세서가 프로세서의 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령하는 명령어를 복호화하도록 구성된 디코더를 포함한다. 에러량은 근사 방식으로 프로세서에 의해 수행된 계산의 결과와 연관된 에러량을 나타낸다. 프로세서는 명령어에 응답해서 에러량을 소거하도록 구성된다.
더 또 다른 측면에서, 본 발명은 프로세서에 의해 수행된 방법을 제공하고, 그 방법은 프로세서가 프로세서의 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령하는 명령어를 프로세서에 의해 복호화하는 단계를 포함한다. 에러량은 근사 방식으로 프로세서에 의해 수행된 계산의 결과와 연관된 에러량을 나타낸다. 그 방법은 또한 명령어를 복호화하는 것에 응답해서 에러량을 프로세서에 의해 소거하는 단계를 포함한다.
더 또 다른 실시예에서, 본 발명은 프로세서를 제공한다. 프로세서는 명령어를 복호화하도록 구성된 디코더를 포함한다. 명령어는 수행될 계산을 특정한다. 명령어는 프로세서가 근사 방식으로 계산을 수행해야 함을 나타내는 프리픽스를 포함한다. 프로세서는 또한 프리픽스에 의해 특정된 근사 방식으로 명령어에 의해 특정된 계산을 수행하도록 구성된 함수 유닛을 포함한다.
더 또 다른 측면에서, 본 발명은 프로세서에 의해 수행된 방법을 제공한다. 방법은 명령어를 프로세서에 의해 복호화하는 단계를 포함하고, 여기서 명령어는 수행될 계산을 특정하고, 여기서 명령어는 근사 방식으로 계산을 수행해야 함을 나타내는 프리픽스를 포함한다. 그 방법은 프리픽스에 의해 특정된 근사 방식으로 명령어에 의해 특정된 계산을 프로세서에 의해 수행하는 단계를 포함한다.
본 발명은 상업적으로 실행가능한 프로세서에서 근사 컴퓨팅을 사용하는 방법을 제공한다.
도 1은 프로세서의 실시예를 도시하는 블록도이다.
도 2는 도 1의 근사 함수 유닛의 3개의 실시예를 도시하는 블록도이다.
도 3은 근사 명령어를 도시하는 블록도이다.
도 4a 및 도 4b는 일 실시예에 따라서 도 1의 프로세서의 연산을 도시하는 흐름도이다.
도 5는 컴퓨터 시스템 내의 도 1의 프로세서의 연산을 도시하는 흐름도이다.
도 6은 3개의 다른 컴퓨팅 시스템을 도시하는 블록도이다.
도 7은 도 6의 시스템의 연산을 도시하는 흐름도이다.
도 8은 근사 컴퓨팅-인식 프로세서 상에 작동하는 소프트웨어의 개발을 위한 프로세스를 도시하는 흐름도이다.
도 9는 근사 컴퓨팅-인식 프로세서 상에 작동하는 소프트웨어의 개발을 위한 대체 프로세스를 도시하는 흐름도이다.
도 10은 근사 계산을 수행하는 프로그램을 작동시키도록 도 1의 프로세서의 연산을 도시하는 흐름도이다.
도 11은 일 실시예에 따라 도 10의 블록(1014)의 더 큰 세부 연산으로 도시하는 흐름도이다.
도 12는 대안적인 실시예에 따라 도 10의 블록(1014)의 더 큰 세부 연산으로 도시하는 흐름도이다.
프로세서가 근사 계산을 수행하는 실시예가 설명된다. 근사 계산은 계산이 프로세서의 명령어 셋트 구조에 의해 특정될 수 있는 완전한 정확도보다 작은 정확도로 수행될 때 발생한다.
이제 도 1에 대해 언급하면서, 프로세서(100)의 실시예를 도시하는 블록도가 도시된다. 프로세서(100)는 중앙처리장치(CPU) 또는 그래픽처리장치(GPU)와 같은, 저장된 명령어를 수행하는 프로그래머블 데이터 프로세서를 포함한다. 프로세서(100)는 명령어 캐시(102); 명령어 캐시(102)에 결합된 명령어 변환기(104); 명령어 변환기(104)로부터 마이크로명령어를 수신하도록 결합된 하나 이상의 근사 함수 유닛(106); 근사 함수 유닛(106)에 명령어 오퍼랜드(166)를 제공하도록 결합된 아키텍쳐 레지스터(108); 근사 함수 유닛(106)에 결합된 근사 제어 레지스터(132); 근사 함수 유닛(106)에 결합된 데이터 캐시 메모리(138); 및 근사 함수 유닛(106)에 결합된 스냅샷 저장소(134)를 포함한다. 프로세서(100)는 또한 다른 유닛, 예를 들어, 재명명 유닛을 포함할 수 있고, 명령어 스캐쥴러 및/또는 예약 스테이션이 명령어 변환기(104)와 근사 함수 유닛(106) 사이에 사용될 수 있고 재배열 버퍼가 비순차적 명령어 실행을 허용하도록 사용될 수 있다.
명령어 캐시(102)는 메모리로부터 불러온 그리고 프로세서(100)에 의해 수행된 아키텍쳐 명령어(174)를 캐시에 저장한다. 아키텍쳐 명령어(174)는 도 3에 대해 설명된 근사 컴퓨팅 명령어(399)의 실시예와 같은 근사 컴퓨팅 명령어를 포함할 수 있다. 근사 컴퓨팅 명령어(399)는 프로세서(100)의 근사 컴퓨팅 정책, 즉, 근사 함수 유닛(106)이 완전한 정확도로 또는 완전한 정확도보다 적게 그리고 완전한 정도보다 적은 정도로 계산을 수행하는지 여부를 제어한다. 근사 계산 명령어(399)는 또한 여기 설명된 바와 같이 프로세서(100)의 범용 레지스터의 각각과 연관된 에러량을 소거하는 것을 제어한다. 바람직하게, 프로세서(100)는 근사가 아닌 다른 함수 유닛을 포함한다. 일 실시예에서, 아키텍쳐 명령어(174)은 여기에 설명된 근사 컴퓨팅 명령어(399)의 실시예를 포함하도록 수정된 x86 명령어 셋트 아키텍쳐(ISA)에 실질적으로 일치한다. 프로세서(100)의 ISA가 x86 ISA가 아닌 다른 실시예가 심사숙고된다.
명령어 변환기(104)는 명령어 캐시(102)로부터 아키텍쳐 명령어(174)를 수신한다. 명령어 변환기(104)는 아키텍쳐 명령어(174)를 복호화하고 그들을 마이크로명령어로 변환하는 명령어 디코더를 포함한다. 마이크로 명령어는 아키텍쳐 명령어 셋트, 즉 마이크로아키텍쳐 명령어 셋트와는 다른 명령어에 의해 정의된다. 마이크로명령어는 아키텍쳐 명령어(174)를 실행한다.
바람직하게, 명령어 변환기(104)는 또한 바람직하게 프로세서(100)의 판독전용 메모리에 저장된 마이크로코드 명령어를 포함하는 마이크로코드(136)를 포함한다. 일 실시예에서, 마이크로코드 명령어는 마이크로명령어이다. 대안적인 실시예에서, 마이크로코드 명령어는 마이크로-변환기에 의해 마이크로명령어로 변환된다. 마이크로코드(136)는 명령어 변환기(104)의 프로그래머블 로직 어레이에 의해 마이크로명령어로 직접 변환되지 않는 프로세서(100) ISA의 아키텍쳐 명령어(174)의 하위집합을 실행한다. 부가적으로, 마이크로코드(136)는 근사 계산에 의해 발생된 누적 에러 범위가 일 실시예에 따른, 에러 범위를 초과할 때 발생된 바와 같이, 마이크로아키텍쳐 예외를 다룬다.
아키텍쳐 레지스터(108)는 근사 함수 유닛(106)에 명령어(예, 마이크로명령어) 오퍼랜드(166)를 제공하고 바람직하게 재배열 버퍼(미도시)를 통해 근사 함수 유닛(106)에 의해 발생된 결과를 수신한다. 연관된 레지스터(108)에 저장된 결과에서 에러량의 지시를 유지하는 에러 저장소(109)는 아키텍쳐 레지스터(108)의 각각과 연관된다. 근사 함수 유닛(106)이 결과(164)(아키텍쳐 레지스터(108)에 작성됨)를 발생시킬 때마다, 근사 함수 유닛(106)는 또한 근사 계산으로 인해 누적된 결과(164)와 연관된 에러(168)의 양의 지시를 발생시킨다. 에러(168)는 목적지 레지스터(108)와 연관된 에러 저장소(109)에 작성된다. 또한, 레지스터(108)가 근사 함수 유닛(106)에 오퍼랜드를 제공할 때마다, 연관된 에러 저장소(109)는 근사 함수 유닛(106)에 오퍼랜드와 연관된 에러(162)를 제공한다. 이것은 근사 함수 유닛(106)이 근사 계산을 수행할 때 계산의 입력 오퍼랜드(166)의 에러 및 근사 함수 유닛(106)에 의해 도입된 에러 모두를 누적하게 한다.
스냅샷 저장소(134)는 프로세서(100)의 상태의 스냅샷을 유지한다. 프로세서(100)가 근사 계산을 수행하는 것을 시작하기 전에, 그것은 근사 계산의 결과의 누적된 에러가 에러 범위를 초과하면, 프로세서(100)가 일 실시예에 따라 아래에 더 구체적으로 설명된 바와 같이, 스냅샷(134)으로부터 상태를 저장하고 근사 없이 계산을 재수행하도록 스냅샷 저장소(134)에 상태를 작성한다. 일 실시예에서, 스냅샷 저장소(134)는 프로세서(100)의 전용 메모리를 포함한다. 바람직하게, 스냅샷(134)은 근사 계산을 수행하는 명령어의 셋트에서 제 1 명령어의 어드레스를 포함한다. 근사 없이 마이크로코드(136)가 명령어의 셋트의 재실행을 야기하는 실시예(예, 도 10)에서, 마이크로코드(136)는 스냅샷(134)에 유지된 제 1 명령어의 어드레스로의 분기를 야기한다.
데이터 캐시(138)는 시스템 메모리 위치로부터 데이터를 캐시에 저장한다. 일 실시예에서, 데이터 캐시(138)는 제 1-레벨 데이터 캐시 및 명령어 캐시(102) 및 제 1-레벨 캐시를 되돌리는 제 2 레벨 캐시를 포함하는 캐시 메모리의 계층이다. 일 실시예에서, 근사 계산을 사용하는 프로그램은 프로세서(100)에 의해 제공된 에러 범위 특징을 초과한 후 복구를 자주 사용해야 한다면 데이터가 데이터 캐시(138)를 흘러넘치지 않음을 보장해야만 한다.
일 실시예에서, 근사 제어 레지스터(132)는 근사 함수 유닛(106)에 제공된 프로세서(100)를 위한 근사 정책(176)을 특정하는 정보를 유지한다. 바람직하게, 근사 제어 레지스터(132)는 근사 플래그, 근사량, 및 에러 범위(또는 에러 임계)를 포함한다. 근사 플래그는 근사 함수 유닛(106)에 의해 수행된 계산이 완전한 정확도 계산인지 또는 근사 계산인지 여부, 즉, 완전한 정확도 모드 또는 근사 계산 모드(또는 근사 모드)인지를 나타낸다. 근사량은 근사 계산의 결과(164)에서 허용될 수 있는, 그리고 어느 프로세서(100)가 에러 범위가 초과되었다는 신호를 보내는지를 넘어서, 바람직하게 계산이 근사 없이 다시 수행될 수 있도록 누적된 에러(168)의 양을 특정한다. 일 실시예에서, 근사 함수 유닛(106)은 근사 제어 레지스터(132)에 저장된 근사 정책에 따라 계산을 수행한다. 대안적인 실시예에서, 각각의 명령어는 프리픽스에서와 같이, 근사 함수 유닛(106)에 근사 정책을 특정한다. 일 실시예에서, 근사 제어 레지스터(132)는 프로세서(100)의 명령어 셋트 구조의 명령어에 의해 작성가능하다.
근사 함수 유닛(106)은 정상 계산(즉, 명령어 셋트 구조에 의해 특정된 완전한 정확도로) 또는 근사 계산(즉, 명령어 셋트 구조에 의해 특정된 완전한 정확도보다 적게)을 선택적으로 수행할 수 있다. 근사 함수 유닛(106)의 각각은 명령어의 처리와 연관된 연산을 수행하는 프로세서(100) 내의 하드웨어 또는 하드웨어 및 마이크로코드의 조합이다. 더 구체적으로, 하드웨어 또는 하드웨어 및 마이크로코드의 조합은 결과를 발생시키는 계산을 수행한다. 함수 유닛의 예는 정수 유닛과 같은, 실행 유닛, 단일 이슈 다중 데이터(SIMD) 유닛, 멀티미디어 유닛, 및 부동 소수점 승산기, 부동 소수점 제산기 및 부동 소수점 가산기와 같은 부동 소수점 유닛을 포함하지만, 그들로 제한되지 않는다. 유리하게, 근사 함수 유닛(106)은 정상 계산을 수행할 때보다 근사 계산을 수행할 때 더 적은 파워를 소비한다. 근사 함수 유닛(106)의 실시예는 도 2에 대해 더 구체적으로 설명된다.
이제 도 2에 대해 언급하면서, 도 1의 근사 함수 유닛(106)의 3개의 실시예를 도시하는 블록도가 도시된다. 3개의 실시예는 근사 부동소수점 승산기(106a), 근사 초월 함수 계산 유닛(106b), 및 근사 제산기(106c)이다.
근사 부동 소수점 승산기(106a)는 레지스터(108)로부터 입력 오퍼랜드(166)를 수신하고 도 1의 결과(164)를 발생시킨다. 근사 부동 소수점 승산기(106a)는 입력 오퍼랜드(166)의 최상위 비트 상에 승산을 수행하는 게이트(202) 및 입력 오퍼랜드(166)의 최하위 비트 상에 승산을 수행하는 게이트(204)를 포함한다. 근사 부동 소수점 승산기(106a)는 또한 근사 정책(176)에 기반해서 최하위 비트 승산 게이트(204)에 파워의 선택적 제공을 제어하는 파워 제어 로직(206)을 포함한다. 예를 들어, 근사 모드가 완전한 정확도라면, 파워 제어(206)는 파워가 최하위 비트 승산 게이트(204)의 트랜지스터에 제공되게 하고; 반면에, 근사 모드가 완전한 정확도보다 작다면, 파워 제어(206)는 파워가 최하위 비트 승산 게이트(204)의 트랜지스터에 제공되지 않게 한다. 일 실시예에서, 최하위 비트 승산 게이트(204)는 파워 제어(206)가 근사 정책(176)에 지시된 근사량에 기반해서 최하위 비트의 더 적거나 또는 거의 없는 승산과 연관된 게이트를 전원차단하는 바와 같이 그룹화된다. 바람직하게, 근사 부동 소수점 승산기(106a)는 최하위 비트 승산 게이트(204)의 중간 결과가 최상위 비트 승산 게이트(202)(예, 캐리어)에 제공되는 바와 같이 구성되고, 그리고 최하위 비트 승산 게이트(204)가 근사 계산 모드에서 전원차단될 때, 디폴트값(예, 영)이 최상위 비트 승산 게이트(202)에 중간 결과로서 제공된다.
일반적으로 말해서, 근사 계산기(106a)는 두 개의 인수(166)의 각각의 N 비트를 승산할 수 있고, 여기서 N 비트는 명령어 셋트 구조에 의해 특정된 완전한 정확도이다. 그러나, 근사 승산기(106a)는 또한 완전한 정확도보다 덜 정확한 결과(164)를 발생시키도록 두 개의 인수(166)의 각각의 N 비트보다 적게 승산할 수 있다. 바람직하게, 승산기는 승산을 수행할 때 인수(166)의 최하위 비트의 M을 제외하고, 여기서 M은 N보다 작다. 예를 들어, 인수(166)의 가수가 각각 53비트라고 가정하면, 그때 인수(166)의 53비트의 더 하위 N비트의 승산에 일반적으로 사용될 수 있는 근사 승산기의 게이트(204)의 트랜지스터는 인수(166)의 더 하위 M비트가 근사 승산에 포함되지 않는 바와 같이 턴 오프되고, 여기서 비트 M의 수는 근사 정책에서 예를 들어, 근사 제어 레지스터(132)에서 특정된다. 이러한 방식으로, 근사 승산기(106a)는 일반적으로 제외된 비트를 승산하도록 사용될 수 있는 트랜지스터를 턴 오프할 수 있기 때문에 완전한 정확도 모드에서보다 근사 모드에서 더 적은 파워를 잠재적으로 사용한다. 바람직하게, 제외된 비트 M의 수는 제한된 수의 M 값만이 파워 게이팅 로직(206)의 완전성을 감소시키기 위해 근사 정책에 의해 특정될 수 있는 바와 같이 정량화된다.
근사 초월 함수 유닛(106b)은 레지스터(108)로부터 입력 오퍼랜드(166)를 수신하고 도 1의 결과(164)를 발생시킨다. 근사 초월 함수 계산 유닛(106b)은 다항식에 기반해서 결과(164)를 발생시키도록 입력 오퍼랜드(166) 상에 초월 함수를 수행하는 초월 계산 로직(214)을 포함한다. 다항식은 근사 모드와 같은, 계산 정책(176)으로부터 선택 제어 입력에 기반해서 고차 다항식(212a) 또는 저차 다항식(212b)을 선택하는 다중화기(mux)(216)로부터 선택된다. 즉, 다중화기(216)는 근사 모드가 완전한 정확도일 때 고차 다항식(212a)을 선택하고 근사 모드가 완전한 정확도보다 작을 때 저차 다항식(212b)을 선택한다. 일반적으로 말해서, 근사 초월 함수 계산 유닛(106b)은 완전한 정확도로 초월 함수를 수행하도록 차수 N의 다항식을 사용하고 차수 M의 다항식을 사용하며, 여기서 M은 완전한 정확도보다 적게 초월 함수를 수행하도록 N보다 작고, 그리고 여기서 M은 근사 정책에 의해 특정된다. 유리하게, 근사 모드일 때 초월 함수 계산을 수행하도록 저차 다항식을 사용하는 것에 의해, 근사 초월 함수 계산 유닛(106b)은 더 적은 파워를 소비할 수 있고 완전한 정확도 모드에서 동작할 때보다 더 양호하게 수행할 수 있다. 이것은 저차 다항식을 사용하는 것이 더 적은 승산을 요구하고 고차 다항식보다 가산하기 때문이다.
근사 제산기(106c)는 레지스터(108)로부터 입력 오퍼랜드(166)를 수신하고 도 1의 결과(164)를 발생시킨다. 근사 제산기(106c)는 제산 로직(222) 및 반복 제어 로직(224)을 포함한다. 제산 로직(222)은 제 1 반복 동안 중간 결과(164) 및 중간 결과(164)의 정확도의 지시(226)를 발생시키도록 입력 오퍼랜드(166) 상에 제산을 수행한다. 중간 결과(164)는 제산 로직(222)에 입력으로서 피드백되고, 정확도 지시(226)는 반복 제어 로직(224)에 제공된다. 연속 반복 상에, 제산 로직(222)은 본 반복 동안 또 다른 중간 결과(164) 및 중간 결과(164)의 정확도의 지시(226)를 발생시키도록 이전 반복의 입력 오퍼랜드(166) 및 중간 결과(164) 상에 제산 계산을 수행하고, 그리고 중간 결과(164)는 제산 로직(222)에 입력으로서 피드백되고, 그리고 정확도 지시(226)는 반복 제어 로직(224)에 제공된다. 일단 정확도(226)가 근사 정책(176)에 지시된 허용가능한 레벨에 도달하면, 반복 제어(224)는 정확도(226)를 모니터링하고 반복을 중단한다. 유리하게, 근사 정책이 근사 모드를 나타낼 때 완전한 정확도보다 작은 교환에서 더 적은 반복을 수행하는 것에 의해, 파워 소비에서의 감소가 근사 제산기(106c)에 의해 수행될 수 있다.
일 실시예에서, 근사 함수 유닛(106)의 각각은 입력 에러(162)에 기반한 근사 함수 유닛(106) 및 근사 정책의 근사량에 의해 발생된 결과(164)와 연관된 에러(168)의 양을 출력하는 룩업 테이블을 포함한다. 바람직하게, 룩업테이블에 의해 출력된 에러(168)의 양은 결과(164)와 연관된 최대 에러량을 특정하는 근사 자체이다.
일 실시예에서, 근사 함수 유닛(106)은 근사 제어 레지스터(132)에 의해 제공된 근사 정책보다는, 또는 그것에 더해서, 근사 정책의 전부 또는 일부를 결정하기 위해서 근사 명령어(399)를 변환할 때 명령어 변환기(104)에 의해 발생된 마이크로명령어를 복호화하는 명령어 디코더를 포함한다. 또 다른 실시예에서, 명령어 디코더는 예를 들어, 명령어 변환기(104)가 적절한 근사 함수 유닛(106)에 라우팅하는 목적을 위해 명령어(174)를 단순히 복호화하는 실시예에서, 근사 명령어(399) 자체를 복호화하고, 그리고 근사 함수 유닛(106)은 근사 정책을 결정하도록 명령어(174)를 복호화한다.
이제 도 3에 대해 언급하면서, 근사 명령어(399)를 도시하는 블록도가 도시된다. 더 구체적으로, 근사 명령어는 근사 프리픽스(300)를 갖는 계산 명령어, 근사 계산 명령어(310), 시작 근사 프리픽스(320)를 갖는 계산 명령어, 시작 근사 명령어(330), 정지 근사 프리픽스(340)를 갖는 계산 명령어, 정지 근사 명령어(350), 클리어 에러 프리픽스(360)를 갖는 계산 명령어, 클리어 에러 명령어(370), 및 로드 레지스터 명령어(380)를 포함한다.
근사 프리픽스(300)를 갖는 계산 명령어는 연산코드 및 프로세서(100)의 명령어 셋트에 일반적으로 발견되는 바와 같이 다른 필드(304)를 포함한다. 연산코드(304)는 덧셈, 뺄셈, 곱셈, 나눗셈, 혼합 승가산, 제곱근, 상호, 역수 제곱근, 및 예를 들어, 근사 함수 유닛(106)이 즉, 완전한 정확도 모드에 따라 계산을 수행할 수 있는 완전한 정확도보다 작은 정확도를 갖는 결과를 발생시킬 가능성이 있는 초월 함수와 같은 근사 함수 유닛(106)에 의해 수행될 수 있는 다양한 계산 중 어느 하나를 특정할 수 있다. 근사 프리픽스(300)를 갖는 계산 명령어는 또한 근사 프리픽스(302)를 포함한다. 일 실시예에서, 근사 프리픽스(302)는 명령어 바이트의 스트림 내에 존재하는 미리결정된 값을 포함하고 연산코드 및 다른 필드(304)를 처리하는 것은 프로세서(100)가 근사 방식으로 특정된 계산을 수행하도록 명령한다. 일 실시예에서, 미리결정된 값은 x86 ISA와 같은, ISA에서 프리픽스 값으로서 아직 사용되지 않은 값이다. 일 실시예에서, 근사 프리픽스(302)의 일부는 연산코드 및 다른 필드(304)에 의해 특정된 계산에 사용되도록 근사량 및/또는 에러 범위와 같은, 근사 정책, 또는 그것의 적어도 일부를 특정한다. 또 다른 실시예에서, 근사 프리픽스(302)는 단순히 연산코드 및 다른 필드(304)에 의해 특정된 계산이 대략적으로 수행될 수 있고, 그리고 근사 정책이 예를 들어, 근사 제어 레지스터(132)와 같은 레지스터에 저장될 수 있는 프로세서(100)에 의해 앞서 전달된 전체 근사 정책으로부터 취해짐을 나타낸다. 명령어(300)에 관한 근사 정책이 프리 픽스(302) 및 전체 근사 정책의 조합으로부터 유도된 다른 실시예가 심사숙고된다.
대안적인 실시예에서, 근사 계산 명령어(310)는 근사 계산 연산코드 및 다른 필드(312)를 포함한다. 근사 계산 연산코드 값은 프로세서(100)의 명령어 셋트에서 다른 연산코드 값과 다르다. 즉, 근사 계산 연산코드 값은 일반적으로(예, 근사 프리픽스(302)와 같은, 프리픽스의 부재시에) 프로세서(100)가 완전한 정확도로 계산을 수행하도록 명령하는 다른 연산코드 값과 다르다. 바람직하게, 명령어 셋트는 다중 근사 계산 명령어(310)를 포함하고, 하나는 계산의 각각 타입에 대해, 예를 들어, 하나는 그 자체의 고유한 연산코드 값을 갖는 덧셈에 대해, 하나는 그 자체의 고유한 연산코드 값을 갖는 뺄셈에 대해, 그리고 계속 이어진다.
시작 근사 프리픽스(320)를 갖는 계산 명령어는 프로세서(100)의 명령어 셋트에서 일반적으로 발견된 바와 같은 연산코드 및 다른 필드(314)를 포함한다. 연산코드(314)는 다양한 계산 중 어느 하나를 특정할 수 있고, 또는 그것은 비계산 명령어일 수 있다. 시작 근사 프리픽스(320)를 갖는 계산 명령어는 또한 시작 근사 프리픽스(322)를 포함한다. 일 실시예에서, 시작 근사 프리픽스(322)는 명령어 바이트의 스트림 내에 존재하는 미리결정된 값을 포함하고 그리고 이전의 연산코드 및 다른 필드(324)는 (예를 들어, 아래에 설명된 명령어(340, 350)에 의해) 근사 방식으로 계산을 수행하는 것을 정지하도록 명령될 때까지 프로세서(100)가 근사 방식으로 (존재한다면, 명령어(320)에 특정된 계산을 포함하는) 연속 계산을 수행하도록 명령한다. 일 실시예에서, 미리결정된 값은 x86 ISA와 같은, ISA에서 프리픽스 값으로서 아직 사용되지 않은 값이고, 그리고 여기에 설명된 다른 프리픽스(예, 근사 프리픽스(302), 정지 근사 프리픽스(342) 및 클리어 에러 프리픽스(362))와 다르다. 시작 근사 프리픽스(322)의 실시예는 시작 근사 프리픽스(322)의 일부가 근사 정책을 특정할 수 있다는 점에서 근사 프리픽스(302)와 유사하거나, 또는 단순히 연속 계산이 전체 근사 정책 또는 그것의 조합을 대략적으로 사용하여 수행될 수 있음을 나타낸다.
대안적인 실시예에서, 시작 근사 명령어(330)는 시작 근사 연산코드(332)를 포함한다. 시작 근사 명령어(330)는 프로세서(100)가 근사 방식으로 계산을 수행하는 것을 정지하도록 명령될 때까지 근사 방식으로 연속 계산을 수행하도록 명령한다. 시작 근사 연산코드(332)의 실시예는 근사 정책의 특정에 관한 근사 프리픽스(302)과 유사하다. 시작 근사 연산코드(332) 값은 프로세서(100)의 명령어 셋트에서 다른 연산코드 값과 다르다.
정지 근사 프리픽스(340)를 갖는 계산 명령어는 프로세서(100)의 명령어 셋트에서 일반적으로 발견된 바와 같은 연산코드 및 다른 필드(344)를 포함한다. 연산코드(344)는 다양한 계산 중 어느 하나를 특정할 수 있거나, 또는 그것은 비계산 명령일 수 있다. 정지 근사 프리픽스(340)를 갖는 계산 명령어는 또한 정지 근사 프리픽스(342)를 포함한다. 일 실시예에서, 정지 근사 프리픽스(342)는 명령어 바이트의 스트림 내에 존재하는 미리결정된 값을 포함하고 이전의 연산코드 및 다른 필드(344)는 프로세서(100)가 (예를 들어, 명령어(300, 310, 320, 330)에 의해 근사 방식으로 계산을 수행하도록 명령될 때까지) 근사 방식으로 (존재한다면, 명령어(340)에 특정된 계산을 포함하는) 계산을 수행하는 것을 정지하도록 명령한다. 일 실시예에서, 미리결정된 값은 x86 ISA와 같은, ISA에 프리픽스 값으로서 아직 사용되지 않은 값이고, 여기 설명된 다른 프리픽스와 다르다.
대안적인 실시예에서, 정지 근사 명령어(350)는 정지 근사 연산코드(352)를 포함한다. 정지 근사 명령어(350)는 (근사 방식으로 계산을 수행하도록 명령될 때까지)프로세서(100)가 근사 방식으로 계산을 수행하는 것을 정지하도록 명령한다. 정지 근사 연산코드(352) 값은 프로세서(100)의 명령어 셋트에서의 다른 연산코드 값과 다르다. 일 실시예에서, 프로세서(100)에 의한 예외의 발생은 또한 프로세서(100)가 근사 방식으로 계산을 수행하는 것을 정지하도록 명령한다, 즉, 근사 모드가 완전한 정확도로 설정되도록 한다.
클리어 에러 프리픽스(360)를 갖는 계산 명령어는 프로세서(100)의 명령어 셋트에 일반적으로 발견된 바와 같은 연산코드 및 다른 필드(364)를 포함한다. 연산코드(364)는 다양한 계산 중 어느 하나를 특정할 수 있다. 클리어 에러 프리픽스(360)를 갖는 계산 명령어는 프로세서(100)가 계산의 결과를 작성하는 목적지 레지스터를 특정하는 레지스터 필드(366)를 포함한다. 클리어 에러 프리픽스(360)를 갖는 계산 명령어는 또한 클리어 에러 프리픽스(362)를 포함한다. 일 실시예에서, 클리어 에러 프리픽스(362)는 명령어 바이트의 스트림 내에 존재하는 미리결정된 값을 포함하고 이전의 연산코드 및 다른 필드(364)는 프로세서(100)가 레지스터 필드(366)에 의해 특정된 레지스터(108)와 연관된 에러(109)를 소거하도록 명령한다. 일 실시예에서, 미리결정된 값은 x86 ISA와 같은, ISA에서 프리픽스 값으로서 아직 사용되지 않은 값이고, 여기에 설명된 다른 프리픽스와 다르다.
대안적인 실시예에서, 클리어 에러 명령어(370)는 클리어 에러 연산코드(372) 및 레지스터 필드(376)를 포함한다. 클리어 에러 명령어(370)는 프로세서(100)가 레지스터 필드(376)에 의해 특정된 레지스터(108)와 연관된 에러(109)를 소거하도록 명령한다. 클리어 에러 연산코드(372) 값은 프로세서(100)의 명령어 셋트에서 다른 연산코드와 다르다.
로드 레지스터 및 클리어 에러 명령어(380)는 로드 레지스터 연산코드(382), 메모리 어드레스 오퍼랜드 필드(384) 및 레지스터 필드(386)를 포함한다. 연산코드(382)는 프로세서(100)가 메모리 어드레스 오퍼랜드(384)에 의해 특정된 메모리 위치로부터 레지스터 필드(386)에 특정된 목적지 레지스터로 데이터를 로드하도록 명령한다. 연산코드(382)는 또한 프로세서(100)가 레지스터 필드(386)에 의해 특정된 레지스터(108)와 연관된 에러(109)를 소거하도록 명령한다.
일 실시예에서, 클리어 에러 명령어(370)는 단일 레지스터(108)보다는 모든 레지스터(108)에 대한 에러(109)를 소거한다. 예를 들어, 레지스터 필드(376) 값은 모든 레지스터(108)를 소거하도록 지시하는 미리결정된 값일 수 있다. 유사한 실시예가 클리어 에러 프리픽스(360)를 갖는 계산 명령어 및 로드 레지스터 및 클리어 에러 명령어(380)에 대해 심사숙고된다.
일 실시예에서, 명령어 변환기(104)는 프로세서(100)가 근사 계산 모드 또는 완전한 정확도 모드에 있는지 여부를 나타내는 플래그를 유지한다. 예를 들어, 명령어 변환기(104)는 시작 근사 명령어(330) 또는 시작 근사 프리픽스(320)를 갖는 계산 명령어를 마주하는 것에 응답해서 플래그를 설정할 수 있고 그리고 정지 근사 명령어(350) 또는 정지 근사 프리픽스(340)를 갖는 계산 명령어를 마주하는 것에 응답해서 플래그를 소거할 수 있다. 각각의 마이크로명령어는 마이크로명령어에 의해 특정된 계산이 완전한 정확도로 또는 근사 방식으로 수행될 수 있는지 여부를 나타내는 인디케이터를 포함한다. 명령어 변환기(104)가 아키텍쳐 명령어(166)를 하나 이상의 마이크로명령어로 변환할 때, 명령어 변환기(104)는 모드 플래그의 현재 값에 기반해서 따라서 인디케이터에 데이터를 덧붙인다. 대안적으로, 도면부호(300, 310)와 같은 아키텍쳐 근사 계산 명령어의 경우에, 명령어 변환기(104)는 각각, 프리픽스(302) 또는 연산코드(312)에 따라 마이크로명령어의 인디케이터에 데이터를 덧붙인다. 더 또 다른 실시예에서, 마이크명령어의 인디케이터는 근사 계산을 특정하는 (마이크로구조 명령어 셋트 내의 고유한) 마이크로명령어 연산코드를 포함한다.
이제 도 4에 관해 언급하면서, 일 실시예에 따라 도 1의 프로세서(100)의 연산을 도시하는 흐름도가 도시된다. 흐름은 블록(402)에서 시작한다.
블록(402)에서, 프로세서(100)는 아키텍쳐 명령어(166)를 복호화한다. 흐름은 결정 블록(404)으로 진행한다.
결정 블록(404)에서, 프로세서(100)는 명령어(166)가 시작 근사 명령어, 예를 들어, 도 3의 도면부호(320, 330)인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(406)으로 진행하고; 그렇지않으면, 흐름은 결정 블록(414)으로 진행한다.
블록(406)에서, 프로세서(100)는 정지 근사 명령어, 예를 들어, 도 3의 도면부호(340, 350)를 마주할 때까지 근사 정책(예, 시작 근사 명령어에 특정된 근사정책, 근사 제어 레지스터(132)에 특정된 근사 정책, 또는 그들의 조합)에 따라 연속 계산을 수행한다. 흐름은 블록(406)에서 종료한다.
결정 블록(414)에서, 프로세서(100)는 명령어(166)가 정지 근사 명령어, 예, 도 3의 도면부호(340, 350)인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(416)으로 진행하고; 그렇지 않으면, 흐름은 결정 블록(424)으로 진행한다.
블록(416)에서, 프로세서(100)는 근사 방식으로 계산을 수행하는 것을 정지하고 대신에 (그것이 시작 근사 명령어, 예, 도 3의 도면부호(320, 330) 또는 근사 계산 명령어(300, 310)를 마주할 때까지) 그들을 완전한 정확도로 수행한다. 흐름은 블록(416)에서 종료한다.
결정 블록(424)에서, 프로세서(100)는 명령어(166)가 클리어 에러 명령어, 예, 도 3의 도면부호(360, 370, 380)인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(426)으로 진행하고; 그렇지않으면, 흐름은 결정 블록(434)으로 진행한다.
블록(426)에서, 프로세서(100)는 레지스터 필드(366, 376, 386)에 특정된 레지스터(108)와 연관된 에러(109)를 소거한다. 흐름은 블록(426)에서 종료한다.
결정 블록(434)에서, 프로세서(100)는 명령어(166)가 계산 명령어(166)인지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(452)으로 진행하고; 그렇지 않으면, 흐름은 블록(446)으로 진행한다.
블록(446)에서, 프로세서(100)는 다른 명령어(166), 즉, 계산 명령어(399)와는 다른 명령어 셋트 구조의 명령어를 수행한다. 흐름은 블록(446)에서 종료한다.
블록(452)에서, 관련된 근사 함수 유닛(106)은 계산 명령어(166)를 수신하고 그것을 복호화한다. 흐름은 결정 블록(454)으로 진행한다.
결정 블록(454)에서, 근사 함수 유닛(106)은 근사 정책이 근사 또는 완전한 정확도인지 여부를 결정한다. 만약 근사라면, 흐름은 블록(456)으로 진행하고; 완전한 정확도라면, 흐름은 블록(458)으로 진행한다.
블록(456)에서, 근사 함수 유닛(106)은 예를 들어, 도 2에 대해 위에서와 같이, 여기에 설명된 바와 같은 근사 방식으로 계산을 수행한다. 흐름은 블록(456)에서 종료한다.
블록(458)에서, 근사 함수 유닛(106)은 비근사 방식으로, 즉, 완전한 정확도로 계산을 수행한다. 흐름은 블록(458)에서 종료한다.
이제 도 5에 관해 언급하면서, 컴퓨터 시스템 내의 도 1의 프로세서(100)의 연산을 도시하는 흐름도가 도시된다. 흐름은 블록(502)에서 시작한다.
블록(502)에서, 프로세서(100) 상에 실행하는 프로그램(예, 연산 시스템 또는 다른 프로그램)은 계산을 수행하도록 프로세서(100)에 의해 사용될 근사 정책을 결정한다. 바람직하게, 근사 정책은 허용가능한 에러 범위 및 계산 그 자체에서 근사량을 특정한다, 즉, 각각의 근사 함수 유닛(106)의 근사량이 각각의 근사 계산에 사용할 수 있다. 프로그램은 적어도 부분적으로 현재 시스템 구성에 기반해서 근사 정책을 결정한다. 예를 들어, 프로그램은 컴퓨터 시스템이 배터리 파워로부터 또는 A/C 벽 파워와 같은 효과적인 무한 소스로부터 동작하는지 여부를 검출할 수 있다. 부가적으로, 프로그램은 디스플레이 크기 및 스피커 품질과 같은 컴퓨터 시스템의 하드웨어 구성을 검출할 수 있다. 프로그램은 오디오/비디오 관련 계산과 같은 완전한 정확도로보다는 대략적으로 특정 계산을 수행하는 바람직함 및/또는 용인성을 결정하는 그러한 요소를 고려할 수 있다. 흐름은 블록(504)으로 진행한다.
블록(504)에서, 프로그램은 근사 정책을 프로세서(100)에 제공한다. 일 실시예에서, 프로그램은 근사 정책을 근사 제어 레지스터(132)에 작성한다. 일 실시예에서, 프로그램은 프로세서(100)에 새로운 근사 정책을 제공하도록 x86 WRMSR 명령어를 실행한다. 흐름은 블록(504)에서 종료한다.
바람직하게, 시스템 구성이 변할 때, 예를 들어, 시스템이 벽 소켓에 플러그되거나 또는 벽 소켓으로부터 언플러그되거나, 또는 다른 크기의 외부 모니터에 플러그될 때, 그때 프로그램은 구성 변경을 검출하고 블록(502)에서 근사 정책을 변경하고 블록(504)에서 새로운 근사 정책을 프로세서(100)에 전달한다.
이제 도 6에 대해 언급하면서, 3개의 다른 컴퓨팅 시스템을 도시하는 블록도가 도시된다. 시스템의 각각은 도 1의 근사 계산 가능한 프로세서(100), 디스플레이(606), 및 프로세서(100)가 예를 들어, 도 3의 근사 계산 명령어(399)를 사용하여 디스플레이(606) 상에 도시되도록 픽셀을 발생시키는 계산을 수행하는, 데이터를 포함하는 버퍼(604)를 포함한다.
제 1 시스템은 대형 디스플레이(606a)(예, 24-인치 이상)를 포함하고 필수적으로 무한 파워 소스, 예, 벽 아웃렛으로부터 파워를 수신하는 데스크탑 컴퓨터(602a)이다. 제 2 시스템은 중간 크기 디스플레이(606b)(예, 15-인치)를 포함하고 사용자의 선택에 따라, 벽 아웃렛으로부터 또는 배터리로부터 파워를 수신하는 랩탑 컴퓨터(602b)이다. 제 3 시스템은 상대적으로 소형 디스플레이(606c)(예, 4.8-인치)를 포함하고 주로 배터리로부터 파워를 수신하는 스마트폰 또는 테이블 컴퓨터(602c)와 같은 휴대용 컴퓨터이다. 대안적인 예에서, 근사량 계산 역시 디스플레이 해상도에서의 변화에 기반해서 변할 수 있다는 것이 이해될 수 있음에도, 모든 디스플레이는 용인될 수 있는/허용될 수 있는 근사량이 주로 디스플레이 크기에 기반하는 바와 같이 대략적으로 동일한 해상도를 갖는다는 것이 가정된다. 집합적으로 시스템(602)으로서 언급된 3개의 시스템이 근사 계산 가능한 프로세서(100)를 포함하고 여기 설명된 근사 계산 실시예의 변화하는 사용을 도시하도록 비교를 위해 다른 특징이 제공될 수 있는 시스템을 대표하도록 의도되지만; 그러나 다른 시스템이 심사숙고되고, 근사 계산 가능한 프로세서(100)의 사용은 도시된 실시예로 제한되지 않는다.
발생하는 픽셀의 근사에 의해 야기된 시각적 왜곡이 대형 디스플레이(602a) 상에 쉽게 분명할 수 있기 때문에 제 1 시스템(602a)은 근사가 허용가능하지 않고 높은 정확도를 요구하는 경향이 있고, 파워 소스는 대개 불필요한 근사 계산으로 인해 파워를 절약할 필요가 있다.
명백할 수 있는 중간 근사량에 의해 야기된 시각적 왜곡이 유사한 해상도를 갖는 더 큰 디스플레이 상에서보다 더 적음에도 배터리 수명에서의 이점을 위해 허용가능한 상충관계일 수 있기 때문에, 제 2 시스템(602b)은 특히, 배터리 파워 상에 작동할 때 중간량의 정확도를 요구하고 중간 근사량을 용인하는 경향이 있다. 다른 한 편으로, 시스템(602b)이 벽 파워 소스에 플러그될 때, 바람직한 근사 정책은 제 1 시스템(602a)의 것과 유사할 수 있다.
근사로 인한 시각적 왜곡이 공칭 줌 레벨에서 소형 디스플레이(606c) 상에 명백하지 않거나 또는 크게 명백하지 않을 수 있고 배터리 파워를 절약할 필요가 상대적으로 크기 때문에 제 3 시스템(602c)은 최소의 정확도를 요구하는 경향이 있다.
이제 도 7에 대해 언급하면서, 도 6의 시스템(602)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(702)에서 시작한다.
블록(702)에서, 프로그램은 시스템(602)이 전원연결되거나 재설정될 때와 같이 시스템(602)에서 디스플레이(606)의 타입을 검출한다. 대안적으로, 프로그램은 예를 들어, 외부 모니터가 랩탑(602b)으로 플러그되거나 또는 그로부터 언플러그될 때, 디스플레이(606)에서의 변경을 검출할 수 있다. 또한, 프로그램은 벽 아웃렛으로 플러그되거나 또는 언플러그되는 바와 같이, 파워 소스에서의 변경을 검출할 수 있다. 흐름은 블록(502)으로 진행한다.
블록(502)에서, 프로그램은 도 5에 대해서 위에 설명된 바와 같이, 시스템 구성에 기반해서 근사 정책을 결정한다. 흐름은 블록(504)으로 진행한다.
블록(504)에서, 프로그램은 도 5에 대해 위에 설명된 바와 같이, 프로세서(100)에 근사 정책을 제공한다. 흐름은 블록(708)으로 진행한다.
블록(708)에서, 프로세서(100)는 예를 들어, 도 4 및 10 내지 12에 대해 여기 설명된 바와 같이 수신된 근사 정책에 기반해서 계산을 수행한다. 흐름은 블록(708)에서 종료한다.
대안적으로, 프로세서(100) 상에 작동하는 소프트웨어(예, 그래픽 소프트웨어)는 다른 근사 정책과 연관된(예, 도 6의 다른 시스템 구성과 연관된 다른 근사 정책의 각각에 대해) (계산 명령어(399)를 포함하는) 다른 코드 루틴을 포함하고, 그 소프트웨어는 현재 시스템 구성에 기반한 적절한 루틴으로 분기한다.
이제 도 8에 대해 언급하면서, 여기 설명된 바와 같은 근사 컴퓨팅 인식 프로세서(100) 상에 작동하는 소프트웨어의 개발을 위한 프로세스를 도시하는 흐름도가 도시된다. 흐름은 블록(802)에서 시작한다.
블록(802)에서, 프로그래머는 C 언어와 같은 종래의 프로그래밍 언어로 그래픽 소프트웨어와 같은 프로그램을 개발하고, 근사 디렉티브로 근사 인식 컴파일러를 호출한다. 근사 인식 컴파일러는 목표 프로세서(100)의 근사 컴퓨팅 능력, 더 구체적으로, 프로세서(100)에 의해 지지된 근사 명령어(399)의 셋트를 인지한다. 근사 디렉티브는 커맨드-라인 옵션 또는 컴파일러에 의해 발생된 오브젝트 코드가 근사 계산을 수행하도록 근사 명령어(399)를 포함하는 것을 컴파일러에 전달하는 다른 방법일 수 있다. 바람직하게, 근사-인식 컴파일러는 프로그래밍 언어에 의해 특정된 계산이 근사 계산을 용인하는 루틴만을 컴파일하도록 근사 디렉티브로 호출되고; 반면에, 근사 계산을 용인하지 않는 다른 루틴은 근사 디렉티브 없이 컴파일되며; 그리고 각각의 방법에 의해 발생된 목적 파일은 실행가능한 프로그램으로 함께 연결된다. 근사-허용 루틴은 상대적으로 특수화된 루틴인 경향이 있다. 예를 들어, 픽셀 발생 루틴은 근사 인식 컴파일러가 근사 명령어(399)를 발생시키는 근사 계산을 감지할 수 있는 부동 소수점 데이터 상의 계산을 포함할 수 있고; 반면에, 루프 제어 변수는 정수 데이터일 수 있고, 그리고 근사-인식 컴파일러는 예를 들어, 루프 제어 변수를 업데이트하는 계산을 수행하도록 근사 명령어(399)를 발생시키지 않는다. 흐름은 블록(804)으로 진행한다.
도면부호(804)에서, 근사-인식 컴파일러는 프로그램을 컴파일하고 프로세서(100)가 오브젝트 코드로서 근사 계산을 수행하도록 명령하는 근사 명령어(399)를 포함하는 기계어 명령어를 발생시킨다. 일 실시예에서, 컴파일러에 의해 발생된 기계 코드는 그렇지 않으면 근사 디렉티브를 사용하지 않고 발생될 수 있는 기계 코드와 유사하지만, 명령어의 일부는 도 3의 근사 프리픽스(302), 시작 근사 프리픽스(322), 정지 근사 프리픽스(342), 또는 클리어 에러 프리픽스(362)와 같은 근사 관련 프리픽스에 의해 선행된다. 일 실시예에서, 근사-인식 컴파일러는 정상 계산 명령어 대신에 그렇지 않으면 근사 디렉티브의 부재시에 발생할 수 있는 근사 계산 명령어(310)를 발생시킨다. 일 실시예에서, 근사-인식 컴파일러는 시작/정지 근사 명령어(330, 350) 및/또는 시작/정지 근사 프리픽스(322, 342)가 삽입된 정상 명령어 시퀀스를 발생시킨다. 일 실시예에서, 근사-인식 컴파일러는 각각이 위에 설명된 바와 같이, 다른 근사 정책을 사용하는 다중 코드 루틴을 발생시키고, 그 컴파일러는 프로그램이 자체로 결정할 수 있거나 연산 시스템으로부터 얻을 수 있는 현재 시스템 구성에 기반해서 적절한 서브루틴을 부르는 코드를 발생시킨다. 흐름은 블록(804)에서 종료한다.
이제 도 9에 대해 언급하면서, 여기 설명된 바와 같은 근사 컴퓨팅 인식 프로세서(100)를 작동시키는 소프트웨어의 개발을 위한 대안적인 프로세서를 도시하는 흐름도가 도시된다. 흐름은 블록(902)에서 시작한다.
블록(902)에서, 프로그래머는 블록(802)에서의 설명과 유사한 프로그램을 개발하고 근사-인식 컴파일러를 호출한다. 그러나, 프로그래밍 언어 및 컴파일러는 근사 디렉티브 및/또는 근사-허용 데이터 타입을 지지한다. 예를 들어, C 언어의 방언은 그러한 디렉티브 및/또는 데이터 타입을 지지할 수 있다. 근사 디렉티브는 프로그래머가 근사-허용 데이터로서 선택 프로그램 변수를 표시하는 소스 코드에 포함할 수 있는 컴파일러 디렉티브(예, C 언어는 디렉티브를 #포함하거나 또는 #정의하다와 유사함)를 포함할 수 있다. 유사하게, 프로그래머는 컴파일러가 근사 계산이 변수 상에 수행되게 하는 명령어(399)를 발생시키는 것을 인지하는 근사-허용 데이터 타입 변수로서 선언된 소스 코드 프로그램 변수에 포함할 수 있다. 흐름은 블록(904)으로 진행한다.
블록(904)에서, 근사-인식 컴파일러는 소스 코드에 포함된 근사 디렉티브 및/또는 근사-허용 데이터 타입이 컴파일된 것에 응답해서 블록(804)에 대해 위에 설명된 방식과 유사한 오브젝트 코드를 발생시키도록 프로그램을 컴파일한다. 흐름은 블록(904)에서 종료한다.
이제 도 10에 대해 언급하면서, 근사 계산을 수행하는 프로그램을 작동시키는 도 1의 프로세서(100)의 동작을 도시하는 흐름도가 도시된다. 흐름은 블록(1002)에서 시작한다.
블록(1002)에서, 프로그램은 위에 설명된 방식과 유사한 프로세서(100)에 근사 정책을 제공한다. 대안적으로, 프로그램은 그 자체로 근사 정책을 제공한다(그리고 빠져나올 때 최근 근사 정책을 재저장한다). 부가적으로, 에러 임계가 초과되는 상황에서 실행될 수 있는 근사 계산을 수행하지 않는 대안적인 코드 경로가 아래에 설명된 바와 같이 특정된다. 흐름은 블록(1004)으로 진행한다.
블록(1004)에서, 프로세서(100)는 도 1의 스냅샷 저장소(134)에 상태를 작성하는 것에 의해 현재 상태의 스냅샷을 찍는다. 일 실시예에서, 프로세서(100)는 프로그램에 의해 실행된 명령어를 마주하는 것에 응답해서 스냅샷을 찍는다. 일 실시예에서, 명령어는 x86 WRMSR 명령어를 포함한다. 일 실시예에서, 스냅샷을 찍는 것은 캐시 라인의 클린 카피가 캐시(138)에 잔류하고 그런 후에 근사 계산의 목표일 수 있음을 나타내도록 특수한 것으로 캐시 라인을 표시하기 위해 프로그램의 근사 계산의 셋트에 의해 터치될 메모리 더티 캐시 라인에 다시 작성하는 것을 포함한다. 캐시 라인은 근사 계산의 결과에 의해 수정됨에 따라 특수한 것으로 표시되기 때문에, 메모리에 다시 작성되지 않는다-적어도 프로그램이 허용가능한 에러 범위를 초과하지 않고 완료할 수 있다는 것이 확인될 때까지는 아니다. 결과적으로, 이어서 프로세서(100)가 에러 범위가 초과됨을 결정하면(예, 블록(1012)에서), 그때 특수한 캐시 라인은 유효하지 않고 특수하지 않은 것으로 표시되고, 캐시 라인의 선근사 계산 상태가 그때 이어지는 비근사 계산의 셋트를 위한 메모리에서 이용가능하다(예, 블록(1014)에서). 그러한 실시예에서, 프로그래머는 특수 캐시 라인이 캐시(138)로부터 쏟아져 나오지 않아야 함을 유의해야만 하고; 그렇지 않으면, 프로세서(100)는 그러나 조건을 에러 범위를 초과한 것으로 처리한다. 바람직하게, 다중-코어 프로세서 실시예에서, 캐시(138)는 근사 계산의 셋트를 실행하는 코어로 국한해야만 한다. 흐름은 블록(1006)으로 진행한다.
블록(1006)에서, 프로세서(100), 특히 근사 함수 유닛(106)은 근사 결과(164)를 발생시키도록 근사 정책에 기반해서 프로그램 명령어에 의해 특정된 근사 계산을 수행한다. 근사 함수 유닛(106)은 또한 위에 설명된 바와 같이, 입력 오퍼랜드의 에러값(162) 및 근사 계산에 의해 도입된 에러에 기반해서 결과(164)의 에러(168)에 대한 근사치를 계산한다. 흐름은 블록(1008)으로 진행한다.
블록(1008)에서, 근사 함수 유닛(106)은 근사 결과(164)를 수신하는 목적지 레지스터(108)와 연관된 에러 저장소(109)에 누적 에러(168)를 작성한다. 흐름은 결과 블록(1012)으로 진행한다.
결과 블록(1012)에서, 프로세서(100)는 블록(1008)에서 발생된 에러(168)가 근사 정책의 에러 범위를 초과하는지 여부를 결정한다. 만약 그렇다면, 흐름은 블록(1014)으로 진행하고; 그렇지 않다면, 흐름은 프로그램의 또 다른 근사 계산을 실행하도록 블록(1006)으로 돌아간다.
블록(1014)에서, 프로세서(100)는 스냅샷 저장소(134)에 저장된 스냅샷에 프로세서(100) 상태를 재저장하고 에러 범위가 초과된 근사 방식으로 수행된 계산이 포함된 블록(1004)에서 스냅샷을 찍은 후에 근사, 또는 적어도 그것의 일부 없이 프로그램을 재작동시킨다. 블록(1014)의 동작의 실시예는 도 11 및 12에 대해서 아래에 설명된다. 흐름은 블록(1014)에서 종료한다.
이제 도 11에 대해 언급하면서, 일 실시예에 따라 도 10의 블록(1014)의 더 큰 세부 연산으로 도시하는 흐름도가 도시된다. 흐름은 블록(1102)에서 시작한다.
블록(1102)에서, 제어는 에러 범위가 결과 블록(1012)에서 초과됨을 검출하는 것에 응답해서 발생된 마이크로-예외(즉, 비아키텍쳐 예외)를 통해 프로세서(100)의 마이크로코드(136)에 전달된다. 마이크로코드(136)는 도 10에 대해 위에 설명된 바와 같이 스냅샷에 프로세서(100) 상태를 재저장한다. 부가적으로, 마이크로코드(136)는 아키텍쳐 예외를 발생시킨다. 흐름은 블록(1104)으로 진행한다.
블록(1104)에서, 아키텍쳐 예외 핸들러는 근사 계산의 셋트가 완전한 정확도로 수행되도록 도 10의 블록(1002)에서 특정된 대안적인 코드 경로에 제어를 전달한다. 일 실시예에서, 예외 핸들러는 가능하지 않은 근사로 근사 정책을 설정하고(즉, 완전한 정확도로 근사 정책을 설정하고) 그런 후에 근사가 가능하게 될 때 앞서 실행된 그리고 가능하지 않은 근사로 이제 실행될 동일한 코드로 점프한다. 흐름은 블록(1104)에서 종료한다.
이제 도 12에 관해 언급하면서, 대안적인 실시예에 따른 도 10의 블록(1014)의 더 큰 세부 연산으로 도시하는 흐름도가 도시된다. 흐름은 블록(1202)에서 시작한다.
블록(1202)에서, 제어는 에러 범위가 초과되고, 마이크로코드(136)가 스냅샷에 프로세서(100) 상태를 재저장하는 것을 검출하는 것에 응답해서 발생된 마이크로-예외를 통해 프로세서(100)의 마이크로코드(136)에 전달된다. 흐름은 블록(1204)으로 진행한다.
블록(1204)에서, 마이크로코드(136)는 완전한 정확도로 근사 정책을 설정한다(예, 근사 제어 레지스터(132)를 작성한다). 마이크로코드(136)는 또한 모든 레지스터(108)와 연관된 에러값(109)을 소거한다. 마이크로코드(136)는 또한 예를 들어, 블록(1004)에서 스냅샷을 찍은 후에 포인트로부터 프로그램의 재실행을 야기한다. 일 실시예에서, 마이크로코드(136)는 스냅샷 저장소(134)에 저장된 명령어 어드레스로부터 프로그램을 재작동시킨다. 흐름은 블록(1204)에서 종료한다.
근사 계산이 오디오 및 비디오 목적을 위해 수행되는 실시예가 설명되었음에도, 근사 계산이 컴퓨터 게임 물리학 계산에 사용된 센서 계산과 같은 다른 목적을 위해 수행되는 다른 실시예가 심사숙고된다. 예를 들어, 계산에 사용된 아날로그-디지털 컨버터 값은 예를 들어, 53비트의 정밀도를 사용하는 게임 물리학 분석이 불필요한 바와 같이 단지 16비트로 정확할 수 있다.
본 발명의 다양한 실시예가 여기 설명되는 한편, 그들이 예시에 의해서만 제시되며 한정되지 않는다는 것이 이해될 수 있다. 형식 및 세부사항에서의 다양한 변경이 본 발명의 범위에서 벗어나지 않고 그 안에서 이루어질 수 있다는 것이 관련 컴퓨터 분야의 당업자에게 명백할 것이다. 예를 들어, 소프트웨어는 예를 들어, 기능, 제작, 모델링, 시뮬레이션, 설명 및/또는 여기 설명된 장치 및 방법의 테스팅을 가능하게 할 수 있다. 이것은 일반적인 프로그래밍 언어(예, C, C+++), 베릴로그 HDL을 포함하는 하드웨어 설명 언어(HDL), VHDL 및 등등, 또는 다른 이용가능한 프로그램의 사용을 통해 달성될 수 있다. 그러한 소프트웨어는 자기 테이프, 반도체, 자기 디스크, 또는 광학 디스크(예, CD-ROM, DVD-ROM 등), 네트워크, 유선, 무선 또는 다른 통신 매체와 같은 임의의 공지된 컴퓨터 사용가능한 매체에 배치될 수 있다. 여기 설명된 장치 및 방법의 실시예는 프로세서 코어와 같은 반도체 지적 자산 코어에 포함될 수 있고(예, HDL에 구현되거나 또는 특정됨) 집적 회로의 생산에서 하드웨어로 변환될 수 있다. 부가적으로, 여기 설명된 장치 및 방법은 하드웨어 및 소프트웨어의 조합으로서 구현될 수 있다. 따라서, 본 발명은 여기 설명된 예시적인 실시예 중 어느 하나에 의해 제한되지 않아야 하지만, 다음의 청구항 및 그것의 등가물에 따라서만 정의될 수 있다. 구체적으로, 본 발명은 범용 컴퓨터에 사용될 수 있는 프로세서 디바이스 내에 실행될 수 있다. 최종으로, 해당기술분야의 당업자는 첨부된 청구항에 의해 정의된 바와 같이 본 발명의 범위에서 벗어나지 않고 본 발명의 동일한 목적을 실행하기 위해 다른 구조를 설계하거나 또는 수정하기 위한 토대로서 개시된 개념 및 특정 실시예를 용이하게 사용할 수 있다는 것을 인지한다.

Claims (24)

  1. 프로세서가 근사 방식으로 연속 계산을 수행하도록 명령하는 명령어를 복호화하도록 구성된 디코더; 및
    상기 명령어에 응답해서 상기 근사 방식으로 상기 연속 계산을 수행하도록 구성된 함수 유닛을 포함하는 것을 특징으로 하는 프로세서.
  2. 제 1항에 있어서,
    상기 명령어는 상기 프로세서가 상기 근사 방식으로 상기 계산을 수행하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 프로세서.
  3. 제 2항에 있어서,
    상기 프리픽스는 상기 프로세서가 상기 계산을 수행하는 완전한 정확도보다 작은 정확도를 특정하는 것을 특징으로 하는 프로세서.
  4. 제 1항에 있어서,
    상기 디코더는 상기 프로세서가 완전한 정확도로 제 2 연속 계산을 수행하도록 명령하는 제 2 명령어를 복호화하도록 더 구성되고; 그리고
    상기 함수 유닛은 상기 제 2 명령어에 응답해서 완전한 정확도로 상기 제 2 연속 계산을 수행하도록 구성되는 것을 특징으로 하는 프로세서.
  5. 제 4항에 있어서,
    상기 제 2 명령어는 상기 프로세서가 완전한 정확도로 상기 제 2 연속 계산을 수행하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 프로세서.
  6. 프로세서에 의해 수행되는 방법으로서, 상기 방법은:
    상기 프로세서가 근사 방식으로 연속 계산을 수행하도록 명령하는 명령어를 상기 프로세서에 의해 복호화하는 단계; 및
    상기 명령어를 복호화하는 단계에 응답해서 상기 근사 방식으로 상기 연속 계산을 상기 프로세서에 의해 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  7. 제 6항에 있어서,
    상기 명령어는 상기 프로세서가 상기 근사 방식으로 상기 계산을 수행하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 방법.
  8. 제 7항에 있어서,
    상기 프리픽스는 상기 프로세서가 상기 계산을 수행하는 완전한 정확도보다 작은 정확도를 특정하는 것을 특징으로 하는 방법.
  9. 제 6항에 있어서,
    상기 프로세서가 완전한 정확도로 제 2 연속 계산을 수행하도록 명령하는 제 2 명령어를 상기 프로세서에 의해 복호화하는 단계; 및
    상기 제 2 명령어를 복호화하는 단계에 응답해서 완전한 정확도로 상기 제 2 연속 계산을 상기 프로세서에 의해 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  10. 제 9항에 있어서,
    상기 제 2 명령어는 상기 프로세서가 완전한 정확도로 상기 제 2 연속 계산을 수행하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 방법.
  11. 범용 레지스터;
    프로세서가 상기 프로세서의 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령하는 명령어를 복호화하도록 구성된 디코더를 포함하고, 상기 에러량은 근사 방식으로 상기 프로세서에 의해 수행된 계산의 결과와 연관된 에러량을 나타내고; 그리고
    상기 프로세서는 상기 명령어에 응답해서 상기 에러량을 소거하도록 구성되는 것을 특징으로 하는 프로세서.
  12. 제 11항에 있어서,
    상기 명령어는 상기 프로세서가 상기 에러량을 소거하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 프로세서.
  13. 제 11항에 있어서,
    상기 명령어는 상기 에러량이 연관된 상기 범용 레지스터를 특정하는 것을 특징으로 하는 프로세서.
  14. 제 13항에 있어서,
    상기 명령어는 상기 프로세서가 상기 메모리로부터 상기 범용 레지스터에 값을 로드하도록 더 명령하는 것을 특징으로 하는 프로세서.
  15. 제 11항에 있어서,
    상기 명령어는 상기 프로세서가 상기 프로세서의 모든 범용 레지스터에 저장된 값과 연관된 상기 에러량을 소거하도록 명령하는 것을 특징으로 하는 프로세서.
  16. 프로세서에 의해 수행되는 방법으로서, 상기 방법은:
    상기 프로세서가 상기 프로세서의 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령하는 명령어를 복호화하는 단계, 상기 에러량은 근사 방식으로 상기 프로세서에 의해 수행된 계산의 결과와 연관된 에러량을 나타내고; 그리고
    상기 명령어를 복호화하는 단계에 응답해서 상기 에러량을 상기 프로세서에 의해 소거하는 단계를 포함하는 것을 특징으로 하는 방법.
  17. 제 16항에 있어서,
    상기 명령어는 상기 프로세서가 상기 에러량을 소거하도록 명령하는 프리픽스를 포함하는 것을 특징으로 하는 방법.
  18. 제 16항에 있어서,
    상기 명령어는 상기 에러량이 연관된 상기 범용 레지스터를 특정하는 것을 특징으로 하는 방법.
  19. 제 18항에 있어서,
    상기 명령어는 상기 프로세서가 메모리로부터 상기 범용 레지스터에 값을 로드하도록 더 명령하는 것을 특징으로 하는 방법.
  20. 제 16항에 있어서,
    상기 명령어는 상기 프로세서가 상기 프로세서의 모든 범용 레지스터에 저장된 값과 연관된 에러량을 소거하도록 명령하는 것을 특징으로 하는 방법.
  21. 명령어를 복호화하도록 구성된 디코더, 상기 명령어는 수행될 계산을 특정하고, 상기 명령어는 근사 방식으로 상기 계산을 수행할 것을 나타내는 프리픽스를 포함하며; 그리고
    상기 프리픽스에 의해 특정된 상기 근사 방식으로 상기 명령어에 의해 특정된 상기 계산을 수행하도록 구성된 함수 유닛을 포함하는 것을 특징으로 하는 프로세서.
  22. 제 21항에 있어서,
    상기 근사 방식은 상기 프로세서가 상기 계산을 수행하는 완전한 정확도보다 작은 정확도를 특정하는 것을 특징으로 하는 프로세서.
  23. 프로세서에 의해 수행된 방법으로서, 상기 방법은:
    명령어를 상기 프로세서에 의해 복호화하는 단계, 상기 명령어는 수행될 계산을 특정하고, 상기 명령어는 상기 프로세서가 근사 방식으로 상기 계산을 수행할 것을 나타내는 프리픽스를 포함하며; 그리고
    상기 프리픽스에 의해 특정된 상기 근사 방식으로 상기 명령어에 의해 특정된 상기 계산을 상기 프로세서에 의해 수행하는 단계를 포함하는 것을 특징으로 하는 방법.
  24. 제 23항에 있어서,
    상기 근사 방식은 상기 프로세서가 상기 계산을 수행하는 완전한 정확도보다 작은 정확도를 특정하는 것을 특징으로 하는 방법.
KR1020157031075A 2014-02-10 2014-12-14 근사 컴퓨팅 명령어를 수행하는 프로세서 KR101770491B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461937741P 2014-02-10 2014-02-10
US61/937,741 2014-02-10
US14/522,512 US9389863B2 (en) 2014-02-10 2014-10-23 Processor that performs approximate computing instructions
US14/522,512 2014-10-23
PCT/IB2014/003160 WO2015118375A1 (en) 2014-02-10 2014-12-14 Processor that performs approximate computing instructions

Publications (2)

Publication Number Publication Date
KR20160007514A true KR20160007514A (ko) 2016-01-20
KR101770491B1 KR101770491B1 (ko) 2017-08-22

Family

ID=52473756

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157031075A KR101770491B1 (ko) 2014-02-10 2014-12-14 근사 컴퓨팅 명령어를 수행하는 프로세서

Country Status (5)

Country Link
US (1) US9389863B2 (ko)
EP (1) EP2905699B1 (ko)
KR (1) KR101770491B1 (ko)
CN (1) CN105283858B (ko)
WO (1) WO2015118375A1 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9588845B2 (en) 2014-02-10 2017-03-07 Via Alliance Semiconductor Co., Ltd. Processor that recovers from excessive approximate computing error
US10235232B2 (en) 2014-02-10 2019-03-19 Via Alliance Semiconductor Co., Ltd Processor with approximate computing execution unit that includes an approximation control register having an approximation mode flag, an approximation amount, and an error threshold, where the approximation control register is writable by an instruction set instruction
KR20160061701A (ko) * 2014-11-24 2016-06-01 삼성전자주식회사 서로 다른 정확도를 갖는 연산기들을 이용하여 데이터를 처리하는 방법 및 장치
WO2016097797A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10108421B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude shared ram-dependent load replays in an out-of-order processor
WO2016097815A1 (en) * 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude x86 special bus cycle load replays in out-of-order processor
US10088881B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude I/O-dependent load replays in an out-of-order processor
KR101819315B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 작성 결합 메모리 공간 접근에 따라 로드 리플레이를 억제하기 위한 장치 및 방법
US10146539B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd. Load replay precluding mechanism
US10120689B2 (en) 2014-12-14 2018-11-06 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10083038B2 (en) 2014-12-14 2018-09-25 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on page walks in an out-of-order processor
WO2016097814A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude shared ram-dependent load replays in out-of-order processor
US10108430B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US10228944B2 (en) 2014-12-14 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
JP6286067B2 (ja) 2014-12-14 2018-02-28 ヴィア アライアンス セミコンダクター カンパニー リミテッド アウトオブオーダープロセッサでの長いロードサイクルに依存するロードリプレイを除外するメカニズム
US10209996B2 (en) 2014-12-14 2019-02-19 Via Alliance Semiconductor Co., Ltd. Apparatus and method for programmable load replay preclusion
US10108420B2 (en) 2014-12-14 2018-10-23 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
US9703359B2 (en) * 2014-12-14 2017-07-11 Via Alliance Semiconductor Co., Ltd. Power saving mechanism to reduce load replays in out-of-order processor
US10114794B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
WO2016097790A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude non-core cache-dependent load replays in out-of-order processor
US10114646B2 (en) 2014-12-14 2018-10-30 Via Alliance Semiconductor Co., Ltd Programmable load replay precluding mechanism
KR101837816B1 (ko) 2014-12-14 2018-03-12 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 i/o­의존 로드 리플레이를 불가능하게 하는 메커니즘
US10175984B2 (en) 2014-12-14 2019-01-08 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude non-core cache-dependent load replays in an out-of-order processor
US10146540B2 (en) 2014-12-14 2018-12-04 Via Alliance Semiconductor Co., Ltd Apparatus and method to preclude load replays dependent on write combining memory space access in an out-of-order processor
KR101819316B1 (ko) 2014-12-14 2018-01-16 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 캐시 불가­의존 로드 리플레이를 억제하는 메커니즘
US10127046B2 (en) 2014-12-14 2018-11-13 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
KR101837817B1 (ko) 2014-12-14 2018-03-12 비아 얼라이언스 세미컨덕터 씨오., 엘티디. 비순차 프로세서에서 페이지 워크에 따라 로드 리플레이를 억제하는 메커니즘
US10089112B2 (en) 2014-12-14 2018-10-02 Via Alliance Semiconductor Co., Ltd Mechanism to preclude load replays dependent on fuse array access in an out-of-order processor
US9804845B2 (en) 2014-12-14 2017-10-31 Via Alliance Semiconductor Co., Ltd. Apparatus and method to preclude X86 special bus cycle load replays in an out-of-order processor
WO2016097811A1 (en) 2014-12-14 2016-06-23 Via Alliance Semiconductor Co., Ltd. Mechanism to preclude load replays dependent on fuse array access in out-of-order processor
US11010166B2 (en) * 2016-03-31 2021-05-18 Intel Corporation Arithmetic logic unit with normal and accelerated performance modes using differing numbers of computational circuits
CN114004349A (zh) * 2016-08-05 2022-02-01 中科寒武纪科技股份有限公司 一种能支持不同位宽运算数据的运算单元、方法及装置
US10042774B2 (en) * 2016-09-19 2018-08-07 Advanced Micro Devices, Inc. Method and apparatus for masking and transmitting data
CN107729052A (zh) * 2017-10-16 2018-02-23 郑州云海信息技术有限公司 一种数据操作方法、装置、设备及计算机可读存储介质
KR102637735B1 (ko) * 2018-01-09 2024-02-19 삼성전자주식회사 근사 곱셈기를 구비하는 뉴럴 네트워크 처리 장치 및 이를 포함하는 시스템온 칩
US11175921B2 (en) * 2018-05-15 2021-11-16 International Business Machines Corporation Cognitive binary coded decimal to binary number conversion hardware for evaluating a preferred instruction variant based on feedback
FR3109155B1 (fr) * 2020-04-10 2022-07-22 Arkema France Composition à base de poly(méthacrylate de méthyle) antistatique ou antipoussière
EP4348413A1 (en) * 2021-05-27 2024-04-10 Cambridge Enterprise Limited Improvements in and relating to encoding and computation on distributions of data

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5386375A (en) * 1993-11-01 1995-01-31 Motorola, Inc. Floating point data processor and a method for performing a floating point square root operation within the data processor
US5745375A (en) * 1995-09-29 1998-04-28 Intel Corporation Apparatus and method for controlling power usage
US6058410A (en) * 1996-12-02 2000-05-02 Intel Corporation Method and apparatus for selecting a rounding mode for a numeric operation
US6374345B1 (en) * 1999-07-22 2002-04-16 Advanced Micro Devices, Inc. Apparatus and method for handling tiny numbers using a super sticky bit in a microprocessor
US7529912B2 (en) * 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US20050004958A1 (en) 2003-07-05 2005-01-06 General Instrument Corporation Single instruction multiple data implementation of finite impulse response filters including adjustment of result
US20050004957A1 (en) 2003-07-05 2005-01-06 General Instrument Corporation Single instruction multiple data implementations of finite impulse response filters
US20050228837A1 (en) 2004-04-08 2005-10-13 Paul Marostica Approximate number calculator
DE102004037713A1 (de) 2004-08-04 2006-03-16 Robert Bosch Gmbh Verfahren, Betriebssystem und Rechengerät zum Abarbeiten eines Computerprogramms
US20060271615A1 (en) 2005-05-27 2006-11-30 Shearer James B Method to compute an approximation to the reciprocal of the square root of a floating point number in IEEE format
US8595279B2 (en) * 2006-02-27 2013-11-26 Qualcomm Incorporated Floating-point processor with reduced power requirements for selectable subprecision
US8402078B2 (en) * 2008-02-26 2013-03-19 International Business Machines Corporation Method, system and computer program product for determining required precision in fixed-point divide operations
US8633936B2 (en) * 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US20110004644A1 (en) 2009-07-03 2011-01-06 Via Technologies, Inc. Dynamic floating point register precision control
US8397187B2 (en) 2010-04-23 2013-03-12 International Business Machines Corporation Verifying the error bound of numerical computation implemented in computer systems
US8676871B2 (en) 2010-09-24 2014-03-18 Intel Corporation Functional unit capable of executing approximations of functions
US20120197955A1 (en) * 2011-01-31 2012-08-02 Nokia Corporation Method, apparatus, and computer program product for resource, time, and cost aware variable-precision solving of mathematical functions
US8510546B2 (en) 2011-03-29 2013-08-13 International Business Machines Corporation Run-ahead approximated computations
WO2013077845A1 (en) * 2011-11-21 2013-05-30 Intel Corporation Reducing power consumption in a fused multiply-add (fma) unit of a processor
US8713256B2 (en) * 2011-12-23 2014-04-29 Intel Corporation Method, apparatus, and system for energy efficiency and energy conservation including dynamic cache sizing and cache operating voltage management for optimal power performance
WO2014032610A1 (zh) * 2012-09-03 2014-03-06 东南大学 一种面向cpu流水线的错误恢复电路
CN103019876B (zh) 2012-12-26 2015-07-01 东南大学 一种面向cpu流水线的错误恢复电路
US9021313B2 (en) * 2012-11-21 2015-04-28 Microsoft Technology Licensing, Llc Priority-assignment interface to enhance approximate computing
US9829956B2 (en) * 2012-11-21 2017-11-28 Nvidia Corporation Approach to power reduction in floating-point operations
US9588845B2 (en) 2014-02-10 2017-03-07 Via Alliance Semiconductor Co., Ltd. Processor that recovers from excessive approximate computing error

Also Published As

Publication number Publication date
CN105283858B (zh) 2018-10-23
US9389863B2 (en) 2016-07-12
US20150227372A1 (en) 2015-08-13
WO2015118375A1 (en) 2015-08-13
CN105283858A (zh) 2016-01-27
EP2905699B1 (en) 2021-06-09
KR101770491B1 (ko) 2017-08-22
EP2905699A3 (en) 2017-12-27
EP2905699A2 (en) 2015-08-12

Similar Documents

Publication Publication Date Title
KR101770491B1 (ko) 근사 컴퓨팅 명령어를 수행하는 프로세서
KR101720452B1 (ko) 초과 근사 컴퓨팅 에러로부터 복구하는 프로세서
KR101770492B1 (ko) 근사 컴퓨팅 함수 유닛을 갖는 프로세서
US10678540B2 (en) Arithmetic operation with shift
RU2663362C1 (ru) Команда и логическая схема для сортировки и выгрузки команд сохранения
US20130151822A1 (en) Efficient Enqueuing of Values in SIMD Engines with Permute Unit
CN107003839B (zh) 用于移位和乘法器的指令执行方法、处理器和系统
US11010166B2 (en) Arithmetic logic unit with normal and accelerated performance modes using differing numbers of computational circuits
US20220035635A1 (en) Processor with multiple execution pipelines
TW201729079A (zh) 用於檢測浮點消除效應之指令及邏輯
Chang et al. PAC DSP core and application processors
TWI543077B (zh) 處理器與透過處理器執行的方法
TWI559224B (zh) 處理器與透過處理器執行的方法
TWI627585B (zh) 處理器與透過處理器執行的方法
Reddy et al. REEL: Reducing effective execution latency of floating point operations
UCHIYAMA et al. Embedded processor core with 64-bit architecture and its system-on-chip integration for digital consumer products
JP2005327178A (ja) プロセッサ、そのコンパイラおよびそれを含んだ情報処理装置
KR20030077320A (ko) 다중순환 부동소수점 파이프라인을 지원하는 특정 응용프로세서의 구동 방법

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant