KR20190038989A - 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법 - Google Patents

나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20190038989A
KR20190038989A KR1020180091401A KR20180091401A KR20190038989A KR 20190038989 A KR20190038989 A KR 20190038989A KR 1020180091401 A KR1020180091401 A KR 1020180091401A KR 20180091401 A KR20180091401 A KR 20180091401A KR 20190038989 A KR20190038989 A KR 20190038989A
Authority
KR
South Korea
Prior art keywords
instruction
circuit
instructions
pipeline
stream
Prior art date
Application number
KR1020180091401A
Other languages
English (en)
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 KR20190038989A publication Critical patent/KR20190038989A/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/52Multiplying; Dividing
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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
    • 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/50Adding; Subtracting
    • 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
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)

Abstract

장치는 디코더 회로, 스케줄러 회로, 및 실행 회로를 포함할 수 있다. 디코더 회로는 명령어 스트림 내에서 제 2 명령어에 앞서는 제 1 명령어를 검출하도록 구성될 수 있는데, 제 1 명령어는 피제수 및 제수를 입력으로서 취하고, 제 2 명령어는 나머지를 생성한다. 스케줄러 회로는 제 1 및 제 2 명령어들을 제 3 명령어로 병합하도록 구성될 수 있는데, 제 3 명령어는 피제수 및 제수를 입력으로서 취하고 나머지를 생성한다. 스케줄러 회로는 명령어 파이프라인 내에서 제 1 명령어를 제 3 명령어로 교체하고, 명령어 파이프라인 내에서 제 2 명령어를 삭제하도록 구성될 수 있다. 실행 회로는 제 3 명령어를 실행하도록 구성될 수 있다.

Description

나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법 {SYSTEM AND METHOD FOR MERGING DIVIDE AND MULTIPLY-SUBTRACT OPERATIONS}
본 개시는 회로들에 관한 것으로, 좀 더 구체적으로는 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법에 관한 것이다.
컴퓨팅(Computing)에서, 모듈로 연산(Modulo Operation)은 하나의 수를 다른 것(종종 계수(Modulus)라고 불림)으로 나눈 후의 나머지(Remainder)를 찾는다. 나누기에서, 몫(Quotient)을 얻기 위해 피제수(Dividend)가 제수(Divisor)로 나뉜다. 나머지는 몇 번의 계산을 수행한 후에 남는 양이다.
주어진 두 수 a(피제수) 및 n(제수)에 대해, a modulo n("mod n"으로 간략히 씀)은 a 나누기 n의 유클리드 나누기의 나머지이다. 예로서, 5를 2로 나누면 2의 몫 및 1의 나머지를 남기기 때문에 "5 mod 2"의 수식은 1의 결과를 산정할 것인 한편, 9를 3으로 나누면 3의 몫 및 0의 나머지를 남기기 때문에 "9 mod 3"은 0의 결과를 산정할 것이다; 3과 3을 곱한 후 9에서 빼면 남는 것이 없다.
몇몇 명령어 집합 아키텍처(Instruction Set Architecture, ISA)(예컨대, ARM AArch64 ISA)는 제수 및 피제수가 제공되는 경우에 나머지를 계산하기 위한 모듈로 명령어를 제공하지 않는다. 이는 프로그램에서 나머지를 계산하는 것이 요구되는 경우에 비효율적인 코드(Code)를 종종 야기한다. 본질적으로, 모듈로 명령어를 제공하지 않는 ISA는 나머지를 얻기 위해 나누기, 그리고 그 다음에 곱하기 및 빼기를 요구한다. 이는 나누기의 처리 동안 하드웨어에 의해 나머지가 계산되는 경우에 성능의 손실을 야기한다.
본 개시는, 실질적으로 도면들 중 적어도 하나에 도시된 및/또는 도면들 중 적어도 하나와 연관되어 설명된 것처럼, 또한 청구항들에 좀 더 완전하게 제시되는 것처럼, 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및/또는 방법을 제공할 수 있다.
일 측면에 따르면, 장치(Apparatus)는 디코더(Decoder) 회로, 스케줄러(Scheduler) 회로, 및 실행(Execution) 회로를 포함할 수 있다. 디코더 회로는 명령어 스트림(Instruction Stream) 내에서 제 2 명령어에 앞서는 제 1 명령어를 검출하도록 구성될 수 있는데, 제 1 명령어는 피제수 및 제수를 입력으로서 취하고, 제 2 명령어는 나머지를 생성한다. 스케줄러 회로는 제 1 및 제 2 명령어들을 제 3 명령어로 병합하도록 구성될 수 있는데, 제 3 명령어는 피제수 및 제수를 입력으로서 취하고 나머지를 생성한다. 스케줄러 회로는 명령어 파이프라인(Instruction Pipeline) 내에서 제 1 명령어를 제 3 명령어로 교체하고, 명령어 파이프라인 내에서 제 2 명령어를 삭제하도록 구성될 수 있다. 실행 회로는 제 3 명령어를 실행하도록 구성될 수 있다.
다른 측면에 따르면, 장치는 복수의 파이프라인 스테이지(Pipeline Stage) 회로를 포함할 수 있고 부분적 병렬(Partially Parallel) 방식으로 명령어들의 스트림을 처리하도록 구성되는 명령어 파이프라인을 포함할 수 있다. 복수의 파이프라인 스테이지 회로는 제 1 회로 및 제 2 회로를 포함할 수 있다. 제 1 회로는 명령어 스트림 내에서 곱하기-빼기 명령어에 앞서는 정수 나누기 명령어를 검출하도록 구성될 수 있는데, 정수 나누기 명령어와 곱하기-빼기 명령어는 함께 나머지를 생성한다. 제 2 회로는 명령어 스트림 내에서 정수 나누기 명령어를 모듈로 명령어로 교체하고, 명령어 스트림 내에서 곱하기-빼기 명령어를 삭제하도록 구성될 수 있다.
또 다른 측면에 따르면, 방법은, 명령어 파이프라인 회로군의 제 1 부분에 의해, 빼기 명령어에 앞서는 나누기 명령어가 모듈로 연산을 야기하는지 검출하는 단계를 포함할 수 있다. 방법은, 명령어 파이프라인 회로군의 제 2 부분에 의해, 실행되었을 때 모듈로 연산을 수행하는 병합된 명령어로 나누기 및 빼기 명령어들을 병합하는 단계를 포함할 수 있다. 방법은, 명령어 파이프라인 회로군의 제 3 부분에 의해, 병합된 명령어를 실행하는 단계를 더 포함할 수 있다.
실시 예들에 따르면, 시스템에서 처리되는 명령어들의 개수가 감소할 수 있다. 따라서, 시스템에서 요구되는 회로군이 줄어들 수 있다. 나아가, 명령어들의 실행 시간이 감소할 수 있고, 연산 효율성이 얻어질 수 있다.
하나 이상의 구현의 세부 사항들은 동반되는 도면들 및 아래의 설명에서 제시된다. 다른 특징들은 설명 및 도면들로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1은 개시되는 주제에 따른 시스템의 실시 예의 블록도이다.
도 2는 개시되는 주제에 따른 시스템의 실시 예의 블록도이다.
도 3은 개시되는 주제에 따른 명령어 파이프라인의 실시 예의 타이밍도이다.
도 4는 개시되는 주제에 따른 회로의 실시 예의 타이밍도이다.
도 5는 개시되는 주제의 원리들에 따라 구성되는 장치들을 포함할 수 있는 정보 처리 시스템의 도식적인 블록도이다.
여러 도면에서 같은 참조 부호들은 같은 요소들을 지시한다.
몇몇 실시 예를 도시하는 동반되는 도면들을 참조하여, 다양한 실시 예가 이제부터 좀 더 완전히 설명될 것이다. 그러나, 본 개시된 주제는 많은 다른 형태로 구현될 수 있고, 여기에서 제시되는 실시 예들로 한정되는 것으로 이해되어서는 안 된다. 오히려, 이 실시 예들은 본 개시가 완전하고 완성되도록, 그리고 본 발명의 기술 분야의 숙련된 기술자들에게 본 개시된 주제의 범위를 완전히 전달하도록 제공된다. 도면들에서, 층들 및 영역들의 크기들 및 상대적인 크기들은 명확성을 위해 과장될 수 있다.
한 요소 또는 층이 다른 요소 또는 층의 위에 있거나 그것으로 연결되거나 결합되는 것으로 언급되는 경우, 이는 직접적으로 다른 요소 또는 층 위에 있거나 그것으로 연결되는 것일 수 있거나 사이에 끼워지는 요소들 또는 층들이 존재할 수 있음이 이해될 것이다. 반면, 한 요소 또는 층이 다른 요소 또는 층의 직접적으로 위에 있거나 그것으로 직접적으로 연결되거나 직접적으로 결합되는 것으로 언급되는 경우, 사이에 끼워지는 요소들 또는 층들이 존재하지 않는다. 같은 숫자들은 전체에 걸쳐 같은 요소들을 나타낸다. 여기에서 이용되는 바에 따라, "및/또는"이라는 용어는 관련하여 나열되는 항목들 중 하나 이상의 어떠한 및 모든 조합들을 포함한다.
다양한 요소, 구성 요소, 영역, 층, 및/또는 부분을 설명하기 위해 제 1, 제 2, 제 3 등의 용어들이 여기에서 이용될 수 있지만, 이 요소들, 구성 요소들, 영역들, 층들, 및/또는 부분들은 이 용어들에 의해 한정되지 않아야 함이 이해될 것이다. 이 용어들은 단지 한 요소, 구성 요소, 영역, 층, 또는 부분을 다른 요소, 구성 요소, 영역, 층, 또는 부분과 구별하기 위해 이용된다. 그래서, 아래에서 논의되는 제 1 요소, 구성 요소, 영역, 층, 또는 부분은 본 개시된 주제의 교시를 벗어나지 않고 제 2 요소, 구성 요소, 영역, 층, 또는 부분으로 불릴 수 있다.
"밑의", "아래의", "보다 낮은", "위의", "상단의" 등과 같이 공간적으로 비교하는 용어들은 도면들에 도시된 바에 따라 한 요소 또는 특징의 다른 요소(들) 또는 특징(들)에 대한 관계를 설명하기 위한 설명의 편의를 위해 여기에서 이용될 수 있다. 공간적으로 비교하는 용어들은 도면들에 그려진 방향(Orientation)에 더하여, 이용 또는 동작 중인 장치의 다른 방향들을 포함하도록 의도된 것임이 이해될 것이다. 예로서, 도면들의 장치가 뒤집힐 경우, 다른 요소들 또는 특징들의 "아래에" 또는 "밑에" 있는 것으로 설명된 요소들은 그 다른 요소들 또는 특징들의 "위에" 위치하게 될 것이다. 그래서, "아래"라는 예시적인 용어는 위 및 아래의 방향 모두를 포함할 수 있다. 장치는 이와 달리 위치할 수 있고(예컨대, 90도 회전하거나 다른 방향들로 위치할 수 있고), 여기에서 이용되는 공간적으로 비교하는 설명 어구들은 그에 따라 해석된다.
비슷하게, "높다", "낮다", "풀 업(Pull up)", "풀 다운(Pull down)", "1", "0" 등과 같은 전기적인 용어들은 도면들에 도시된 바에 따라 전압 레벨 또는 전류 레벨을 다른 전압 레벨들 또는 전류 레벨들에 대비하여 설명하기 위한 설명의 편의를 위해 여기에서 이용될 수 있다. 전기적으로 비교하는 용어들은 도면들에 그려진 전압들 및 전류들에 더하여, 이용 또는 동작 중인 장치의 다른 기준 전압들을 포함하도록 의도된 것임이 이해될 것이다. 예로서, 도면들의 장치 또는 신호들이 반전(Invert)되거나 다른 참조 전압들, 전류들, 또는 전하들을 이용하는 경우, "높은 것" 또는 "풀 업된 것”으로 설명되는 요소들은 새로운 참조 전압 또는 전류에 비해 "낮은 것" 또는 "풀 다운된 것"일 것이다. 그래서, "높다"는 예시적인 용어는 상대적으로 낮은 전압 또는 전류 및 상대적으로 높은 전압 또는 전류 모두를 포함할 수 있다. 장치는 이와 달리 다른 전기적인 기준의 프레임들에 기반할 수 있고, 여기에서 이용되는 전기적으로 비교하는 설명 어구들은 그에 따라 해석된다.
여기에서 이용되는 용어는 단지 특정 실시 예들을 설명하려는 목적을 위한 것이고 본 개시된 주제를 한정하는 것으로 의도되지 않는다. 여기에서 이용되는 바에 따라, "한", "하나의", 및 "상기"의 단수형은, 문맥상 분명하게 그렇지 않은 것으로 지시되지 않은 한, 복수형 역시 포함하도록 의도된다. 이 명세서에서 이용되는 경우의 "포함한다" 및/또는 "포함하는"의 용어들은 언급된 특징들, 정수들, 단계들, 동작들, 요소들, 및/또는 구성 요소들의 존재를 명시하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 요소, 구성 요소, 및/또는 그것들의 그룹의 존재 또는 추가를 막지는 않음이 더 이해될 것이다.
실시 예들은 여기에서 이상적인 실시 예들(및 중간의 구조들)의 도식적인 도시들인 단면도들을 참조하여 설명된다. 이와 같이, 예로서, 제조 기법들 및/또는 허용 오차들의 결과에 따라 도시들의 모양들을 변형하는 것이 예상될 것이다. 그래서, 실시 예들은 여기에서 설명되는 영역들의 특정 모양들로 한정되는 것으로 이해되어서는 안 되고, 예로서 제조 과정으로부터 발생하는 모양들의 편차들을 포함할 것이다. 예로서, 직사각형으로 도시되는 주입(Implant) 영역은 둥근 또는 굽은 특징들을 가질 것이고, 그리고/또는 그것의 모서리들에 있어서 주입 영역으로부터 비 주입 영역으로의 이분적인(Binary) 변화보다는 주입 농도의 점진적인 변화(Gradient)를 가질 것이다. 비슷하게, 주입에 의해 형성되는 매입(Buried) 영역은 그 매입 영역과 주입이 일어나는 표면 사이의 영역에 일부 주입을 야기할 수 있다. 그래서, 도면들에 도시된 영역들은 사실상 도식적이고, 그 모양들은 장치의 영역의 실제 모양을 도시하도록 의도되지 않고 본 개시된 주제의 범위를 한정하도록 의도되지 않는다.
달리 정의되지 않으면, 여기에서 이용되는 모든 용어들(기술적 및 과학적 용어들을 포함)은 본 개시된 주제가 속하는 기술 분야의 통상의 기술자 중 하나에 의해 흔히 이해되는 것과 동일한 의미를 갖는다. 흔히 이용되는 사전들에 정의된 것들과 같은 용어들은 관련 기술 분야의 맥락에서의 의미와 일관되는 의미를 갖는 것으로 해석되어야 하고, 여기에서 명확히 그렇게 정의되지 않으면 이상적이거나 지나치게 형식적인 의미로 해석되지 않을 것임이 더 이해될 것이다.
이제부터, 동반되는 도면들을 참조하여 실시 예들이 상세하게 설명될 것이다.
도 1은 개시되는 주제에 따른 시스템(100)의 실시 예의 블록도이다. 다양한 실시 예에서, 시스템(100)은 프로세서, SoC(System-on-a-chip), 명령어 파이프라인(Instruction Pipeline), 또는 다른 컴퓨터 아키텍처(Computer Architecture) 회로의 일부분으로서 포함될 수 있다.
도시된 실시 예에서, 시스템(100)은 "유닛(Unit)들"로 언급되는 부분들로 배열되거나 그룹 지어지는 복수의 회로를 포함할 수 있다. 각 유닛 또는 회로는 다양한 조합 로직(Combinatorial Logic) 회로(예컨대, AND, NOR 게이트들 등) 및/또는 다양한 메모리 회로(예컨대, 플립플롭들, 레지스터들, 메모리 셀들 등)를 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 시스템(100)은 명령어 파이프라인을 포함할 수 있는데, 명령어 파이프라인에서 일련의 명령어들(101) 또는 명령어들(101)의 스트림(Stream)이 실질적으로, 시차를 두고, 또는 부분적으로 병렬인 방식 또는 방법으로 시스템(100)에 의해 처리될 수 있다. 명령어 스트림(101)의 처리는 제 1 명령어(102)가 제 1 스테이지(Stage)에 의해 부분적으로 처리되고 그 뒤 이어지는 처리를 위한 제 2 스테이지로 넘어가질 수 있도록 단계적으로(파이프라인 스테이지들로) 발생할 수 있다. 그 뒤 제 1 명령어(102)가 제 2 스테이지에 의해 처리되는 동안 제 2 명령어(104)가 제 1 스테이지에 의해 처리되는 식으로 진행될 수 있다. 다양한 실시 예에서, 파이프라인은 분기하거나(Branch), 지연시키거나(Stall), 밀어내거나(Flush), 또는 이와 달리 복합 처리를 수반할 수 있다(도시되지 않음).
도시된 실시 예에서, 시스템(100)은 명령어 페치 유닛(Instruction Fetch Unit, IFU) 또는 회로(112)를 포함할 수 있다. IFU(112)는 명령어들(101)을 메모리(도시되지 않음)로부터 페치하거나 검색(Retrieve)하고, 명령어들(101)을 파이프라인으로 위치시키도록 구성될 수 있다. 각 명령어(101)는 시스템(100)이 취하게 될 연산을 지시할 수 있다.
명령어들(101)은 주어진 프로세서에 대하여 프로세서를 만든 회사에 의해 정의되고, 정의된 명령어들의 목록은 명령어 집합 아키텍처(Instruction Set Architecture, ISA)로 불린다. 프로그램이 실행 가능한(Executable) 형식으로 컴파일(Compile)되는 경우, 컴파일러는 ISA로부터의 정의된 명령어들만을 이용한다. 컴파일러가 정의되지 않은 명령어를 사용한다면, 프로그램을 실행하려고 시도하는 프로세서는 그 프로그램이 무슨 명령어를 전달하려고 시도하는지 이해하지 못할 것이다. 그러므로, 범용(General Purpose) 프로그램들은 주어진 ISA를 따라야 한다.
도시된 실시 예에서, 시스템(100)은 디코더 회로(114)를 포함할 수 있다. 다양한 실시 예에서, 디코더 회로(114)는 명령어들(101)이 무슨 연산들인지, 그리고 명령어들(101)이 파이프라인에 의해 어떻게 처리되어야 하는지 판별하도록 구성될 수 있다. 예로서, 디코더 회로(114)는 부동 소수점(Floating-point) 명령어를 인식하고 그 부동 소수점 명령어를 부동 소수점 실행 유닛으로 전송할 수 있다. 반면 (메모리로부터 데이터를 로드(Load)하기 위한) 로드 명령어는 로드-저장(Load-store) 유닛으로 전송될 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 시스템(100)은 스케줄러 회로(116)를 포함할 수 있다. 다양한 실시 예에서, 스케줄러 회로(116)는 명령어들(101)의 실행을 스케줄링하도록 구성될 수 있다. 다양한 실시 예에서, 스케줄링은 스트림 내에서 명령어들(101)(예컨대, 정렬되지 않은(Out-of-order) 실행 등)의 순서를 재배열하는 것을 포함할 수 있다. 다른 실시 예에서, 스케줄링은 각 명령어(101)를 복수의 실행 유닛(118)(예컨대, 도 2에 도시된 복수의 나누기 회로(218)) 중 하나로 전송하는 것을 포함할 수 있다. 다양한 실시 예에서, 디코더 회로(114) 및 스케줄러 회로(116)는, 예로서, 명령어 디코드 유닛(Instruction Decode Unit, IDU)(115)과 같은 공통의 유닛에 포함될 수 있다. 이는 개시된 주제를 한정하지 않는 단지 하나의 설명적인 예일 뿐임이 이해될 것이다.
도시된 실시 예에서, 시스템(100)은 하나 이상의 실행 회로 또는 유닛(118)을 포함할 수 있다. 각 실행 유닛(118)은 주어진 명령어에 의해 지시되는 연산을 실행하거나 수행하도록 구성된다. 다양한 실시 예에서, 실행 유닛(118)은 로드-저장 유닛, 산술 로직 유닛, 부동 소수점 유닛, 쉐이더(Shader) 유닛 등을 포함할 수 있다.
도시된 실시 예에서, 위에서 설명된 것처럼, 명령어들(101)의 스트림은 ISA에 의해 정의되는 명령어들만 포함할 수 있다. 또한 위에서 설명된 것처럼, 다양한 실시 예에서, ISA는 모듈로(Modulo) 명령어를 정의하지 않을 수 있다. 모듈로 연산은 두 개(또는 그 이상)의 명령어들에 의해 수행된다. 먼저 나누기 명령어(예컨대, sdiv와 같은 정수 나누기)가 (피제수(Dividend) 및 제수(Divisor)를 입력으로서 취하여) 몫(Quotient)을 계산할 것이다. 그 다음에 곱하기-빼기 명령어(예컨대, msub)가 몫을 제수와 곱하고 그 곱한 것을 피제수로부터 뺌으로써 (피제수, 제수, 및 몫을 입력으로서 취하여) 나머지(Remainder)를 계산할 것이다. 이는 실행 유닛(118)이 나누기 명령어를 처리할 때까지(그리고 몫을 출력할 때까지) 곱하기-빼기 명령어가 대기해야 하기 때문에 거의 항상 비효율적이다. 또한, 실행 유닛들(118)(및 다른 유닛들)이 두 개(또는 그 이상)의 명령어들에 의해 점유되어 명령어 스트림(101)의 나머지를 처리하기에 가용하지 않게(Unavailable) 된다.
도시된 실시 예에서, 시스템(100)(예컨대, 디코더 회로(114))은 제 2 명령어(104)에 앞서는 제 1 명령어(102)를 검출하도록 구성될 수 있다. 다양한 실시 예에서, 두 명령어(102, 104)는 끼어든 명령어들(도시되지 않음)에 의해 명령어 스트림(101)에서 분리될 수 있다. 다양한 실시 예에서, 이 두 명령어(102, 104)는 두 개(또는 그 이상)의 부분들(예컨대, 나누기, 곱하기, 및 빼기)로 최종 결과(예컨대, 나머지)를 생성할 수 있다.
이러한 실시 예에서, 스케줄러 회로(116)는 제 1 및 제 2 명령어들(102, 104)을 제 3 명령어(106)로 결합(또는 병합)하도록 구성될 수 있다. 다양한 실시 예에서, 제 3 또는 결합된 명령어(106)는 ISA에 포함되지 않을 수 있다.
다양한 실시 예에서, 제 3 명령어(106)는 (이미 파이프라인에 있는) 명령어 스트림(101)에 위치할 수 있다. 이러한 실시 예에서, 제 1 명령어(102)는 명령어 스트림(101)으로부터 제거(또는 삭제)될 수 있고 제 3 명령어(106)가 제 1 명령어(102)의 위치에 들어올 수 있다. 비슷하게, 제 2 명령어(104)가 명령어 스트림(101)으로부터 제거(또는 삭제)될 수 있다. 이러한 실시 예에서, 명령어 스트림(101)이 짧아질 수 있고, 시스템(100)은 처리할 명령어를 하나 덜 갖는 이득을 얻을 수 있다.
다양한 실시 예에서, 명령어 스트림(101)의 검출, 병합, 및 수정은, 전체적으로 또는 부분적으로, 디코더 회로(114) 및/또는 스케줄러 회로(116)의 어떠한 부분에 의해서든 또는 이름 변경(Rename) 회로(도시되지 않음)에 의해서 수행될 수 있다. 다양한 실시 예에서, 이 동작들은 파이프라인의 범 명령어 디코드(General Instruction Decode) 부분의 일부분으로서 수행될 수 있다. 명령어 파이프라인의 교과서적인 예는 명령어 페치, 명령어 디코드, 실행, 메모리 접근, 및 라이트 백(Writeback)의 다섯 스테이지를 포함할 수 있다. 그러나, 근대의 프로세서 구현들은 이 스테이지들을 더 작은 여러 부분으로 쪼갠다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
이러한 실시 예에서, 실행 유닛(118)은 제 3 명령어(118)를 수행하고 결과(108)를 출력하도록 구성될 수 있다. 다양한 실시 예에서, 출력(108)은 제 2 명령어(104)의 원했던 출력을 포함할 수 있지만, 제 1 명령어(102)의 입력들을 이용할 수 있다. 다른 실시 예에서, 제 1 및 제 2 명령어들(102, 104)의 출력들 모두가 생성될 수 있다.
예로서, 제 1 명령어(102)가 나누기 명령어이고 피제수 및 제수를 입력으로서 취하고 제 2 명령어(104)가 나머지를 출력하는 곱하기-빼기 명령어이면, 제 3 명령어(106)는 피제수 및 제수를 입력으로서 취하고 나머지를 출력하는 (ISA에는 포함되지 않을 수 있는) 모듈로 명령어일 수 있다. 다양한 실시 예에서, 제 1 명령어(102)는 몫을 출력할 수 있다. 그리고, 제 3 명령어(106)는 또한 몫 또는 제 1 및 제 2 명령어들(102, 104)의 출력들 모두를 출력할 수 있다. 이러한 실시 예에서, 명령어 스트림(101)에 있는 다른 명령어들은 (이제는 제 3 명령어(106)로 교체된) 제 1 및 제 2 명령어들(102, 104)로부터의 출력을 이용할 것으로 예상되기 때문에, 시스템(100)은 명령어 스트림(101)에 있는 다른 명령어들이 잘 동작할 수 있음을 보장할 수 있다.
도 2는 개시되는 주제에 따른 시스템(200)의 실시 예의 블록도이다. 다양한 실시 예에서, 시스템(200)은 프로세서, SoC, 명령어 파이프라인, 또는 다른 컴퓨터 아키텍처 회로의 일부분으로서 포함될 수 있다.
다양한 실시 예에서, 시스템(200)은 디코더 회로(214), 스케줄러 회로(216), 및 복수의 실행 유닛 또는 나누기 회로(218)를 포함할 수 있다. 도시된 실시 예에서, 위에서 설명된 것처럼, 명령어들(202)의 스트림이 시스템(200)에 의해 처리될 수 있다.
위에서 설명된 것처럼, 다양한 실시 예에서, 디코더 회로(214)는 명령어 스트림(202) 내에서 제 1 명령어가 제 2 명령어에 앞서는 경우를 검출하도록 구성될 수 있다. 이러한 실시 예에서, 제 1 명령어는 정수 나누기를 포함할 수 있고, 제 2 명령어는 곱하기-빼기 명령어를 포함할 수 있다. 다른 실시 예에서, 디코더 회로(214)는 나누기 명령어, 이를 뒤잇는 곱하기 명령어, 이를 뒤잇는 빼기 명령어와 같은 복수의 명령어를 검출할 수 있다.
이러한 실시 예에서, 디코더 회로(214)는 두 명령어가 명령어 스트림(202) 내에 발생하는 것뿐만 아니라 두 명령어가 특정 태스크(예컨대, 모듈로 연산)를 완료하기 위해 조직되거나 배열되는 것을 검출할 수 있다. 이러한 실시 예에서, 두 명령어는 공통의 입력들(예컨대, 제수, 피제수)을 가질 수 있고 제 2 명령어는 제 1 명령어의 출력(예컨대, 몫)을 입력으로서 취할 수 있다. 다양한 실시 예에서, 두 명령어 사이의 다른 관계들이 그것들의 관련된 본질 및 공통의 궁극적인 목적을 나타낼 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 시스템(200) 또는 디코더 회로(214)는 메모리 또는 명령어들의 테이블(220)을 포함할 수 있다. 이러한 실시 예에서, 명령어들의 테이블(220)은 명령어들(202)의 스트림의 일부분(예컨대, 명령어들 I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13 등)을 포함할 수 있다. 디코더 회로(214)는 두 명령어가 윈도우(222), 특정 시간 구간, 또는 명령어 스트림(202)의 일부분 내에 발생하면 그 두 명령어를 찾기만 하거나 또는 검출하도록 구성될 수 있다. 다양한 실시 예에서, 메모리(220) 내의 모든 명령어들이 윈도우(222) 내에 포함될 수 있다. 다른 실시 예에서, 윈도우(222)는 단지 메모리 또는 테이블(220) 내에 저장된 명령어 스트림(202)의 더 큰 부분의 하위 부분을 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
다양한 실시 예에서, 두 개의 연관된 명령어들을 탐색하는 것을 관측 가능한 명령어들의 윈도우(222)로 한정함으로써, 어떤 두 명령어 사이를 연관시킬 가능성이 증가할 수 있다. 예로서, (명령어 스트림(202)에서) 두 명령어가 더 멀리 떨어질수록, 그 두 명령어가 제 3 명령어를 생성하기 위해 결합될 수 있는 가능성이 적다. 다른 실시 예에서, 두 개의 연관된 명령어들을 탐색하는 것을 관측 가능한 명령어들의 윈도우(222)로 한정함으로써, 디코더 회로(214)에서 요구되는 회로군이 줄어들 수 있다. 다양한 실시 예에서, 윈도우(222)의 크기는 사전에 정의되거나 고정될 수 있고(예컨대, 5개의 명령어들로) 또는 그 크기는 설정 가능할(Configurable) 수 있다.
다양한 실시 예에서, 디코더 회로(214)는 종속성 검출 회로(215)를 포함할 수 있다. 이러한 실시 예에서, 종속성 검출 회로(215)는 제 2 명령어가 제 1 명령어의 출력에 종속하는지 여부를 판별하고 그 판별에 기초하여 제 1 및 제 2 명령어들이 병합될 수 있는지 아닌지를 지시하도록 구성될 수 있다.
몇몇 실시 예에서, 종속성 검출 회로(215)는 또한 제 1 및 제 2 명령어들이 결합되는 것을 방지할 명령어들의 (예컨대, 출력들과 입력들 사이에) 종속성들이 있는지 여부를 판별하도록 구성될 수 있다. 이러한 실시 예에서, 이는 종속성 규칙(Dependency Rule)의 위반(Violation)인 것으로 특징지어질 수 있다. 예로서, 제 3 또는 병합된 명령어가 제 1 및 제 2 명령어들 모두와 동일한 출력을 생성하지 못하는데(예컨대, 나머지는 생성하지만 몫이 없음) 제 4 명령어가 그 빠진 출력(예컨대, 몫)을 이용한다면, 제 1 및 제 2 명령어들이 병합되지 않게 할 종속성이 존재하는 것이다. 다른 실시 예에서, 종속성 검출 회로(215)는 제 2 명령어가 제 1 명령어의 출력을 입력으로서 이용하기 전에 다른 또는 끼어든 명령어가 제 1 명령어의 출력(예컨대, 몫을 저장하는 레지스터)을 변경할 수 있는지 여부를 판별할 수 있다. 이러한 실시 예에서, 제 2 명령어는 끼어든 명령어에 의해 취해지는 행위에 종속할 수 있고, 제 1 및 제 2 명령어들은 병합되지 않을 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
위에서 설명된 것처럼, 일 실시 예에서, 제 3 명령어는 제 1 및 제 2 명령어들 모두의 출력들 전부를 출력할 수 있다(따라서 많은 종속성 이슈를 피할 수 있다). 다른 실시 예에서, 제 3 명령어는 더 적은 출력들을 출력할 수 있다(예컨대, 나머지를 출력하지만 몫은 없음). 위에서 설명된 것처럼, 이는 버려지는(또는 계산되지 않는) 출력에 대한 종속성이 존재할 수 있어서 위험할 수 있다. 그러나, 다양한 실시 예에서, 여러 개수의 출력들을 수반하는 복수의 병합된 명령어가 존재할 수 있다(예컨대, 모든 출력들을 수반하는 것, 나머지만 수반하는 것). 이러한 실시 예에서, 종속성 검출 회로(215)는 복수의 병합된 명령어 중 어느 것을 선택하고 명령어 스트림(202)으로 위치시킬지를 판별하도록 구성될 수 있다.
일 실시 예에서, (도 1에 도시된 실시 예와 달리) 디코더 회로(214)는 일단 두 개의 관련된 명령어들이 식별되면 제 3의 결합된 명령어(예컨대, 모듈로 명령어)를 생성하도록 구성될 수 있다. 디코더 회로(214)는 그 다음에 (위에서 설명된 것처럼, 제 1 및 제 2 명령어들을 대체하여) 제 3 또는 병합된 명령어를 명령어 스트림(202)으로 삽입할 수 있다. 디코더 회로(214)는 새로운 명령어를 스케줄러 회로(216)로 보낼 수 있다. 위에서 설명된 것처럼, 다양한 실시 예에서, 취해지는 병합, 교체, 및 삭제 행위들은 여러 상이한 회로들(예컨대, 디코더 회로(214), 스케줄러 회로(216))에 의해 수행될 수 있다.
도시된 실시 예에서, 스케줄러 회로(216)는 제 3의 병합된 명령어를 받아들이도록 구성될 수 있다. 스케줄러 회로(216)는 나누기 회로들(218) 중 어느 것이 제 3 명령어를 실행할 것인지 선택할 수 있다. 스케줄러 회로(216)는 그 다음에 실행을 위해 선택된 나누기 회로(218)로 제 3 명령어를 보낼 수 있다.
다양한 실시 예에서, 스케줄러 회로(216)는 명령어 메시지(206)를 통해 (제 3 명령어의 입력들 및 출력들, 또는 적어도 그 입력들 및 출력들에 대한 포인터와 함께) 제 3 명령어를 보낼 수 있다. 다른 실시 예에서, 특별한 병합된 또는 제 3 명령어에 대해서, 스케줄러 회로(216)는 또한 모듈로 연산이 수행될 것이고 (다른 ISA 명령어에 의해 이루어지는 것처럼) 계산된 나머지가 버려져서는 안되고 저장되어야 함을 나누기 회로(218)에게 지시할 수 있다. 이러한 실시 예에서, 이 지시는 모듈로 메시지 또는 비트(208)를 포함할 수 있다. 이는 개시된 주제를 한정하지 않는 단지 하나의 설명적인 예일 뿐임이 이해될 것이다.
도시된 실시 예에서, 나누기 회로(218)는 제 3 명령어를 실행하고 할당된 레지스터들(도시되지 않음)로 출력들을 저장할 수 있다. 모듈로 명령어의 경우, 나누기 회로(218)는 나머지 및/또는 몫을 출력할 수 있다. 몇몇 실시 예에서, 나누기 회로(218)는 (또는, 명령어에 적절한 어떠한 실행 회로이든) 동일한 클록 사이클(Clock Cycle)에 제 3 명령어의 출력들 전부를 출력하도록 구성될 수 있다. 다른 실시 예에서, 나누기 회로(218)는 제 2 명령어가 명령어 스트림(202)으로부터 제거되지 않은 경우에 제 2 명령어가 완료되는 것(그리고 출력들을 생성하는 것)과 동일한 클록 사이클에 또는 그 클록 사이클 전에 제 3 명령어의 출력들을 출력하는 것을 끝내도록 구성될 수 있다. 이러한 실시 예에서, 적어도 제 2 명령어가 완료되자마자, 그리고 흔히 (제 1 명령어가 제 3 명령어로 교체되지 않은 경우에) 제 1 명령어가 완료되는 때에, 제 3 명령어가 완료될 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
다양한 실시 예에서, 명령어 스트림(202)은 하나 이상의 컴파일러 힌트(Compiler Hint)(204)를 포함하거나 이와 관련될 수 있다. 위에서 설명된 것처럼, 컴파일러는 프로그램의 소스 코드를 실행 가능한 명령어들로 변환하는데, 명령어들은 ISA에 의해 정의된다. 변환의 일부분으로서, 컴파일러는 또한 특별한 힌트들, 비트 플래그(Bit Flag)들, 또는 지시들을 명령어 스트림(202) 또는 병렬 스트림으로 삽입할 수 있다. 이 컴파일러 힌트들(204)은 시스템(200)에 의해 읽힐 수 있고 명령어 파이프라인 내에서 결정들을 내리기 위해 이용될 수 있다. 예로서, 컴파일러 힌트들(204)은 분기(Branch) 예측 정보를 포함할 수 있다.
도시된 실시 예에서, 컴파일러 힌트들(204)은 제 1 및 제 2 명령어들이 결합될 수 있는지 여부에 관한 지시들을 포함할 수 있다. 프로그램을 전체로서 분석하게 되고 한 번에 하나의 명령어로 드러나는 스트림으로서 분석하지는 않는 컴파일러는 프로세서 또는 시스템(200)보다 더 완전하게 프로그램의 동작을 이해할 수 있다. 이처럼, 컴파일러는 프로그래머 또는 사용자가 바라는 것이 제 3 명령어에 의해 제공되는 연산(예컨대, 모듈로 연산)이었음을 이해할 수 있지만, ISA의 한계들에 기인하여, 컴파일러는 제 1 및 제 2 명령어들(예컨대, sdiv 및 msub)을 이용해야 했다. 이러한 실시 예에서, 컴파일러는 제 1 및 제 2 명령어들이 제 3 명령어로 결합될 수 있음을 디코더 회로(214)에게 지시하는 명령어 스트림(202)에 컴파일러 힌트(204)를 포함시킬 수 있다.
다양한 실시 예에서, 디코더 회로(214)는 다양한 정도로 이 컴파일러 힌트들(204)에 의존할 수 있다. 일 실시 예에서, 디코더 회로(214)는 컴파일러 힌트(204)가 그렇게 하라고 하는 경우에만 제 1 및 제 2 명령어들을 결합할 수 있다. 다른 실시 예에서, 디코더 회로(214)는 컴파일러 힌트(204)가 그렇게 하라고 하는 경우에 제 1 및 제 2 명령어들을 결합할 수 있지만, 디코더 회로(214)가 제 1 및 제 2 명령어들을 검출한 경우에 기회를 따라 제 1 및 제 2 명령어들을 결합할 수 있다. 또 다른 실시 예에서, 디코더 회로(214)는 명령어 스트림(202)이 컴파일러 힌트들(204)을 포함하고(또는 이와 관련되고) 컴파일러 힌트(204)가 그렇게 하라고 하는 경우에 제 1 및 제 2 명령어들을 결합할 수 있다. 그러나, 명령어 스트림(202)이 어떤 병합 관련 컴파일러 힌트들(204)을 포함하지 않으면, 디코더 회로(214)는 제 1 및 제 2 명령어들을 검출한 경우에 제 1 및 제 2 명령어들을 결합할 수 있다. 또 다른 실시 예에서, 디코더 회로(214)는 제 1 및 제 2 명령어들을 검출한 경우에 기회를 따라 제 1 및 제 2 명령어들을 결합할 수 있지만, 컴파일러 힌트(204)가 그렇게 하지 말라고 하는 경우에 제 1 및 제 2 명령어들을 결합하지 않을 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
이러한 실시 예에서, 컴파일러 힌트들(204)은 제 1 및 제 2 명령어들의 출력들 중 어느 것이 필요한지 지시할 수 있다. 위에서 설명된 것처럼, 다양한 실시 예에서, 병합된 또는 제 3 명령어의 버전(Version)들은, 제 1 및 제 2 명령어들의 모든 출력들(예컨대, 몫 및 나머지) 또는 더 적은 개수의 출력(예컨대, 단지 나머지만)과 같이, 상이한 개수의 출력들을 출력할 수 있다. 위에서 설명된 것처럼, 종속성 검출 회로(215)는 출력이 필요하지 않을 것인지를 알기 어려울 수 있다(특히, 출력을 필요로 하는 명령어가 윈도우(222) 밖에 있는 경우). 이러한 실시 예에서, 컴파일러 힌트(204)는 어떤 출력들에 대해서 그것들의 필요함 또는 결여(Lack)를 지시할 수 있다.
몇몇 실시 예에서, 컴파일러 힌트들(204)은 디코더 회로(214)의 결합 능력을 켜거나(Turn on) 끌(Turn off) 수 있다. 이러한 실시 예에서, 디코더 회로(214)는 제 1 및 제 2 명령어들을 탐색하기 시작하거나 또는 반대로 탐색을 중단하기 위해 컴파일러 힌트들(204)을 모니터링할 수 있다. 다양한 실시 예에서, 디코더 회로(214)의 디폴트 모드(Default Mode)는 두 명령어의 검출 및 결합일 수 있다. 반면, 다른 실시 예에서, 디코더 회로(214)의 디폴트 모드는 다르게 지시될 때까지 두 명령어를 검출하거나 결합하지 않는 것일 수 있다.
도 3은 개시되는 주제에 따른 명령어 파이프라인(300)의 실시 예의 타이밍도이다. 다양한 실시 예에서, 명령어 파이프라인(300)은 프로세서, SoC, 또는 다른 컴퓨터 아키텍처 회로의 일부분으로서 포함될 수 있다.
도시된 실시 예에서, 명령어 파이프라인(300)은 페치 회로(312), 디코드 회로(314), 이름 변경 및 순서 변경(Reorder)(이름 변경/순서 변경) 회로(315), 스케줄링 회로(316), 실행 회로(318)(예컨대, 나누기 회로), 및 퇴역(Retire) 회로(319)를 포함할 수 있다. 도시된 실시 예에서, 이 회로들 각각은 명령어 파이프라인(300)의 그들 고유의 스테이지와 관련될 수 있다.
도시된 실시 예에서, 클록 사이클들의 두 세트(330, 340)가 보인다. 도시의 단순화를 위해, 각 스테이지는 하나의 클록 사이클을 취하는 것으로 가정된다. 클록 사이클들(330)은 명령어들 중 아무 것도 병합된 또는 제 3 명령어로 결합되지 않는 명령어들의 스트림의 연산을 보여준다. 클록 사이클들(340)은 명령어들 중 둘이 병합된 또는 제 3 명령어로 결합된 명령어들의 스트림의 연산을 보여준다.
도시된 실시 예에서, 명령어 A0은 레지스터들 사이에서 데이터를 이동시키는 이동(mov) 명령어를 포함할 수 있다. 명령어 A1은, 피제수 및 제수를 입력으로서 취하고 몫을 반환하거나 출력하는, 부호를 갖는(Signed) 정수 나누기(sdiv) 명령어를 포함할 수 있다. 명령어 A1은 "sdiv(피제수, 제수, 몫)"의 형식을 가질 수 있는데, 괄호에 있는 값들은 데이터가 저장된 또는 위치할 레지스터들이다. 명령어 A2는 피제수, 제수, 및 몫을 입력으로서 취하고 나머지를 반환하거나 출력하는 곱하기-빼기(msub) 명령어를 포함할 수 있다. 명령어 A2는 "msub(피제수, 제수, 몫, 나머지)"의 형식을 가질 수 있는데, 괄호에 있는 값들은 데이터가 저장된 또는 위치할 레지스터들이다. 명령어 A3은 두 값을 함께 더하는 더하기(add) 명령어를 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 사이클(331)은 명령어 파이프라인(300)으로 부분적으로 들어온 명령어들 A0, A1, 및 A2의 스트림을 보여준다. 명령어 A0은 이름 변경/순서 변경 스테이지(315)에 있다. 명령어 A1은 디코드 스테이지(314)에 있다. 명령어 A2는 페치 스테이지(312)에 있다. 그리고, 명령어 A3은 아직 명령어 파이프라인(300)으로 들어오지 않았다. 다양한 실시 예에서, 디코드 스테이지(314)는 제 1 명령어(예컨대, 정수 나누기 명령어)의 기준을 만족하는 명령어 A1이 명령어 파이프라인(300)에 있는 것을 검출할 수 있다.
사이클(332)은 명령어 A0이 스케줄링 스테이지(316)로 이동하고, 명령어 A1이 이름 변경/순서 변경 스테이지(315)로 이동하고, 명령어 A2가 디코드 스테이지(314)로 이동하고, 그리고 명령어 A3이 페치 스테이지(312)에서 명령어 파이프라인(300)으로 들어온 것을 보여준다. 다양한 실시 예에서, 디코드 스테이지(314)는 명령어 A2가 제 2 명령어(예컨대, 곱하기-빼기 명령어)의 주요 기준을 만족하는 것을 검출할 수 있다. 그러나, 도시된 실시 예에서, 어떤 이유에서이든 명령어 A2 또는 명령어들 A1 및 A2의 조합이 병합된 명령어(예컨대, 모듈로 명령어)로 결합되지 않을 수 있다. 일 실시 예에서, 명령어 A2가 명령어 A1의 출력을 이용하지 않을 수 있다(즉, 명령어들 A1 및 A2가 관련되지 않은 명령어들이다). 다른 실시 예에서, 명령어 스트림 내에 결합을 방지하거나 결합을 하지 못하게 하는 종속성이 있을 수 있다. 또 다른 실시 예에서, 컴파일러 힌트가 병합을 하지 못하게 지시할 수 있다. 일 실시 예에서, 명령어들을 결합하는 능력이 단순히 꺼질 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다,
사이클들(333, 334, 335, 336)은 명령어들 A0, A1, A2, 및 A3이 명령어 파이프라인(300)을 통해 이동하는 것을 보여준다. 명령어들 A1 및 A2의 결합된 효과가 나머지를 생성하기 위한 것이면, 명령어 A2가 페치되는 시각으로부터 5번째 사이클(사이클(336)) 때까지 나머지가 생성되지 않는다. 사이클(336)은 명령어 A2가 퇴역하거나 또는 완전히 실행되어 그 결과들(예컨대, 나머지)이 올바르고 프로세서의 아키텍처의 상태에서 보이게 되는 때이다. 다양한 실시 예에서, 끼어든 명령어들에 의해 명령어들 A1 및 A2가 따로 떨어지거나 명령어 A1의 출력이 완료될 때까지 명령어 A2가 대기하거나 지연되도록 스케줄링되면, 명령어 A2의 완료 또는 퇴역은 훨씬 더 늦게 발생할 것이다.
도시된 실시 예에서, 명령어 B0은 레지스터들 사이에서 데이터를 이동시키는 이동(mov) 명령어를 포함할 수 있다. 명령어 B1은, 피제수 및 제수를 입력으로서 취하고 몫을 반환하거나 출력하는, 부호를 갖는 정수 나누기(sdiv) 명령어를 포함할 수 있다. 명령어 B2는 피제수, 제수, 및 몫을 입력으로서 취하고 나머지를 반환하거나 출력하는 곱하기-빼기(msub) 명령어를 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 사이클(341)은 명령어 파이프라인(300)으로 완전히 들어온 명령어들 B0, B1, 및 B2의 스트림을 보여준다. 명령어 B0은 이름 변경/순서 변경 스테이지(315)에 있다. 명령어 B1은 디코드 스테이지(314)에 있다. 명령어 B2는 페치 스테이지(312)에 있다. 다양한 실시 예에서, 디코드 스테이지(314)는 제 1 명령어(예컨대, 정수 나누기 명령어)의 기준을 만족하는 명령어가 명령어 파이프라인(300)에 있는 것을 명령어 B1으로서 검출할 수 있다.
사이클(342)에서, 명령어 B0이 스케줄링 스테이지(316)로 이동하여 명령어들이 나아갈 수 있다. 명령어 B1은 이름 변경/순서 변경 스테이지(315)로 이동할 수 있다. 그리고, 명령어 B2는 디코드 스테이지(314)로 이동할 수 있다.
도시된 실시 예에서, 디코드 스테이지(314)는 명령어 B2가 제 2 명령어(예컨대, 곱하기-빼기 명령어)의 기준을 만족하는 것을 검출할 수 있다. 나아가, 도시된 실시 예에서, 명령어들 B1 및 B2가 결합되기 위한 다른 기준(예컨대, 관련됨, 종속성, 및/또는 컴파일러 힌트)을 만족할 수 있다.
도시된 실시 예에서, 이름 변경/순서 변경 스테이지 또는 회로(315)는 대상인 명령어들을 병합하고, 교체하고, 그리고 삭제하도록 구성될 수 있다. 이는 스케줄러 회로가 이 태스크를 수행하였던 도 1의 실시 예 및 디코더 회로가 이 태스크를 수행하였던 도 2의 실시 예와 다르다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 이름 변경/순서 변경 스테이지 또는 회로(315)는 병합된 명령어 B12를 생성할 수 있다. 명령어 B12는 프로세서의 ISA에서 발견되지 않는 모듈로(mod) 명령어를 포함할 수 있다. 명령어 B12는 피제수 및 제수를 입력으로서 취하고 몫 및 나머지를 반환하거나 출력할 수 있다. 명령어 B12는 "mod(피제수, 제수, 몫, 나머지)"의 형식을 가질 수 있는데, 괄호에 있는 값들은 데이터가 저장된 또는 위치할 레지스터들이다. 이는 개시된 주제를 한정하지 않는 단지 하나의 설명적인 예일 뿐임이 이해될 것이다.
이러한 실시 예에서, 이름 변경/순서 변경 스테이지 또는 회로(315)는 명령어 스트림 내에서 명령어 B1을 병합된 명령어 B12로 교체할 수 있다. 나아가, 디코드 스테이지(314)는 명령어 B2를 다음 스테이지 또는 사이클(343)로 통과시키거나 전달하지 않도록 구성될 수 있다. 이는 실질적으로 명령어 B2를 명령어 스트림으로부터 삭제할 수 있다.
사이클들(343, 344, 345)은 명령어들 B0 및 B12가 명령어 파이프라인(300)을 통해 이동하는 것을 보여준다. 도시된 실시 예에서, 결합된 명령어 B12는 명령어 B2가 페치된 시각으로부터 4번째 사이클(사이클(345))에 나머지를 생성한다. 도시된 실시 예에서, 이는 나머지의 실행 시간을 한 사이클만큼 감소시킨다. 그리고, 위에서 설명된 것처럼, 명령어들 B1 및 B2가 보여지는 사이클보다 더 따로 떨어지면 실행 시간의 감소는 더 클 수 있다. 나아가, 몫의 실행은 명령어 B1이 진행되도록 허용되는 때에 정확히 발생한다. 나아가, 삭제된 명령어 B2를 처리하게 되는 경우 사이클(345) 동안 다른 명령어(도시되지 않음)를 위해 실행 스테이지(318)를 이용할 수 있게 됨으로써 효율성들이 얻어진다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도 4는 개시되는 주제에 따른 회로(400)의 실시 예의 타이밍도이다. 다양한 실시 예에서, 회로(400)는, 위에서 설명된 것처럼, 예로서 나누기 회로와 같은 실행 회로를 포함할 수 있다. 다양한 실시 예에서, 회로(400)는 프로세서, SoC, 또는 다른 컴퓨터 아키텍처 회로의 일부분으로서 포함될 수 있다.
도시된 실시 예에서, 타이밍도는 입력들 및 출력들을, 그리고 좀 더 일반적으로는 병합된 명령어(예컨대, 모듈로 명령어)가 나누기 회로로 보내졌을 경우에 나누기 회로로 보내지거나 나누기 회로로부터 수신될 수 있는 신호들을 도시한다. 이는 개시된 주제를 한정하지 않는 단지 하나의 설명적인 예일 뿐임이 이해될 것이다.
도시된 실시 예에서, 클록 신호(450)는 회로(400)를 동기하고 타이밍을 맞추기 위해 채용될 수 있다. 커맨드 신호(452)는 새로운 명령어 또는 커맨드가 회로(400)에 인가되고 있음을 지시하도록 구성될 수 있다. 피연산자(Operand) 신호들(454A, 454B)은 명령어와 연관되는 데이터 값들을 회로(400)로 입력하도록 구성될 수 있다. 도시된 실시 예에서, 피연산자(454A)는 피제수를 포함할 수 있고, 피연산자(454B)는 제수를 포함할 수 있다. GetMod 또는 겟 모듈로(Get Modulo) 신호(456)는 회로(400)가 나누기 연산의 나머지를 (버리거나 계산하지 않는 것이 아니라) 출력할 것임을 지시하도록 구성될 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 라이트 백 예약(ReserveWB) 신호(460)는 회로(400)가 메모리 또는 레지스터로 데이터를 라이트 백 하고자 의도함을 나타내도록 구성될 수 있다. 레이턴시(Latency) 신호(462)는 이러한 라이트 백이 발생할 것으로 예상되기 전의 사이클들의 수를 지시하도록 구성될 수 있다. 결과 유효 신호(464)는 원하는 결과가 저장 또는 쓰기를 위해 준비되었음을 지시하도록 구성될 수 있다. 결과 신호(466)는 원하는 결과 또는 결과들(예컨대, 몫, 나머지)을 출력하도록 구성될 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
도시된 실시 예에서, 첫 번째 사이클(사이클(401))에서 스케줄러 회로 또는 다른 회로는 회로(400)가 명령어를 실행해야 하고 연관되는 데이터 또는 피연산자들이 회로(400)로 입력되고 있음을 (커맨드 신호(452)를 통해) 회로(400)에게 지시할 수 있다. 이러한 실시 예에서, 피제수 및 제수는 피연산자 신호들(454A, 454B)에 위치할 수 있다. 위에서 설명된 것처럼, GetMod 신호(456)는 회로(400)가 또한 나머지 또는 계수(Modulus)를 반환해야 함을 지시하기 위해 인가될 수 있다.
도시된 실시 예에서, 나누기 연산의 계산은 여러 클록 사이클(예컨대, 사이클들(402, 403, 404, 405))을 소요할 수 있다. 사이클(406)에서 회로(400)는 출력들(예컨대, 나머지 및 몫)이 네 사이클의 출력 시작을 위해 준비될 것임을 (ReserveWB 신호(460) 및 레이턴시 신호(462)를 통해) 지시할 수 있다.
도시된 실시 예에서, 네 사이클(사이클들(406, 407, 408, 409))이 지나간 후, 회로(400)는 결과 유효 신호(464)를 인가하고 출력들을 결과 신호(466)에 위치시킬 수 있다. 도시된 실시 예에서, 각 출력은 한 번에 하나씩 교대로 결과 신호(466)에 위치할 수 있다. 이러한 실시 예에서, 두 출력인 나머지 및 몫은 사이클들(410, 411)에 걸쳐 발생할 수 있다. 다른 실시 예에서, 여러 결과 신호들(466)이 채용될 수 있고 출력들이 병렬로 프로세서로 전송될 수 있다. 이후, 사이클(412)에서 회로(400)는 다음 명령어를 처리할 수 있고 또는 유휴(Idle)하게 될 수 있다. 이는 개시된 주제를 한정하지 않는 단지 하나의 설명적인 예일 뿐임이 이해될 것이다.
도 5는 개시되는 주제의 원리들에 따라 구성되는 반도체 장치들을 포함할 수 있는 정보 처리 시스템(500)의 도식적인 블록도이다.
도 5를 참조하면, 정보 처리 시스템(500)은 개시되는 주제의 원리들에 따라 구성되는 장치들 중 하나 이상을 포함할 수 있다. 다른 실시 예에서, 정보 처리 시스템(500)은 개시되는 주제의 원리들에 따른 하나 이상의 기법을 채용하거나 실행할 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은, 예로서, 랩톱, 데스크톱, 워크스테이션, 서버, 블레이드 서버(Blade Server), PDA(Personal Digital Assistant), 스마트 폰, 태블릿, 및 그 외 다른 적절한 컴퓨터들과 같은 컴퓨팅 장치, 또는 가상 머신(Virtual Machine) 또는 그것의 가상 컴퓨팅 장치를 포함할 수 있다. 다양한 실시 예에서, 정보 처리 시스템(500)은 사용자(도시되지 않음)에 의해 이용될 수 있다.
개시되는 주제에 따른 정보 처리 시스템(500)은 중앙 처리 유닛(Central Processing Unit), 로직(Logic), 또는 프로세서(510)를 포함할 수 있다. 몇몇 실시 예에서, 프로세서(510)는 하나 이상의 기능 유닛 블록(Functional Unit Block; FUB) 또는 조합 로직 블록(Combinational Logic Block; CLB)(515)을 포함할 수 있다. 이러한 실시 예에서, 조합 로직 블록(515)은 다양한 부울 로직 연산(Boolean Logic Operation; 예컨대, NAND, NOR, NOT, XOR)을 위한 로직 장치들, 안정화(Stabilizing) 로직 장치들(예컨대, 플립플롭들, 래치들), 그 외 다른 로직 장치들, 또는 그것들의 조합을 포함할 수 있다. 이 조합 로직 연산들은 단순한 또는 복잡한 방식으로 입력 신호들을 처리하여 원하는 결과를 달성하도록 구성될 수 있다. 동기식의(Synchronous) 조합 로직 연산들의 몇 가지 설명적인 예들이 설명되었으나, 개시되는 주제는 그렇게 한정되지 않고 비동기식의(Asynchronous) 연산들 또는 동기식 및 비동기식의 것들의 결합을 포함할 수 있음이 이해될 것이다. 일 실시 예에서, 조합 로직 연산들은 복수의 CMOS(Complementary Metal Oxide Semiconductor) 트랜지스터를 포함할 수 있다. 다양한 실시 예에서, 이 CMOS 트랜지스터들은 논리 연산들을 수행하는 게이트(Gate)들로 배열될 수 있다. 그럼에도 다른 기법들이 이용될 수 있고 그것들 역시 개시되는 주제의 범위에 포함된다. 조합 로직 블록들(515)은 도 1 내지 도 4를 참조하여 설명된 실시 예들 중 적어도 하나에 기초하여 구현될 수 있다.
개시되는 주제에 따른 정보 처리 시스템(500)은 휘발성 메모리(520)(예컨대, RAM(Random Access Memory))를 더 포함할 수 있다. 개시되는 주제에 따른 정보 처리 시스템(500)은 불휘발성 메모리(530)(예컨대, 하드 드라이브, 광학 메모리, NAND 플래시 메모리)를 더 포함할 수 있다. 몇몇 실시 예에서, 휘발성 메모리(520), 불휘발성 메모리(530), 또는 그것들의 조합 또는 부분들은 "저장 매체"로 불릴 수 있다. 다양한 실시 예에서, 휘발성 메모리(520) 및/또는 불휘발성 메모리(530)는 반영구적인 또는 실질적으로 영구적인 형식으로 데이터를 저장하도록 구성될 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 정보 처리 시스템(500)이 통신 네트워크의 일부분으로서 통신 네트워크를 통해 통신하게 하도록 구성되는 하나 이상의 네트워크 인터페이스(540)를 포함할 수 있다. Wi-Fi 규약(Protocol)의 예들은, 여기에 한정되지는 않지만, IEEE(Institute of Electrical and Electronics Engineers) 802.11g, IEEE 802.11n을 포함할 수 있다. 셀 방식(Cellular) 규약의 예들은, 여기에 한정되지는 않지만, IEEE 802.16m(Wireless-MAN(Metropolitan Area Network) Advanced로도 알려짐), LTE(Long Term Evolution) Advanced, EDGE(Enhanced Data rates for GSM(Global System for Mobile communications) Evolution), HSPA+(Evolved High Speed Packet Access)를 포함할 수 있다. 유선 방식(Wired) 규약의 예들은, 여기에 한정되지는 않지만, IEEE 802.3(이더넷(Ethernet)으로도 알려짐), Fibre Channel, Power Line communication(예컨대, HomePlug, IEEE 1901)을 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
개시되는 주제에 따른 정보 처리 시스템(500)은 유저 인터페이스 유닛(550)(예컨대, 디스플레이 어댑터(Display Adapter), 햅틱(Haptic) 인터페이스, 휴먼 인터페이스 장치)을 더 포함할 수 있다. 다양한 실시 예에서, 이 유저 인터페이스 유닛(550)은 사용자로부터 입력을 수신하거나 및/또는 사용자에게 출력을 제공하도록 구성될 수 있다. 다른 종류의 장치들이 사용자와의 상호작용을 제공하기 위해 이용될 수 있다. 예로서, 사용자에게 제공되는 피드백(Feedback)은 감각적인 피드백(예컨대, 시각적인 피드백, 청각적인 피드백, 또는 촉각적인 피드백)의 형태를 가질 수 있고, 사용자로부터의 입력은 음향, 음성, 또는 촉각 입력을 포함하여 어떠한 형태로든 수신될 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 하나 이상의 다른 장치 또는 하드웨어 구성 요소(560)(예컨대, 디스플레이 또는 모니터, 키보드, 마우스, 카메라, 지문 판독기, 비디오 처리기)를 포함할 수 있다. 이들은 개시된 주제를 한정하지 않는 단지 몇 개의 설명적인 예들일 뿐임이 이해될 것이다.
개시되는 주제에 따른 정보 처리 시스템(500)은 하나 이상의 시스템 버스(505)를 더 포함할 수 있다. 이러한 실시 예에서, 시스템 버스(505)는 프로세서(510), 휘발성 메모리(520), 불휘발성 메모리(530), 네트워크 인터페이스(540), 유저 인터페이스 유닛(550), 및 하나 이상의 하드웨어 구성 요소(560)를 통신하도록(Communicatively) 연결하도록 구성될 수 있다. 프로세서(510)에 의해 처리되는 데이터 또는 불휘발성 메모리(530)의 외부로부터 입력되는 데이터는 시스템 버스(505)를 통해 불휘발성 메모리(530) 또는 휘발성 메모리(520)에 저장될 수 있다.
다양한 실시 예에서, 정보 처리 시스템(500)은 하나 이상의 소프트웨어 구성 요소(570)를 포함하거나 실행할 수 있다. 몇몇 실시 예에서, 소프트웨어 구성 요소들(570)은 운영 체제(Operating System) 및/또는 응용 프로그램(Application)을 포함할 수 있다. 몇몇 실시 예에서, 운영 체제는 응용 프로그램으로 하나 이상의 서비스를 제공하고 응용 프로그램과 정보 처리 시스템(500)의 다양한 하드웨어 구성 요소(예컨대, 프로세서(510), 네트워크 인터페이스(540)) 사이에서 중재자로서 관리하거나 기능하도록 구성될 수 있다. 이러한 실시 예에서, 정보 처리 시스템(500)은 하나 이상의 내장(Native) 응용 프로그램을 포함할 수 있는데, 이들은 로컬(Local)로(예컨대, 불휘발성 메모리(530) 내에) 설치되어 프로세서(510)에 의해 직접 실행되고 운영 체제와 직접 상호 작용하도록 구성될 수 있다. 이러한 실시 예에서, 내장 응용 프로그램들은 미리 컴파일되어 기계로 실행 가능한(Pre-compiled Machine Executable) 코드를 포함할 수 있다. 몇몇 실시 예에서, 내장 응용 프로그램들은 소스 코드(Source Code) 또는 오브젝트 코드(Object Code)를 프로세서(510)에 의해 실행되는 실행 가능한 코드로 변환하도록 구성되는 스크립트 인터프리터(Script Interpreter)(예컨대, C shell(csh), AppleScript, AutoHotkey) 또는 가상 실행 머신(예컨대, Java Virtual Machine, Microsoft Common Language Runtime)을 포함할 수 있다.
위에서 설명된 반도체 장치들은 다양한 패키징(Packaging) 기법을 이용하여 실장될 수 있다. 예로서, 개시되는 주제의 원리들에 따라 구성되는 반도체 장치들은 POP(Package On Package) 기법, BGAs(Ball Grid Arrays) 기법, CSPs(Chip Scale Packages) 기법, PLCC(Plastic Leaded Chip Carrier) 기법, PDIP(Plastic Dual In-line Package) 기법, Die in waffle pack 기법, Die in wafer form 기법, COB(Chip On Board) 기법, CERDIP(Ceramic Dual In-line Package) 기법, PMQFP(Plastic Metric Quad Flat Package) 기법, PQFP(Plastic Quad Flat Package) 기법, SOIC(Small Outline Package) 기법, SSOP(Shrink Small Outline Package) 기법, TSOP(Thin Small Outline Package) 기법, TQFP(Thin Quad Flat Package) 기법, SIP(System In Package) 기법, MCP(Multi-Chip Package) 기법, WFP(Wafer-level Fabricated Package) 기법, WSP(Wafer-level processed Stack Package) 기법, 또는 이 분야의 통상의 기술자들에게 알려지게 될 그 외의 다른 기법 중 어느 하나를 이용하여 실장될 수 있다.
방법의 단계들은 입력 데이터에 대해 연산하고 출력을 생성함으로써 기능들을 수행하기 위해 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능한(Programmable) 프로세서에 의해 수행될 수 있다. 방법의 단계들은 또한 전용(Special Purpose) 논리 회로군(예컨대, FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Chip))에 의해 수행될 수 있다. 장치는 전용 논리 회로군(예컨대, FPGA 또는 ASIC)로서 구현될 수 있다.
다양한 실시 예에서, 컴퓨터로 읽을 수 있는 매체는 실행되었을 때 장치가 방법의 단계들의 적어도 일부분을 수행하게 하는 명령어들을 포함할 수 있다. 몇몇 실시 예에서, 컴퓨터로 읽을 수 있는 매체는 자기 매체, 광학 매체, 그 외 다른 매체, 또는 그것들의 조합(예컨대, CD-ROM, 하드 드라이브, 읽기 전용 메모리, 플래시 드라이브)에 포함될 수 있다. 이러한 실시 예에서, 컴퓨터로 읽을 수 있는 매체는 유형적이고(Tangible) 비일시적으로(Non-transitory) 구현되는 물품일 수 있다.
개시되는 주제의 원리들이 실시 예들을 참조하여 설명되었으나, 이 개시되는 개념들의 사상 및 범위로부터 벗어나지 않고 거기에 다양한 변경 및 수정이 가해질 수 있음이 이 분야의 통상의 기술자들에게 명백할 것이다. 그러므로, 위 실시 예들은 한정적인 것이 아니라 단지 설명적인 것으로 이해되어야 한다. 그래서, 개시되는 개념들의 범위는 다음의 청구항들 및 그것들의 균등물들의 가장 넓게 허용될 수 있는 해석에 의해 결정될 것이고, 앞의 설명에 의해 제한되거나 한정되지 않아야 한다. 그러므로, 첨부되는 청구항들은 실시 예들의 범위 내에 들어오는 모든 그러한 수정들 및 변경들을 커버하도록 의도됨이 이해될 것이다.

Claims (20)

  1. 명령어 스트림(Instruction Stream) 내에서 제 2 명령어에 앞서는 제 1 명령어를 검출하도록 구성되는 디코더(Decoder) 회로;
    상기 제 1 및 제 2 명령어들을 제 3 명령어로 병합하고, 명령어 파이프라인(Instruction Pipeline) 내에서 상기 제 1 명령어를 상기 제 3 명령어로 교체하고, 상기 명령어 파이프라인 내에서 상기 제 2 명령어를 삭제하도록 구성되는 스케줄러(Scheduler) 회로; 및
    상기 제 3 명령어를 실행하도록 구성되는 실행 회로를 포함하되,
    상기 제 1 명령어는 피제수(Dividend) 및 제수(Divisor)를 입력으로서 취하고,
    상기 제 2 명령어는 나머지(Remainder)를 생성하고,
    상기 제 3 명령어는 상기 피제수 및 상기 제수를 입력으로서 취하고 상기 나머지를 생성하는 장치.
  2. 제 1 항에 있어서,
    상기 제 1 명령어는 정수 나누기 명령어(Integer Division Instruction)이고,
    상기 제 2 명령어는 곱하기-빼기 명령어(Multiply-subtract Instruction)인 장치.
  3. 제 1 항에 있어서,
    상기 제 1 명령어는 몫(Quotient)을 생성하고,
    상기 제 3 명령어는 상기 몫을 생성하는 장치.
  4. 제 1 항에 있어서,
    상기 제 1 명령어가 상기 명령어 파이프라인에서 교체되지 않는 경우에 상기 제 1 명령어의 출력이 생성되는 것과 동일한 클록 사이클(Clock Cycle)에 상기 실행 회로가 상기 나머지를 출력하도록 구성되는 장치.
  5. 제 1 항에 있어서,
    상기 디코더 회로는 상기 명령어 스트림의 일부분을 저장하도록 구성되는 윈도우(Window) 메모리를 포함하고,
    상기 디코더 회로는 상기 제 1 및 제 2 명령어들 모두가 상기 윈도우 메모리에 저장되는 상기 일부분에 의해 포함되면 상기 제 1 및 제 2 명령어들을 검출하도록 구성되는 장치.
  6. 제 1 항에 있어서,
    상기 디코더 회로는 종속성(Dependency) 검출 회로를 포함하고,
    상기 종속성 검출 회로는:
    상기 제 2 명령어가 상기 제 1 명령어의 출력에 종속하는지를 판별하고;
    상기 제 2 명령어가 상기 제 1 명령어의 상기 출력에 종속하면, 상기 제 1 및 제 2 명령어들이 병합될 것임을 지시하고; 그리고
    상기 제 2 명령어가 상기 제 1 명령어의 상기 출력에 종속하지 않으면, 상기 제 1 및 제 2 명령어들이 병합되지 않을 것임을 지시하는 장치.
  7. 제 1 항에 있어서,
    상기 명령어 스트림은 상기 제 1 및 제 2 명령어들이 병합될 것인지 아닌지를 지시하는 컴파일러 힌트(Compiler Hint)를 포함하고,
    상기 디코더 회로는, 적어도 부분적으로, 상기 컴파일러 힌트에 기반하여 상기 제 2 명령어에 앞서는 상기 제 1 명령어를 검출하도록 구성되는 장치.
  8. 제 1 항에 있어서,
    상기 명령어 스트림은 상기 제 1 및 제 2 명령어들의 검출 및 병합이 발생할 때를 지시하도록 구성되는 컴파일러 힌트를 포함하고,
    상기 디코더 회로는, 적어도 부분적으로, 상기 컴파일러 힌트에 기반하여 상기 제 2 명령어에 앞서는 상기 제 1 명령어를 검출하도록 구성되고,
    상기 스케줄러 회로는, 적어도 부분적으로, 상기 컴파일러 힌트에 기반하여 상기 제 1 및 제 2 명령어들을 상기 제 3 명령어로 병합하도록 구성되는 장치.
  9. 복수의 파이프라인 스테이지 회로(Pipeline Stage Circuit)를 포함하는 명령어 파이프라인(Instruction Pipeline)을 포함하되,
    상기 명령어 파이프라인은 부분적 병렬(Partially Parallel) 방식으로 명령어 스트림을 처리하도록 구성되고,
    상기 복수의 파이프라인 스테이지 회로는:
    상기 명령어 스트림 내에서 곱하기-빼기 명령어(Multiply-subtract Instruction)에 앞서는 정수 나누기 명령어(Integer Division Instruction)를 검출하도록 구성되는 제 1 회로; 및
    상기 명령어 스트림 내에서 상기 정수 나누기 명령어를 모듈로 명령어(Modulo Instruction)로 교체하고, 상기 명령어 스트림 내에서 상기 곱하기-빼기 명령어를 삭제하도록 구성되는 제 2 회로를 포함하고,
    상기 정수 나누기 명령어와 상기 곱하기-빼기 명령어는 함께 나머지(Remainder)를 생성하는 장치.
  10. 제 9 항에 있어서,
    상기 복수의 파이프라인 스테이지 회로는 상기 정수 나누기 명령어가 교체되지 않는 경우에 상기 정수 나누기 명령어의 출력이 생성되는 것과 동일한 파이프라인 스테이지에 상기 나머지를 출력하도록 구성되는 제 3 회로를 포함하는 장치.
  11. 제 9 항에 있어서,
    상기 제 1 회로는 상기 명령어 스트림의 일부분을 저장하도록 구성되는 윈도우(Window) 메모리를 포함하고,
    상기 제 1 회로는 상기 정수 나누기 명령어 및 상기 곱하기-빼기 명령어 모두가 상기 윈도우 메모리에 저장되는 상기 일부분에 의해 포함되면 상기 정수 나누기 명령어 및 상기 곱하기-빼기 명령어를 검출하도록 구성되는 장치.
  12. 제 9 항에 있어서,
    상기 제 1 회로는 종속성(Dependency) 검출 회로를 포함하고,
    상기 종속성 검출 회로는 상기 곱하기-빼기 명령어가 상기 정수 나누기 명령어의 출력에 종속하는지를 판별하도록 구성되는 장치.
  13. 제 9 항에 있어서,
    상기 명령어 스트림은 상기 정수 나누기 명령어 및 상기 곱하기-빼기 명령어가 병합될 것인지 아닌지를 지시하는 컴파일러 힌트(Compiler Hint)와 관련되고,
    상기 제 1 회로는, 적어도 부분적으로, 상기 컴파일러 힌트에 기반하여 상기 곱하기-빼기 명령어에 앞서는 상기 정수 나누기 명령어를 검출하도록 구성되는 장치.
  14. 제 9 항에 있어서,
    상기 명령어 스트림은 상기 정수 나누기 명령어를 상기 모듈로 명령어로 교체하는 것을 끄기 위한 컴파일러 힌트와 관련되는 장치.
  15. 제 9 항에 있어서,
    상기 정수 나누기 명령어 및 상기 곱하기-빼기 명령어 모두는 명령어 집합 아키텍처(Instruction Set Architecture)에 포함되고,
    상기 모듈로 명령어는 상기 명령어 집합 아키텍처에 포함되지 않는 장치.
  16. 명령어 파이프라인 회로군(Instruction Pipeline Circuitry)의 제 1 부분에 의해, 빼기 명령어(Subtraction Instruction)에 앞서는 나누기 명령어(Division Instruction)가 모듈로 연산(Modulo Operation)을 야기하는지 검출하는 단계;
    상기 명령어 파이프라인 회로군의 제 2 부분에 의해, 실행되었을 때 상기 모듈로 연산을 수행하는 병합된 명령어(Merged Instruction)로 상기 나누기 명령어 및 상기 빼기 명령어를 병합하는 단계; 및
    상기 명령어 파이프라인 회로군의 제 3 부분에 의해, 상기 병합된 명령어를 실행하는 단계를 포함하는 방법.
  17. 제 16 항에 있어서,
    상기 제 1 부분은 디코드 회로(Decode Circuit)를 포함하고,
    상기 제 2 부분은 상기 디코드 회로, 이름 변경 회로(Rename Circuit), 순서 변경 회로(Reorder Circuit), 및 스케줄러 회로(Scheduler Circuit)를 포함하는 그룹으로부터 선택되는 회로를 포함하는 방법.
  18. 제 16 항에 있어서,
    상기 검출하는 단계는 상기 나누기 명령어가 종속성 규칙(Dependency Rule)의 위반(Violation) 없이 상기 빼기 명령어와 병합될 것인지를 판별하는 단계를 포함하고,
    상기 종속성 규칙의 상기 위반을 판별하는 단계는 명령어들의 윈도우(Window) 내에 포함되는 복수의 명령어 사이의 종속성들을 판별하는 단계를 포함하는 방법.
  19. 제 18 항에 있어서,
    상기 종속성 규칙의 상기 위반을 판별하는 단계는, 적어도 부분적으로, 상기 복수의 명령어 중 하나 이상과 관련되는 하나 이상의 컴파일러 힌트(Compiler Hint)에 기반하여 판별하는 것을 포함하는 방법.
  20. 제 19 항에 있어서,
    상기 명령어들의 스트림에 상기 하나 이상의 컴파일러 힌트를 부가하는 단계를 더 포함하되,
    상기 하나 이상의 컴파일러 힌트는 상기 종속성 규칙의 상기 위반을 판별하는 데에 도움이 되는 방법.
KR1020180091401A 2017-10-02 2018-08-06 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법 KR20190038989A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762567190P 2017-10-02 2017-10-02
US62/567,190 2017-10-02
US15/853,628 US20190102197A1 (en) 2017-10-02 2017-12-22 System and method for merging divide and multiply-subtract operations
US15/853,628 2017-12-22

Publications (1)

Publication Number Publication Date
KR20190038989A true KR20190038989A (ko) 2019-04-10

Family

ID=65897331

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180091401A KR20190038989A (ko) 2017-10-02 2018-08-06 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법

Country Status (3)

Country Link
US (1) US20190102197A1 (ko)
KR (1) KR20190038989A (ko)
CN (1) CN109597648A (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
US10901745B2 (en) * 2018-07-10 2021-01-26 International Business Machines Corporation Method and apparatus for processing storage instructions
CN112905236A (zh) * 2021-01-18 2021-06-04 广东赛昉科技有限公司 一种risc-v指令集余数指令的实现方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8082430B2 (en) * 2005-08-09 2011-12-20 Intel Corporation Representing a plurality of instructions with a fewer number of micro-operations
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
CN106485315B (zh) * 2015-10-08 2019-06-04 上海兆芯集成电路有限公司 具有输出缓冲器反馈与遮蔽功能的神经网络单元

Also Published As

Publication number Publication date
US20190102197A1 (en) 2019-04-04
CN109597648A (zh) 2019-04-09

Similar Documents

Publication Publication Date Title
US20210406027A1 (en) Advanced processor architecture
EP3066561B1 (en) Energy efficient multi-modal instruction issue
KR100681199B1 (ko) 코어스 그레인 어레이에서의 인터럽트 처리 방법 및 장치
CN111767080A (zh) 用于可配置空间加速器中的操作的设备、方法和系统
JP2016526220A (ja) プログラム可能な最適化を有するメモリネットワークプロセッサ
US9513908B2 (en) Streaming memory transpose operations
GB2565338A (en) Fault detecting and fault tolerant multi-threaded processors
KR20190038989A (ko) 나누기와 곱하기-빼기 연산들을 병합하기 위한 시스템 및 방법
US9996345B2 (en) Variable length execution pipeline
US20140075153A1 (en) Reducing issue-to-issue latency by reversing processing order in half-pumped simd execution units
US11182166B2 (en) Branch prediction throughput by skipping over cachelines without branches
KR20200083221A (ko) 예측 할당을 사용하는 마이크로-동작 캐시
KR102500357B1 (ko) 메모리 로드 및 산술 로드 유닛 융합
CN108228238B (zh) 用于确定具有多个数据元素的数据集合中的最小的两个值的方法及装置
US8006074B1 (en) Methods and apparatus for executing extended custom instructions
CN111984325A (zh) 提高分支预测吞吐量的装置及系统
US10430197B2 (en) Banking register renaming to reduce power
Tina et al. Performance improvement of MIPS Architecture by Adding New features
US20180046459A1 (en) Data processing
US9411582B2 (en) Apparatus and method for processing invalid operation in prologue or epilogue of loop
Soliman A VLIW architecture for executing multi-scalar/vector instructions on unified datapath
US7112991B1 (en) Extended custom instructions
JP6060853B2 (ja) プロセッサおよびプロセッサの処理方法
US20170277539A1 (en) Exception handling in processor using branch delay slot instruction set architecture
Swetha et al. Design of 32-bit microcontroller processor in soc