KR20240038109A - 분산 레지스터 파일을 사용한 병렬 처리 아키텍처 - Google Patents

분산 레지스터 파일을 사용한 병렬 처리 아키텍처 Download PDF

Info

Publication number
KR20240038109A
KR20240038109A KR1020247007624A KR20247007624A KR20240038109A KR 20240038109 A KR20240038109 A KR 20240038109A KR 1020247007624 A KR1020247007624 A KR 1020247007624A KR 20247007624 A KR20247007624 A KR 20247007624A KR 20240038109 A KR20240038109 A KR 20240038109A
Authority
KR
South Korea
Prior art keywords
computational
array
compiler
computational elements
elements
Prior art date
Application number
KR1020247007624A
Other languages
English (en)
Inventor
피터 폴리
Original Assignee
아세니움 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아세니움 인코포레이티드 filed Critical 아세니움 인코포레이티드
Publication of KR20240038109A publication Critical patent/KR20240038109A/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/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Human Computer Interaction (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Neurology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)

Abstract

분산 레지스터 파일을 사용한 병렬 처리 아키텍처 기반의 태스크 처리 기술이 개시된다. 계산 요소의 2차원 어레이가 액세스된다. 각각의 계산 요소는 컴파일러에 알려져 있으며 그 이웃하는 계산 요소에 결합된다. 계산 요소 어레이는 사이클별로 제어된다. 제어는 컴파일러에 의해 생성된 광폭 제어 워드 스트림에 의해 인에이블된다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑된다. 가상 레지스터는 컴파일러에 의해 표현된다. 매핑은 컴파일러에 의해 수행된다. 2개 이상의 물리적 레지스터 파일에 대한 브로드캐스트 기록 동작이 인에이블된다. 제어 워드에 포함된 동작이 실행된다. 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 동작이 인에이블된다. 별개의 계산 요소에서의 구현은 병렬 연산 처리를 가능하게 한다.

Description

분산 레지스터 파일을 사용한 병렬 처리 아키텍처
관련 출원
본 출원은 2021년 8월 12일자로 출원된 미국 가특허 출원 "Parallel Processing Architecture With Distributed Register Files", 출원 번호 제63/232,230호에 대한 우선권을 주장한다.
전술한 출원은 허용되는 관할권에서 전체 내용이 참조로 포함된다.
기술 분야
본 출원은 일반적으로 태스크 처리에 관한 것이며, 특히 분산 레지스터 파일을 사용하는 병렬 처리 아키텍처에 관한 것이다.
많은 다른 것들 중에서 상업, 정부, 의료, 교육, 연구 또는 소매 목적을 위해 조직에서 거대하고 다양한 데이터세트의 빈번한 처리가 수행된다. 주어진 조직의 성공 또는 실패가 재정적 및 경쟁적 양쪽의 이익을 위해 데이터를 처리하는 그 능력에 직접적으로 좌우되기 때문에, 이러한 조직에서는 데이터 처리를 위해 방대한 자원을 소비한다. 데이터 처리가 이러한 목표를 성공적으로 충족시킬 때 조직은 번영한다. 그렇지 않고, 데이터 처리에 실패하면, 이때, 조직은 침몰한다. 폭넓고 다양한 범위의 개인으로부터 데이터를 수집하기 위해 다수의 다양한 데이터 수집 기술이 사용된다. 개인은 고객, 시민, 환자, 구매자, 학생, 시험 대상, 자원봉사자 등을 포함한다. 때로는, 개인이 자발적으로 참여하지만, 반면에 다른 때에는 이들은 자신도 모르게 대상이 되거나 심지어 데이터 수집의 피해자가 되기도 한다. 일반적인 데이터 수집 전략은 "옵트인(opt-in)" 기술을 포함하며, 여기서, 개인은 가입, 등록, 계정 생성 또는 달리 데이터 수집에 참여하는 데 기꺼이 동의한다. 정부가 시민에게 등록 번호를 획득하고 정부 기관, 법 집행 기관, 응급 서비스 등과 상호작용하는 동안 해당 번호를 사용하도록 요구하는 것과 같은 다른 기술이 입법되어 있다. 추가 데이터 수집 기술은 구매 이력, 웹사이트 방문, 버튼 클릭 및 메뉴 선택의 추적과 같이 더욱 교묘하거나 완전히 은닉되어 있다. 데이터 수집에 사용되는 기술에 무관하게, 수집된 데이터는 조직에 매우 가치가 있다.
더욱이, 이러한 데이터의 신속한 처리는 단지 몇몇을 들자면 과학 기관, 정부 기관, 연구 기관, 상업 기관, 의료 기관과 같은 많은 조직에 중요한 비즈니스 필수 사항이 될 수 있다. 처리할 데이터는 다수의 다양한 형태를 취할 수 있지만, 방대한 양의 데이터가 포함된 거대한 데이터세트에 저장되는 경우가 많다. 대규모 데이터세트에 저장된 데이터는 구조화되지 않은 형식으로 유지되는 경우가 많아 더욱 곤란한 문제가 된다. 즉, 필요할 수 있는 특정 데이터 부분을 색인화하는 간단한 방법이 없다. 때로는 중요한 단일 데이터 기록을 추출하기 위해 방대한 전체 데이터세트를 처리해야 하는 경우도 있다. 성공적으로 데이터를 관리하는 조직은 종종 해당 데이터를 효율적이고 유용한 방식으로 처리함으로써 성공을 거둘 수 있다. 유사하게, 그 데이터 관리에 실패하는 조직은 마찬가지로 효율적이고 유용한 데이터 처리의 결여로 인해 실패를 초래하는 경우가 많다. 데이터 처리는 극도로 자원 집약적일 수 있으며, 재정적 자원, 인적 자원, 자본 자원, 물리적 자원, 에너지 자원 등을 필요로 한다. 특히, 에너지 자원은 관리하기가 매우 어려울 수 있다. 클라우드 기반 계산 공급업체는 종종 넓은 공간을 수천 대의 서버 컴퓨터로 채우고, 이들 시스템에 걸쳐 분산된 계산 시간을 판매한다. 일부 경우에, 특정 고객이 "프라이빗" 클라우드 경험을 제공할 수 있게 특정 하드웨어의 서브세트가 따로 마련되어 있다. 그러나, 조직이 자체 데이터 센터를 이용하더라도 환경에 부정적인 결정을 내리지 않고 대량의 전력을 조달하는 것 외에도 냉각 문제를 관리해야 할 필요가 있다. 어떤 조직이 데이터를 사용하든, 대량의 데이터를 효율적으로 처리하는 것은 곤란하고 어려운 과제이다.
조직에서 수행하는 수많은 처리 작업은 조직의 임무에 매우 중요하다. 작업 처리는 전형적으로 급여 실행, 연구 데이터 분석 또는 기계 학습을 위한 신경망 훈련을 포함한다. 이러한 작업은 매우 복잡하며 많은 태스크로 구성된다. 태스크는 다양한 데이터세트 로드 및 저장, 처리 컴포넌트 및 시스템 액세스, 데이터 처리 실행 등을 포함할 수 있다. 태스크 자체는 전형적으로 하위 태스크에 기초하며, 하위 태스크 그 자체가 복잡할 수 있다. 하위 태스크는 특정 작업, 예컨대, 저장소에서 데이터를 로드 또는 판독, 계산 수행 및 데이터에 대한 다른 조작, 저장소에 데이터를 다시 저장 또는 기록, 데이터 전송 및 제어와 같은 하위 태스크 간 통신의 취급 등을 취급하기 위해 사용될 수 있다. 액세스되는 데이터세트가 거대한 경우가 많고, 처리 태스크에 적합하지 않거나 그 설계가 유연하지 않은 처리 아키텍처를 쉽게 압도할 수 있다. 태스크 처리 효율과 처리량을 크게 개선시키기 위해, 태스크 및 하위 태스크 처리에 2차원(2D) 요소 어레이를 사용할 수 있다. 2D 어레이는 계산 요소, 승산기 요소, 레지스터, 캐시, 큐, 제어기, 압축 해제기, 산술 로직 유닛(ALU), 저장 요소 및 그 자체 간에 서로 통신할 수 있는 다른 컴포넌트를 포함한다. 이러한 요소 어레이는 사이클별로 요소 어레이에 대한 제어를 제공함으로써 구성 및 동작된다. 2D 어레이의 제어는 컴파일러에서 생성된 제어 워드를 제공하여 달성된다. 제어는 제어 워드의 스트림을 포함하고, 제어 워드는 컴파일러에서 생성된 광폭 제어 워드를 포함할 수 있다. 제어 워드는 어레이를 구성하고, 데이터의 흐름이나 전송을 제어하고, 태스크 및 하위 태스크의 처리를 관리하는 데 사용된다. 또한, 태스크 처리에 가장 적합한 토폴로지로 어레이를 구성할 수 있다. 어레이를 구성할 수 있는 토폴로지는 특히 시스톨릭(systolic), 벡터, 순환, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함한다. 토폴로지는 기계 학습 기능을 인에이블시키는 토폴로지를 포함할 수 있다.
태스크 처리는 분산 레지스터 파일을 사용하는 병렬 처리 아키텍처를 기초로 한다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소가 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소 어레이는 사이클별로 제어되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑되고, 매핑은 컴파일러에 의해 수행된다. 제어 워드에 포함된 동작이 실행되고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다.
다양한 실시예의 다양한 특징, 양태 및 이점은 다음의 추가 설명으로부터 더욱 명백해질 것이다.
특정 실시예의 다음의 상세한 설명은 다음의 도면을 참조하여 이해할 수 있다:
도 1은 분산 레지스터 파일을 사용하는 병렬 처리 아키텍처의 흐름도이다.
도 2는 정적으로 스케줄링된 어레이 내의 분산 레지스터 파일에 대한 흐름도이다.
도 3은 가상 레지스터 파일 구현을 위한 시스템 블록도이다.
도 4는 얕은 파이프라인을 사용하는 고도의 병렬 아키텍처에 대한 시스템 블록도를 예시한다.
도 5는 계산 요소 어레이 세부사항을 도시한다.
도 6은 컴파일러 상호작용을 위한 시스템 블록도를 예시한다.
도 7은 정적으로 스케줄링된 어레이 내에서 분산 재명명을 위한 시스템 도면이다.
분산 레지스터 파일을 사용한 병렬 처리 아키텍처 기술이 개시된다. 분산 레지스터 파일을 사용하면 태스크, 하위 태스크, 프로세스 등이 컴파일러가 나타내는 가상 레지스터를 사용할 수 있다. 가상 레지스터는 계산 요소의 2차원 2D 어레이 내 계산 요소 사이에 분산되는 물리적 레지스터 파일에 매핑된다. 가상 레지스터가 매핑되는 적어도 2개의 물리적 레지스터는 계산 요소 어레이 내의 별개의 계산 요소에서 구현된다. 가상 레지스터를 복수의 물리적 레지스터 파일에 매핑하고, 이에 의해 가상 레지스터 내의 데이터의 적어도 2개의 사본은 데이터를 처리하는 데 사용될 계산 요소에 인접하거나 근접한 근접도로 위치할 수 있다. 또한, 데이터를 처리하는 태스크이나 하위 태스크를 실행하기 전에 데이터를 물리적 레지스터로 전송하거나 "사전 로드"할 수 있다. 따라서, 별개의 계산 요소에서 구현은 병렬 연산 처리를 가능하게 한다.각각의 물리적 레지스터 파일은 2개 판독 포트와 1개 기록 포트(2R1W)가 있는 메모리 요소를 포함한다. 2R1W 메모리 요소는 2개 판독 동작과 1개 기록 동작이 실질적으로 동시에 발생하는 것을 가능하게 한다. 복수의 2R1W 물리적 레지스터 파일이 어레이 전체에 분산되어 있다. 계산 요소의 2D 어레이 내에 구성된 복수의 2개 판독 포트, 1개 기록 포트(2R1W) 레지스터 파일에 대한 데이터 사본의 분산은 브로드캐스트 기술을 사용하여 달성된다. 복수의 2R1W 레지스터 파일은 태스크 및 하위 태스크 처리를 개선시킨다. 실행되는 태스크 및 하위 태스크는 이미지 또는 오디오 처리 응용, AI 응용, 비즈니스 응용, 데이터 처리 및 분석 등과 같은 데이터 조작을 기초로 하는 폭넓은 응용과 연관될 수 있다. 실행되는 태스크는 산술 연산, 시프트 연산, 부울 연산을 포함한 로직 연산, 벡터 또는 행렬 연산, 텐서 연산 등을 포함한 다양한 연산을 수행할 수 있다. 하위 태스크는 선행순위(precedence), 우선순위(priority), 코딩 순서, 병렬화 양, 데이터 흐름, 데이터 가용성, 계산 요소 가용성, 통신 채널 가용성 등에 따라 실행될 수 있다.
데이터 조작은 2차원(2D) 계산 요소 어레이에서 수행된다. 2D 어레이 내의 계산 요소는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC), 필드 프로그램 가능 게이트 어레이(FPGA), 처리 코어 또는 다른 처리 컴포넌트 또는 처리 컴포넌트의 조합으로 구현될 수 있다. 계산 요소는 이종 프로세서, 동종 프로세서, 집적 회로 또는 칩 내의 프로세서 코어 등을 포함할 수 있다. 계산 요소는 로컬 메모리 요소, 레지스터 파일, 캐시 저장소 등을 포함할 수 있는 로컬 저장소에 결합될 수 있다. 함께 작동하는 레벨-1(L1), 레벨-2(L2), 레벨-3(L3) 캐시와 같은 계층적 캐시를 포함할 수 있는 캐시는 중간 결과, 압축된 제어 워드, 병합된 제어 워드, 압축 해제된 제어 워드, 제어 워드의 관련 부분, 등과 같은 데이터를 저장하기 위해 사용될 수 있다. 캐시는 취해진 분기 경로(taken branch path)에 의해 생성된 데이터를 저장할 수 있으며, 취해진 분기 경로는 분기 결정에 의해 결정된다. 압축 해제된 제어 워드는 계산 요소 어레이 내에서 하나 이상의 계산 요소를 제어하는 데 사용된다. 2차원(2D) 계산 요소 어레이의 다수의 층은 계산 요소의 3차원 어레이를 포함하도록 "적층"될 수 있다.
처리 동작과 연관된 태스크, 하위 태스크 등은 컴파일러에 의해 생성된다. 컴파일러는 범용 컴파일러, 하드웨어 설명 기반 컴파일러, 계산 요소 어레이를 위해 작성되거나 "조절된" 컴파일러, 제약 기반 컴파일러, 충족 기반 컴파일러(SAT 솔버) 등을 포함할 수 있다. 제어는 제어 워드의 형태로 하드웨어에 제공되며, 하나 이상의 제어 워드는 컴파일러에 의해 생성된다. 제어 워드는 사이클별로 어레이에 제공된다. 제어 워드는 광폭 마이크로코드 제어 워드를 포함할 수 있다. 마이크로코드 제어 워드의 길이는 제어 워드를 압축함으로써 조절될 수 있다. 태스크에서 계산 요소가 필요하지 않은 상황을 인식하여 압축을 달성할 수 있다. 따라서, 불필요한 계산 요소와 연관된 제어 워드 내의 제어 비트는 해당 계산 요소에 필요하지 않다. 다른 압축 기술도 적용할 수 있다. 제어 워드는 데이터를 라우팅하고, 계산 요소에 의해 수행될 동작을 설정하고, 개별 계산 요소 또는 계산 요소의 행 및/또는 열을 유휴 상태로 만드는 등을 위해 사용될 수 있다. 계산 요소와 연관된 컴파일된 마이크로코드 제어 워드가 계산 요소에 분산된다. 계산 요소는 제어 워드를 압축 해제하는 제어 유닛에 의해 제어된다. 압축 해제된 제어 워드는 계산 요소에 의한 처리를 가능하게 한다. 하나 이상의 제어 워드의 실행에 의해 태스크 처리가 가능해진다. 태스크의 실행을 가속화하고, 계산 요소 어레이 등의 지연(stalling)을 감소시키거나 제거하는 등을 위해, 데이터 사본이 2R1W 메모리 요소를 포함하는 복수의 물리적 레지스터 파일에 브로드캐스팅될 수 있다. 레지스터 파일은 계산 요소의 2D 어레이에 걸쳐 분산될 수 있다.
분산 레지스터 파일을 사용하는 병렬 처리 아키텍처는 태스크 처리를 가능하게 한다. 태스크 처리는 데이터 조작을 포함할 수 있다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소는 집적 회로 내의 계산 요소, 프로세서 또는 코어; 주문형 집적 회로(ASIC) 내의 프로세서 또는 코어; FPGA(field programmable gate array)와 같은 프로그램 가능 디바이스 내의 프로그램된 코어; 등을 포함할 수 있다. 계산 요소는 동종 또는 이종 프로세서를 포함할 수 있다. 계산 요소의 2D 어레이 내의 각각의 계산 요소는 컴파일러에 알려져 있다. 범용 컴파일러, 하드웨어 지향 컴파일러 또는 계산 요소에 특정한 컴파일러를 포함할 수 있는 컴파일러는 각각의 계산 요소에 대한 코드를 컴파일할 수 있다. 각각의 계산 요소는 계산 요소 어레이 내에서 그 이웃하는 계산 요소에 결합된다. 계산 요소의 결합은 계산 요소 사이의 데이터 통신을 가능하게 한다. 따라서, 컴파일러는 계산 요소 사이의 데이터 흐름을 제어할 수 있으며 어레이 외부 메모리에 대한 데이터 커밋도 제어할 수 있다. 계산 요소 어레이는 사이클별로 제어되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된진다. 사이클은 클록 사이클, 아키텍처 사이클, 시스템 사이클 등을 포함할 수 있다. 컴파일러에 의해 생성된 광폭 제어 워드의 스트림은 계산 요소의 2D 어레이에 대한 직접적이고 세분화된 제어를 제공한다. 세분화된 제어는 개별 계산 요소, 메모리 요소, 제어 요소 등에 대한 제어를 포함할 수 있다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑된다. 적어도 2개의 물리적 레지스터 파일은 병렬 연산 처리를 가능하게 하기 위해 계산 요소 어레이 내의 별개의 계산 요소에서 구현될 수 있다. 매핑은 컴파일러에 의해 수행된다. 제어 워드에 포함된 동작은 계산 요소에 의해 실행된다. 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다.
도 1은 분산 레지스터 파일을 사용하는 병렬 처리 아키텍처의 흐름도이다. CE의 2D 어레이 내에 조립된 CE와 같은 계산 요소(CE) 그룹은 데이터 처리와 연관된 다양한 동작을 실행하도록 구성될 수 있다. 동작은 태스크 및 태스크와 연관된 하위 태스크에 기초할 수 있다. 2D 어레이는 제어기, 저장 요소, ALU, 메모리 관리 유닛(MMU), GPU, 승산기 요소 등과 같은 다른 요소와 추가로 인터페이스할 수 있다. 동작은 애플리케이션 처리, 데이터 조작, 데이터 분석 등과 같은 다양한 처리 목표를 달성할 수 있다. 동작은 다양한 데이터 유형을 조작할 수 있고, 다양한 데이터 유형은 정수, 실수 및 문자 데이터 유형; 벡터 및 행렬; 텐서; 등을 포함한다. 사이클별로 계산 요소 어레이에 제어가 제공되며, 제어는 컴파일러에 의해 생성된 제어 워드를 기초로 한다. 마이크로코드 제어 워드를 포함할 수 있는 제어 워드는 다양한 계산 요소를 인에이블 또는 유휴 상태가 되게 하고; 데이터를 제공하고; CE, 캐시 및 저장소 사이에서 결과를 라우팅하는 등을 수행한다. 이 제어는 계산 요소 동작, 메모리 액세스 선행순위 등을 가능하게 한다. 계산 요소 동작 및 메모리 액세스 선행순위를 통해 하드웨어가 데이터 제공 및 계산 요소 결과를 적절하게 순서화할 수 있도록 한다. 이 제어를 통해 계산 요소 어레이에서 컴파일된 프로그램이 실행되도록 한다.
흐름(100)은 2차원(2D) 계산 요소 어레이(110)에 액세스하는 단계를 포함하며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소는 다양한 유형의 프로세서에 기초할 수 있다. 계산 요소 또는 CE는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC) 내의 프로세서 또는 처리 코어, 필드 프로그램 가능 게이트 어레이(FPGA) 내의 프로그램된 처리 코어 등을 포함할 수 있다. 실시예에서, 계산 요소 어레이 내의 계산 요소는 동일한 기능을 갖는다. 계산 요소는 이종 계산 자원을 포함할 수 있고, 이종 계산 자원은 단일 집적 회로 또는 칩 내에 함께 배치될 수 있거나 그렇지 않을 수 있다. 계산 요소는 토폴로지에서 구성될 수 있으며, 토폴로지는 어레이에 구축되거나 어레이 내에서 프로그램 또는 구성되는 등일 수 있다. 실시예에서, 계산 요소 어레이는 토폴로지를 구현할 수 있는 제어 워드에 의해 구성된다. 구현될 수 있는 토폴로지는 시스톨릭, 벡터, 순환, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지 중 하나 이상을 포함할 수 있다.
계산 요소는 기계 학습 계산에 적합한 토폴로지를 더 포함할 수 있다. 기계 학습 토폴로지는 지도 학습, 비지도 학습, 강화 학습 및 기타 기계 학습 토폴로지를 포함할 수 있다. 계산 요소는 CE 어레이 내의 다른 요소와 결합될 수 있다. 실시예에서, 계산 요소의 결합은 하나 이상의 추가 토폴로지를 가능하게 할 수 있다. CE가 결합될 수 있는 다른 요소는 하나 이상의 레벨의 캐시 저장소와 같은 저장 요소; 제어 유닛; 승산기 유닛; 로드(LD) 및 저장(ST) 어드레스를 생성하는 어드레스 생성기 유닛; 큐; 레지스터 파일; 등을 포함할 수 있다. 각각의 계산 요소가 알려지는 컴파일러는 C, C++ 또는 Python 컴파일러를 포함할 수 있다. 각각의 계산 요소가 알려지는 컴파일러는 계산 요소 어레이를 위해 특별히 작성된 컴파일러를 포함할 수 있다. 각각의 CE를 그 이웃하는 CE에 결합하는 것은 계산 자원의 클러스터링; 캐시 요소, 승산기 요소, ALU 요소 또는 제어 요소와 같은 요소의 공유; 이웃하는 CE 사이의 통신; 등을 가능하게 한다.
흐름(100)은 사이클별로 계산 요소 어레이를 제어하는 단계(120)를 포함한다. 어레이 제어는 요소, 예컨대, 어레이 내의 계산 요소의 구성; 데이터 로드 및 저장; 계산 요소로, 그로부터 및 그 사이에서의 데이터의 라우팅; 등을 포함할 수 있다. 사이클은 클록 사이클, 아키텍처 사이클, 시스템 사이클, 자체 타이밍 사이클 등을 포함할 수 있다. 흐름(100)에서, 광폭 제어 워드의 스트림에 의해 제어가 인에이블된다(122). 제어 워드는 가변 길이 제어 워드일 수 있다. 제어 워드는 마이크로코드 제어 워드, 압축된 제어 워드, 인코딩된 제어 워드 등을 포함할 수 있다. 제어 워드의 "넓음"은 계산 요소 어레이 내의 복수의 계산 요소가 단일의 광폭 제어 워드에 의해 제어되는 것을 허용한다. 예를 들어, 계산 요소의 전체 행은 광폭 제어 워드로 제어될 수 있다. 어레이 내의 계산 요소 및 다른 요소를 구성하고; 개별 계산 요소, 계산 요소의 행 및/또는 열을 인에이블 또는 디스에이블하고; 데이터를 로드 및 저장하고; 계산 요소로, 그로부터, 및 그들 사이에서 데이터를 라우팅하는 등을 위해 제어 워드가 압축 해제되고, 사용되는 등이 이루어질 수 있다.
하나 이상의 제어 워드가 컴파일러에 의해 생성된다(124). 제어 워드를 생성하는 컴파일러는 C, C++ 또는 Python 컴파일러와 같은 범용 컴파일러; VHDL 또는 Verilog 컴파일러와 같은 하드웨어 기술 언어 컴파일러; 계산 요소 어레이를 위해 작성된 컴파일러; 등을 포함할 수 있다. 실시예에서, 광폭 제어 워드는 가변 길이 제어 워드를 포함한다. 실시예에서, 컴파일러에 의해 생성된 광폭 제어 워드의 스트림은 계산 요소의 2D 어레이에 대한 직접적이고 세분화된 제어를 제공한다. 컴파일러는 계산 요소 어레이에 기능을 매핑하기 위해 사용될 수 있다. 실시예에서, 컴파일러는 기계 학습 기능을 계산 요소 어레이에 매핑할 수 있다. 기계 학습은 기계 학습(ML) 네트워크, 딥러닝(DL) 네트워크, 서포트 벡터 머신(SVM) 등에 기초할 수 있다. 실시예에서, 기계 학습 기능은 신경망(NN) 구현을 포함할 수 있다. 신경망 구현은 복수의 계층을 포함할 수 있고, 계층은 입력 계층, 은닉 계층, 출력 계층 등 중 하나 이상을 포함할 수 있다. 컴파일러에 의해 생성된 제어 워드는 하나 이상의 CE를 구성하고, CE로 또는 그로부터 데이터가 흐르도록 하고, 동작을 수행하도록 CE를 구성하는 등을 위해 사용될 수 있다. 계산 요소 어레이를 제어하기 위해 컴파일되는 태스크의 유형과 크기에 따라, 하나 이상의 CE를 제어할 수 있으며, 반면에, 특정 태스크에는 다른 CE가 필요하지 않다. 불필요한 CE는 제어 워드에 필요하지 않은 것으로 표시될 수 있다. 불필요한 CE는 어떠한 데이터도 어떠한 제어 워드도 필요하지 않다. 실시예에서, 불필요한 계산 요소는 단일 비트로 제어될 수 있다. 다른 실시예에서, 단일 비트는 행의 각각의 CE에 대해 유휴 상태 신호를 생성하도록 하드웨어에 지시함으로써 CE의 전체 행을 제어할 수 있다. 단일 비트는 "필요하지 않음"으로 설정되거나, "필요함"으로 재설정되거나, 특정 CE가 태스크에 필요하지 않은 시기를 나타내기 위해 유사한 비트 용도로 설정될 수 있다.
컴파일러에 의해 생성된 제어 워드는 분기와 같은 조건성(conditionality)을 포함할 수 있다. 분기는 조건 분기, 무조건 분기 등을 포함할 수 있다. 제어 워드는 어레이로의 그 경로 상에서 압축된 제어 워드 캐시에서 워드를 압축 해제하는 압축 해제기 로직 블록에 의해 압축 해제될 수 있다. 실시예에서, 지시 세트는 계산 요소 어레이 내의 하나 이상의 계산 요소에 대한 하위 태스크의 공간 할당을 포함할 수 있다. 다른 실시예에서, 지시 세트는 계산 요소 어레이 내에서 순환하는 다수의 동시적 프로그래밍 루프 인스턴스를 인에이블시킬 수 있다. 다수의 프로그래밍 루프 인스턴스는 동일한 프로그래밍 루프, 다수의 프로그래밍 루프 등의 다수의 인스턴스를 포함할 수 있다.
흐름(100)은 가상 레지스터를 복수의 물리적 레지스터 파일에 매핑하는 단계(130)를 포함한다. 가상 레지스터는 태스크, 하위 태스크, 프로세스, 함수, 서브루틴 등의 범위 내에 알려진 레지스터를 포함할 수 있다. 실시예에서, 가상 레지스터는 컴파일러에 의해 표현될 수 있다. 컴파일러는 이름, 라벨 등을 가상 레지스터에 할당할 수 있고; 사용자 정의 이름을 사용할 수 있는 등이다. 가상 레지스터의 수는 물리적 레지스터의 수와 실질적으로 유사하거나 실질적으로 상이할 수 있다. 실시예에서, 물리적 레지스터의 수는 가상 레지스터의 수보다 더 클 수 있다. 가상 레지스터와 물리적 레지스터의 매핑은 물리적 레지스터의 위치, 물리적 레지스터의 가용성 등에 따라 수행될 수 있다. 사용 예에서, 가상 레지스터를 물리적 레지스터에 매핑하는 것은 물리적 레지스터에 액세스하는 계산 요소에 대한 물리적 레지스터의 물리적 근접도에 기초할 수 있다. 가상 레지스터는 2개 이상의 물리적 레지스터 파일에 매핑될 수 있다. 실시예에서, 가상 레지스터 중 적어도 하나가 적어도 2개의 물리적 레지스터에 매핑된다. 물리적 레지스터는 함께 배치되거나 공간적으로 분리될 수 있는 등이다. 실시예에서, 가상 레지스터의 수는 물리적 레지스터의 수보다 더 클 수 있다. 가상 레지스터의 수는 태스크, 하위 태스크, 프로세스, 프로시저 등의 수에 따라 달라질 수 있다.
물리적 레지스터 파일은 하나 이상의 계산 요소 사이에 분산된다(132). 실시예에서, 물리적 레지스터 파일 각각은 2개 판독 포트와 1개 기록 포트(2R1W)를 갖는 메모리 요소를 포함한다. 전체에 걸쳐 설명된 바와 같이, 2R1W 메모리 요소는 2개 판독 동작과 1개 기록 동작이 실질적으로 동시에 실행될 수 있게 한다. 2R1W 메모리 요소는 요소의 2D 어레이 내의 "독립형" 요소, 2R1W 메모리 요소로서 작동하도록 구성된 계산 요소 등을 포함할 수 있다. 실시예에서, 복수의 2R1W 물리적 레지스터 파일은 계산 요소 어레이 전체에 걸쳐 분산될 수 있다. 계산 요소는 공간적으로 분리, 클러스터링 등이 이루어질 수 있다. 레지스터 파일은 256개 판독 포트, 128개 기록 포트(256R128W) 레지스터 파일을 포함할 수 있고, 256개 판독 포트, 128개 기록 포트 레지스터 파일로부터의 각각의 판독은 복수의 2개 판독 포트, 1개 기록 포트 레지스터 파일로부터 로컬로 판독함으로써 달성될 수 있다. 실시예에서, 2R1W 물리적 레지스터 파일은 사이클당 256 비트 판독 및 128 비트 기록을 효과적으로 제공한다. 복수의 물리적 레지스터 파일에 걸쳐 가상 레지스터를 분산하는 이점은 레지스터 파일이 데이터세트의 사본을 포함할 수 있다는 것과, 레지스터 파일이 데이터가 필요한 계산 요소에 근접하여 위치될 수 있다는 것이다. 데이터의 근접한 위치는 빠른 저전력 데이터 액세스를 가능하게 하며, 계산 요소에 데이터가 필요할 때 원격 물리적 레지스터 파일에서 데이터를 전송할 필요성을 제거한다. 다른 실시예에서, 2개 이상의 물리적 레지스터 파일 각각은 계산 요소 어레이의 계산 요소에 분산될 수 있다.
흐름(100)에서, 매핑이 컴파일러에 의해 수행된다(134). 컴파일 시간에 컴파일러는 가상 레지스터를 하나 이상의 물리적 레지스터 파일에 할당할 수 있다. 실시예에서, 가상 레지스터의 매핑은 컴파일러에 의한 재명명을 포함할 수 있다. 매핑은 메모리 매핑, 어드레스 변환 등을 포함할 수 있다. 실시예에서, 컴파일러에 의한 재명명은 레지스터 파일의 테이블에 기초할 수 있다. 테이블은 변환 테이블을 포함할 수 있다. 테이블은 판독 전용 메모리(ROM), 연상 메모리 등으로 구현될 수 있다. 테이블은 변환 테이블, 참조표, 해시 테이블 등을 포함할 수 있다. 테이블을 구현하기 위해 연상 메모리를 사용하면 예를 들어 계산 요소가 찾는 데이터가 레지스터 파일 내에 위치되어 있는지 여부를 결정할 수 있다. 다른 실시예에서, 재명명은 컴파일 시간에 결정될 수 있다. 재명명은 독립적인 태스크를 라벨링하고 병렬성을 식별하는 등을 위해 사용될 수 있다. 다른 실시예에서, 재명명은 컴파일러가 물리적 레지스터 파일을 사용하여 동작의 실행을 조율하는 것을 가능하게 할 수 있다. 컴파일러에 의한 재명명은 다른 실행 기술을 달성할 수 있다. 실시예에서, 컴파일러에 의한 재명명은 동작의 분산 실행을 가능하게 할 수 있다. 흐름(100)에서, 적어도 2개의 물리적 레지스터는 계산 요소 어레이 내의 별개의 계산 요소(136)에서 구현될 수 있다. 별개의 계산 요소는 물리적 레지스터 파일 내의 데이터에 대한 원자 연산과 같은 동작을 수행할 수 있다. 컴파일러에 의한 매핑은 어레이의 기능을 인에이블시킬 수 있다. 기능은 오디오 또는 이미지 처리, 데이터 분석 등을 포함할 수 있다. 실시예에서, 컴파일러는 기계 학습 기능을 계산 요소 어레이에 매핑할 수 있다. 기계 학습은 딥러닝에 기초할 수 있다. 실시예에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 신경망 구현은 컨볼루션 신경망, 순환 신경망 등을 포함할 수 있다.
흐름(100)은 2개 이상의 물리적 레지스터 파일에 대한 브로드캐스트 기록 동작(140)을 인에이블시키는 단계를 더 포함한다. 브로드캐스트 기록 동작은 2개 판독 포트, 1개 기록 포트 메모리 요소를 포함하는 2개 이상의 물리적 레지스터 파일 각각에 데이터를 기록하는 단계를 포함할 수 있다. 브로드캐스팅은 데이터에 대한 액세스가 필요한 계산 요소와 함께 배치되거나, 인접하거나, 근접해 있는 등의 복수의 물리적 레지스터 파일에 데이터의 다수의 사본을 로드하는 데 사용될 수 있다. 흐름(100)은 제어 워드에 포함된 동작(150)을 실행하는 단계를 포함하고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다. 동작은 산술 연산, 로직 연산, 행렬 연산, 텐서 연산 등을 포함할 수 있다. 실행되는 동작은 제어 워드에 포함되어 있다. 전술한 바와 같이, 제어 워드는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림을 포함할 수 있다. 제어 워드는 사이클별로 계산 요소 어레이를 제어하는 데 사용될 수 있다. 사이클은 로컬 클록 사이클, 자체 타이밍 사이클, 시스템 사이클 등을 포함할 수 있다. 실행은 동작의 분산 실행을 포함할 수 있다. 실시예에서, 동작의 분산 실행은 계산 요소 어레이 내의 2개 이상의 계산 요소에서 발생할 수 있다. 계산 요소는 독립적인 계산 요소, 클러스터링된 계산 요소 등을 포함할 수 있다. 별개의 계산 요소에서의 구현은 병렬 연산 처리(152)를 가능하게 할 수 있다. 병렬 연산 처리는 서로 독립적인 그래프의 노드 처리, 독립적인 태스크 및 하위 태스크 처리 등을 포함할 수 있다.
흐름(100)의 다양한 단계는 개시된 개념을 벗어나지 않는 범위 내에서 순서 변경, 반복, 생략 등이 이루어질 수 있다. 흐름(100)의 다양한 실시예는 하나 이상의 프로세서에 의해 실행 가능한 코드를 포함하는 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품에 포함될 수 있다.
도 2는 정적으로 스케줄링된 어레이 내의 분산 레지스터 파일에 대한 흐름도이다. CE의 2D 어레이 내에 조립된 CE와 같은 계산 요소(CE)의 집합 또는 클러스터는 프로그램과 연관된 다양한 동작을 실행하도록 구성될 수 있다. 동작은 태스크 및 태스크와 연관된 하위 태스크에 기초할 수 있다. 2D 어레이는 제어기, 저장 요소, ALU, MMU, GPU, 승산기 요소 등과 같은 다른 요소와 추가로 인터페이스할 수 있다. 동작은 애플리케이션 처리, 데이터 조작, 설계 및 시뮬레이션 등과 같은 다양한 처리 목표를 달성할 수 있다. 동작은 다양한 데이터 유형의 조작을 수행할 수 있고, 다양한 데이터 유형은 정수, 실수 및 문자 데이터 유형; 벡터 및 행렬; 텐서; 등을 포함한다. 사이클별로 계산 요소 어레이에 제어가 제공되며, 제어는 컴파일러에 의해 생성된 제어 워드를 기초로 한다. 마이크로코드 제어 워드를 포함할 수 있는 제어 워드는 다양한 계산 요소를 인에이블 또는 유휴 상태가 되게 하고; 데이터를 제공하고; CE, 캐시 및 저장소 사이에서 결과를 라우팅하는 등을 수행한다. 이 제어는 계산 요소 동작, 메모리 액세스 선행순위 등을 가능하게 한다. 계산 요소 동작 및 메모리 액세스 선행순위를 통해 하드웨어가 계산 요소 결과의 시퀀스를 적절하게 지정할 수 있도록 한다.
이 제어를 통해 계산 요소 어레이에서 컴파일된 프로그램이 실행되도록 한다. 계산 요소는 제어 워드, 데이터 등이 포함된 레지스터에 액세스할 수 있다. 애플리케이션 코딩, 태스크 처리 등을 단순화하기 위해 가상 레지스터를 사용할 수 있다. 가상 레지스터는 컴파일러에 의해 표현될 수 있고, 가상 레지스터는 적어도 2개의 물리적 레지스터에 매핑될 수 있다. 가상 레지스터는 분산 레지스터 파일을 사용하여 병렬 처리 아키텍처를 가능하게 한다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소 어레이는 사이클별로 제어되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑되고, 매핑은 컴파일러에 의해 수행된다. 제어 워드에 포함된 동작이 실행되고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다.
흐름(200)은 2차원(2D) 계산 요소 어레이(210)에 액세스하는 단계를 포함하며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소는 다양한 유형의 프로세서에 기초할 수 있다. 계산 요소 또는 CE는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC) 내의 프로세서 또는 처리 코어, 필드 프로그램 가능 게이트 어레이(FPGA) 내의 프로그램된 처리 코어 등을 포함할 수 있다. 실시예에서, 계산 요소 어레이 내의 계산 요소는 동일한 기능을 갖는다. 계산 요소는 이종 계산 자원을 포함할 수 있고, 이종 계산 자원은 단일 집적 회로 또는 칩 내에 함께 배치될 수 있거나 그렇지 않을 수 있다. 계산 요소는 토폴로지에서 구성될 수 있으며, 토폴로지는 어레이에 구축되거나 어레이 내에서 프로그램 또는 구성되는 등일 수 있다. 실시예에서, 계산 요소 어레이는 시스톨릭, 벡터, 순환, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지 중 하나 이상을 구현하기 위해 제어 워드에 의해 구성된다.
계산 요소는 하나 이상의 토폴로지를 더 포함할 수 있고, 토폴로지는 컴파일러에 의해 매핑될 수 있다. 컴파일러에 의해 매핑되는 토폴로지는 유향 그래프(DG) 또는 유향 비순환 그래프(DAG), PN(Petri Net) 등과 같은 그래프를 포함할 수 있다. 실시예에서, 컴파일러는 기계 학습 기능을 계산 요소 어레이에 매핑한다. 기계 학습은 지도 학습, 비지도 학습, 반지도 학습; 딥러닝(DL); 등에 기초할 수 있다. 실시예에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 계산 요소는 CE 어레이 내의 다른 요소와 결합될 수 있다. 실시예에서, 계산 요소의 결합은 하나 이상의 토폴로지를 가능하게 할 수 있다. CE가 결합될 수 있는 다른 요소는 하나 이상 레벨의 캐시 저장소와 같은 저장 요소, 승산기 유닛, 로드(LD) 및 저장(ST) 어드레스 및 큐를 생성하기 위한 어드레스 생성기 유닛 등을 포함할 수 있다. 각각의 계산 요소가 알려지는 컴파일러는 C, C++ 또는 Python 컴파일러를 포함할 수 있다. 각각의 계산 요소가 알려지는 컴파일러는 계산 요소 어레이를 위해 특별히 작성된 컴파일러를 포함할 수 있다. 각각의 CE를 그 이웃하는 CE에 결합하는 것은 캐시 요소, 승산기 요소, ALU 요소 또는 제어 요소와 같은 요소의 공유; 이웃하는 CE 사이의 통신; 등을 가능하게 한다.
흐름(200)은 사이클별로 계산 요소 어레이를 제어하는 단계(212)를 포함한다. 어레이에 대한 제어는 어레이 내의 계산 요소 및 저장 요소와 같은 요소를 구성; 데이터 로드 및 저장; 계산 요소로, 그로부터 및 그 사이에서의 데이터의 라우팅; 등을 포함할 수 있다. 제어는 컴파일러에 의해 생성된 광폭 제어 워드 스트림에 의해 인에이블된다. 제어 워드는 어레이 내의 계산 요소 및 다른 요소를 구성; 개별 계산 요소 또는 계산 요소의 행 및/또는 열을 인에이블 또는 디스에이블; 데이터 로드 및 저장; 계산 요소로, 그로부터, 및 그들 사이에서 데이터를 라우팅; 등을 수행할 수 있다. 하나 이상의 제어 워드는 전술한 바와 같이 컴파일러에 의해 생성된다. 컴파일러는 계산 요소 어레이에 기능을 매핑하기 위해 사용될 수 있다. 컴파일러에 의해 생성된 제어 워드는 하나 이상의 CE를 구성하고, CE로 또는 그로부터 데이터가 흐르도록 하고, 동작을 수행하도록 CE를 구성하는 등을 위해 사용될 수 있다. 계산 요소 어레이를 제어하기 위해 컴파일되는 태스크의 유형과 크기에 따라, 하나 이상의 CE를 제어할 수 있으며, 반면에, 특정 태스크에는 다른 CE가 필요하지 않다. 불필요한 CE는 제어 워드에 필요하지 않은 것으로 표시될 수 있다. 불필요한 CE에는 어떠한 데이터도 필요하지 않으며, 제어 워드 묶음이라고 지칭될 수 있는 제어 워드 부분도 필요하지 않다. 실시예에서, 불필요한 계산 요소는 단일 비트로 제어될 수 있다. 다른 실시예에서, 단일 비트는 행의 각각의 CE에 대해 유휴 상태 신호를 생성하도록 하드웨어에 지시함으로써 CE의 전체 행을 제어할 수 있다. 단일 비트는 "필요하지 않음"으로 설정되거나, "필요함"으로 재설정되거나, 특정 CE가 태스크에 필요하지 않은 시기를 나타내기 위해 유사한 비트 용도로 설정될 수 있다.
흐름(200)은 가상 레지스터(214)를 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑하는 단계를 포함한다. 가상 레지스터는 이름, 참조 등을 사용하여 태스크, 하위 태스크 등이 액세스하는 레지스터일 수 있다. 가상 레지스터는 태스크 범위 내에서만 알 수 있다. 가상 레지스터는 컴파일러에 의해 표현될 수 있다. 컴파일러는 가상 레지스터를 하나 이상의 물리적 레지스터에 매핑할 수 있다. 실시예에서, 가상 레지스터 중 적어도 하나는 적어도 2개의 물리적 레지스터에 매핑될 수 있다. 물리적 레지스터는 계산 요소 어레이 내의 하나 이상의 계산 요소와 연관된 물리적 레지스터를 포함할 수 있다. 실시예에서, 적어도 2개의 물리적 레지스터는 계산 요소 어레이 내의 별개의 계산 요소에서 구현된다. 계산 요소는 인접한 계산 요소, 원격 계산 요소 등을 포함할 수 있다. 계산 요소는 실질적으로 유사한 데이터 또는 다른 데이터에 대한 데이터 조작을 수행할 수 있다. 실시예에서, 별개의 계산 요소에서의 물리적 레지스터의 구현은 병렬 연산 처리를 가능하게 할 수 있다.
흐름(200)은 계산 요소의 2차원 어레이를 포함하는 분산 레지스터 파일(220)을 구현하는 단계를 포함한다. 분산 레지스터 파일 또는 가상 레지스터 파일은 계산 요소의 2D 어레이 전체에 걸쳐 분산될 수 있는 레지스터 파일을 포함할 수 있다. 분산 레지스터 파일은 2개 판독 포트, 1개 기록 포트(2R1W) 레지스터 파일을 포함할 수 있다. 분산 레지스터 파일은 256개 판독 포트, 128개 기록 포트(256R128W) 레지스터 파일을 포함할 수 있으며, 256개 판독 포트, 128개 기록 포트 레지스터 파일로부터의 각각의 판독은 복수의 2개 판독 포트, 1개 기록 포트 레지스터 파일로부터 로컬로 판독함으로써 달성될 수 있다. 복수의 레지스터 파일에 걸쳐 가상 레지스터 파일을 분산하는 이점은 레지스터 파일이 데이터세트의 사본을 포함할 수 있다는 것과, 레지스터 파일이 데이터가 필요한 계산 요소에 근접하여 위치될 수 있다는 것이다. 데이터의 근접한 위치는 빠른 데이터 액세스를 가능하게 하며, 계산 요소에 데이터가 필요할 때 원격 물리적 레지스터 파일에서 데이터를 전송할 필요성을 제거한다. 흐름(200)에서, 구현은 복수의 2개 판독 포트, 1개 기록 포트(2R1W) 레지스터 파일(222)을 이용하여 달성될 수 있으며, 여기서 2개 판독 포트, 1개 기록 포트 레지스터 파일 각각은 계산 요소 어레이의 계산 요소 내에 위치한다. 2R1W 레지스터 파일은 계산 요소가 수행하는 계산에 사용할 수 있는 데이터의 사본을 포함할 수 있다. 실시예에서, 구현은 256개 판독 포트, 128개 기록 포트 레지스터 파일로서 기능하도록 계산 요소 어레이를 정적으로 스케줄링(223)함으로써 달성될 수 있다. 많은 수의 판독 포트와 많은 수의 기록 포트를 사용하여 수많은 다른 가상 레지스터 파일 구현이 가능하다. 계산 요소의 2D 어레이 내에서 하나 이상의 계산 요소를 구성 또는 스케줄링하는 것은 컴파일 코드에 기초할 수 있다. 코드는 태스크, 하위 태스크, 루틴, 프로세스 등을 수행하는 데 사용될 수 있다. 스케줄링은 컴파일된 코드를 2D 어레이의 하나 이상의 요소에 로드하여 달성할 수 있다. 스케줄링은 프로세서 및 저장소 할당, 데이터 및 신호 통신 구성 등을 포함할 수 있다.
흐름(200)에서, 2개 판독 포트, 1개 기록 포트 레지스터 파일에 대한 재명명(224) 액세스에 의해 구현이 달성될 수 있다. 실시예에서, 재명명은 매핑을 통해 달성될 수 있다. 실시예에서, 매핑은 메모리 매핑, 어드레스 변환 등을 포함할 수 있다. 흐름(200)은 연상 메모리로 구현된 테이블(226)을 사용한 매핑을 통한 재명명을 포함한다. 테이블은 변환 테이블, 참조표, 해시 테이블 등을 포함할 수 있다. 테이블을 구현하기 위해 연상 메모리를 사용하면 예를 들어 계산 요소가 찾는 데이터가 레지스터 파일 내에 위치되어 있는지 여부를 결정할 수 있다. 실시예에서, 재명명은 컴파일 시간에 결정될 수 있다. 흐름(200)에서, 계산 요소 어레이에 대한 명령어 세트 내의 레지스터보다 더 많은 물리적 2개 판독 포트, 1개 기록 포트 레지스터 파일(228)을 사용하여 구현이 달성될 수 있다. 레지스터는 컴파일된 코드를 기초로 스케줄링된 레지스터와 연관될 수 있다. 더 많은 물리적 2R1W 레지스터 파일을 사용하면 더 많은 데이터 사본을 계산 요소의 2D 어레이에 걸쳐 분산시킬 수 있다. 흐름(200)에서, 기록이 복수의 2개 판독 포트, 하나의 기록 포트 레지스터 파일에 브로드캐스팅되도록 분산 레지스터 파일에 각각의 기록을 브로드캐스팅(230)함으로써 구현이 달성될 수 있다. 브로드캐스팅은 각각의 2R1W 레지스터 파일에 데이터 사본을 기록하는 데 사용될 수 있다. 흐름(200)은 물리적 레지스터를 사용하여 동작(240)을 실행하는 단계를 포함한다. 동작은 산술 연산, 로직 연산, 행렬 연산, 텐서 연산 등을 포함할 수 있다. 실행되는 동작은 제어 워드에 포함되어 있다. 전술한 바와 같이, 제어 워드는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림을 포함할 수 있다. 제어 워드는 사이클별로 계산 요소 어레이를 제어하는 데 사용될 수 있다. 제어 워드는 가변 길이 제어 워드일 수 있다. 사이클은 로컬 클록 사이클, 자체 타이밍 사이클, 시스템 사이클 등을 포함할 수 있다. 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다. 복수의 분산된 물리적 레지스터 파일은 계산 요소의 병렬 처리 동작을 가능하게 할 수 있다.
도 3은 가상 레지스터 파일 구현을 위한 시스템 블록도이다. 가상 레지스터 파일은 계산 요소 어레이의 계산 요소 내에 복수의 레지스터를 포함할 수 있다. 일부 실시예에서, 레지스터는 2개 판독 포트, 1개 기록 포트(2R1W) 레지스터를 포함할 수 있다. 가상 레지스터 파일은 복수의 계산 요소 로컬 스크래치패드 메모리에 데이터 사본을 저장함으로써 계산 요소의 2차원 어레이에 걸쳐 "분산"될 수 있다. 계산 요소의 명령어 및/또는 데이터는 로컬 메모리로부터 이들을 액세스할 수 있다. 로컬 레지스터에 액세스하면 데이터 액세스가 크게 가속화되고 액세스 성능이 낮아진다. 가상 레지스터 파일은 분산 레지스터 파일을 사용하여 병렬 처리 아키텍처를 가능하게 한다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소 어레이는 사이클별로 제어되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑되고, 매핑은 컴파일러에 의해 수행된다. 제어 워드에 포함된 동작이 실행되고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다.
시스템 블록도는 동작 레지스터(310)를 포함할 수 있다. 동작 레지스터(310)는 각각의 CE의 가상 레지스터 파일에 포함된 각각의 가상 레지스터의 어드레스와 함께 CE가 수행하는 동작을 포함한다. 동작 레지스터는 CE의 동작을 직접 제어하는 제어 워드의 하위 섹션인 제어 워드 묶음이라고 지칭되는 광폭 제어 워드의 적절한 부분에서 로드되는 것을 포함할 수 있다. 동작은 태스크, 하위 태스크, 프로세스 등을 수행하기 위한 코드 컴파일의 결과일 수 있다. 제어 워드는 메모리로부터 획득되고 계산 요소의 2D 어레이로 구동되어 CE의 사이클별 동작 제어를 제공할 수 있다. 제어 워드 내의 동작은 하나 이상의 필드를 포함할 수 있다. 실시예에서, 동작은 멀티플렉서(MUX) 입력, 레지스터 1(314)과 같은 제1 레지스터, 및 레지스터 2(316)와 같은 제2 레지스터를 선택함으로써 계산 요소의 산술 로직 유닛(ALU) 내의 입력 피연산자(312)를 지정할 수 있다. 피연산자는 판독-수정-기록 동작(318)과 같은 다양한 계산 태스크를 수행하는 동작을 포함할 수 있다. 계산 태스크는 산술 연산, 로직 연산, 신경망 연산 등을 포함할 수 있다. 제어 워드에 의해 지정된 CE는 피연산자에 동작할 수 있고, 피연산자는 레지스터 1과 레지스터 2에 로드될 수 있다. 레지스터 1과 레지스터 2의 내용은 하나 이상의 2R1W 레지스터 파일을 포함할 수 있는 레지스터 파일을 포함하는 하나 이상의 로컬 스크래치패드 메모리 요소로부터 획득할 수 있고, 하나 이상의 2R1W 레지스터 파일은 하나의 계산 요소 내에 위치할 수 있다. 하나 이상의 2R1W 레지스터 파일은 컴파일러 할당 레지스터 파일(320)을 포함할 수 있다. 컴파일러는 계산 요소의 2D 어레이 내의 계산 요소와 연관된 물리적 레지스터 파일을 포함하는 할당된 레지스터 파일을 기록한다(322). 하나 이상의 계산 요소는 가상 레지스터 파일(아래에서 설명됨) 내에 계산 요소를 포함할 수 있다. 가상 레지스터 파일은 계산 요소의 2D 어레이 전체에 구성된 2R1W 레지스터 파일을 포함한다.
시스템 블록도(300)는 가상 레지스터 파일(330)을 포함할 수 있고, 이는 로컬 스크래치패드 메모리 기능의 논리적 추상화이며 실제로 레지스터 1과 레지스터 2에 대한 동작과 연관된 데이터를 제공한다. 가상 레지스터 파일을 포함하는 물리적 레지스터 파일은 2개 판독 포트를 제공할 수 있으므로 레지스터에 대한 데이터는 실질적으로 동시에 판독될 수 있다. 가상 레지스터 파일은 레지스터 세트 1(332), 레지스터 세트 M(334), 레지스터 세트 N(336) 등과 같은 하나 이상의 레지스터 세트를 포함할 수 있다. 가상 레지스터 세트는 태스크 또는 하위 태스크, 프로세스, 작업 등과 연관될 수 있다. 실시예에서, 가상 레지스터는 컴파일러에 의해 표현될 수 있다. 가상 레지스터의 표현은 컴파일러 할당 이름, 사용자 정의 이름 등에 기초할 수 있다. 판독-수정-기록 동작의 경우, 피연산자는 레지스터 1과 레지스터 2의 내용에 동작을 수행하고 동작 수행 결과를 후속 동작에 사용하기 위해 레지스터 2에 다시 기록할 수 있다. 가상 레지스터 파일은 계산 요소의 2D 어레이에 걸쳐 분산된 복수의 레지스터 파일을 포함하므로, 가상 레지스터 파일을 기록하는 것은 컴파일러 데이터 또는 데이터의 사본을 복수의 레지스터 파일 내의 레지스터 파일에 브로드캐스팅함으로써 달성될 수 있다. 결과의 가상 레지스터 파일로의 브로드캐스팅을 달성하기 위해 "재명명" 기술을 사용하여 2R1W 레지스터 파일에 대한 액세스를 제공하고, 즉, 컴파일러는 컴파일러가 동작을 수행하기 위해 선택한 CE 또는 CE가 나중에 액세스하는 것을 용이하게 하기 위해 다수의 CE에 걸쳐 레지스터 값을 복제하도록 선택한다. 재명명은 테이블을 사용한 매핑을 통해 달성할 수 있다. 실시예에서, 연상 메모리가 테이블을 구현하는 데 사용될 수 있다. 매핑은 물리적 레지스터 파일 내의 하나 이상의 저장 위치 또는 요소에 데이터를 지향시키는 데 사용될 수 있다. 매핑에 의해 식별된 하나 이상의 저장 위치는 하나 이상의 2R1W 레지스터 파일과 연관될 수 있다.
도 4는 얕은 파이프라인을 사용하는 고도의 병렬 아키텍처에 대한 시스템 블록도를 예시한다. 고도의 병렬 아키텍처는 계산 요소, 처리 요소, 버퍼, 하나 이상의 캐시 저장소 레벨, 시스템 관리, 산술 로직 유닛, 승산기, 메모리 관리 유닛 등을 포함하는 컴포넌트를 포함할 수 있다. 다양한 컴포넌트를 사용하여 태스크, 하위 태스크 등의 병렬 처리가 달성될 수 있다. 태스크 처리는 프로그램 실행, 작업 처리 등과 연관된다. 태스크 처리는 로드 및 저장이 포함된 다수의 루프의 병렬 처리에 기초하여 인에이블된다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소에 대한 제어는 사이클별로 제공되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 메모리 액세스 동작은 선행순위 정보가 태깅되고, 태깅은 제어 워드에 포함되고, 태깅은 루프 동작을 위해 구현되고, 및 태깅은 컴파일 시간에 컴파일러에 의해 제공된다. 다수의 독립 루프에 대한 제어 워드 데이터가 계산 요소에 로드된다. 다수의 독립 루프가 실행된다. 선행순위 정보를 기초로 메모리가 액세스되고, 메모리 액세스는 독립 루프에 관련된 데이터에 대한 로드 또는 저장을 포함한다.
얕은 파이프라인을 사용하는 고도의 병렬 아키텍처에 대한 시스템 블록도(400)가 도시되어 있다. 시스템 블록도는 계산 요소 어레이(410)를 포함할 수 있다. 계산 요소 어레이(410)는 계산 요소에 기초할 수 있으며, 계산 요소는 프로세서, 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 보조 프로세서 등을 포함할 수 있다. 계산 요소는 주문형 집적 회로(ASIC)와 같은 칩 내에 구성된 처리 코어, 필드 프로그램 가능 게이트 어레이(FPGA)와 같은 프로그램 가능한 칩에 프로그램된 처리 코어 등에 기초할 수 있다. 계산 요소는 계산 요소의 동종 어레이를 포함할 수 있다. 시스템 블록도(400)는 변환 및 우선참조 버퍼(412 및 438)와 같은 변환 및 우선참조 버퍼를 포함할 수 있다. 변환 및 우선참조 버퍼는 메모리 캐시를 포함할 수 있고, 메모리 캐시를 사용하여 저장소 액세스 시간을 감소시킬 수 있다.
시스템 블록도(400)는 로드 및 저장 액세스 순서와 선택을 위한 로직을 포함할 수 있다. 로드 및 저장 액세스 순서와 선택을 위한 로직은 크로스바 스위치 및 로직(442)과 함께 크로스바 스위치 및 로직(415)을 포함할 수 있다. 스위치 및 로직(415)은 하위 데이터 캐시 블록(418 및 420)에 대한 로드 및 저장 액세스 순서와 선택을 달성할 수 있고, 스위치 및 로직(442)은 상위 데이터 캐시 블록(444 및 446)에 대한 로드 및 저장 액세스 순서와 선택을 달성할 수 있다. 크로스바 스위치 및 로직(415)은 액세스 버퍼(416)를 사용하여 계산 요소 어레이(410)의 하위 절반 계산 요소와 데이터 캐시(418, 420) 사이의 고속 데이터 통신을 가능하게 한다. 크로스바 스위치 및 로직(442)은 액세스 버퍼(443)를 사용하여 계산 요소 어레이(410)의 상위 절반 계산 요소와 데이터 캐시(444, 446) 사이의 고속 데이터 통신을 가능하게 한다. 액세스 버퍼(416 및 443)는 로직(415) 및 로직(442)이 각각 임의의 메모리 위험이 해결될 때까지 데이터 로드를 유지하거나 저장할 수 있게 한다. 또한, 계산 요소 어레이의 물리적으로 인접한 구역 사이에 데이터 캐시를 분할하는 것은 로드 액세스 대역폭을 두 배로 증가시키고 상호 연결 복잡성을 감소시키는 등을 가능하게 할 수 있다. 로드를 분할할 수 있지만, 저장소는 하위 데이터 캐시(418 및 420)와 상위 데이터 캐시(444 및 446) 모두로 구동될 수 있다.
시스템 블록도(400)는 하위 로드 버퍼(414) 및 상위 로드 버퍼(441)를 포함할 수 있다. 로드 버퍼는 메모리 로드 데이터에 대한 임시 저장 장치를 제공하여 계산 요소 어레이(410)에 의한 짧은 레이턴시 액세스가 준비되게 할 수 있다. 시스템 블록도는 L1 데이터 캐시(418 및 444)와 같은 이중 레벨 1(L1) 데이터 캐시를 포함할 수 있다. L1 데이터 캐시는 함께 처리할 데이터, 순차적으로 처리할 데이터 등과 같은 로드 및/또는 저장 데이터의 블록을 유지하기 위해 사용될 수 있다. L1 캐시는 작은 캐시를 포함할 수 있고, 이는 계산 요소 및 기타 컴포넌트에서 신속하게 액세스할 수 있는 빠른 메모리이다. 시스템 블록도는 레벨 2(L2) 데이터 캐시를 포함할 수 있다. L2 캐시는 L2 캐시(420 및 446)를 포함할 수 있다. L2 캐시는 L1 캐시에 비교하여 더 크고 느린 저장소를 포함할 수 있다. L2 캐시는 "다음" 데이터, 중간 결과와 같은 결과 등을 저장할 수 있다. L1 및 L2 캐시는 레벨 3(L3) 캐시에 추가로 결합될 수 있다. L3 캐시는 L3 캐시(422 및 448)를 포함할 수 있다. L3 캐시는 L2 및 L1 캐시보다 더 클 수 있으며 더 느린 저장소를 포함할 수 있다. L3 캐시에서 데이터에 액세스하는 것은 주 저장소에 액세스하는 것보다 여전히 더 빠르다. 실시예에서, L1, L2 및 L3 캐시는 4방향 세트 연상 캐시(4-way set associative caches)를 포함할 수 있다.
시스템 블록도(400)는 하위 승산기 요소(413) 및 상위 승산기 요소(440)를 포함할 수 있다. 승산기 요소는 계산 요소 어레이에서 나오는 데이터 및/또는 계산 요소 어레이로 이동하는 데이터의 효율적인 승산 기능을 제공할 수 있다. 승산기 요소(413)는 계산 요소 어레이(410) 및 로드 버퍼(414)에 결합될 수 있고, 승산기 요소(440)는 계산 요소 어레이(410) 및 로드 버퍼(441)에 결합될 수 있다.
시스템 블록도(400)는 시스템 관리 버퍼(424)를 포함할 수 있다. 시스템 관리 버퍼는 계산 요소 어레이(410)를 제어하는 데 사용될 수 있는 시스템 관리 코드 또는 제어 워드를 저장하는 데 사용될 수 있다. 시스템 관리 버퍼는 예외 또는 오류 취급, 처리 태스크를 위한 병렬 아키텍처 관리 등에 사용될 수 있는 연산코드, 코드, 루틴, 함수 등을 유지하는 데 채용될 수 있다. 시스템 관리 버퍼는 압축 해제기(426)에 결합될 수 있다. 압축 해제기는 시스템 관리 압축 제어 워드 버퍼(428)로부터 시스템 관리 압축 제어 워드(CCW)를 압축 해제하는 데 사용될 수 있고 압축 해제된 시스템 관리 제어 워드를 시스템 관리 버퍼(424)에 저장할 수 있다. 압축된 시스템 관리 제어 워드는 압축되지 않은 제어 워드보다 더 적은 저장 공간을 필요로 할 수 있다. 시스템 관리 CCW 컴포넌트(428)는 또한 스필 버퍼를 포함할 수 있다. 스필 버퍼는 다수의 중첩 레벨의 예외를 지원하는 데 사용할 수 있는 대형 SRAM(static random-access memory)을 포함할 수 있다.
계산 요소 어레이 내의 계산 요소는 제어 유닛(430)과 같은 제어 유닛에 의해 제어될 수 있다. 컴파일러가 제어 워드를 통해 개별 요소를 제어하는 동안 제어 유닛은 새 제어 워드가 어레이로 구동되지 않는 것을 보장하기 위해 어레이를 일시 중지할 수 있다. 제어 유닛은 압축 해제기(432)로부터 압축 해제된 제어 워드를 수신할 수 있고 압축 해제된 제어 워드를 계산 요소 어레이(410)의 적절한 계산 요소로 몰아낼 수 있다. 압축 해제기는 계산 요소의 행 또는 열을 인에이블 또는 유휴 상태가 되게 하거나, 개별 계산 요소를 인에이블 또는 유휴 상태가 되게 하거나, 개별 계산 요소로 제어 워드를 송신하는 등을 위해 제어 워드(아래에서 설명됨)를 압축 해제할 수 있다. 압축 해제기는 압축 제어 워드 캐시 1(CCWC1)(434)과 같은 압축 제어 워드 저장소에 결합될 수 있다. CCWC1은 하나 이상의 압축된 제어 워드를 포함하는 L1 캐시와 같은 캐시를 포함할 수 있다. CCWC1은 압축 제어 워드 캐시 2(CCWC2)(436)과 같은 추가 압축 제어 워드 저장소에 결합될 수 있다. CCWC2는 압축된 제어 워드에 대한 L2 캐시로 사용될 수 있다. CCWC2는 CCWC1보다 더 크고 더 느릴 수 있다. 실시예에서, CCWC1 및 CCWC2는 4방향 세트 연관성을 포함할 수 있다. 실시예에서, CCWC1 캐시는 압축 해제된 제어 워드를 포함할 수 있으며, 이 경우, 이는 DCWC1로 지정될 수 있다. 그 경우, 압축 해제기(432)는 CCWC1(434)(현재 DCWC1)과 CCWC2(436) 사이에 결합될 수 있다.
도 5는 계산 요소 어레이 세부사항(500)을 도시한다. 계산 요소 어레이는 어레이 내의 계산 요소가 하나 이상의 태스크, 하위 태스크 등을 처리할 수 있게 하는 컴포넌트에 결합될 수 있다. 컴포넌트는 데이터 액세스 및 제공, 특정 고속 동작 수행 등을 수행할 수 있다. 계산 요소 어레이 및 그 연관 컴포넌트는 로드 및 저장이 포함된 다수의 루프의 병렬 처리를 가능하게 한다. 계산 요소 어레이(510)는 다양한 처리 태스크를 수행할 수 있고, 처리 태스크는 산술, 벡터 또는 행렬 연산과 같은 동작; 오디오 및 비디오 처리 동작; 신경망 연산; 등을 포함할 수 있다. 계산 요소는 하위 승산기 유닛(512) 및 상위 승산기 유닛(514)과 같은 승산기 유닛에 결합될 수 있다. 승산기 유닛은 범용 처리 태스크와 연관된 고속 승산, 딥러닝 네트워크와 같은 신경망과 연관된 승산, 벡터 연산과 연관된 승산 등을 수행하는 데 사용될 수 있다. 계산 요소는 로드 버퍼(516) 및 로드 버퍼(518)와 같은 로드 큐에 결합될 수 있다. 로드 버퍼 또는 로드 큐는 전술한 바와 같이 L1 데이터 캐시에 결합될 수 있다. 로드 큐는 계산 요소에서 저장소 액세스 요청을 로드하는 데 사용될 수 있다. 로드 큐는 예상 로드 레이턴시를 추적할 수 있으며 로드 레이턴시가 임계값을 초과하면 제어 유닛에 통지할 수 있다. 제어 유닛의 통지는 로드가 예상 시간기간 내에 도착하지 않을 수 있음을 시그널링하기 위해 사용될 수 있다. 로드 큐는 계산 요소 어레이를 일시 중지하는 데 추가로 사용될 수 있다. 로드 큐는 전체 어레이를 일시 중지하는 제어 유닛에 일시 중지 요청을 발신할 수 있는 반면 개별 요소는 제어 워드의 제어하에 유휴화될 수 있다. 요소가 명시적으로 제어되지 않는 경우 이는 유휴(또는 저전력) 상태에 놓일 수 있다. 아무런 동작도 수행되지 않지만, 링 버스는 나머지 어레이가 적절히 동작할 수 있게 하도록 "통과" 모드에서 계속 동작할 수 있다. 계산 요소가 그 ALU를 통해 변경되지 않은 데이터를 라우팅하는 데만 사용되는 경우, 이는 여전히 활성 상태로 고려된다.
계산 요소 어레이가 일시 중지된 동안, 메모리(데이터 및 제어 워드)에서 어레이의 백그라운드 로딩을 수행할 수 있다. 메모리 시스템은 자유롭게 실행될 수 있으며 어레이가 일시 중지된 동안에도 계속 동작할 수 있다. 제어 신호 전송으로 인해 다중 사이클 레이턴시가 발생할 수 있으며 이는 추가적인 "데드 타임"을 초래할 수 있기 때문에, 메모리 시스템이 어레이에 "도달"하여 어레이가 일시 중지되어 있는 동안 로드 데이터를 적절한 스크래치패드 메모리에 전달할 수 있게 하는 것이 유익할 수 있다. 이 메커니즘은 컴파일러에 관한 한 어레이 상태가 알려지도록 동작할 수 있다. 일시 중지 후 어레이 동작이 재개되면 컴파일러가 정적으로 스케줄링된 모델을 유지하는 데 필요한 새 로드 데이터가 스크래치패드에 도착한다.
도 6은 컴파일러 상호작용을 위한 시스템 블록도를 예시한다. 전체적으로 설명된 바와 같이, 2D 어레이 내의 계산 요소는 어레이에서 실행하기 위해 태스크와 하위 태스크를 컴파일할 수 있는 컴파일러에 알려져 있다. 컴파일된 태스크와 하위 태스크는 태스크 처리를 달성하기 위해 실행된다. 태스크 배치, 데이터 라우팅 등과 같은 다양한 상호작용이 컴파일러와 연관될 수 있다. 컴파일러 상호작용은 분산 레지스터 파일을 사용하여 병렬 처리 아키텍처를 가능하게 한다. 2차원(2D) 계산 요소 어레이가 액세스되며, 여기서, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소 어레이는 사이클별로 제어되고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 가상 레지스터는 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑되고, 매핑은 컴파일러에 의해 수행된다. 제어 워드에 포함된 동작이 실행되고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다.
시스템 블록도(600)는 컴파일러(610)를 포함한다. 컴파일러는 C, C++, Python 또는 유사한 컴파일러와 같은 고급 컴파일러를 포함할 수 있다. 컴파일러는 VHDL™ 또는 Verilog™ 컴파일러와 같은 하드웨어 기술 언어용으로 구현된 컴파일러를 포함할 수 있다. 컴파일러는 저수준 가상 기계(LLVM) 중간 표현(IR)과 같은 이식 가능하고 언어 독립적인 중간 표현을 위한 컴파일러를 포함할 수 있다. 컴파일러는 어레이 내의 컴퓨터 요소와 다른 요소에 제공할 수 있는 일련의 지시를 생성할 수 있다. 컴파일러는 태스크(620)를 컴파일하는 데 사용될 수 있다. 태스크는 처리 태스크와 연관된 복수의 태스크를 포함할 수 있다. 태스크는 복수의 하위 태스크를 더 포함할 수 있다. 태스크는 비디오 처리 또는 오디오 처리 애플리케이션과 같은 응용에 기초할 수 있다. 실시예에서, 태스크는 기계 학습 기능과 연관될 수 있다. 컴파일러는 계산 요소 결과(630)를 취급하기 위한 지시를 생성할 수 있다. 계산 요소 결과는 산술, 벡터, 어레이 및 행렬 연산; 부울 연산; 등에서 파생된 결과를 포함할 수 있다. 실시예에서, 계산 요소 결과는 계산 요소 어레이에서 병렬로 생성된다. 계산 요소가 입력 데이터를 공유하고 독립적인 데이터를 사용할 수 있는 등인 경우 계산 요소에 의해 병렬 결과가 생성될 수 있다. 컴파일러는 계산 요소 어레이에 대한 데이터 이동(632)을 제어하는 일련의 지시를 생성할 수 있다. 데이터 이동 제어는 계산 요소 어레이 내의 계산 요소로, 그로부터 및 그 사이에서 데이터 이동을 포함할 수 있다. 데이터 이동 제어는 데이터 이동 중에 임시 데이터 저장소와 같은 데이터 로드 및 저장을 포함할 수 있다. 다른 실시예에서, 데이터 이동은 어레이 내 데이터 이동을 포함할 수 있다.
하나 이상의 프로세서에서 실행할 태스크 및 하위 태스크를 생성하는 데 사용되는 범용 컴파일러와 마찬가지로 컴파일러는 태스크 및 하위 태스크 취급, 입력 데이터 취급, 중간 및 결과 데이터 취급 등에 대한 지시를 제공할 수 있다. 컴파일러는 어레이와 연관된 계산 요소, 저장 요소, 제어 유닛, ALU 등을 구성하기 위한 지시를 추가로 생성할 수 있다. 전술한 바와 같이, 컴파일러는 태스크 취급을 지원하기 위해 데이터 취급에 대한 지시를 생성한다. 시스템 블록도에서, 데이터 이동은 메모리 어레이로 로드 및 저장(640)하는 단계를 포함할 수 있다. 로드 및 저장은 정수, 실수 또는 부동 소수점, 배정도, 문자 및 기타 데이터 유형과 같은 다양한 데이터 유형 취급을 포함할 수 있다. 로드 및 저장은 레지스터, 레지스터 파일, 캐시 등과 같은 로컬 저장소에 데이터를 로드하고 저장할 수 있다. 캐시는 레벨 1(L1) 캐시, 레벨 2(L2) 캐시, 레벨 3(L3) 캐시 등과 같은 하나 이상의 캐시 레벨을 포함할 수 있다. 로드 및 저장은 또한 공유 메모리, 분산 메모리 등과 같은 저장소와 연관될 수 있다. 로드 및 저장 외에도, 컴파일러는 메모리 선행순위를 포함한 기타 메모리 및 저장소 관리 동작을 취급할 수 있다. 시스템 블록도에서 메모리 액세스 선행순위는 메모리 데이터(642)의 정렬을 가능하게 할 수 있다. 메모리 데이터는 태스크 데이터 요건, 하위 태스크 데이터 요건 등에 따라 정렬될 수 있다. 메모리 데이터 정렬은 태스크와 하위 태스크의 병렬 실행을 가능하게 할 수 있다.
시스템 블록도(600)에서, 메모리 데이터의 정렬은 계산 요소 결과 시퀀싱(644)을 가능하게 할 수 있다. 태스크 처리가 성공적으로 달성되기 위해, 태스크 우선순위, 태스크 선행순위, 동작 스케줄 등을 수용할 수 있는 순서로 태스크와 하위 태스크를 실행해야 한다. 태스크 및 하위 태스크가 실행되도록 스케줄링될 때 태스크 및 하위 태스크에 필요한 데이터를 처리에 사용할 수 있게 메모리 데이터를 정렬할 수 있다. 따라서, 태스크 및 하위 태스크에 의한 데이터 처리 결과는 태스크 실행을 최적화하고 메모리 경합 충돌 등을 감소시키거나 제거하도록 정렬될 수 있다. 시스템 블록도는 지시 세트에 기초하여 2개 이상의 잠재적인 컴파일된 태스크 결과의 동시 실행(646)을 활성화하는 단계를 포함한다. 컴파일러에 의해 컴파일된 코드는 분기점을 포함할 수 있고, 분기점은 계산이나 흐름 제어를 포함할 수 있다. 흐름 제어는 프로그램 실행을 다른 제어 워드 시퀀스로 전송한다. 예를 들어, 분기 결정의 결과는 선험적으로 알 수 없으므로, 양쪽 경로와 연관된 초기 동작이 현재 실행 중인 제어 워드 스트림에 인코딩된다. 올바른 분기의 결과가 결정되면, 그 후, 올바른 분기 결과와 연관된 제어 워드 시퀀스가 계속 실행되며, 반면에, 취해지지 않은 분기 경로에 대한 동작은 중단되고 부작용이 일소될(flushed) 수 있다. 실시예에서, 2개 이상의 잠재적 분기 경로는 계산 요소 어레이 내의 공간적으로 분리된 계산 요소에서 실행될 수 있다.
시스템 블록도는 계산 요소 유휴화(648)를 포함한다. 실시예에서, 컴파일러로부터의 지시 세트는 계산 요소 어레이에 위치한 계산 요소의 행 내에서 불필요한 계산 요소를 유휴 상태로 만들 수 있다. 처리되는 태스크, 하위 태스크 등에 따라 처리에 모든 계산 요소가 필요한 것은 아닐 수 있다. 단순히 어레이 내에서 사용할 수 있는 계산 요소보다 실행할 태스크 수가 적기 때문에 계산 요소가 필요하지 않을 수 있다. 실시예에서, 유휴 상태는 컴파일러에 의해 생성된 제어 워드의 단일 비트에 의해 제어될 수 있다. 시스템 블록도에서, 어레이 내의 계산 요소는 다양한 계산 요소 기능(650)에 대해 구성될 수 있다. 계산 요소 기능은 다양한 유형의 계산 아키텍처, 처리 구성 등을 인에이블시킬 수 있다. 실시예에서, 지시 세트는 기계 학습 기능을 인에이블시킬 수 있다. 이미지 데이터, 오디오 데이터, 의료 데이터 등과 같은 다양한 유형의 데이터를 처리하도록 기계 학습 기능을 훈련할 수 있다. 실시예에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 신경망은 컨볼루션 신경망, 순환 신경망, 딥러닝 네트워크 등을 포함할 수 있다. 시스템 블록도는 계산 요소 배치, 결과 라우팅, 계산 요소 어레이 내의 계산 웨이브프론트 전파(652)를 포함할 수 있다. 컴파일러는 어레이 내의 계산 요소에 태스크와 하위 태스크를 배치할 수 있는 지시 또는 명령어를 생성할 수 있다. 배치는 태스크 또는 하위 태스크 사이의 데이터 종속성을 기초로 태스크 및 하위 태스크를 배치하는 것, 메모리 충돌이나 통신 충돌을 피하는 태스크를 배치하는 것 등을 포함할 수 있다. 지시는 또한 계산 웨이브프론트 전파를 인에이블시킬 수 있다. 계산 웨이브프론트 전파는 태스크 및 하위 태스크의 실행이 계산 요소 어레이를 통해 진행되는 방식을 구현하고 제어할 수 있다.
시스템 블록도에서 컴파일러는 아키텍처 사이클(660)을 제어할 수 있다. 아키텍처 사이클은 요소 어레이 내의 요소와 연관된 추상 사이클을 포함할 수 있다. 어레이의 요소는 계산 요소, 저장 요소, 제어 요소, ALU 등을 포함할 수 있다. 아키텍처 사이클은 "추상" 사이클을 포함할 수 있고, 추상 사이클은 로드 사이클, 실행 사이클, 기록 사이클 등과 같은 다양한 아키텍처 수준 동작을 의미할 수 있다. 아키텍처 사이클은 하위 수준 동작보다는 아키텍처의 매크로 동작을 참조할 수 있다. 하나 이상의 아키텍처 사이클은 컴파일러에 의해 제어된다. 아키텍처 사이클의 실행은 2개 이상의 조건에 따라 달라질 수 있다. 실시예에서, 제어 워드가 계산 요소 어레이로 파이프라인되도록 사용할 수 있을 때 그리고 모든 데이터 종속성이 충족될 때 아키텍처 사이클이 발생할 수 있다. 즉, 계산 요소 어레이는 종속 데이터가 로드되거나 전체 메모리 큐가 소거될 때까지 기다릴 필요가 없다. 시스템 블록도에서 아키텍처 사이클은 하나 이상의 물리적 사이클(662)을 포함할 수 있다. 물리적 사이클은 로드, 실행, 기록 등을 구현하는 데 필요한 요소 수준에서 하나 이상의 사이클을 참조할 수 있다. 실시예에서, 지시 세트는 물리적 사이클별로 계산 요소 어레이를 제어할 수 있다. 물리적 사이클은 로컬, 모듈 또는 시스템 클록과 같은 클록이나 일부 다른 타이밍 또는 동기화 기술에 기초할 수 있다. 실시예에서, 물리적 사이클별 기반은 아키텍처 사이클을 포함할 수 있다. 물리적 사이클은 요소 어레이의 각각의 요소에 대한 인에이블 신호에 기초할 수 있으며, 반면에, 아키텍처 사이클은 글로벌 아키텍처 신호에 기초할 수 있다. 실시예에서, 컴파일러는 제어 워드를 통해 사이클별로 계산 요소 어레이의 각각의 열에 대한 유효 비트를 제공할 수 있다. 유효 비트는 데이터가 유효하고 처리할 준비가 되었는지, 도약 어드레스와 같은 어드레스가 유효한지 등을 나타낼 수 있다. 실시예에서, 유효 비트는 유효한 메모리 로드 액세스가 어레이로부터 나타나고 있음을 나타낼 수 있다. 어레이의 유효한 메모리 로드 액세스를 사용하여 메모리 또는 저장 요소 내의 데이터에 액세스할 수 있다. 다른 실시예에서, 컴파일러는 제어 워드를 통해 계산 요소 어레이의 각각의 열에 대한 피연산자 크기 정보를 제공할 수 있다. 다양한 피연산자 크기가 사용될 수 있다. 실시예에서, 피연산자 크기는 바이트, 하프워드, 워드 및 더블워드를 포함할 수 있다.
도 7은 태스크 처리를 위한 시스템 도면이다. 태스크 처리는 분산 레지스터 파일을 사용하는 병렬 처리 아키텍처를 통해 인에이블된다. 시스템(700)은 하나 이상의 프로세서(710)를 포함할 수 있으며, 이는 명령어를 저장하는 메모리(712)에 부착된다. 시스템(700)은 다음을 디스플레이하기 위해 하나 이상의 프로세서(710)에 결합된 디스플레이(714)를 더 포함할 수 있다: 데이터; 액세스 재기록, 중간 단계; 지시; 제어 워드; 압축된 제어 워드; VLIW(Very Long Instruction Word) 기능을 구현하는 제어 워드; 시스톨릭, 벡터, 순환, 공간, 스트리밍 또는 VLIW 토폴로지를 포함한 토폴로지; 등. 실시예에서, 하나 이상의 프로세서(710)가 메모리(712)에 결합되며, 하나 이상의 프로세서는 저장된 명령어를 실행할 때, 2차원(2D) 계산 요소 어레이에 액세스하되, 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고, 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합되고; 사이클별로 계산 요소 어레이를 제어하되, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블되고; 계산 요소 중 하나 이상 사이에 분산된 복수의 물리적 레지스터 파일에 가상 레지스터를 매핑하되, 매핑은 컴파일러에 의해 수행되고; 제어 워드에 포함된 작업을 실행하되, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블되도록 구성된다. 계산 요소는 하나 이상의 집적 회로 또는 칩 내의 계산 요소; 주문형 집적 회로(ASIC)와 같은 하나 이상의 프로그램 가능 칩 내에 구성된 계산 요소 또는 코어; 필드 프로그램 가능 게이트 어레이(FPGA); 메시로서 구성된 이종 프로세서; 독립형 프로세서; 등을 포함할 수 있다.
시스템(700)은 캐시(720)를 포함할 수 있다. 캐시(720)는 가상 레지스터 파일을 2R1W 레지스터 파일에 기초한 물리적 레지스터 파일로 매핑하는 것과 연관된 데이터, 컴파일러에 의한 재명명을 포함하는 가상 레지스터의 매핑, 계산 요소에 대한 지시, 제어 워드, 중간 결과, 마이크로코드, 분기 결정 등과 같은 데이터를 저장하기 위해 사용될 수 있다. 캐시는 하나 이상의 계산 요소에 사용할 수 있는 작고 로컬적이며, 쉽게 액세스할 수 있는 메모리를 포함할 수 있다. 실시예에서, 저장된 데이터는 가상 레지스터를 적어도 2개의 물리적 레지스터에 매핑하는 것과 연관된 데이터를 포함할 수 있다. 실시예는 계산 요소 어레이와 연관된 캐시 내에 제어 워드의 관련 부분을 저장하는 단계를 포함한다. 캐시는 하나 이상의 계산 요소에 액세스할 수 있다. 존재하는 경우, 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 포함할 수 있다. 즉, 2R1W 캐시는 판독 및 기록 동작이 서로 간섭하지 않고 2개의 판독 동작과 하나의 기록 동작을 동시에 가능하게 할 수 있다.
시스템(700)은 액세싱 컴포넌트(730)를 포함할 수 있다. 액세싱 컴포넌트(730)는 2차원(2D) 계산 요소 어레이에 액세스하기 위한 제어 로직 및 기능을 포함할 수 있다. 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합된다. 계산 요소는 하나 이상의 프로세서, 프로세서 코어, 프로세서 매크로 등을 포함할 수 있다. 각각의 계산 요소는 소정 양의 로컬 저장소를 포함할 수 있다. 로컬 저장소는 하나 이상의 계산 요소에 액세스할 수 있다. 각각의 계산 요소는 이웃과 통신할 수 있으며, 이웃은 가장 가까운 이웃 또는 더 먼 "이웃"을 포함할 수 있다. 계산 요소 사이의 통신은 산업 표준 버스와 같은 버스, 링 버스, 유선 또는 무선 컴퓨터 네트워크와 같은 네트워크 등을 사용하여 달성될 수 있다. 실시예에서, 링 버스는 분산 멀티플렉서(MUX)로 구현된다.
시스템(700)은 제어 컴포넌트(740)를 포함할 수 있다. 제어 컴포넌트(740)는 사이클별로 계산 요소 어레이를 제어하기 위한 제어 및 기능을 포함할 수 있고, 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블된다. 제어 워드는 어셈블리 언어 워드, 마이크로코드 워드, 펌웨어 워드 등과 같은 저수준 제어 워드에 기초할 수 있다. 제어 워드의 길이는 가변 길이일 수 있고, 따라서, 서로 다른 복수의 계산 요소에 대한 서로 다른 수의 동작이 각각의 제어 워드에 전달될 수 있다. 사이클별로 계산 요소 어레이를 제어하는 것은 다양한 계산 동작을 수행하도록 어레이를 구성하는 단계를 포함할 수 있다. 실시예에서, 광폭 제어 워드의 스트림은 컴파일러에 의해 생성된 가변 길이 제어 워드를 포함한다. 실시예에서, 컴파일러에 의해 생성된 광폭 가변 길이 제어 워드의 스트림은 계산 요소의 2D 어레이에 대한 직접적이고 세분화된 제어를 제공한다. 계산 동작은 판독-수정-기록 동작을 포함할 수 있다. 계산 동작을 통해 오디오 또는 비디오 처리, 인공 지능 처리, 기계 학습, 딥러닝 등을 가능하게 할 수 있다. 제공 제어는 마이크로코드 제어 워드에 기초할 수 있으며, 마이크로코드 제어 워드는 연산코드 필드, 데이터 필드, 계산 어레이 구성 필드 등을 포함할 수 있다. 제어를 생성하는 컴파일러는 범용 컴파일러, 병렬 컴파일러, 계산 요소 어레이에 최적화된 컴파일러, 하나 이상의 처리 태스크를 수행하도록 특화된 컴파일러 등을 포함할 수 있다. 제어의 제공은 계산 요소 어레이 내에서 처리 토폴로지와 같은 하나 이상의 토폴로지를 구현할 수 있다. 실시예에서, 계산 요소 어레이 내에 구현된 토폴로지는 시스톨릭, 벡터, 순환, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함할 수 있다. 다른 토폴로지는 신경망 토폴로지를 포함할 수 있다. 제어는 신경망 토폴로지에 대한 기계 학습 기능을 인에이블시킬 수 있다.
시스템 블록도(700)는 매핑 컴포넌트(750)를 포함할 수 있다. 매핑 컴포넌트(750)는 가상 레지스터를 하나 이상의 계산 요소 사이에 분산된 복수의 물리적 레지스터 파일에 매핑하기 위한 제어 및 기능을 포함할 수 있고, 매핑은 컴파일러에 의해 수행된다. 실시예에서, 가상 레지스터는 컴파일러에 의해 표현된다. 표현은 사용자 또는 컴파일러에서 생성된 이름, 라벨, 태그, 참조 등을 포함할 수 있다. 계산 요소 어레이에는 물리적 레지스터를 포함할 수 있고, 물리적 레지스터는 하나 이상의 계산 요소와 연관될 수 있다. 물리적 레지스터의 수는 2D 어레이의 크기, 계산 요소의 수 등에 따라 달라질 수 있다. 실시예에서, 물리적 레지스터의 수는 가상 레지스터의 수보다 더 클 수 있다. 가상 레지스터는 2개 이상의 물리적 레지스터에 매핑될 수 있다. 실시예에서, 가상 레지스터 중 적어도 하나는 적어도 2개의 물리적 레지스터에 매핑될 수 있다. 가상 레지스터가 매핑되는 물리적 레지스터는 단일 계산 요소와 연관될 수 있거나, 또는 2개 이상의 계산 요소와 연관될 수 있다. 가상 레지스터를 별개의 계산 요소에서 구현된 물리적 레지스터에 매핑함으로써, 병렬 연산 처리가 인에이블될 수 있다.
시스템(700)은 실행 컴포넌트(760)를 포함할 수 있다. 실행 컴포넌트(760)는 제어 워드에 포함된 동작을 실행하기 위한 제어 및 기능을 포함할 수 있고, 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블된다. 수행할 수 있는 동작은 산술 연산, 부울 연산, 행렬 연산, 신경망 연산 등을 포함할 수 있다. 동작은 컴파일러가 생성한 제어 워드를 기초로 실행될 수 있다. 제어 워드는 제어 유닛에 제공될 수 있고, 제어 유닛이 계산 요소 어레이 내의 계산 요소의 동작을 제어할 수 있다. 계산 요소의 동작은 계산 요소 구성, 계산 요소에 데이터 제공, 계산 요소의 결과 라우팅 및 정렬 등을 포함할 수 있다. 실시예에서, 동일한 압축 해제된 제어 워드가 계산 요소 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 제어 워드는 압축 해제되어 계산 요소별 기반으로 제어를 제공할 수 있으며, 각각의 제어 워드는 복수의 계산 요소 제어 그룹 또는 묶음으로 구성될 수 있다. 하나 이상의 제어 워드는 캐시와 같은 메모리 내에 압축된 형식으로 저장될 수 있다. 제어 워드를 압축하면 저장 요건을 크게 감소시킬 수 있다. 실시예에서, 제어 유닛은 압축 해제된 제어 워드에 대해 동작할 수 있다. 제어 워드에 포함된 동작의 실행은 동작의 분산 실행을 포함할 수 있다. 실시예에서, 동작의 분산 실행은 계산 요소 어레이 내의 2개 이상의 계산 요소에서 발생할 수 있다. 가상 레지스터 매핑은 컴파일러에 의한 재명명을 포함할 수 있다는 점을 상기한다. 다른 실시예에서, 재명명은 컴파일러가 물리적 레지스터 파일을 사용하여 동작의 실행을 조율하는 것을 가능하게 할 수 있다.
시스템(700)은 태스크 처리를 위해 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품을 포함할 수 있으며, 컴퓨터 프로그램 제품은 하나 이상의 프로세서가, 2차원(2D) 계산 요소 어레이에 액세스하는 동작- 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고, 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합됨 -; 사이클별로 계산 요소 어레이를 제어하는 동작- 제어는 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블됨 -; 계산 요소 중 하나 이상 사이에 분산된 복수의 물리적 레지스터 파일에 가상 레지스터를 매핑하는 동작- 매핑은 컴파일러에 의해 수행됨 -; 제어 워드에 포함된 작업을 실행하는 동작- 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블됨 -을 수행하도록 하는 코드를 포함한다.
위의 방법 각각은 하나 이상의 컴퓨터 시스템 상의 하나 이상의 프로세서에서 실행될 수 있다. 실시예는 다양한 형태의 분산 계산, 클라이언트/서버 계산 및 클라우드 기반 계산을 포함할 수 있다. 또한, 본 개시의 흐름도에 포함된 설명된 단계 또는 박스는 단지 예시적이고 설명적인 것임을 이해할 것이다. 단계는 본 개시의 범위를 벗어나지 않고 수정, 생략, 반복 또는 재정렬될 수 있다. 또한, 각각의 단계는 하나 이상의 하위 단계를 포함할 수 있다. 전술한 도면 및 설명은 개시된 시스템의 기능적 양태를 설명하지만, 명시적으로 언급되거나 문맥에서 달리 명확하지 않는 한, 이러한 설명으로부터 소프트웨어 및/또는 하드웨어의 특정 구현 또는 배열을 추론해서는 안 된다. 소프트웨어 및/또는 하드웨어의 이러한 모든 배열은 본 개시의 범위에 속하기를 의도한다.
블록도와 흐름도 도면은 방법, 장치, 시스템 및 컴퓨터 프로그램 제품을 묘사한다. 블록도 및 흐름도의 요소 및 요소의 조합은 방법, 장치, 시스템, 컴퓨터 프로그램 제품 및/또는 컴퓨터 구현 방법의 기능, 단계 또는 단계 그룹을 도시한다. 일반적으로, 본 출원에서 "회로", "모듈" 또는 "시스템"이라고 지칭되는 임의의 및 모든 이러한 기능은 컴퓨터 프로그램 명령어, 특수 목적 하드웨어 기반 컴퓨터 시스템, 특수 목적 하드웨어 및 컴퓨터 명령어의 조합, 범용 하드웨어와 컴퓨터 명령어의 조합 등에 의해 구현될 수 있다.
전술한 컴퓨터 프로그램 제품 또는 컴퓨터 구현 방법 중 임의의 것을 실행하는 프로그램 가능 장치는 하나 이상의 마이크로프로세서, 마이크로컨트롤러, 임베디드 마이크로컨트롤러, 프로그램 가능 디지털 신호 프로세서, 프로그램 가능 디바이스, 프로그램 가능 게이트 어레이, 프로그램 가능 어레이 로직, 메모리 디바이스, 주문형 집적 회로 등을 포함할 수 있다. 각각은 컴퓨터 프로그램 명령어를 처리하고, 컴퓨터 로직을 실행하고, 컴퓨터 데이터를 저장하는 등을 위해 적절히 채용되거나 구성될 수 있다.
컴퓨터는 컴퓨터 판독 가능 저장 매체로부터의 컴퓨터 프로그램 제품을 포함할 수 있고 이 매체는 내장형 또는 외장형, 제거 가능 및 교체 가능 또는 고정형일 수 있음을 이해할 것이다. 또한, 컴퓨터는 본 출원에 설명된 소프트웨어 및 하드웨어를 포함할 수 있거나, 그와 인터페이스 또는 그를 지원할 수 있는 BIOS(Basic Input/Output System), 펌웨어, 운영 체제, 데이터베이스 등을 포함할 수 있다.
본 발명의 실시예는 종래의 컴퓨터 애플리케이션이나 이를 실행하는 프로그램 가능 장치로 제한되지 않는다. 설명하자면: 현재 청구된 발명의 실시예는 광학 컴퓨터, 양자 컴퓨터, 아날로그 컴퓨터 등을 포함할 수 있다. 컴퓨터 프로그램은 컴퓨터에 로드되어 설명된 임의의 및 모든 기능을 수행할 수 있는 특정 기계를 생성할 수 있다. 이 특정 기계는 설명된 임의의 및 모든 기능을 수행하기 위한 수단을 제공한다.
다음을 포함하지만 이에 제한되지 않는 하나 이상의 컴퓨터 판독 가능 매체의 임의의 조합을 이용할 수 있다: 저장을 위한 비일시적 컴퓨터 판독 가능 매체; 전자, 자기, 광학, 전자기, 적외선 또는 반도체 컴퓨터 판독 가능 저장 매체 또는 전술한 것의 임의의 적합한 조합; 휴대용 컴퓨터 디스켓; 하드 디스크; 랜덤 액세스 메모리(RAM); 판독 전용 메모리(ROM), 소거 가능 프로그램 가능 판독 전용 메모리(EPROM, 플래시, MRAM, FeRAM 또는 상변화 메모리); 광섬유; 휴대용 콤팩트 디스크; 광학 저장 디바이스; 자기 저장 디바이스; 또는 전술한 것의 임의의 적합한 조합. 이 문서에 관련하여 컴퓨터 판독 가능 저장 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함하거나 저장할 수 있는 임의의 유형의 매체일 수 있다.
컴퓨터 프로그램 명령어는 컴퓨터 실행 가능 코드를 포함할 수 있다는 것을 이해할 것이다. 컴퓨터 프로그램 명령어를 표현하기 위한 다양한 언어는 C, C++, Java, JavaScript™, ActionScript™, 어셈블리 언어, Lisp, Perl, Tcl, Python, Ruby, 하드웨어 기술 언어, 데이터베이스 프로그래밍 언어, 함수형 프로그래밍 언어, 명령어형 프로그래밍 언어 등을 제한 없이 포함할 수 있다. 실시예에서, 컴퓨터 프로그램 명령어는 컴퓨터, 프로그램 가능한 데이터 처리 장치, 프로세서 또는 프로세서 아키텍처의 이종 조합 등에서 실행되도록 저장, 컴파일 또는 해석될 수 있다. 제한 없이, 본 발명의 실시예는 클라이언트/서버 소프트웨어, 서비스형 소프트웨어, 피어 투 피어 소프트웨어 등을 포함하는 웹 기반 컴퓨터 소프트웨어의 형태를 취할 수 있다.
실시예에서, 컴퓨터는 다수의 프로그램 또는 스레드를 포함하는 컴퓨터 프로그램 명령어의 실행을 가능하게 할 수 있다. 다수의 프로그램 또는 스레드는 프로세서의 이용을 개선시키고 실질적으로 동시적인 기능을 용이하게 하기 위해 거의 동시적으로 처리될 수 있다. 구현을 통해, 본 출원에 설명된 임의의 및 모든 방법, 프로그램 코드, 프로그램 명령어 등은 하나 이상의 스레드에서 구현될 수 있으며, 이는 차례로 그와 자체적으로 연관된 우선순위를 가질 수 있는 다른 스레드를 생성할 수 있다. 일부 실시예에서, 컴퓨터는 우선순위 또는 다른 순서에 기초하여 이들 스레드를 처리할 수 있다.
명시적으로 언급되거나 문맥에서 달리 명확하지 않는 한, 동사 "실행" 및 "프로세스"는 실행, 처리, 해석, 컴파일, 어셈블, 링크, 로드 또는 전술한 바의 조합을 나타내기 위해 상호 교환적으로 사용될 수 있다. 따라서, 컴퓨터 프로그램 명령어, 컴퓨터 실행 가능 코드 등을 실행하거나 처리하는 실시예는 설명된 임의의 및 모든 방식으로 명령어 또는 코드에 따라 작동할 수 있다. 또한, 도시된 방법 단계는 하나 이상의 당사자 또는 엔티티가 단계를 수행하게 하는 임의의 적절한 방법을 포함하는 것을 의도한다. 단계 또는 단계의 일부를 수행하는 당사자는 특정 지리적 위치 또는 국가 경계 내에 위치할 필요가 없다. 예를 들어, 미국 내에 위치한 엔티티가 방법 단계 또는 그 일부를 미국 외부에서 수행하게 하는 경우, 이때, 해당 방법은 원인 엔티티에 의거하여 미국에서 수행되는 것으로 고려된다.
본 발명은 상세히 도시되고 설명된 바람직한 실시예와 관련하여 개시되었지만, 본 기술 분야의 숙련자는 이에 대한 다양한 수정 및 개선을 명백히 알 수 있을 것이다. 따라서, 전술한 예는 본 발명의 사상 및 범위를 제한해서는 안 되며; 오히려 법이 허용하는 가장 넓은 의미로 이해하여야 한다.

Claims (38)

  1. 태스크 처리를 위한 프로세서 구현 방법에 있어서,
    2차원(2D) 계산 요소 어레이에 액세스하는 단계- 상기 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고, 상기 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합됨 -;
    사이클별로 상기 계산 요소 어레이를 제어하는 단계- 상기 제어는 상기 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블됨 -;
    상기 계산 요소 중 하나 이상 사이에 분산된 복수의 물리적 레지스터 파일에 가상 레지스터를 매핑하는 단계- 상기 매핑은 상기 컴파일러에 의해 수행됨 -; 및
    상기 제어 워드에 포함된 동작을 실행하는 단계- 상기 동작은 상기 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블됨 -를 포함하는, 방법.
  2. 제1항에 있어서, 상기 가상 레지스터는 상기 컴파일러에 의해 표현되는, 방법.
  3. 제2항에 있어서, 상기 물리적 레지스터의 수는 상기 가상 레지스터의 수보다 더 많은, 방법.
  4. 제3항에 있어서, 상기 가상 레지스터 중 적어도 하나는 적어도 2개의 물리적 레지스터에 매핑되는, 방법.
  5. 제4항에 있어서, 상기 적어도 2개의 물리적 레지스터는 상기 계산 요소 어레이 내의 별개의 계산 요소에서 구현되는, 방법.
  6. 제5항에 있어서, 상기 별개의 계산 요소에서의 구현은 병렬 연산 처리를 가능하게 하는, 방법.
  7. 제2항에 있어서, 상기 가상 레지스터의 수는 상기 물리적 레지스터의 수보다 더 많은, 방법.
  8. 제1항에 있어서, 상기 가상 레지스터의 매핑은 상기 컴파일러에 의한 재명명을 포함하는, 방법.
  9. 제8항에 있어서, 상기 컴파일러에 의한 재명명은 상기 동작의 분산 실행을 가능하게 하는, 방법.
  10. 제9항에 있어서, 상기 동작의 분산 실행은 상기 계산 요소 어레이 내의 2개 이상의 계산 요소에서 발생하는, 방법.
  11. 제8항에 있어서, 상기 컴파일러에 의한 재명명은 레지스터 파일의 테이블에 기초하는, 방법.
  12. 제8항에 있어서, 상기 재명명은 상기 컴파일러가 상기 물리적 레지스터 파일을 사용하여 동작의 실행을 조율할 수 있게 하는, 방법.
  13. 제1항에 있어서, 상기 물리적 레지스터 파일 각각은 2개 판독 포트와 1개 기록 포트(2R1W)를 갖는 메모리 요소를 포함하는, 방법.
  14. 제13항에 있어서, 복수의 2R1W 물리적 레지스터 파일이 상기 어레이 전체에 걸쳐 분산되는, 방법.
  15. 제13항에 있어서, 상기 2R1W 물리적 레지스터 파일은 사이클당 256 비트 판독 및 128 비트 기록을 효과적으로 제공하는, 방법.
  16. 제1항에 있어서, 상기 물리적 레지스터 파일 중 2개 이상에 대한 브로드캐스트 기록 동작을 인에이블시키는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서, 상기 2개 이상의 물리적 레지스터 파일 각각은 상기 계산 요소 어레이의 계산 요소에 분산되는, 방법.
  18. 제1항에 있어서, 상기 컴파일러는 기계 학습 기능을 상기 계산 요소 어레이에 매핑하는, 방법.
  19. 제18항에 있어서, 상기 기계 학습 기능은 신경망 구현을 포함하는, 방법.
  20. 제1항에 있어서, 상기 광폭 제어 워드의 스트림은 상기 컴파일러에 의해 생성된 가변 길이 제어 워드를 포함하는, 방법.
  21. 제20항에 있어서, 상기 컴파일러에 의해 생성된 광폭, 가변 길이, 제어 워드의 스트림은 상기 2D 계산 요소 어레이에 대한 직접적이고 세분화된 제어를 제공하는, 방법.
  22. 태스크 처리를 위해 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품에 있어서, 상기 컴퓨터 프로그램 제품은 하나 이상의 프로세서가,
    2차원(2D) 계산 요소 어레이에 액세스하는 동작- 상기 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고, 상기 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합됨 -;
    사이클별로 상기 계산 요소 어레이를 제어하는 동작- 상기 제어는 상기 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블됨 -;
    상기 계산 요소 중 하나 이상 사이에 분산된 복수의 물리적 레지스터 파일에 가상 레지스터를 매핑하는 동작- 상기 매핑은 상기 컴파일러에 의해 수행됨 -; 및
    상기 제어 워드에 포함된 동작을 실행하는 동작- 상기 동작은 상기 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블됨 -을 수행하도록 하는 코드를 포함하는, 컴퓨터 프로그램 제품.
  23. 제22항에 있어서, 상기 가상 레지스터는 상기 컴파일러에 의해 표현되는, 컴퓨터 프로그램 제품.
  24. 제23항에 있어서, 상기 물리적 레지스터의 수는 상기 가상 레지스터의 수보다 더 많은, 컴퓨터 프로그램 제품.
  25. 제24항에 있어서, 상기 가상 레지스터 중 적어도 하나는 적어도 2개의 물리적 레지스터에 매핑되는, 컴퓨터 프로그램 제품.
  26. 제25항에 있어서, 상기 적어도 2개의 물리적 레지스터는 상기 계산 요소 어레이 내의 별개의 계산 요소에서 구현되는, 컴퓨터 프로그램 제품.
  27. 제22항에 있어서, 상기 가상 레지스터의 매핑은 상기 컴파일러에 의한 재명명을 포함하는, 컴퓨터 프로그램 제품.
  28. 제22항에 있어서, 상기 물리적 레지스터 파일 중 2개 이상에 대한 브로드캐스트 기록 동작을 인에이블시키기 위한 코드를 더 포함하는, 컴퓨터 프로그램 제품.
  29. 제28항에 있어서, 상기 2개 이상의 물리적 레지스터 파일 각각은 상기 계산 요소 어레이의 계산 요소에 분산되는, 컴퓨터 프로그램 제품.
  30. 제29항에 있어서, 상기 2개 이상의 물리적 레지스터 파일 각각은 상기 계산 요소 어레이의 계산 요소에 분산되는, 컴퓨터 프로그램 제품.
  31. 태스크 처리를 위한 컴퓨터 시스템에 있어서,
    명령어를 저장하는 메모리;
    상기 메모리에 결합된 하나 이상의 프로세서를 포함하고, 상기 하나 이상의 프로세서는 저장된 상기 명령어를 실행할 때,
    2차원(2D) 계산 요소 어레이에 액세스하되, 상기 계산 요소 어레이 내의 각각의 계산 요소는 컴파일러에 알려지고, 상기 계산 요소 어레이 내의 그 이웃하는 계산 요소에 결합되고;
    사이클별로 상기 계산 요소 어레이를 제어하되, 상기 제어는 상기 컴파일러에 의해 생성된 광폭 제어 워드의 스트림에 의해 인에이블되고;
    상기 계산 요소 중 하나 이상 사이에 분산된 복수의 물리적 레지스터 파일에 가상 레지스터를 매핑하되, 상기 매핑은 상기 컴파일러에 의해 수행되고;
    상기 제어 워드에 포함된 동작을 실행하되, 상기 동작은 복수의 분산된 물리적 레지스터 파일 중 적어도 하나에 의해 인에이블되도록 구성되는, 컴퓨터 시스템.
  32. 제31항에 있어서, 상기 가상 레지스터는 상기 컴파일러에 의해 표현되는, 컴퓨터 시스템.
  33. 제32항에 있어서, 상기 물리적 레지스터의 수는 상기 가상 레지스터의 수보다 더 많은, 컴퓨터 시스템.
  34. 제33항에 있어서, 상기 가상 레지스터 중 적어도 하나는 적어도 2개의 물리적 레지스터에 매핑되는, 컴퓨터 시스템.
  35. 제34항에 있어서, 상기 적어도 2개의 물리적 레지스터는 상기 계산 요소 어레이 내의 별개의 계산 요소에서 구현되는, 컴퓨터 시스템.
  36. 제31항에 있어서, 상기 가상 레지스터의 매핑은 상기 컴파일러에 의한 재명명을 포함하는, 컴퓨터 시스템.
  37. 제31항에 있어서, 상기 물리적 레지스터 파일 중 2개 이상에 대한 브로드캐스트 기록 동작을 인에이블시키도록 추가로 구성되는, 컴퓨터 시스템.
  38. 제37항에 있어서, 상기 2개 이상의 물리적 레지스터 파일 각각은 상기 계산 요소 어레이의 계산 요소에 분산되는, 컴퓨터 시스템.
KR1020247007624A 2021-08-12 2022-06-15 분산 레지스터 파일을 사용한 병렬 처리 아키텍처 KR20240038109A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202163232230P 2021-08-12 2021-08-12
US63/232,230 2021-08-12
PCT/US2022/033510 WO2023018477A1 (en) 2021-08-12 2022-06-15 Parallel processing architecture using distributed register files

Publications (1)

Publication Number Publication Date
KR20240038109A true KR20240038109A (ko) 2024-03-22

Family

ID=85200194

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020247007624A KR20240038109A (ko) 2021-08-12 2022-06-15 분산 레지스터 파일을 사용한 병렬 처리 아키텍처

Country Status (2)

Country Link
KR (1) KR20240038109A (ko)
WO (1) WO2023018477A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109325494B (zh) * 2018-08-27 2021-09-17 腾讯科技(深圳)有限公司 图片处理方法、任务数据处理方法和装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB201001621D0 (en) * 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
KR102070199B1 (ko) * 2012-05-11 2020-01-28 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 코드 압축해제 방법
US20150268963A1 (en) * 2014-03-23 2015-09-24 Technion Research & Development Foundation Ltd. Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware
US20160246602A1 (en) * 2015-02-19 2016-08-25 Arizona Board Of Regents On Behalf Of Arizona State University Path selection based acceleration of conditionals in coarse grain reconfigurable arrays (cgras)
CN108364251B (zh) * 2017-01-26 2021-06-25 超威半导体公司 具有通用寄存器资源管理的矢量处理器

Also Published As

Publication number Publication date
WO2023018477A1 (en) 2023-02-16

Similar Documents

Publication Publication Date Title
US11880426B2 (en) Integer matrix multiplication engine using pipelining
US20200174707A1 (en) Fifo filling logic for tensor calculation
US11934308B2 (en) Processor cluster address generation
US10997102B2 (en) Multidimensional address generation for direct memory access
KR20240038109A (ko) 분산 레지스터 파일을 사용한 병렬 처리 아키텍처
US20230128127A1 (en) Compute element processing using control word templates
US20220075627A1 (en) Highly parallel processing architecture with shallow pipeline
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
KR20230101851A (ko) 컴파일러를 이용한 고도의 병렬 처리 아키텍처
US20220308872A1 (en) Parallel processing architecture using distributed register files
US20220291957A1 (en) Parallel processing architecture with distributed register files
US20230342152A1 (en) Parallel processing architecture with split control word caches
US20230221931A1 (en) Autonomous compute element operation using buffers
US20230409328A1 (en) Parallel processing architecture with memory block transfers
US20230031902A1 (en) Load latency amelioration using bunch buffers
WO2022251272A1 (en) Parallel processing architecture with distributed register files
US20240078182A1 (en) Parallel processing with switch block execution
US20230376447A1 (en) Parallel processing architecture with dual load buffers
US20230273818A1 (en) Highly parallel processing architecture with out-of-order resolution
US20230281014A1 (en) Parallel processing of multiple loops with loads and stores
WO2024006401A1 (en) Parallel processing architecture with split control word caches
US20220374286A1 (en) Parallel processing architecture for atomic operations
US20230350713A1 (en) Parallel processing architecture with countdown tagging
US20220214885A1 (en) Parallel processing architecture using speculative encoding
WO2023183279A1 (en) Autonomous compute element operation using buffers