KR20210106404A - 명령 작업들의 동시 실행을 위한 명령어 생성 및 실행을 위한 시스템 및 방법 - Google Patents

명령 작업들의 동시 실행을 위한 명령어 생성 및 실행을 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20210106404A
KR20210106404A KR1020217007490A KR20217007490A KR20210106404A KR 20210106404 A KR20210106404 A KR 20210106404A KR 1020217007490 A KR1020217007490 A KR 1020217007490A KR 20217007490 A KR20217007490 A KR 20217007490A KR 20210106404 A KR20210106404 A KR 20210106404A
Authority
KR
South Korea
Prior art keywords
alu
directive
instruction
alus
clock cycle
Prior art date
Application number
KR1020217007490A
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 태크염 엘티디.
Priority to KR1020227011196A priority Critical patent/KR20220047397A/ko
Priority to KR1020217031381A priority patent/KR20210124513A/ko
Publication of KR20210106404A publication Critical patent/KR20210106404A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

복수의 산술 논리 장치(ALU)들에 의한 실행을 위한 일련의 명령 연산을 준비하는 방법론이 제공된다. 상기 방법론은 먼저 첫번째, ALU에 제1 명령 연산을 할당하는 단계; 첫째로 제1 명령 연산의 출력에 직접적으로 의존하는 입력을 갖는 제2 명령 연산에 대해 제2 명령 연산에 대한 모든 입력이 제1 ALU로부터 로컬로 미리 정의 된 범위 내에서 이용 가능한지 여부를 결정하는 단계; 두번째로 제1 결정의 적어도 긍정적인 결과에 응답하여, 제2 명령 동작을 제2 ALU에 할당하는 단계; 제1 결정의 부정적 결과에 응답하여: 제1 명령 동작의 실행과 제2 명령 동작 사이에 적어도 하나의 클럭 사이클의 일시 중지가 발생할 것을 보장하는 단계; 및 세번째로 복수의 ALU들중 하나의 ALU에 제2 명령 연산을 할당하는 단계를 포함한다.

Description

위치 인식 처리를 위한 시스템 및 방법
본 출원은 2018년 8월 16일에 출원된 "SYSTEM AND METHOD FOR LOCATION AWARE PROCESSING" 명칭의 미국 임시 특허 출원 번호 제62/764,767호와 과 2019년 8월 14일에 출원된 "SYSTEM AND METHOD FOR LOCATION AWARE PROCESSING" 명칭의 미국 임시 특허 출원 번호 제16/540,328호의 우선권을 주장하고, 위 두 출원의 내용은 전체로 여기에 참조로서 명백히 포함된다.
여기에 설명된 다양한 실시예들은 일반적으로 높은 클럭 속도를 가진 프로세서들에 관한 것이다. 보다 구체적으로, 애플리케이션의 실시예들은 우선 명령 작업들(prior instruction operations)에 산술 논리 장치(Arithmetic Logic Unit; ALU)들을 우선 할당하는 것에 기초하여 프로세서 내에 있는 ALU들을 명령 작업들에 할당하는 위치 인식 처리를 활용하는 처리 아키텍처 및 관련 방법론과 관련된다. 이러한 실시예들은 상응하는 클럭 속도의 상당한 증가, 전력 소비 감소 및 크기 감소와 함께, 프로세서 내 ALU들 간의 와이어들(wires)에 대한 내부 전송 지연의 영향을 최소화한다.
최근 몇 년 동안 현대 컴퓨팅에서 프로세서들의 클럭 속도는 실질적으로 정체되었다. 이제 도 1을 참조하면, 로그 그래프 (100)는 1975-2015 년의 트랜지스터 크기, 클럭 속도 및 성능의 진화를 보여준다 (데이터는 40 Years of Microprocessor Trend Data, Karl Rupp, 2015 년 6 월 25 일). 트랜지스터는 상당히 선형적인 경로(102)를 따라 계속해서 크기가 감소하고 있다. 더 작은 트랜지스터는 더 큰 트랜지스터보다 빠르기 때문에 트랜지스터 크기의 감소는 트랜지스터 스위칭 속도를 대략 9년마다 8배씩 증가시켰다. 트랜지스터들은 작업을 수행하는 프로세서 내부의 ALU들을 구성한다.
2000년 이전에는 CPU 클럭 속도와 성능의 주요 요인은 트랜지스터 속도였다. 따라서 1975년부터 2000년까지 트랜지스터 크기가 경로(102)를 따라 감소함에 따라 클럭 속도 곡선(104)는 거의 대응하는 선형 경로에서 개선되었으며 성능 곡선(106)은 상당히 유사한 선형 경로를 따라 유지되었다.
2000 년대 초반, 클럭 속도가 최고조에 이르고 각 제품 발전이 더뎌 지며 성능이 향상되었다. 트랜지스터 크기와 속도의 지속적인 개선에도 불구하고 클럭 속도는 2010 년부터 2015 년까지 최소한의 개선을 보였다. 프로세서 기술은 더 이상 트랜지스터 크기 감소를 클럭 속도 향상으로 완전히 활용할 수 없었다. 해당 기간 동안 성능은 약간 개선 되었지만, 상대적으로 미미했고, 이러한 성능 개선은 주로 프로세서 기술의 다른 개선에 기인한 것이었다.
클럭 속도가 정점에 이르는 이유는 트랜지스터 속도 이외의 요인의 영향이 증가하기 때문이다. 2000년 이전에는 이러한 요소의 영향이 트랜지스터 속도의 영향에 비해 너무 작아서 다른 요소는 사실상 중요하지 않았다. 따라서 클럭 속도 및 성능 향상은 트랜지스터 속도의 향상을 따라잡았다. 그러나 결국 트랜지스터들은 너무 작아지고 빨라져 이러한 다른 요소의 영향을 더 이상 무시할 수 없게 되었고, 시간이 지남에 따라 중요한 제한 요소로 발전했다. 이러한 요인 중 하나는 전송 시간으로, 이는 신호를 생성한 소스에서 신호를 소비하는 ALU로 신호가 와이어를 통해 이동하는 데 걸리는 시간에 의해 부분적으로 설정 된다.(충전 및 유도 효과, 누설 등을 포함하되 이에 국한되지 않는 이러한 시간에 기술적 고려 사항이 포함된다.)
트랜지스터 속도 및 와이어 지연 (전송 시간)의 요인은 모두 지원 시스템의 클럭 속도에 영향을 준다. 현대 컴퓨팅은 단일 클럭 주기 내에서 발생하는 두 가지 이벤트를 보장한다. 첫째, 산술 논리 장치 ("ALU")는 해당 입력을 생성 한 코어 내의 모든 소스로부터 입력을 수신하고 선택한다. 이것은 입력이 소스에서 ALU로 이동하는 전송 시간을 의미한다. 둘째, ALU는 수신 / 선택된 입력에 대해 처리 단계를 수행한다. 이것은 처리 시간을 의미한다.
이러한 맥락에서, 트랜지스터 및 와이어의 크기 감소는 상쇄 효과를 갖는다. 트랜지스터 크기의 감소는 처리 시간을 감소시키는 반면, 와이어 크기의 감소는 더 얇은 와이어 (높이 및 너비)가 신호 흐름에 더 강하기 때문에 전송 시간을 증가시킨다.
이 효과는 상쇄되지만 역사적으론 비교할 수 없었다. 2000 년 이전에는 처리 시간이 전송 시간 (예 : 약 100 배 정도)보다 훨씬 길어서 전송 시간 (증가하더라도)은 클럭 속도 설정에 미미했다. 이것은 그래프 (100)의 2000 년 이전 시간 프레임에 반영되며, 클럭 속도 및 성능의 향상은 트랜지스터 크기의 향상을 능가했다.
트랜지스터와 와이어의 크기가 계속 감소함에 따라 처리 시간은 계속 감소했지만 전송 시간은 훨씬 더 빠른 속도로 계속 증가했다. 결국 둘 사이의 간격은 처리 시간에 비해 전송 시간이 더 이상 무시할 수 없는 수준으로 좁혀졌고, 따라서 전송 시간 증가는 처리 시간에 대한 결과적인 상쇄 요인이 되었다.
이것은 코어 내의 ALU의 레이아웃의 맥락에서 이해된다. 이제 도면을 참조한다. 도2A 및 도2B에서, 당 업계에 알려진 바와 같이, 프로세서 (250)의 코어 (205)는 프로그램 명령을 실행하는 4-8 개의 ALU(202)를 갖는 데이터 경로 (207)를 포함한다. 데이터 경로 (207)는 적어도 하나의 단순 ALU (예를 들어, 정수 산술 (더하기, 빼기), 불 논리 (및 또는 보완) 및 시프트 (왼쪽, 오른쪽, 회전)를 포함하는 기능 수행) 및 적어도 하나의 복합 ALU를 포함 할 수 있다.(예를 들어 정수 연산 (곱하기 및 나누기), 부동 소수점 연산 (더하기, 빼기, 곱하기, 나누기) 및 또는 수학 함수 (제곱근, 사인, 코사인, 로그 등)를 포함한 함수 수행.
도 2B는 데이터 경로 (216)를 따라 6 개의 ALU (202, 204, 206, 208, 210, 212 및 214)를 갖는 종래 기술 데이터 경로를 도시하며, 그중 4 개 (208, 210, 212, 214)는 단순 ALU이고, 두 개 (204, 206)는 복합 ALU이다. 데이터 경로 (216)는 피연산자 선택 네트워크를 집합적으로 정의하기 위해 각 ALU에 대한 피연산자 선택 유닛 (215)을 포함하고 그 대응하는 ALU에 입력되는 데이터 경로 (216)에서 이용 가능한 특정 입력을 선택한다. 레지스터 (217)는 ALU(202)에 의해 사용되는 값을 제공하며, 이러한 값은 ALU의 이전 활동에 의해 더 일찍 제공될 수 있다.
도 2C는 ALU(204, 206, 208 및 210)를 포함하는 ALU(202)의 레이아웃에 대한 도 2B의 레이아웃에 대한 보다 상세한 설명을 제공한다. 각 ALU 실행 유닛 (202)은 가산기 (262)와 로직 유닛 (263)으로 구성된다. 가산기 (262)는 로드 명령에 의해 설명 된 메모리 읽기 및 저장 명령에 의해 설명 된 메모리 쓰기에 대한 주소를 계산하는 데 사용될 수 있다. 또한 가산기 (262)는 조건부 분기를 실행하는 데 사용될 수 있다. ALU가 단순하거나 복잡한 지 여부에 따라 논리 단위에는 비트 논리 단위, 시프터, 부호 확장, 논리 및 기타 여러 연산이 포함될 수 있다. 각 ALU(202)는 입력 (261) 및 (262)를 통해 피연산자를 수신한다. 입력 (261) 및 (262)는 연산 실행을 위한 피연산자를 제공하기 위해 가산기 (262) 및 논리 유닛 (263)에 연결된다. 가산기 (262)의 결과는 커플링 (264)을 통해 멀티플렉서(multiflexer) (266)에 연결되고 논리 유닛 (263)의 결과는 커플링 (265)을 통해 멀티플렉서 (266)에 연결된다. 멀티플렉서는 요청된 작업에 따라 가산기 (264) 또는 논리 유닛 (263)에서 결과를 선택한다. 멀티플렉서 (266)의 결과는 커플링 (267)을 통해 출력 레지스터 (268)로 전송된다.
ALU (204, 206, 208, 210)에 대한 피연산자를 선택하기 위해 (220, 230, 240, 245)가 사용되는 것처럼 복수의 피연산자 선택 유닛들 (215)이 도시된다. 각 피연산자 선택 유닛 (215)은 결합 (261)을 통해 가산기 (262) 및 로직 (263)에 결합된 멀티플렉서 (221)에 의해 ALU (260)에 대한 피연산자 (261)를 선택한다. 멀티플렉서 (221)는 메모리 포트 (252) 또는 (254), 커플링 (258)을 사용하는 레지스터 (256), 커플링 (269)를 통한 ALU (204), 커플링 (279)를 통한 ALU (206), 커플링 (289)를 통한 ALU (208), 또는 커플링 (299)를 통한 ALU (210)에서 피연산자를 선택한다. 유사하게 피연산자 선택 유닛 (220)은 결합 (262)을 통해 가산기 및 논리 유닛에 결합된 멀티플렉서 (222)에 의해 ALU (260)에 대한 피연산자 (262)를 선택한다. 멀티플렉서 (222)는 이러한 이용 가능한 입력 또는 즉시 피연산자 상수 (223)에서 유사하게 선택할 수 있다.
ALU (220)의 결과뿐만 아니라 메모리 포트 (252 및 254)에 의해 제공되는 데이터는 레지스터 (217)에 기록되고 후속 계산에 사용 가능하게 될 수 있다.
ALU (202)를 연결하는 와이어의 전송 시간은 종래 기술의 프로세서 방법론에 특정 영향을 미친다. 단일 클럭 사이클 내에서 신호 수신 및 처리를 완료하는 것을 보장하려면 통신 및 처리 이벤트 모두에 대해 최악의 시나리오 조합을 허용하도록 클럭 속도를 설정해야 한다. 처리 측면에서 최악의 경우는 ALU가 단일 클럭 주기 내에서 처리하는 가장 시간이 많이 걸리는 작업이다 (한 클럭 주기 내에서 완료되지 않을 것으로 예상되는 프로세스는 포함되지 않음). 전송 측면에서 최악의 경우는 입력 신호가 작업을 수행하는 ALU에 도달하기 위해 이동해야 하는 가장 먼 거리이다. 전반적인 최악의 경우는 ALU가 가장 먼 거리에서 입력을 요구하는 가장 시간이 많이 걸리는 처리 작업을 처리하는 경우이다.
도 2B의 예로서, 설명을 위해 단일 클럭 사이클에서 ALU에 의해 완료 될 수 있는 가장 복잡한 동작은 복합 ALU (204 또는 206) 중 하나에 의한 "시프트(shift)"이다. 가장 복잡한 전송 거리는 데이터 경로 (216)의 한쪽 끝에 있는 ALU (204)가 데이터 경로의 반대쪽에 있는 가장 먼 ALU (214)에서 입력을 선택하는 것이다. 시간적으로 최악의 경우는 ALU (204)가 ALU (214)의 입력에 따라 시프트를 수행해야하는 경우이다. ALU (202)에 대한 칩의 클럭 주기는 작동을 수행할 수 있도록 최악의 경우보다 커야 한다.
특정 칩에 대한 최악의 경우가 무엇이든 간에, 클럭 사이클이 단일 클럭 사이클 내에서 발생하는 최악의 경우를 허용하도록 설정될 때, 클럭 사이클은 다른 모든 것을 보장 할 만큼 충분히 길다. 다른 작업은 전체 전송 및 처리에 덜 부담이 되고 단일 클럭 사이클 내에서 수행될 수 있으므로 해당 클럭 사이클로 작업을 수행 할 수 있다.
대조적으로, 클럭 사이클 내에서 정확한 결과가 생성되지 않을 수 있고 그 프로세스의 결과를 사용하도록 지시된 다른 ALU가 잘못된 정보를 수신하기 때문에 최악의 시나리오가 보장을 위반하는 클럭 사이클을 더 짧게 설정하는 것은 자체적으로 잘못된 결과를 생성한다. 예를 들어, 그림 2B에서 ALU (204)가 ALU (214)로부터 입력을 수신하기에 클럭 사이클이 충분히 길지 않은 경우, ALU (204)는 ALU (204)의 출력에 의존하는 다른 ALU로 전파되는 잘못된 출력을 생성한다.
따라서, 종래 기술의 클럭 사이클은 다음 방정식에 의해 정의될 수 있다.
최소 클럭 사이클 시간 = tmaxglobalcomm + tmaxop + toh; 및
최대 클럭 속도 = (1 / 최소 클럭 주기 시간)
tmaxglobalcomm은 한 ALU가 데이터 경로 내의 다른 ALU에서 컨텐츠를 수신하고 선택하는 데 걸리는 최대 시간이다.
tmaxop은 하나의 ALU가 단일 클럭 주기 내에서 처리 단계를 완료하는 데 걸리는 최대 시간이다.
toh는 클럭 스큐(clock skew) 및 클럭 지터(clock jitter), 프로세스의 변화, 온도 또는 전압, 접지 바운스, 동시 스위칭, 신호 중 하나 이상을 포함하지만 이에 제한되지 않는 무결성, 밀러 효과(miller effect), 가드 밴드 및 / 또는 노화 등의 당 업계에 알려진 "오버헤드(overhead)" 매개 변수에 할당된 시간이다.
다시 도 1을 참조하면, 1990 년대에 통신 시간 (즉, 와이어 지연)은 처리 시간 (즉, 트랜지스터 스위칭 속도)에 비해 무시할 만했다. 해당 기간에 대한 대략적인 값의 일반적인 예는 tmaxop = 9.5 나노 초 (ns), tmaxglobalcomm = 200 피코 초 (ps) 및 toh = 300ps 일 수 있다. 따라서 1990 년대의 이 예에서 :
최소 클럭 사이클 시간 = 9.5ns + 200ps + 300ps = 10ns
최대 클럭 속도 = 1 / 10ns = 100MHz
이것은 1997년경 가정용 컴퓨터의 일반적인 속도였다. 결과 방정식은 처리 시간에 의해 (이 예에서는, 95 %) 지배적이어서 다른 요인의 영향이 최소화되었다 (이 예에서는, 5 %).
도 1에서 2005년 이후의 클럭 속도 곡선 (104)의 평탄화는 시간 인자의 영향의 갭이 좁아지는 것을 반영한다. 2018년 경의 구성 요소 크기를 고려할 때 최악의 작업 처리 시간은 코어의 한 모서리에서 다른 모서리로의 최악의 경우 전송에 대한 통신 시간과 유사하다. 예를 들어, 현재 프로세서 (20년 전보다 훨씬 빠른 트랜지스터 스위칭 속도와 훨씬 더 많은 와이어 지연 / 전송 시간)의 경우 대략적인 값은 tmaxop = 120ps, tmaxglobalcomm = 120ps 및 toh = 20ps 일 수 있다. 따라서 2018년도의 예에서
최소 클럭 사이클 시간 = 120ps + 120ps + 20ps
= 260ps
최대 클럭 속도 = (1 / 260ps) = 3.85Ghz.
이것은 2018년경의 가정용 컴퓨터의 일반적인 속도였다. 1997년 기술의 경우 방정식은 처리 시간이 95 %를 지배하는 반면, 2018년경 기술의 경우 처리 시간의 영향은 전송 시간의 영향과 유사하다.
위의 예는 트랜지스터 크기의 추가 감소 및 해당 처리 시간의 실질적인 한계를 보여줄 수 있다. 만약 트랜지스터가 위의 2018년경 수치에 비해 처리 시간을 85% 단축하기 위해 속도가 향상되었다면 tmaxop은 약 20ps로 떨어질 수 있다. 이것은 최악의 전송 시간에 상응하는 증가와 함께 전선 크기의 상응하는 감소를 야기할 것이다. 와이어 크기 (대략 140ps의 해당 Tmaxglobalcomm에 대해)로 인해 1mm 길이의 와이어에 대해 전송 시간이 보수적으로 20% 증가하고 설명을 위해 다른 요소를 동일하게 유지한다고 가정하면, 이 가상 트랜지스터의 매개 변수는 다음과 같다.
최소 클럭 사이클 시간 = 20ps + 140ps + 20ps = 180ps
최대 클럭 속도 = 5.55Ghz
현재 수준에 비해 처리 시간 (120ps에서 20ps으로)이 85% 감소하면 막대한 시간과 비용을 투자할 수 있다. 그러나 클럭 속도는 약 44%(3.85Ghz에서 5.55Ghz으로)까지만 향상되며 이는 기본 투자에 비해 낮은 개선이다. 트랜지스터 크기와 클럭 사이클 시간 사이에 비교 가능한 개선이 없는 이유는 처리 시간의 영향이 무시할 수 있는 수준이 되고 있는 반면 전송 시간의 영향 (한때 무시할 수 있는 요소임)이 이제 지배적이 되었기 때문이다.
전송 시간을 단축하여 클럭 속도를 향상시키기 위한 노력이 이루어지고 있다. 알루미늄 기반 화합물에서 구리 기반 화합물로 변경하는 것과 같이 전선의 구성을 저항이 낮은 것으로 변경하려는 시도가 있었다. 또 다른 유형의 노력은 신호가 통과해야 하는 거리를 최소화하기 위해 칩 ALU의 레이아웃을 최적화하는 것이었다. 또 다른 유형의 노력은 더 온도가 낮은 전선이 신호 전송에 대해 더 낮은 저항을 가지기 때문에 칩을 냉각하는 것이었다.
2. 명령 실행
임의의 특정 프로세서는 ISA(Instruction Set Architecture)로 설계되었다. 일반적인 유형의 ISA는 단일 지시어가 여러 하위 수준의 기계 작업 (예 : 메모리에서 로드, 산술 연산 및 메모리 저장소)을 실행할 수 있거나 단일 지시어 내 주소 지정 모드에서 다단계 작업을 수행할 수 있는 CSC (Complex Instruction Set Computing)이다. 또 다른 일반적인 ISA는 감소된 명령 세트 컴퓨터 (RISC)로, CISC에서와 같이 대규모의 복잡하고 특수한 명령 세트가 아닌 간단한 일반 명령 세트를 사용한다.
CISC 및 RISC는 프로그램이 순서 대로만 실행할 명령을 지정할 수 있도록 한다. 그렇지 않은 또 다른 ISA는 VLIW (Very Long Instruction Word)로, 여러 지시어를 하나의 지시어로 그룹화 할 수 있고 지시어지시어의 여러 지시어를 동시에 (즉, 동일한 클럭 주기 동안) 실행할 수 있다. VLIW의 한계는 모든 지시어의 지시어가 제1 지시어 작업의 결과가 제2 지시어 작업의 입력으로 사용된 경우 동시에 실행될 수 없고 제2 지시어가 실행될 수 없는 경우와 같이 제1 지시가 완료될 때까지 직접적인 상호 종속성이 없을 수 있다는 것이다.
본 발명의 일 실시예에 따르면, 장치에서 실행하기 위한 일련의 명령 동작을 준비하는 방법이 제공된다. 장치는 적어도 제1 ALU, 제2 ALU 및 제3 ALU를 포함하는 데이터 경로 내에 복수의 산술 논리 유닛 (ALU)들을 가지며 제2 ALU는 제1 ALU의 국부적으로 사전 정의된 범위 내에 있고, 제3 ALU는 제1 ALU의 로컬로 사전 정의된 범위 밖에 있으며 로컬로 사전 정의된 범위는 데이터 경로보다 작다. 이 방법은 3가지 단계로 구성된다: 첫 번째로 ; 제1 ALU에 제1 명령 연산을 할당하는 단계; 제1 명령 연산의 출력에 직접적으로 의존하는 입력을 갖는 제2 명령 연산에 대해 제2 명령 연산에 대한 모든 입력이 제1 ALU로부터 로컬로 미리 정의 된 범위 내에서 이용 가능한지 여부를 결정하는 단계이다. 두 번째로 ; 제1 결정의 적어도 긍정적 인 결과에 응답하여, 제2 명령 동작을 제2 ALU에 할당하는 단계; 제1 결정의 부정적인 결과에 대한 응답으로 제1 명령 작업의 실행과 제2 명령 작업 사이에 적어도 하나의 클럭 사이클이 일시 중지되도록 보장하는 단계이다. 세 번째로 ; 제3 명령 연산을 복수의 ALU들중 ALU에 할당하는 단계로 구성된다.
상기 방법 실시예의 동작은 또한 일 실시예에서 클럭 속도 및 클럭 사이클을 갖는 컴퓨터 하드웨어 장치로서 제공될 수 있으며, 여기서 장치는 비 일시적 메모리에 저장된 일련의 명령을 실행하도록 인용된 작업을 수행하도록 프로그래밍 되어있다. 상기 방법 실시예의 동작은 또한 장치에 명령 동작을 할당하는 동작을 수행하기 위한 명령을 저장하는 비 일시적 컴퓨터 판독 가능 매체로서 실시예에서 제공될 수 있다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 장치의 클럭 속도는 부분적으로 로컬로 미리 정의된 범위 내에서 복수 ALU들의 소비자 ALU와 생산자 ALU 사이의 최악의 전송 시간(worst case time of transmission) 에 정의될 수 있다. 로컬로 사전 정의된 범위는 인접한 두 ALU 사이의 거리 일 수 있다. 로컬로 사전 정의된 범위는 서로 마주 보는 두 개의 인접한 ALU의 입력 및 출력에 의해 추가로 정의된다. 제1 ALU 및 제2 ALU는 동일 할 수 있으며 로컬로 사전 정의된 범위는 자체 ALU가 될 수 있다. 장치의 클럭 주기는 제3 ALU가 (a) 제1 ALU에서 생성된 입력을 수신 및 선택하고 (b) 제2 명령 작업을 실행하도록 보장하는 데 필요한 시간보다 짧을 수 있다. 보장은 제1 명령 동작 및 제2 명령 동작이 실행 시간에 장치의 적어도 하나의 클럭 사이클에 의해 이미 분리되었는지 여부를 결정하고, 제2 결정의 부정적인 결과에 응답하여 제1 명령과 제2 명령 실행 사이의 장치주기 사이에 적어도 하나의 클럭의 지연을 삽입하는 것을 포함할 수 있다. 제1 할당 및 제2 할당은 장치의 동일한 클럭 사이클 동안 실행될 제1 명령 동작 및 제2 명령 동작을 설정하는 단계를 더 포함할 수 있다.
본 발명의 일 실시예에 따르면, 클럭 사이클에서 동작하는 데이터 경로에서 복수의 ALU (Arithmetic Logic Unit)들에 의한 명령 동작의 동시 실행을 위한 지시어를 생성하고 실행하는 방법이 제공된다. 이 방법은 명령 연산을 갖는 노드의 종속성 그래프를 생성하는 단계를 포함하며, 그래프는 적어도 제1 명령 연산을 갖는 제1 노드 및 제2 명령 연산을 갖는 제2 노드를 포함하며, 제2 명령 연산은 제1 명령의 결과에 직접적으로 의존한다; 먼저, 상기 제1 지시어 연산을 제1 지시어에 할당하는 단계; 제2 명령 동작을 제1 적어도 하나의 미리 결정된 기준의 만족 시 제1 지시어에 할당하는 단계; 및 적어도 하나의 미리 결정된 기준을 만족할 때, 제1 명령 워드(word)보다 늦은 클럭 사이클 동안 실행되도록 스케줄링 된 제2 명령 워드; 및 복수의 ALU들에 의해 병렬로 그리고 공통 클럭 사이클 동안 제1 명령 워드 내의 임의의 명령 동작을 실행하는 단계를 포함한다.
상기 방법 실시예의 동작은 또한 명령 동작의 동시 실행을 위한 지시어를 생성하고 실행하기위한 시스템의 실시예로서 제공될 수 있으며, 시스템은 클럭 사이클에서 작동하고 지시어를 저장하는 비 일시적 컴퓨터 판독 가능 메모리 (여기서 시스템은 위의 작업을 수행하기위한 지시어를 구현하도록 프로그래밍 됨) 데이터 경로에 복수의 ALU (Arithmetic Logic Unit)들을 포함한다. 상기 방법 실시예의 동작은 또한 시스템이 명령의 동시 실행을 위한 지시어를 생성 및 실행하도록 시스템이 상기 동작을 수행하도록 프로그램 된 클럭 사이클에서 작동하는 데이터 경로에서 복수의 ALU (Arithmetic Logic Unit)들에 의한 연산 명령을 저장하는 비 일시적 컴퓨터 판독 가능 매체의 실시예로서 제공될 수 있다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 제2 적어도 하나의 미리 결정된 기준은 제1 적어도 하나의 미리 결정된 기준을 충족하지 못할 수 있다. 제1 적어도 하나의 미리 결정된 기준은 제1 지시어가 제2 지시어 연산을 보유하기에 충분한 용량을 갖는 것을 포함 할 수 있다. 제1 적어도 하나의 미리 결정된 기준은 동일한 클럭 사이클 내에서 완료되도록 정상 동작 하에서 보장되는 제1 명령 동작 및 제2 명령 동작을 모두 포함 할 수 있다. 제1 적어도 하나의 미리 결정된 기준은 제1 명령 동작 및 제2 명령 동작을 포함 할 수 있으며, 미리 정의 된 규칙에 의해 제1 지시어에 있는 것을 금지하지 않는다. 제1 할당은 제1 지시어의 제1 지시어 연산을 복수의 ALU 들 중 제1 ALU에 할당하는 것을 포함할 수 있다. 제1 적어도 하나의 미리 결정된 기준은 복수의 ALU 들 중 제2 ALU가 제1 ALU로부터 국부적으로 미리 정의된 범위 내에서 이용 가능하며, 국부적으로 미리 정의된 범위는 데이터 경로보다 작은 것을 포함 할 수 있다. 동작은 적어도 하나의 클럭 사이클이 제1 명령 워드 및 제2 명령 워드의 실행을 분리하는 것을 보장하는 것을 포함 할 수 있다.
본 발명의 일 실시예에 따르면, 프로세서는 제1 ALU , 제2 ALU 및 제3 ALU를 포함하는 제1 그룹의 ALU를 갖는다. 제1 ALU는 제1 측면에 입력과 출력이 있다. 제2 ALU는 제1 ALU의 제1 측면을 향하는 제1 측면, 제2 ALU의 제1 측면에 있는 입력 및 출력을 가지며 제1 ALU의 제1 측면의 입력 및 출력에 대해 회전 된 방향에 있다. 제3 ALU에는 제2 ALU의 제2면을 향하는 제1면과 제3 ALU의 제1면에 입력 및 출력이 있다. 제1 ALU의 제1 측면의 입력은 제2 ALU의 제1 측면의 출력에 논리적으로 직접 연결된다. 제2 ALU의 제1 측면의 입력은 제1 ALU의 제1 측면의 출력에 논리적으로 직접 연결된다. 제2 ALU의 제2 측면에 있는 출력은 제3 ALU의 제1 측면에 있는 입력에 논리적으로 직접 연결된다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 경로는 제1 ALU와 제2 ALU 사이에 확장될 수 있으며, 경로는 제1 ALU 그룹에 데이터가 제공되고 그로부터 수신되는 통로이다. 경로는 제1 ALU 및 제2 ALU 사이의 데이터 흐름을 제어하는 제1 ALU및 제2 ALU 사이의 피연산자 선택 네트워크를 포함 할 수 있다. 제3 ALU의 제1 측면의 출력은 피연산자 선택 네트워크에 논리적으로 직접 연결될 수 있다. 피연산자 선택 네트워크는 제1 ALU의 제1 측면에 있는 입력 및 출력에 논리적으로 직접 연결될 수 있다. 피연산자 선택 네트워크는 제2 ALU의 제1 측면에 있는 입력 및 출력에 논리적으로 직접 연결될 수 있다. 프로세서는 다음과 같은 최악의 경우 조합을 기반으로 한 클럭 속도를 가질 수 있다. (a) 제1 ALU, 제2 ALU 및 / 또는 제3 ALU 중 하나에 의해 한 클럭 사이클에서 수행 될 수 있는 가장 시간이 많이 걸리는 프로세스. 그리고 (b) 제1 ALU, 제2 ALU 및 / 또는 제3 ALU가 (a) 경로 로부터 필요한 입력을 수신하고 제1 ALU, 제2 ALU 및 제3 ALU의 나머지 ALU를 수신하는 데 걸리는 최대 시간. 제1 ALU 및 제2 ALU는 제1 세트의 연산 유형으로 제한 될 수 있고, 제3 ALU는 제2 세트 유형의 연산으로 제한 될 수 있으며, 여기서 제2 세트 유형의 연산은 제1 세트의 작업 유형 연산보다 더 복잡한 연산을 포함한다. 제1 ALU의 제1 측면, 제2 ALU의 제1 측면 및 제2 측면, 제3 ALU의 제1 측면은 평행할 수 있다. 제2 ALU의 제2 측면에 입력이 없을 수 있다. 프로세서는 복수의 ALU 그룹들을 포함할 수 있으며, 각 ALU 그룹은 ALU의 제1 그룹과 동일한 레이아웃을 갖는다.
본 발명의 다른 실시예에 따르면, 프로세서는 복수의 ALU 그룹들을 가지며, 각 그룹은 제1 ALU, 제2 ALU 및 제3 ALU를 포함한다. 각 ALU 그룹에는 제1 ALU, 제2 ALU 및 제3 ALU가 있다. 공통 경로는 제1 ALU 및 제2 ALU 사이의 각 그룹으로 확장되며, 공통 경로는 데이터가 각 ALU 그룹에 제공되고 수신되고 ALU 그룹 간에 교환되는 경로이다 제1 ALU는 제1 측면에 입력과 출력이 있다. 제2 ALU는 제1 ALU의 제1 측면을 향하는 제1 측면, 제2 ALU의 제1 측면에 있는 입력 및 출력을 가지며 제1 ALU의 제1 측면의 입력 및 출력에 대해 회전 된 방향에 있다. 제3 ALU에는 제2 ALU의 제2면을 향하는 제1면과 제3 ALU의 제1면에 입력 및 출력이 있다. 제1 ALU의 제1 측면의 입력은 제2 ALU의 제1 측면의 출력에 논리적으로 직접 연결된다. 제2 ALU의 제1 측면의 입력은 제1 ALU의 제1 측면의 출력에 논리적으로 직접 연결된다. 제2 ALU의 제2 측면에 있는 출력은 제3 ALU의 제1 측면에 있는 입력에 논리적으로 직접 연결된다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 프로세서는 다음의 최악의 경우 조합을 기반으로 한 클럭 속도를 가질 수 있다. (a) 제1 ALU, 제2 ALU 및 / 또는 제3 ALU 중 어느 하나에 의해 한 클럭 사이클에서 수행 될 수 있는 가장 시간이 많이 걸리는 프로세스, 그리고 (b) 제1 ALU, 제2 ALU 및 / 또는 제3 ALU가 (a) 경로로부터 필요한 입력을 수신하고 제1 ALU, 제2 ALU 및 제3 ALU의 나머지 ALU를 수신하는 데 가장 시간이 많이 걸리는 프로세스. 프로세서의 클럭 속도가 너무 빨라서 다음 조합을 수용할 수 없다. (a) ALU 그룹 중 특정 그룹 내에서 제1 ALU, 제2 ALU 및 / 또는 제3 ALU에 의해 하나의 클럭 주기에서 수행 될 수 있는 가장 시간이 많이 걸리는 프로세스, 그리고 (b) ALU 그룹 중 하나인 특정 그룹 외부에서 필요한 입력을 수신하는 프로세스. 경로는 제1 ALU 및 제2 ALU 사이의 데이터 흐름을 제어하는 제1 및 제2 ALU 사이의 피연산자 선택 네트워크를 포함 할 수 있다. 제3 ALU의 제1 측면에 있는 출력은 피연산자 선택 네트워크에 논리적으로 직접 연결될 수 있다. 피연산자 선택 네트워크는 제1 ALU의 제1 측면에 있는 입력 및 출력에 논리적으로 직접 연결될 수 있다. 피연산자 선택 네트워크는 제2 ALU의 제1 측면에 있는 입력 및 출력에 논리적으로 직접 연결될 수 있다. 각각의 ALU 그룹 내에서, 제1 ALU 및 제2 ALU는 제1 세트의 연산 유형으로 제한 될 수 있고, 제3 ALU는 제2 세트 유형의 연산으로 제한 될 수 있으며, 여기서 제2 세트 유형의 연산은 제1 작업 유형보다 더 많은 복잡한 작업을 포함한다.
ALU의 각 그룹 내에서 제1 ALU, 제2 ALU 및 제3 ALU는 선형 경로로 정렬될 수 있다. 각 ALU 그룹 내에서 제1 ALU의 제1 측면, 제2 ALU의 제1 및 제2 측면, 제3 ALU의 제1 측면이 평행할 수 있다. 각 ALU 그룹 내에서 제2 ALU의 제2 측면에 입력이 없을 수 있다.
본 발명의 일 실시예에 따르면, 데이터 경로에서 복수의 ALU들에 의한 명령 동작의 동시 실행을 위한 지시어를 채우기 위한 방법이 제공된다. 방법은 다음을 포함한다; 적어도 하나의 명령 연산을 포함하는 각 명령 노드 인 명령 노드의 종속성 그래프 생성; 첫째로 종속성 그래프에서 사용 가능한 제1 명령 노드를 선택 ; 먼저 선택된 제1 사용 가능한 지시어 노드를 지시어 에 할당 ; 제2로 선택된 제1 사용 가능한 명령 노드의 결과에 의존하고 미리 정해진 규칙을 위반하지 않는 사용 가능한 종속 명령 노드의 선택 ; 제2로 선택한 사용 가능한 종속 명령 노드를 지시어에 할당 및 할당에 대한 추가 고려 사항으로부터 제1 할당 및 제2 할당 동안 할당 된 임의의 지시어 노드를 제거하기 위해 종속성 그래프를 업데이트하는 단계.
상기 방법 실시예의 동작은 또한 시스템이 위의 작업을 수행하기위한 지침을 구현하도록 프로그래밍 된 경우, 클럭 사이클에서 동작하는 데이터 경로에 복수의 ALU 들(Arithmetic Logic Unit) 및 지시어를 저장하는 비 일시적 컴퓨터 판독 가능 메모리를 포함하는 시스템의 실시예로서 제공될 수 있다. 상기 시스템에 의해 실행될 때 공개된 작업을 수행하는 시스템 실시예의 동작은 또한 데이터 경로에서 복수의 ALU들에 의한 명령 동작의 동시 실행을 위한 지시어를 채우는 명령을 저장하는 비 일시적 컴퓨터 판독 가능 매체의 실시예로서 제공될 수 있다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 작업은 제2 할당 후 포함될 수 있다: 지시어가 완전하거나 불완전한지 결정하는 단계; 결정에 따라 불완전한 지시어에 응답하여 제1 선택으로 복귀하는 단계; 및 결정에 따라 완료되는 지시어에 응답하여 지시어를 닫는 단계. 작업에는 (a) 닫힘 및 (b) 종속성 그래프에 아직 할당되지 않은 명령 노드가 있음에 대한 응답으로 새 지시어를 만드는 것이 포함될 수 있다. 업데이트는 (a) 제1 할당 및 제2 할당 중에 할당된 명령 노드를 종속성 그래프에서 제거하거나, (b) 제1 할당 및 제2 할당 중에 할당된 모든 명령 노드를 지시어에 대한 추가 할당에 사용할 수 없는 것으로 표시하는 것을 포함할 수 있다. 제1 할당은 선택된 제1 사용 가능한 지시어 노드를 지시어의 제1 ALU 슬롯에 할당할 수 있으며, 제1 ALU 슬롯은 복수의 ALU 들중 제1 ALU에 해당한다. 제2 할당은 임의의 사용 가능한 종속 노드 중 하나를 지시어의 제2 ALU 슬롯에 할당 할 수 있으며, 제2 ALU 슬롯은 제1 ALU 및 제2 ALU가 각각의 국부적으로 사전 정의 된 범위 내에 있는 복수의 ALU 들중 다른 제2 ALU에 대응한다. 작업은 제1 선택 동안 사용 가능한 노드의 부재에 대한 응답으로, 제1 할당 우회, 제2 선택 및 제2 할당을 포함할 수 있다. 동작은 초기에 종속성 그래프의 명령 노드 중 하나를 명령 노드가 ALU의 사전 정의된 물리적 범위 밖에 있는 입력을 필요로 함을 나타내는 글로벌로 지정하는 것을 포함할 수 있다. 데이터 경로의 전체 범위 및 임의의 미리 결정된 규칙은 사용 가능한 종속 명령 노드가 전역으로 지정될 때 명령 노드가 선택된 제1 사용 가능한 명령 노드의 결과에 의존하는 사용 가능한 종속 명령 노드를 포함하지 않을 수 있다는 것을 포함한다. 특정 명령 노드가 글로벌인지 여부를 결정할 수 없는 것에 응답하여 초기 지정은 특정 명령 노드를 비전역으로 지정할 수 있다.
본 발명의 일 실시예에 따르면, 데이터 경로에서 복수의 ALU들에 의한 명령 연산의 실행을 위한 복수의 지시어들을 채우기 위한 방법이 제공된다. 방법은 다음을 포함한다: 적어도 하나의 명령 연산을 포함하는 각 명령 노드 인 명령 노드의 종속성 그래프 생성; 제1 지시어에 제1 지시어 노드를 먼저 할당; 제1 명령 노드의 결과에 직접적으로 의존하는 종속 명령 노드 식별; 먼저 종속 지시어 노드가 데이터 경로의 전체 범위보다 작게 서로 미리 정의 된 물리적 범위를 벗어난 둘 이상의 소스에서 입력이 필요한지 여부를 결정; 제2로 제1 결정의 부정적 결과를 포함하는 적어도 하나의 미리 결정된 기준의 만족에 응답하여, 제1 지시어에 종속 명령 노드를 할당; 세번째로 제1 결정의 부정적 결과 및 적어도 하나의 미리 결정된 기준 중 어느 하나의 위반에 응답하여, 종속 명령 노드를 제2 지시어에 할당하는 단계.
상기 방법 실시예의 동작은 또한 명령 동작을 위한 다중 지시어를 채우기 위한 시스템의 실시예로서 제공될 수 있다. 여기서 주기, 명령을 저장하는 비 일시적 컴퓨터 판독 가능 메모리 시스템은 작업을 수행하기위한 명령을 구현하도록 프로그래밍 되며 클럭에서 동작하는 데이터 경로에 복수의 ALU (Arithmetic Logic Unit)들을 포함한다. 상기 방법 실시예의 동작은 또한 데이터 경로에 있는 복수의 ALU들에 의해 명령 동작의 다중 지시어를 채우기 위한 명령을 저장하는 비 일시적 컴퓨터 판독 가능 매체의 실시예로서 제공될 수 있다.
상기 실시예는 다양한 선택적 특징을 가질 수 있다. 동작은 제1 결정의 적어도 긍정적인 결과에 응답하여 종속 명령 노드를 제3 명령 워드에 할당하는 제4 할당을 더 포함 할 수 있으며, 여기서 제1 명령 및 제3 명령 워드의 실행은 적어도 하나의 클럭 사이클에 의해 분리된다. 동작은 제1 할당 및 제2 할당 후에, 종속성 그래프의 지시어 노드를 제1 지시어 및 제2 지시어에 할당하는 것을 최적화하고 그 후, 제1 지시어 및 제2 지시어를 실행 할 것을 더 포함 할 수 있다. 동작은 다음을 더 포함 할 수 있다 ; 제1 클럭 사이클 동안 제1 지시어를 먼저 실행하는 단계; 제1 클럭 사이클 직후 제2 클럭 사이클에서 제2 명령 워드를 실행하는 것이 적어도 하나의 미리 결정된 규칙을 적어도 한 번 위반하게 되는지 결정하는 단계; 제2 결정의 부정적 결과에 응답하여, 제2 클럭 사이클 동안 제2 지시어 워드를 실행하는 제2 단계; 적어도 하나의 위반이 해결 될 때까지 적어도 하나의 클럭 사이클만큼 제2 결정의 긍정적 인 결과에 응답하여 제2 지시어의 실행을 지연하는 단계 ; 그리고 세 번째로, 적어도 하나의 위반된 해결에 응답하여, 제2 지시어를 실행하는 단계. 지연에는 명령 연산이 없거나 ALU가 해당 클럭 사이클 동안 아무 작업도 수행하지 않는 명령 연산이 포함된 지시어를 생성하는 것이 포함될 수 있다. 적어도 하나의 미리 결정된 규칙은 ALU가 제2 지시어 워드의 모든 지시어 동작에 필요한 모든 입력을 수신하고, 제2 클럭 사이클 내에서 제2 지시어 워드의 모든 지시어 동작을 실행할 것이라는 보장을 포함할 수 있다.
본 발명에 따른 다양한 실시예들이 아래 도면들과 관련하여 설명될 것이다.
도 1은 1970 년대 초부터 2015 년까지의 프로세서 파라미터의 그래프를 도시한다.
도 2A는 종래 기술의 프로세서 칩의 블록도이다.
도 2B 및 도 2C는 종래 기술 칩의 데이터 경로 내의 종래 기술 ALU 레이아웃의 블록도들이다.
도 3A 및 도 3B는 생산자-소비자 관계에서 ALU의 비 제한적인 예들을 보여준다.
도 4는 본 발명의 일 실시예에 따른 프로세서 칩을 나타낸다.
도 5A는 한 쌍의 ALU의 종래 기술 배열이다.
도 5B는 한 쌍의 ALU 배열의 실시예이다
도 6은 데이터 경로에서 ALU 배열의 실시예이다.
도 7A-7E는 종속성 그래프이다.
도 8은 명령 동작을 ALU에 할당하기위한 본 발명의 실시예의 흐름도이다.
도 9는 도 8의 노드 선택 블록의 구현 흐름도들이다.
도 10A 및 도 10B는 지시어의 실시예의 블록도들이다.
도 11A-11D는 본 발명의 실시예에 따른 채워진 지시어의 블록도들이다.
도 12A-12D는 본 발명의 일 실시예에 따른 채워진 지시어의 블록도들이다.
도 13A-13B는 본 발명의 일 실시예에 따른 채워진 지시어의 블록도들이다.
도 14A-13C는 본 발명의 일 실시예에 따른 채워진 지시어의 블록도들이다.
도 15A-15J는 본 발명의 실시예에 따른 채워진 지시어의 블록도들이다.
도 16은 지시어를 실행하기위한 본 발명의 실시예의 흐름도이다.
도 17-21은 상이한 데이터 경로의 실시예들이다
도 22는 도 5에 도시 된 것과 같이 미러링 된 ALU 쌍의 레이아웃을 도시한다.
도 23은 도 21에 도시 된 것과 같은 복합 ALU와 결합된 미러링 된 ALU 쌍의 레이아웃을 보여준다.
도 24는 도 24의 ALU 그룹들을 나타낸다..
다음의 설명에서, 다양한 실시예는 첨부 도면의 도면에서 제한이 아닌 예로서 설명될 것이다. 본 개시의 다양한 실시예에 대한 참조는 반드시 동일한 실시예에 대한 것은 아니며, 이러한 참조는 적어도 하나의 실시예를 의미한다. 특정 구현 및 기타 세부 사항에 대해 설명하지만 이는 설명을 위한 목적으로 만 수행된다. 관련 기술 분야의 통상의 기술자는 청구 범위를 벗어나지 않고 다른 구성 요소 및 구성이 사용될 수 있음을 인식할 것 수 있을 것이다.
이제 본 명세서 전반에 걸쳐 적용되는 몇 가지 정의가 제시된다. 용어 "실질적으로"는 용어가 수정하는 특정 치수, 모양 또는 기타 특징에 본질적으로 일치하는 것으로 정의되어 구성 요소가 정확할 필요가 없다. 예를 들어, "실질적으로 원통형" 이란 물체가 원통과 비슷하지만 실제 원통에서 하나 이상의 편차를 가질 수 있음을 의미한다. "포함하는" 이라는 용어는 "포함하지만 반드시 이에 제한되지는 않는"을 의미한다. 이는 구체적으로 그렇게 설명된 조합, 그룹, 시리즈 등에 대한 개방형 포함 또는 집단을 나타낸다. 용어 "a"는 그것이 단수로 제한된다는 명시적 표시가 없는 한 "하나 이상"을 의미한다. '제1', '제2'등은 유사한 용어를 서로 구별하기위한 표시이며 순서나 숫자 제한을 의미하지 않는다.
"코어"는 기술 용어로 프로세서 칩에서 발견되는 독립적인 처리 장치를 의미한다. 프로세서 칩에는 여러 코어가 있을 수 있다.
"산술 논리 장치"(ALU)는 기술 용어로 정수 이진수에 대해 산술 및 비트 연산을 수행하는 조합 디지털 전자 회로를 나타낸다.
2 개의 ALU는 하나의 ALU가 결과를 출력으로 생성하면 해당 출력 결과를 제2 ALU가 추가 처리 단계에서 사용 / 소비 할 입력으로 수신하는 관계를 가질 수 있다. 해당 관계에서 두 구성 요소를 구별하기 위해, 출력 결과를 생성하는 구성 요소를 “생산자”라 하고, 이전에 생성된 출력 결과를 소비하는 구성 요소를 “소비자”라 한다. 단일 ALU가 소비하는 결과를 수신하고 (따라서 소비자 ALU가 됨) 해당 소비를 통해 결과를 생성 할 수 있으므로 (따라서 생산자 ALU가 됨) ALU는 여러 생산자 / 소비자 관계에 있을 수 있다. ALU 이외의 구성 요소는 소비자 또는 생산자가 될 수도 있다. 예를 들어 ALU에 값을 제공하는 레지스터는 생산자이다.
도 3A의 비 제한적인 예로서, ALU(208)은 ALU(210)에 출력을 제공하고, ALU(210)은 ALU(212)에 출력을 제공한다. 따라서 ALU(208) 및 ALU(210)은 소비자-제공자 관계 (302)에 있다. 여기서 ALU(208)은 공급자이고 ALU(210)은 소비자이다. ALU(210) 및 ALU(212) 또한 ALU(210)가 공급자이고 ALU(212)가 소비자인 소비자-공급자 관계 (304)에 있다; 따라서 ALU(210)은 한 관계에서 소비자 ALU이고 다른 관계에서 공급자 ALU이다.
이제 도 3B를 참조하면, 공급자-소비자 관계의 특정 예로서 ALU가 이전 출력을 입력으로 하여 피드백을 수신하는 경우에 해당한다. 이 예에서 ALU(214)는 입력으로 소비되는 출력을 제공한다는 점에서 공급자이자 소비자이다
"데이터 경로" 는 특히 프로그램 명령 실행 전용인 코어의 ALU 그룹을 나타낸다.
"로컬 통신", "로컬", "로컬로", "로컬로 미리 정의된 범위"등은 데이터 경로의 전체 범위보다 작은 범위로 미리 정의된 제한된 물리적 범위의 ALU가 포함된 구조, 통신, 프로세스 등을 의미한다. 로컬 통신의 비 제한적인 예는 도 3B에 표시된 대로 ALU에서 자체로 정의된 통신 범위이다. 또 다른 비 제한적인 예는 바로 인접한 ALU의 정의된 범위, 즉 하나의 ALU 거리이다. (예 : 그림 2B의 레이아웃의 경우, ALU(204-206), ALU(206-208), ALU(208-210) 등) 또 다른 비 제한적인 예는 2 개의 ALU 거리 내에 있는 ALU이다. 다른 비 제한적인 예는 오른쪽이 아닌 왼쪽에 인접한 ALU와 같은 특정 방향의 ALU이다. 또 다른 예는 특정 유형의 ALU 관계 (예 : 아래에 설명 된 미러링 된 ALU)이다. 본 발명은 사전 정의된 것 이외의 로컬에서의 특정 배열로 제한되지 않는다.
"글로벌 통신", "글로벌", "글로벌", "비 로컬 통신", "비 로컬"등은 정의 된 범위 밖에서 신호를 수신해야 하는 구조, 통신, 프로세스 등을 의미한다(예 : 거리, 방향 및 / 또는 관계). 비 제한적인 예로서, 로컬 통신 범위가 ALU에 의해 자체적으로 정의되는 경우, ALU에서 다른 ALU 로의 통신은 "글로벌 통신" 이다 (예 : 도 2B의 레이아웃의 경우 ALU(208) ALU(210)이 ALU(208)이 아니기 때문에 ALU(210)은 글로벌이다.). 다른 비 제한적인 예에서 로컬 통신 범위가 하나의 인접한 ALU에 의해 정의되는 경우 ALU에서 인접하지 않은 다른 ALU 로의 통신은 "글로벌 통신"이다. (예 : 도 2B의 레이아웃의 경우, ALU(204)와 ALU(206)은 두 ALU가 인접 해 있기 때문에 로컬이고 ALU(204)에서 ALU(208/210/212/214/216)은 ALU(204)가 다른 것들과 거리가 하나 이상 떨어져 있기 때문에 글로벌이다.)
일부 신호는 특성상 글로벌이거나 로컬 일 수 있다. 예를 들어, 레지스터가 제공하는 값은 데이터 경로가 있는 ALU의 입력에서 사용할 수 있으므로 항상 로컬 일 수 있다. 로컬의 비 제한적인 예로 상수 (즉시 피연산자라고도 함), 여러 사이클에 걸쳐 메모리에서 읽은 데이터 또는 특수 레지스터, 특수 저장 장치 또는 특수 실행 단위에서 읽은 데이터가 포함될 수 있다. 글로벌의 비 제한적인 예로 ALU 바이 패스 네트워크, 승수와 같은 복잡하거나 특수한 실행 단위의 결과 또는 로드 실행 단위의 데이터가 포함될 수 있다. 본 발명은 동일한 신호에 대해 미리 결정된 규칙을 충족할 수 있는지 여부 외에, 어떤 신호가 로컬 또는 글로벌인지에 제한되지 않는다.
로컬 컨텍스트에서 "정의된", "정의" 등은 특정 상황이 로컬인지 글로벌인지를 결정하는 다양하게 적용 가능한 규칙이다. "정의된" 등은 여기에서 논의 된 특정 정의가 명시되지 않은 다른 규칙을 가질 수 있다는 점에서 공개 세트 (예를 들어, "포함하는" 와 일치)로 사용된다는 것을 이해해야 한다. 비 제한적인 예로서, "바로 인접한 ALU"에 대한 로컬의 "정의"는 언급 된 인접 방향을 필요로 하지만 피연산자 선택기 스위치 및 / 또는 로컬 범위 내에서 다양한 입력을 제공하는 ALU에 근접한 레지스터의 존재와 같은 다른 (비 충돌 규칙)을 제외하지 않는다.
"컴파일러"는 하나의 프로그래밍 언어 (일반적으로 사람이 읽을 수 있는 소스 언어)로 작성된 컴퓨터 코드를 다른 컴퓨터 언어 (일반적으로 사람이 읽을 수 없는 대상 언어)로 변환하는 하드웨어와 결합하여 작동하는 컴퓨터 소프트웨어이다. 컴파일러는 일반적으로 실행을 위해 소스 프로그램의 프로그램 단계를 수행하고 단계들을 ALU가 실행할 일련의 기계 수준 최종 명령으로 변환한다. 컴파일 과정에서 그룹이 지시어로 구체화됨에 따라 다양한 프로그램 단계를 재구성하여 다른 관련 그룹으로 변환하거나, 다른 관련 그룹으로 변환할 수 있다.
"명령 작업"은 초기 프로그램 단계에서 ALU에 의해 실행될 최종 프로그램 명령으로 전환될 때 임의의 상태에 있는 프로그램으로부터의 작업 모음 (하나의 모음 포함)을 의미한다.
"지시어"는 공통 클럭 사이클 동안 동시에 병렬로 데이터 경로에 있는 ALU 중 적어도 일부에 의해 실행되는 명령 작업 번들을 나타낸다. 아래에서 설명하는 바와 같이, 지시어의 각 지시어 연산은 특정 지시어 연산을 수행할 특정 ALU와 연관된다. "버블 (bubble)" 이라고하는 지시어는 아직 연관된 명령이 없어 채워지지 않을 수 있다. 지시어는 단수로 설명되지만, 지시어는 복수 일 수 있음을 이해해야 한다 (예를 들어, 두 개의 더 작은 지시어를 집합 적으로 단일 지시어로 간주할 수 있음). 칩에 다른 코어가 있는 경우 동일한 클럭 주기 동안 병렬로 실행되는 각 코어에 대해 다른 지시어가 있을 수 있다.
"매핑 된 지시어"는 지시어의 각 슬롯이 특정 ALU에 대응하는 다중 슬롯을 갖는 지시어의 유형을 의미한다. 여러 매핑 된 지시어의 경우, 슬롯은 집합적으로 특정 ALU에 해당하는 열을 형성한다. 따라서 여러 지시어는 ALU에 대한 지시어 연산의 맵을 정의한다. 각 행은 클럭 사이클 동안 병렬로 실행되는 지시어 연산을 나타내고 열은 순차적 방식으로 실행될 해당 지시어에 할당된 ALU를 나타낸다. 반대의 경우도 사용할 수 있다 (각 열은 클럭 주기 동안 병렬로 실행되는 명령 작업을 나타내고 행은 해당 명령에 대해 할당된 ALU를 나타냄). 다음 설명에서는 쉽게 설명할 수 있도록 열이 ALU인 경우에 대해서만 자세히 설명한다. 지시어는 원하는 수의 슬롯을 가질 수 있지만, 바람직하게는 슬롯 수는 데이터 경로의 ALU 수와 동일하다.
생성될 때, 매핑 된 지시어는 채워지지 않을 수 있으며, 그 후에 슬롯 중 일부가 보관될 수 있다. 아래에서 논의되는 바와 같이, 프로세서는 각 지시어 연산 지시어의 특정 슬롯 / 열에 연관 (예를 들어, 삽입, 링크)함으로써 실행을 위해 특정 ALU에 지시어 연산을 할당 할 수 있다. 지시어의 슬롯이 채워지지 않은 경우, 해당 명령 슬롯에 해당하는 ALU는 해당 클럭 사이클에 대한 새로운 명령을 수신하지 않으며 유휴 상태로 유지되거나 이전의 다중 클럭 사이클 프로세스를 계속 진행한다. 대안으로, 프로그램에서 명령 작업을 수신하지 않는 슬롯에는 ALU가 유휴 상태로 유지되거나 이전의 다중 클럭 사이클 프로세스를 계속 진행하도록 더미 명령 작업이 할당될 수 있다.
"논리적으로 직접 연결"은 연결을 통해 전달되는 신호를 수정하는 개입 논리가 없는 경로를 통한 연결을 나타낸다. 비 제한적인 예로써 두 개의 서로 다른 지점을 연결하는 와이어가 있다. 또 다른 예로 멀티플렉서 또는 피연산자 선택 스위치와 같은 트래픽 방향 구성 요소와 결합된 와이어가 있다. 버퍼는 신호를 변경하지 않을 때 "논리적으로 직접 연결"의 일부일 수도 있다. "논리적으로 직접 연결"은 구성 요소가 신호에 대한 논리 기반 수정을 수행하지 않는 경우 다른 구성 요소 (예 : ALU)를 통과 할 수 있다.
"정상 작동"은 주변 조건에서 지지 구조 및 소프트웨어가 손상되지 않은 상태에서 작동하는 동안 발생하는 작동을 의미한다. 구조 및 / 또는 소프트웨어가 물리적 또는 전기적 손상 (예 : 바이러스) 또는 외부 강압 조건 (예 : 과도한 열, 추위, 압력, 물 노출)에서 발생하는 작업은 비정상으로 간주된다.
본 명세서의 실시예는 온도를 낮추기 위한 특별한 노력없이 실온에서 구성 요소와 관련하여 논의된다. 그러나 본 발명은 그렇게 제한되지 않으며 실시예는 다른 온도 조건에서 구현될 수 있다.
본 문서의 일부 실시예는 프로세스 및 / 또는 흐름도와 관련하여 논의된다. 본 명세서에서 논의된 임의의 프로세스 또는 흐름도에 대해 달리 언급되지 않는 한, 다양한 실시 양태의 범위 내에서 유사하거나 상이한 순서로 또는 병렬로 수행되는 추가적, 더 적거나 대안적인 단계가 있을 수 있음을 이해해야 한다.
위에서 논의된 바와 같이, 종래 기술의 패러다임은 단일 클럭 사이클에서 두 개의 이벤트를 보장하는 것이다. 첫째, ALU는 해당 입력을 제공하는 데이터 경로 내의 모든 소스에서 입력을 수신하고 선택한다. 둘째, ALU는 수신 / 선택된 입력에 대해 처리 단계를 수행한다. 여기서 처리 단계는 완료하는 데 한 주기 이하가 걸리는 것으로 알려져 있다..
본 발명의 일 실시예에 따르면, 보장이 소비자 ALU에 대한 로컬 통신 행위를 완료하는 것으로 제한되고 소비자 ALU가 할당된 처리 단계를 수행하는 새로운 패러다임이 제공된다. 따라서 품질을 유지하기위한 두 가지 요구 사항이 있다. 첫째로, 종래 기술과 마찬가지로 ALU는 수신 / 선택된 입력에 대해 완료하는 데 1주기 이하가 걸리는 것으로 알려진 처리 단계를 수행 해야 할 것이다. 둘째로, ALU는 데이터 경로 내에서 제공된 모든 로컬 생산자로부터 입력을 수신하고 선택해야 할 것이다. 종래 기술과 달리 이 패러다임은 ALU가 로컬이 아닌 입력 컨텐츠를 수신하고 선택할 것을 요구하지 않으므로 보장하지 않는다.
종래 기술은 클럭 속도가 전체 데이터 경로에 걸쳐 글로벌 통신에 필요한 시간을 허용할 것을 요구하는 반면, 본 명세서의 일부 실시예에서는 클럭 속도가 지역 통신에 필요한 시간을 허용할 것을 요구한다는 점에서 본 발명은 종래 기술과 다르다; 로컬 통신 시간이 글로벌 통신 시간보다 적기 때문에 전체 클럭 속도가 더 빠르다. 특정 명령 작업에 글로벌 통신이 필요한 경우 해당 명령 작업은 글로벌 통신이 완료될 수 있도록 하나 이상의 클럭 주기만큼 지연된다. 이 패러다임은 특정 단계에 할당된 ALU의 위치를 고려하고 로컬인 ALU에서 관련 후속 단계를 수행하여 부분적으로 달성할 수 있다.
상기 내용은 도 2A 및 도2B의 프로세서 (250)에 대한 2 개의 명령 동작의 기본 예를 통해 설명될 수 있다. 구현할 도 2A 및 도 2B는 이하 지시어 세트 1이라고 한다.
1: A= R1 + R2
2: B = A + R3.
여기서 R1, R2 및 R3은 데이터 경로 내에서 사용 가능한 특정 값을 제공하는 레지스터이다.
종래 기술의 방법론 하에서 지시어 세트 1을 실행하기 위해, 프로세서 (250)는 예를 들어 ALU (208)와 같은 제1 지시어 연산 A에 대해 원하는 임의의 ALU를 도 2B에서 선택할 것이다. 그런 다음 종래 기술의 프로세서는 제2 명령 연산 B를 수행하기 위해 제2 ALU도 선택해야한다. 제2 ALU를 선택할 때, 종래 기술 프로세서는 이전 명령 작업 A가 실행 된 ALU(208)의 위치를 고려하지 않는다. 이는 부분적으로는 종래 기술의 패러다임이 클럭 속도에 기반을 두고 있기 때문에 데이터 경로 내의 임의의 ALU를 선택하여 제2 단계를 수행할 수 있다. ALU 사이의 거리는 관련이 없으며 따라서 이전 명령의 ALU 위치는 제2 ALU를 선택할 때 고려되지 않는다. 따라서 종래 기술의 프로세서는 ALU(210) (ALU(208)에 가까운)를 ALU(214) (여러 ALU가 먼)만큼 쉽게 선택할 수 있다. 유사하게, 종래 기술의 프로세서는 명령 연산 B가 명령 연산 A의 결과에 의존한다는 점에서 명령 연산 A와 B 사이의 종속 관계를 활용하지 않는다.
본 발명의 일 실시예에 따른, 프로세서는 마찬가지로 명령 연산 A를 위해 ALU(210)과 같은 제1 ALU를 선택할 것이다. 제2 ALU를 할당하기 위해 프로세서는 명령 작업 A와 B 간의 종속 관계의 특성과 A가 수행되는 ALU의 위치를 모두 고려할 수 있다. 여기서, 프로세서는 (a) ALU(210)가 제1 명령 작업 A를 수행했으므로 이미 결과에 액세스 할 수 있으며, (b) 명령 작업 B를 실행하는 데 필요한 모든 정보가 ALU(210)에 로컬로 사용 가능함을 인식한다. 즉, 지시어 연산 B에는 제1 지시어 연산 A의 완료로 인해 ALU (210)에 표시되는 지시어 연산 A의 결과와 레지스터 217에서 로컬로 액세스 가능 한 레지스터 R3 (B = A + R3)의 값이 필요하다. 따라서 프로세서는 ALU (210)에 로컬 인 ALU 중 하나를 할당하여 제2 명령 연산 B를 수행 할 수 있다.
위에서 언급한 바와 같이, 로컬로 간주되는 것은 미리 정의되어 있다. 로컬 통신의 비 제한적인 예는 도 3B에 표시된 것과 같이 자체에 대한 ALU이다. 도 2B의 아키텍처에서 생산자 ALU에 대한 "가장 가까운"소비자 ALU는 하나의 ALU에서 다음 ALU 로의 최단 전송 경로가 단일 ALU의 입력과 출력 사이에 있다는 점에서 그 자체에 해당한다. 예를 들어, 로컬이 자체에 대한 ALU로 정의된 경우, 명령 작업 A가 ALU(210)에 할당된 경우 명령 작업 B (명령 작업 A에 종속되고 로컬에서 실행 가능)도 ALU(210)에 할당 될 수 있다. ALU(210)의 입력과 출력 사이의 거리가 상대적으로 짧기 때문에 전송 시간으로부터의 전체 데이터 경로에 걸친 글로벌 통신에 비해 해당 지연이 최소화된다.
로컬 통신의 정의에 대한 또 다른 비 제한적인 예는 임의의 인접한 ALU이다. 예를 들어, 이러한 정의에서 명령 연산 A를 실행하는 ALU(210)은 인접한 ALU(208) 및 ALU(212)의 로컬 범위 내에 있다. ALU(210)에 의한 ALU (208),(210) (즉, 자체) 또는 (212) 로의 통신은 로컬이다. 하나의 인접한 ALU (예 : 204, 214)를 넘어서는 통신은 글로벌로 간주된다. 명령 작업 A가 ALU(210)에 할당되면 명령 작업 B는 이 로컬 정의에 따라 ALU(208),(210) 또는(212)에 할당될 수 있다. ALU(201)가 단일 클럭 사이클 내에서 출력을 수신하고 명령 연산 B를 수행할 것을 보장하기엔, 이러한 ALU가 ALU(210)에서 너무 멀리 떨어져 있기 때문에 명령 연산 B는 로컬 정의에 따라 ALU(204),(206) 또는 (214)에 할당된다.
로컬의 정의는 또한 바람직하게는 도 22 및 도 23의 (2255) 및 (2355)와 같이 ALU에 입력을 제공하는 피연산자 선택 유닛 및 레지스터에 대한 범위를 포함한다. 위의 예 들에서, 프로세서 및 대응하는 방법론은 프로세서가 이전 명령 동작을 실행할 생산자 ALU의 위치를 알고 있다는 점에서 명령 동작 B에 대한 ALU의 선택에 "위치 인식"을 적용했다. A는 제2 명령 작업 B를 수행할 소비자 ALU의 위치를 결정하는 요소로 해당 위치를 사용했다. 아래에서 더 자세히 논의되는 바와 같이, 프로세서는 비 로컬 통신을 피하기 위해 ALU에 명령을 할당하려고 할 수 있다.
위의 패러다임은 "최악 전송 시간"이 글로벌 통신이 아닌 로컬 통신에 의해 설정되기 때문에 CPU가 종래 기술보다 훨씬 더 빠른 클럭 속도로 작동할 수 있게 한다. 로컬 통신을 위한 거리 (예 : 인접한 두 ALU 범위 사이)는 데이터 경로에서 ALU의 끝단 가장자리에서 글로벌 통신을 위한 거리보다 상당히 작다. 해당 거리가 매우 작기 때문에 로컬 통신의 해당 전송 시간도 글로벌 통신의 전송 시간에 비해 상당히 짧다.
비교를 통해, 종래 기술에서 위에서 논의 된 바와 같이, 클럭 사이클은 다음 방정식에 의해 정의 될 수 있다 :
최소 클럭 주기 시간 = tmaxglobalcomm + tmaxop + toh
본 발명의 일 실시예에서, 클럭 사이클은 다음과 같이 정의 될 것이다 :
최소 클럭 사이클 시간 = tmaxlocal + tmaxop + toh
tmaxlocal은 ALU가 로컬 생산자로부터 입력을 수신하고 선택하는 최대 시간이다. tmaxop(위에서 설명한대로)는 하나의 ALU가 단일 클럭 주기 내에서 단계를 완료하는 데 걸리는 최대 시간이다. toh (위에서 논의된 바와 같이)는 클럭 스큐 및 클럭 지터, 프로세스의 변화, 온도 또는 전압, 접지 바운스, 동시 스위칭, 신호 무결성, 밀러 효과, 보호 대역 노화 중 하나 이상을 포함하지만 이에 제한되지 않는 당 업계에 알려진 "오버 헤드" 파라미터에 할당된 시간이다.
위에서 논의된 바와 같이, tmaxglobalcomm, tmaxop, toh의 비 제한적인 예는 120ps, 120ps 및 20ps이며, 해당 클럭 사이클은 260ps이고 최소 클럭 속도는 3.85Ghz이다. 동일한 예 및 회로 조건의 경우 로컬 통신 (로컬이 인접 ALU에 의해 정의되는 경우)의 대략적인 값은 tmaxlocal = 20ps 일 수 있다. 따라서 종래 기술과 본 실시예 사이의 대응하는 클럭 사이클 시간 및 클럭 속도 기술은 다음과 같다.
종래 기술 실시예
최소 클럭주기 시간 tmaxglobalcomm + tmaxop + toh tmaxlocal + tmaxop + toh
260ps = 120 + 120 + 20 160ps = 20 + 120 + 20
최대 클럭 속도 1/260ps 1/160ps
3.85Ghz 6.25Ghz
따라서 로컬 통신을 적용한 본 실시예의 클럭 속도는 종래 기술보다 약 60 % 빠르다. 이는 종래 기술의 속도가 tmaxglobalcomm을 기반으로하는 반면, 위의 실시예에서 속도는 tmaxlocal(tmaxlocal << tmaxglobalcomm)을 기반으로 한다는 점에서 비롯한다. 더 빠른 트랜지스터를 사용하여 클럭 속도를 향상시키는 스케일링을 통해 더 큰 개선이 잠재적으로 가능하다. 위에서 논의된 바와 같이, 종래 기술에서, 트랜지스터 속도의 추가 개선은 처리 시간이 tmaxglobalcomm에 비해 무시할 수 있는 요소가 되었기 때문에 클럭 속도의 개선을 거의 가져오지 않지만, 훨씬 더 작은 tmaxlocal에 의존하기 때문에 본 명세서의 일부 실시예에서는 그렇지 않다. 예를 들어, 트랜지스터 속도의 잠재적 인 배가 (tmaxop = 60s)와 함께 위의 방정식을 적용하고 다른 요소를 안정적으로 유지할 시, 클럭 속도의 예를 들면 다음과 같다.
종래 기술 실시예
최소 클럭주기 시간 tmaxglobalcomm + tmaxop + toh tmaxlocal + tmaxop + toh
200ps = 120 + 60 + 20 100ps = 20 + 60 + 20
최대 클럭 속도 5Ghz 10Ghz
위의 예에서, 종래 기술의 패러다임은 트랜지스터 속도가 두 배가됨에 따라 표 1에서 표 2로 클럭 속도가 약 1.25Ghz (+ 30 %) 향상되었다. 대조적으로, 여기에 제시된 본 실시예의 패러다임은 표 1에서 표 2 로의 클럭 속도에서 3.75Ghz 향상 (+ 60 %)을 보였다. 전반적으로,이 예에서 본 실시예의 클럭 속도는 종래 기술의 패러다임의 두 배이다여기에서 논의된 패러다임을 실행할 수 있는 프로세서 칩 (400)의 표현이 도 4에 도시 되어있다. 프로세서 칩 (400)은 하나 이상의 코어 (402)를 포함하고, 각각의 코어는 다중 ALU (406)를 갖는 데이터 경로 (404)를 갖는다. 컴파일러 기능은 당 업계에 알려진 적절한 하드웨어에 상주하는 소프트웨어로서 컴파일러에 의해 제공되며, 프로세서 칩 (400)에서 실행되는 컴파일러 (408)로서 도 4에 표시된다. 스케줄러 (410)는 ALU에 컴파일 된 지시어를 구현한다. 프로세서 (400)는 로컬 통신은 보장하지만 글로벌 통신은 보장하지 않는다는 점에서 위에서 설명한 것과 일치하는 클럭 사이클 및 해당 클럭 속도를 가지고 있다. 본 발명은 이 특정 칩 레이아웃에 제한되지 않고 다른 레이아웃이 사용될 수 있으며 다양한 작업이 이러한 레이아웃 내에서 적절하게 배포된다.
위에서 논의된 바와 같이, 개선된 클럭 속도는 ALU가 로컬 생산자가 제공 한 입력으로 수신하고 선택할 것이라는 보장에 기반한다. 그러나 어떤 이유로든 특정 소비자 ALU가 로컬이 아닌 생산자의 결과를 필요로 한다는 점에서 필연적으로 모든 명령을 로컬에서 수행할 수 있는 것은 아니다. 로컬 통신용으로 설정된 단일 클럭 사이클은 비 로컬 생산자의 입력이 처리를 허용할 시간 내에 소비자 ALU에 도착할 수 있도록 충분한 시간을 제공하지 않는다.
위에서 논의된 바와 같이, 개선된 클럭 속도는 ALU가 로컬 생산자가 제공 한 입력으로 수신하고 선택할 것이라는 보장에 기반한다. 그러나 어떤 이유로든 특정 소비자 ALU가 로컬이 아닌 생산자의 결과를 필요로 한다는 점에서 필연적으로 모든 명령을 로컬에서 수행할 수 있는 것은 아니다. 로컬 통신용으로 설정된 단일 클럭 사이클은 비 로컬 생산자의 입력이 처리를 허용할 시간 내에 소비자 ALU에 도착할 수 있도록 충분한 시간을 제공하지 않는다.
이는 5 개의 지시어 연산을 포함하는 지시어 세트 2와 관련하여 설명할 수 있다.
1: A= R1 +R2
2: B= A+ R3
3: D= R5 + R6
4: E = D + R7
5: F = B + E
전술 한 예에서, 지시어 동작 A와 B는 종속 관계에 있으며, 각각은 단일 클럭 사이클 내에서 로컬 레벨에서 (예를 들어, 로컬의 정의 인 경우 ALU(208)에 의해 단독으로) 수행될 수 있다. 지시어 연산 D와 E는 또한 종속 관계에 있으며, 각각은 다른 ALU (예 : ALU(214))에서 로컬로 수행 될 수 있다. 따라서 지시어 세트 2의 5 개 지시어 중 4 개는 모두 로컬 통신 범위 내에서 로컬 ALU 내에서 수행될 수 있다.
이것은 명령 연산 F의 경우가 아니다. 지시어 연산 F는 지시어 연산 B와 E의 결과에 의존하기 때문에 이론적으로 지시어 연산 F는 A-B가 발생하는 지역, D-E가 발생하는 지역 또는 새로운 ALU에서 완전히 처리 될 수 있다 (예 : ALU (212)). 그러나 명령 연산 B와 E의 실행은 너무 멀리 떨어진 ALU에서 발생하여 명령 연산 B와 E의 결과가 동일한 클럭 사이클 내에서 명령 연산 F를 처리하기 위해 명령 연산 F에 할당된 해당 ALU에 도달할 수 있음을 보장 할 수 없다.
예를 들어, 명령 연산 F가 명령 연산 A-B (ALU(208))와 동일한 위치에서 수행된 경우, 명령 연산 B의 결과는 로컬에서 사용할 수 있지만 명령 연산 E (ALU(214)에서)의 결과는 그렇지 않다. 따라서 명령 작업 F를 실행하려면 로컬이 아닌 통신이 필요하다. 위에서 논의된 바와 같이, 클럭 사이클은 명령 연산 E의 결과가 처리될 시간 내에 ALU(214)로부터 ALU(208)에 도달할 것을 보장 할 큼 충분히 길지 않다는 점에서 비 로컬 통신을 보장하기에 충분하지 않다.
비-로컬 통신의 인스턴스에 대한 이러한 필요성을 설명하기 위해, 프로세서 (400)는 명령 세트 2에 추가 명령을 삽입할 수 있는데, 이는 명령 동작 F의 실행이 한 클럭 사이클만큼 지연되는 지연 명령이다. 따라서 프로세서는 ALU를 5 개가 아닌 6 개의 명령 작업 일정으로 할당한다;
1: A= R1 +R2
2: B= A+ R3
3: D= R5 + R6
4: E = D + R7
5: WAIT (bubble)
6: F = B + E
삽입 된 지시어 연산의 추가는 지시어 연산 E 및 / 또는 B의 결과가 목적지 ALU에 도달하기 위해 전역적으로 이동하는 시간의 추가 클럭 사이클을 제공한다. 예를 들어, 표 1과 관련하여 위에서 설명한 메트릭을 사용하면 데이터 경로에서 한 ALU에서 다른 ALU로 이동하는 데 필요한 최대 시간은 약 120ps이다. 프로세서의 단일 클럭 사이클은 160ps이다. 160ps의 클럭 사이클이 최대 이동 시간 인 120ps보다 길기 때문에 명령 연산 F를 한 클럭 주기로 실행하기를 기다리면 지시어 연산 E와 B의 결과가 명령 연산 F를 처리하기 위해 소비 ALU에 도달하는 데 충분한 시간이 보장된다. 어떤 이유로 시간이 충분하지 않은 경우 (예 : 최대 이동 시간이 클럭 주기보다 길 경우) 충분한 시간이 제공 될 때까지 추가 지연 단계를 삽입 할 수 있다.
추가 클럭 사이클에도 불구하고 전체 프로세스가 종래 기술보다 빠르게 발생한다. 위의 표 1에서 설명한 메트릭을 사용하는 종래 기술 프로세서에서, 위의 다섯 단계 1-5는 단계당 260ps로 3.85Ghz 프로세서에서 실행되며 총 1300ps의 시간 동안 5 개의 명령 작업을 실행한다. 위의 실시예의 프로세서에서, 6 개의 명령 연산 (원래의 5 개 + 1 개의 지연 단계)은 6.25Ghz 프로세서에서 단계 당 160ps로 총 960ps에 대해 실행된다. 본 실시예의 프로세서는 종래 기술의 패러다임보다 더 빠른 클럭 속도 (+ 62 %) 및 더 짧은 시간 (-26 %)으로 전체 명령 연산 세트 A-F를 실행된다.
위의 예에서 볼 수 있듯, 더 높은 클럭 속도는 로컬이 아닌 통신을 설명하기위한 단계 수의 증가에 의해 적어도 부분적으로 오프셋 된다. 출원인은 종래 기술 ALU 아키텍처를 사용하여 명령 작업의 약 85 %가 로컬의 특정 정의가 무엇인지에 따라 로컬에서 수행될 수 있다고 추정한다. 6 개의 실질적인 명령 작업 (즉, 83 % 로컬, 17 % 글로벌)에 대해 1 개의 지연이 필요한 최악의 경우를 가정하면 프로세서 400은 기존 패러다임보다 여전히 더 높은 클럭 속도 (+ 65 %)를 가지며 더 짧은 시간( -30 %)에 동일한 명령 작업 세트를 실행한다. 이하에서 논의되는 다른 실시예는 이를 더욱 개선할 수 있다. 전체적인 결과는 더 빠른 클럭 속도와 더 빠른 명령 작업 성능을 가진 프로세서이다.
데이터의 비-로컬 전송을필요로 하는 것과 반대로 로컬에서 수행할 수 있는 작업의 균형에 영향을 미치는 요소에는 글로벌 비율과 반대되는 로컬 범위가 포함된다. 특히 로컬 범위가 작을수록 전송 시간이 짧아 져 클럭 속도가 빨라진다. 그러나 더 적은 단계가 로컬 처리에 대한 더 엄격한 정의를 충족 할 수 있기 때문에 더 작은 범위의 로컬 처리는 전역 단계의 백분율 / 수를 증가시킬 수 있다.
예를 들어, 지역성을 ALU 자체 (예를 들어, 도 3B)만으로 설정하는 것은 인접한 ALU보다 거리가 더 짧다. 이는 전송 시간을 최소화하고 그에 따라 클럭 속도를 최대화하여 명령의 약 90 %가 종래 기술 ALU를 사용하여 이 정의에 따라 로컬로 실행될 수 있도록 한다. 또 다른 예에서 인접 ALU (예 : (302) 또는 (304))에 대한 지역성을 설정하면 ALU 자체에 비해 전송 시간이 더 길어 전송 시간이 더 높고 클럭 속도가 약간 느리다. 그러나 출원인들은 명령의 약 93 %가 종래 기술 ALU를 사용하여 이 정의에 따라 로컬로 실행될 수 있으며 글로벌 통신을 위해 더 적은 지연이 필요하다고 예상한다.
본 명세서의 다양한 실시예는 상기 사항을 더욱 개선할 수 있다. 아래에서 더 자세히 설명하는 이러한 실시예 중 하나는 병렬로 수행될 수 있는 명령 연산을 수집하는 동시에 실행하여 명령 세트를 실행하는 데 필요한 클럭 사이클의 수를 줄이는 것이다. 예를 들어 위의 지시어 세트 1에는 두 개의 지시어 연산이 있지만 한 클럭 사이클에서 이를 병렬로 수행할 수 있다.
이러한 또 다른 실시예는 다른 구성 및 / 또는 레이아웃을 가진 ALU를 활용하는 것이다. 구체적으로, 도 5A에 도시 된 바와 같이, ALU 구성은 경로 (506)에 의해 연결된 ALU ((502) 및 (504))와 같은 ALU의 반대쪽에 입력 및 출력을 가지고 있다. 로컬이 인접 ALU로 정의된 경우 전송 시간은 데이터가 이동하는 가장 긴 경로에 의해 결정된다. 이 경우 (504)의 출력은 경로(506)을 따라 (502)로 돌아간다.
도 5B는 본 명세서에서 "미러링 된" ALU로 지칭되는 ALU 구성의 실시예를 보여준다. 이 구성에서 각각의 ALU (508 및 510)는 동일한 쪽에 입력 및 출력을 모두 가지고 있으며 둘 다 경로 (512)에 연결된다. 또한, ALU (508 및 510)는 I / O 연결이 중간 경로 (514)를 통해 서로 마주 보도록 서로에 대해 뒤집힌 하나와 쌍을 이루며 서로 직접 연결할 수 있다. 또한, ALU (508 및 510)는 I / O 연결이 중간 경로 (514)를 통해 서로 마주 보도록 서로에 대해 뒤집힌 하나와 쌍을 이루며 서로 직접 연결할 수 있다. 로컬이 인접 ALU에 의해 정의된 경우 전송 시간은 가장 긴 경로에 의해 결정된다. 이 경우 (508)의 출력은 경로 (514)를 따라 (510)으로 돌아간다. 따라서 도 5A 및 도 5B는 모두 로컬 (즉, 인접 ALU)에 대해 동일한 정의를 갖지만, 도 5B의 경로(514)로 가도 5A의 경로 (506)보다 짧기 때문에, 전송 시간은 도 5B에 대해 더 낮고 이에 상응하는 더 높은 클럭 속도를 지원할 수 있다.
도 5B에서와 같이 미러링 된 ALU 쌍으로 로컬을 정의하는 것은 인접 ALU 쌍 (ALU 자체에 비해 글로벌 지시어의 수를 줄일 수 있음)과 ALU 자체보다 더 짧은 거리 (ALU (508 및 510) 사이의 거리는 ALU (214)에 대해도 3B에 도시 된 입력 경로에 대한 출력보다 잠재적으로 더 짧음)의 장점을 결합한다..
도 6은 2 쌍의 미러링 된 ALU (602-604 및 614-616)를 갖는 프로세서 칩 (400)의 코어 (600)를 도시한다. 이 실시예에서, 로컬은 미러링 된 쌍으로 정의될 수 있다. 즉, (602-604)는 서로 로컬이고 (612-614)는 서로 로컬이다. 경로 (618)은 전역 ALU 통신, 로컬로 제공된 값 (예 : 피연산자 선택 장치 및 레지스터를 통해) 및 필요에 따라 기타 데이터 및 명령을 허용한다.
명령 세트 1 (A = R1 + R2, B = A + R3)을 미러링 된 ALU 쌍으로 정의된 로컬을 사용하여도 6의 구성에 적용하면, 특정 조건 하에서 프로세서 (400)는 명령 동작 A를 ALU (602)에 할당할 수 있으며, 명령 작업 B를 로컬 범위 내에서 유지하려고 하면 명령 작업 B를 ALU(604)에 할당하지만, 이러한 ALU가 ALU(602)에 대한 로컬 범위 밖에 있기 때문에 (612) 및 (614)에는 할당하지 않는다.
위치 인식을 통한 ALU 할당은 프로세서 칩 (400)의 컴파일러 (408)에 의해 구현될 수 있다. 컴파일러 (408)는 ALU에 단계 매핑을 수행하기 위해 특정 프로그래밍으로 수정된 표준 컴파일러이거나 맞춤형으로 설계될 수 있다. 간결함을 위해, 아래의 실시예는 프로세서 칩 (400)에 의해 수행되는 다양한 동작과 관련하여 설명되지만, 본 발명은 그렇게 제한되지 않음을 이해해야 한다.
위의 과정 동안, 컴파일러 (408)는 궁극적으로 지시어의 최종 세트를 형성할 연산의 종속성에 기초하여 지시어 연산에 대응하는 노드의 종속성 그래프를 생성한다. 도 7A는 노드가 하나의 명령 작업 인 명령 세트 1에 대한 종속성 그래프를 보여준다. 지시어 연산 A = R1 + R2는 이전 연산의 결과에 의존하지 않기 때문에 "독립"으로 간주될 수 있다 (R1 및 R2는 레지스터에서 로컬로 존재함). 명령 연산 B = A + R3은 A의 결과에 의존하기 때문에 "종속적" 이다.
당 업계에 알려진 바와 같이, 컴파일러는 기본 규칙을 적용하고 그 규칙에 따라 결과 점수를 조사함으로써 수행될 명령 연산의 수를 줄이려고 시도할 것이다. 이 프로세스는 반복적이며 종속성 그래프 내에서 단계 할당을 최적화하기 위해 100 개 이상의 패스를 실행할 수 있다. 따라서 종속성 그래프는 이러한 패스를 통해 계속 변경될 수 있다, 어떤 시점에서 컴파일러는 실행을 위해 그래프의 노드를 특정 ALU에 매핑한다. 이것은 레지스터가 할당되기 전 한 번, 레지스터가 할당된 후 한 번, 적어도 두 번 발생할 수 있다.
본 발명의 실시예는 종래 기술 컴파일러에 의해 적용되는 규칙 중 적어도 일부를 활용할 수 있다. 실시예는 또한 위치 인식에 기초한 ALU 선택을 위한 특정 규칙을 적용할 것이다. 이러한 규칙의 비 제한적인 예는 비 로컬 통신을 방지하기 위해 가능한 경우 각 작업이 로컬에서 수행되고 비 로컬 통신의 수를 최소화해야 한다는 것이다.
컴파일러의 종속성 그래프가 특정 진화 상태에 도달하면 시스템은 종속성 그래프 내의 노드에 대한 ALU의 할당을 지시어로 시작한다. 각 지시어는 공통 클럭 사이클 동안 동시에 동시에 병렬로 실행할 개별 ALU에 할당할 지시어를 명시 적으로 지정한다. VLIW 지시어와 달리, 본 실시예의 지시어는 직접적인 독립성을 갖는 일부 지시어 연산을 포함할 수 있다. 상황에 따라 특정 명령 작업의 상호 의존성 수준이 하나 이상 수용될 수 있으며 ALU가 그 많은 입력을 처리하도록 설계된 경우 잠재적으로 두 개 이상 수용될 수 있다.
도 10A는 슬롯이 특정 ALU와 연관되는 열 (1004, 1006, 1008 및 1010) 내에 슬롯이 있는 행의 매핑 된 지시어로서 지시어 (1002)의 실시예를 도시한다. 슬롯의 수는 데이터 경로 (404) 내의 ALU의 수와 동일 할 수 있지만, 아래에서 설명하는 경우와 같을 필요는 없다..
도 10B는 슬롯이 열을 형성하고 지시어 연산에 의해 채워질 때 지시어 (1002A-n)가 지시어 연산의 맵을 집합 적으로 정의하는 다수의 순차적 지시어 (1002A-1002n)를 도시한다. 각 행은 해당 클럭 사이클에서 ALU에 의해 동시에 실행될 명령 작업을 나타낸다. 슬롯의 각 열은 데이터 경로 내의 특정 ALU에 고유하므로 해당 열은 해당 ALU가 명령 작업을 수행하는 순서를 나타낸다. 예를 들어, 도 6의 4 개의 ALU 데이터 경로 구성과 관련하여 ALU(602)는 열 1004에 할당 될 수 있고, ALU(604)는 ALU (1006)에 할당 될 수 있고, ALU(612)는 열 1008에 할당 될 수 있고, ALU (614)가 ALU(1010)으로 할당 될 수 있다. 따라서 ALU에 명령 작업을 할당하는 것은 해당 ALU 전용으로 해당 열 / 슬롯에 해당 명령 작업을 입력하는 것을 포함 할 수 있다. 그러나, 본 발명은 그렇게 제한되지 않고, 열 / 슬롯은 특정 ALU에 할당되지 않을 수 있으며, 대신 슬롯의 내용은 특정 ALU에 대한 식별자를 갖는다
아래에서 더 자세히 논의되는 바와 같이, 프로세서 (400)는 실행을 위해 프로세서 칩 (400) 내의 특정 ALU (406)에 각각의 명령 동작을 할당하기 위해 종속성 그래프를 통해 작업할 것이다. 프로세스는 동일한 클럭 주기 동안 ALU에 의해 병렬로 수행될 수 있는 일부 경우에 직접 종속 된 명령 작업을 포함하여 명령 작업의 하위 집합을 식별하고 이를 해당 ALU에 할당한다.
이제 도 8을 참조하면, 위치 인식을 통해 ALU를 할당하기위한 방법론의 실시예가 흐름도 (800)에 나와있다. 플로우 차트는 로컬 통신이 정의된 ALU 레이아웃을 가진 특정 프로세서 (400) 내의 코어의 모든 데이터 경로에 대해 모든 프로그램에 적용될 수 있다. 흐름도의 단계는 프로세서 (400)에서 실행되는 컴파일러 (408)에 의해 수행되는 것이 바람직하지만, 프로세서 (400)의 다른 구성 요소가 프로세스에 포함될 수 있으므로, 여기서 논의는 일반적으로 프로세서 (400)에 기능을 부여할 것이다.
블록 (802)에서, 프로세서 (400)는 노드에서 수행된 동작의 특성이 로컬에서 완료될 수 있는지 또는 글로벌 통신을 필요로 하는지 여부에 기초하여 종속성 그래프의 개별 명령 동작을 글로벌 또는 로컬로 미리 지정한다(지역의 정의). 예를 들어, 레지스터 콘텐츠를 로컬에서 사용할 수 있으므로 로컬 레지스터의 입력만 기반으로 하는 지시어 노드는 로컬 일 가능성이 높다. 두 개의 다른 로컬 또는 글로벌 지시어 노드의 입력을 기반으로 하는 지시어 노드는 전역일 가능성이 높다. 단독으로 또는 레지스터 입력과 결합된 로컬 또는 글로벌 지시어 노드의 입력 하나를 기반으로 하는 지시어 노드는 로컬 일 가능성이 높다.
일부 경우에 그래프는 특정 노드의 명령 동작이 글로벌인지 로컬인지를 예측할 수 없다. 예를 들어 이전 단계가 무엇인지 명확하지 않은 종속성 그래프의 경계에서 발생할 수 있다 (예 : 이전 단계가 아직 시스템에 입력되지 않은 다른 프로그램의 일부일 수 있음). 그러한 경우, 프로세서 (400)는 경계를 넘어서 발생하는 일을 알지 못하기 때문에 컴파일러는 이러한 연산을 로컬로 간주하고 후속 처리가 필요에 따라 조정하도록 할 수 있다. 대안으로 컴파일러는 이러한 작업을 전역으로 간주하고 후속 처리가 필요에 따라 조정하도록 허용할 수 있다.
지역 및 글로벌을 평가하기위한 블록(802)에서의 활동은 완전히 정확할 필요는 없다. 아래에 설명 된 대로 할당 오류는 후속 처리에서 수정 및 / 또는 보상 될 수 있다. 따라서 블록(802)에서 로컬 및 글로벌 지정은 예비로 간주될 수 있다. 로컬 / 글로벌 노드의 지정 후, 프로세서 (400)는 블록(803)에서 새로운 지시어 (1002), 바람직하게는 매핑 된 지시어 형식으로 시작한다. 이것은 새로운 지시어를 생성하거나 (이전 지시어를 따르기 위해) 이전에 생성된 지시어를 식별하는 것을 수반할 수 있다. 명령 연산이 매핑되지 않고 수집되는 대안적인 실시예에서, 블록(803)은 불필요 할 수 있다.
블록(804)에서 프로세서(400)는 할당을 위해 종속성 그래프의 나머지 부분으로부터 노드를 선택하고, 나머지 부분은 이전에 할당된 노드에 대한 할당 고려 사항을 제외한다. (처음 선택된 노드의 경우 아직 할당된 항목이 없으므로 전체 그래프가 표시된다.) 선택한 노드는 나머지 임계 경로 (즉, 시작과 완료 사이에 가장 긴 단계 수를 가진 종속성 그래프 내의 경로)에서 규칙을 위반하지 않는 가장 낮은 노드 일 수 있다.
도 9는 블록(804)가 실행될 수 있는 비 제한적인 방법론의 흐름도를 보여준다. 블록(902)에서, 프로세서(400)는 분포 그래프의 임계 경로를 식별한다; 각 노드는 여러 단계를 포함할 수 있으므로 임계 경로는 가장 긴 노드 수로 정의된 것과 다를 수 있다. 블록(904)에서, 프로세서(400)은 블록 (902)에서 식별된 임계 경로의 최하위 노드를 식별한다. 블록(906)에서 프로세서(400)는 식별 된 노드의 명령 동작의 선택이 임의의 규칙을 위반하는지 여부를 결정한다 ( 예 : 특정 지시어에 지시어 작업을 포함하면 로컬 통신 및 처리의 보장이 유지 될 수 없는 상황이 발생하는 경우). 규칙을 위반하지 않으면 블록(908)에서 프로세서(400)은 할당을 위해 해당 노드를 선택하고 제어는 도 8의 블록(806)으로 넘어간다.
명령 동작의 포함이 블록(906)에서 규칙을 위반하는 경우, 블록 (910)에서 프로세서(400)은 다음으로 가장 중요한 경로를 식별하고 제어를 블록(904)로 되돌린다. 이 프로세스는 노드가 선택될 때까지 반복적으로 계속될 수 있다. 궁극적으로 기준을 충족하는 노드가 없는 경우 (예 : 모든 노드가 고갈되고 일부 노드가 남아 있지만 추가 검색이 비생산적이거나 무익한 것으로 간주 될 만큼 충분한 노드가 고려 됨) , 제어는 블록(816)으로 넘어가 아래에서 설명할 새로운 지시어로 전환된다.
블록(806)에서 프로세서(400)는 할당된 노드의 명령 동작을 위한 ALU를 선택하고 명령 동작을 지시어(1002)의 슬롯과 연관시킨다. 다양한 규칙이 선택할 ALU 및 / 또는 슬롯을 정의 할 수 있다. 예를 들어, 이미 사용중인 ALU를 사용할 수 없으며 이에는 할당해선 안 된다. 프로세서 (400)은 타당하지 않는 한 로컬 리소스 할당에서 잠재적 충돌을 피하기 위해 이미 사용중인 ALU에 로컬 인 ALU를 사용하지 않을 수 있다
전술한 바와 같이 매핑 된 지시어에서 지시어(1002)의 포맷 슬롯은 특정 ALU에 전용될 수 있으며, 따라서 지시어 연산을 적절한 지시어 슬롯에 삽입함으로써 선택된 ALU에 대해 지시어 연산 -ALU 연관이 정의될 수 있다. 그러나, 본 발명은 매핑 된 지시어의 사용을 포함하거나 포함하지 않을 수 있는 연관을 생성하는 다른 방법이 있다는 점에서 그렇게 제한되지 않는다. 비 제한적인 예를 들어, 마커는 다른 곳에 저장된 대로 지시어 작업을 가리키는 지시어에 삽입될 수 있다. 다른 비 제한적인 예를 들어, 명령 연산은 선택된 ALU에 대한 마커와 함께 지시어에 삽입될 수 있다. 본 발명은 지시어 연산을 지시어로 연결하거나 수집하는 형태로 제한되지 않는다.
블록(808)에서, 프로세서(400)는 병렬 실행을 위해 동일한 지시어(1002)에 포함될 수 있는 이전에 할당된 노드에 의존하는 임의의 노드를 식별한다. 다음의 비 제한적 규칙은 특정 종속 노드가 종속 노드와 동일한 지시어(1002)에 포함될 수 있는지 여부에 적용될 수 있다. 예를 들어, 하나의 규칙은 종속 노드가(블록(804) 당) 로컬이라는 것일 수 있다. 또 다른 규칙은 종속 노드와 종속 노드의 명령 작업이 단일 클럭 사이클 내에서 완료될 수 있을 만큼 간단하고 빠르다는 것이다. 또 다른 규칙은 종속성 수준이 ALU가 처리 할 수 있는 수준을 초과하지 않는다는 것이다 (예 : ALU가 두 개의 입력 만 처리 할 수 있는 경우 하나의 종속성 수준). 또 다른 규칙은 지시어 (1002)가 종속 노드를 위한 공간을 가지고 있다는 것이다 (즉, 지시어가 이미 가득 차 있지 않음). 또 다른 규칙은 로컬 ALU를 사용할 수 있다는 것이다. 본 발명은 적용될 수 있는 규칙에 제한되지 않는다.
그러한 규칙을 만족하지 않는 노드가 식별되면 제어는 블록(810)으로 넘어간다. 그러한 노드가 식별되지 않으면 제어는 블록(812)로 넘어간다.
블록(810)에서, 프로세서(400)는 블록(808)으로부터의 식별된 임의의 종속 노드 명령 동작을 ALU 및 지시어(1002)와 함께 할당한다. 매핑 된 지시어의 경우, ALU 할당은 식별된 지시어 작업을 종속 노드가 종속된 생산자 노드의 ALU에 상대적인 로컬인 ALU에 해당하는 지시어의 슬롯에 삽입할 수 있다. 여기에서 논의된 바와 같이 다른 형태의 할당이 사용될 수 있다.
블록(812)에서, 프로세서 (400)는 (적어도 임계 경로 관점에서) 노드 선택 시 추가 고려 사항으로부터 할당된 노드를 제거하기 위해 종속성 그래프를 업데이트 한다. 이것은 종속성 그래프 자체의 삭제이거나 더 이상 고려되지 않은 노드 위의 표시 일 수 있다. 본 발명은 방법론이 추가 할당 고려 사항에서 할당된 노드를 제거하는 방식으로 제한되지 않는다.
블록(814)에서, 프로세서(400)은 지시어(1002)가 완료되었고 닫혀야 하는지 여부를 결정한다. 지시어(1002)가 완전한 것으로 간주 될 수 있는 이유의 비 제한적인 예는 지시어가 가득 찼을 때 (사용 가능한 슬롯이 더 이상 없음), 배치 할 명령 작업이 남아 있지 않을 때 (종속성 그래프가 지시어로 완전히 변환 됨), 및 / 또는 지시어(1002)에서 이용 가능한 슬롯이 있지만 지시어(1002)에 포함되는 때 규칙을 위반하기 때문에 나머지 지시어 연산 중 어느 것도 그 안에 들어갈 수 없다.
지시어(1002)가 완료되면, 블록(816)에서 프로세서(400)은 지시어 (1002)의 마지막 지시어 연산에서 플래그를 설정하여 지시어(1002)의 끝을 표시한다. 제어는 블록(818)으로 넘어가 나머지 할당되지 않은 명령 작업에 대해 새로운 지시어(1002)를 시작할지 여부를 확인한다. 그 경우 제어는 블록(803)으로 돌아가 새로운 지시어(1002)를 시작한다. 그렇지 않은 경우 ALU 할당 프로세스가 종료된다.
이제 상기 흐름도의 적용 예가 논의될 것이다
예 1:
[예 1에서 도 2B의 종래 기술 ALU 구성이 사용되고, 로컬의 정의는 그 자체에 대한 ALU이다 (도 3B에 도시 된 바와 같이). 6개의 ALU가 도 2B에 존재하고, 도 11A에 도시 된 바와 같이 매핑 된 지시어 형식의 각 지시어 (1102)는 각각의 ALU (204-214)에 특별히 할당된 6 개의 슬롯을 포함한다. 지시어 세트 1은 지시어 연산 A = R1 + R2 및 B = A + R3을 사용하여 ALU에 할당할 프로그램이다. 위에서 논의한 바와 같이, 지시어 세트 1의 분포 그래프는 도 7A에 있다. 이 그래프 예에서 지시어 세트 1의 각 지시어 연산은 단일 노드를 차지하지만, 노드가 컴파일됨에 따라 여러 지시어 연산이 단일 노드 내에서 발생할 수 있기 때문에 그렇지 않을 수 있고, 또는 여러 명령 작업이 노드에 대한 다른 명령 작업으로 컴파일 될 수 있음을 이해해야 한다. 이러한 맥락에서 명령 연산은 노드에 할당되고 명령 연산과 노드는 다소 혼용될 수 있다.
도 7A의 그래프에는 전역 동작이 없으며, 따라서 블록(802)에서 프로세서 (400)는 각 노드를 로컬 노드로 지정한다. 블록(892)에서 프로세서 (400)는 새로운 지시어 (이 경우에는 워드 1102A)를 시작한다. 블록(804) 및 블록(806)에서, 프로세서 (400)는 A = R1 + R2를 임계 경로로 식별하고 지시어 (1102A)에 명령 연산 A를 포함하는 것은 (이 경우) 어떤 규칙도 위반하지 않는다. 따라서 프로세서는 도 11A에 도시 된 바와 같이 지시어 (1102A)의 ALU 슬롯 (예를 들어, 이 예의 경우 ALU (208))에 명령 연산 A를 할당한다.
블록 (808 및 810)에서, 프로세서 (400)는 명령 동작 A (B = A + R3), A에 국부적 인 명령 동작 B를 식별하고, 명령 워드가 가득 차지 않았다 (아직 3 개의 슬롯이 남아 있음). 그러나 이 정의의 지역성은 ALU 자체에 대한 지역이므로 명령 작업 A에 대한 ALU가 이미 사용 중이므로 명령 작업 B는 동일한 지시어(1102A)의 다른 ALU에 할당될 수 없다. 즉, 지시어 연산 B를 할당하기 위해 지시어(1102A)에서 사용할 수 있는 로컬 ALU가 없다.
지시어(1102A)를 채울 수 있는 다른 종속 노드가 없기 때문에, 제어는 블록(812)로 넘어 가고, 여기서 프로세서(400)는 종속 그래프를 업데이트하여 도 7B에 도시 된 바와 같이 추가 할당 고려 사항에서 노드 A를 제거한다.
블록(814)에서 지시어(1102A)는 완료된 것으로 간주된다. 지시어 (1102A)에서 할당되지 않은 ALU에 대한 슬롯이 남아 있더라도 나머지 노드 B를 포함하면 규칙 위반이 된다. 따라서 ALU(208)에 대한 슬롯을 지시어 (1102A)의 끝으로 지정하기 위해 블록(814)에서 플래그가 설정되고, 새로운 워드가 필요하며 도11B의 지시어(1102B)로서 (803)에서 생성되고, 제어는 블록 (804)으로 복귀한다.
블록(804) 및 블록(806)에서 컴파일러는 B = A + R3을 종속성 그래프의 다음 임계 경로 (남은 모든 것)로 식별하고, 명령 연산 B는 (이 경우) 지시어 (1102B)에 포함을 금지한다는 규칙을 위반하지 않는다. 명령 연산 B는 명령 연산 A에 로컬이므로, 프로세서(400)는 명령 연산 A가 할당된 ALU에 로컬 인 ALU에 명령 연산 B를 할당한다. 이 경우, 지역의 정의에 의해 (자체에 대한 ALU) ALU(208)는 도 11B에 도시 된 바와 같이 종래 지시어 (즉, 연산 A)에 대해 동일한 ALU(208)로 사용된다. (어떤 이유로 ALU(208)을 사용할 수 없는 경우, 다른 ALU가 로컬이 아니고 전역 통신이 필요하고 새로운 지시어(1102C) (도시되지 않음)의 생성이 필요하기 때문에 명령 작업 B를 지시어(1102B)에 배치할 수 없다.)
추가 종속 노드가 블록(808) 및 블록(810)에서 선택되거나 할당되지 않고 (아무것도 남지 않음), 워드는 블록(812)에서 가득 찬 것으로 결정되고 (모든 노드가 할당됨), 플래그는 블록(814)에서 ALU(208)에 대한 슬롯을 지정하도록 설정된다. 지시어(1102)를 끝으로 프로세스는 완료되며(816)으로 결정되고 종료된다.
위의 예에서, 매핑 된 지시어로서의 지시어의 포맷은 슬롯 할당을 통해 직접 명령 동작 -ALU 연관을 식별한다. 그러나 본 발명은 그렇게 제한되지 않는다. 도 11C 는 슬롯 내에 ALU ID를 포함하는 채워진 지시어 (1102A / B)의 또 다른 표현의 비 제한적인 예를 보여준다.
도 11D는 매핑 된 지시어 형식이 아닌 지시어 연산 -ALU 연관이 데이터 필드에 자체 포함되는 채워진 지시어 (1102A / B)의 다른 표현의 비 제한적인 예를 보여준다.
도 11E는 채워진 지시어 (1102A / B)의 다른 표현의 매핑 된 지시어 형식이 아니며 지시어 작업 -ALU 연관이 ALU ID에 의해 데이터 필드에 포함되고 지시어 작업 A와 지시어 작업 B를 검색 할 수 있는 링크 L에 연결된 비 제한적인 예를 도시한다.
이 예에서, ALU 구성 및 지시어 세트의 특정 조합은 실행해야 하는 지시어 수를 저장하지 못했다. 그럼에도 불구하고 프로세서가 tmaxlocal에 의해 정의된 클럭 속도를 사용하는 경우 위에서 설명한 것처럼 프로세스는 더 빠른 클럭 속도로 실행된다.
예 2:
예 2는 예 1에서와 동일한 지시어 세트 1을 사용한다. 이 경우 그림 6의 ALU 구성이 사용되며 로컬 정의는 미러쌍의 파트너와의 통신으로 미리 정의된다(예를 들어, ALU(602) 및 ALU(604)는 미러링 된 쌍으로 서로 로컬이고 ALU(614) 및 ALU(616)은 미러링 된 쌍으로 서로 로컬이지만 ALU (602) 및 ALU(614/616)은 인접하지만 미러링 되지 않기 때문에 로컬이 아니다). 4 개의 ALU (602, 604, 614, 616)가 있기 때문에, 각각의 지시어 (1202)는 도 12A 및 도 12B에 도시 된 바와 같이 4 개의 슬롯에 매핑 된 지시어 형식을 갖는다. 또한 그림 6의 ALU 구성은 전체 데이터 경로에 4 개의 ALU가 있고 로컬 정의는 미러링 된 쌍이므로 로컬로 사전 정의된 범위가 데이터 경로보다 작다.
위에서 논의된 바와 같이, 지시어 세트 1의 분포 그래프는 도 7A에 있다. 글로벌 오퍼레이션이 없으며 블록 (802)에서 프로세서 (400)은 각 노드를 로컬 노드로 지정한다. 블록 (803)에서, 프로세서는 도 12A에 도시 된 바와 같이 새로운 지시어(1202A)를 시작한다. 블록(804) 및 블록 (806)에서, 프로세서 (400)은 A = R1 + R2를 임계 경로로 식별하고 명령 동작 A는 (이 경우) 어떤 규칙도 위반하지 않는다; 따라서 프로세서 (400)는 지시어 (1202A)의 ALU 슬롯 (예를 들어, 이 예에서는 ALU (602))에 명령 연산 A를 할당한다.
블록 (808)에서, 프로세서 (400)는 명령 동작 A에 의존하는 것으로 명령 동작 B를 식별하고, A에 로컬이고, 지시어 (1202A)가 가득 차지 않았고 (여전히 3 개의 슬롯이 남아 있음), 명령 동작 A와 B는 모두 동일한 클럭 주기에서 순차적으로 실행될 수 있는 간단한 명령이다. 이 예에서 로컬은 미러링 된 쌍으로 정의되었기 때문에 ALU(602)에 명령 작업 A가 할당되었으므로 로컬 ALU (ALU 604 (현재 사용 중이 아님))를 사용하여 명령 작업 B를 정규화 된 종속 노드로 수신할 수 있다. 블록 (810)에서, 프로세서 (400)는 도 12B에 도시 된 바와 같이 지시어 (1202A)에서 ALU (604)에 대한 슬롯에 B를 할당한다.
위에서 논의된 바와 같이, 종래 기술의 VLIW는 동일한 지시어에서 상호 의존성을 금지하고, B가 A에 종속되기 때문에 VLIW는 동일한 워드에 A와 B를 포함할 수 없기 때문에 도 12B에 도시 된 바와 같이 지시어 (1202A)를 채울 수 없었다. 이 예의 실시예는 A와 B를 모두 포함할 수 있다는 점에서 VLIW보다 향상되어 총 처리 시간이 이에 상응하는 감소를 보일 것이다.
할당할 다른 노드가 없기 때문에, 지시어(1202A)는 블록(814)에서 가득 찬 것으로 간주되고, 지시어 가득 차 플래그는 블록(816)에서 설정되고, 그래프는 블록(818)에서 완료된 것으로 간주되고, 할당 프로세스가 종료된다.
도 1 및 도 2에 대해 위에서 언급 한 바와 같이 도 11C-E에서 다른 저장 / 지시어 형식이 사용될 수 있으며, 이에 대한 비 제한적인 예가 도 12C 및 도 12D에 도시된다.
이 예에서, ALU 구성, 로컬 정의 및 지시어 세트의 특정 조합은 두 개의 종속 지시어 연산이 단일 클럭 사이클에서 실행될 수 있다는 점에서 필요한 클럭 사이클 수를 단일 지시어의 일부로 감소시킨다. 또한 프로세서가 tmaxlocal로 정의된 클럭 속도를 사용하는 경우 위에서 설명한 것처럼 프로세스가 더 빠른 프로세서 속도에서 발생했다.
예 3:
예 3의 환경은 예 2와 동일하다. (도 6의 ALU 구성이 사용되고, 로컬의 정의는 미러 쌍에서 파트너와의 통신으로 미리 정의되며, ALU가 복잡한 작업을 처리할 수 있다고 더 가정한다.) 지시어 세트 3은 다음과 같다.
A = R1 * R2
B = A + R3
명령 연산 A는 덧셈이 아니라 곱셈의 행위라는 점을 제외하면 명령 세트 3은 명령 세트 1과 유사하다. 곱하기는 덧셈보다 오래 걸리며, 이 예에서는 명령 연산 A에 대한 곱셈과 명령 연산 B에 대한 덧셈에 대한 총 시간이 너무 길어서 동일한 클럭 주기에서 완료할 수 없는 명령 연산을 나타낸다.
지시어 세트 3의 분포 그래프는 도 7C에 있다. 모든 입력이 로컬에서 이용 가능하기 때문에 글로벌 오퍼레이션이 없으며 블록(802)에서 프로세서 (400)은 각 노드를 로컬로 지정한다. 블록 (803)에서 새로운 지시어(1302A)가 시작된다. 블록 (804) 및 블록 (806)에서 컴파일러는 A = R1 * R2를 임계 경로로 식별하고 명령 연산 A는 (이 경우) 어떤 규칙도 위반하지 않는다. 따라서 프로세서는 도 13A의 지시어(1302A)에서 지시어 연산 A를 ALU 슬롯 (예를 들어, 이 예에서는 ALU(602))에 할당한다.
블록 (808)에서, 프로세서 (400)는 명령 동작 A에 의존하는 명령 동작 B를 A에 국부적으로 식별하고, 명령 워드가 가득 차지 않는다 (아직 3 개의 슬롯이 남아 있음) 그러나 명령 연산 A와 B는 모두 단일 클럭 사이클에서 실행할 수 없기 때문에 (A의 곱셈과 B의 더하기에 필요한 시간이 너무 길어 한 클럭 사이클에서 완료할 수 없음)(1302A)라는 지시는 규칙을 위반할 수 있어서 B는 동일한 명령에 포함될 수 없다. (클럭 사이클에 명령 작업 A와 명령 작업 B 모두의 완료를 보장할 시간이 충분하지 않음)
지시어(1302A)를 채우기 위해 사용할 수 있는 다른 종속 노드가 없기 때문에 제어는 블록(812)로 넘어 가고, 여기서 프로세서 (400)는 그래프를 업데이트하여 추가 할당 고려 사항에서 노드 A를 제거한다.
블록(814)에서 지시어(1302A)는 완료된 것으로 간주된다. 지시어 (1302A)에서 할당되지 않은 ALU에 대한 슬롯이 남아 있더라도 나머지 명령 작업 B를 포함하면 규칙 위반이 된다. 따라서 명령의 끝 플래그는 블록 (816)에서 설정되고, 새로운 명령(1302B)가 필요하며 블록(803)에서 생성되며, 제어는 블록(804)로 돌아간다.
블록 (804) 및 블록 (806)에서 컴파일러는 명령 연산 B = A + R3을 다음 임계 경로 (남은 모든 경로)로 식별하고 B는 (이 경우) 어떤 규칙도 위반하지 않는다. 지시어 연산 B는 지시어 연산 A에 국한되기 때문에, 프로세서 (400)는 지시어 연산 A에 할당된 ALU에 국한된 ALU에 지시어 연산 B를 할당한다. 이 예에서 로컬은 미러링 된 쌍으로 정의되기 때문에 ALU (602)에 명령 작업 A가 할당되면 로컬 ALU를 사용할 수 있다. ALU(604) (현재 사용 중이 아님)는 그림 13B 같이 명령 작업 B를 정규화 된 종속 노드로 수신한다.
추가 종속 노드가 블록(808) 및 블록(810)에서 선택되거나 할당되지 않고 (아무것도 남지 않음), 워드는 블록(812)에서 가득 찬 것으로 결정되고 (모든 노드가 할당됨), 플래그는 블록(814)에서 설정되어 마지막 점유 슬롯을 워드(1202B)의 끝, 프로세스는 블록(816)에서 완료된 것으로 결정되고 프로세스가 종료되게 지정한다.
다른 예 에서와 같이, 저장 지시어에 대한 다른 포맷이 이전에 논의된 도 11C-E에 도시 된 바와 같이 사용될 수 있다.
예 4:
예 4는 도 6의 ALU 구성을 사용하고, 로컬의 정의는 미러링 된 쌍으로 미리 정의되어 있다 (예를 들어, ALU(602) 및 ALU(604)는 미러링 된 쌍으로 서로 로컬이고 ALU(614) 및ALU(616)은 각각 로컬이다. 다른 하나는 미러링 된 쌍이지만 ALU(602) 및 (614/616)은 인접해 있는 동안 미러링되지 않기 때문에 로컬이 아니다.). 데이터 경로 (618)에 4 개의 ALU가 있으므로 각 지시어에는 4 개의 슬롯이 있다. 이 예제에서 지시어 세트 4는 다음과 같다.
A = R1 + R2
B = R3 + R4
C = A + B
명령 세트 4의 분포 그래프는 도 7D에 있다.
블록(802)부터 시작하여 프로세서 (400)는 명령 연산 A = R1 + R2 및 B = R3 + R4를 로컬 레지스터 콘텐츠 (R1, R2, R3, R4)를 기반으로 수행할 수 있기 때문에 로컬 연산으로 지정한다. 명령 연산 A와 B를 로컬로 지정한다고 해서 서로 로컬이라는 의미는 아니다. 반대로 아래에서 설명하는 것처럼 A와 B를 수행하는 ALU는 로컬 범위를 벗어날 수 있다.
명령 연산 C = A + B는 명령 연산 A와 B를 실행하는 ALU가 서로 로컬 일 가능성이 없기 때문에 글로벌 통신으로 지정되며 한 클럭 주기로 완료될 수 없는 글로벌 통신이 필요하기 때문이다.
로컬 / 글로벌로 지정된 노드와 함께, 블록(803)의 프로세서는 도 14A의 새로운 지시어(1402A)를 시작하고, 블록(804)에서 지시어 워드 (1402A)의 ALU에 할당할 노드를 선택한다. 비 제한적인 예로서, 도 7D의 노드가 각각 한 단계이면, 블록(902)에서 명령 연산 A = R1 + R2 및 B = R3 + R4는 둘 다 같은 수의 단계로 동일한 임계 경로 길이로 식별된다; 편의를 위해 명령 작업 A를 선택할 수 있다. 블록(904)에서, 지시어(1402A)에 명령 연산 A를 포함하는 것은 어떤 규칙도 위반하지 않는 것으로 결정된다. 따라서, 블록(908)에서 노드 A는 할당을 위해 선택되고 제어는 블록 (806)으로 전달된다. 블록(806)에서 ALU가 노드 A에 대해 선택되고 지시어 (1402A)에 배치된다. 이 경우 명령 연산 A는 독립적으로 제1 할당과는 별개이며, 따라서 프로세서는 그림 14A에 표시된 대로 ALU (602)와 같은 임의의 ALU를 효과적으로 선택할 수 있다.
블록(808)에서, 프로세서 (400)는 명령 동작 A에 의존하는 것으로 명령 동작 C를 식별한다. 단, 지시어 연산 C는 글로벌로 지정되었기 때문에 종속된 지시어 연산과 동일한 지시어에 포함될 수 없다. 다른 종속 노드가 존재하지 않으므로 제어는 블록 812로 넘어간다.
블록(812)에서, 프로세서 (400)는 추가 할당 고려 사항에서 할당된 노드 A를 제거하기 위해 종속성 그래프를 업데이트한다. 블록(814)에서, 프로세서 (400)은 지시어 (1402A)에 2 개의 공간이 남아 있고, 현재 지시어 (1402A)에 대한 어떤 규칙도 위반하지 않는 추가할 노드가 남아 있기 때문에 아직 완료되지 않았다고 결정한다. 따라서 제어는 종속성 그래프의 나머지 부분을 고려하기 위해 블록(804)로 돌아간다.
블록 (902) 당, 프로세서 (400)는 가장 긴 남은 임계 경로를 따라 노드를 찾는다. 이 예에서는 해당 노드에 상주하는 명령 동작 B = R3 + R4이다. 명령 작업 B는 904의 규칙을 위반하지 않으므로 현재 지시어 (1402A)에 할당될 수 있다.
블록(806)에서 노드 B의 명령 동작이 ALU에 할당된다. 명령 동작 B가 독립 노드에 있기 때문에, 프로세서 (400)는 이를 이미 사용하지 않는 ALU에 할당할 수 있으며, 사용중인 ALU와 로컬 관계에 있는 ALU를 피할 수 있다. 따라서 ALU (602)는 지시어 (1402)의 사전 할당으로 인해 사용할 수 없으며, 프로세서 (400)는 사용중인 ALU (602)와의 기존 로컬 관계의 일부이기 때문에 ALU (604)를 피하는 것을 선호할 수 있다. 이 예에서, 프로세서 (400)는 도14B에 도시 된 바와 같이 워드 (1402A)의 대응하는 슬롯에서 ALU (614)에 명령 연산 B를 할당한다.
제어는 노드 B로부터 종속 노드를 찾기 위해 블록(808)로 넘어간다. 프로세서(400)은 노드 B에 종속된 것으로 노드 C를 식별한다. 그러나, 노드 C는 글로벌이고 대응하는 명령 연산은 그것이 의존하는 노드와 동일한 지시어에 포함될 수 없기 때문에 제어는 블록(812)로 넘어간다.
블록(812)에서 종속성 그래프가 업데이트 되어 할당된 노드 B를 추가 고려 사항으로부터 제거한다.
그런 다음 제어는 블록(814)로 넘어가 지시어(1402A)가 완료되었는지 확인한다. 이 경우, 위에서 설명한 이유로 남아있는 명령 연산 C = A + B 만 포함될 수 없기 때문에 지시어(1402A)는 완료되었다. 따라서 블록(816)의 제어는 워드가 가득 찼음을 나타내는 플래그를 설정한다. 블록(818)에서 새로운 워드가 필요하고 제어는 블록(803)으로 돌아와 새로운 지시어 (1402B)를 시작한다.
블록(804)에서, 임계 경로는 유일한 남은 노드 인 노드 C이지만, 지시어(1402B)에 명령 연산 C를 포함하면 규칙을 위반하므로 선택되지 않는다. 특히, 노드 C는 글로벌이므로 글로벌 통신을 위한 시간을 허용하려면 명령 작업 A 및 / 또는 B의 마지막 결과에서 적어도 한 클럭 주기를 기다려야 한다. 블록 (804)에서, 프로세서 (400)는 그 다음 최소 임계 경로에서 다른 노드를 찾을 것이다; 그러한 노드가 존재하지 않기 때문에 (노드 C가 마지막 노드 임) 블록(806)에서 노드가 할당되지 않는다. 유사하게, 블록(808)에서 노드가 할당되지 않고, 블록(810)에서 종속 노드가 할당되지 않고, 그래프가 업데이트되고 (변경 없음), 지시어(1402B)가 블록 (814)에서 가득 찬 것으로 결정되고 (추가 노드가 진입하지 않음) 플래그가 설정된다. 블록(816)에서 완전한 워드를 나타내기 위해 다음 지시어 (1402C)가 블록(803)에서 생성되고 제어는 다음 노드 할당을 위해 블록 (804)로 돌아간다.
블록(804)에서, 임계 경로는 유일한 나머지 노드 인 노드 C이지만, 이번에는 글로벌 통신을 설명하기 위해 개입 지시어(1402B)가 추가되었기 때문에 어떤 규칙도 위반하지 않는다; 각각의 지시어 워드가 단일 클럭 사이클에 걸쳐 발생하기 때문에, 이 추가 지시어 워드 (1402B)는 지시어 연산 A 및 / 또는 연산 B의 결과가 도달하고 명령 작업 C에 할당된 ALU에 의해 선택 될 수 있도록 충분한 시간을 주기 위해 지시어 연산 C의 실행을 1 클럭 사이클 지연시킨다. 블록(806)에서 명령 연산 C가 ALU에 할당되고 지시어(1402C)에 삽입된다. 편의상, ALU(604)는 명령 작업 C가 ALU(604)에 해당하는 슬롯에 종속되고 배치되는 명령 작업 A의 출력을 생성 한 ALU (602)의 로컬이기 때문에 ALU(604)가 선택될 수 있다.
블록(808) 및 블록(810)에서 종속 노드가 선택되거나 할당되지 않고 (아무것도 남지 않음), 지시어(1402C)는 블록 (812)에서 가득 찬 것으로 결정되고 (모든 노드 할당), 플래그는 블록(814)에서 마지막 슬롯을 지정하도록 설정된다. 워드(1402C)가 워드의 끝인 경우, 프로세스는 블록 (816)에서 완료된 것으로 결정되고 프로세스가 종료된다.
다른 예에서와 같이, 저장 지시어에 대한 다른 포맷이 도 11C-E에 도시 된 바와 같이 사용될 수 있다.
예 5:
예 5는 도 6의 ALU 구성을 사용하고 로컬의 정의는 미러쌍으로 미리 정의되어 있다(예를 들어, ALU(602) 및 ALU(604)는 미러링 된 쌍으로 서로 로컬이고 ALU(614) 및 ALU(616)은 미러링 된 쌍으로 서로 로컬이지만 ALU (602) 및 ALU(614/616)은 인접하는 동안 미러링 되지 않기 때문에 로컬이 아니다.). 4 개의 ALU가 있으므로 각 지시어에는 4 개의 슬롯이 있다. 이 예에서 지시어 세트 5는 다음과 같다.
1: A= R1 +R2
2: B= A+ R3
3: C= B+R4
4: D= R5 + R6
5: E = D + R7
6: F = B + E
명령 세트 4의 분포 그래프는 도 7E에 도시되어 있다.
블록(802)부터 컴파일러는 명령 연산 A = R1 + R2 및 D = R5 + R6을 로컬 연산으로 지정한다. 이는 둘 다 로컬 레지스터 내용 (R1, R2, R5, R6)을 기반으로 수행될 수 있기 때문이다. 명령 작업 A와 D를 로컬로 지정한다고 해서 서로 로컬이라는 의미는 아니다; 반대로, 아래에서 설명하는 것처럼 A와 D를 수행하는 ALU는 로컬 범위를 벗어날 수 있다.
R3의 레지스터 내용을 로컬에서 사용할 수 있기 때문에 명령 연산 B = A + R3도 로컬로 지정되며, 명령 연산 B는 명령 연산 A를 실행하기 위해 할당된 ALU에 로컬 인 ALU에 할당될 수 있다. 마찬가지로 명령 연산 C = B + R4는 로컬로 지정된다. R4의 레지스터 내용을 로컬에서 사용할 수 있기 때문에 명령 연산 C는 명령 연산 B를 실행하기 위해 할당된 ALU에 로컬 인 ALU에 할당될 수 있다. 마찬가지로 명령 연산 E = D + R7은 로컬로 지정된다. R7의 레지스터 내용을 로컬에서 사용할 수 있기 때문에 명령 연산 E는 명령 연산 D에 할당된 ALU에 대해 로컬 ALU에 할당될 수 있다. 명령 연산 C와 E를 실행하는 ALU는 서로 로컬이 아니므로 한 클럭 사이클에서 완료할 수 없는 글로벌 통신이 필요하기 때문에 명령 연산 F = C + E는 글로벌로 지정된다.
블록(803)에서, 프로세서 (400)는 새로운 지시어 (1502A)를 시작한다.
블록(804)에서, 프로세서 (400)는 지시어 (1502A)에서 ALU에 할당할 노드를 선택한다. 비 제한적인 예로서, 도 7E의 노드가 각각 한 단계이면, 명령 동작 A = R1 + R2는 AF (ABCF)로부터의 경로가 가장 많은 단계(4 종속성 그래프) 를 갖기 때문에 블록(902)에서 임계 경로로 결정된다 (반대 예를 들어 어떤 이유로 노드 E에 5 개의 단계가 있는 경우 D-F가 임계 경로 일 수 있다.) 블록(904)에서 명령 작업 A는 규칙을 위반하지 않는 것으로 결정된다. 따라서, 블록(906)에서 노드 A가 할당을 위해 선택된다.
블록 (806)에서, ALU는 노드 A에 상주하는 것으로 명령 연산 A에 대해 선택되고 명령 워드 (1402A)에 배치된다. 이 경우에는 보류중인 규칙이 없으며 프로세서 (400)는 이를 처리할 수 있는 임의의 ALU에 명령 연산 A를 할당할 수 있다. 예를 들어, 도 15A에 도시 된 바와 같은 ALU (602)가 있다.
블록 (808)에서, 프로세서 (400)는 (1) 명령 동작 B가 명령 동작 A에 의존하고, (2) 명령 동작 B가 로컬로 지정되었고, (3) 로컬 ALU (604)가 사용 가능하고, (4) 지시어(1502A)가 가득 차지 않았고, (5) 지시어 작업 A와 B가 한 클럭 사이클에서 완료될 수 있으며, (5) 다른 규칙이 이를 방지하지 않기 때문에 명령 워드(1502A)에 추가될 수 있는 종속 노드로서 노드 B를 식별한다.
프로세서 (400)는 노드 A에 직접 의존하는 다른 노드가 없기 때문에 워드에 추가될 수 있는 다른 종속 노드를 식별하지 않는다. 노드 C는 노드 A에서 B까지 간접적으로 종속된다. 그러나 이 예제에 따라 표준 ALU를 사용하면 클럭 주기에서 3 개의 순차적 작업을 완료할 수 없으며 ALU는 3 개의 입력을 처리하도록 구성되지 않았다. 노드 C에 더 의존하는 모든 노드에도 동일하게 적용된다. (그러나 3 개의 입력을 처리할 수 있는 ALU가 사용 가능하거나 한 클럭 사이클에서 3 개의 순차적 명령 작업이 수행될 수 있는 상황이 존재하는 경우 C는 잠재적으로 같은 워드에 삽입된다.)
블록 (810)에서, 식별된 노드 B의 명령 동작은 그것이 의존하는 ALU(602)에 로컬로서 ALU(604)에 할당되고, 도 14B에 도시 된 바와 같이 그 종속 관계에 따라 지시어 (1402A)에 삽입된다.
블록(812)에서, 여전히 할당이 필요한 노드로부터 할당된 노드를 제거하도록 종속성 그래프가 업데이트된다.
블록(814)에서, 지시어 (1402A)는 2 개의 슬롯이 남아 있고 현재 지시어에 대한 규칙을 위반하지 않는 추가할 노드가 남아 있기 때문에 아직 완료되지 않은 것으로 결정된다. 따라서 제어는 종속성 그래프의 나머지 부분을 고려하기 위해 블록(804)로 돌아간다.
이 시점에서, 이전에 할당된 노드 A 및 노드 B는 더 이상 추가 할당을 고려하지 않는다. 블록 (902)에 따라, 시스템은 가장 긴 남은 임계 경로를 따라 노드를 찾는다. 이 예에서는 명령 연산 D = R5 + R6이다. 워드 (1502A)에 명령 작업 D를 포함하면 (904)의 규칙을 위반하지 않으므로 현재 지시어(1502A)에 할당될 수 있다.
블록(806)에서, 프로세서 (400)는 노드 D의 명령 동작을 ALU에 할당한다. 노드 D는 독립 노드이므로 컴파일러는 아직 사용 중이 아닌 ALU 및 / 또는 다른 로컬 관계의 일부에 이를 할당 할 수 있다. 따라서 ALU(602) 및 ALU(604)는 지시어(1502A)의 사전 할당으로 인해 사용할 수 없지만, 하나는 사용 중이고 다른 하나는 할당되지 않았더라도 프로세서 (400)는 기존 로컬 관계의 일부이므로 둘 중 하나를 피하는 것을 선호할 수 있다. 이 예에서, 프로세서는 도 15C에 도시 된 바와 같이 워드 (1502A)의 슬롯에 대응하는 ALU(614)에 명령 연산 D를 할당한다.
블록 (808)에서, 프로세서 (400)는 (1) 지시어 연산 E가 지시어 연산 D에 의존하고, (2) 지시어 연산 D가 로컬로 지정되었고, (3) 로컬 ALU (616)를 사용할 수 있고, (4) 지시어(1502A)가 가득 차지 않았고, (5) 지시어 연산 D와 E가 한 클럭 사이클에서 완료될 수 있으며, (6) 다른 규칙이 이를 방지하지 않기 때문에 지시어 워드(1502A)에 추가될 수 있는 종속 노드로서 노드 E를 식별한다. 블록 (810)에서, 프로세서 (400)는 도 15D에 도시 된 바와 같이 워드(1502A)의 슬롯에 대응하는 ALU (616)에 지시어 연산 E를 할당한다.
제어는 블록(814)로 넘어가 지시어(1502A)가 완료되었는지 확인한다. 이 경우 지시어(1502A)는 적어도 두 가지 이유로 완료된다. 첫째, 모든 슬롯이 지시어로 채워져 있다는 점에서 (1502A)라는 워드가 꽉 찬 경우이다. 둘째, 유일하게 남은 나머지 명령 작업 C = B + R3 및 F = C + E 에 있어서 위에서 설명한 이유로 명령 작업 C를 포함 할 수 없는 경우 및 명령 작업 F가 지정된 전역으로 종속 된 로컬 명령 연산과 동일한 지시어에 존재할 수 없어 포함 할 수 없는 경우이다. (둘은 병렬로 실행될 수 없다). 블록 (816)에서의 제어는 워드가 가득 찼음을 나타내는 플래그를 설정한다. 블록 (818)에서, 프로세서 (400)는 명령 동작이 여전히 할당을 위해 남아 있다고 결정하므로, 도 15E에 도시 된 바와 같이 블록 (803)에서 새로운 워드 (1502B)가 생성된다.
블록(804)에서, 프로세서 (400)는 임계 경로에서 가장 낮은 다음 노드를 C로 식별한다. 워드(1502B)에 명령 작업 C를 포함하면 규칙을 위반하지 않으므로 블록(806)에서 명령 작업 C가 현재 지시어(1502B)에 할당될 수 있다.
지시어 연산 C는 지시어 연산 B에 종속되고 지시어 연산 B가 할당된 ALU에 국부적이므로, 프로세서 (400)는 바람직하게는 지시어 연산 B가 할당된 ALU에 국부적인 ALU에 지시어 연산 C를 할당한다. 명령 연산 B가 ALU (604)에 할당되고 ALU (602)가 로컬이므로 ALU (602)가 선호되는 선택이다. 프로세서 (400)는 도 15E에 도시 된 바와 같이 워드(1502B)의 슬롯에 대응하는 명령 연산 C를 ALU (602)에 할당한다.
블록(808)에서, 컴파일러는 동일한 워드에 포함될 수 있는 C로부터 종속 노드를 찾는다. 노드 F는 C에 종속된다 (F = C + E). 그러나 위에서 설명한대로 지시어 연산 F는 글로벌 통신을 필요로 하므로 지시어 연산 C와 동일한 지시어에 배치되면 규칙을 위반하게 된다. 따라서 명령 연산 F는 지시어(1502B)에 추가될 수 없다. 마찬가지로 노드 F에 종속된 추가 종속 노드는 같은 이유로 추가될 수 없다.
블록(812)에서 종속성 그래프는 노드 C의 명령 동작의 할당을 설명하도록 조정된다.
블록(814)에서, 워드(1502B)는 완료된 것으로 간주된다. 슬롯이 남아 있어도 나머지 노드 F를 포함하면 규칙 위반이 된다. 따라서 블록(816)에서 플래그가 설정되고 블록(818)에서 새로운 지시어(1502C)가 필요하며 이는 (803)에서 생성된다.
블록(804)에서, 임계 경로는 유일한 남은 노드 인 노드 F이다. 블록 (806)에서 지시어(1502C)에 포함하기 위한 선택 옵션이 제한된다. 이 경우 사용 가능한 유일한 옵션은 ALU(604)이다. 그 이유는 여러 상황에서 비롯된다. 첫째, F = C + E를 사용하는 경우 명령 연산 E는 (1502A) 이전에 두 개의 지시어였으므로 E의 결과는 중간 지시어 (1402B)에서 클럭 사이클을 가져야 필요한 곳으로 전역으로 이동한다. 둘째, ALU (604)는 지시어 연산 C를 수행한 ALU (602)에 로컬이므로 지시어 연산 C의 결과는 지시어 연산 F를 제공하기 위해 로컬에서 사용할 수 있다. 따라서 명령 연산 F가 (604)에 할당되면 명령 연산 C의 출력을 로컬로 수신하고 명령 연산 E의 출력을 전역적으로 수신할 수 있다. 할당은 도 15F에 도시 되어 있다. 그 후, 지시어 (1502C)는 위에서 설명한 방식으로 닫힌다.
대조적으로, 다른 모든 ALU는 C의 출력을 생성하는 ALU (602)에 전역 적이기 때문에 지시어(1502C)의 다른 ALU는 명령 연산 F를 수용할 수 없다. ALU(604)가 어떤 이유로 지시어(1502C)에서 사용할 수 없는 경우, 프로세스는 새로운 지시어(1502D)를 생성하기 위해 다시 순환해야 하며, 주어진 상황에서 명령 작업 F는 그림 15G와 같이 임의의 슬롯 / ALU에 배치 될 수 있다.
위의 예에서, 각 명령 동작은 하나의 클럭 사이클에서 완료되는 것으로 설명된다. 그러나 한 클럭 사이클에서 완료할 수 없는 명령 작업이 많으므로 해당 명령 작업의 결과가 다음 지시어에 대해 준비되지 않을 수 있다. 프로세서 (400)는 명령 동작이 완료되는 데 필요한만큼의 클럭 사이클 동안 새로운 워드에 종속 노드의 삽입을 지연시킴으로써 이를 설명한다. 예를 들어, 예 5에서 명령 연산 D가 완료하는 데 2 개의 전체 클럭 사이클이 필요한 경우 명령 연산 E는 워드(1502A)에 삽입되지 않고 대신 도 15H에 표시된 대로 명령 워드(1502C)까지 삽입을 기다려야 한다. ALU는 명령 연산 E의 출력을 생성 한 ALU에 로컬이고 명령 연산 C의 출력을 생성 한 ALU에 전역이므로 명령 연산 F는 ALU(614)의 지시어(1504)에만 삽입될 수 있다. 어떤 이유로 (614)를 사용할 수 없는 경우 명령 연산 F를 새 워드 (1502E) 에 배치해야 한다(보이지 않음)
도 15A-15H는 지시어 (1502)에 대해 매핑 된 지시어 형식을 사용했다. 그러나 위에서 논의한 바와 같이, 슬롯과 관련된 개별 명령 연산이 ALU 식별자를 갖는 경우에는 그렇지 않다. 도 15I 및 도 15J는 지시어 형식의 비 제한적인 예를 보여준다.
위의 프로세스는 최적화를 위해 한 번 또는 여러 번 실행될 수 있다. 컴파일러 노력의 전반적인 목표는 지시어 수를 최소화하는 것이다. 경우에 따라 프로세스를 엄격하게 준수해도 목표를 충족하지 못할 수 있다. 예를 들어, 특정 슬롯에 특정 지시어를 배치하기로 한 이전 결정은 이후 지시어에 삽입할 수 있는 지시어에 영향을 주어 전체적으로 최적화되지 않은 지시어 세트를 생성할 수 있다. 예를 들어, 특정 독립 노드가 워드의 마지막 사용 가능한 슬롯에 배치되면 종속 명령 노드가 다른 지시어에 강제로 들어갈 수 있다. 대신 해당 특정 독립 노드와 해당 종속 노드가 동일한 지시어에 있고 기록된 마지막 슬롯이 다른 독립 지시어 노드에 예약되어 있는 것이 최적 일 수 있다. 다른 예에서, 위의 예 1-5에서, 많은 ALU가 사용되지 않으며, 최적화 동안 (예 : 블록 (804)에서 및 / 또는 초기 ALU 할당 완료 후) 이 빈 슬롯 중 일부에 나중 명령 연산을 삽입하는 것이 가능할 수 있다.
최적화 프로세스의 특정 목표는 글로벌 통신의 수를 최소화하는 것이다.
따라서 최적화 고려 사항은 도 8의 흐름도에서 규칙으로 간주될 수 있다. 예를 들어, 일반적으로 다른 규칙은 명령을 슬롯에 배치하는 것을 허용하지만, 그러한 배치가 프로그램의 전체 실행에 최적이 아니라는 사실을 발견하면 특정 슬롯에 명령을 포함하지 않기 위해 해당 규칙을 재정의 할 수 있다. 그 반대는 기본 규칙 세트를 적용할 때 슬롯이 비어 있는 경우 빈 슬롯에 대해 참이지만 최적화는 다른 지시어로 채워야 함을 나타낸다. (아마도 그래프의 먼 관련되지 않은 지점에서) 보장을 위반하지 않고 최적화 고려 사항이 규칙 세트를 능가 할 수 있다.
지시어에 대한 지시어 산의 할당은 레지스터 할당 전후에 수행될 수 있다. 특히, ALU가 처리할 값을 제공할 수 있는 레지스터 수는 한정되어 있다. 그러나 프로그램을 컴파일하는 초기 단계에서는 레지스터 수에 제한이 없다고 가정할 수 있으며 나중에 최적화 단계로 레지스터 수를 제한할 수 있다. 따라서 도 8의 방법론은 레지스터 할당 전에 수행될 수 있다. 나중에 레지스터가 고정된 것으로 간주되면 레지스터 할당 충돌에 대한 응답으로 변경하기 위해 프로세스를 적어도 부분적으로 다시 실행할 수 있다.
위에서 언급한 바와 같이, 프로세서 (400)의 각 코어는 자체 데이터 경로를 가질 수 있다. 따라서 각 데이터 경로에 대해 별도의 지시어를 생성하고 특정 코어에서 동시에 실행할 수 있다.
프로그램이 지시어 (1002)로 컴파일되면, 프로세서 (400)는 당 업계에 알려진 방식으로 지시어 (1002A-n)를 순차적으로 실행할 수 있다. 각 지시어의 지시어 연산은 병렬로 수행할 수 있으며 지시어는 컴파일 된 순서로 실행된다.
위에서 언급 한 바와 같이, 블록 (802)에서 로컬 / 글로벌의 지정은 완전히 정확하지 않을 수 있으며, 따라서 지시어 및 / 또는 ALU에 특정 명령 연산을 할당하면 위반이 발생할 수 있다. 실행 중에 프로세서 (400)의 스케줄러 (410)는 실시간으로 위반을 식별한다. 예를 들어, 지시어 연산이 이전 지시어에서 로컬로 컴파일 되었지만 위반이 발생하는 경우, 스케줄러 (410)는 글로벌 신호가 목적지에 도달하는 시간을 제공하기 위해 하나 이상의 클럭 사이클만큼 지시어의 실행을 지연시킬 수 있다.
프로세서 (400)에 의한 실행 단계의 실시예가 도 16에 도시 되어있다. 블록 (1602)에서, 다음 지시어가 선택된다 (제1 실행에 대한 제1 지시어가 됨). 블록(1604)에서, 프로세서 (400)는 선택된 지시어를 분석하여 그 실행이 어떤 식으로든 보증을 위반하는지 확인한다. 그렇지 않은 경우, 프로세서(400)은 블록(1608)에서 지시어를 실행한다. 위반이 있는 경우, 블록(1606)의 프로세서 (400)는 위반이 제거되는 데 필요한만큼의 클럭 사이클만큼 실행 프로세스를 지연한다. 즉, 다음 지시어를 실행하기 전에 글로벌 통신에 2 개의 클럭 사이클이 필요한 경우 프로세서(400)은 지시어 실행을 위해 블록(1608)을 계속하기 전에 두 클럭 사이클 동안 실행을 지연한다. 블록(1610)의 프로세서 (400)는 실행된 지시어가 마지막 워드인지 여부를 결정하고, 그럴 경우 프로세스가 종료되고 그렇지 않은 경우 제어는 다음 지시어에 대해 (1502)로 돌아간다. 지연의 행위는 행동을 취하지 않는 것 (즉, 지시어를 보내지 않음), 명령 동작이 없는 버블 지시어를 생성하는 것, 및 / 또는 ALU가 어떤 행동도 취하지 않도록 해당 클럭 사이클 동안 명령 동작을 포함하는 지시어를 생성하는 것일 수 있다. 본 발명은 지연이 실행되는 방식의 특성에 제한되지 않는다.
본 발명의 실시예는 확장 가능하다. 위에서 설명한 것처럼 그림 6은 4 개의 ALU가있는 데이터 경로를 보여준다. 도 17은 경로 (1704)에 의해 연결된 8 개의 ALU (1702)가 있는 데이터 경로를 보여준다. 도 18은 경로 (1804)에 의해 연결된 16 개의 ALU (1802)를 갖는 데이터 경로를 보여준다. 데이터 경로 내의 ALU 수는 프로세서 (400)의 크기, 모양 및 원하는 비용에 의해서만 제한될 수 있다.
위에서 논의된 바와 같이, ALU는 복잡하거나 단순 할 수 있으며, 데이터 경로는 각각 적어도 하나를 포함하는 경향이 있다. 도 6, 도 17 및 도 18에서, 구성이 7 개의 단순 ALU (1902) 및 하나의 복합 ALU (1904)를 포함하는 도 19에 도시 된 바와 같이 비 제한적인 예에 의해 일부 ALU는 복합적일 수 있다. 다른 실시예에서, 복잡한 ALU(2004)는 도 20에 도시 된 바와 같이 미러링 된 로컬 ALU(2002)에 전역적으로 제공되고 이용 가능할 수 있다.
이제 도 21을 참조하면, 본 발명의 다른 실시예가 도시 되어있다. 이 실시예에서, 단순 ALU(2102) 및 ALU(2104)의 미러링 된 ALU 쌍은 복합 ALU(2106)과 일치한다. 경로 (2108)과 함께 ALU(2102) 및 (2104)는 도 6과 관련하여 설명된 것과 동일하다. 또한 ALU(2104)는 ALU(2102)를 향하는 면과 다른 면에 출력을 가지며, 출력은 복잡한 ALU(2106)의 면에 공급된다. ALU (2106)의 출력은 ALU(2102) 또는 ALU(2104)의 입력으로의 전송을 허용하는 경로 (2108)로 돌아갈 수 있다; 추가적으로 및 / 또는 대안으로, ALU(2106)의 출력은 ALU(2104)로 직접 이동할 수 있다.
위의 실시예에서 사용될 수 있는 로컬의 다양한 정의가 있다. 비 제한적인 예로서, 로컬은 ALU(2102/2104), ALU(2104/2106) 및 ALU(2104) (경로 2108 포함) 간의 임의의 통신으로 정의될 수 있다. 로컬은 ALU (2102/2104)와 ALU(2104)에서 ALU(2106)까지의 출력 사이의 모든 통신으로 정의될 수 있지만 ALU(2106)에서 ALU(2102) 또는 ALU(2104) 로의 출력은 그렇지 않다 (거리는 글로벌로 인정될 만큼 충분히 길어짐).
도 22는 도 5에 도시 된 것과 같은 미러링 된 ALU 쌍보다 상세한 레이아웃의 예를 보여주며, 일반적으로 (2255)로 표시된 한 쌍의 미러링 된 ALU (2200 및 2250)는 서로 마주하고 피연산자 선택 유닛 및 레지스터의 집합에 의해 분리된다(이하 피연산자 선택 네트워크/레지스터). 이 실시예에 대한 로컬의 정의는 피연산자 선택 네트워크 (2255)를 통해 ALU (2200) 및 ALU (2250)에서 서로 통신 사이의 거리 일 수 있으며, 이러한 거리 내에 ALU (2200) 및 / 또는 ALU (2250) 에 제공 될 레지스터에 존재하는 모든 값이 포함된다. 로컬의 정의는 ALU (2200) 또는 ALU(2250) 과의 통신을 제외하거나 포함할 수 있다.
도 22에서, 피연산자 A의 최하위 비트는 커플링 (2203)을 통해 피연산자 선택 네트워크 (2255)로부터 ALU(2200)에 의해 수신된다. 피연산자 A의 최상위 비트는 커플링(2201)을 통해 피연산자 선택 네트워크 (2255)로부터 ALU(2200)에 의해 수신된다. 피연산자 B의 최하위 비트는 커플 링(2204)를 통해 피연산자 선택 네트워크 (2255)로부터 ALU(2200)에 의해 수신된다. 피연산자 B의 최상위 비트는 커플링(2202)를 통해 피연산자 선택 네트워크(2255)로부터 ALU(2200)에 의해 수신된다. ALU(2200)의 최하위 결과 비트 (A + B)는 커플링(2211)을 통해 피연산자 선택 네트워크 (2255)로 전송된다. ALU(2200)의 최상위 결과 비트 (A + B)는 커플링(2210)을 통해 피연산자 선택 네트워크 (2255)로 전송된다.
피연산자 C의 최하위 비트는 커플링(2253)을 통해 피연산자 선택 네트워크(2255)로부터 ALU(2250)에 의해 수신된다. 피연산자 C의 최상위 비트는 커플링(2251)을 통해 피연산자 선택 네트워크(2255)로부터 ALU (2200)에 의해 수신된다. 피연산자 D의 최하위 비트는 커플링(2254)를 통해 피연산자 선택 네트워크 (2255)로부터 ALU(2200)에 의해 수신된다. 피연산자 D의 최상위 비트는 커플링(2252)를 통해 피연산자 선택 네트워크 (2255)로부터 ALU(2200)에 의해 수신된다. ALU(2200)의 최하위 결과 비트 (C + D)는 커플링(2261)을 통해 피연산자 선택 네트워크 (2255)로 전송된다. ALU (2200)의 최상위 결과 비트 (C + D)는 커플링(2260)을 통해 피연산자 선택 네트워크 (2255)로 전송된다.
도 23은 도 21에 도시 된 바와 같은 복합 ALU와 결합 된 미러링 된 ALU 쌍의 보다 상세한 레이아웃을 도시하며, 일반적으로 (2355)로 표시되고 ALU(2300)이 복합 ALU(2398)에 출력을 전송하는 선택 장치 (위에서 논의 된 215/220/221/222 참조) 및 레지스터 (이하 "연산자 선택 네트워크 / 레지스터") 한 쌍의 미러링 된 ALU (2300 및 2350)가 서로 마주하고 피연산자의 집합에 의해 분리된다. 이 실시예의 로컬 정의는 인접한 ALU 사이의 거리에 의해 정의될 수 있다. 따라서 로컬 통신에는 (a) 피연산자 선택 네트워크 (2355)를 통해 ALU(2300) 및 ALU(2350)에서 서로 통신 (이러한 거리 내에 ALU(2300) 및 / 또는 ALU(2350)에 제공 될 레지스터에 존재하는 모든 값 포함), (b) ALU(2300)에서 복합 ALU(2398) 로의 통신 및 (c) 복합 ALU(2398)에서 ALU(2300) 및 / 또는 ALU(2350)으로 피연산자 스위치 네트워크 / 레지스터(2355)를 통한 통신 등이 포함된다. 이러한 정의에서 ALU(2350)에서 복잡한 ALU(2398)로의 통신은 인접하지 않기 때문에 전역적이다(ALU(2350)의 출력은 ALU(2398)에 도달하기 위해 ALU(2300)을 통해 이동해야 함). 로컬의 정의는 ALU(2200) 또는 ALU(2250)의 통신을 제외하거나 포함할 수 있다.
(2300)과 (2350) 사이의 커플링 및 연결은 도 22에서와 유사하다. ALU(2398)는 커플링(2355)을 통해 피연산자 선택 네트워크에 결과를 제공한다. ALU(2398) 가산기 경로는 최하위 비트 ALU(2320) 및 최고 유효 비트 ALU(2321)로 분할되어 추가 작업 속도를 높인다. 16 비트 A[15:0] + B[15:0]에 대한 합계를 계산하는 대신 A[7:0] + B[7:0] 와 A[15:8] + B[15:8] 와 A[7:0] + B[7:0]를 계산하는 것으로 작업은 분할된다. 이진수에는 0과 1의 두 가지 값만 있다. 따라서 A [15 : 8] + B [15 : 8] + 0과 A [15 : 8] + B [15 : 8] + 1을 계산할 수 있다. 그리고 (2320)에서 계산 된 A [7 : 0] + B [7 : 0]의 carry를 사용하여 (2330)이 0 인 경우 결과 A [15 : 8] + B [15 : 8] + 0을 선택한다. 그리고 (2330)이 1인 경우 결과 A [15 : 8] + B [15 : 8] + 1 을 선택한다. (2322)에 의해 선택된 후 (2310)을 통해 피연산자 선택 (2355) 네트워크로 전송 된 A + B의 결과에 대한 선택은 A [15 : 8] + B [15 : 8] + 0이고 (2341)의 결과는 A [15 : 8] + B [15 : 8] + 0, (2322) 선택 (2340)은 (2330)은 0이고 (2330)이 1이면 (2341)을 선택한다. (2313)에도 동일한 개념이 적용된다.
A[15:8] + B[15:8] + 0 와 A[15:8] + B[15:8] + 1 은 A[7:0] + B[7:0] 의 carry를 모른 채 계산 될 수 있기 때문에 (2330)과 동일한 신호인 캐리 (2330)을 기다리지 않고 (2330)(2332는 동일한 신호)을 기준으로 결과를 미리 계산하고 최종 결과를 선택할 수 있다. 이 때 (2330)은 ALU의 중간에서 라우팅 된다.
도 24는 동일한 레이아웃의 다른 ALU와 결합된 도 23의 상위 레벨 레이아웃을 도시한다. 오퍼랜드 스위치 네트워크 / 레지스터 (215) 내의 오퍼랜드 스위치 유닛은 데이터 및 제어 신호가 다양한 ALU 그룹에 도달하는 경로이다. 그림 23과 관련하여 논의된 로컬의 정의에 따라 이러한 데이터 및 제어 신호는 일반적으로 글로벌로 간주되지만, 특정 신호는 적절한 정의에 따라 로컬 일 수 있다.
일부 실시예에서, 상이한 ALU 또는 상이한 환경에 대해 상이한 로컬 정의가 있을 수 있다. 클럭 속도는 작동 시간과 전송 시간의 최악의 조합과 오버 헤드 요인을 고려할 수 있을 만큼 충분히 길게 설정할 수 있다.
따라서, 명세서 및 도면은 제한적인 의미가 아닌 예시적인 의미로 간주되어야 한다. 그러나, 청구 범위에 기재된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음이 명백하다.

Claims (24)

  1. 클럭 속도 및 클럭 사이클(clock cycle)을 가지는 컴퓨터 하드웨어 장치에 있어서,
    제1 산술 논리 유닛, 제2 산술 논리 유닛 및 제3 산술 논리 유닛(arithmetic logic units; ALU)들을 포함하는 데이터 경로 내의 복수의 ALU들, - 상기 제2 ALU는 제1 ALU의 국부적으로 미리 정의된 범위 내에 있고, 상기 제3 ALU는 상기 제1 ALU의 국부적으로 미리 정의된 범위 밖에 있고, 상기 국부적으로 미리 정의된 범위는 상기 데이터 경로보다 작음 -;
    상기 컴퓨터 하드웨어 장치는 작업들을 수행하기 위해 비-일시적 메모리(non-transitory memory)에 저장된 일련의 명령들(instructions)을 실행하도록 프로그래밍되고, 상기 작업들은
    제1 명령 동작을 상기 제1 ALU에 제1로 할당하는 단계;
    제1 명령 동작의 출력에 직접적으로 의존하는 입력을 가지는 제2 명령 동작에 대해, 상기 제2 명령 동작을 위한 모든 입력들이 상기 제1 ALU로부터 국부적으로 미리 정의된 범위 내에서 이용 가능한지 여부를 제1로 결정하는 단계;
    상기 제1 결정의 적어도 긍정적인 결과에 응답하여, 상기 제2 명령 동작을 상기 제2 ALU에 제2로 할당하는 단계;
    상기 제1 결정의 부정적인 결과에 응답하여,
    상기 제1 명령 동작과 상기 제2 명령 동작의 실행 사이에 적어도 하나의 클럭 사이클의 정지가 발생하게 하는 단계; 및
    상기 제2 명령 동작을 상기 복수의 ALU들 중 ALU에 세 번째로 할당하는 단계
    를 포함하는 컴퓨터 하드웨어 장치.
  2. 제1항에 있어서,
    상기 컴퓨터 하드웨어 장치의 클럭 속도는 국부적으로 미리 정의된 범위 내에 있는 상기 복수의 ALU들 중 소비자 ALU와 생산자 ALU 사이의 최악 전송 시간(worst case time of transmission)에 의해 부분적으로 정의되는, 장치.
  3. 제1항에 있어서,
    상기 국부적으로 미리 정의된 범위는 2 개의 인접한 ALU들 사이의 거리인, 장치.
  4. 제3항에 있어서,
    상기 국부적으로 미리 정의된 범위는 서로 마주 보는 2 개의 인접한 ALU들의 입력 및 출력에 의해 추가로 정의되는, 장치.
  5. 제1항에 있어서,
    상기 제1 ALU 및 제2 ALU는 동일하고, 상기 국부적으로 미리 정의된 범위는 그 자체에 대한 ALU인, 장치.
  6. 제1 항에 있어서,
    상기 데이터 경로에 있는 복수의 ALU들은 상기 제1 ALU에서 로컬로 사전 정의된 범위 밖에 있는 제3 ALU를 포함하는, 상기 장치의 클럭 주기가 제3 ALU가 (a) 제1 ALU에서 생성된 입력을 수신 및 선택하고 (b) 제2 명령 동작을 실행하도록 보장하는 데 필요한 시간보다 짧은, 장치.
  7. 제1 항에 있어서,
    두번째로 상기 제1 명령 작업 및 제2 명령 작업이 장치의 적어도 하나의 클럭 사이클에 의해 실행 시간에 이미 분리되었는지 여부를 결정하고, 상기 제2 결정의 부정적 결과에 응답하여, 제1 명령 동작 및 제2 명령 동작의 실행 사이에 장치의 적어도 하나의 클럭 사이클의 지연을 삽입하는 추가적으로 보장하는 구성을 포함하는, 장치.
  8. 제1 항에 있어서,
    상기 제1 할당 및 제2 할당은 상기 장치의 동일한 클럭 사이클 동안 실행되도록 상기 제1 명령 동작 및 제2 명령 동작을 설정하는 단계를 더 포함하는 장치.
  9. 적어도 제1 ALU, 제2 ALU 및 제3 ALU들을 포함하는 데이터 경로 내에 있는 복수의 산술 논리 유닛(ALU)들을 가지는 장치에서 실행하기 위한 일련의 명령 작업을 준비하는 방법에 있어서, 상기 제2 ALU는 제1 ALU의 국부적으로 미리 정의된 범위 내에 있고, 상기 제3 ALU는 상기 제1 ALU의 국부적으로 미리 정의된 범위 밖에 있고, 상기 국부적으로 미리 정의된 범위는 상기 데이터 경로보다 작고,
    상기 방법은,
    제1 명령 동작을 상기 제1 ALU에 제1로 할당하는 단계;
    제1 명령 동작의 출력에 직접적으로 의존하는 입력을 가지는 제2 명령 동작에 대해, 상기 제2 명령 동작을 위한 모든 입력들이 상기 제1 ALU로부터 국부적으로 미리 정의된 범위 내에서 이용 가능한지 여부를 제1로 결정하는 단계;
    상기 제1 결정의 적어도 긍정적인 결과에 응답하여, 상기 제2 명령 동작을 상기 제2 ALU에 제2로 할당하는 단계;
    상기 제1 결정의 부정적인 결과에 응답하여,
    상기 제1 명령 동작과 상기 제2 명령 동작의 실행 사이에 적어도 하나의 클럭 사이클의 정지가 발생하게 하는 단계; 및
    상기 제2 명령 동작을 상기 복수의 ALU들 중 ALU에 세 번째로 할당하는 단계
    를 포함하는 방법.
  10. 제9항에 있어서,
    상기 장치의 클럭 속도는 부분적으로 상기 국부적으로 미리 정의된 범위 내의 복수의 ALU들의 소비자 ALU와 생산자 ALU 사이의 최악의 전송 시간(a worst case time of transmission)에 정의되는, 방법.
  11. 제9항에 있어서,
    상기 국부적으로 미리 정의된 범위는 서로 마주 보는 2 개의 인접한 ALU들 사이의 거리인, 방법.
  12. 제11항에 있어서,
    상기 국부적으로 미리 정의된 범위는 서로 마주 보는 2 개의 인접한 ALU들의 입력 및 출력에 의해 추가로 정의되는, 방법.
  13. 제9항에 있어서,
    상기 제1 ALU 및 제2 ALU들은 동일하고, 상기 국부적으로 미리 정의된 범위는 그 자체에 대한 ALU 인, 방법.
  14. 제9항에 있어서,
    상기 장치의 클럭 주기는 상기 제3 ALU가 (a) 상기 제1 ALU에서 생성된 입력을 수신 및 선택하고 (b) 상기 제2 명령 작업을 실행하도록 보장하는 데 필요한 시간보다 짧은, 방법.
  15. 제9항에 있어서,
    두 번째로 상기 제1 명령 작업 및 제2 명령 작업이 상기 장치의 적어도 하나의 클럭 사이클에 의해 실행 시간에 이미 분리되었는지 여부를 결정하고, 상기 제2 결정의 부정적 결과에 응답하여, 상기 제1 명령 동작 및 제2 명령 동작의 실행 사이에 장치의 적어도 하나의 클럭 사이클의 지연을 삽입하는 추가적으로 보장하는 구성을 포함하는, 방법.
  16. 제9항에 있어서,
    상기 제1 할당 및 제2 할당은 상기 장치의 동일한 클럭 사이클 동안 실행되도록 상기 제1 명령 동작 및 제2 명령 동작을 설정하는 단계를 더 포함하는, 방법.
  17. 장치에 명령 동작들(instructions operations)을 할당하기 위한 동작들을 수행하는 명령들을 저장하는 비-일시적인 컴퓨터 판독 가능한 매체에 있어서,
    상기 장치는 클럭 속도 및 클럭 사이클을 가지며 적어도 3 개의 ALU를 포함하는 데이터 경로 내에 복수의 ALU들 (ALU)을 가지고,
    상기 동작들은,
    제1 명령 동작을 상기 제1 ALU에 제1로 할당하는 단계;
    제1 명령 동작의 출력에 직접적으로 의존하는 입력을 가지는 제2 명령 동작에 대해, 상기 제2 명령 동작을 위한 모든 입력들이 상기 제1 ALU로부터 국부적으로 미리 정의된 범위 내에서 이용 가능한지 여부를 제1로 결정하는 단계;
    상기 제1 결정의 적어도 긍정적인 결과에 응답하여, 상기 제2 명령 동작을 상기 제2 ALU에 제2로 할당하는 단계;
    상기 제1 결정의 부정적인 결과에 응답하여,
    상기 제1 명령 동작과 상기 제2 명령 동작의 실행 사이에 적어도 하나의 클럭 사이클의 정지가 발생하게 하는 단계; 및
    상기 제2 명령 동작을 상기 복수의 ALU들 중 하나의 ALU에 세 번째로 할당하는 단계,
    를 포함하는 컴퓨터 판독 가능한 매체.
  18. 제17항에 있어서,
    상기 장치의 클럭 속도는 부분적으로 상기 로컬 사전 정의된 범위 내의 상기 복수의 ALU들의 소비자 ALU와 생산자 ALU 사이의 최악의 전송 시간에 정의되는, 장치.
  19. 제17항에 있어서,
    상기 국부적으로 미리 정의된 범위는 2개의 인접한 ALU들 간의 거리인, 장치.
  20. 제19항에 있어서,
    상기 국부적으로 미리 정의된 범위는 상기 서로 마주 보는 2 개의 인접한 ALU들의 입력들 및 출력들에 의해 더 정의되는, 장치.
  21. 제17항에 있어서,
    상기 제1 ALU 및 제2 ALU는 동일하고, 상기 국부적으로 미리 정의된 범위는 그 자체에 대한 ALU 인, 장치.
  22. 제17 항에 있어서,
    데이터 경로의 상기 복수의 ALU들은 제1 ALU로부터 상기 국부적으로 미리 정의된 범위 밖에 있는 제3 ALU를 포함하고;
    상기 장치의 상기 클럭 주기는 제3 ALU가 (a) 제1 ALU에서 생성된 입력을 수신 및 선택하고 (b) 제2 명령 작업을 실행하도록 보장하는데 필요한 시간보다 짧은, 장치.
  23. 제17항에 있어서,
    상기 보장하는 단계는:
    상기 제1 명령 동작 및 제2 명령 동작이 실행 시점에서 장치의 적어도 하나의 클럭 사이클에 의해 이미 분리되었는지 여부를 결정하는 제2 단계; 및
    상기 제2 결정의 부정적인 결과에 응답하여, 제1 명령 동작 및 제2 명령 동작의 실행 사이에 장치의 적어도 하나의 클럭 사이클의 지연을 삽입하는 단계를 포함하는, 장치.
  24. 제17항에 있어서,
    상기 제1 할당 및 제2 할당은 상기 장치의 동일한 클럭 사이클 동안 실행되도록 상기 제1 명령 동작 및 제2 명령 동작을 설정하는 단계를 더 포함하는, 장치.
KR1020217007490A 2018-08-16 2019-08-15 명령 작업들의 동시 실행을 위한 명령어 생성 및 실행을 위한 시스템 및 방법 KR20210106404A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020227011196A KR20220047397A (ko) 2018-08-16 2019-08-15 프로세서를 위한 산술 논리 유닛 레이아웃
KR1020217031381A KR20210124513A (ko) 2018-08-16 2019-08-15 명령어를 채우기 위한 시스템 및 방법

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201862764767P 2018-08-16 2018-08-16
US62/764,767 2018-08-16
US16/540,328 2019-08-14
US16/540,328 US20200057645A1 (en) 2018-08-16 2019-08-14 System and method for location aware processing
PCT/US2019/046630 WO2020037112A1 (en) 2018-08-16 2019-08-15 System and method for location aware processing

Related Child Applications (2)

Application Number Title Priority Date Filing Date
KR1020217031381A Division KR20210124513A (ko) 2018-08-16 2019-08-15 명령어를 채우기 위한 시스템 및 방법
KR1020227011196A Division KR20220047397A (ko) 2018-08-16 2019-08-15 프로세서를 위한 산술 논리 유닛 레이아웃

Publications (1)

Publication Number Publication Date
KR20210106404A true KR20210106404A (ko) 2021-08-30

Family

ID=69524071

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020217031381A KR20210124513A (ko) 2018-08-16 2019-08-15 명령어를 채우기 위한 시스템 및 방법
KR1020217007490A KR20210106404A (ko) 2018-08-16 2019-08-15 명령 작업들의 동시 실행을 위한 명령어 생성 및 실행을 위한 시스템 및 방법
KR1020227011196A KR20220047397A (ko) 2018-08-16 2019-08-15 프로세서를 위한 산술 논리 유닛 레이아웃

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020217031381A KR20210124513A (ko) 2018-08-16 2019-08-15 명령어를 채우기 위한 시스템 및 방법

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020227011196A KR20220047397A (ko) 2018-08-16 2019-08-15 프로세서를 위한 산술 논리 유닛 레이아웃

Country Status (5)

Country Link
US (7) US11144497B2 (ko)
EP (3) EP3837599A4 (ko)
KR (3) KR20210124513A (ko)
CN (3) CN114691600A (ko)
WO (1) WO2020037112A1 (ko)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US10853079B2 (en) * 2018-09-26 2020-12-01 Side Effects Software Inc. Dependency-based streamlined processing
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
WO2023161725A1 (en) * 2022-02-28 2023-08-31 Neuroblade Ltd. Processing systems
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
CN116796816B (zh) * 2023-08-25 2024-05-14 深圳比特微电子科技有限公司 处理器、计算芯片和计算设备

Family Cites Families (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5963746A (en) * 1990-11-13 1999-10-05 International Business Machines Corporation Fully distributed processing memory element
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US5488729A (en) 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
US5227989A (en) 1991-09-27 1993-07-13 Chips And Technologies, Inc. Arithmetic logic unit for microprocessor with sign bit extend
US5457644A (en) * 1993-08-20 1995-10-10 Actel Corporation Field programmable digital signal processing array integrated circuit
JP3623840B2 (ja) * 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
US6256745B1 (en) 1998-06-05 2001-07-03 Intel Corporation Processor having execution core sections operating at different clock rates
US6230303B1 (en) 1997-02-24 2001-05-08 Lucent Technologies Inc. Proximity-based cluster allocation for hardware-software co-synthesis of heterogeneous distributed embedded systems
US6065126A (en) * 1998-02-02 2000-05-16 Tran; Thang Minh Method and apparatus for executing plurality of operations per clock cycle in a single processing unit with a self-timed and self-enabled distributed clock
US6609189B1 (en) 1998-03-12 2003-08-19 Yale University Cycle segmented prefix circuits
EP3073388A1 (en) * 1998-03-18 2016-09-28 Koninklijke Philips N.V. Data processing device and method of computing the cosine transform of a matrix
US6324639B1 (en) * 1998-03-30 2001-11-27 Matsushita Electric Industrial Co., Ltd. Instruction converting apparatus using parallel execution code
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
FR2793628A1 (fr) 1999-05-11 2000-11-17 Koninkl Philips Electronics Nv Systeme de transmission, recepteur et reseau d'interconnexion
US6766440B1 (en) 2000-02-18 2004-07-20 Texas Instruments Incorporated Microprocessor with conditional cross path stall to minimize CPU cycle time length
GB2370381B (en) * 2000-12-19 2003-12-24 Picochip Designs Ltd Processor architecture
US7337306B2 (en) * 2000-12-29 2008-02-26 Stmicroelectronics, Inc. Executing conditional branch instructions in a data processor having a clustered architecture
US10331194B2 (en) * 2001-03-05 2019-06-25 Pact Xpp Schweiz Ag Methods and devices for treating and processing data
US7996827B2 (en) * 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US7080365B2 (en) * 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
US6920545B2 (en) 2002-01-17 2005-07-19 Raytheon Company Reconfigurable processor with alternately interconnected arithmetic and memory nodes of crossbar switched cluster
US7093255B1 (en) 2002-05-31 2006-08-15 Quicksilver Technology, Inc. Method for estimating cost when placing operations within a modulo scheduler when scheduling for processors with a large number of function units or reconfigurable data paths
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
US20110238948A1 (en) * 2002-08-07 2011-09-29 Martin Vorbach Method and device for coupling a data processing unit and a data processing array
US6952816B2 (en) 2002-10-07 2005-10-04 Hewlett-Packard Development Company, L.P. Methods and apparatus for digital circuit design generation
US7107568B2 (en) 2002-10-07 2006-09-12 Hewlett-Packard Development Company, Lp. System and method for reducing wire delay or congestion during synthesis of hardware solvers
JP3896087B2 (ja) * 2003-01-28 2007-03-22 松下電器産業株式会社 コンパイラ装置およびコンパイル方法
WO2004072796A2 (en) 2003-02-05 2004-08-26 Arizona Board Of Regents Reconfigurable processing
US20040193837A1 (en) 2003-03-31 2004-09-30 Patrick Devaney CPU datapaths and local memory that executes either vector or superscalar instructions
JP2004334429A (ja) * 2003-05-06 2004-11-25 Hitachi Ltd 論理回路及びその論理回路上で実行するプログラム
JP4104538B2 (ja) * 2003-12-22 2008-06-18 三洋電機株式会社 リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路
US7657882B2 (en) 2004-01-22 2010-02-02 University Of Washington Wavescalar architecture having a wave order memory
US7668979B1 (en) * 2005-03-25 2010-02-23 Tilera Corporation Buffering data in a parallel processing environment
US7840914B1 (en) * 2005-05-13 2010-11-23 Massachusetts Institute Of Technology Distributing computations in a parallel processing environment
US20060288196A1 (en) * 2005-06-20 2006-12-21 Osman Unsal System and method for exploiting timing variability in a processor pipeline
US9648325B2 (en) * 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8265144B2 (en) * 2007-06-30 2012-09-11 Microsoft Corporation Innovations in video decoder implementations
US8521800B1 (en) * 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
US8098251B2 (en) 2008-02-22 2012-01-17 Qualcomm Incorporated System and method for instruction latency reduction in graphics processing
EP2366144B1 (en) * 2008-10-15 2015-09-30 Hyperion Core, Inc. Sequential processor comprising an alu array
US8671167B2 (en) * 2009-07-17 2014-03-11 Honeywell International Inc. System for providing demand response services
JPWO2011096016A1 (ja) * 2010-02-05 2013-06-06 株式会社東芝 コンパイラ装置
WO2012003997A1 (en) 2010-07-09 2012-01-12 Martin Vorbach Data processing device and method
US10592444B2 (en) 2013-01-07 2020-03-17 Wave Computing, Inc. Reconfigurable interconnected programmable processors
US9588773B2 (en) 2013-01-07 2017-03-07 Wave Computing, Inc. Software based application specific integrated circuit
US9612836B2 (en) 2014-02-03 2017-04-04 Nvidia Corporation System, method, and computer program product for implementing software-based scoreboarding
US10031756B2 (en) * 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10180840B2 (en) * 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11681531B2 (en) * 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10198263B2 (en) * 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US20170083320A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Predicated read instructions
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US11977891B2 (en) * 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US20180329708A1 (en) * 2015-09-19 2018-11-15 Microsoft Technology Licensing, Llc Multi-nullification
US10528356B2 (en) 2015-11-04 2020-01-07 International Business Machines Corporation Tightly coupled processor arrays using coarse grained reconfigurable architecture with iteration level commits
US10303481B2 (en) 2015-12-02 2019-05-28 International Business Machines Corporation Performance-aware instruction scheduling
US10191724B2 (en) * 2016-10-21 2019-01-29 Intel Corporation Compiler-based instruction scoreboarding
US10282296B2 (en) * 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line
US10210170B2 (en) * 2017-01-28 2019-02-19 Microsoft Technology Licensing, Llc Chunk storage deduplication using graph structures
US11360808B2 (en) * 2017-04-09 2022-06-14 Intel Corporation Efficient thread group scheduling
US11592817B2 (en) * 2017-04-28 2023-02-28 Intel Corporation Storage management for machine learning at autonomous machines
US20200210158A1 (en) * 2017-05-30 2020-07-02 Phase Change Software Llc Automated or machine-enhanced source code debugging
US10515431B2 (en) * 2017-12-12 2019-12-24 Intel Corporation Global optimal path determination utilizing parallel processing
US10877746B2 (en) * 2018-05-06 2020-12-29 Methodics, Inc. Component dependency tree normalization through contextual dependency

Also Published As

Publication number Publication date
EP3837599A1 (en) 2021-06-23
US20200057639A1 (en) 2020-02-20
US11755528B2 (en) 2023-09-12
US20220066982A1 (en) 2022-03-03
US11846974B2 (en) 2023-12-19
EP4040290A1 (en) 2022-08-10
KR20220047397A (ko) 2022-04-15
US11144497B2 (en) 2021-10-12
US11379406B2 (en) 2022-07-05
EP3837599A4 (en) 2022-04-06
EP3979070A1 (en) 2022-04-06
CN112912842A (zh) 2021-06-04
US20200057645A1 (en) 2020-02-20
US20200057642A1 (en) 2020-02-20
US20200057646A1 (en) 2020-02-20
US10915324B2 (en) 2021-02-09
US11403254B2 (en) 2022-08-02
CN114691600A (zh) 2022-07-01
WO2020037112A1 (en) 2020-02-20
US20200057748A1 (en) 2020-02-20
CN114265592A (zh) 2022-04-01
US20220129409A1 (en) 2022-04-28
KR20210124513A (ko) 2021-10-14

Similar Documents

Publication Publication Date Title
KR20210106404A (ko) 명령 작업들의 동시 실행을 위한 명령어 생성 및 실행을 위한 시스템 및 방법
Park et al. Edge-centric modulo scheduling for coarse-grained reconfigurable architectures
Moreano et al. Efficient datapath merging for partially reconfigurable architectures
US7861065B2 (en) Preferential dispatching of computer program instructions
US8601423B1 (en) Asymmetric mesh NoC topologies
US7945764B2 (en) Processing unit incorporating multirate execution unit
Hölzenspies et al. Run-time spatial mapping of streaming applications to a heterogeneous multi-processor system-on-chip (mpsoc)
US20090260013A1 (en) Computer Processors With Plural, Pipelined Hardware Threads Of Execution
CN105393240A (zh) 具有辅助异步向量处理器的异步处理器的方法和装置
Pourmohseni et al. Hard real-time application mapping reconfiguration for NoC-based many-core systems
KR20200091790A (ko) Gpu 연산의 동시 실행을 위한 플랫폼
CN104679663A (zh) 寄存器文件高速缓存的软分区
Saleem et al. A Survey on Dynamic Application Mapping Approaches for Real-Time Network-on-Chip-Based Platforms
Touiza et al. A novel methodology for accelerating bitstream relocation in partially reconfigurable systems
US7415689B2 (en) Automatic configuration of a microprocessor influenced by an input program
JP2007172569A (ja) 演算処理装置、演算処理装置の内部構成決定方法および演算処理システム
Shang et al. LACS: A high-computational-efficiency accelerator for CNNs
Chen et al. Configuration-sensitive process scheduling for FPGA-based computing platforms
Tino et al. Multi-objective tabu search based topology generation technique for application-specific network-on-chip architectures
Khare et al. Mapping and Priority Assignment for Real-Time Network-on-chip with Static and Dynamic Applications
US20230185577A1 (en) Communication in a Computer Having Multiple Processors
KR100631396B1 (ko) 반도체장치
KR0157926B1 (ko) 집적 회로의 클럭 주기 최소화 방법
Gajski et al. Hardware Synthesis
JP2009217619A (ja) 動作合成装置、動作合成方法、及び、プログラム

Legal Events

Date Code Title Description
A107 Divisional application of patent