KR20230101851A - 컴파일러를 이용한 고도의 병렬 처리 아키텍처 - Google Patents

컴파일러를 이용한 고도의 병렬 처리 아키텍처 Download PDF

Info

Publication number
KR20230101851A
KR20230101851A KR1020237018396A KR20237018396A KR20230101851A KR 20230101851 A KR20230101851 A KR 20230101851A KR 1020237018396 A KR1020237018396 A KR 1020237018396A KR 20237018396 A KR20237018396 A KR 20237018396A KR 20230101851 A KR20230101851 A KR 20230101851A
Authority
KR
South Korea
Prior art keywords
array
compute
elements
compute elements
directions
Prior art date
Application number
KR1020237018396A
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 KR20230101851A publication Critical patent/KR20230101851A/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

컴파일러를 이용한 고도의 병렬 처리 아키텍처를 사용하는 작업 처리를 위한 기술들이 개시된다. 컴퓨트 요소들의 2차원 어레이가 액세스된다. 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합된다. 컴퓨트 요소 동작 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 방향들의 세트가 하드웨어에 제공된다. 방향들의 세트는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어한다. 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업이 실행된다. 컴퓨트 요소 결과들은 어레이에서 병렬로 생성되고, 컴퓨트 요소 결과들은 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화된다.

Description

컴파일러를 이용한 고도의 병렬 처리 아키텍처
관련 출원
본 출원은 2020년 11월 16일에 출원된 미국 가 특허출원 "Highly Parallel Processing Architecture With Compiler" 제63/114,003호에 대한 우선권을 주장한다.
전술한 출원은 허용가능한 경우 관할권에서 그 전문이 원용된다.
기술분야
본 출원은 일반적으로 작업 처리에 관한 것으로, 특히 컴파일러를 이용한 고도의 병렬 처리 아키텍처에 관한 것이다.
조직들은 그들의 표준, 일간 동작들의 일부로서 처리 작업들을 일상적으로 실행한다. 조직들은 크기가 작은 로컬 조직들로부터 지구에 걸치는 관심들을 갖는 큰 조직들까지의 범위일 수 있다. 이들 조직들은 금융 기관들, 제조자들, 정부들, 병원들, 대학들, 연구 실험실들, 소셜 서비스 그룹들, 소매 시설들, 및 많은 다른 것들을 포함한다. 조직의 크기 및 동작에 관계없이, 조직에 의해 수행되는 처리 작업은 그 동작과 관련된 데이터를 처리한다. 많은 경우들에서, 데이터 세트들 또는 "데이터 세트들"은 방대하다. 이들 데이터세트는 은행 계좌 번호 및 잔액, 거래 및 제조 비밀, 식별 및 분류 정보, 의료 기록, 학술 등급 및 등급의 기록, 연구 데이터, 무가정 인구 정보, 판매 도면 등을 포함할 수 있다. 이름, 나이, 주소, 전화 번호 및 이메일 주소가 또한 일반적으로 포함된다. 데이터 세트의 내용이 무엇이든지 간에, 데이터 세트의 처리는 계산적으로 복잡할 수 있다. 데이터 필드들은 공백(blank)일 수 있거나, 또는 데이터는 잘못된 필드에 부정확하게 입력될 수 있고; 이름들은 철자가 틀릴 수 있으며; 그리고 몇 가지 가능한 데이터 입력 과제들만을 열거하기 위해, 약어들 또는 약어 표기법들이 일관되지 않게 적용될 수 있다. 데이터세트의 콘텐츠가 무엇이든지 간에, 데이터의 효과적인 처리가 중요하다.
많은 조직들에 대한 상황은 주어진 조직의 성공 또는 실패가 성공적인 데이터 처리를 수행하는 능력에 직접적으로 의존한다는 것이다. 또한, 데이터의 처리는 일부 랜덤 또는 일반적인 방식으로 단순히 수행되지 않는다. 대신에, 처리는 조직에 직접적으로 이익을 주는 방식으로 수행되어야 한다. 조직에 따라, 데이터 처리의 직접적인 이점은 경쟁적이고 재정적 이득이다. 데이터 처리 목적들이 조직의 요건들을 충족시키는 관점에서 성공적이면, 조직은 번거롭다. 한편, 처리 목표들이 충족되지 않으면, 성공하지 못한 조직들에 대해 불편한 그리고 아마도 번거로운 결과들이 예상될 수 있다. 데이터에 포함된 중계기들은 식별되고 추적되어야 하는 한편, 이례적인 데이터가 주목되고 추적된다. 식별된 트렌드 및 수익화된 이상은 경쟁적 이점을 제공할 수 있다.
광범위하고 상이한 범위의 개인들로부터 데이터를 축적하는데 사용되는 데이터 수집 기술들은 많고 다양하다. 데이터가 수집되는 개인들은 많은 다른 것들 중에서 고객들, 시민들, 환자들, 학생들, 테스트 대상들, 구매자들, 및 자원자들을 포함한다. 그러나, 때때로, 데이터는 우불한 대상으로부터 수집된다. 데이터 수집을 위해 일반적으로 사용되는 기술들은 "옵트-인(opt-in)" 기술들을 포함하며, 여기서 개별적인 사인 업, 등록, 계정 생성, 또는 그렇지 않으면 데이터 수집에 참여하는 것에 동의한다. 다른 기술들은 등록 번호를 획득하고 정부 기관들, 법 집행, 긴급 서비스들 등과의 모든 상호작용들에 대해 그 번호를 사용하도록 시민들을 요구하는 정부와 같은 법적이다. 구매 이력 추적, 웹사이트 방문, 버튼 클릭 및 메뉴 선택과 같은 추가적인 데이터 수집 기술은 더 미묘하거나 완전히 숨겨진다. 수집된 데이터는 데이터 수집을 위해 사용된 기술에 관계없이 조직에 가치가 있다. 이러한 큰 데이터세트의 신속한 처리가 중요하다.
작업 처리는 페이롤(payroll)을 실행하기 위한 것이든, 연구 데이터를 분석하기 위한 것이든, 또는 기계 학습을 위한 신경망을 훈련시키기 위한 것이든, 많은 복잡한 작업들로 구성된다. 작업들은 데이터세트들을 로딩 및 저장하는 것, 처리 구성요소들 및 시스템들에 액세스하는 것 등을 포함할 수 있다. 작업들 자체는 하위 작업들에 기초할 수 있으며, 여기서 하위 작업들은 저장소로부터 데이터를 로딩 또는 판독하는 것, 데이터에 대한 계산들을 수행하는 것, 데이터를 저장소에 다시 저장 또는 기록하는 것, 데이터 및 제어와 같은 하위 작업간 통신을 핸들링하는 것 등을 핸들링하기 위해 사용될 수 있다. 액세스되는 데이터세트들은 방대할 수 있고, 처리 작업들에 적합하지 않거나 자신들의 아키텍처들에 있어서 유연성이 없는 처리 아키텍처들을 변형시킬 수 있다. 작업 처리 효율 및 처리량을 크게 개선하기 위해, 요소들의 2차원(2D) 어레이들이 작업 및 하위 작업 처리에 사용될 수 있다. 어레이들은 컴퓨트 요소들, 승산기 요소들, 캐시들, 큐들, 제어기들, 압축해제기들, ALU들, 및 다른 구성요소들의 2D 어레이들을 포함한다. 이들 어레이들은 사이클 단위 기반으로 어레이에 제어를 제공함으로써 구성되고 동작된다. 2D 어레이의 제어는 관련된 하드웨어 유닛들, 버스들, 메모리들 등을 포함하는, 컴퓨트 요소들의 2D 어레이를 포함하는 하드웨어에 방향들을 제공함으로써 실현된다. 방향들은 제어 워드들의 스트림을 포함하며, 여기서 제어 워드들은 컴파일러에 의해 생성된 와이드한 가변 길이 마이크로코드 제어 워드들을 포함할 수 있다. 제어 워드들은 작업들을 처리하기 위해 사용된다. 또한, 어레이들은 작업 처리에 가장 적합한 토폴로지로 구성될 수 있다. 어레이들이 구성될 수 있는 토폴로지들은 시스토릭, 벡터, 사이크릭, 공간, 스트리밍, 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함한다. 토폴로지들은 기계 학습 기능을 가능하게 하는 토폴로지를 포함할 수 있다.
작업 처리는 컴파일러를 이용한 고도의 병렬 처리 아키텍처에 기반한다. 작업 처리를 위한 프로세서 구현 방법으로서: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 단계 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―; 컴퓨트 요소 연산 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하는 단계 ― 방향들의 세트는 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 함 ―; 및 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하는 단계를 포함하는, 방법이 개시된다. 실시예들에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이에서 병렬로 생성된다. 병렬 생성은 병렬 처리, SIMD(single instruction multiple data) 처리 등을 가능하게 할 수 있다. 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화된다. 컴퓨트 요소 상의 작업의 실행은 작업에 의해 요구되는 데이터의 이용가능성 및 제어의 도달 둘 다에 의존한다. 제어 워드는 데이터 이용가능성 전에, 데이터 이용가능성 과 동시에, 또는 데이터 이용가능성에 후속하여 도달할 수 있다. 컴퓨트 요소 결과들은 우선순위(priority), 우위(precedence) 등에 기초하여 순서화될 수 있다. 다른 실시예들에서, 판독 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어한다. 데이터 이동은 메모리 어레이를 이용한 로드 및 저장을 포함하고, 어레이내 데이터 이동을 포함한다.
다양한 실시예들의 다양한 특징들, 양상들 및 이점들은 다음의 추가적인 설명으로부터 더 분명해질 것이다.
특정 실시예들에 대한 다음의 상세한 설명은 다음의 도면들을 참조하여 이해될 수 있다:
도 1은 컴파일러를 이용한 고도의 병렬 처리 아키텍처에 대한 흐름도이다.
도 2는 방향들을 제공하기 위한 흐름도이다.
도 3은 컴파일러 상호작용에 대한 시스템 블록도를 도시한다.
도 4a는 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다.
도 4b는 컴퓨트 요소 어레이 상세를 도시한다.
도 5는 코드 생성 파이프라인을 도시한다.
도 6은 방향들을 동작들의 방향성 비사이클 그래프(directed acyclic graph, DAG)로 변환하는 것을 도시한다.
도 7은 만족도(satisfiability, SAT) 모델을 생성하기 위한 흐름도이다.
도 8은 고도의 병렬 아키텍처를 사용한 작업 처리를 위한 시스템 도해이다.
컴파일러를 이용한 고도의 병렬 처리 아키텍처를 사용하는 데이터 조작을 위한 기술들이 개시된다. 처리되는 작업은 산술 연산, 시프트 연산, 부울 연산을 포함하는 논리 연산, 벡터 또는 행렬 연산 등을 포함하는 다양한 연산을 수행할 수 있다. 작업들은 복수의 하위 작업들을 포함할 수 있다. 하위 작업들은 우위, 우선순위, 코딩 순서, 병렬화의 양, 데이터 흐름, 데이터 가용성, 컴퓨트 요소 가용성, 통신 채널 가용성 등에 기초하여 처리될 수 있다. 데이터 조작은 컴퓨트 요소의 2차원 어레이 상에서 수행된다. 컴퓨트 요소들은 중앙 처리 유닛들(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 코어, 및 다른 처리 구성요소들을 포함할 수 있다. 컴퓨트 요소들은 집적 회로 또는 칩 내의 이종 프로세서들, 프로세서들 또는 코어들 등을 포함할 수 있다. 컴퓨트 요소들은 로컬 메모리 요소들, 레지스터 파일들, 캐시 저장소 등을 포함할 수 있는 로컬 저장소에 결합될 수 있다. 계층적 캐시를 포함할 수 있는 캐시는 중간 결과 또는 최종 결과, 제어 워드의 관련 부분 등과 같은 데이터를 저장하는데 사용될 수 있다. 제어 워드는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들을 제어하는데 사용된다. 압축 및 압축해제된 제어 워드들 모두는 요소들의 어레이를 제어하는데 사용될 수 있다.
작업들, 하위 작업들 등은 컴파일러에 의해 컴파일된다. 컴파일러는 범용 컴파일러, 하드웨어 기술 기반 컴파일러, 컴퓨트 요소들의 어레이에 대해 기입되거나 "튜닝된" 컴파일러, 제약 기반 컴파일러(constraint-based compiler), SAT 솔버(SAT solver) 등을 포함할 수 있다. 방향들은 하드웨어에 제공되고, 방향들은 컴파일러에 의해 생성된 하나 이상의 제어 워드들을 통해 제공된다. 제어 워드는 와이드한 가변 길이 마이크로코드 제어 워드를 포함할 수 있다. 마이크로코드 제어 워드의 길이는 제어 워드를 압축함으로써, 연산 요소가 작업에 의해 불필요하다는 것을 인식함으로써 조정될 수 있어서, 그 제어 워드 내의 제어 비트는 그 연산 요소에 대해 요구되지 않는다. 제어 워드들은 데이터를 라우팅하고, 컴퓨트 요소들에 의해 수행될 동작들을 셋업하고, 개별 컴퓨트 요소들 또는 컴퓨트 요소들의 행들 및/또는 열들을 유휴화하는 등에 사용될 수 있다. 컴퓨트 요소와 연관된 컴파일된 마이크로코드 제어 워드는 컴퓨트 요소에 분배된다. 컴퓨트 요소는 압축해제된 제어 워드에 대해 동작하는 제어 유닛에 의해 제어된다. 제어 워드들은 컴퓨트 요소들에 의한 처리를 가능하게 하고, 처리 작업이 실행된다. 작업들의 실행을 가속화하기 위해, 실행하는 단계는 둘 이상의 잠재적인 컴파일된 작업 아웃컴들의 동시 실행을 제공하는 단계를 포함할 수 있다. 사용례에서, 작업은 분기를 포함하는 제어 워드를 포함할 수 있다. 분기의 결과가 분기를 포함하는 제어 워드의 실행에 선험적으로 알려지지 않을 수 있기 때문에, 분기에 기초하여 실행될 수 있는 모든 가능한 제어 서열들은 동시에 "사전 실행"될 수 있다. 이에 따라, 제어 워드가 실행될 때, 정확한 계산 서열이 사용될 수 있고, 부정확한 계산 서열(예를 들어, 분기에 의해 취해지지 않은 경로)가 무시 및/또는 플러싱될 수 있다.
컴파일러를 갖는 고도의 병렬 아키텍처는 작업 처리를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 컴퓨팅 요소들은 집적 회로 내의 컴퓨팅 요소들, 프로세서들, 또는 코어들; 주문형 집적 회로(ASIC) 내의 프로세서들 또는 코어; 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그래머블 디바이스 내에 프로그래밍된 코어들 등을 포함할 수 있다. 컴퓨트 요소들은 동종 또는 이종 프로세서들을 포함할 수 있다. 컴퓨트 요소들의 2D 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있다. 범용 컴파일러, 하드웨어 지향 컴파일러, 또는 컴퓨트 요소들에 특정된 컴파일러를 포함할 수 있는 컴파일러는 컴퓨트 요소들 각각에 대한 코드를 컴파일할 수 있다. 각 컴퓨트 요소는 컴퓨트 요소들의 어레이 내의 자신의 이웃 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 결합은 컴퓨트 요소들 사이의 데이터 통신을 가능하게 한다. 방향들의 세트는 컴파일러에 의해 생성된 제어 워드를 통해 하드웨어에 제공된다. 방향은 사이클 단위로 제공될 수 있다. 사이클은 클록 사이클, 데이터 사이클, 처리 사이클, 물리적 사이클, 아키텍처 사이클 등을 포함할 수 있다. 제어는 컴파일러에 의해 생성된 와이드한 가변 길이 마이크로코드 제어 워드의 스트림에 의해 인에이블된다. 마이크로코드 제어 워드 길이는 제어의 유형, 압축, 컴퓨트 요소가 불필요하다는 것을 식별하는 것과 같은 단순화 등에 기초하여 변할 수 있다. 압축된 제어 워드들을 포함할 수 있는 제어 워드들은 디코딩되어 컴퓨트 요소들의 어레이를 제어하는 제어 유닛에 제공될 수 있다. 제어 워드는 미세 제어 입도(fine control granularity)의 레벨로 압축해제될 수 있으며, 여기서 각 컴퓨트 요소(정수 컴퓨트 요소, 부동 소수점 컴퓨트 요소(floating point computing element), 어드레스 생성 컴퓨트 요소들, 기록 버퍼 요소, 판독 버퍼 요소 등)는 개별적으로 그리고 고유하게 제어된다. 각 압축된 제어 워드는 요소 단위로 제어를 허용하도록 압축해제된다. 디코딩은 주어진 컴퓨트 요소가 작업 또는 하위 작업을 처리하기 위해 필요한지 여부, 컴퓨트 요소가 그것과 연관된 특정 제어 워드를 갖는지 또는 컴퓨트 요소가 반복된 제어 워드(예를 들어, 2 개 이상의 컴퓨트 요소들에 대해 사용된 제어 워드)를 수신하는지 여부 등에 의존할 수 있다. 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업이 실행된다. 실행은 컴파일된 작업과 연관된 복수의 하위 작업을 실행함으로써 달성될 수 있다.
도 1은 컴파일러를 이용한 고도의 병렬 처리 아키텍처에 대한 흐름도이다. CE들의 2D 어레이 내에서 평가가능한 CE들과 같은 컴퓨트 요소들(CE들)의 클러스터들은 작업들과 연관된 다양한 작업들 및 하위 작업들을 처리하도록 구성될 수 있다. 2D 어레이는 제어기들, 저장 요소들, ALU들 등과 같은 다른 요소들을 더 포함할 수 있다. 작업은 애플리케이션 처리, 데이터 조작 등과 같은 다양한 처리 목적을 달성할 수 있다. 작업들은 정수, 실수 및 문자 데이터 유형들; 벡터들 및 행렬들 등을 포함하는 다양한 데이터 유형들에서 동작할 수 있다. 컴파일러에 의해 생성된 제어 워드들에 기초하여 컴퓨트 요소들의 어레이에 방향들이 제공된다. 마이크로코드 제어 워드들을 포함할 수 있는 제어 워드들은 다양한 컴퓨트 요소들을 인에이블 또는 유휴(idle)시키고; 데이터를 제공하고; CE들, 캐시들, 및 저장소 사이에서 결과들을 라우팅하는 것; 및 이와 유사한 것을 가능하게 한다. 방향들은 컴퓨트 요소 동작 및 메모리 액세스 우위를 가능하게 한다. 컴퓨트 요소 동작 및 메모리 액세스 우위는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들은 컴퓨트 요소들의 어레이 상에서 컴파일된 작업의 실행을 가능하게 한다.
흐름(100)은 컴퓨트 요소들의 2차원(2D) 어레이(110)에 액세스하는 것을 포함하며, 여기서 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고 컴퓨트 요소들 어레이 내의 그의 이웃 컴퓨트 요소들에 결합된다. 연산 요소는 다양한 유형의 프로세서에 기초할 수 있다. 컴퓨트 요소들 또는 CE들은 CPU들(central processing units), GPU들(graphics processing unit들), ASIC들(application specific integrated circuits) 내의 프로세서들 또는 처리 코어들, FPGA들(field programmable gate arrays) 내에 프로그래밍된 처리 코어들 등을 포함할 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들은 동일한 기능을 갖는다. 컴퓨팅 요소들은 이종 컴퓨팅 자원들을 포함할 수 있고, 여기서 이종 컴퓨팅 자원들은 단일 집적 회로 또는 칩 내에 병치될 수 있거나 병치되지 않을 수 있다. 컴퓨트 요소들은 토폴로지로 구성될 수 있으며, 여기서 토폴로지는 어레이에 내장되거나, 어레이 내에 프로그래밍되거나 구성될 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이는 시스토릭, 벡터, 사이클릭, 공간, 스트리밍, 또는 VLIW(Very Long Instruction Word) 토폴로지 중 하나 이상을 구현하도록 제어 워드에 의해 구성된다.
컴퓨트 요소들의 어레이는 개별적으로 제어된다(112). 즉, 각 컴퓨트 요소는 하드웨어 레벨에서 관련되지 않은 고유한 작업을 수행하도록 컴파일러에 의해 프로그래밍되고 제어될 수 있다. 이에 따라, 각 요소는 그의 정확한 하드웨어 자원들의 관점에서 컴파일러에 매우 노출된다. 이러한 세밀한 접근법은 컴파일러와 컴퓨트 요소들의 어레이의 엄격한 결합을 허용하고, 각 컴퓨트 요소가 디코딩된 명령어들의 스트림을 디코딩하게 하기 보다는 어레이가 컴파일러-생성된 와이드한 제어 워드에 의해 제어되게 한다. 이에 따라, 개별 제어는 고도로 노출된 어레이에 대한 단일 세립 제어 워드가 어레이 컴퓨트 요소들을 제어할 수 있게 하여, 각 요소가 고유하고 상이한 기능들을 수행할 수 있게 한다. 실시예들에서, 어레이는 미립자, 고도로 노출된 컴퓨트 요소들을 포함한다.
컴퓨트 요소는 기계 학습 계산에 적합한 토폴로지를 더 포함할 수 있다. 컴퓨트 요소들은 CE들의 어레이 내의 다른 요소들에 결합될 수 있다. 실시예들에서, 컴퓨트 요소들의 결합은 하나 이상의 토폴로지들을 가능하게 할 수 있다. CE들이 결합될 수 있는 2D 컴퓨트 요소들의 어레이 내의 다른 요소들은 하나 이상의 레벨들의 캐시 저장소; 승산기 유닛들; 로드(LD) 및 저장(ST) 어드레스들을 생성하기 위한 어드레스 생성기 유닛들; 큐들 등과 같은 저장 요소들을 포함할 수 있다. 각 컴퓨트 요소가 알려진 컴파일러는 C, C++, 또는 Python 컴파일러와 같은 범용 컴파일러; VHDL 또는 Verilog 컴파일러 같은 하드웨어 기술 언어 컴파일러; 컴퓨트 요소들의 어레이에 대해 기록된 컴파일러 등을 포함할 수 있다. 각 CE를 그의 이웃하는 CE들에 결합하는 것은 캐시 요소들, 승산기 요소들, ALU 요소들, 또는 제어 요소들과 같은 요소들의 공유; 이웃하는 CE들 간의 통신 등을 가능하게 한다.
흐름(100)은 컴퓨트 요소 동작 및 메모리 액세스 우위를 위해 제어 워드(120)를 통해 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하는 것을 포함한다. 방향들은 어레이 내의 컴퓨트 요소들과 같은 요소들을 구성하고; 데이터를 로딩 및 저장하고; 컴퓨트 요소들로, 컴퓨트 요소들로부터, 그리고 컴퓨트 요소들 사이에서 데이터를 라우팅하는 것 등을 위한 제어 워드들을 포함할 수 있다. 방향들은 컴파일러에 의해 생성된 하나 이상의 제어 워드들(122)을 포함할 수 있다. 제어 워드는 하나 이상의 CE를 구성하고, 데이터가 CE로 또는 CE로부터 흐를 수 있게 하고, 동작을 수행하도록 CE를 구성하는 등에 사용될 수 있다. 컴퓨트 요소들의 어레이를 제어하기 위해 컴파일되는 작업의 유형 및 크기에 따라, CE들 중 하나 이상이 제어될 수 있지만, 다른 CE들은 특정 작업에 의해 불필요하다. 불필요한 CE는 불필요한 것으로 표시될 수 있다. 불필요한 CE는 데이터, 제어 워드 등을 필요로 하지 않으며, 이에 의해 요구되는 제어 워드도 아니다. 실시예들에서, 불필요한 컴퓨트 요소는 단일 비트에 의해 제어될 수 있다. 실시예들에서, 단일 비트는 행 내의 각 CE에 대한 유휴 신호들을 생성하도록 하드웨어에 명령함으로써 CE들의 전체 행을 제어할 수 있다. 단일 비트는 특정 CE가 작업에 의해 불필요할 때를 표시하기 위해 "불필요"를 위해 세팅되거나, "필요한"을 위해 리셋되거나, 비트의 유사한 사용을 위해 세팅될 수 있다. 흐름(100)에서, 방향들의 세트는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화(124)할 수 있게 한다. 종속성들은 작업들과 하위 작업들 사이에 존재할 수 있고, 종속성들은 데이터 종속성들을 포함할 수 있다. 적절한 서열화는 제2 작업 또는 하위 작업에 의해 요구되는 작업 또는 하위 작업에 의해 생성된 데이터가 이를 요구하는 제2 작업들 또는 하위 작업 이전에 생성됨을 보장할 수 있다. 흐름(100)에서, 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 코드 조건부(126)를 제어한다. 이미지 처리, 오디오 처리 등과 같은 애플리케이션과 연관된 코드를 포함할 수 있는 코드는 코드의 서열의 실행이 코드의 상이한 서열로 전달되게 할 수 있는 조건들을 포함할 수 있다. 조건부는 부울 또는 산술 표현과 같은 표현을 평가하는 것에 기초할 수 있다. 실시예들에서, 조건부는 코드 점프를 결정할 수 있다. 코드 점프는 방금 설명한 바와 같은 조건적 점프, 또는 정지, 종료 또는 종료 명령어로의 점프와 같은 비조건적 점프를 포함할 수 있다. 조건부는 요소들의 어레이 내에서 결정될 수 있다. 실시예들에서, 조건부는 제어 유닛에 의해 설정될 수 있다. 제어 유닛에 의해 조건부를 확립하기 위해, 제어 유닛은 제어 유닛에 제공된 제어 워드에 대해 동작할 수 있다. 실시예에서, 제어 유닛은 압축해제된 제어 워드에 대해 동작할 수 있다. 제어 워드는 어레이에 의해 분해될 수 있고, 압축해제된 포맷으로 어레이에 제공될 수 있다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소 상의 하위 작업들의 공간 할당을 포함할 수 있다. 다른 실시예들에서, 방향들의 세트는 컴퓨팅 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 가능하게 할 수 있다. 다수의 프로그래밍 루프 인스턴스들은 동일한 프로그래밍 루프, 다수의 프로그래밍 회로들 등의 다수의 인스턴스들을 포함할 수 있다.
흐름(100)은 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이(130) 상에서 컴파일된 작업을 실행하는 것을 포함한다. 이전에 논의한 바와 같이, 하위 작업들을 포함할 수 있는 작업들은 비디오 처리 애플리케이션들, 오디오 처리 애플리케이션들, 의료 또는 소비자 데이터 처리 등과 같은 애플리케이션들과 연관될 수 있다. 작업 및 작업과 연관된 임의의 하위 작업들을 실행하는 것은 스케줄에 기초할 수 있고, 여기서 스케줄은 작업 및 하위 작업 우선순위, 우위 등에 기초할 수 있다. 실시예들에서, 방향들의 세트는 둘 이상의 잠재적인 컴파일된 작업 결과들의 동시 실행을 가능하게 할 수 있다. 작업 결과들은 코드의 결정점으로부터 발생한다. 둘 이상의 잠재적인 컴파일된 작업 결과들은 계산 결과 또는 흐름 제어를 포함한다. 코드에서의 결정점은 코드의 실행이 둘 이상의 방향들 중 하나로 진행하게 할 수 있다. 2개 이상의 방향을 로딩하고 그 실행을 시작함으로써, 정확한 방향이 최종적으로 결정될 때 실행 시간이 절약될 수 있다. 정확한 방향은 이미 실행을 시작하였고, 이에 따라 이것이 진행된다. 하나 이상의 부정확한 방향이 정지되고 플러싱된다. 실시예들에서, 2개 이상의 잠재적인 컴파일된 아웃컴들은 동일한 제어 워드에 의해 제어될 수 있다. 동일한 제어 워드는 데이터의 로딩, 데이터 저장 등을 제어할 수 있다. 제어 워드는 아키텍처 사이클(architectural cycle)에 기초하여 실행될 수 있고, 아키텍처 사이클은 컴퓨트 요소들과 같은 요소들의 어레이에 걸친 동작을 가능하게 할 수 있다(enable). 실시예들에서, 동일한 제어 워드가 컴퓨트 요소들의 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 다른 실시예들에서, 둘 이상의 잠재적인 컴파일된 결과들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들 상에서 실행된다. 공간적으로 분리된 컴퓨트 요소들에 대한 실행은 어레이 자원들을 더 잘 관리할 수 있고, 데이터 경합을 감소시키거나 충돌을 제어할 수 있는 등등이다. 실행은 또한 컴퓨트 요소의 어레이가 이미지, 오디오 또는 다른 데이터 처리 기능, 기계 학습 기능 등과 같은 다양한 기능을 구현할 수 있게 할 수 있다.
흐름(100)에서, 컴퓨트 요소 결과들이 생성된다(140). 컴퓨트 요소 결과들은 데이터를 처리하는 것에 기초할 수 있고, 여기서 데이터는 컴퓨트 요소들의 어레이에 대한 입력을 이용하여, 저장소로부터 데이터를 로딩함으로써, 다른 컴퓨트 요소로부터 데이터를 수신함으로써, 등등으로 제공될 수 있다. 흐름(100)에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이에서 병렬로 생성된다(142). 컴퓨트 요소에 의해 생성된 결과들은 컴퓨트 요소가 제어 워드를 수신하는 것 및 컴퓨트 요소가 처리할 데이터의 이용가능성 양자에 기초할 수 있다. 제어 워드 및 요구된 입력 데이터 모두를 수신한 컴퓨트 요소들이 실행될 수 있다. 병렬 실행은 충돌되지 않은 어레이 자원들이 컴퓨트 요소들에 제공될 수 있을 때 발생할 수 있다. 충돌되지 않은 자원은 하나의 컴퓨트 요소에 의해 요구되는 자원, 데이터 경합과 같은 충돌 없이 2개 이상의 컴퓨트 요소들에 의해 공유될 수 있는 자원 등을 포함할 수 있다. 흐름(100)에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에의 제어 워드 도달로부터 독립적으로 순서화된다(144). 제어 워드는 처리 스케줄에 기초하여 한번에 컴퓨트 요소에 제공될 수 있다. 컴퓨트 요소 결과의 독립적인 순서는 데이터 가용성, 계산 자원 가용성 등에 의존한다. 제어 워드는 데이터 가용성 및 계산 리소스 가용성 이전에, 동시에, 또는 후속하여 도달할 수 있다. 즉, 제어 워드의 도달이 필요하지만, 컴퓨트 요소가 작업, 하위 작업 등을 실행하는 것만으로는 충분하지 않다. 흐름(100)에서, 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 데이터 이동(146)을 제어한다. 데이터 이동은 컴퓨트 요소에 데이터를 제공하는 것, 컴퓨트 요소로부터 데이터를 보내는 것, 처리 요소들 사이에서 데이터를 라우팅하는 것 등을 포함한다. 실시예들에서, 데이터 이동은 메모리 어레이와 함께 로드 및 저장을 포함할 수 있다. 메모리 어레이는 단일 기록 동작 및 하나 이상의 판독 동작들을 동시에 지원할 수 있다. 다른 실시예에서, 데이터 이동은 어레이간 데이터 이동을 포함할 수 있다. 어레이간 데이터 이동은 공유 레지스터, 레지스터 파일, 캐시, 저장 요소 등과 같은 다양한 기술을 사용하여 달성될 수 있다. 흐름(100)에서, 메모리 액세스 우위는 메모리 데이터(148)의 순서화를 가능하게 한다. 메모리 데이터의 순서화는 특정 순서로 메모리에 데이터를 로딩 또는 저장하는 것, 메모리의 특정 영역들에 데이터를 로딩하거나 저장하는 것 등을 포함할 수 있다. 실시예들에서, 메모리 데이터의 순서화는 컴퓨트 요소 결과 서열화를 가능하게 할 수 있다.
흐름(100)에서의 다양한 단계들은 개시된 개념들로부터 벗어나지 않고 순서대로 변경되거나, 반복되거나, 생략될 수 있다. 흐름(100)의 다양한 실시예들은 하나 이상의 프로세서들에 의해 실행 가능한 코드를 포함하는 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품에 포함될 수 있다.
도 2는 방향들을 제공하기 위한 흐름도이다. 전체적으로 논의하면, 작업은 컴퓨트 요소의 어레이 상에서 처리될 수 있다. 작업은 산술 연산, 벡터 연산, 어레이 연산, 또는 매트릭스 연산; 부울 연산; 신경망 또는 심층 학습 연산과 같은 애플리케이션에 기초한 연산 등과 같은 일반적인 연산을 포함할 수 있다. 작업들이 정확하게 처리되도록 하기 위해, 작업들을 실행하도록 어레이를 구성하는 컴퓨트 요소들의 어레이에 방향들이 제공된다. 방향들은 컴파일러에 의해 컴퓨트 요소들의 어레이에 제공될 수 있다. 배치, 스케줄링, 데이터 전송 등을 제어하는 방향을 제공하는 것은 작업 처리 처리량을 최대화할 수 있다. 이것은 제2 작업에 대한 데이터를 생성하는 작업이 제2 작업을 처리하기 전에 처리되는 것 등을 보장한다. 제공된 방향들은 컴파일러를 이용한 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2-차원(2D) 어레이가 액세스되고, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려지고, 컴퓨트 요소들 어레이 내의 그의 이웃 컴퓨트 요소들에 결합된다. 컴퓨트 요소 동작 및 메모리 액세스 우위를 위해, 컴파일러에 의해 생성된 제어 워드를 통해, 방향들의 세트가 하드웨어에 제공되며, 여기서 방향들의 세트는 하드웨어로 하여금 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업이 실행된다.
흐름(200)은 컴파일러에 의해 생성된 제어 워드를 통해 하드웨어(210)에 방향들의 세트를 제공하는 것을 포함한다. 제어 워드는 컴퓨트 요소 동작 및 메모리 액세스 우위를 위해 제공된다. 방향들의 세트는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 컴퓨트 요소 결과의 서열화는 컴퓨트 요소의 어레이 내에서 요소 배치, 결과 라우팅, 계산 파면 전파 등에 기초할 수 있다. 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어할 수 있다. 데이터 이동은 로드 동작; 저장 동작; 어레이 내의 요소들로의, 요소들로부터의, 그리고 요소들 사이에서의 데이터의 전송 등을 포함할 수 있다. 흐름(200)에서, 방향들의 세트는 2개 이상의 잠재적인 컴파일된 작업 결과들의 동시 실행(220)을 가능하게 할 수 있다. 작업, 하위 작업 등은 조건을 포함할 수 있음을 상기한다. 조건은 예외, 부울식 또는 산술식의 평가 등에 기초할 수 있다. 조건은 명령어들의 하나의 서열로부터 명령어들의 다른 서열로 명령어 실행을 전달할 수 있다. 어떤 서열이 정확한 서열일 것인지는 조건을 평가하기 전에 알려지지 않기 때문에, 가능한 결과들이 페치될 수 있고, 결과들의 실행이 시작될 수 있다. 정확한 결과가 결정되면, 명령어들의 정확한 서열이 진행될 수 있고, 부정확한 서열이 중단되고 플러싱될 수 있다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 작업 결과들은 계산 결과 또는 흐름 제어를 포함할 수 있다. 잠재적인 컴파일된 결과의 제어는 제어 워드에 의해 제어될 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일된 아웃컴들은 동일한 제어 워드에 의해 제어될 수 있다.
흐름(200) 에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 행 내의 불필요한 컴퓨트 요소(222)를 유휴시킬 수 있다. 작업 및 하위 작업의 주어진 세트는 컴퓨트 요소의 어레이 내의 컴퓨트 요소에 할당될 수 있다. 소정의 세트에 대해, 작업 및 하위 작업의 할당은 모든 컴퓨트 요소가 할당될 것을 요구하지 않을 수 있다. 할당되지 않은 컴퓨트 요소들뿐만 아니라 제어 요소들, 산술 논리 유닛들(ALU), 저장 요소들 등은 필요하지 않을 때 유휴될 수 있다. 할당되지 않은 요소들의 할당은 간단히 제어할 수 있고, 데이터 핸들링 혼잡을 용이하게 할 수 있고, 전력 소비 및 열 소산을 감소시킬 수 있는 등이다. 실시예에서, 유휴는 제어 워드의 단일 비트에 의해 제어될 수 있다. 흐름(200)에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들에 대한 하위 작업들(224)을 공간적으로 할당하는 것을 포함할 수 있다. 공간 할당은 상호통신의 레벨을 갖는 2개 이상의 하위 작업들에 인접한 또는 인근의 컴퓨트 요소들을 할당하는 한편, 통신하지 않는 하위 작업들에 먼 컴퓨팅 요소들을 할당하는 것을 포함할 수 있다.
흐름(200) 에서, 방향들의 세트는 컴퓨트 요소들의 어레이에서의 스케줄링 계산(226)을 포함할 수 있다. 작업들 및 하위 작업들을 스케줄링하는 것은 종속성들에 기초한다. 종속성은 작업 우선순위, 우위, 데이터 상호작용 등을 포함할 수 있다. 사용례에서, 하위 작업(1) 및 하위 작업(2)은 병렬로 실행될 수 있고, 각각 출력 데이터 세트를 생성할 수 있다. 하위 작업으로부터의 출력 데이터세트는 하위 작업 3에 대한 입력 데이터세트로서 작용한다. 하위 작업(1) 및 하위 작업(2)이 반드시 병렬로 실행될 필요는 없지만, 두 출력 데이터세트는 하위 작업(3)의 실행 전에 생성되어야 한다. 하위 작업(3)에 앞서 실행하는 하위 작업(1) 및 하위 작업(2)의 우위는 스케줄링에 의해 처리된다. 흐름(200)에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들(228)을 가능하게 할 수 있다. 다수의 프로그래밍 루프 인스턴스들은 동일한 프로그래밍 루프의 다수의 인스턴스들을 포함할 수 있다. 동일한 프로그래밍 루프의 다수의 인스턴스들은 병렬 처리를 향상시킬 수 있다. 다수의 인스턴스는 동일한 명령어 세트가 SIMD(single instruction multiple data) 기술에 기초하여 다수의 데이터세트를 처리할 수 있게 할 수 있다. 다수의 인스턴스들은 상이한 프로그래밍 루프들을 포함할 수 있으며, 여기서 상이한 프로그래밍 루프는 그렇지 않으면 유휴 상태로 남아 있을 컴퓨트 요소들을 이용할 수 있다. 흐름(200)에서, 방향들의 세트는 기계 학습 기능(230)을 가능하게 할 수 있다. 기계 학습 기능은 지원 벡터 기계(SVM) 기술, 딥 러닝(DL) 기술 등에 기초할 수 있다. 실시예들에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 신경망 구현은 콘볼루션 신경망, 순환 신경망 등을 포함할 수 있다.
도 3은 컴파일러 상호작용에 대한 시스템 블록도를 도시한다. 전체에 걸쳐 논의하면, 어레이 내의 컴퓨트 요소는 어레이 상에서의 실행을 위해 작업 및 하위 작업을 컴파일할 수 있는 컴퓨터에 알려져 있다. 컴파일된 작업들 및 하위 작업들은 작업 처리를 달성하기 위해 실행된다. 작업들의 배치, 데이터의 라우팅 등과 같은 다양한 상호작용들이 컴파일러와 연관될 수 있다. 상호작용들은 컴파일러를 이용한 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합된다. 컴퓨트 요소 동작 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 방향들의 세트가 하드웨어에 제공된다. 방향들의 세트는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업이 실행된다.
시스템 블록도(300)는 컴파일러(310)를 포함한다. 컴파일러는 C, C++, Python 또는 유사한 컴파일러와 같은 하이 레벨 컴파일러를 포함할 수 있다. 컴파일러는 VHDLTM 또는 VerilogTM 컴파일러와 같은 하드웨어 기술 언어에 대해 구현되는 컴파일러를 포함할 수 있다. 컴파일러는 저레벨 가상 머신(LLVM) 중간 표현(IR)과 같은 휴대용, 언어-독립, 중간 표현을 위한 컴파일러를 포함할 수 있다. 컴파일러는 컴퓨팅 요소들 및 어레이 내의 다른 요소들에 제공될 수 있는 방향들의 세트를 생성할 수 있다. 컴파일러는 작업(320)을 컴파일하는데 사용될 수 있다. 작업들은 처리 작업과 연관된 복수의 작업들을 포함할 수 있다. 작업들은 복수의 하위 작업들을 더 포함할 수 있다. 작업들은 비디오 처리 또는 오디오 처리 애플리케이션과 같은 애플리케이션에 기초할 수 있다. 실시예들에서, 작업들은 기계 학습 기능과 연관될 수 있다. 컴파일러는 컴퓨트 요소 결과들(330)을 핸들링하기 위한 방향들을 생성할 수 있다. 컴퓨트 요소 결과들은 산술, 벡터, 어레이, 및 매트릭스 연산들; 부울린 결과들 등을 포함할 수 있다. 실시예들에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이에서 병렬로 생성된다. 병렬 결과들은 컴퓨트 요소들이 입력 데이터를 공유하고, 독립 데이터를 사용할 수 있을 때 컴퓨트 요소들에 의해 생성될 수 있다. 컴파일러는 컴퓨트 요소들의 어레이에 대한 데이터 이동(332)을 제어하는 방향들의 세트를 생성할 수 있다. 데이터 이동의 제어는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들로의, 컴퓨트 요소들로부터의, 및 컴퓨트 요소들 사이의 데이터의 이동을 포함할 수 있다. 데이터 이동의 제어는 데이터 이동 동안 임시 데이터 저장과 같은 데이터를 로딩 및 저장하는 것을 포함할 수 있다. 다른 실시예들에서, 데이터 이동은 어레이 내 데이터 이동을 포함할 수 있다.
하나 이상의 프로세서 상에서의 실행을 위해 작업 및 하위 작업을 생성하기 위해 사용되는 범용 컴파일러와 같이, 컴파일러는 작업 및 하위 작업 처리, 입력 데이터 처리, 중간 및 결과 데이터 처리 등을 위한 지시를 제공할 수 있다. 컴파일러는 어레이와 연관된 컴퓨트 요소들, 저장 요소들, 제어 유닛들, ALU들 등을 구성하기 위한 방향들을 더 생성할 수 있다. 이전에 논의된 바와 같이, 컴파일러는 작업 핸들링을 지원하기 위해 데이터 핸들링을 위한 지시들을 생성한다. 시스템 블록도에서, 데이터 이동은 메모리 어레이를 갖는 로드들 및 저장소들(340)을 포함할 수 있다. 로드들 및 저장들은 정수, 실수 또는 부동, 이중 정밀도, 문자, 및 다른 데이터 타입들과 같은 다양한 데이터 타입들을 처리하는 것을 포함할 수 있다. 로드들 및 저장들은 레지스터들, 레지스터 파일들, 캐시들 등과 같은 로컬 저장소에 데이터를 로딩 및 저장할 수 있다. 캐시들은 레벨 1(L1) 캐시, 레벨 2(L2) 캐시, 및 레벨 3(L3) 캐시 등과 같은 하나 이상의 레벨들의 캐시를 포함할 수 있다. 로드들 및 저장들은 또한 공유 메모리, 분산 메모리 등과 같은 저장소와 연관될 수 있다. 로드들 및 저장들에 부가하여, 컴파일러는 메모리 우위를 포함하는 다른 메모리 및 저장 관리 동작들을 처리할 수 있다. 시스템 블록도에서, 메모리 액세스 우위는 메모리 데이터(342)의 순서화를 가능하게 할 수 있다. 메모리 데이터는 작업 데이터 요건들, 하위 작업 데이터 요건들 등에 기초하여 순서화될 수 있다. 메모리 데이터 순서화는 작업들 및 하위 작업들의 병렬 실행을 가능하게 할 수 있다.
시스템 블록도(300)에서, 메모리 데이터의 순서화는 컴퓨트 요소 결과 서열화(344)을 가능하게 할 수 있다. 작업 처리가 성공적으로 달성되도록 하기 위해, 작업 및 하위 작업은 작업 우선순위, 작업 우위, 동작의 스케줄 등을 수용할 수 있는 순서로 실행되어야 한다. 메모리 데이터는 작업들 및 하위 작업들이 실행되도록 스케줄링될 때 작업들 및 하위 작업들에 의해 요구되는 데이터가 처리를 위해 이용가능하도록 순서화될 수 있다. 이에 따라, 작업들 및 하위 작업들에 의한 데이터의 처리의 결과들은 작업 실행을 최적화하고, 메모리 경합 충돌 등을 감소 또는 제거하도록 순서화될 수 있다. 시스템 블록도는 방향들의 세트에 기초하여 둘 이상의 잠재적인 컴파일된 작업 결과들의 동시 실행(346)을 가능하게 하는 것을 포함한다. 컴파일러에 의해 컴파일되는 코드는 분기점을 포함할 수 있고, 분기점은 계산 또는 흐름 제어를 포함할 수 있다. 흐름 제어는 명령어 실행을 상이한 명령어 서열로 전달한다. 예를 들어, 분기 결정의 결과가 선험적으로 알려지지 않기 때문에, 2개 이상의 잠재적인 작업 결과들과 연관된 명령어들의 서열들이 페치될 수 있고, 명령어들의 각 서열은 실행을 시작할 수 있다. 분기의 정확한 결과가 결정될 때, 정확한 분기 결과와 연관된 명령어들의 서열은 실행을 계속하는 한편, 취해지지 않은 분기들은 중단되고 연관된 명령어들은 플러싱된다. 실시예들에서, 2개 이상의 잠재적인 컴파일된 아웃컴들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들 상에서 실행될 수 있다.
시스템 블록도는 컴퓨트 요소 유휴(348)을 포함한다. 실시예들에서, 컴파일러로부터의 방향들의 세트는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 행 내의 불필요한 컴퓨트 요소를 유휴시킬 수 있다. 처리되고 있는 작업들, 하위 작업들 등에 따라, 모든 컴퓨트 요소들이 처리를 위해 필요한 것은 아닐 수 있다. 컴퓨팅 요소들은 어레이 내에서 이용가능한 컴퓨팅 요소들보다 실행할 작업들이 더 적기 때문에 단순히 필요하지 않을 수 있다. 실시예들에서, 유휴는 컴파일러에 의해 생성된 제어 워드 내의 단일 비트에 의해 제어될 수 있다. 시스템 블록도에서, 어레이 내의 컴퓨트 요소들은 다양한 컴퓨트 요소 기능들(350)을 위해 구성될 수 있다. 컴퓨트 요소 기능은 다양한 유형의 계산 아키텍처, 처리 구성 등을 가능하게 할 수 있다. 실시예들에서, 방향들의 세트는 기계 학습 기능을 가능하게 할 수 있다. 기계 학습 기능은 이미지 데이터, 오디오 데이터, 의료 데이터 등과 같은 다양한 유형의 데이터를 처리하도록 훈련될 수 있다. 실시예들에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 신경망은 콘볼루션 신경망, 순환 신경망, 딥 러닝 네트워크 등을 포함할 수 있다. 시스템 블록도는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소 배치, 결과 라우팅, 및 계산 파면 전파(352)를 포함할 수 있다. 컴파일러는 어레이 내의 컴퓨트 요소들 상에 작업들 및 하위 작업들을 배치할 수 있는 지시들 또는 명령어들을 생성할 수 있다. 배치는 작업들 또는 하위 작업들 사이의 또는 이들 사이의 데이터 종속성들에 기초하여 작업들 및 하위 작업들을 배치하는 것, 메모리 충돌 또는 통신 충돌을 회피하는 작업들을 배치하는 것 등을 포함할 수 있다. 방향들은 또한 계산 파면 전파를 가능하게 할 수 있다. 연산 파면 전파는 작업 및 하위 작업의 실행이 연산 요소의 어레이를 통해 어떻게 진행하는지를 기술하고 제어할 수 있다.
시스템 블록도에서, 컴파일러는 아키텍처 사이클들(360)을 제어할 수 있다. 아키텍처 사이클은 요소들의 어레이 내의 요소들과 연관된 추상적 사이클을 포함할 수 있다. 어레이의 요소들은 컴퓨트 요소들, 저장 요소들, 제어 요소들, ALU들 등을 포함할 수 있다. 아키텍처 사이클은 "추상" 사이클을 포함할 수 있으며, 여기서 추상 사이클은 로드 사이클, 실행 사이클, 기록 사이클 등과 같은 다양한 아키텍처 레벨 동작들을 지칭할 수 있다. 아키텍처 사이클은 행 레벨 연산보다는 아키텍처의 매크로 연산을 지칭할 수 있다. 하나 이상의 아키텍처 사이클은 컴파일러에 의해 제어된다. 아키텍처 사이클의 실행은 2개 이상의 조건에 의존할 수 있다. 실시예들에서, 아키텍처 사이클은 제어 워드가 컴퓨트 요소들의 어레이로 파이프라인될 수 있을 때 그리고 모든 데이터 종속성들이 충족될 때 발생할 수 있다. 즉, 컴퓨트 요소들의 어레이는 로딩할 종속 데이터 또는 클리어할 전체 메모리 큐를 기다릴 필요가 없다.
시스템 블록도에서, 아키텍처 사이클은 하나 이상의 물리적 사이클(362)을 포함할 수 있다. 물리적 사이클은 로드, 실행, 기록 등을 구현하기 위해 요구되는 요소 레벨에서의 하나 이상의 사이클들을 지칭할 수 있다. 실시예들에서, 방향들의 세트는 물리적 사이클 단위로 컴퓨트 요소들의 어레이를 제어할 수 있다. 물리적 사이클은 로컬, 모듈 또는 시스템 클록과 같은 클록, 또는 다른 타이밍 또는 동기화 기술에 기초할 수 있다. 실시예들에서, 물리적 사이클 단위 기반은 아키텍처 사이클을 포함할 수 있다. 물리적 사이클은 요소의 어레이의 각 요소에 대한 인에이블 신호에 기초할 수 있는 반면, 아키텍처 사이클은 전역 아키텍처 신호에 기초할 수 있다. 실시예들에서, 컴파일러는 제어 워드를 통해, 컴퓨트 요소들의 어레이의 각 열에 대한 유효 비트들을 사이클 단위 기반으로 제공할 수 있다. 유효 비트는 데이터가 유효하고 처리 준비가 된 것, 점프 어드레스와 같은 어드레스가 유효한 것 등을 나타낼 수 있다. 실시예들에서, 유효 비트들은 유효 메모리 로드 액세스가 어레이로부터 발생하고 있음을 나타낼 수 있다. 어레이로부터의 유효 메모리 로드 액세스는 메모리 또는 저장 요소 내의 데이터에 액세스하기 위해 사용될 수 있다. 다른 실시예들에서, 컴파일러는 제어 워드를 통해, 컴퓨트 요소들의 어레이의 각 열에 대한 피연산자 크기 정보를 제공할 수 있다. 피연산자 크기는 데이터를 얻기 위해 얼마나 많은 로드 연산이 요구될 수 있는지를 결정하는데 사용된다. 다양한 피연산자 크기가 사용될 수 있다. 실시예들에서, 피연산자 크기는 바이트들, 하프 워드들, 워드들, 및 더블 워드들을 포함한다. 시스템 블록도에서, 컴파일러는 동적, 하드웨어 기반 스케줄링을 피하기 위해 컴퓨트 요소들의 어레이의 정적 스케줄링(364)을 사용할 수 있다. 이에 따라, 실시예들에서, 컴퓨트 요소들의 어레이는 컴파일러에 의해 정적으로 스케줄링된다.
도 4a는 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다. 고도의 병렬 아키텍처는 컴퓨트 요소, 처리 요소, 버퍼, 하나 이상의 레벨의 캐시 저장소, 시스템 관리, 산술 논리 유닛, 승산기 등을 포함하는 구성요소를 포함할 수 있다. 다양한 구성요소들은 작업 처리를 달성하기 위해 사용될 수 있고, 작업 처리는 프로그램 실행, 작업 처리 등과 연관된다. 작업 처리는 분산된 레지스터 파일들을 갖는 병렬 처리 아키텍처를 사용하여 인에이블된다. 컴퓨트 요소들의 2-차원(2D) 어레이가 액세스되고, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려지고, 컴퓨트 요소들 어레이 내의 그의 이웃 컴퓨트 요소들에 결합된다. 컴파일러에 의해 생성된 제어 워드들에 기초하여 컴퓨트 요소들의 어레이에 방향들이 제공된다. 마이크로코드 제어 워드들을 포함할 수 있는 제어 워드들은 다양한 컴퓨트 요소들을 인에이블 또는 유휴(idle)시키고; 데이터를 제공하고; CE들, 캐시들, 및 저장소 사이에서 결과들을 라우팅하는 것; 및 이와 유사한 것을 가능하게 한다. 방향들은 컴퓨트 요소 동작 및 메모리 액세스 우위를 가능하게 한다. 컴퓨트 요소 동작 및 메모리 액세스 우위는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들은 컴퓨트 요소들의 어레이 상에서 컴파일된 작업의 실행을 가능하게 한다.
얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도(400)가 도시된다. 시스템 블록도는 컴퓨트 요소 어레이(410)를 포함할 수 있다. 컴퓨팅 요소 어레이(410)는 컴퓨팅 요소들에 기초할 수 있고, 여기서 컴퓨팅 요소들은 프로세서들, 중앙 처리 유닛들(CPU들), 그래픽 처리 유닛들(GPU들) 및 코프로세서들 등을 포함할 수 있다. 컴퓨팅 요소들은 주문형 반도체(ASIC)와 같은 칩들 내에 구성된 처리 코어들, 필드 프로그래머블 게이트 어레이(FPGA)등과 같은 프로그래머블 칩들로 프로그래밍된 처리 코어들에 기초할 수 있다. 컴퓨트 요소들은 컴퓨트 요소들의 균일한 어레이를 포함할 수 있다. 시스템 블록도(400)는 변환 및 색인 버퍼들(412 및 438)과 같은 변환 및 색인 버퍼들을 포함할 수 있다. 변환 및 색인 버퍼들은 메모리 캐시들을 포함할 수 있고, 여기서 메모리 캐시들은 저장소 액세스 시간들을 감소시키기 위해 사용될 수 있다. 시스템 블록도는 로드 및 액세스 순서 및 선택을 위한 로직을 포함할 수 있다. 로드 및 액세스 순서 및 선택을 위한 로직은 로직(414) 및 로직(440)을 포함할 수 있다. 로직(414 및 440)은 하위 데이터 블록(416, 418 및 420) 및 상위 데이터 블록(442, 444 및 446)에 대한 로드 및 액세스 순서 및 선택을 각각 달성할 수 있다. 이러한 레이아웃 기술은 액세스 대역폭을 배가시키고, 상호접속 복잡도를 감소시키는 등을 할 수 있다. 로직(440)은 큐들 및 승산기 유닛들(447) 구성요소를 통해 컴퓨트 요소 어레이(410)에 결합될 수 있다. 동일한 방식으로, 로직(414)은 큐들 및 승산기 유닛들(417) 구성요소를 통해 컴퓨트 요소 어레이(410)에 결합될 수 있다.
시스템 블록도는 액세스 큐들을 포함할 수 있다. 액세스 큐들은 액세스 큐들(416 및 442)을 포함한다. 액세스 큐는 데이터를 저장하고 데이터를 로딩하기 위해 액세스 캐시, 저장소 등에 대한 요청을 큐잉하는데 사용될 수 있다. 시스템 블록도는 L1 캐시들(418 및 444)과 같은 레벨 1(L1) 데이터 캐시들을 포함한다. L1 캐시들은 함께 처리될 데이터, 순차적으로 처리될 데이터 등과 같은 데이터의 블록들을 저장하는데 사용될 수 있다. L1 캐시는 컴퓨트 요소들 및 다른 구성요소들에 의해 빠르게 액세스가능한 작고 빠른 메모리를 포함할 수 있다. 시스템 블록도는 레벨 2(L2) 데이터 캐시들을 포함할 수 있다. L2 캐시들은 L2 캐시들(420 및 446)을 포함할 수 있다. L2 캐시들은 L1 캐시에 비해 더 크고 더 느린 저장소를 포함할 수 있다. L2 캐시들은 "다음(next up)" 데이터, 중간 결과들과 같은 결과들 등을 저장할 수 있다. L1 및 L2 캐시는 레벨 3(L3) 캐시에 더 연결될 수 있다. L3 캐시들은 L3 캐시들(422 및 448)을 포함할 수 있다. L3 캐시들은 L1 및 L2 캐시들보다 더 클 수 있고 더 느린 저장을 포함할 수 있다. L3 캐시들로부터의 데이터에 액세스하는 것은 메인 저장소에 액세스하는 것보다 여전히 더 빠르다. 실시예들에서, L1, L2 및 L3 캐시들은 4-방향 세트 연관 캐시들을 포함할 수 있다.
블록도(400)는 시스템 관리 버퍼(424)를 포함할 수 있다. 시스템 관리 버퍼는 컴퓨트 요소의 어레이(410)를 제어하는데 사용될 수 있는 시스템 관리 코드 또는 제어 워드를 저장하는데 사용될 수 있다. 시스템 관리 버퍼는 예외 또는 에러 핸들링, 처리 작업들을 위한 병렬 아키텍처의 관리 등을 위해 사용될 수 있는 옵코드들, 코드들, 루틴들, 함수들 등을 보유하기 위해 이용될 수 있다. 시스템 관리 버퍼는 압축해제기(426)에 결합될 수 있다. 압축해제기는 시스템 관리 압축된 제어 워드 버퍼(428)로부터의 시스템 관리 압축 제어 워드(CCW)를 압축해제하는데 사용될 수 있고, 압축해제된 시스템 관리 제어 워드를 시스템 관리 버퍼(424)에 저장할 수 있다. 압축된 시스템 관리 제어 워드는 압축되지 않은 제어 워드보다 더 적은 저장을 요구할 수 있다. 시스템 관리 CCW 구성요소(428)는 또한 스필 버퍼(spill buffer)를 포함한다. 스필 버퍼는 다수의 네스팅된 레벨들의 예외들을 지원하기 위해 사용될 수 있는 대형 정적 랜덤 액세스 메모리(SRAM)를 포함할 수 있다.
컴퓨트 요소들의 어레이 내의 컴퓨트 요소들은 제어 유닛(430)과 같은 제어 유닛에 의해 제어될 수 있다. 컴파일러가 제어 워드를 통해 개별 요소들을 제어하지만, 제어 유닛은 새로운 제어 워드들이 어레이로 구동되지 않는 것을 보장하기 위해 어레이를 일시 정지시킬 수 있다. 제어 유닛은 압축해제기(432)로부터 압축해제된 제어 워드를 수신한다. 압축 해제기는 컴퓨트 요소들의 행들 또는 열들을 인에이블 또는 유휴 상태로 하기 위해, 개별 컴퓨트 요소들을 인에이블하거나 유휴 상태로 만들기 위해, 제어 워드들을 개별 컴퓨트 요소들로 전송하기 위해, 기타 등등을 위해 제어 워드(후술됨)를 압축 해제할 수 있다. 압축 해제기는 압축 제어 워드 캐시 1(CCWC1)(434)과 같은 압축 제어 워드를 저장할 수 있다. CCWC1은 하나 이상의 압축된 제어 워드들을 포함하는 L1 캐시와 같은 캐시를 포함할 수 있다. CCWC1은 압축 제어 워드 캐시 2(CCWC2)(436)와 같은 추가 압축 제어 워드를 저장할 수 있다. CCWC2는 압축된 제어 워드들에 대한 L2 캐시로서 사용될 수 있다. CCWC2는 CPWC1보다 더 크고 느릴 수 있다. 실시예들에서, CCWC1 및 CCWCl2는 4-방향 세트 연관성을 포함할 수 있다. 실시예들에서, CCWC1 캐시는 압축해제된 제어 워드들을 포함할 수 있고, 이 경우에 그것은 DCWC 1로서 지정될 수 있다. 그 경우에, 압축해제기(432)는 CCWC1(434)(현재 DCWC1)과 CCWc2(436) 사이에 결합될 수 있다.
도 4b는 컴퓨트 요소 어레이 상세(402)를 도시한다. 컴퓨트 요소 어레이는 컴퓨트 요소들이 하나 이상의 작업들, 하위 작업들 등을 처리할 수 있게 하는 구성요소들에 결합될 수 있다. 구성요소들은 데이터에 액세스 및 제공하고, 특정 고속 동작들을 수행하는 등을 할 수 있다. 컴퓨트 요소 어레이 및 그 연관된 구성요소들은 백그라운드 로드들을 갖는 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소 어레이(450)는 다양한 처리 작업을 수행할 수 있으며, 여기서 처리 작업은 산술, 벡터, 매트릭스 또는 텐서 연산; 오디오 및 비디오 처리 연산; 신경망 연산 등과 같은 연산을 포함할 수 있다. 컴퓨트 요소들은 하위 승수 유닛들(452) 및 상위 승수 유닛(454)과 같은 승수 유닛들에 결합될 수 있다. 승수 유닛들은 일반 처리 작업들과 연관된 고속 승산들, 심층 학습 네트워크들과 같은 신경망들과 연관된 승산들 및 벡터 연산들과 관련된 승산들 등을 수행하기 위해 사용될 수 있다. 컴퓨트 요소들은 로드 큐들(464) 및 로드 큐(466)와 같은 로드 큐들에 연결될 수 있다. 로드 큐는 전술한 바와 같이 L1 데이터 캐시에 연결될 수 있다. 로드 큐들은 컴퓨트 요소들로부터의 저장소 액세스 요청들을 로드하기 위해 사용될 수 있다. 로드 큐들은 예상된 로드 레이턴시들을 추적할 수 있고, 로드 레이턴시가 임계치를 초과하는 경우 제어 유닛에 통지할 수 있다. 제어 유닛의 통지는 부하가 예상된 시간프레임 내에 도달하지 않을 수 있다는 것을 시그널링하는데 사용될 수 있다. 로드 큐들은 또한 컴퓨트 요소들의 어레이를 일시정지시키기 위해 사용될 수 있다. 로드 큐들은 전체 어레이를 일시정지시킬 제어 유닛에 일시정지 요청을 전송할 수 있는 반면, 개별 요소들은 제어 워드의 제어 하에서 유휴될 수 있다. 요소가 명시적으로 제어되지 않을 때, 유휴(또는 저전력) 상태에 놓일 수 있다. 어떠한 동작도 수행되지 않지만, 링 버스들은 어레이의 나머지가 적절하게 동작하도록 허용하기 위해 "패스 스루" 모드에서 계속 동작할 수 있다. 컴퓨트 요소가 그 ALU를 통해 변경되지 않은 데이터를 라우팅하기 위해 사용될 때, 그것은 여전히 활성인 것으로 간주된다.
컴퓨트 요소들의 어레이가 일시정지되는 동안, 메모리들(데이터 및 제어 워드)로부터의 어레이의 백그라운드 로딩이 수행될 수 있다. 메모리 시스템들은 자유롭게 실행될 수 있고, 어레이가 일시정지되는 동안 계속 동작할 수 있다. 추가적인 "데드 타임(dead time)"을 초래하는 제어 신호 전송으로 인해 멀티-사이클 레이턴시가 발생할 수 있기 때문에, 메모리 시스템이 어레이에 "돌입"하고 어레이가 일시정지되는 동안 로드 데이터를 적절한 스크래치패드 메모리들에 전달하도록 하는 것이 유익할 수 있다. 이 메커니즘은 컴파일러에 관한 한 어레이 상태가 알려지도록 동작할 수 있다. 어레이 동작이 일시정지 후에 재개될 때, 컴파일러가 정적으로 스케줄링된 모델을 유지하기 위해 요구되는 바와 같이, 새로운 로드 데이터가 스크래치패드에 도달할 것이다.
도 5는 코드 생성 파이프라인을 도시한다. 하드웨어에 제공되는 방향들은 작업 처리를 위한 코드를 포함할 수 있다. 코드는 C, C++, Python 등과 같은 고레벨 언어로; 어셈블리 언어 또는 마이크로코드와 같은 저레벨 언어로 기록된 코드 등을 포함할 수 있다. 코드 생성 파이프라인은 컴파일러를 포함할 수 있다. 코드 생성 파이프라인은 행-레벨 가상 머신(LLVM) 중간 표현(IR)과 같은 중간 코드 또는 중간 표현을 타겟 머신 코드로 변환하는데 사용될 수 있다. 타겟 기계 코드는 컴퓨트 요소들의 어레이의 하나 이상의 컴퓨트 요소들에 의해 실행될 수 있는 기계 코드를 포함할 수 있다. 코드 생성 파이프라인은 컴파일러를 이용한 고도의 병렬 처리 아키텍처를 가능하게 한다. 예시적인 코드 생성 파이프라인(500)이 도시된다. 코드 생성 파이프라인은 LLVM IR 코드와 같은 코드를 연산 요소의 어레이 내의 하나 이상의 연산 요소에서의 실행에 적합한 타겟 머신 언어로 변환하는 하나 이상의 동작을 수행할 수 있다. 파이프라인은 리스트 형태(540)로 입력 코드(512)를 수신할 수 있다. 파이프라인은 방향성 비사이클 그래프(DAG) 저하 구성요소(520)를 포함할 수 있다. DAG 저하 구성요소는 DAG의 차수를 감소시킬 수 있고, 비정성 또는 미확인 DAG(542)를 출력할 수 있다. 비공인된 DAG는 공인된 DAG(544)를 출력할 수 있는 DAG 합법화 구성요소(522)를 사용하여 합법화되거나 확인될 수 있다. 공인된 DAG는 명령어 선택 구성요소(524)에 제공될 수 있다. 명령어 선택 구성요소는 생성된 원시 명령어들(546)을 포함할 수 있으며, 여기서 원시 명령어들은 컴퓨팅 요소들의 어레이의 하나 이상의 컴퓨팅 요소들에 대해 적절할 수 있다. 처리 작업들 및 하위 작업들을 나타낼 수 있는 원시 명령어들은 스케줄링 구성요소(526)를 이용하여 스케줄링될 수 있다. 스케줄링 구성요소는 중간 표현(IR)의 정적 단일 할당(SSA) 형태(548)로 코드를 생성하기 위해 사용될 수 있다. SSA 형태는 각 변수의 단일 할당을 포함할 수 있으며, 여기서 할당은 변수가 코드 내에서 참조되거나 사용되기 전에 발생한다. SSA 포맷의 코드는 최적화기 구성요소(528)를 사용하여 최적화될 수 있다. 최적화기는 최적화된 코드를 SSA 형태로 생성할 수 있다(514).
SSA 형태의 최적화된 코드는 레지스터 할당 구성요소(530)를 사용하여 처리될 수 있다. 레지스터 할당 구성요소는 물리적 레지스터들의 리스트(550)를 생성할 수 있고, 여기서 물리적 레지스터들은 컴퓨트 요소들의 어레이 내의 레지스터들 또는 다른 저장소를 포함할 수 있다. 코드 생성 파이프라인은 포스트 할당 구성요소(532)를 포함할 수 있다. 포스트 할당 구성요소는 레지스터 할당 충돌을 해결하고, 레지스터 할당을 최적화하는 등에 사용될 수 있다. 포스트 할당 구성요소는 최적화된 물리적 레지스터들(552)의 리스트를 포함할 수 있다. 파이프라인은 프롤로그(prologue)와 관련된 코드 및 에필로그와 관련된 코드를 추가할 수 있는 프롤로그의 구성요소(534) 및 에필로그를 포함할 수 있다. 프롤로그는 사용을 위해 레지스터, 스택 등을 준비할 수 있는 코드를 포함할 수 있다. 에필로그는 프롤로그와 에필로그 사이의 코드가 실행되었을 때, 프로로그에 의해 수행되는 동작들을 반전시키기 위한 코드를 포함할 수 있다. 프롤로그 및 에필로그 구성요소는 해결된 스택 예약(554)의 리스트를 생성할 수 있다. 파이프라인은 핍홀 최적화 구성요소(536)를 포함할 수 있다. 핍홀 최적화 구성요소는 코드의 작은 서열의 성능을 개선하기 위해 코드의 작은 서열 또는 "핍홀"을 최적화하는데 사용될 수 있다. 핍홀 최적화기 구성요소의 출력은 분해된 스택 예약(556)의 최적화된 리스트를 포함할 수 있다. 파이프라인은 어셈블리 프린팅 구성요소(538)를 포함할 수 있다. 어셈블리 프린팅 구성요소는 어레이 내의 컴퓨팅 요소에 의해 실행될 수 있는 어셈블리 코드(558)의 어셈블리 언어 텍스트를 생성할 수 있다. 표준 코드 생성 파이프라인의 출력은 출력 어셈블리 코드(516)를 포함할 수 있다.
도 6은 방향들을 DAG(directed acyclic graph) 연산들로 변환하는 것을 도시한다. 컴퓨트 요소들의 어레이에 대한 작업들 및 하위 작업들의 처리는 방향성 비사이클 그래프를 이용하여 모델링될 수 있다. DAG는 작업과 하위 작업 사이의 의존성을 나타낸다. 종속성들은 작업 및 하위 작업 우위, 우위들 등을 포함할 수 있다. 종속성들은 또한 작업들 및 하위 작업들로의, 작업들로부터의, 및 작업들 사이의 데이터의 흐름 및 실행의 순서를 표시할 수 있다. 명령어들을 DAG로 변환하는 것은 컴파일러를 이용한 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 그 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소 동작 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 방향들의 세트가 하드웨어에 제공된다. 방향들의 세트는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 컴파일된 작업은 컴퓨트 요소들의 어레이 상에서 실행된다.
코드, 명령어, 마이크로코드 등을 포함할 수 있는 방향들의 세트는 DAG 동작(600)으로 변환될 수 있다. 명령어들은 행 레벨 가상 머신(LLVM) 명령어들을 포함할 수 있다. 이전에 그리고 전체에 걸쳐 논의된 방향들을 기술하는 코드와 같은 주어진 코드가 DAG가 생성될 수 있다. DAG는 작업 및 하위 작업의 배치에 관한 정보를 포함할 수 있지만, 반드시 작업과 하위 작업의 스케줄링 및 작업으로의, 작업으로부터의, 작업 사이의 데이터의 라우팅에 관한 정보를 포함하지는 않는다. 그래프는 엔트리(610) 또는 입력을 포함하고, 엔트리는 입력 포트, 레지스터, 저장소 내의 어드레스 등을 나타낼 수 있다. 입구는 출력 또는 출구(670)에 결합될 수 있다. DAG의 출구 포인트는 DAG의 작업 및 하위 작업을 완료함으로써 도달될 수 있다. 에러, 누락 데이터, 저장 액세스 충돌 등과 같은 예외의 경우에, DAG는 에러를 빠져나갈 수 있다. DAG의 입구 및 출구는 하나 이상의 아크들(620, 621, 및 622)에 의해 결합될 수 있고, 여기서 각 아크(620, 621, 및 622)는 데이터를 하나 이상의 처리 단계들을 포함하지 않고 출력(670)에 직접 제공할 수 있다. 입구(610)와 출구(670) 사이의 다른 아크는 데이터가 출구(670)에 제공되기 전에 완료되어야 하는 처리 단계를 포함할 수 있다. 처리 단계들은 작업들, 하위 작업들 등과 연관될 수 있다. 방향들에 기초한 처리 단계들의 예시적인 서열이 도시된다. 처리 단계들의 서열은 엔트리(610)로부터의 2개의 입력들을 갖는 로드 더블(LDD) 명령어(632)을 포함할 수 있다. LDD 명령어는 더블 정밀도(예를 들어, 64-비트) 값을 로딩할 수 있다. 서열은 이동 64-비트(MOV64) 명령어(642)을 포함할 수 있다. MOV64 명령어는 레지스터와 저장소 사이, 저장소와 레지스터 사이, 레지스터들 사이 등의 더블 정밀도 값을 이동시킬 수 있다. 서열은 ADDC(add with carry) 명령어(652)을 포함할 수 있다. ADDC 명령어는 합 및 캐리 값을 저장한다. 서열은 또 다른 ADDC(add with carry) 명령어(662)을 포함할 수 있으며, 그 입력들 중 하나는 ADDC(652)로부터 나오고, 다른 입력들은 MOVI64(move 64-bit integer)(654)에 의해 제공되는 상수이다. 처리 단계들의 서열은 엔트리(610)로부터의 2개의 입력들을 갖는 추가적인 로드 더블(LDD) 명령어(634)을 포함할 수 있다. 추가적인 LDD 명령어는 더블 정밀도(예를 들어, 64-비트) 값을 로딩할 수 있다. 서열은 추가적인 이동 64-비트(MOV64) 명령어(644)을 포함할 수 있다. 추가적인 MOV64 명령어는 레지스터와 저장소 사이, 저장소와 레지스터 사이, 레지스터들 사이 등에 더블 정밀도 값을 이동시킬 수 있다. MOV64(644)의 출력은 ADDC(add with carry) 명령어(652)에 제2 입력을 제공할 수 있다. 명령어들의 서열에서 마지막 명령어의 완료시, DAG 내의 흐름은 그래프의 출구로 진행한다.
도 7은 만족도(satisfiability, SAT) 모델을 생성하기 위한 흐름도이다. 작업들, 하위 작업들 등을 처리하는 것을 포함하는 작업 처리는 작업들과 연관된 하나 이상의 동작들을 수행하는 것을 포함한다. 연산은 산술 연산; 부울 연산; 벡터, 어레이, 또는 매트릭스 연산; 텐서 연산 등을 포함할 수 있다. 작업들, 하위 작업들 등이 정확하게 처리되도록 하기 위해, 2D 어레이 내의 컴퓨트 요소들과 같은 하드웨어에 제공되는 방향들은 동작들이 수행될 때 및 동작들로 그리고 동작들로부터 데이터를 어떻게 라우팅할지를 표시해야 한다. 만족도 또는 SAT 모델은 작업들, 동작들 등을 순서화하기 위해, 그리고 데이터를 컴퓨트 요소들로 그리고 컴퓨트 요소들로부터 제공하기 위해 생성될 수 있다. 만족도 모델을 생성하는 것은 컴파일러를 이용한 고도의 병렬 처리 아키텍처를 가능하게 한다. 작업, 하위 작업 등과 연관된 각 동작은 클록 사이클을 할당받을 수 있으며, 여기서 클록 사이클은 명령어들의 블록의 시작과 연관된 클록 사이클에 관련될 수 있다. 하나 이상의 이동(MV) 연산은 연산의 출력과 하나 이상의 추가 연산에 대한 입력 사이에 삽입될 수 있다.
흐름(700)은 동작에 대한 최소 사이클(710)을 계산하는 것을 포함한다. 최소 사이클은 동작이 수행될 수 있는 가장 빠른 사이클을 포함할 수 있다. 사이클은 로컬, 모듈, 서브시스템, 또는 시스템 클록; 아키텍처 클록 등과 같은 물리적 사이클을 포함할 수 있다. 최소 사이클은 위상적 순서로 방향성 비사이클 그래프(directed acyclic graph, DAG)를 순회함으로써 결정될 수 있다. 횡단은 DAG의 출력과 입력 사이의 거리를 계산하기 위해 사용될 수 있다. 데이터는 다른 데이터와 충돌하지 않고 컴퓨트 요소들로부터, 컴퓨트 요소들로, 또는 컴퓨트 요소들 사이에서 흐를 수 있다. 실시예들에서, 방향들의 세트는 물리적 사이클 단위로 컴퓨트 요소들의 어레이를 제어할 수 있다. 물리적 사이클은 동작, 데이터 전송 등을 가능하게 할 수 있다. 실시예에서, 사이클 단위로 컴파일러에 의해 생성된 와이드한 가변 길이의 마이크로코드 제어 워드의 스트림에 의해 인에이블될 수 있다. 마이크로코드 제어 워드는 컴퓨트 요소, 산술 논리 유닛(arithmetic logic units, ALU), 메모리 또는 다른 저장소 등과 같은 요소를 인에이블할 수 있다. 다른 실시예들에서, 물리적 사이클 단위 기반은 아키텍처 사이클을 포함할 수 있다. 물리적 사이클은 물리적 사이클이 하나 이상의 컴퓨트 요소 또는 다른 요소들에 대한 주어진 동작 또는 동작들의 세트를 조정할 수 있다는 점에서 아키텍처 사이클과 상이할 수 있다. 아키텍처 사이클은 아키텍처의 사이클을 포함할 수 있으며, 여기서 아키텍처는 컴퓨트 요소, ALU, 메모리 등을 포함할 수 있다. 아키텍처 사이클은 하나 이상의 물리적 사이클을 포함할 수 있다. 흐름(700)은 최대 사이클(712)을 계산하는 것을 포함한다. 최대 사이클은 동작이 수행될 수 있는 가장 최근의 사이클을 포함할 수 있다. 최소 사이클이 주어진 동작에 대한 최대 사이클과 동일하면, 그 동작은 DAG의 임계 경로 상에 배치된다.
흐름(700)은 출력으로부터 입력으로의 상이한 경로들을 따라 이동 동작 후보들(720)을 추가하는 것을 포함한다. 이동 동작 후보들은 어레이 내의 요소들 및 다른 요소들을 계산하기 위한 동작들 또는 "후보들"의 가능한 배치들을 포함할 수 있다. 후보들은 컴파일러에 의해 생성된 방향들에 기초할 수 있다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들 상의 하위 작업들의 공간 할당을 포함할 수 있다. 공간 할당은 동작들이 자원 할당, 데이터 전송 등에 대해 서로 간섭하지 않도록 보장할 수 있다. 동작 후보들의 서브세트는 결과 프로그램 즉, 컴파일러에 의해 생성된 코드가 정확하도록 선택될 수 있다. 정확한 코드는 작업들의 처리를 성공적으로 달성한다. 흐름(700)은 부울 변수를 각 후보(730)에 할당하는 것을 포함한다. 부울 변수가 참이면, 후보가 포함된다. 부울 변수가 거짓이면, 후보는 포함되지 않는다. 부울 변수들 사이에 또는 이들 사이에 논리적 제약들을 부과함으로써, 정확한 프로그램이 달성될 수 있다. 논리 제약들은 모든 입력들이 만족될 수 있고, 하나 이상의 ALU들이 고유 구성을 갖고, 후보들이 상이한 값들을 동일한 레지스터로 이동시킬 수 없고, 후보들은 제어 워드 비트들을 충돌하는 값들로 설정할 수 없도록 한 번만 연산을 수행하는 것을 포함할 수 있다.
흐름(700)은 후보들 사이의 충돌(740)을 해결하는 것을 포함한다. 충돌은 후보들 사이에서 발생할 수 있고, 충돌은 열거된 하나 이상의 제약들의 위반들, 자원 경합, 데이터 충돌 등을 포함할 수 있다. 후보 사이의 간단한 충돌은 결합 정상 형태(CNF) 조항을 이용하여 공식화될 수 있다. CNF 조항들에 기초한 제약들은 연산 연구(OR) 솔버와 같은 솔버를 사용하여 평가될 수 있다. 흐름(700)은 후보들의 서브세트(750)를 선택하는 것을 포함한다. 위에서 논의한 바와 같이, 후보들의 서브세트는 결과적인 "프로그램", 즉 동작들, 하위 작업들, 작업들 등의 서열화가 정확하도록 선택될 수 있다. 프로그램의 의미에서, "정확성"은 사양을 충족시키는 프로그램의 능력을 지칭한다. 각 입력에 대해 예상된 출력이 생성되는 경우, 프로그램은 정확하다. 프로그램은 컴파일러에 의해 컴파일되어 어레이에 대한 방향들의 세트를 생성할 수 있다. 어레이의 모든 요소들이 방향들의 세트를 구현하기 위해 요구되는 것은 아니다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 행 내의 불필요한 컴퓨트 요소를 유휴시킬 수 있다.
도 8은 작업 처리를 위한 시스템 도해다. 작업 처리는 컴파일러를 갖는 고도의 병렬 처리 아키텍처를 사용하여 수행된다. 시스템(800)은 명령어를 저장하는 메모리(812)에 부착되는 하나 이상의 프로세서(810)를 포함할 수 있다. 시스템(800)은 데이터를 디스플레이하기 위해 하나 이상의 프로세서들(810)에 결합된 디스플레이(814); 중간 단계들; 방향들; 제어 워드들; VLIW(Very Long Instruction Word) 기능을 구현하는 제어 워드; 수축기, 벡터, 순환기, 공간, 스트리밍, 또는 VLIW 토폴로지들을 포함하는 토폴로지들 등을 더 포함할 수 있다. 실시예들에서, 하나 이상의 프로세서(810)는 메모리(812)에 결합되며, 하나 이상의 프로세서는 저장된 명령어들을 실행할 때: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하도록 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―; 컴퓨트 요소 연산 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하도록 ― 방향들의 세트는 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 함 ―; 및 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하도록 구성된다. 실시예들에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이에서 병렬로 생성된다. 컴퓨트 요소 결과는 다른 컴퓨트 요소 결과에 의존할 수 있거나 다른 컴퓨트 요소의 결과에 독립적일 수 있다. 다른 실시예들에서, 컴퓨트 요소 결과들은 아래에서 논의되는 바와 같이, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화된다. 컴퓨팅 요소들은 하나 이상의 집적 회로들 또는 칩들 내의 컴퓨팅 요소들; 주문형 집적 회로(ASIC)들과 같은 하나 이상의 프로그래머블 칩들 내에 구성된 컴퓨팅 요소들 또는 코어들; 필드 프로그래머블 게이트 어레이(FPGA)들; 메시로서 구성된 이종 프로세서들; 독립형 프로세서들 등을 포함할 수 있다.
시스템(800)은 캐시(820)를 포함할 수 있다. 캐시(820)는 데이터, 방향, 제어 워드, 중간 결과, 마이크로코드 등을 저장하는데 사용될 수 있다. 캐시는 하나 이상의 컴퓨트 요소들에 이용가능한 작고, 로컬이며, 용이하게 액세스가능한 메모리를 포함할 수 있다. 실시예들은 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 방향 또는 제어 워드의 관련 부분들을 저장하는 것을 포함한다. 캐시는 하나 이상의 컴퓨트 요소들에 액세스가능할 수 있다. 캐시는 존재한다면, 이중 판독, 단일 기록(2R1W) 캐시를 포함할 수 있다. 즉, 2R1W 캐시는 판독 및 기입 동작들이 서로 간섭하지 않고, 2개의 판독 동작들 및 하나의 기입 동작을 동시에 인에이블할 수 있다. 시스템(800)은 액세싱 구성요소(830)를 포함할 수 있다. 액세싱 구성요소(830)는 컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하기 위한 제어 로직 및 기능들을 포함할 수 있고, 여기서 컴퓨팅 요소들의 어레이 내의 각 컴퓨팅 요소는 컴파일러에 알려져 있고, 컴퓨팅 요소의 어레이 내의 그의 이웃 컴퓨팅 요소들에 결합된다. 컴퓨트 요소는 하나 이상의 프로세서, 프로세서 코어, 프로세서 매크로 등을 포함할 수 있다. 각 컴퓨트 요소는 로컬 저장소의 양을 포함할 수 있다. 로컬 저장소는 하나 이상의 컴퓨팅 요소들에 액세스가능할 수 있다. 각 컴퓨트 요소는 이웃들과 통신할 수 있고, 여기서 이웃들은 가장 가까운 이웃들 또는 더 많은 원격 "이웃들"을 포함할 수 있다. 컴퓨트 요소들 간의 통신은 산업 표준 버스와 같은 버스, 링버스, 유선 또는 무선 컴퓨터 네트워크와 같은 네트워크 등을 사용하여 달성될 수 있다. 실시예들에서, 링버스는 분산 멀티플렉서(MUX)로서 구현된다. 아래에서 논의되는 바와 같이, 방향들의 세트는 컴퓨트 요소들의 어레이에 대한 코드 조건부를 제어할 수 있다. 코드 조건부는 분기점, 결정점, 조건 등을 포함할 수 있다. 실시예들에서, 조건부는 코드 점프를 결정할 수 있다. 코드 점프는 명령어들의 순차적인 실행으로부터 명령어들의 상이한 세트의 실행으로 코드 실행을 변경할 수 있다. 조건부는 제어 유닛에 의해 확립될 수 있다. 사용례에서, 2R1W 캐시는 컴파일된 작업에 대한 잠재적인 분기 경로들의 동시 페치를 지원할 수 있다. 분기를 포함하는 방향 또는 제어 워드에 의해 취해진 분기 경로가 데이터 의존적일 수 있고 이에 따라 선험적으로 알려지지 않기 때문에, 하나보다 많은 분기 경로와 연관된 제어 워드들은 분기 제어 워드의(프리페치) 실행 전에 페치될 수 있다. 다른 곳에서 논의된 바와 같이, 2개 이상의 분기 경로들의 초기 부분은 일련의 제어 워드들에서 인스턴스화될 수 있다. 정확한 분기 경로가 결정될 때, 이행되지 않은 분기와 연관된 계산들은 플러싱 및/또는 무시될 수 있다.
시스템(800)은 제공 구성요소(840)를 포함할 수 있다. 제공 구성요소(840)는 컴퓨트 요소 동작 및 메모리 액세스 우위를 위해 컴파일러에 의해 생성된 제어 워드를 통해 하드웨어에 방향들의 세트를 제공하기 위한 제어 및 기능들을 포함할 수 있고, 방향들의 세트는 하드웨어가 컴퓨트를 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들을 사용하는 컴퓨트 요소들의 어레이의 제어는 다양한 계산 동작들을 수행하도록 어레이를 구성하는 것을 포함할 수 있다. 컴퓨팅 동작들은 오디오 또는 비디오 처리, 인공 지능 처리, 딥 러닝 등을 가능하게 할 수 있다. 방향들은 마이크로코드 제어 워드들에 기초할 수 있으며, 여기서 마이크로 코드 제어 워드들은 연산 코드 필드들, 데이터 필드들, 컴퓨트 어레이 구성 필드들 등을 포함할 수 있다. 방향들을 생성하는 컴파일러는 범용 컴파일러, 병렬화 컴파일러, 컴퓨트 요소들의 어레이에 대해 최적화된 컴파일러, 하나 이상의 처리 작업들을 수행하도록 특수화된 컴파일러 등을 포함할 수 있다. 방향들을 제공하는 것은 컴퓨트 요소들의 어레이 내의 처리 토폴로지들과 같은 하나 이상의 토폴로지들을 구현할 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이 내에서 구현되는 토폴로지들은 수축기(systolic), 벡터(vector), 순환기(cyclic), 공간, 스트리밍, 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함할 수 있다. 다른 토폴로지들은 신경망 토폴로지를 포함할 수 있다. 방향들의 세트는 신경망 토폴로지에 대한 기계 학습 기능을 가능하게 할 수 있다.
시스템(800)은 실행 구성요소(850)를 포함할 수 있다. 실행 구성요소(850)는 방향들의 세트에 기초하여, 컴퓨팅 요소들의 어레이 상에서 컴파일된 작업을 실행하기 위한 제어 로직 및 기능들을 포함할 수 있다. 방향들의 세트는 제어 유닛에 제공될 수 있고, 여기서 제어 유닛은 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 동작들을 제어할 수 있다. 컴퓨트 요소들의 동작은 컴퓨트 요소들을 구성하는 것, 데이터를 컴퓨트 요소들에 제공하는 것, 컴퓨트 요소들로부터의 결과들을 라우팅 및 순서화하는 것 등을 포함할 수 있다. 실시예들에서, 동일한 제어 워드가 컴퓨트 요소들의 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 실행하는 단계는 제어 워드들을 압축해제하는 단계를 포함할 수 있다. 제어 워드들은 컴퓨트 요소 단위로 압축해제될 수 있고, 여기서 각 제어 워드는 복수의 컴퓨트 요소 제어 그룹들 또는 다발들로 구성될 수 있다. 하나 이상의 제어 워드는 캐시와 같은 메모리 내에 압축된 포맷으로 저장될 수 있다. 제어 워드들의 압축은 저장 요건들, 디코딩 구성요소들의 복잡성 등을 감소시킬 수 있다. 실시예에서, 제어 유닛은 압축해제된 제어 워드에 대해 동작할 수 있다. 각 컴퓨트 요소에 대한 제어 워드들을 압축해제하기 위해 실질적으로 유사한 압축해제 기술이 사용될 수 있거나, 하나 이상의 압축해제 기술이 사용될 수 있다. 제어 워드들의 압축은 컴퓨트 요소들의 어레이와 연관된 계산 사이클들에 기초할 수 있다. 실시예들에서, 압축해제는 캐시로부터 사이클 단위로 발생할 수 있다. 하나 이상의 컴퓨트 요소에 대한 제어 워드들의 압축 해제는 사이클별로 발생할 수 있다. 다른 실시예들에서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생할 수 있다.
처리 작업과 연관된 많은 작업들 중 하나일 수 있는 컴파일된 작업은 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들 상에서 실행될 수 있다. 실시예들에서, 컴파일된 작업의 실행은 실행을 병렬화하기 위해 컴퓨트 요소들에 걸쳐 분산될 수 있다. 컴파일된 작업을 실행하는 것은 다수의 데이터세트들(예를 들어, 단일 명령어 다수의 데이터, 또는 SIMD 실행)을 처리하기 위한 작업들을 실행하는 것을 포함할 수 있다. 실시예들은 둘 이상의 잠재적인 컴파일된 작업 아웃컴들의 동시 실행을 제공하는 것을 포함할 수 있다. 방향들의 세트가 컴퓨트 요소들의 어레이에 대한 코드 조건부를 제어할 수 있다는 것을 상기한다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 작업 아웃컴들은 계산 결과 또는 흐름 제어를 포함한다. 값, 부울린 방정식(Boolean equation) 등과 같은 조건을 계산하는 것에 기초할 수 있는 코드 조건부는 조건에 기초하여, 명령어들의 2개 또는 그 초과의 서열들 중 하나의 실행을 야기할 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일된 아웃컴들은 동일한 제어 워드에 의해 제어될 수 있다. 다른 실시예들에서, 조건부는 코드 점프를 결정할 수 있다. 2개 이상의 잠재적인 컴파일된 작업 아웃컴들은 하나 이상의 분기 경로들, 데이터 등에 기초할 수 있다. 실행은 하나 이상의 방향 또는 제어 워드에 기초할 수 있다. 잠재적인 컴파일된 작업 아웃컴들이 조건의 평가에 선험적으로 알려지지 않기 때문에, 방향들의 세트는 둘 이상의 잠재적인 컴파일링된 작업 아웃컴들의 동시 실행을 가능하게 할 수 있다. 조건이 평가될 때, 조건과 연관된 방향들의 세트의 실행은 계속될 수 있는 반면, 조건과 연관되지 않은 방향들의 세트(예를 들어, 취해지지 않은 경로)는 중단되고 플러싱될 수 있다. 실시예들에서, 동일한 방향 또는 제어 워드가 컴퓨트 요소들의 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 실행 작업들은 컴퓨트 요소들의 어레이 전체에 걸쳐 위치된 컴퓨트 요소들에 의해 수행될 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일된 아웃컴들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들 상에서 실행될 수 있다. 공간적으로 분리된 컴퓨트 요소들을 사용하는 것은 감소된 저장, 버스, 및 네트워크 경합; 컴퓨트 요소들에 의한 감소된 전력 손실; 등을 가능하게 할 수 있다. 조건부에 대한 기반이 무엇이든, 조건부는 제어 유닛에 의해 확립될 수 있다.
시스템(800)은 작업 처리를 위해 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품을 포함할 수 있으며, 컴퓨터 프로그램 제품은 하나 이상의 프로세서로 하여금: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 동작 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―; 컴퓨트 요소 연산 및 메모리 액세스 우위에 대해, 컴파일러에 의해 생성된 제어 워드를 통해, 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하는 동작 ― 방향들의 세트는 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 함 ―; 및 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하는 동작을 수행하게 한다.
상기한 방법들 각각은 하나 이상의 컴퓨터 시스템들 상의 하나 이상의 프로세서들 상에서 실행될 수 있다. 실시예들은 다양한 형태들의 분산 컴퓨팅, 클라이언트/서버 컴퓨팅, 및 클라우드 기반 컴퓨팅을 포함할 수 있다. 또한, 본 개시의 흐름도들에 포함된 도시된 단계들 또는 박스들은 단지 예시적이고 설명적이라는 것이 이해될 것이다. 단계들은 본 개시의 범위를 벗어나지 않으면서 수정, 생략, 반복, 또는 재정렬될 수 있다. 또한, 각 단계는 하나 이상의 하위 단계를 포함할 수 있다. 전술한 도면들 및 설명이 개시된 시스템들의 기능적 양태들을 설명하지만, 소프트웨어 및/또는 하드웨어의 특정 구현 또는 어레이는 명시적으로 언급되지 않거나 문맥으로부터 달리 명백하지 않으면 이들 설명으로부터 추론되지 않아야 한다. 소프트웨어 및/또는 하드웨어의 모든 이러한 어레이는 본 개시의 범위 내에 있는 것으로 의도된다.
블록도들 및 흐름도들은 방법, 장치, 시스템 및 컴퓨터 프로그램 제품을 도시한다. 블록도들 및 흐름도들에서의 요소들 및 요소들의 조합들은 방법들, 장치, 시스템들, 컴퓨터 프로그램 제품들 및/또는 컴퓨터 구현 방법들의 기능들, 단계들, 또는 단계들의 그룹들을 도시한다. 일반적으로 본원에서 "회로", "모듈", 또는 "시스템"으로 지칭되는 임의의 그리고 모든 그러한 기능들은 컴퓨터 프로그램 명령어들에 의해, 특수-목적 하드웨어-기반 컴퓨터 시스템들에 의해, 특정 목적 하드웨어 및 컴퓨터 명령어들의 조합들에 의해서, 범용 하드웨어 및 컴퓨팅 명령어들의 조합들 등에 의해 구현될 수 있다.
전술한 컴퓨터 프로그램 제품 또는 컴퓨터 구현 방법 중 임의의 것을 실행하는 프로그래머블 장치는 하나 이상의 마이크로프로세서, 마이크로제어기, 내장형 마이크로제어기, 프로그래머블 디지털 신호 프로세서, 프로그래머블 디바이스, 프로그래머블 게이트 어레이, 프로그래머블 어레이 로직, 메모리 디바이스, 주문형 집적 회로 등을 포함할 수 있다. 각각은 컴퓨터 프로그램 명령어를 처리하고, 컴퓨터 로직을 실행하고, 컴퓨터 데이터를 저장하는 등을 위해 적합하게 이용되거나 구성될 수 있다.
컴퓨터는 컴퓨터 판독 가능 저장 매체로부터의 컴퓨터 프로그램 제품을 포함할 수 있고, 이 매체는 내부 또는 외부, 제거 가능 및 교체 가능 또는 고정될 수 있다는 것이 이해될 것이다. 또한, 컴퓨터는 본원에서 설명된 소프트웨어 및 하드웨어를 포함하거나, 그와 인터페이싱하거나, 또는 지원할 수 있는 기본 입력/출력 시스템(BIOS), 펌웨어, 운영 체제, 데이터베이스 등을 포함할 수 있다.
본 발명의 실시예는 종래의 컴퓨터 애플리케이션이나 이를 실행하는 프로그램 가능한 장치에 한정되지 않는다. 예시를 위해, 본 발명의 실시예들은 광학 컴퓨터, 양자 컴퓨터, 아날로그 컴퓨터 등을 포함할 수 있다. 컴퓨터 프로그램은 도시된 기능들 중 일부 및 전부를 수행할 수 있는 특정 머신을 생성하기 위해 컴퓨터에 로딩될 수 있다. 이러한 특정 기계는 도시된 기능들 중 임의의 기능 및 모든 기능을 수행하기 위한 수단을 제공한다.
저장을 위한 비-일시적 컴퓨터 판독가능 매체; 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 컴퓨터 판독가능 저장 매체 또는 이들의 임의의 적합한 조합; 휴대용 컴퓨터 디스켓; 하드 디스크; 랜덤 액세스 메모리(RAM); 판독 전용 메모리(ROM), 소거가능 프로그램가능 판독-전용 메모리(EPROM, 플래시, MRAM, FeRAM, 또는 상 변화 메모리); 광 섬유; 휴대용 컴팩트 디스크; 광 저장 디바이스; 자기 저장 디바이스, 또는 전술한 것의 임의의 적합한 조합을 포함하지만 이에 제한되지 않는 하나 이상의 컴퓨터 판독가능 매체의 임의의 조합이 이용될 수 있다. 이 문서의 맥락에서, 컴퓨터 판독가능 저장 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함하거나 저장할 수 있는 임의의 유형의 매체일 수 있다.
컴퓨터 프로그램 명령어들은 컴퓨터 실행가능 코드를 포함할 수 있다는 것이 이해될 것이다. 컴퓨터 프로그램 명령어들을 표현하기 위한 다양한 언어들은 C, C++, Java, JavaScript™, ActionScript™, 어셈블리 언어, Lisp, Perl, Tcl, Python, Ruby, 하드웨어 기술 언어들, 데이터베이스 프로그래밍 언어들, 기능 프로그래밍 언어들, 필수 프로그래밍 언어들을 포함할 수 있지만, 이에 제한되지 않는다. 실시예들에서, 컴퓨터 프로그램 명령어들은 컴퓨터, 프로그래머블 데이터 처리 장치, 프로세서들 또는 프로세서 아키텍처들의 이종 조합 등에서 실행되도록 저장, 컴파일 또는 해석될 수 있다. 제한 없이, 본 발명의 실시예들은 클라이언트/서버 소프트웨어, 서비스로서의 소프트웨어, 피어-투-피어 소프트웨어 등을 포함하는 웹-기반 컴퓨터 소프트웨어의 형태를 취할 수 있다.
실시예들에서, 컴퓨터는 다수의 프로그램들 또는 스레드들을 포함하는 컴퓨터 프로그램 명령어들의 실행을 가능하게 할 수 있다. 다수의 프로그램들 또는 스레드들은 프로세서의 이용을 향상시키고 실질적으로 동시적인 기능들을 용이하게 하기 위해 거의 동시에 처리될 수 있다. 구현에 의해, 본원에서 설명된 임의의 및 모든 방법들, 프로그램 코드들, 프로그램 명령어들 등은 하나 이상의 스레드들에서 구현될 수 있으며, 이들은 차례로 다른 스레드들을 스폰(spawn)할 수 있고, 이들은 그들 자신과 연관된 우위들을 가질 수 있다. 일부 실시예들에서, 컴퓨터는 우선순위 또는 다른 순서에 기초하여 이들 스레드들을 처리할 수 있다.
명시적으로 언급되지 않거나 문맥으로부터 달리 명백하지 않으면, 동사 "실행" 및 "프로세스"는 실행, 프로세스, 해석, 컴파일, 어셈블, 링크, 로드, 또는 이들의 조합을 나타내기 위해 상호교환가능하게 사용될 수 있다. 이에 따라, 컴퓨터 프로그램 명령어들, 컴퓨터 실행가능 코드 등을 실행 또는 처리하는 실시예들은 설명된 방식들 중 임의의 방식 및 모든 방식으로 명령어들 또는 코드에 작용할 수 있다. 또한, 도시된 방법 단계들은 하나 이상의 당사자들 또는 엔티티들로 하여금 단계들을 수행하게 하는 임의의 적합한 방법을 포함하도록 의도된다. 단계, 또는 단계의 일부를 수행하는 당사자들은 특정 지리적 위치 또는 국가 경계 내에 위치될 필요는 없다. 예를 들어, 미국 내에 위치된 엔티티가 방법 단계 또는 그 일부가 미국 밖에서 수행되게 하는 경우, 방법은 인과 엔티티에 의해 미국에서 수행되는 것으로 간주된다.
본 발명이 상세히 도시되고 설명된 바람직한 실시예와 관련하여 개시되었지만, 다양한 변형 및 개선이 당업자에게 명백할 것이다. 이에 따라, 실시예는 본 발명의 정신 및 범위를 제한해서는 안 되며, 오히려 법에 의해 허용되는 가장 넓은 의미로 이해되어야 한다.

Claims (50)

  1. 작업 처리를 위한 프로세서 구현 방법으로서,
    컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 단계 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―;
    컴퓨트 요소 연산 및 메모리 액세스 우위(precedence)에 대해, 상기 컴파일러에 의해 생성된 제어 워드를 통해, 상기 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하는 단계 ― 상기 방향들의 세트는 상기 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화(sequencing)할 수 있게 함 ―; 및
    상기 방향들의 세트에 기초하여, 상기 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이에서 병렬로 생성되는 것인, 방법.
  3. 제1항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화(ordering)되는 것인, 방법.
  4. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어하는 것인, 방법.
  5. 제4항에 있어서, 상기 데이터 이동은 메모리 어레이를 이용한 로드 및 저장을 포함하는 방법.
  6. 제4항에 있어서, 상기 데이터 이동은 어레이내(intra-array) 데이터 이동을 포함하는, 방법.
  7. 제1항에 있어서, 상기 메모리 액세스 우위는 메모리 데이터의 순서화를 가능하게 하는 것인, 방법.
  8. 제7항에 있어서, 상기 메모리 데이터의 순서화는 컴퓨트 요소 결과 서열화를 가능하게 하는 것인, 방법.
  9. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이를 사이클 단위 기반으로 제어하는 것인, 방법.
  10. 제9항에 있어서, 상기 사이클 단위 기반은 상기 컴파일러에 의해 생성된 와이드한 가변 길이의 마이크로코드 제어 워드들의 스트림에 의해 인에이블되는 것인, 방법.
  11. 제9항에 있어서, 상기 사이클 단위 기반은 아키텍처 사이클을 포함하는 것인, 방법.
  12. 제9항에 있어서, 상기 컴파일러는 상기 컴퓨트 요소들의 어레이의 각 열에 대한 유효 비트들을 상기 사이클 단위 기반으로 상기 제어 워드를 통해 제공하는 것인, 방법.
  13. 제12항에 있어서, 상기 유효 비트들은 상기 어레이로부터 유효 메모리 로드 액세스가 발생하고 있음을 나타내는 것인, 방법.
  14. 제9항에 있어서, 상기 컴파일러는 상기 컴퓨트 요소들의 어레이의 각 열에 대한 피연산자 크기 정보를 상기 제어 워드를 통해 제공하는 것인, 방법.
  15. 제14항에 있어서, 상기 피연산자 크기는 바이트, 하프 워드, 워드, 및 더블 워드를 포함하는 것인, 방법.
  16. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이에 대한 코드 조건부를 제어하는 것인, 방법.
  17. 제16항에 있어서, 상기 조건부는 코드 점프를 결정하는 것인, 방법.
  18. 제16항에 있어서, 상기 조건부는 제어 유닛에 의해 확립되는 것인, 방법.
  19. 제18항에 있어서, 상기 제어 유닛은 압축해제된 제어 워드에 대해 동작하는 것인, 방법.
  20. 제1항에 있어서, 상기 방향들의 세트는 둘 이상의 잠재적인 컴파일된 작업 아웃컴들의 동시 실행을 가능하게 하는 것인, 방법.
  21. 제20항에 있어서, 상기 둘 이상의 잠재적인 컴파일된 작업 아웃컴들은 계산 결과 또는 흐름 제어를 포함하는 것인, 방법.
  22. 제20항에 있어서, 상기 둘 이상의 잠재적인 컴파일된 작업 아웃컴들은 동일한 제어 워드에 의해 제어되는 것인, 방법.
  23. 제22항에 있어서, 상기 동일한 제어 워드는 상기 컴퓨트 요소들의 어레이에 걸쳐 소정의 사이클 상에서 실행되는 것인, 방법.
  24. 제23항에 있어서, 상기 둘 이상의 잠재적인 컴파일된 작업 아웃컴들은 상기 컴퓨트 요소들의 어레이 내의 공간적으로 분리된 컴퓨트 요소들 상에서 실행되는 것인, 방법.
  25. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 행 내의 불필요한 컴퓨트 요소를 유휴시키는 것인, 방법.
  26. 제25항에 있어서, 상기 유휴는 상기 제어 워드에서의 단일 비트에 의해 제어되는 것인, 방법.
  27. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소 상의 하위 작업들의 공간 할당을 포함하는 것인, 방법.
  28. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이에서의 계산을 스케줄링하는 것을 포함하는 것인, 방법.
  29. 제28항에 있어서, 상기 계산은 상기 컴퓨트 요소들의 어레이 내의 컴퓨트 요소 배치, 결과 라우팅, 및 계산 파면 전파를 포함하는 것인, 방법.
  30. 제1항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 가능하게 하는 것인, 방법.
  31. 제1항에 있어서, 상기 방향들의 세트는 기계 학습 기능을 가능하게 하는 것인, 방법.
  32. 제31항에 있어서, 상기 기계 학습 기능은 신경망 구현을 포함하는 것인, 방법.
  33. 제1항에 있어서, 상기 어레이는 세립(fine-grained)의 고도로 노출된 컴퓨트 요소들을 포함하는 것인, 방법.
  34. 제1항에 있어서, 상기 컴퓨트 요소들의 어레이는 상기 컴파일러에 의해 정적으로 스케줄링되는 것인, 방법.
  35. 작업 처리를 위해 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 하나 이상의 프로세서로 하여금:
    컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 동작 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―;
    컴퓨트 요소 연산 및 메모리 액세스 우위에 대해, 상기 컴파일러에 의해 생성된 제어 워드를 통해, 상기 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하는 동작 ― 상기 방향들의 세트는 상기 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 함 ―; 및
    상기 방향들의 세트에 기초하여, 상기 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하는 동작을 수행하게 하는 코드는 포함하는, 컴퓨터 프로그램 제품.
  36. 제35항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이에서 병렬로 생성되는 것인, 컴퓨터 프로그램 제품.
  37. 제35항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화되는 것인, 컴퓨터 프로그램 제품.
  38. 제35항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어하는 것인, 컴퓨터 프로그램 제품.
  39. 제38항에 있어서, 상기 데이터 이동은 메모리 어레이를 이용한 로드 및 저장을 포함하는 컴퓨터 프로그램 제품.
  40. 제38항에 있어서, 상기 데이터 이동은 어레이내 데이터 이동을 포함하는, 컴퓨터 프로그램 제품.
  41. 제35항에 있어서, 상기 메모리 액세스 우위는 메모리 데이터의 순서화를 가능하게 하는 것인, 컴퓨터 프로그램 제품.
  42. 제41항에 있어서, 상기 메모리 데이터의 순서화는 컴퓨트 요소 결과 서열화를 가능하게 하는 것인, 컴퓨터 프로그램 제품.
  43. 작업 처리를 위한 컴퓨터 시스템으로서,
    명령어들을 저장하는 메모리;
    상기 메모리에 결합된 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는 저장된 상기 명령어들을 실행할 때:
    컴퓨트 요소들의 2차원(2D) 어레이에 액세스하도록 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―;
    컴퓨트 요소 연산 및 메모리 액세스 우위에 대해, 상기 컴파일러에 의해 생성된 제어 워드를 통해, 상기 컴퓨트 요소들의 2D 어레이에 방향들의 세트를 제공하도록 ― 상기 방향들의 세트는 상기 컴퓨트 요소들의 2D 어레이가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 함 ―; 그리고
    상기 방향들의 세트에 기초하여, 상기 컴퓨트 요소들의 어레이 상에서 컴파일된 작업을 실행하도록 구성된 것인, 컴퓨터 시스템.
  44. 제43항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이에서 병렬로 생성되는 것인, 컴퓨터 시스템.
  45. 제43항에 있어서, 상기 컴퓨트 요소 결과들은 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소에서의 제어 워드 도달로부터 독립적으로 순서화되는 것인, 컴퓨터 시스템.
  46. 제43항에 있어서, 상기 방향들의 세트는 상기 컴퓨트 요소들의 어레이에 대한 데이터 이동을 제어하는 것인, 컴퓨터 시스템.
  47. 제46항에 있어서, 상기 데이터 이동은 메모리 어레이를 이용한 로드 및 저장을 포함하는 것인, 컴퓨터 시스템.
  48. 제46항에 있어서, 상기 데이터 이동은 어레이내 데이터 이동을 포함하는 것인, 컴퓨터 시스템.
  49. 제43항에 있어서, 상기 메모리 액세스 우위는 메모리 데이터의 순서화를 가능하게 하는 것인, 컴퓨터 시스템.
  50. 제49항에 있어서, 상기 메모리 데이터의 순서화는 컴퓨트 요소 결과 서열화를 가능하게 하는 것인, 컴퓨터 시스템.
KR1020237018396A 2020-11-16 2021-11-15 컴파일러를 이용한 고도의 병렬 처리 아키텍처 KR20230101851A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063114003P 2020-11-16 2020-11-16
US63/114,003 2020-11-16
PCT/US2021/059304 WO2022104176A1 (en) 2020-11-16 2021-11-15 Highly parallel processing architecture with compiler

Publications (1)

Publication Number Publication Date
KR20230101851A true KR20230101851A (ko) 2023-07-06

Family

ID=81602646

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237018396A KR20230101851A (ko) 2020-11-16 2021-11-15 컴파일러를 이용한 고도의 병렬 처리 아키텍처

Country Status (3)

Country Link
EP (1) EP4244726A1 (ko)
KR (1) KR20230101851A (ko)
WO (1) WO2022104176A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024044150A1 (en) * 2022-08-23 2024-02-29 Ascenium, Inc. Parallel processing architecture with bin packing

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8181168B1 (en) * 2007-02-07 2012-05-15 Tilera Corporation Memory access assignment for parallel processing architectures
EP2366144B1 (en) * 2008-10-15 2015-09-30 Hyperion Core, Inc. Sequential processor comprising an alu array
KR102174335B1 (ko) * 2013-11-01 2020-11-04 삼성전자주식회사 재구성 가능 프로세서, 재구성 가능 프로세서의 구성 메모리의 사용을 최적화하는 방법 및 장치
US9785423B2 (en) * 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US11373266B2 (en) * 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning

Also Published As

Publication number Publication date
WO2022104176A1 (en) 2022-05-19
EP4244726A1 (en) 2023-09-20

Similar Documents

Publication Publication Date Title
US20220075651A1 (en) Highly parallel processing architecture with compiler
US20220107812A1 (en) Highly parallel processing architecture using dual branch execution
KR20230101851A (ko) 컴파일러를 이용한 고도의 병렬 처리 아키텍처
US20230128127A1 (en) Compute element processing using control word templates
US20220075627A1 (en) Highly parallel processing architecture with shallow pipeline
EP4384902A1 (en) Parallel processing architecture using distributed register files
WO2022055792A1 (en) Highly parallel processing architecture with shallow pipeline
US20240078182A1 (en) Parallel processing with switch block execution
US20230273818A1 (en) Highly parallel processing architecture with out-of-order resolution
US20230221931A1 (en) Autonomous compute element operation using buffers
US20230031902A1 (en) Load latency amelioration using bunch buffers
KR20230116028A (ko) 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처
US20220308872A1 (en) Parallel processing architecture using distributed register files
US20220291957A1 (en) Parallel processing architecture with distributed register files
US20220214885A1 (en) Parallel processing architecture using speculative encoding
US20220374286A1 (en) Parallel processing architecture for atomic operations
US20230350713A1 (en) Parallel processing architecture with countdown tagging
US20230409328A1 (en) Parallel processing architecture with memory block transfers
US20230342152A1 (en) Parallel processing architecture with split control word caches
US20240168802A1 (en) Parallel processing with hazard detection and store probes
US20240028340A1 (en) Parallel processing architecture with bin packing
US20240070076A1 (en) Parallel processing using hazard detection and mitigation
US20240193009A1 (en) Parallel processing architecture for branch path suppression
US20230281014A1 (en) Parallel processing of multiple loops with loads and stores
US20230376447A1 (en) Parallel processing architecture with dual load buffers