KR20230116028A - Highly parallel processing architecture using double fork execution - Google Patents

Highly parallel processing architecture using double fork execution Download PDF

Info

Publication number
KR20230116028A
KR20230116028A KR1020237022366A KR20237022366A KR20230116028A KR 20230116028 A KR20230116028 A KR 20230116028A KR 1020237022366 A KR1020237022366 A KR 1020237022366A KR 20237022366 A KR20237022366 A KR 20237022366A KR 20230116028 A KR20230116028 A KR 20230116028A
Authority
KR
South Korea
Prior art keywords
branch
array
data
compute elements
compute
Prior art date
Application number
KR1020237022366A
Other languages
Korean (ko)
Inventor
피터 폴리
Original Assignee
아세니움 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아세니움 인코포레이티드 filed Critical 아세니움 인코포레이티드
Publication of KR20230116028A publication Critical patent/KR20230116028A/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/49Partial evaluation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에서의 작업 처리를 위한 기술들이 개시된다. 컴퓨트 요소들의 2차원 어레이가 액세스된다. 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위 기반으로 제공된다. 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 된다. 제어는 분기를 포함한다. 어레이 내의 분기의 두 측은 제어 로직에 의해 동작될 분기 결정을 대기하면서 실행된다. 분기 결정은 어레이에서의 계산 결과에 기초한다. 이행된 분기 경로에 의해 생성된 데이터는 프로모트된다. 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들은 무시되거나 무효화된다.Techniques for task processing in a highly parallel processing architecture using dual fork execution are disclosed. A two-dimensional array of compute elements is accessed. Each compute element in the array is known to the compiler and is coupled to its neighboring compute elements in the array of compute elements. Control over the array of compute elements is provided on a cycle-by-cycle basis. Control is made possible by a stream of wide, variable-length control words generated by the compiler. Control includes branching. Both sides of a branch in the array are executed waiting for a branch decision to be acted on by the control logic. Branch decisions are based on the results of calculations in the array. The data generated by the fulfilled branch path is promoted. Results from the side of the branch not indicated by the branch decision are ignored or invalidated.

Figure P1020237022366
Figure P1020237022366

Description

이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처Highly parallel processing architecture using double fork execution

관련 출원들related applications

본 출원은 2020년 12월 16일에 출원된 미국 가 특허출원 "Highly Parallel Processing Architecture Using Dual Branch Execution" 제63/125,994호에 대한 우선권을 주장한다.This application claims priority to U.S. Provisional Patent Application Serial No. 63/125,994, filed on December 16, 2020, entitled "Highly Parallel Processing Architecture Using Dual Branch Execution."

전술한 출원은 허용가능한 경우 관할권에서 그 전문이 원용된다.The foregoing applications are incorporated in their entirety in any jurisdiction where permissible.

기술분야technology field

본 출원은 일반적으로 작업 처리에 관한 것으로, 더 구체적으로는 이중 분기 실행을 사용한 고도의 병렬 처리 아키텍처에 관한 것이다.FIELD OF THE INVENTION This application relates generally to task processing, and more specifically to highly parallel processing architectures using dual fork execution.

보통, 조직들은 회계(accounting), 급여(payroll), 재고(inventory), 및 데이터 분석을 포함하는 처리 작업들을 실행한다. 조직들의 규모는 "가족 경영(mom and pop)" 및 기타 소규모 또는 현지 조직들로부터 대규모 국제 기업들에 이르기까지 다양할 수 있다. 이들 조직들에는 자선 단체, 금융 기관, 정부, 병원, 제조업체, 연구소, 소매 기관, 대학 등이 포함된다. 조직의 크기 및 임무와 무관하게, 수행되는 처리 작업들은 그 운영에 중요한 데이터를 처리한다. 데이터 컬렉션들 또는 "데이터세트들"은 통상적으로 방대하다. 이들 데이터세트들은 다른 데이터 중에서도 특히, 은행 또는 중개자 계좌 정보, 무역 및 제조 공정 기밀, 시민권 및 세금 기록, 의료 기록, 학점 및 학위의 학술 기록, 연구 데이터, 및 판매 수치를 포함할 수 있다. 주소, 나이, 이름, 이메일 어드레스, 전화 번호 및 다른 식별 정보가 또한 통상적으로 포함된다. 데이터세트들의 크기들은 이들을 관리하기 어렵게 만들고, 데이터세트들의 처리는 계산적으로 복잡할 수 있다. 데이터는 또한 다른 것들 중에서도 특히, 빈 데이터 필드들 또는 잘못된 필드에 입력된 데이터; 철자가 틀린 명칭들; 및 일관성 없이 적용된 약어들 또는 약칭 표기들과 같은 부정확성을 포함할 수 있다. 데이터세트 내용과 무관하게, 데이터의 효과적인 처리는 중요하다.Typically, organizations perform processing tasks that include accounting, payroll, inventory, and data analysis. Organizations can vary in size from "mom and pop" and other small or local organizations to large international corporations. These organizations include charities, financial institutions, governments, hospitals, manufacturers, research institutes, retail institutions, and universities. Regardless of the size and mission of the organization, the processing operations performed deal with data critical to its operation. Data collections or "datasets" are typically voluminous. These datasets may include bank or intermediary account information, trade and manufacturing process secrets, citizenship and tax records, medical records, academic records of grades and degrees, research data, and sales figures, among other data. Address, age, name, email address, phone number and other identifying information are also typically included. The sizes of datasets make them difficult to manage, and processing of datasets can be computationally complex. Data may also include, among other things, data entered into empty data fields or invalid fields; misspelled names; and inaccuracies such as inconsistently applied abbreviations or shorthand notations. Regardless of the dataset content, effective handling of data is important.

조직은 데이터를 성공적으로 관리하고 데이터 처리 작업들을 실행할 수 있는 능력에 기초하여 성공하거나 실패한다. 또한, 데이터의 처리는 조직에 직접적인 이익이 되는 방식으로 수행되어야 한다. 조직에 따라, 데이터 처리의 직접적인 이익은 경쟁적이고 재정적인 우위, 성공적인 지원금 신청 자금, 또는 더 큰 학생 지원자 풀이다. 데이터 처리 목적들이 성공적으로 충족될 때, 조직은 번창하게 된다. 조직의 목적들이 충족되지 않은 채로 남아 있다면, 달갑지 않고 피해가 막심한 결과들이 예상될 수 있다. 데이터 내에 숨겨진 동향이 파악되고 추적되어야 하며, 데이터 이상 현상이 발견되고 유의되어야 한다. 파악된 동향 및 수익화될 수 있는 이상 현상은 조직에 차별적이고 경쟁적인 우위를 제공할 수 있다.Organizations succeed or fail based on their ability to successfully manage data and execute data processing tasks. In addition, the processing of data must be carried out in a way that directly benefits the organization. Depending on the organization, the direct benefits of data processing are competitive and financial advantages, funding for successful grant applications, or a larger pool of student applicants. Organizations thrive when data processing objectives are successfully met. If organizational objectives are left unmet, undesirable and disastrous results can be expected. Hidden trends within the data must be identified and tracked, and data anomalies must be discovered and addressed. Identified trends and monetizable anomalies can provide organizations with a differentiating and competitive advantage.

광범위하고 이질적인 범위의 개인들로부터 데이터를 수집, 집계 및 상관시키기 위해 사용되는 기술들은 다채롭다. 데이터가 수집되는 자발적인 개인에는 많은 다른 것들 중에서도 특히, 시민, 고객, 온라인 쇼핑객, 환자, 구매자, 학생, 시험 대상 및 자원자가 포함된다. 그러나, 다른 경우에는, 데이터가 개인으로부터 자신도 모르게 수집된다. 데이터 수집에 통상적으로 사용되는 기술들은 개인이 계정을 만들거나, 등록하거나, 서명하거나, 그 외 데이터 수집에 참여하는 데 적극적으로 동의하는 "옵트-인(opt-in)" 방식들을 포함한다. 다른 기술들은 등록 번호를 얻고, 그 번호를 정부 기관, 긴급 서비스, 법 집행 기관 등과의 모든 상호작용들에 사용할 것을 정부가 시민들에게 요구하는 것과 같이, 입법적이다. 추가적인 데이터 수집 기술들은 네트워크 트래픽 수집, 구매 내역 추적, 웹사이트 방문, 버튼 클릭 및 메뉴 선택과 같이 더 미묘하거나 완전히 숨겨진다. 수집된 데이터는 데이터 수집에 사용된 기술들과 무관하게, 조직들에 가치가 있다. 이들 대규모 데이터세트들의 신속한 처리가 중요하다. 이들 대규모 데이터세트들의 신속한 처리는 어려운 과제이다.The technologies used to collect, aggregate and correlate data from a wide and disparate range of individuals are diverse. Voluntary individuals from whom data is collected include citizens, customers, online shoppers, patients, purchasers, students, test subjects, and volunteers, among many others. However, in other cases, data is unknowingly collected from individuals. Commonly used techniques for data collection include “opt-in” mechanisms in which individuals actively consent to creating an account, registering, signing, or otherwise participating in data collection. Other technologies are legislative, such as governments requiring citizens to obtain a registration number and use that number for all interactions with government agencies, emergency services, law enforcement, and the like. Additional data collection techniques are more subtle or completely hidden, such as collecting network traffic, tracking purchases, website visits, button clicks and menu selections. The data collected is valuable to organizations, regardless of the technologies used to collect the data. Rapid processing of these large datasets is important. Rapid processing of these large datasets is a challenge.

조직들은 다수의 데이터 처리 작업들을 수행한다. 작업 처리는 급여를 지급하기 위한 것이든, 연구 데이터를 분석하기 위한 것이든, 또는 기계 학습을 위해 신경망을 훈련시키기 위한 것이든, 많은 복잡한 작업들로 구성된다. 작업들은 데이터세트들을 로딩 및 저장하는 것, 처리 구성요소들 및 시스템들에 액세스하는 것 등을 포함할 수 있다. 작업들 자체는 하위 작업들에 기초할 수 있으며, 여기서 하위 작업들은 저장소로부터 데이터를 로드 또는 판독하는 것, 데이터에 대한 계산들을 수행하는 것, 데이터를 저장소에 다시 저장 또는 기록하는 것, 데이터 및 제어와 같은 하위 작업간 통신을 핸들링하는 것 등을 핸들링하기 위해 사용될 수 있다. 액세스된 데이터세트들은 보통 방대하고, 처리 작업들에 적합하지 않거나 그 아키텍처에 있어서 유연하지 않은 처리 아키텍처들에 쉽게 부담을 줄 수 있다. 작업 처리 효율 및 처리량을 크게 개선하기 위해, 요소들의 2차원(2D) 어레이들이 작업 및 하위 작업 처리에 사용될 수 있다. 어레이들은 컴퓨트 요소들, 승수 요소들, 캐시들, 큐들, 제어기들, 압축해제기들, 산술 논리 유닛(arithmetic logic unit, ALU)들, 및 다른 구성요소들의 2D 어레이들을 포함한다. 이들 어레이들은 어레이에 사이클 단위 기반으로 제어를 제공함으로써 구성되고 동작된다. 2D 어레이의 제어는 컴파일러에 의해 생성된 제어 워드들을 제공함으로써 실현된다. 제어는 제어 워드들의 스트림을 포함하며, 여기서 제어 워드들은 컴파일러에 의해 생성된 넓은 가변 길이 마이크로코드 제어 워드들을 포함할 수 있다. 제어 워드들은 작업들을 처리하기 위해 사용된다. 또한, 어레이들은 작업 처리에 가장 적합한 토폴로지로 구성될 수 있다. 어레이들이 구성될 수 있는 토폴로지들은 시스토릭, 벡터, 사이크릭, 공간, 스트리밍, 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함하도록 구성될 수 있다. 토폴로지들은 기계 학습 기능을 인에이블하는 토폴로지를 포함할 수 있다.Organizations perform a number of data processing tasks. Job processing consists of many complex tasks, whether it is to pay salaries, analyze research data, or train neural networks for machine learning. Tasks may include loading and saving datasets, accessing processing components and systems, and the like. Tasks themselves can be based on sub-tasks, where sub-tasks load or read data from storage, perform computations on data, store or write data back to storage, data and control It can be used to handle communication between subtasks, such as Accessed datasets are usually voluminous and can easily burden processing architectures that are not suited to processing tasks or are inflexible in their architecture. To significantly improve task processing efficiency and throughput, two-dimensional (2D) arrays of elements may be used for task and sub task processing. Arrays include 2D arrays of compute elements, multiplier elements, caches, queues, controllers, decompressors, arithmetic logic units (ALUs), and other components. These arrays are constructed and operated by providing control to the array on a cycle-by-cycle basis. Control of the 2D array is realized by providing control words generated by a compiler. Control includes a stream of control words, where the control words may include wide variable length microcode control words generated by a compiler. Control words are used to process tasks. Also, the arrays can be configured in a topology most suitable for processing a job. Topologies in which the arrays may be constructed include systolic, vector, cyclic, spatial, streaming, or VLIW (Very Long Instruction Word) topologies. Topologies may include topologies that enable machine learning functionality.

작업 처리는 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에 기초한다. 작업 처리를 위한 프로세서 구현 방법이 개시되며, 본 방법은: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 단계 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합됨 ―; 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하는 단계 ― 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 인에이블되고, 제어는 분기를 포함함 ―; 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 분기의 두 측을 실행하는 단계 ― 분기 결정은 어레이에서의 계산 결과들에 기초함 ―; 및 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트(promote)하는 단계를 포함한다.Job processing is based on a highly parallel processing architecture using double fork execution. A processor-implemented method for processing a task is disclosed, comprising: accessing a two-dimensional (2D) array of compute elements - each compute element in the array of compute elements is known to a compiler, and coupled to its neighboring compute elements in the array; providing control over the array of compute elements on a cycle-by-cycle basis, the control being enabled by a stream of wide variable length control words generated by a compiler, the control including branching; executing both sides of a branch in the array while waiting for a branch decision to be acted upon by the control logic, the branch decision being based on calculation results in the array; and based on the branch decision, promoting data generated by the fulfilled branch path.

실시예들은 프로모트되었던 데이터를 다운스트림 동작에 사용하는 단계를 포함한다. 다운스트림 동작은 산술 연산, 벡터 연산, 행렬 연산, 또는 텐서 연산, 부울 연산 등을 포함할 수 있다. 다운스트림 동작은 방향성 비순환 그래프(directed acyclic graph, DAG) 내의 동작을 포함할 수 있다. 이행된 분기 경로에 의해 생성된 데이터를 프로모트하는 것은 컴파일러에 의해, 커밋된 기록을 분기 미결정 윈도우의 외부에서 발생하도록 스케줄링하는 것에 기초할 수 있다. 다른 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 무시하는 것을 포함한다. 데이터를 무시하는 것은 이행되지 않은 분기와 연관된 데이터를 플러싱하거나 클리어하는 것과 비교할 때 처리 사이클을 요구하지 않는다. 추가 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 제거하는 것을 포함한다. 결과들을 제거하는 것은 데이터 모호성 등을 피하기 위해 경합 조건들을 제거하도록 수행될 수 있다. 이행된 분기 경로 데이터를 프로모트하기로 하는 결정 및 이행되지 않은 분기 데이터를 무시하기로 하는 결정은 분기 결정에 기초한다. 이에 따라, 어느 하나의 분기 경로로부터 생성된 데이터는 분기 결정이 수행될 때까지 유효한 것으로 고려될 수 없다.Embodiments include using the promoted data in a downstream operation. Downstream operations may include arithmetic operations, vector operations, matrix operations, or tensor operations, Boolean operations, and the like. Downstream operations may include operations within a directed acyclic graph (DAG). Promoting data produced by a committed branch path may be based on scheduling, by the compiler, committed writes to occur outside of the branch pending window. Other embodiments include ignoring results from a side of a branch not indicated by branch determination. Ignoring data does not require processing cycles compared to flushing or clearing data associated with unfulfilled branches. Further embodiments include removing results from a side of a branch not indicated by branch determination. Eliminating results may be performed to remove race conditions to avoid data ambiguity or the like. The decision to promote branch path data that has been fulfilled and the decision to ignore branch path data that has not been fulfilled are based on the branch decision. Accordingly, data generated from either branch path cannot be considered valid until branch determination is performed.

다양한 실시예들의 다양한 특징들, 양태들 및 이점들이 다음의 추가 설명으로부터 더 분명해질 것이다.Various features, aspects and advantages of various embodiments will become more apparent from the further description that follows.

특정 실시예들에 대한 다음의 상세한 설명은 다음의 도면들을 참조하여 이해될 수 있다:
도 1은 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에 대한 흐름도이다.
도 2는 프로모트된 데이터 사용에 대한 흐름도이다.
도 3은 컴파일러 상호작용들에 대한 시스템 블록도를 도시한다.
도 4a는 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다.
도 4b는 컴퓨트 요소 어레이 상세를 도시한다.
도 5는 표준 코드 생성 파이프라인을 도시한다.
도 6은 방향들을 동작들의 방향성 비순환 그래프(DAG)로 변환하는 것을 도시한다.
도 7은 SAT 모델을 생성하기 위한 흐름도이다.
도 8은 예시적인 압축해제된 제어 워드 필드들을 보여주는 표이다.
도 9는 컴파일러 안내에 기초한 이행된 분기를 도시한다.
도 10은 고도의 병렬 아키텍처를 사용한 작업 처리에 대한 시스템도이다.
The following detailed description of specific embodiments may be understood with reference to the following figures:
Figure 1 is a flow diagram for a highly parallel processing architecture using dual branch execution.
2 is a flow chart for promoted data usage.
3 shows a system block diagram for compiler interactions.
4A shows a system block diagram for a highly parallel architecture with shallow pipelines.
4B shows the compute element array details.
5 shows a standard code generation pipeline.
Figure 6 shows the transformation of directions into a directed acyclic graph (DAG) of operations.
7 is a flow chart for creating a SAT model.
8 is a table showing exemplary decompressed control word fields.
Figure 9 shows a branch implemented based on compiler guidance.
10 is a system diagram for job processing using a highly parallel architecture.

이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에 기초한 데이터 조작을 위한 기술들이 개시된다. 처리되는 작업들은 산술 연산, 시프트 연산, 부울 연산을 포함하는 논리 연산, 벡터 또는 행렬 연산, 텐서 연산 등을 포함하는 다양한 연산들을 수행할 수 있다. 작업들은 복수의 하위 작업들을 포함할 수 있다. 하위 작업들은 우위, 우선순위, 코딩 순서, 병렬화의 양, 데이터 흐름, 데이터 가용성, 컴퓨트 요소 가용성, 통신 채널 가용성 등에 기초하여 처리될 수 있다. 데이터 조작은 컴퓨트 요소들의 2차원 어레이 상에서 수행된다. 컴퓨트 요소들은 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 코어, 및 다른 처리 구성요소들을 포함할 수 있다. 컴퓨트 요소들은 이종 프로세서들, 집적 회로 또는 칩 내의 프로세서 코어들 등을 포함할 수 있다. 컴퓨트 요소들은 로컬 메모리 요소들, 레지스터 파일들, 캐시 저장소 등을 포함할 수 있는 로컬 저장소에 결합될 수 있다. 계층적 캐시를 포함할 수 있는 캐시는 중간 결과들, 제어 워드의 관련 부분들 등과 같은 데이터를 저장하는 데 사용될 수 있다. 캐시는 이행된 분기 경로에 의해 생성된 프로모트된 데이터를 저장할 수 있으며, 여기서 이행된 분기 경로는 분기 결정에 의해 결정된다. 압축해제된 제어 워드는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소를 제어하기 위해 사용된다.Techniques for data manipulation based on a highly parallel processing architecture using dual fork execution are disclosed. The operations to be processed may perform various operations including arithmetic operations, shift operations, logic operations including Boolean operations, vector or matrix operations, tensor operations, and the like. Tasks can contain multiple subtasks. Subtasks can be processed based on priority, priority, coding order, amount of parallelism, data flow, data availability, compute element availability, communication channel availability, and the like. Data manipulation is performed on a two-dimensional array of compute elements. Compute elements may include central processing units (CPUs), graphics processing units (GPUs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), cores, and other processing elements. Compute elements may include heterogeneous processors, processor cores within an integrated circuit or chip, and the like. Compute elements may be coupled to local storage, which may include local memory elements, register files, cache storage, and the like. A cache, which may include a hierarchical cache, may be used to store data such as intermediate results, relevant parts of a control word, and the like. The cache may store promoted data generated by a transitioned branch path, where the transitioned branch path is determined by branch determination. The decompressed control word is used to control one or more compute elements in the array of compute elements.

컴퓨트 요소들의 2차원(2D) 어레이의 다수의 층들은 컴퓨트 요소들의 3차원(3D) 어레이를 포함하도록 "적층"될 수 있다. 컴퓨트 요소들인 경우 2D 어레이 내의 컴퓨트 요소들과 유사하게, 컴퓨트 요소들의 3D 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합된다. 적층은 상호연결된 스택, 또는 단일 물리적 칩 내의 "논리적" 3D 스택, 또는 양자의 조합으로 개별 칩들을 함께 물리적으로 적층하는 것을 포함할 수 있다. 일부 실시예들은 컴퓨트 요소들의 2D 어레이를 컴퓨트 요소들의 다른 2D 어레이와 적층하여 컴퓨트 요소들의 3차원 스택을 형성하는 것을 포함한다. 어레이 적층의 추가 치수들이 가능하다. 작업들, 하위 작업들 등은 컴파일러에 의해 생성된다. 컴파일러는 범용 컴파일러, 하드웨어 기술 기반 컴파일러, 컴퓨트 요소들의 어레이에 대해 기록되거나 "튜닝된" 컴파일러, 제약 기반 컴파일러, 만족도 기반 컴파일러(SAT 솔버) 등을 포함할 수 있다. 제어는 제어 워드들의 형태로 하드웨어에 제공되며, 여기서 제어 워드들은 사이클 단위 기반으로 제공된다. 하나 이상의 제어 워드는 컴파일러에 의해 생성된다. 제어 워드들은 넓은 가변 길이 마이크로코드 제어 워드들을 포함할 수 있다. 마이크로코드 제어 워드의 길이는 그 제어 워드 내의 제어 비트가 그 컴퓨트 요소 등에 요구되지 않도록 컴퓨트 요소가 작업에 의해 불필요하다는 것을 인식함으로써, 제어 워드를 압축함으로써 조정될 수 있다. 제어 워드들은 데이터를 라우팅하고, 컴퓨트 요소들에 의해 수행될 동작들을 셋업하고, 개별 컴퓨트 요소들 또는 컴퓨트 요소들의 로우들 및/또는 컬럼들을 유휴시키는 등을 위해 사용될 수 있다. 컴퓨트 요소들과 연관된 컴파일된 마이크로코드 제어 워드들은 컴퓨트 요소들에 분배된다. 컴퓨트 요소들은 압축해제된 제어 워드들에 대해 동작하는 제어 유닛에 의해 제어된다. 제어 워드들은 컴퓨트 요소들에 의한 처리를 인에이블한다. 작업 처리는 하나 이상의 제어 워드를 실행함으로써 인에이블된다. 작업들의 실행을 가속화하기 위해, 실행은 둘 이상의 잠재적인 컴파일된 작업 결과들 또는 측들의 동시 실행을 인에이블하는 것을 포함할 수 있다. 사용 예에서, 작업은 분기를 포함하는 제어 워드를 포함할 수 있다. 분기의 결과가 분기 결정 계산을 포함하는 제어 워드의 실행에 선험적으로 알려지지 않을 수 있기 때문에, 분기의 측들과 연관된 모든 가능한 제어 서열들은 동시에 실행될 수 있거나 또는 어레이에서 이용가능한 병렬 자원들을 사용하여 "사전-실행"될 수 있다. 따라서, 분기 결정 계산을 포함하는 제어 워드가 실행될 때, 이행된 분기 경로를 포함하는 계산들의 정확한 서열이 사용될 수 있고, 계산들의 부정확한 서열들(예를 들어, 분기에 의해 이행되지 않은 경로)은 무시 및/또는 제거될 수 있다.Multiple layers of a two-dimensional (2D) array of compute elements may be “stacked” to include a three-dimensional (3D) array of compute elements. Similar to compute elements in a 2D array of compute elements, each compute element in a 3D array of compute elements is known to the compiler and coupled to its neighboring compute elements in the array of compute elements. Stacking may include physically stacking individual chips together in an interconnected stack, or a “logical” 3D stack within a single physical chip, or a combination of both. Some embodiments include stacking a 2D array of compute elements with another 2D array of compute elements to form a three-dimensional stack of compute elements. Additional dimensions of the array stack are possible. Tasks, subtasks, etc. are created by the compiler. Compilers may include general-purpose compilers, hardware technology-based compilers, compilers written or “tuned” to an array of compute elements, constraint-based compilers, satisfaction-based compilers (SAT solvers), and the like. Control is provided to hardware in the form of control words, where control words are provided on a cycle-by-cycle basis. One or more control words are generated by the compiler. Control words may include wide variable length microcode control words. The length of the microcode control word can be adjusted by compressing the control word by recognizing that the compute element is not needed by the task so that the control bits in the control word are not required by the compute element or the like. Control words may be used to route data, set up operations to be performed by the compute elements, idle individual compute elements or rows and/or columns of compute elements, and the like. Compiled microcode control words associated with the compute elements are distributed to the compute elements. The compute elements are controlled by a control unit operating on the decompressed control words. Control words enable processing by the compute elements. Job processing is enabled by executing one or more control words. To accelerate the execution of tasks, the execution may include enabling concurrent execution of two or more potential compiled task results or sides. In a usage example, an operation may include a control word that includes a branch. Since the outcome of a branch may not be known a priori to the execution of the control word that contains the branch decision computation, all possible control sequences associated with the sides of the branch may be executed concurrently or using parallel resources available in the array to "pre- can be run". Thus, when a control word containing a branch decision computation is executed, the correct sequence of computations involving branch paths fulfilled can be used, and incorrect sequences of computations (e.g., paths not fulfilled by a branch) can be used. may be ignored and/or removed.

이중 분기 실행을 사용하는 고도의 병렬 아키텍처는 작업 처리를 인에이블한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 컴퓨팅 요소들은 집적 회로 내의 컴퓨팅 요소들, 프로세서들, 또는 코어들; 주문형 집적 회로(ASIC) 내의 프로세서들 또는 코어; 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그래머블 디바이스 내에 프로그래밍된 코어들 등을 포함할 수 있다. 컴퓨트 요소들은 동종 또는 이종 프로세서들을 포함할 수 있다. 컴퓨트 요소들의 2D 어레이 내의 각각의 컴퓨트 요소는 컴파일러에 알려져 있다. 범용 컴파일러, 하드웨어 지향 컴파일러, 또는 컴퓨트 요소들에 특정된 컴파일러를 포함할 수 있는 컴파일러는 컴퓨트 요소들 각각에 대한 코드를 컴파일할 수 있다. 각각의 컴퓨트 요소는 컴퓨트 요소들의 어레이 내의 자신의 이웃 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 결합은 컴퓨트 요소들 사이의 데이터 통신을 인에이블한다. 제어는 컴파일러에 의해 생성된 하나 이상의 제어 워드들을 통해 하드웨어에 제공된다. 제어는 사이클 단위로 제공될 수 있다. 사이클은 클록 사이클, 데이터 사이클, 처리 사이클, 물리적 사이클, 아키텍처 사이클 등을 포함할 수 있다. 제어는 컴파일러에 의해 생성된 넓은 가변 길이의 마이크로코드 제어 워드의 스트림에 의해 인에이블된다. 마이크로코드 제어 워드 길이는 제어의 유형, 압축, 컴퓨트 요소가 불필요함을 식별하는 것과 같은 단순화 등에 기초하여 변할 수 있다. 압축된 제어 워드들을 포함할 수 있는 제어 워드들은 디코딩되어 컴퓨트 요소들의 어레이를 제어하는 제어 유닛에 제공될 수 있다. 제어 워드는 미세 제어 입도(fine control granularity)의 레벨로 압축해제될 수 있으며, 여기서 각각의 컴퓨트 요소(정수 컴퓨트 요소, 부동 소수점 컴퓨트 요소(floating point computation element), 어드레스 생성 컴퓨트 요소, 기록 버퍼 요소, 판독 버퍼 요소 등)가 있다. 각각의 압축된 제어 워드는 요소 단위로 제어를 허용하도록 압축해제된다. 디코딩은 주어진 컴퓨트 요소가 작업 또는 하위 작업을 처리하기 위해 필요한지 여부; 컴퓨트 요소가 그것과 연관된 특정 제어 워드를 갖는지 또는 컴퓨트 요소가 반복된 제어 워드(예를 들어, 2 이상의 컴퓨트 요소들에 대해 사용된 제어 워드)를 수신하는지 여부 등에 의존할 수 있다. 방향들의 세트에 기초하여, 컴퓨트 요소들의 어레이 상에서 컴파일된 작업이 실행된다. 실행은 컴파일된 작업과 연관된 복수의 하위 작업들을 실행함으로써 달성될 수 있다.A highly parallel architecture using double fork execution enables task processing. A two-dimensional (2D) array of compute elements is accessed. Computing elements may include computing elements, processors, or cores within an integrated circuit; processors or cores in application specific integrated circuits (ASICs); It may include cores programmed into a programmable device such as a field programmable gate array (FPGA), and the like. Compute elements may include homogeneous or heterogeneous processors. Each compute element in the 2D array of compute elements is known to the compiler. A compiler, which may include a general-purpose compiler, a hardware-specific compiler, or a compiler specific to the compute elements, may compile the code for each of the compute elements. Each compute element is coupled to its neighboring compute elements in the array of compute elements. The coupling of the compute elements enables data communication between the compute elements. Control is provided to the hardware through one or more control words generated by the compiler. Control can be provided on a cycle-by-cycle basis. Cycles may include clock cycles, data cycles, processing cycles, physical cycles, architectural cycles, and the like. Control is enabled by a stream of wide variable length microcode control words generated by the compiler. The microcode control word length may vary based on the type of control, compression, simplification such as identifying that a compute element is not needed, and the like. Control words, which may include compressed control words, may be decoded and provided to a control unit that controls the array of compute elements. Control words can be decompressed to a level of fine control granularity, where each compute element (integer compute element, floating point compute element, address generation compute element, write buffer element, read buffer element, etc.). Each compressed control word is decompressed to allow element-by-element control. Decoding determines whether a given compute element is required to process a task or subtask; It may depend on whether the compute element has a particular control word associated with it or whether the compute element receives repeated control words (eg, a control word used for two or more compute elements), and the like. Based on the set of directions, the compiled work is executed on the array of compute elements. Execution may be accomplished by executing a plurality of sub-tasks associated with a compiled task.

도 1은 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에 대한 흐름도이다. CE들의 2D 어레이 내에 어셈블된 CE들과 같은 컴퓨트 요소들(CE들)의 클러스터들은 작업들과 연관된 다양한 작업들 및 하위 작업들을 처리하도록 구성될 수 있다. 2D 어레이는 제어기, 저장 요소, ALU 등과 같은 다른 요소를 더 포함할 수 있다. 작업은 애플리케이션 처리, 데이터 조작 등과 같은 다양한 처리 목적을 달성할 수 있다. 작업들은 정수, 실수 및 문자 데이터 유형들; 벡터들 및 행렬들; 텐서들; 등을 포함하는 다양한 데이터 유형들에 대해 동작할 수 있다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위로 제공되며, 여기서 제어는 컴파일러에 의해 생성된 제어 워드들에 기초한다. 마이크로코드 제어 워드들을 포함할 수 있는 제어 워드들은 다양한 컴퓨트 요소들을 인에이블 또는 유휴(idle)시키고; 데이터를 제공하고; CE들, 캐시들, 및 저장소 사이에서 결과들을 라우팅하는 것; 및 이와 유사한 것을 인에이블한다. 제어는 컴퓨트 요소 동작, 메모리 액세스 우위 등을 인에이블한다. 컴퓨트 요소 동작 및 메모리 액세스 우위는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 제어는 컴퓨트 요소들의 어레이 상에서 컴파일된 작업의 실행을 인에이블한다. 또한, 분기의 두 측은 제어 로직에 의해 동작될 분기 결정을 대기하면서 어레이에서 실행된다. 분기 결정이 이루어질 때, 이행된 분기 패치에 의해 생성된 데이터는 프로모트되는 반면, 분기 결정에 의해 표시되지 않은 분기의 측에 의해 생성되는 데이터는 무시된다.Figure 1 is a flow diagram for a highly parallel processing architecture using dual branch execution. Clusters of compute elements (CEs), such as CEs assembled into a 2D array of CEs, may be configured to handle various tasks and subtasks associated with the tasks. The 2D array may further include other elements such as controllers, storage elements, ALUs, and the like. Jobs can achieve various processing purposes, such as application processing, data manipulation, and the like. Operations include integer, real and character data types; vectors and matrices; tensors; It can operate on a variety of data types, including Control over the array of compute elements is provided on a cycle-by-cycle basis, where the control is based on control words generated by a compiler. Control words, which may include microcode control words, enable or idle various compute elements; provide data; routing results between CEs, caches, and storage; and the like. Controls enable compute element operations, memory access privileges, and the like. Compute element operation and memory access dominance allows hardware to properly rank compute element results. The control enables execution of the compiled job on the array of compute elements. Also, both sides of the branch are executed in the array waiting for a branch decision to be acted upon by the control logic. When a branch decision is made, data produced by the branch patch that has been fulfilled is promoted, while data produced by the side of the branch not marked by the branch decision is ignored.

흐름(100)은 컴퓨트 요소들의 2차원(2D) 어레이(110)에 액세스하는 것을 포함하며, 여기서 컴퓨트 요소들의 어레이 내의 각각의 컴퓨트 요소는 컴파일러에 알려져 있고 컴퓨트 요소들 어레이 내의 그의 이웃 컴퓨트 요소들에 결합된다. 컴퓨트 요소는 다양한 유형의 프로세서에 기초할 수 있다. 컴퓨트 요소들 또는 CE들은 CPU들(central processing units), GPU들(graphics processing unit들), ASIC들(application specific integrated circuits) 내의 프로세서들 또는 처리 코어들, FPGA들(field programmable gate arrays) 내에 프로그래밍된 처리 코어들 등을 포함할 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들은 동일한 기능을 갖는다. 컴퓨팅 요소들은 이종 컴퓨팅 자원들을 포함할 수 있고, 여기서 이종 컴퓨팅 자원들은 단일 집적 회로 또는 칩 내에 병치될 수 있거나 또는 병치되지 않을 수 있을 것이다. 컴퓨트 요소는 토폴로지로 구성될 수 있으며, 토폴로지는 어레이에 내장되거나, 어레이 내에 프로그래밍되거나 구성될 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이는 수축기, 벡터, 순환기, 공간, 스트리밍, 다중 명령어 다중 데이터(MIMD), 또는 매우 긴 명령어 워드(VLIW) 토폴로지 중 하나 이상을 구현하도록 제어 워드에 의해 구성된다.Flow 100 includes accessing a two-dimensional (2D) array 110 of compute elements, where each compute element in the array of compute elements is known to a compiler and its neighbor in the array of compute elements coupled to the compute elements. A compute element may be based on various types of processors. Compute elements, or CEs, can be programmed into central processing units (CPUs), graphics processing units (GPUs), processors or processing cores in application specific integrated circuits (ASICs), and field programmable gate arrays (FPGAs). processing cores and the like. In embodiments, the compute elements in the array of compute elements have the same functionality. Computing elements may include heterogeneous computing resources, where the heterogeneous computing resources may or may not be collocated within a single integrated circuit or chip. A compute element may be configured in a topology, and the topology may be built into an array, programmed into, or configured into an array. In embodiments, the array of compute elements is configured by a control word to implement one or more of a constrictor, vector, circulator, spatial, streaming, multiple instruction multiple data (MIMD), or very long instruction word (VLIW) topology. .

컴퓨트 요소는 기계 학습 계산에 적합한 토폴로지를 더 포함할 수 있다. 컴퓨트 요소들은 CE들의 어레이 내의 다른 요소들에 결합될 수 있다. 실시예에서, 컴퓨트 요소의 결합은 하나 이상의 토폴로지를 인에이블할 수 있다. CE들이 결합될 수 있는 다른 요소들은 하나 이상의 레벨들의 캐시 저장소; 승수 유닛들; 로드(LD) 및 저장(ST) 어드레스들을 생성하기 위한 어드레스 생성기 유닛들; 큐들 등과 같은 저장 요소들을 포함할 수 있다. 각각의 컴퓨트 요소가 알려진 컴파일러는 C, C++, 또는 파이톤 컴파일러를 포함할 수 있다. 각각의 컴퓨트 요소가 알려진 컴파일러는 특히 컴퓨트 요소들의 어레이에 대해 기록된 컴파일러를 포함할 수 있다. 각각의 CE를 그의 이웃하는 CE들에 결합하는 것은 캐시 요소들, 승수 요소들, ALU 요소들, 또는 제어 요소들과 같은 요소들의 공유; 이웃하는 CE들 간의 통신 등을 인에이블한다.The compute element may further include a topology suitable for machine learning computation. Compute elements may be coupled to other elements in the array of CEs. In embodiments, a combination of compute elements may enable one or more topologies. Other elements to which CEs can be combined include cache storage of one or more levels; multiplier units; address generator units for generating load (LD) and store (ST) addresses; storage elements such as cues and the like. Compilers for which each compute element is known may include C, C++, or Python compilers. A compiler where each compute element is known may include a compiler written specifically for an array of compute elements. Coupling each CE to its neighboring CEs may include sharing of elements such as cache elements, multiplier elements, ALU elements, or control elements; Enables communication between neighboring CEs and the like.

흐름(100)은 사이클 단위로 컴퓨트 요소들의 어레이에 대한 제어(120)를 제공하는 것을 포함한다. 어레이에 대한 제어는 데이터를 로드 및 저장하는 어레이 내의 컴퓨트 요소들; 컴퓨트 요소들로, 컴퓨트 요소들로부터, 그리고 컴퓨트 요소들 사이에서 데이터를 라우팅하는 것 등과 같은 요소들의 구성을 포함할 수 있다. 흐름(100)에서, 제어는 넓은 가변 길이 제어 워드들의 스트림에 의해 인에이블된다(122). 제어 워드들은 컴퓨팅 요소들 및 어레이 내의 다른 요소들을 구성할 수 있고; 개별 컴퓨팅 요소들, 컴퓨팅 요소들의 로우 및/또는 컬럼들을 인에이블 또는 디스에이블할 수 있고, 데이터를 로드 및 저장할 수 있고: 데이터를 컴퓨팅 요소들로, 컴퓨팅 요소들로부터, 그리고 컴퓨팅 요소들 사이에서 라우팅할 수 있는 등등이다. 하나 이상의 제어 워드는 컴파일러에 의해 생성된다(124). 제어 워드들을 생성하는 컴파일러는 C, C++, 또는 파이톤(Python) 컴파일러와 같은 범용 컴파일러; VHDL 또는 베릴로그(Verilog) 컴파일러 같은 하드웨어 기술 언어 컴파일러; 컴퓨트 요소들의 어레이에 대해 기록된 컴파일러 등을 포함할 수 있다. 컴파일러는 기능을 컴퓨트 요소의 어레이에 맵핑하는데 사용될 수 있다. 실시예들에서, 컴파일러는 기계 학습 기능을 컴퓨트 요소들의 어레이에 맵핑할 수 있다. 기계 학습은 기계 학습(ML) 네트워크, 심층 학습(DL) 네트워크 및 지원 벡터 기계(SVM) 등에 기초할 수 있다. 실시예들에서, 기계 학습 기능은 신경망(NN) 구현을 포함할 수 있다. 컴파일러에 의해 생성된 제어 워드는 하나 이상의 CE를 구성하고, 데이터가 CE로 또는 CE로부터 흐를 수 있게 하고, 동작을 수행하도록 CE를 구성하는 등에 이용될 수 있다. 컴퓨트 요소들의 어레이를 제어하기 위해 컴파일되는 작업의 유형 및 크기에 따라, CE들 중 하나 이상이 제어될 수 있지만, 다른 CE들은 특정 작업에 의해 불필요하다. 불필요한 CE는 제어 워드에서 불필요한 것으로 표시될 수 있다. 불필요한 CE는 데이터를 필요로 하지 않으며, 이에 의해 요구되는 제어 워드도 아니다. 실시예들에서, 불필요한 컴퓨트 요소는 단일 비트에 의해 제어될 수 있다. 다른 실시예에서, 단일 비트는 로우 내의 각각의 CE에 대한 유휴 신호를 생성하도록 하드웨어에 명령함으로써 CE들의 전체 로우를 제어할 수 있다. 단일 비트는 특정 CE가 작업에 의해 불필요할 때를 표시하기 위해 "불필요"를 위해 세팅되거나, "필요한"을 위해 리셋되거나, 또는 비트의 유사한 사용을 위해 세팅될 수 있다.Flow 100 includes providing control 120 to the array of compute elements on a cycle-by-cycle basis. Control over the array includes compute elements within the array that load and store data; routing data to, from, and between compute elements, and the like. In flow 100, control is enabled 122 by a stream of wide variable length control words. Control words may constitute computing elements and other elements within an array; can enable or disable individual computing elements, rows and/or columns of computing elements, load and store data: route data to, from, and between computing elements can, etc. One or more control words are generated by a compiler (124). A compiler that generates the control words may be a general-purpose compiler such as a C, C++, or Python compiler; hardware description language compilers such as VHDL or Verilog compilers; may include a compiler written for an array of compute elements, and the like. Compilers can be used to map functions to arrays of compute elements. In embodiments, a compiler may map a machine learning function to an array of compute elements. Machine learning can be based on machine learning (ML) networks, deep learning (DL) networks and support vector machines (SVMs), and the like. In embodiments, the machine learning function may include a neural network (NN) implementation. Control words generated by the compiler may be used to configure one or more CEs, allow data to flow to and from the CEs, configure the CEs to perform operations, and the like. Depending on the type and size of the task being compiled to control the array of compute elements, one or more of the CEs may be controlled, but other CEs are not required by the particular task. Unnecessary CEs may be marked as unnecessary in the control word. Unnecessary CEs do not require data, nor are control words required by them. In embodiments, unnecessary compute elements may be controlled by a single bit. In another embodiment, a single bit can control an entire row of CEs by instructing hardware to generate an idle signal for each CE in the row. A single bit can be set to “unnecessary” to indicate when a particular CE is not required by a task, reset to “required,” or a similar use of the bit.

컴파일러에 의해 생성되는 제어 워드들은 조건성을 포함할 수 있다. 실시예들에서, 제어부는 분기를 포함한다. 이미지 처리, 오디오 처리 등과 같은 애플리케이션과 연관된 코드를 포함할 수 있는 코드는 코드의 서열의 실행이 코드의 상이한 서열로 전달되게 할 수 있는 조건들을 포함할 수 있다. 조건은 부울 또는 산술 표현과 같은 표현을 평가하는 것에 기초할 수 있다. 실시예들에서, 조건은 코드 점프들을 결정할 수 있다. 코드 점프들은 방금 설명된 바와 같은 조건부 점프들 또는 명령을 중단, 종료, 또는 종료하기 위한 점프와 같은 비조건적 점프들을 포함할 수 있다. 조건성은 요소들의 어레이 내에서 결정될 수 있다. 실시예들에서, 조건성은 제어 워드에 의해 지시되는 어레이에서 수행되는 분기 결정 동작에 의해 확립된다. 제어 워드들은 압축해제기 로직 블록에 의해 압축해제될 수 있으며, 압축해제 로직 블록은 압축된 제어 워드 캐시로부터의 워드들을 어레이로 가는 도중에 압축해제한다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소 상의 하위 작업들의 공간 할당을 포함할 수 있다. 다른 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 인에이블할 수 있다. 다수의 프로그래밍 루프 인스턴스들은 동일한 프로그래밍 루프의 다수의 인스턴스들, 다중 프로그래밍 루프들 등을 포함할 수 있다.Control words generated by the compiler may contain conditionals. In embodiments, the control includes a branch. Code, which may include code associated with applications such as image processing, audio processing, and the like, may contain conditions that may cause execution of one sequence of code to pass to a different sequence of code. Conditions can be based on evaluating expressions such as boolean or arithmetic expressions. In embodiments, a condition may determine code jumps. Code jumps may include conditional jumps as just described or unconditional jumps such as a jump to abort, terminate, or terminate an instruction. Conditionality can be determined within an array of elements. In embodiments, conditionality is established by a branch decision operation performed on the array pointed to by the control word. The control words may be decompressed by a decompressor logic block, which decompresses the words from the compressed control word cache en route to the array. In embodiments, the set of directions may include a spatial allocation of subtasks on one or more compute elements in the array of compute elements. In other embodiments, the set of directions may enable multiple programming loop instances to cycle within the array of compute elements. Multiple programming loop instances may include multiple instances of the same programming loop, multiple programming loops, etc.

흐름(100)은 컴퓨트 요소들의 어레이와 연관된 캐시(130) 내에 제어 워드들의 스트림으로부터의 제어 워드의 관련 부분들을 저장하는 것을 더 포함한다. 캐시에 저장된 제어 워드는 압축된 제어 워드, 압축해제된 제어 워드 등을 포함할 수 있다. 아래에서 논의되는 바와 같이, 액세스 큐는 캐시와 연관될 수 있고, 여기서 액세스 큐들은 액세스 캐시들, 저장소 등에 대한 요청들을 큐잉하기 위해 사용될 수 있다. 데이터 캐시들은 제어 워드 캐시들과는 별개일 수 있고, 데이터 캐시들이 데이터를 저장하고 데이터를 로딩하기 위해 사용될 수 있다. 데이터 캐시는 레벨 1(L1) 캐시, 레벨 2(L2) 캐시 등과 같은 멀티레벨 캐시를 포함할 수 있다. L1 캐시는 처리될 데이터 블록을 저장하는데 사용될 수 있다. L1 캐시는 컴퓨트 요소들 및 다른 구성요소들에 의해 빠르게 액세스가능한 작고 빠른 메모리를 포함할 수 있다. L2 캐시는 L1 캐시에 비해 더 크고 더 느린 저장소를 포함할 수 있다. L2 캐시는 "다음 업" 데이터, 중간 결과 등과 같은 결과를 저장할 수 있다. 실시예들에서, L1 및 L2 캐시들은 레벨 3(L3) 캐시에 또한 결합될 수 있다. L3 캐시들은 L2 및 L1 캐시들보다 클 수 있고 더 느린 저장을 포함할 수 있다. L3 캐시들로부터의 데이터에 액세스하는 것은 메인 저장소에 액세스하는 것보다 여전히 더 빠르다. 실시예들에서, L1, L2 및 L3 캐시들은 4-방향 세트 연관 캐시들을 포함할 수 있다. 실시예들에서, 캐시는 이중 판독, 단일 기록(2R1W) 데이터 캐시를 포함할 수 있다. 이름이 암시하는 바와 같이, 2R1W 데이터 캐시는 판독/기록 충돌, 경쟁 상태들, 데이터 손상 등을 야기하지 않고 두 개까지의 판독 동작들 및 하나의 기록 동작을 동시에 지원할 수 있다. 실시예들에서, 2R1W 캐시는 컴파일러에 대한 잠재적 분기 경로들의 동시 페치를 지원할 수 있다. 분기 조건이 둘 이상의 분기 경로들을 제어할 수 있다는 것을 상기하자, 즉, 이행된 분기 경로 및 이행되지 않은 다른 분기 경로들은 분기 결정에 의해 결정된다.Flow 100 further includes storing relevant portions of control words from the stream of control words in a cache 130 associated with the array of compute elements. Control words stored in the cache may include compressed control words, decompressed control words, and the like. As discussed below, an access queue may be associated with a cache, where access queues may be used to queue requests to access caches, storage, and the like. Data caches can be separate from control word caches, and data caches can be used to store data and load data. Data caches may include multilevel caches such as level 1 (L1) caches, level 2 (L2) caches, and the like. The L1 cache may be used to store blocks of data to be processed. The L1 cache may include small, fast memory that is quickly accessible by compute elements and other components. An L2 cache may contain larger and slower storage compared to an L1 cache. The L2 cache may store results such as "next up" data, intermediate results, and the like. In embodiments, the L1 and L2 caches may also be coupled to a level 3 (L3) cache. L3 caches may be larger than the L2 and L1 caches and may include slower storage. Accessing data from L3 caches is still faster than accessing main storage. In embodiments, the L1, L2 and L3 caches may include 4-way set associative caches. In embodiments, the cache may include a double read, single write (2R1W) data cache. As the name implies, the 2R1W data cache can support up to two read operations and one write operation simultaneously without causing read/write conflicts, race conditions, data corruption, etc. In embodiments, the 2R1W cache may support simultaneous fetching of potential branch paths to the compiler. Recall that a branch condition can control more than one branch path, i.e., a branch path that has been fulfilled and other branch paths that have not fulfilled are determined by the branch decision.

흐름(100)은 어레이내 컴퓨트 요소 메모리에 데이터(140)를 로딩하는 것을 포함한다. 데이터는 정수, 실수(예를 들어, 부동소수점), 또는 문자 데이터; 벡터, 행렬, 또는 어레이 데이터; 텐서 데이터; 등을 포함할 수 있다. 데이터는 이미지 처리를 위한 이미지 데이터, 오디오 처리를 위한 오디오 데이터 등과 같은 처리 애플리케이션의 유형과 연관될 수 있다. 데이터를 로딩하는 것은 레지스터 파일, 캐시, 어레이 내부의 저장소, 어레이에 결합된 외부 저장소 등으로부터 데이터를 로딩함으로써 달성될 수 있다. 아래에서 논의되는 바와 같이, 데이터는 분기의 측들에 의해 생성된 데이터를 포함할 수 있고, 여기서 분기 경로는 어레이에서 실행될 수 있다. 실시예들에서, 데이터의 로딩은 분기 결정이 이루어지기 전에 발생할 수 있다. 분기 결정이 이루어지기 전에 데이터가 로딩될 수 있기 때문에, 데이터의 일부는 다운스트림 동작에 의한 사용을 위해 프로모트될 수 있는 반면, 다른 데이터는 무시될 수 있다. 흐름(100)은 컴퓨트 요소들의 어레이에 분기 어드레스 오프셋들을 제공하기 위해 로우 링 버스들(150)을 사용하는 것을 포함한다. 분기 오프셋들은 동일하지 않은 오프셋들을 포함할 수 있고, 동일하지 않은 오프셋은 상이한 가능한 분기 경로들에 대해 사용된다. 분기 오프셋은 저장소로의 액세스를 위해 사용되는 어드레스의 크기를 감소시킴으로써 저장소 내의 데이터의 어드레싱을 단순화할 수 있다. 사용 예에서, 관련 데이터에 대한 제1 저장 위치를 나타내는 오프셋 어드레스가 제공될 수 있다. 제1 데이터는 오프셋 어드레스에 위치될 수 있고, 제2 데이터는 오프셋 어드레스 + 1에 위치될 수 있으며, 제3 데이터는 오프셋 어드레스 + 2에 위치될 수 있다.Flow 100 includes loading data 140 into a compute element memory in an array. Data may be integer, real (eg, floating point), or character data; vector, matrix, or array data; tensor data; etc. may be included. Data may be associated with a type of processing application, such as image data for image processing, audio data for audio processing, and the like. Loading data may be accomplished by loading data from a register file, cache, storage internal to the array, external storage coupled to the array, or the like. As discussed below, the data may include data generated by the sides of a branch, where a branch path may be executed in an array. In embodiments, loading of data may occur before a branch decision is made. Because data can be loaded before a branch decision is made, some of the data can be promoted for use by downstream operations, while other data can be ignored. Flow 100 includes using row ring buses 150 to provide branch address offsets to an array of compute elements. Branch offsets may include unequal offsets, and unequal offsets are used for different possible branch paths. Branch offsets can simplify the addressing of data in storage by reducing the size of addresses used for access to storage. In an example of use, an offset address indicating a first storage location for the associated data may be provided. The first data may be located at the offset address, the second data may be located at the offset address + 1, and the third data may be located at the offset address + 2.

흐름(100)은 어레이 내의 분기의 두 측(160)을 실행하는 것을 포함한다. 이전에 논의한 바와 같이, 컴퓨트 요소들의 어레이에 제공된 제어 워드들은 조건성(conditionality)을 포함할 수 있으며, 여기서 조건성은 제어에서 분기를 야기한다. 제어 워드는 어레이 내의 요소들이 조건을 결정하는 계산을 수행하게 할 수 있으며, 이 조건은 프로그램 제어의 흐름을 변경하기 위해 제어 로직으로 전송된다. 제어 유닛이 분기 결정을 수행하기 전에 이행된 방향, 측 또는 분기 경로가 알려지지 않기 때문에, 분기의 두 측이 각각 실행될 수 있다. 분기 결정에 대한 결정 데이터는, 분기가 무조건적 흐름 제어 변화, 즉 무조건적인 분기가 아니라면, 어레이 내의 컴퓨트 요소에 의해 제공될 수 있다. 어레이 내의 임의의 요소가 분기 결정 데이터를 제공할 수 있기 때문에, 제어 워드는 어느 컴퓨트 요소가 제어 로직에 의해 사용될 결정 데이터의 소스인지를 선택한다. 실시예들에서, 분기 결정은 4개의 이웃 컴퓨트 요소들의 블록과 같은 이웃 컴퓨트 요소 블록으로부터 올 수 있으며, 이는 컴퓨트 요소에 팬-인되는 분기 결정 신호를 감소시킬 수 있다.Flow 100 includes executing both sides 160 of a branch in the array. As previously discussed, control words provided to an array of compute elements may include a conditionality, where a conditionality causes a branch in control. Control words can cause elements in the array to perform calculations that determine conditions, which conditions are then passed to control logic to change the flow of program control. Since the direction, side or branching path taken is not known before the control unit performs branch determination, both sides of the branch can be executed respectively. Decision data for a branch decision may be provided by a compute element in the array, provided the branch is not an unconditional flow control change, i.e., an unconditional branch. Since any element in the array can provide branch decision data, the control word selects which compute element is the source of decision data to be used by the control logic. In embodiments, the branch decision may come from a neighboring compute element block, such as a block of four neighboring compute elements, which may reduce the branch decision signal fanning into the compute element.

예를 들어, 제어 워드들의 하나의 서열의 실행은 하나의 분기 경로를 이행하는 것으로부터 초래될 것이고, 반면에 제어 워드들 중 다른 서열의 실행이 다른 분기 경로를 이행하는 것으로부터 초래될 것이다. 정확한 경로가 선험적으로 알려지지 않기 때문에, 실행은 양 경로들 상에서 발생한다. 흐름(100)은 제어 로직에 전달될 분기 결정(170)을 대기하는 것을 포함한다. 분기 결정을 위한 대기는 사이클들의 수, 아키텍처 사이클들 등에 기초할 수 있다. 대기는 분기와 연관된 제어 워드 이전에 제공된 제어 워드들의 수에 기초할 수 있다. 흐름(100)에서, 분기 결정은 어레이 내의 계산 결과(172)에 기초한다. 계산 결과는 산술 또는 부울 연산, 행렬 또는 텐서 연산 등에 기초할 수 있다. 흐름(100)은 분기의 두 측과 동시에 추가적인 분기(180)를 실행하는 것을 더 포함한다. 추가적인 분기는 계산, 평가 등에 기초할 수 있다. 실시예들에서, 추가적인 분기 및 분기의 두 측은 다방향 분기 평가를 포함할 수 있다. 사용 예에서, 변수(A)는 제2 변수(B)와 비교될 수 있다. 제1 경로는 A < B인 경우에 이행될 수 있고; 제2 경로는 A + B인 경우 이행될 수 있으며; 제3 경로는 A > B인 경우에 이행될 수 있다; 등. 다방향 분기 평가는 스위치 동작과 같은 제어 워드를 포함할 수 있다. 다른 실시예들에서, 부가적인 분기 및 분기의 두 측은 두 개의 독립적인 분기 결정들을 포함할 수 있다. 사용 예에서, 추가적인 분기는 에러, 예외, 디폴트, 종료 등을 핸들링하기 위해 사용될 수 있다.For example, execution of one sequence of control words will result from implementing one branching path, while execution of another sequence of control words will result from implementing another branching path. Since the exact path is not known a priori, execution occurs on both paths. Flow 100 includes waiting for branch decision 170 to be passed to control logic. The wait for branch decision may be based on the number of cycles, architecture cycles, and the like. The wait may be based on the number of control words provided prior to the control word associated with the branch. In flow 100, a branch decision is based on the calculation result 172 in the array. Calculation results may be based on arithmetic or Boolean operations, matrix or tensor operations, and the like. Flow 100 further includes executing an additional branch 180 concurrently with both sides of the branch. Further branching may be based on calculations, evaluations, and the like. In embodiments, the additional branch and both sides of the branch may include multidirectional branch evaluation. In an example of use, a variable (A) may be compared to a second variable (B). The first path may be executed if A < B; The second path may be executed if A + B; A third path may be implemented if A>B; etc. Multidirectional branch evaluation can include control words such as switch operations. In other embodiments, the additional branch and the two sides of the branch may include two independent branch decisions. In use cases, additional branches may be used to handle errors, exceptions, defaults, exits, etc.

흐름(100)은 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하는 것(190)을 포함한다. 분기 결정이 이루어지면, 정확한 분기 경로가 이행될 수 있고, 연관된 데이터가 프로모트된다. 이행된 경로에 의해 생성된 데이터를 프로모트하는 것은 레지스터 파일, 캐시, 어레이 내부의 저장소, 어레이 외부의 저장소 등에 데이터를 기록하는 것을 포함할 수 있다. 프로모트 데이터는 분기 결정 이후에만 발생할 수 있다는 점에 주목하는 것이 중요하다. 분기 결정 이전에 데이터를 프로모트하려고 시도하는 것은 불완전한 또는 잘못된 데이터를 초래할 수 있다. 홍보된 데이터는 하나 이상의 다른 컴퓨트 요소에 대한 입력으로서 사용될 수 있다. 실시예들에서, 프로모트된 데이터는 다운스트림 동작을 위해 사용될 수 있다. 다양한 기술들이 분기 조건을 통신하기 위해 사용될 수 있다. 실시예에서, 분기 결정은 어레이 산술 논리 유닛(ALU)의 실행 비트를 사용하여 통신될 수 있다. 분기 결정은 플래그 또는 어떤 다른 표시자를 사용하여 통신될 수 있다. 다른 실시예들에서, 실행은 분기 예측 로직을 제거할 수 있다. 분기 예측은 분기의 어느 측이 코드 분석, 명령어들을 실행하는 것과 연관된 이력 데이터 등에 기초하여 이행될 것인지를 예측하려고 시도한다. 분기 예측에 대한 필요성은 분기 결정이 제어 유닛에 알려지기 전에 분기의 다양한 측들을 실행하고, 그 후 분기 결정에 기초하여 정확한 분기 경로를 선택함으로써 제거된다. 흐름(100)은 분기 결정(192)에 의해 표시되지 않은 분기의 측으로부터의 동작들을 무시하는 것을 포함한다. 동작들을 무시하는 것은 레지스터 파일, 캐시, 저장소 등에 이행되지 않은 분기의 측과 연관된 결과들을 단순히 남기는 것을 포함할 수 있다. 불필요한 결과들을 무시하는 것이 경쟁 상태 또는 잠재적인 데이터 충돌을 야기할 수 있다면, 불필요한 데이터를 핸들링하기 위한 다른 기술들이 적용될 수 있다. 다른 실시예들은 또한 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 제거하는 것을 포함한다. 제거는 데이터를 오버라이트하는 것, 데이터를 삭제하는 것 등을 포함할 수 있다. 추가 실시예들은 분기 결정에 기초하여, 어레이내 컴퓨트 요소 메모리로 로딩되었던 데이터를 무시하는 것을 포함할 수 있다. 어레이내 컴퓨트 요소 메모리는 다른 데이터의 저장을 위해 이용가능하게 될 수 있다. 일반적으로, 이행되지 않은 분기로부터의 데이터의 "부작용들"은, 이들이 이행된 분기 경로에 의해 나중에 요구되는 어레이 내의 데이터를 오버라이트하지 않거나, 이들이 어레이로부터 메모리 시스템에 커밋되는 이행된 경로로부터의 데이터를 저장하지 않는 한, 무시될 수 있다.Flow 100 includes promoting 190 data generated by a branch path that has been fulfilled based on the branch decision. Once a branch decision is made, the correct branch path can be implemented and associated data promoted. Promoting data generated by the fulfilled path may include writing the data to register files, caches, storage within the array, storage outside the array, and the like. It is important to note that promotion data can only occur after a branch decision. Attempting to promote data prior to a branch decision may result in incomplete or erroneous data. The promoted data may be used as input to one or more other compute elements. In embodiments, promoted data may be used for downstream operations. A variety of techniques can be used to communicate branch conditions. In an embodiment, branch decisions may be communicated using execution bits of an array arithmetic logic unit (ALU). Branch decisions may be communicated using flags or some other indicator. In other embodiments, implementation may remove the branch prediction logic. Branch prediction attempts to predict which side of a branch will be fulfilled based on code analysis, historical data associated with executing instructions, and the like. The need for branch prediction is eliminated by executing the various sides of the branch before the branch decision is known to the control unit, and then selecting the correct branch path based on the branch decision. Flow 100 includes ignoring operations from the side of the branch not indicated by branch determination 192 . Ignoring operations may include simply leaving results associated with the side of an unfulfilled branch in a register file, cache, store, or the like. If ignoring unneeded results could lead to race conditions or potential data collisions, other techniques for handling unneeded data may be applied. Other embodiments also include removing results from the side of a branch not indicated by branch determination. Removal may include overwriting data, deleting data, and the like. Further embodiments may include ignoring data that was loaded into an in-array compute element memory based on the branch decision. Compute element memory in the array may be made available for storage of other data. In general, "side effects" of data from branches that are not migrated are that they do not overwrite data in the array later required by a branch path that is migrated, or data from a migrated path where they are committed from the array to the memory system. Can be ignored unless stored.

일부 실시예들에서, 특정 동작들은 분기 명령의 둘 이상의 측들에 대해 어레이에서 수행된다. 이행되지 않은 분기 경로 또는 경로들의 결과는 무시될 수 있고, 이행되지 않는 분기 경로(들)의 임의의 부작용은 제거될 수 있다. 그러나, 추론적으로 수행되는 동작들의 수를 최소화하는 것은 소거되거나 무시될 부작용을 최소화하고 어레이에서의 전력 소비를 감소시킬 수 있다. 이를 달성하기 위해, 컴파일러는 추론적 인코딩(194)을 구현할 수 있고, 여기서 제어 워드는 인코딩이 어레이에서 구현되는 하나 이상의 "기본 블록들"에 걸쳐 있을 수 있도록 추론적으로 인코딩될 수 있으며, 이는 분기 동작의 시간적 스패닝을 포함할 수 있다. 기본 블록은 코드 내의 분기들 사이에서 발생하는 연속적인 명령어 그룹일 수 있다. 컴퓨트 요소들의 어레이가 큰 자원 설비를 제공할 수 있기 때문에, 압축 제어 워드(CCW)는 다수의 병렬 동작들을 추론적으로 인코딩할 수 있고, 이 동작들은 다수의 분기 경로들을 포함할 수 있다.In some embodiments, certain operations are performed in the array for two or more sides of a branch instruction. The consequences of an unfulfilled branching path or paths may be ignored, and any side effects of the unfulfilled branching path(s) may be removed. However, minimizing the number of operations performed speculatively may minimize side effects to be canceled or ignored and reduce power consumption in the array. To achieve this, a compiler may implement speculative encoding 194, where a control word may be speculatively encoded such that the encoding may span one or more "basic blocks" implemented in an array, which branch may include temporal spanning of operations. A basic block can be a contiguous group of instructions that occur between branches in the code. Because an array of compute elements can provide a large resource facility, a compression control word (CCW) can speculatively encode multiple parallel operations, which can include multiple branching paths.

분기 결정이 이루어질 때, 말하자면, 두 개의 값들을 비교하는 산술 연산을 통해, 분기 제어 로직은 분기 결정 결과들을 신속하게 알게 될 수 있다. 그 후, 분기 제어 로직은 완료될 필요가 없는 어레이에서의 동작에 대한 실제 계산을 억제할 수 있다. 즉, 하드웨어는 완료될 필요가 없는 동작들(억제된 동작들)에 대한 임의의 제어 워드들을 영향을 받는 컴퓨트 요소들에 대한 유휴 커맨드로 변환할 수 있다. 실제로, 특정 컴퓨트 요소가 동작을 처리하는 것을 아직 시작하지 않았으면, 동작 제어 시작은 그 컴퓨터 요소로부터 보류될 수도 있고, 즉, 그것은 어레이로 결코 구동되지 않는다.When a branch decision is made, say through an arithmetic operation comparing two values, the branch control logic can quickly learn the branch decision results. Branch control logic can then suppress actual calculations for operations on the array that do not need to be completed. That is, the hardware can convert any control words for operations that do not need to complete (suppressed operations) into idle commands for the affected compute elements. Indeed, if a particular compute element has not yet started processing an operation, the motion control start may be withheld from that computer element, ie it is never driven into the array.

이러한 접근법을 지원하기 위해, 컴파일러는 분기에 의해 영향을 받는 임의의 잠재적인 계산 경로를 지원하는데 필요한 모든 자원들을 어레이에 스케줄링하고 예약할 것이다. 따라서, 명령어 실행이 실행 파이프라인의 어딘가에서 종료되는 잠재적인 조기 종료를 갖는 경로를 추론적으로 실행하기 보다는, 개시된 발명은 조기 억제를 갖는 제어 워드들의 추론적 인코딩을 구현할 수 있으며, 여기서 주어진 사이클에 대한 특정 컴퓨트 요소 또는 요소들에 대한 동작 제어는 어레이로 구동되지 않는다.To support this approach, the compiler will schedule and reserve into an array all the resources needed to support any potential computation path affected by the branch. Thus, rather than speculatively executing a path with potential early termination where instruction execution terminates somewhere in the execution pipeline, the disclosed invention can implement speculative encoding of control words with early suppression, where in a given cycle Motion control for a particular compute element or elements for a system is not driven by the array.

흐름(100)에서의 다양한 단계들은 개시된 개념들로부터 벗어나지 않고 순서대로 변경되거나, 반복되거나, 생략될 수 있는 등일 수 있다. 흐름(100)의 다양한 실시예들은 하나 이상의 프로세서에 의해 실행가능한 코드를 포함하는 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품에 포함될 수 있다.The various steps in flow 100 may be changed in order, repeated, omitted, etc. without departing from the concepts disclosed. Various embodiments of flow 100 may be included in a computer program product embodied in a computer readable medium containing code executable by one or more processors.

도 2는 프로모트된 데이터 사용을 위한 흐름도이다. 전체에 걸쳐 논의되고, 작업들, 하위 작업들 등은 컴퓨트 요소들의 어레이 상에서 처리될 수 있다. 작업은 산술, 벡터, 어레이, 또는 행렬 연산들과 같은 일반적인 연산들; NAND, NOR, XOR, 또는 NOT와 같은 부울 연산들(Boolean operations); 신경망 또는 심층 학습 연산들 등과 같은 애플리케이션들에 기초한 연산들을 포함할 수 있다. 작업들이 정확하게 처리되도록 하기 위해, 제어 워드들은 컴퓨트 요소들의 어레이에 사이클 단위로 제공된다. 제어 워드는 작업을 실행하도록 어레이를 구성한다. 제어 워드들은 컴파일러에 의해 컴퓨트 요소들의 어레이에 제공될 수 있다. 어레이 내의 배치, 스케줄링, 데이터 전송 등을 제어하는 제어 워드를 제공하는 것은 작업 처리 처리량을 최대화할 수 있다. 이러한 최대화는 제2 작업에 의해 요구되는 데이터를 생성하는 작업이 제2 작업을 처리하기 전에 처리되는 것 등을 보장한다. 실시예들에서, 작업들은 분기 동작들을 포함할 수 있다. 분기 동작은 조건에 기초할 수 있고, 조건은 제어 유닛에 의해 확립될 수 있다. 분기는 조건에 기초하여 이행될 수 있는 복수의 "방향", "경로", 또는 "측"을 포함할 수 있다. 조건성은 산술 또는 부울 표현과 같은 표현을 평가하는 것, 명령어들의 서열로부터 명령어들의 제2 서열로 전달하는 것 등을 포함할 수 있다. 실시예들에서, 조건은 코드 점프들을 결정할 수 있다. 이행될 분기 경로는 조건을 평가하기 위해 선험적으로 알려지지 않기 때문에, 각각의 경로가 실행될 수 있다. 조건성이 결정될 때, 이행된 경로와 연관된 데이터는 프로모트될 수 있는 반면, 이행되지 않은 경로와 연관된 데이터가 무시될 수 있다. 프로모트된 데이터 사용은 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처를 인에이블한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스되며, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위 기반으로 제공되며, 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 인에이블되고, 제어는 분기를 포함한다. 분기의 두 측이 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 실행되며, 분기 결정은 어레이 내의 계산 결과에 기초한다. 이행된 분기 경로에 의해 생성된 데이터는 분기 결정에 기초하여 프로모트된다.2 is a flow diagram for using promoted data. As discussed throughout, tasks, subtasks, etc. may be processed on an array of compute elements. Operations can be general operations such as arithmetic, vector, array, or matrix operations; Boolean operations such as NAND, NOR, XOR, or NOT; may include operations based applications such as neural networks or deep learning operations, and the like. To ensure that tasks are processed accurately, control words are provided cycle by cycle to the array of compute elements. Control words configure the array to execute the task. Control words may be provided to the array of compute elements by a compiler. Providing control words to control placement, scheduling, data transfer, etc. within the array can maximize job throughput. This maximization ensures that tasks that generate data required by the second task are processed before processing the second task, and the like. In embodiments, tasks may include branching operations. The branching operation may be condition-based, and the condition may be established by the control unit. A branch can include multiple "directions", "paths", or "sides" that can be implemented based on conditions. Conditionals can include evaluating expressions such as arithmetic or boolean expressions, passing from a sequence of instructions to a second sequence of instructions, and the like. In embodiments, a condition may determine code jumps. Since the branching path to be executed is not known a priori to evaluate the condition, each path can be executed. When preconditions are determined, data associated with fulfilled routes may be promoted, while data associated with non-fulfilled routes may be ignored. Promoted data use enables a highly parallel processing architecture that uses double fork execution. A two-dimensional (2D) array of compute elements is accessed, where each compute element in the array of compute elements is known to the compiler and coupled to its neighboring compute elements in the array of compute elements. Control over the array of compute elements is provided on a cycle-by-cycle basis, where control is enabled by a stream of wide, variable-length control words generated by a compiler, where control includes branches. Both sides of the branch are executed in the array while waiting for a branch decision to be actuated by the control logic, the branch decision being based on the result of the calculation in the array. Data generated by fulfilled branch paths is promoted based on branch decisions.

흐름(200)은 다운스트림 동작을 위해 프로모트된 데이터(210)를 사용하는 것을 포함한다. 데이터를 프로모트하는 단계는 캐시, 공유 저장소, 어레이 내의 메모리 요소 등에 데이터를 저장하는 단계를 포함할 수 있다. 프로모트하는 단계는 컴퓨팅 요소들의 어레이 내의 다른 컴퓨팅 요소들에 데이터를 포워딩하는 단계를 포함할 수 있다. 추가 실시예들은 다운스트림 동작을 위해 프로모트된 데이터를 사용하는 것을 포함할 수 있다. 다운스트림 동작은 산술 또는 부울 연산, 행렬 연산, 신경망 연산 등을 포함할 수 있다. 흐름(200)은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과(212)를 무시하는 것을 더 포함한다. 도시되지 않은 분기의 측과 연관된 제어 워드들에 의해 생성된 데이터와 같은 임의의 결과들은 작업, 하위 작업 등의 추가 처리를 위해 불필요하다. 클록 사이클을 소비해야 하기보다는, 아키텍처 사이클 등이 있다. 불필요한 데이터를 플러싱, 오버라이트, 삭제하기 위해 컴퓨트 요소들의 어레이와 연관되어, 데이터를 무시하는데 어떠한 사이클들도 소모되지 않는다. 또한, 데이터를 무시하기 위해 제어 워드가 요구되지 않는다. 불필요한 데이터와 연관된 레지스터, 캐시, 또는 다른 저장소는 추가 처리를 위해 이용가능하게 될 수 있다. 추가 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터 결과들을 제거하는 단계를 포함할 수 있다. 표시된 분기의 측과 연관된 데이터를 남기는 것이 경합 조건, 데이터 모호성, 또는 일부 다른 가능한 처리 충돌을 야기할 수 있는 경우에, 불필요한 데이터는 저장소, 레지스터들, 캐시 등으로부터 제거될 수 있다.Flow 200 includes using promoted data 210 for downstream operations. Promoting the data may include storing the data in a cache, shared storage, memory element in an array, or the like. Promoting can include forwarding the data to other computing elements in the array of computing elements. Additional embodiments may include using the promoted data for downstream operations. Downstream operations may include arithmetic or boolean operations, matrix operations, neural network operations, and the like. Flow 200 further includes ignoring results 212 from the side of the branch not indicated by the branch determination. Any results, such as data generated by control words associated with the side of a branch not shown, are unnecessary for further processing of the task, subtask, or the like. Rather than having to consume clock cycles, there are architectural cycles and the like. Associated with an array of compute elements to flush, overwrite, or delete unneeded data, no cycles are consumed in ignoring data. Also, no control word is required to override data. Registers, caches, or other storage associated with unneeded data may be made available for further processing. Further embodiments may include removing results from the side of the branch not indicated by branch determination. Unnecessary data may be removed from storage, registers, caches, etc., in cases where leaving data associated with the side of the indicated branch could cause a race condition, data ambiguity, or some other possible processing conflict.

흐름(200)은 커밋된 기록(220)을 위해 프로모트된 데이터를 사용하는 것을 포함한다. 커밋된 기록은, 데이터가 분기 결정에 의해 확인되기 전에 발생하는 경우, 저장소가 임의의 추가 동작에 대해 손상되거나 무효하게 할 수 있는 저장소에 데이터를 기록하는 것을 포함할 수 있다. 커밋된 기록은 데이터 준비, 데이터 유효, 데이터 완료 등의 표시를 포함할 수 있다. 분기의 측들 중 어느 것이 이행될 것인지는 선험적으로 알려지지 않기 때문에, 분기 방향의 어느 측이 이행될 것인지에 대한 결정 이전에 데이터를 기록하는 것은 경합 조건을 제시하고, 무효 데이터를 제공하는 등을 할 수 있을 것이다. 다른 실시예에서, 분기 결정은 무시되거나 반전될 수 없으며, 따라서 커밋된 기록이 무효화되거나 반전되는 포인트 이전에 커밋된 기록을 방지할 필요성을 강화한다. 전체에 걸쳐 논의하면, 커밋된 기록은 데이터를 생성한 컴퓨팅 요소에 로컬이 아닌 하나 이상의 레지스터들, 레지스터 파일, 캐시, 저장소 등에 데이터를 저장할 수 있다. 실시예에서, 커밋된 기록은 데이터 저장소에 대한 커밋된 기록을 포함할 수 있다. 데이터 저장소는 컴퓨터 네트워크 등과 같은 네트워크를 통해 어레이에 의해 액세스가능한, 어레이에 결합된 요소들의 어레이 내에 위치될 수 있다. 실시예들에서, 데이터 저장소는 컴퓨트 요소들의 2D 어레이의 외부에 존재한다. 흐름(200)은 컴파일러에 의해, 커밋된 기록(230)을 분기 미결정 윈도우의 외부에서 발생하도록 스케줄링하는 것을 더 포함한다. 분기 미결정 윈도우는 분기 결정 이전에 제어 워드들을 실행하기 위해 요구되는 다수의 사이클들, 아키텍처 사이클들 등을 포함할 수 있다. 분기 미결정 윈도우는 분기 결정이 결정되고, 제어 유닛이 통지되고, 분기의 이행된 측과 연관된 데이터가 승격되고, 이행된 측과 연관된 데이터가 무시될 때 폐쇄될 수 있다. 실시예들에서, 커밋된 기록을 스케줄링하는 것은 어레이의 동작을 중단시키는 것을 회피할 수 있다. 스케줄링은 사이클들, 아키텍처 사이클들 등에 기초할 수 있다. 스케줄링은 분기 미결정 윈도우와 연관된 사이클의 수, 데이터를 프로모트하기 위한 사이클의 수 등을 포함할 수 있다.Flow 200 includes using promoted data for committed writes 220 . A write committed may involve writing data to storage that, if it occurs before the data is confirmed by a branch decision, may cause the storage to become corrupted or invalid for any further operation. Committed records may include indications of data ready, data valid, data complete, and the like. Since which of the sides of a branch will be implemented is not known a priori, writing data prior to a decision on which side of the branch direction will be implemented may present a race condition, provide invalid data, etc. . In another embodiment, branch decisions cannot be overridden or reversed, thus reinforcing the need to prevent writes committed before the point at which committed records are invalidated or reversed. Discussed throughout, a committed record may store data in one or more registers, register files, caches, stores, etc. that are not local to the computing element that created the data. In an embodiment, a committed record may include a committed record to a data store. The data store may be located within an array of elements coupled to the array accessible by the array through a network, such as a computer network or the like. In embodiments, the data store is external to the 2D array of compute elements. Flow 200 further includes scheduling, by the compiler, write committed 230 to occur outside of the branch undecided window. The branch pending window may include a number of cycles, architectural cycles, etc., required to execute control words prior to branch decision. The branch pending window may be closed when a branch decision is determined, the control unit is notified, data associated with the migrated side of the branch is promoted, and data associated with the migrated side is ignored. In embodiments, scheduling committed writes can avoid disrupting the operation of the array. Scheduling can be based on cycles, architecture cycles, and the like. Scheduling may include the number of cycles associated with the branch pending window, the number of cycles to promote data, and the like.

도 3은 컴파일러 상호작용에 대한 시스템 블록도를 도시한다. 전체에 걸쳐 논의한 바와 같이, 어레이 내의 컴퓨트 요소는 어레이 상에서의 실행을 위해 작업 및 하위 작업을 컴파일할 수 있는 컴퓨터에 알려져 있다. 컴파일된 작업들 및 하위 작업들은 작업 처리를 달성하기 위해 실행된다. 작업들의 배치, 데이터의 라우팅 등과 같은 다양한 상호작용들이 컴파일러와 연관될 수 있다. 상호작용들은 이중 분기 실행을 사용하여 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 컴퓨트 요소들의 어레이 내의 각각의 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들 어레이 내의 그의 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위로 제공된다. 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 인에이블되고, 제어는 분기를 포함한다. 분기의 두 측은 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 실행된다. 분기 결정은 어레이에서의 계산 결과에 기초한다. 이행된 분기 경로에 의해 생성된 데이터는 분기 결정에 기초하여 프로모트된다.Figure 3 shows a system block diagram for compiler interaction. As discussed throughout, the compute elements within an array are known to computers capable of compiling tasks and subtasks for execution on the array. Compiled tasks and subtasks are executed to achieve task processing. A variety of interactions may be associated with the compiler, such as placement of tasks, routing of data, and the like. Interactions use double fork execution to enable highly parallel processing architectures. A two-dimensional (2D) array of compute elements is accessed. Each compute element in the array of compute elements is known to the compiler and is coupled to its neighboring compute elements in the array of compute elements. Control over the array of compute elements is provided on a cycle-by-cycle basis. Control is enabled by a stream of wide variable length control words generated by the compiler, and control includes branches. Both sides of the branch are executed in the array while waiting for a branch decision to be acted on by the control logic. Branch decisions are based on the results of calculations in the array. Data generated by fulfilled branch paths is promoted based on branch decisions.

시스템 블록도(300)는 컴파일러(310)를 포함한다. 컴파일러는 C, C++, 파이톤 또는 유사한 컴파일러와 같은 하이-레벨 컴파일러를 포함할 수 있다. 컴파일러는 VHDL™ 또는 Verilog™ 컴파일러와 같은 하드웨어 기술 언어에 대해 구현되는 컴파일러를 포함할 수 있다. 컴파일러는 저레벨 가상 머신(LLVM) 중간 표현(IR)과 같은 휴대용, 언어-독립, 중간 표현을 위한 컴파일러를 포함할 수 있다. 컴파일러는 컴퓨팅 요소들 및 어레이 내의 다른 요소들에 제공될 수 있는 방향들의 세트를 생성할 수 있다. 컴파일러는 작업(320)을 컴파일하기 위해 사용될 수 있다. 작업들은 처리 작업과 연관된 복수의 작업들을 포함할 수 있다. 작업들은 복수의 하위 작업들을 더 포함할 수 있다. 작업들은 비디오 처리 또는 오디오 처리 애플리케이션과 같은 애플리케이션에 기초할 수 있다. 실시예들에서, 작업들은 기계 학습 기능과 연관될 수 있다. 컴파일러는 컴퓨트 요소 결과들(330)을 핸들링하기 위한 방향들을 생성할 수 있다. 컴퓨트 요소 결과들은 산술, 벡터, 어레이, 및 행렬 연산들; 부울 연산들 등으로부터 도출된 결과들을 포함할 수 있다. 실시예들에서, 컴퓨트 요소 결과들은 컴퓨트 요소들의 어레이에서 병렬로 생성된다. 병렬 결과들은 컴퓨트 요소들이 입력 데이터를 공유할 수 있고, 독립적인 데이터를 사용할 수 있는 등의 경우 컴퓨트 요소들에 의해 생성될 수 있다. 컴파일러는 컴퓨트 요소들의 어레이에 대한 데이터 이동(332)을 제어하는 방향들의 세트를 생성할 수 있다. 데이터 이동의 제어는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들로의, 컴퓨트 요소들로부터의, 그리고 컴퓨트 요소들 사이에서의 데이터의 이동을 포함할 수 있다. 데이터 이동의 제어는 데이터 이동 동안 임시 데이터 저장과 같은 데이터를 로드 및 저장하는 것을 포함할 수 있다. 다른 실시예에서, 데이터 이동은 어레이 내 데이터 이동을 포함할 수 있다.System block diagram 300 includes compiler 310 . Compilers may include high-level compilers such as C, C++, Python or similar compilers. Compilers may include compilers implemented for hardware description languages such as VHDL™ or Verilog™ compilers. Compilers may include compilers for portable, language-independent, intermediate representations such as low-level virtual machine (LLVM) intermediate representations (IR). A compiler can generate a set of directions that can be provided to computing elements and other elements in the array. A compiler may be used to compile task 320 . Tasks may include a plurality of tasks associated with a processing task. Tasks may further include a plurality of sub-tasks. Tasks may be application based, such as video processing or audio processing applications. In embodiments, tasks may be associated with a machine learning function. A compiler may generate directions for handling compute element results 330 . Compute element results include arithmetic, vector, array, and matrix operations; may include results derived from Boolean operations and the like. In embodiments, compute element results are generated in parallel on an array of compute elements. Parallel results can be produced by compute elements if they can share input data, use independent data, and the like. A compiler may generate a set of directions that control data movement 332 relative to the array of compute elements. Control of data movement may include movement of data to, from, and between compute elements within an array of compute elements. Control of data movement may include loading and storing data, such as temporary data storage during data movement. In another embodiment, data movement may include intra-array data movement.

하나 이상의 프로세서 상에서의 실행을 위해 작업 및 하위 작업을 생성하기 위해 사용되는 범용 컴파일러와 같이, 컴파일러는 작업 및 하위 작업 핸들링, 입력 데이터 처리, 중간 및 결과 데이터 핸들링 등을 위한 방향들을 제공할 수 있다. 컴파일러는 어레이와 연관된 컴퓨트 요소들, 저장 요소들, 제어 유닛들, ALU들 등을 구성하기 위한 방향들을 또한 생성할 수 있다. 이전에 논의된 바와 같이, 컴파일러는 작업 핸들링을 지원하기 위해 데이터 핸들링을 위한 방향들을 생성한다. 시스템 블록도에서, 데이터 이동은 메모리 어레이를 갖는 로드 및 저장소(340)를 포함할 수 있다. 로드 및 저장은 정수, 실수 또는 부동, 이중 정밀도, 문자, 및 다른 데이터 유형들과 같은 다양한 데이터 유형들을 핸들링하는 것을 포함할 수 있다. 로드 및 저장은 레지스터들, 레지스터 파일들, 캐시들 등과 같은 로컬 저장소에 데이터를 로드 및 저장할 수 있다. 캐시는 레벨 1(L1) 캐시, 레벨 2(L2) 캐시, 및 레벨 3(L3) 캐시 등과 같은 하나 이상의 레벨의 캐시를 포함할 수 있다. 부하들 및 저장소들은 또한 공유 메모리, 분산 메모리 등과 같은 저장소와 연관될 수 있다. 로드 및 저장에 추가하여, 컴파일러는 메모리 액세스 우위를 포함하는 다른 메모리 및 저장 관리 동작들을 핸들링할 수 있다. 시스템 블록도에서, 메모리 액세스 우위는 메모리 데이터(342)의 순서화를 가능하게 할 수 있다. 메모리 데이터는 작업 데이터 요건들, 하위 작업 데이터 요건들 등에 기초하여 순서화될 수 있다. 메모리 데이터 순서화는 작업들 및 하위 작업들의 병렬 실행을 가능하게 할 수 있다.Like a general-purpose compiler used to create tasks and subtasks for execution on one or more processors, a compiler can provide directions for task and subtask handling, input data handling, intermediate and result data handling, and the like. A compiler may also generate directions for constructing the compute elements, storage elements, control units, ALUs, etc. associated with the array. As previously discussed, the compiler generates directions for data handling to support task handling. In the system block diagram, data movement may include load and store 340 with a memory array. Loading and storing may involve handling various data types such as integer, real or float, double precision, character, and other data types. Load and store may load and store data to local storage such as registers, register files, caches, and the like. The cache may include one or more levels of cache, such as a level 1 (L1) cache, a level 2 (L2) cache, and a level 3 (L3) cache. Loads and stores may also be associated with storage such as shared memory, distributed memory, and the like. In addition to loads and stores, the compiler may handle other memory and store management operations including memory access privileges. In the system block diagram, memory access predominance may enable ordering of memory data 342 . Memory data may be ordered based on working data requirements, sub-working data requirements, and the like. Memory data ordering can enable parallel execution of tasks and subtasks.

시스템 블록도(300)에서, 메모리 데이터의 오더링은 컴퓨트 요소 결과 서열화(344)을 가능하게 할 수 있다. 작업 처리가 성공적으로 달성되도록 하기 위해, 작업 및 하위 작업은 작업 우선순위, 작업 우위, 동작들의 스케줄 등을 수용할 수 있는 순서로 실행되어야 한다. 메모리 데이터는, 작업들 및 하위 작업들이 실행되도록 스케줄링될 때 작업들 및 하위 작업들에 의해 요구된 데이터가 처리를 위해 이용가능하도록 순서화될 수 있다. 따라서, 작업 및 하위 작업에 의한 데이터 처리의 결과는 작업 실행을 최적화하고, 메모리 경합 충돌 등을 감소시키거나 제거하도록 순서화될 수 있다. 시스템 블록도는 방향들의 세트에 기초하여 둘 이상의 잠재적인 컴파일된 작업 결과들의 동시 실행(346)을 가능하게 하는 것을 포함한다. 컴파일러에 의해 컴파일되는 코드는 분기점을 포함할 수 있고, 분기점은 계산 또는 흐름 제어를 포함할 수 있다. 흐름 제어는 명령어 실행을 상이한 명령어 서열로 전달한다. 예를 들어, 분기 결정의 결과가 선험적으로 알려지지 않기 때문에, 두 개 이상의 잠재적인 작업 결과들과 연관된 명령어들의 서열들이 페치될 수 있고, 명령어들의 각각의 서열은 실행을 시작할 수 있다. 분기의 정확한 결과가 결정될 때, 정확한 분기 결과와 연관된 명령어들의 서열은 실행을 계속하는 한편, 이행되지 않은 분기들은 중단, 플러싱, 무시 등이 될 수 있다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 결과들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들 상에서 실행될 수 있다.In system block diagram 300 , ordering of memory data may enable compute element result ordering 344 . For task processing to be successfully achieved, tasks and subtasks must be executed in an order that can accommodate task priorities, task precedence, and scheduling of operations. Memory data may be ordered such that data requested by tasks and subtasks is available for processing when the tasks and subtasks are scheduled to run. Thus, the results of data processing by jobs and subtasks can be ordered to optimize job execution, reduce or eliminate memory contention conflicts, and the like. The system block diagram includes enabling concurrent execution 346 of two or more potentially compiled work results based on a set of directions. Code compiled by a compiler may include branching points, and branching points may include calculations or flow control. Flow control directs instruction execution to a sequence of different instructions. For example, since the outcome of a branch decision is not known a priori, sequences of instructions associated with two or more potential operation outcomes may be fetched, and each sequence of instructions may begin execution. When the correct outcome of a branch is determined, the sequence of instructions associated with the correct branch outcome continues execution, while unfulfilled branches can be aborted, flushed, ignored, etc. In embodiments, two or more potential compiled results may be executed on spatially separated computing elements within an array of computing elements.

시스템 블록도는 컴퓨트 요소 유휴(348)를 포함한다. 실시예들에서, 컴파일러로부터의 방향들의 세트는 컴퓨트 요소들의 어레이에 위치된 컴퓨트 요소들의 로우 내의 불필요한 컴퓨트 요소를 유휴시킬 수 있다. 처리되고 있는 작업들, 하위 작업들 등에 따라, 모든 컴퓨트 요소들이 처리를 위해 필요한 것은 아닐 수도 있다. 컴퓨팅 요소들은 어레이 내에서 이용가능한 컴퓨팅 요소들보다 실행할 작업들이 더 적기 때문에 단순히 필요하지 않을 수 있다. 실시예들에서, 유휴는 컴파일러에 의해 생성된 제어 워드 내의 단일 비트에 의해 제어될 수 있다. 시스템 블록도에서, 어레이 내의 컴퓨트 요소들은 다양한 컴퓨트 요소 기능들(350)을 위해 구성될 수 있다. 컴퓨트 요소 기능은 다양한 유형의 계산 아키텍처, 처리 구성 등을 가능하게 할 수 있다. 실시예들에서, 방향들의 세트는 기계 학습 기능을 가능하게 할 수 있다. 기계 학습 기능은 이미지 데이터, 오디오 데이터, 의료 데이터 등과 같은 다양한 유형의 데이터를 처리하도록 훈련될 수 있다. 실시예들에서, 기계 학습 기능은 신경망 구현을 포함할 수 있다. 신경망은 콘볼루션 신경망, 순환 신경망, 딥 러닝 네트워크 등을 포함할 수 있다. 시스템 블록도는 컴퓨트 요소들의 어레이 내의 컴퓨트 요소 배치, 결과 라우팅, 및 계산 파면 전파(352)를 포함할 수 있다. 컴파일러는 어레이 내의 컴퓨팅 요소들 상에 작업들 및 하위 작업들을 배치할 수 있는 방향들 또는 명령어들을 생성할 수 있다. 배치는 작업들 또는 하위 작업들 사이의 또는 이들 사이의 데이터 종속성에 기초하여 작업들 및 하위 작업들을 배치하는 것, 메모리 충돌 또는 통신 충돌을 회피하는 작업들을 배치하는 것 등을 포함할 수 있다. 방향들은 또한 계산 파면 전파를 가능하게 할 수 있다. 계산 파면 전파는 작업 및 하위 작업의 실행이 컴퓨트 요소의 어레이를 통해 어떻게 진행하는지를 기술하고 제어할 수 있다.The system block diagram includes a compute element idle 348. In embodiments, a set of directions from a compiler may idle an unneeded compute element in a row of compute elements located in the array of compute elements. Depending on the tasks being processed, subtasks, etc., not all compute elements may be required for processing. The computing elements may simply not be needed because there are fewer tasks to execute than the computing elements available in the array. In embodiments, idle may be controlled by a single bit in a control word generated by the compiler. In the system block diagram, the compute elements in the array may be configured for various compute element functions 350. Compute element functions may enable various types of computational architectures, processing configurations, and the like. In embodiments, a set of directions may enable a machine learning function. Machine learning functions can be trained to process various types of data, such as image data, audio data, medical data, and the like. In embodiments, the machine learning function may include a neural network implementation. The neural network may include a convolutional neural network, a recurrent neural network, a deep learning network, and the like. The system block diagram may include compute element placement within an array of compute elements, result routing, and computed wavefront propagation 352 . A compiler can generate directions or instructions that can place tasks and subtasks on the computing elements in the array. Placement may include placing tasks and subtasks based on data dependencies between or between tasks or subtasks, placing tasks to avoid memory conflicts or communication conflicts, and the like. Directions may also enable computed wavefront propagation. Computational wavefront propagation can describe and control how the execution of tasks and subtasks proceeds through an array of compute elements.

시스템 블록도에서, 컴파일러는 아키텍처 사이클(360)을 제어할 수 있다. 아키텍처 사이클은 요소들의 어레이 내의 요소들과 연관된 추상적 사이클을 포함할 수 있다. 어레이의 요소들은 컴퓨트 요소, 저장 요소, 제어 요소, ALU 등을 포함할 수 있다. 아키텍처 사이클은 "추상" 사이클을 포함할 수 있으며, 여기서 추상 사이클은 로드 사이클, 실행 사이클, 기록 사이클 등과 같은 다양한 아키텍처 레벨 동작들을 지칭할 수 있다. 아키텍처 사이클은 저레벨 연산보다는 아키텍처의 매크로 연산을 지칭할 수 있다. 하나 이상의 아키텍처 사이클은 컴파일러에 의해 제어된다. 아키텍처 사이클의 실행은 두 개 이상의 조건에 의존할 수 있다. 실시예들에서, 아키텍처 사이클은 제어 워드가 컴퓨트 요소들의 어레이로 파이프라인될 수 있을 때 그리고 모든 데이터 종속성이 충족될 때 발생할 수 있다. 즉, 컴퓨트 요소들의 어레이는 로딩할 종속 데이터 또는 클리어할 전체 메모리 큐를 기다릴 필요가 없다. 시스템 블록도에서, 아키텍처 사이클은 하나 이상의 물리적 사이클(362)을 포함할 수 있다. 물리적 사이클은 로드, 실행, 기록 등을 구현하기 위해 요구되는 요소 레벨에서의 하나 이상의 사이클들을 지칭할 수 있다. 실시예들에서, 방향들의 세트는 물리적 사이클 단위로 컴퓨트 요소들의 어레이를 제어할 수 있다. 물리적 사이클은 로컬, 모듈, 또는 시스템 클록과 같은 클록, 또는 일부 다른 타이밍 또는 동기화 기술에 기초할 수 있다. 실시예들에서, 물리적 사이클 단위 기반은 아키텍처 사이클을 포함할 수 있다. 물리적 사이클은 요소의 어레이의 각 요소에 대한 인에이블 신호에 기초할 수 있는 반면, 아키텍처 사이클은 글로벌 아키텍처 신호에 기초할 수도 있다. 실시예들에서, 컴파일러는 컴퓨트 요소들의 어레이의 각 컬럼에 대한 유효 비트들을 사이클 단위 기반으로 제어 워드를 통해 제공할 수 있다. 유효 비트는 데이터가 유효하고 처리 준비가 된 것, 점프 어드레스와 같은 어드레스가 유효한 것 등을 나타낼 수 있다. 실시예들에서, 유효 비트들은 유효 메모리 로드 액세스가 어레이로부터 발생하고 있음을 나타낼 수 있다. 어레이로부터의 유효 메모리 로드 액세스는 메모리 또는 저장 요소 내의 데이터에 액세스하기 위해 사용될 수 있다. 다른 실시예들에서, 컴파일러는 제어 워드를 통해, 컴퓨트 요소들의 어레이의 각 컬럼에 대한 피연산자 크기 정보를 제공할 수 있다. 피연산자 크기는 데이터를 얻기 위해 얼마나 많은 로드 연산이 요구될 수 있는지를 결정하는데 사용된다. 다양한 피연산자 크기가 사용될 수 있다. 실시예들에서, 피연산자 크기는 바이트, 하프 워드, 워드, 및 더블 워드를 포함할 수 있다.In the system block diagram, the compiler may control the architecture cycle 360. An architectural cycle may include an abstract cycle associated with elements within an array of elements. Elements of the array may include compute elements, storage elements, control elements, ALUs, and the like. Architectural cycles may include “abstract” cycles, where abstract cycles may refer to various architecture level operations such as load cycles, execute cycles, write cycles, and the like. Architectural cycles can refer to macro operations of an architecture rather than low-level operations. One or more architectural cycles are controlled by the compiler. Execution of an architecture cycle may depend on more than one condition. In embodiments, an architectural cycle may occur when a control word may be pipelined to an array of compute elements and when all data dependencies are satisfied. That is, the array of compute elements does not have to wait for dependent data to load or an entire memory queue to clear. In the system block diagram, an architectural cycle may include one or more physical cycles 362. A physical cycle may refer to one or more cycles at the element level required to implement a load, run, write, etc. In embodiments, a set of directions may control an array of compute elements on a physical cycle basis. A physical cycle may be based on a clock, such as a local, module, or system clock, or some other timing or synchronization technique. In embodiments, the physical cycle unit basis may include an architectural cycle. A physical cycle may be based on an enable signal for each element of an array of elements, whereas an architectural cycle may be based on a global architectural signal. In embodiments, the compiler may provide valid bits for each column of the array of compute elements through the control word on a cycle-by-cycle basis. A valid bit may indicate that data is valid and ready to be processed, an address such as a jump address is valid, and the like. In embodiments, valid bits may indicate that a valid memory load access is occurring from the array. A valid memory load access from an array can be used to access data in a memory or storage element. In other embodiments, the compiler may provide operand size information for each column of the array of compute elements via a control word. Operand size is used to determine how many load operations may be required to obtain the data. Various operand sizes may be used. In embodiments, operand sizes may include bytes, half words, words, and double words.

도 4a는 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다. 고도의 병렬 아키텍처는 컴퓨트 요소, 처리 요소, 버퍼, 하나 이상의 레벨의 캐시 저장소, 시스템 관리, 산술 논리 유닛, 승수 등을 포함하는 구성요소를 포함할 수 있다. 다양한 구성요소들은 작업 처리를 달성하기 위해 사용될 수 있으며, 여기서 작업 처리는 프로그램 실행, 작업 처리 등과 연관된다. 작업 처리는 분산된 레지스터 파일들을 갖는 병렬 처리 아키텍처를 사용하여 인에이블된다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스되며, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합된다. 컴파일러에 의해 생성된 제어 워드들에 기초하여 컴퓨트 요소들의 어레이에 방향들이 제공된다. 마이크로코드 제어 워드들을 포함할 수 있는 제어 워드들은 다양한 컴퓨트 요소들을 인에이블 또는 유휴시키고; 데이터를 제공하고; CE들, 캐시들, 및 저장소 사이에서 결과들을 라우팅하는 것; 및 이와 유사한 것을 가능하게 한다. 방향들은 컴퓨트 요소 동작 및 메모리 액세스 우위를 가능하게 한다. 컴퓨트 요소 동작 및 메모리 액세스 우위는 하드웨어가 컴퓨트 요소 결과들을 적절하게 서열화할 수 있게 한다. 방향들은 컴퓨트 요소들의 어레이 상에서 컴파일된 작업의 실행을 가능하게 한다.4A shows a system block diagram for a highly parallel architecture with shallow pipelines. A highly parallel architecture may include components including compute elements, processing elements, buffers, one or more levels of cache storage, system management, arithmetic logic units, multipliers, and the like. Various components may be used to achieve task processing, where task processing is associated with program execution, task processing, and the like. Job processing is enabled using a parallel processing architecture with distributed register files. A two-dimensional (2D) array of compute elements is accessed, where each compute element in the array of compute elements is known to the compiler and coupled to its neighboring compute elements in the array of compute elements. Directions are provided to the array of compute elements based on control words generated by the compiler. Control words, which may include microcode control words, enable or idle various compute elements; provide data; routing results between CEs, caches, and storage; and the like. Directions enable compute element operation and memory access dominance. Compute element operation and memory access dominance allows hardware to properly rank compute element results. Directions enable execution of compiled work on an array of compute elements.

얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도(400)가 도시된다. 시스템 블록도는 컴퓨트 요소 어레이(410)를 포함할 수도 있다. 컴퓨팅 요소 어레이(410)는 컴퓨팅 요소들에 기초할 수 있고, 여기서 컴퓨팅 요소들은 프로세서들, 중앙 처리 유닛들(CPU들), 그래픽 처리 유닛들(GPU들) 및 코프로세서들 등을 포함할 수 있다. 컴퓨팅 요소들은 ASIC들(application specific integrated circuits)과 같은 칩들 내에 구성된 처리 코어들, FPGA들(field programmable gate arrays) 등과 같은 프로그래머블 칩들로 프로그래밍된 처리 코어들에 기초할 수 있다. 컴퓨트 요소들은 컴퓨트 요소들의 균일한 어레이를 포함할 수 있다. 시스템 블록도(400)는 변환 및 색인 버퍼들(412 및 438)과 같은 변환 및 색인 버퍼들을 포함할 수 있다. 변환 및 색인 버퍼들은 메모리 어드레싱 시스템의 일부이다. 메모리 캐시는 저장 액세스 시간을 감소시키기 위해 사용될 수 있다. 시스템 블록도는 로드 및 액세스 순서 및 선택을 위한 로직을 포함할 수 있다. 로드 및 액세스 순서 및 선택을 위한 로직은 로직(414) 및 로직(440)을 포함할 수 있다. 로직(414 및 440)은 하위 데이터 블록(416, 418 및 420) 및 상위 데이터 블록(442, 444 및 446)에 대한 로드 및 액세스 순서 및 선택을 각각 달성할 수 있다. 이러한 레이아웃 기술은 액세스 대역폭을 배가시키고, 상호접속 복잡도를 감소시키는 등을 할 수 있다. 로직(440)은 큐들 및 승수 유닛들(447) 구성요소를 통해 컴퓨트 요소 어레이(410)에 결합될 수 있다. 동일한 방식으로, 로직(414)은 큐들 및 승수 유닛들(417) 구성요소를 통해 컴퓨트 요소 어레이(410)에 결합될 수 있다.A system block diagram 400 is shown for a highly parallel architecture with shallow pipelines. The system block diagram may include an array of compute elements 410 . The computing element array 410 may be based on computing elements, where the computing elements may include processors, central processing units (CPUs), graphics processing units (GPUs), coprocessors, and the like. . Computing elements may be based on processing cores built into chips such as application specific integrated circuits (ASICs), processing cores programmed into programmable chips such as field programmable gate arrays (FPGAs), and the like. Compute elements may include a uniform array of compute elements. System block diagram 400 may include translation and index buffers, such as translation and index buffers 412 and 438. Translation and index buffers are part of the memory addressing system. A memory cache can be used to reduce store access time. The system block diagram may include logic for load and access ordering and selection. Logic for load and access ordering and selection may include logic 414 and logic 440 . Logic 414 and 440 may achieve load and access ordering and selection for lower data blocks 416, 418 and 420 and upper data blocks 442, 444 and 446, respectively. Such layout techniques can double access bandwidth, reduce interconnection complexity, and the like. Logic 440 may be coupled to compute element array 410 via the queues and multiplier units 447 component. In the same manner, logic 414 may be coupled to compute element array 410 via the queues and multiplier units 417 component.

시스템 블록도는 액세스 큐들을 포함할 수 있다. 액세스 큐들은 액세스 큐들(416 및 442)을 포함할 수 있다. 액세스 큐는 데이터를 저장하고 데이터를 로딩하기 위해 액세스 캐시, 저장소 등에 대한 요청을 큐잉하는데 사용될 수 있다. 시스템 블록도는 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 캐시는 L1 및 L2 캐시보다 클 수 있고, 더 느린 저장을 포함할 수 있다. L3 캐시들로부터의 데이터에 액세스하는 것은 메인 저장소에 액세스하는 것보다 여전히 더 빠르다. 실시예들에서, L1, L2 및 L3 캐시들은 4-방향 세트 연관 캐시들을 포함할 수 있다.A system block diagram may include access queues. Access queues may include access queues 416 and 442 . Access queues can be used to queue requests to access caches, repositories, etc. to store data and load data. The system block diagram may include level 1 (L1) data caches, such as L1 caches 418 and 444. L1 caches may be used to store blocks of data, such as data to be processed together, data to be processed sequentially, and the like. The L1 cache may include small, fast memory that is quickly accessible by compute elements and other components. The system block diagram may include level 2 (L2) data caches. L2 caches may include L2 caches 420 and 446 . An L2 cache may contain larger and slower storage compared to an L1 cache. The L2 cache may store results such as "next up" data, intermediate results, and the like. The L1 and L2 caches may be further coupled to a level 3 (L3) cache. The L3 cache may include L3 caches 422 and 448. The L3 cache may be larger than the L1 and L2 caches and may include slower stores. Accessing data from L3 caches is still faster than accessing main storage. In embodiments, the L1, L2 and L3 caches may include 4-way set associative caches.

블록도(400)는 시스템 관리 버퍼(424)를 포함할 수 있다. 시스템 관리 버퍼는 컴퓨트 요소의 어레이(410)를 제어하는데 사용될 수 있는 시스템 관리 코드 또는 제어 워드를 저장하는데 사용될 수 있다. 시스템 관리 버퍼는 연산 코드, 코드, 루틴, 함수 등을 보유하기 위해 채용될 수 있다. 이는 예외 또는 에러 핸들링, 작업들을 처리하기 위한 병렬 아키텍처의 관리 등에 사용될 수 있다. 시스템 관리 버퍼는 압축해제기(426)에 결합될 수 있다. 압축해제기는 시스템 관리 압축 제어 워드 버퍼(428)로부터의 시스템 관리 압축된 제어 워드(CCW)를 압축해제하는데 사용될 수 있고, 압축해제된 시스템 관리 제어 워드를 시스템 관리 버퍼(424)에 저장한다. 압축된 시스템 관리 제어 워드는 압축되지 않은 제어 워드보다 적은 저장을 요구할 수 있다. 시스템 관리 CCW 구성요소(428)는 또한 스필 버퍼(spill buffer)를 포함한다. 스필 버퍼는 다수의 네스팅된 레벨들의 예외들을 지원하기 위해 사용될 수 있는 큰 정적 랜덤 액세스 메모리(SRAM)를 포함할 수 있다.Block diagram 400 may include a system management buffer 424 . The system management buffer may be used to store system management code or control words that may be used to control the array 410 of compute elements. System management buffers may be employed to hold opcodes, codes, routines, functions, and the like. It can be used for handling exceptions or errors, managing a parallel architecture for processing tasks, and so on. A system management buffer may be coupled to decompressor 426 . The decompressor may be used to decompress the system management compressed control words (CCW) from the system management compression control word buffer 428 and store the decompressed system management control words in the system management buffer 424 . A compressed system management control word may require less storage than an uncompressed control word. The system management CCW component 428 also includes a spill buffer. The spill buffer can include a large static random access memory (SRAM) that can be used to support multiple nested levels of exceptions.

컴퓨트 요소들의 어레이 내의 컴퓨트 요소들은 제어 유닛(430)과 같은 제어 유닛에 의해 제어될 수 있다. 컴파일러가 제어 워드를 통해 개별 요소들을 제어하지만, 제어 유닛은 새로운 제어 워드들이 어레이로 구동되지 않는 것을 보장하기 위해 어레이를 일시정지시킬 수 있다. 제어 유닛은 압축해제기(decompressor)(432)로부터 압축해제된 제어 워드를 수신한다. 압축해제기는 컴퓨트 요소들의 로우들 또는 컬럼들을 인에이블 또는 유휴시키고, 개별 컴퓨트 요소들을 인에이블 또는 유휴시키고, 제어 워드들을 개별 컴퓨트 요소들 등에 전송하기 위해 제어 워드(후술됨)를 압축해제할 수 있다. 압축해제기는 압축 제어 워드 캐시 1(CCWC1)(434)과 같은 압축 제어 워드를 저장할 수 있다. CCWC1은 하나 이상의 압축된 제어 워드들을 포함하는 L1 캐시와 같은 캐시를 포함할 수 있다. CCWC1은 압축 제어 워드 캐시 2(CCWC2)(436)와 같은 추가 압축 제어 워드를 저장할 수 있다. CCWC2는 압축된 제어 워드들에 대한 L2 캐시로서 사용될 수 있다. CCWC2는 CCWC1보다 크고 느릴 수 있다. 실시예들에서, CCWC1 및 CCWC2는 4-방향 세트 연관성을 포함할 수 있다. 실시예들에서, CCWC1 캐시는 압축해제된 제어 워드들을 포함할 수 있고, 이 경우에 그것은 DCWC1로서 지정될 수 있다. 그 경우에, 압축해제기(432)는 CCWC1(434)(현재 DCWC1)과 CCWC2(436) 사이에 결합될 수 있다.Compute elements in the array of compute elements may be controlled by a control unit such as control unit 430 . Although the compiler controls the individual elements via control words, the control unit may pause the array to ensure that no new control words are driven into the array. The control unit receives the decompressed control word from a decompressor (432). The decompressor enables or idles rows or columns of compute elements, enables or idles individual compute elements, compresses control words (described below) to transfer control words to individual compute elements, etc. can be unlocked The decompressor may store compression control words such as compression control word cache 1 (CCWC1) 434. CCWC1 may include a cache such as an L1 cache containing one or more compressed control words. CCWC1 may store additional compression control words such as compression control word cache 2 (CCWC2) 436 . CCWC2 can be used as an L2 cache for compressed control words. CCWC2 can be larger and slower than CCWC1. In embodiments, CCWC1 and CCWC2 may include a 4-way set association. In embodiments, the CCWC1 cache may contain decompressed control words, in which case it may be designated as DCWC1. In that case, decompressor 432 may be coupled between CCWC1 434 (currently DCWC1) and CCWC2 436.

도 4b는 컴퓨트 요소 어레이 상세(402)를 도시한다. 컴퓨트 요소 어레이는 컴퓨트 요소들이 하나 이상의 작업들, 하위 작업들 등을 처리할 수 있게 하는 구성요소들에 결합될 수 있다. 구성요소들은 데이터에 액세스 및 제공하고, 특정 고속 동작들을 수행하는 등을 할 수 있다. 컴퓨트 요소 어레이 및 그 연관된 구성요소들은 백그라운드 로드를 갖는 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소 어레이(450)는 다양한 처리 작업을 수행할 수 있으며, 여기서 처리 작업은 산술, 벡터, 행렬, 또는 텐서 연산; 오디오 및 비디오 처리 연산; 신경망 연산; 등과 같은 연산을 포함할 수 있다. 컴퓨트 요소들은 하위 승수 유닛들(452) 및 상위 승수 유닛(454)과 같은 승수 유닛들에 결합될 수 있다. 승수 유닛들은 일반 처리 작업들과 연관된 고속 곱셈들, 심층 학습 네트워크들과 같은 신경망들과 연관된 곱셈들 및 벡터 연산들과 관련된 곱셈들 등을 수행하기 위해 사용될 수 있다. 컴퓨트 요소들은 로드 큐들(464) 및 로드 큐(466)와 같은 로드 큐들에 연결될 수 있다. 로드 큐는 전술한 바와 같이 L1 데이터 캐시에 연결될 수 있다. 로드 큐들은 컴퓨트 요소들로부터의 저장소 액세스 요청들을 로드하기 위해 사용될 수 있다. 로드 큐들은 예상된 로드 레이턴시들을 추적할 수 있고, 로드 레이턴시가 임계치를 초과하는 경우 제어 유닛에 통지할 수 있다. 제어 유닛의 통지는 부하가 예상된 시간프레임 내에 도착하지 않을 수 있다는 것을 시그널링하는데 사용될 수 있다. 로드 큐들은 또한 컴퓨트 요소들의 어레이를 일시정지시키기 위해 사용될 수 있다. 로드 큐들은 전체 어레이를 일시정지시킬 제어 유닛에 일시정지 요청을 전송할 수 있는 반면, 개별 요소들은 제어 워드의 제어 하에서 유휴될 수 있다. 요소가 명시적으로 제어되지 않을 때, 유휴(또는 저전력) 상태에 놓일 수 있다. 어떠한 동작도 수행되지 않지만, 링 버스들은 어레이의 나머지가 적절하게 동작하도록 허용하기 위해 "패스 스루" 모드에서 계속 동작할 수 있다. 컴퓨트 요소가 그 ALU를 통해 변경되지 않은 데이터를 라우팅하기 위해 사용될 때, 그것은 여전히 활성인 것으로 간주된다.4B shows a compute element array detail 402 . An array of compute elements may be coupled to components that enable the compute elements to process one or more tasks, subtasks, and the like. Components may access and provide data, perform certain high-speed operations, and the like. The compute element array and its associated components enable parallel processing architectures with a background load. Compute element array 450 may perform a variety of processing tasks, where processing tasks include arithmetic, vector, matrix, or tensor operations; audio and video processing operations; neural network operation; It may include operations such as Compute elements may be coupled to multiplier units, such as lower multiplier units 452 and upper multiplier unit 454 . Multiplier units may be used to perform fast multiplications associated with general processing tasks, multiplications associated with neural networks such as deep learning networks, multiplications associated with vector operations, and the like. Compute elements may be coupled to load queues such as load queues 464 and load queue 466 . The load queue may be connected to the L1 data cache as described above. Load queues may be used to load storage access requests from compute elements. The load queues can track expected load latencies and notify the control unit if the load latency exceeds a threshold. The control unit's notification can be used to signal that a load may not arrive within an expected timeframe. Load queues can also be used to pause an array of compute elements. Load queues can send a pause request to the control unit that will pause the entire array, while individual elements can idle under the control of a control word. When an element is not explicitly controlled, it can be placed in an idle (or low power) state. No action is taken, but the ring buses can continue to operate in a “pass through” mode to allow the rest of the array to operate properly. When a compute element is used to route unchanged data through its ALU, it is still considered active.

컴퓨트 요소들의 어레이가 일시정지되는 동안, 메모리들(데이터 및 제어 워드)로부터의 어레이의 백그라운드 로딩이 수행될 수 있다. 메모리 시스템들은 자유롭게 실행될 수 있고, 어레이가 일시정지되는 동안 계속 동작할 수 있을 것이다. 추가적인 "데드 타임(dead time)"을 초래하는 제어 신호 전송으로 인해 멀티-사이클 레이턴시가 발생할 수 있기 때문에, 메모리 시스템이 어레이에 "돌입"하고 어레이가 일시정지되는 동안 로드 데이터를 적절한 스크래치패드 메모리들에 전달하도록 하는 것이 유익할 수 있다. 이 메커니즘은 컴파일러에 관한 한 어레이 상태가 알려지도록 동작할 수 있다. 어레이 동작이 일시정지 후에 재개될 때, 컴파일러가 정적으로 스케줄링된 모델을 유지하기 위해 요구되는 바와 같이, 새로운 로드 데이터가 스크래치패드에 도착할 것이다.Background loading of the array from memories (data and control words) may be performed while the array of compute elements is paused. The memory systems can run freely and continue to operate while the array is suspended. Because multi-cycle latencies can occur due to control signal transfers incurring additional "dead time", the memory system "rushes" into the array and loads data while the array is paused to the appropriate scratchpad memories. It may be beneficial to have it forwarded to This mechanism can work so that the array state is known as far as the compiler is concerned. When array operation resumes after a pause, new load data will arrive in the scratchpad, as required by the compiler to maintain a statically scheduled model.

도 5는 표준 코드 생성 파이프라인을 도시한다. 사이클 단위로 하드웨어에 제공되는 제어는 작업 처리를 위한 코드를 포함할 수 있다. 코드는 C, C++, Python 등과 같은 고급 언어; 어셈블리 언어와 같은 저레벨 언어; 기타 등등으로 기록된 코드를 포함할 수 있다. 코드 생성 파이프라인은 저레벨 가상 머신(LLVM) 중간 표현(IR)과 같은 중간 코드 또는 중간 표현을 타겟 머신 코드로 변환하는데 사용될 수 있다. 타겟 기계 코드는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들에 의해 실행될 수 있는 기계 코드를 포함할 수 있다. 코드 생성 파이프라인은 이중 분기 실행을 사용하여 고도의 병렬 처리 아키텍처를 가능하게 한다. 예시적인 코드 생성 파이프라인(500)이 도시된다. 코드 생성 파이프라인은 하나 이상의 동작(510)을 수행하여 LLVM IR 코드와 같은 코드를 출력 코드(514)로 변환할 수 있다. 파이프라인은 입력 코드(512)를 수신할 수 있다. 수신된 입력은 LLVM IR 표현(520) 내의 리스트를 포함할 수 있다. 중간 형태는 단일 정적 할당(SSA) 형태를 포함할 수 있으며, 여기서 코드와 연관된 각각의 변수는 단지 한 번 할당된다. 파이프라인은 DAG 하강 구성요소(522)를 포함할 수 있다. DAG 저하 구성요소는 DAG의 차수를 감소시킬 수 있고, 비공인 또는 미확인 DAG(524)를 출력할 수 있다. 비공인 DAG는 DAG 공인 구성요소(526)를 사용하여 공인되거나 확인될 수 있다. DAG 공인 구성요소는 공인 DAG(528)를 출력할 수 있다. 공인 DAG는 명령어 선택 구성요소(530)에 제공될 수 있다. 명령어 선택 구성요소는 생성된 명령어들(532)을 포함할 수 있다. 생성된 명령어들은 컴퓨팅 요소들의 어레이의 하나 이상의 컴퓨팅 요소들에 대한 제어 워드 마이크로코드에 직접 지정될 수 있다. 처리 작업들 및 하위 작업들을 나타낼 수 있는 네이티브 명령어들은 스케줄링 구성요소(534)를 이용하여 스케줄링될 수 있다. 스케줄링 구성요소는 리스트를 생성하는데 사용될 수 있으며, 리스트는 중간 표현(IR)의 정적 단일 할당(SSA)(536) 형태의 코드를 포함한다. SSA 형태는 각각의 변수의 단일 할당을 포함할 수 있으며, 여기서 할당은 변수가 코드 내에서 참조되거나 사용되기 전에 발생한다. 최적화기 구성요소(538)는 SSA 형태로 코드를 최적화할 수 있다. 최적화기는 최적화된 코드를 SSA 형태로 생성할 수 있다(540).5 shows a standard code generation pipeline. The control provided to the hardware on a cycle-by-cycle basis may include code for task processing. The code can be written in a high-level language such as C, C++, Python, etc.; low-level languages such as assembly language; and so forth. A code generation pipeline can be used to transform intermediate code or intermediate representations, such as low-level virtual machine (LLVM) intermediate representations (IRs), into target machine code. Target machine code may include machine code executable by one or more compute elements in the array of compute elements. The code generation pipeline uses double fork execution to enable highly parallel processing architectures. An exemplary code generation pipeline 500 is shown. The code generation pipeline may perform one or more operations 510 to convert code, such as LLVM IR code, to output code 514 . The pipeline may receive input code 512 . The received input may include a list in the LLVM IR representation 520. Intermediate forms may include single static assignment (SSA) forms, where each variable associated with code is allocated only once. The pipeline may include a DAG lowering component 522 . The DAG degradation component may reduce the order of the DAG and may output an uncertified or unconfirmed DAG 524 . A non-public DAG may be authorized or verified using the DAG Authorization Component 526. The DAG Authorization component may output the Authorization DAG 528 . The authorized DAG may be provided to the instruction selection component 530. The command selection component may include generated commands 532 . The generated instructions may be directly specified in the control word microcode for one or more computing elements of the array of computing elements. Native instructions, which may represent processing tasks and subtasks, may be scheduled using scheduling component 534 . A scheduling component may be used to create a list, which includes code in the form of a static single assignment (SSA) 536 of an intermediate representation (IR). The SSA form may include a single assignment of each variable, where the assignment occurs before the variable is referenced or used in code. The optimizer component 538 may optimize the code in SSA form. The optimizer may generate the optimized code in the form of SSA (540).

SSA 형태의 최적화된 코드는 레지스터 할당 구성요소(542)를 사용하여 처리될 수 있다. 레지스터 할당 구성요소는 물리적 레지스터들(544)의 리스트를 생성할 수 있고, 여기서 물리적 레지스터들은 컴퓨트 요소들의 어레이 내의 레지스터들 또는 다른 저장소를 포함할 수 있다. 코드 발생 파이프라인은 사후 할당 구성요소(546)를 포함할 수 있다. 사후 할당 구성요소는 레지스터 할당 충돌을 해결하고, 레지스터 할당을 최적화하는 등에 사용될 수 있다. 사후 할당 구성요소는 물리적 레지스터들(548)의 리스트를 포함할 수 있다. 파이프라인은 프롤로그 및 에필로그 구성요소(550)를 포함할 수 있다. 프롤로그 및 에필로그 구성요소는 프롤로그와 연관된 코드 및 에필로그와 연관된 코드를 추가할 수 있다. 프롤로그는 사용을 위해 레지스터들 등을 준비할 수 있는 코드를 포함할 수 있다. 에필로그는, 프롤로그와 에필로그 사이의 코드가 실행되었을 때, 프로로그에 의해 수행되는 동작들을 반전시키기 위한 코드를 포함할 수 있다. 프롤로그 및 에필로그 구성요소는 해결된 스택 예약(552)의 리스트를 생성할 수 있다. 파이프라인은 핍홀 최적화 구성요소(554)를 포함할 수 있다. 핍홀 최적화 구성요소는 코드의 작은 서열의 성능을 개선하기 위해 코드의 작은 서열 또는 "핍홀"을 최적화하는데 사용될 수 있다. 핍홀 최적화기 구성요소의 출력은 분해된 스택 예약(556)의 최적화된 리스트를 포함할 수 있다. 파이프라인은 어셈블리 프린팅 구성요소(558)를 포함할 수 있다. 어셈블리 프린팅 구성요소는 어셈블리 코드(560)의 어셈블리 언어 텍스트를 생성할 수 있다. 표준 코드 생성 파이프라인의 출력은 넓은 가변 길이 제어 워드의 스트림에 포함시키기 위한 출력 코드(514)를 포함할 수 있다.Optimized code of the form SSA can be processed using the register allocation component 542. The register allocation component may generate a list of physical registers 544, where the physical registers may include registers or other storage within an array of compute elements. The code generation pipeline may include a post allocation component 546 . The post-allocation component can be used to resolve register allocation conflicts, optimize register allocation, and the like. The post-allocation component may include a list of physical registers 548. The pipeline may include prolog and epilog components 550 . Prolog and Epilog components can add code associated with the prologue and code associated with the epilogue. The prolog may contain code that may prepare registers, etc. for use. The epilog may include code for reversing operations performed by the prolog when the code between the prolog and the epilogue is executed. The prolog and epilog components may create a list of stack reservations 552 that have been resolved. The pipeline may include a peephole optimization component 554 . The peephole optimization component can be used to optimize small sequences of code, or “peepholes,” to improve the performance of small sequences of code. The output of the peephole optimizer component may include an optimized list of decomposed stack reservations 556. The pipeline may include assembly printing component 558 . The assembly printing component may generate assembly language text of assembly code 560 . The output of the standard code generation pipeline may include output code 514 for inclusion in the stream of wide variable length control words.

도 6은 방향들을 동작들의 방향성 비순환 그래프(directed acyclic graph; DAG)로 변환하는 것을 도시한다. 컴퓨트 요소들의 어레이에 대한 작업들 및 하위 작업들의 처리는 방향성 비순환 그래프를 이용하여 모델링될 수 있다. DAG는 작업과 하위 작업 사이의 의존성을 나타낸다. 종속성은 작업 및 하위 작업 우위, 우선순위들 등을 포함할 수 있다. 종속성은 또한 작업들 및 하위 작업들로의, 작업들로부터의, 및 작업들 사이의 실행 순서 및 데이터의 흐름을 나타낼 수 있다. 명령어들을 DAG로 변환하는 것은 이중 분기 실행을 사용하여 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 어레이 내의 각각의 컴퓨트 요소는 컴파일러에 알려져 있고, 그 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위로 제공된다. 분기의 두 측은 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 실행된다. 분기 결정은 어레이에서의 계산 결과에 기초한다. 이행된 분기 경로에 의해 생성된 데이터는 분기 결정에 기초하여 프로모트된다.Figure 6 shows the transformation of directions into a directed acyclic graph (DAG) of operations. The processing of tasks and subtasks on an array of compute elements can be modeled using a directed acyclic graph. A DAG represents dependencies between tasks and subtasks. Dependencies may include task and subtask priorities, priorities, and the like. Dependencies can also indicate the flow of data and execution order to, from, and between tasks and subtasks. Converting instructions to a DAG enables highly parallel processing architectures using double fork execution. A two-dimensional (2D) array of compute elements is accessed. Each compute element in the array is known to the compiler and is coupled to its neighboring compute elements. Control over the array of compute elements is provided on a cycle-by-cycle basis. Both sides of the branch are executed in the array while waiting for a branch decision to be acted on by the control logic. Branch decisions are based on the results of calculations in the array. Data generated by fulfilled branch paths is promoted based on branch decisions.

코드, 명령어, 마이크로코드 등을 포함할 수 있는 한 세트의 방향은 DAG 동작(600)으로 변환될 수 있다. 명령어들은 저레벨 가상 머신(LLVM) 명령어들을 포함할 수 있다. 이전에 그리고 전체에 걸쳐 논의된 방향들을 기술하는 코드와 같은 주어진 코드가 DAG가 생성될 수 있다. DAG는 작업 및 하위 작업의 배치에 관한 정보를 포함할 수 있지만, 반드시 작업과 하위 작업의 스케줄링 및 작업으로의, 작업으로부터의, 작업 사이의 데이터의 라우팅에 관한 정보를 포함하지는 않는다. 그래프는 엔트리(610) 또는 입력을 포함하고, 엔트리는 입력 포트, 레지스터, 저장소 내의 어드레스 등을 나타낼 수 있다. 입구는 출력 또는 출구(612)에 결합될 수 있다. DAG의 출구 포인트는 DAG의 작업 및 하위 작업을 완료함으로써 도달될 수 있다. 에러, 누락 데이터, 저장 액세스 충돌 등과 같은 예외의 경우에, DAG는 중단되거나 에러로 빠져나갈 수 있다. DAG의 입구 및 출구는 하나 이상의 아크(620)에 의해 결합될 수 있으며, 여기서 각각의 아크는 하나 또는 그 이상의 처리 단계를 포함할 수도 있다. 처리 단계들은 작업들, 하위 작업들 등과 연관될 수 있다. 방향들에 기초한 처리 단계들의 예시적인 서열이 도시된다. 처리 단계들의 서열은 다양한 명령어들(622 및 624)을 포함할 수 있다. 명령어들은 더블 정밀도(예를 들어, 64-비트) 값을 수반할 수 있다. 서열은 명령어들(626 및 628)과 같은 다른 명령어들을 포함할 수 있다. 서열은 또 다른 명령어(630)를 포함할 수 있다. 서열은 추가 명령어(632)를 포함할 수 있다. 서열은 또 다른 추가 명령어(634)를 포함할 수 있다. 명령어들의 서열에서 마지막 명령어가 완료되면, DAG 내의 흐름은 그래프(612)의 출구로 진행한다.A set of directions, which may include code, instructions, microcode, etc., may be translated into DAG operations 600. The instructions may include low-level virtual machine (LLVM) instructions. A given code, such as the code describing the directions discussed previously and throughout, can create a DAG. A DAG may contain information about the placement of jobs and subtasks, but does not necessarily contain information about the scheduling of jobs and subtasks and the routing of data to, from, and between jobs. The graph contains entries 610 or inputs, and entries can represent input ports, registers, addresses in storage, and the like. The inlet may be coupled to the output or outlet 612 . A DAG's exit point can be reached by completing the DAG's tasks and subtasks. In case of exceptions, such as errors, missing data, storage access conflicts, etc., the DAG may abort or exit with errors. The inlet and outlet of the DAG may be coupled by one or more arcs 620, where each arc may include one or more processing steps. Processing steps may be associated with tasks, subtasks, and the like. An exemplary sequence of processing steps based on directions is shown. The sequence of processing steps may include various instructions 622 and 624. Instructions may involve double precision (eg, 64-bit) values. The sequence may include other instructions, such as instructions 626 and 628. The sequence may include further instructions 630 . The sequence may include additional instructions 632. The sequence may include further additional instructions 634 . When the last instruction in the sequence of instructions is complete, flow within the DAG proceeds to the exit of graph 612 .

도 7은 SAT 모델을 생성하기 위한 흐름도이다. 작업들, 하위 작업들 등을 처리하는 것을 포함하는 작업 처리는 작업들과 연관된 하나 이상의 동작들을 수행하는 것을 포함한다. 연산은 산술 연산; 부울 연산; 벡터, 어레이, 또는 행렬 연산; 텐서 연산 등을 포함할 수도 있다. 작업들, 하위 작업들 등이 정확하게 처리되도록 하기 위해, 2D 어레이 내의 컴퓨트 요소들과 같은 하드웨어에 제공되는 제어 워드들, 방향들 등과 같은 제어들은 동작들이 수행될 때 및 동작들로 그리고 동작들로부터 데이터를 어떻게 라우팅할지를 표시해야 한다. 만족도(satisfiability) 또는 SAT 모델은 작업들, 동작들 등을 순서화하기 위해, 그리고 데이터를 컴퓨트 요소들로 그리고 컴퓨트 요소들로부터 제공하기 위해 생성될 수 있다. 만족스러움 모델을 생성하는 것은 이중 분기 실행을 사용하여 고도의 병렬 처리 아키텍처를 가능하게 한다. 작업, 하위 작업 등과 연관된 각각의 동작은 클록 사이클을 할당받을 수 있으며, 여기서 클록 사이클은 명령어들의 블록의 시작과 연관된 클록 사이클에 관련될 수 있다. 하나 이상의 이동(MV) 연산은 연산의 출력과 하나 이상의 추가 연산에 대한 입력 사이에 삽입될 수 있다.7 is a flow chart for creating a SAT model. Task processing, which includes processing tasks, subtasks, etc., includes performing one or more actions associated with tasks. Operations are arithmetic operations; boolean operations; vector, array, or matrix operations; It may also include tensor operations and the like. To ensure that tasks, subtasks, etc. are processed correctly, controls such as control words, directions, etc. provided to hardware such as compute elements in a 2D array determine when operations are performed and to and from operations. You need to indicate how you want to route the data. A satisfaction or SAT model can be created to order tasks, actions, etc., and to provide data to and from compute elements. Creating a satisfactory model enables highly parallel processing architectures using double fork execution. Each operation associated with a task, subtask, etc. may be assigned a clock cycle, where a clock cycle may relate to a clock cycle associated with the start of a block of instructions. One or more move (MV) operations may be inserted between the output of the operation and the input to one or more add operations.

흐름(700)은 동작에 대한 최소 사이클(710)을 계산하는 것을 포함한다. 최소 사이클은 동작이 수행될 수 있는 가장 빠른 사이클을 포함할 수 있다. 사이클은 로컬, 모듈, 서브시스템, 또는 시스템 클록; 아키텍처 클록 등과 같은 물리적 사이클을 포함할 수 있다. 최소 사이클은 위상적 순서로 방향성 비순환 그래프(DAG)를 순회함으로써 결정될 수 있다. 순회는 DAG의 출력과 입력 사이의 거리를 계산하기 위해 사용될 수 있다. 데이터는 다른 데이터와 충돌하지 않고 컴퓨팅 요소들로부터, 컴퓨팅 요소들로, 또는 컴퓨팅 요소들 사이에서 흐를 수 있다. 실시예들에서, 방향들의 세트는 물리적 사이클 단위로 컴퓨트 요소들의 어레이를 제어할 수 있다. 물리적 사이클은 동작을 가능하게 할 수 있고, 데이터를 전송할 수 있는 등등이다. 실시예에서, 사이클 단위로 컴파일러에 의해 생성된 넓은 가변 길이의 마이크로코드 제어 워드의 스트림에 의해 인에이블될 수 있다. 마이크로코드 제어 워드는 컴퓨트 요소, ALU(arithmetic logic unit), 메모리 또는 다른 저장소 등과 같은 요소를 인에이블할 수 있다. 다른 실시예들에서, 물리적 사이클 단위 기반은 아키텍처 사이클을 포함할 수 있다. 물리적 사이클은 물리적 사이클이 하나 이상의 컴퓨트 요소 또는 다른 요소들에 대한 주어진 동작 또는 동작들의 세트를 조정할 수 있다는 점에서 아키텍처 사이클과 상이할 수 있다. 아키텍처 사이클은 아키텍처의 사이클을 포함할 수 있고, 여기서 아키텍처는 컴퓨트 요소들, ALU들, 메모리들 등을 포함할 수 있다. 아키텍처 사이클은 하나 이상의 물리적 사이클을 포함할 수 있다. 흐름(700)은 최대 사이클(712)을 계산하는 것을 포함한다. 최대 사이클은 동작이 수행될 수 있는 가장 최근의 사이클을 포함할 수 있다. 최소 사이클이 주어진 동작에 대한 최대 사이클과 동일하면, 그 동작은 DAG의 임계 경로 상에서 계속된다.Flow 700 includes calculating a minimum cycle 710 for an operation. The minimum cycle may include the fastest cycle in which an operation can be performed. A cycle may be a local, module, subsystem, or system clock; May include physical cycles such as architecture clocks and the like. The minimum cycle can be determined by traversing the directed acyclic graph (DAG) in topological order. Traversal can be used to compute the distance between the output and input of a DAG. Data may flow from, to, or between computing elements without colliding with other data. In embodiments, a set of directions may control an array of compute elements on a physical cycle basis. Physical cycles can enable operations, transfer data, and so forth. In an embodiment, it may be enabled by a stream of wide, variable-length microcode control words generated by the compiler on a cycle-by-cycle basis. Microcode control words may enable elements such as compute elements, arithmetic logic units (ALUs), memory or other storage, and the like. In other embodiments, the physical cycle unit basis may include an architectural cycle. A physical cycle may differ from an architectural cycle in that a physical cycle may coordinate a given operation or set of operations for one or more compute elements or other elements. An architecture cycle may include a cycle of an architecture, where an architecture may include compute elements, ALUs, memories, and the like. An architectural cycle may include one or more physical cycles. Flow 700 includes calculating maximum cycles 712 . The maximum cycle may include the most recent cycle in which an operation may be performed. If the minimum cycle equals the maximum cycle for a given operation, then the operation continues on the DAG's critical path.

흐름(700)은 출력으로부터 입력으로의 상이한 경로들을 따라 이동 동작 후보들(720)을 추가하는 것을 포함한다. 이동 동작 후보들은 어레이 내의 요소들 및 다른 요소들을 계산하기 위한 동작들 또는 "후보들"의 가능한 배치들을 포함할 수도 있다. 후보들은 컴파일러에 의해 생성된 방향들에 기초할 수 있다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소 상의 하위 작업들의 공간 할당을 포함할 수 있다. 공간 할당은 동작들이 자원 할당, 데이터 전송 등에 관하여 서로 간섭하지 않도록 보장할 수 있다. 동작 후보들의 서브세트는 결과적인 프로그램, 즉, 컴파일러에 의해 생성된 코드가 정확하도록 선택될 수 있다. 정확한 코드는 작업들의 처리를 성공적으로 달성한다. 흐름(700)은 부울 변수를 각각의 후보(730)에 할당하는 것을 포함한다. 부울 변수가 참이면, 후보가 포함된다. 부울 변수가 거짓이면, 후보는 포함되지 않는다. 부울 변수들 사이에 또는 이들 사이에 논리적 제약들을 부과함으로써, 정확한 프로그램이 달성될 수 있다. 논리 제약들은 모든 입력들이 만족될 수 있고, 하나 이상의 ALU들이 고유 구성을 갖고, 후보들이 상이한 값들을 동일한 레지스터로 이동시킬 수 없고, 후보들은 제어 워드 비트들을 충돌하는 값들로 설정할 수 없도록 한 번만 연산을 수행하는 것을 포함할 수 있다.Flow 700 includes adding move action candidates 720 along different paths from output to input. Move operation candidates may include possible arrangements of operations or “candidates” for computing elements and other elements in the array. Candidates may be based on directions generated by the compiler. In embodiments, the set of directions may include a spatial allocation of subtasks on one or more compute elements in the array of compute elements. Spatial allocation can ensure that operations do not interfere with each other with respect to resource allocation, data transmission, and the like. A subset of the action candidates can be selected such that the resulting program, i.e. the code generated by the compiler, is correct. The correct code achieves the processing of tasks successfully. Flow 700 includes assigning a Boolean variable to each candidate 730 . If the boolean variable is true, the candidate is included. If the boolean variable is false, the candidate is not included. By imposing logical constraints between or between Boolean variables, precise programming can be achieved. Logic constraints are such that all inputs can be satisfied, one or more ALUs have unique configuration, candidates cannot move different values to the same register, and candidates cannot set control word bits to conflicting values. may include performing

흐름(700)은 후보들 사이의 충돌(740)을 해결하는 것을 포함한다. 충돌은 후보들 사이에서 발생할 수 있으며, 여기서 충돌은 위에서 열거된 하나 이상의 제약들의 위반들, 자원 경합, 데이터 충돌 등을 포함할 수 있다. 후보들 간의 간단한 충돌은 논리곱 정상형(conjunctive normal form, CNF) 절들을 사용하여 공식화될 수 있다. CNF 절들에 기초한 제약들은 운영 연구(operations research, OR) 솔버와 같은 솔버를 이용하여 평가될 수 있다. 흐름(700)은 후보들의 서브세트(750)를 선택하는 것을 포함한다. 위에서 논의한 바와 같이, 후보들의 서브세트는 결과적인 "프로그램", 즉 동작들, 하위 작업들, 작업들 등의 서열화가 정확하도록 선택될 수 있다. 프로그램의 의미에서, "정확성"은 사양을 충족시키는 프로그램의 능력을 지칭한다. 각각의 입력에 대해 예상된 출력이 생성되는 경우, 프로그램은 정확하다. 프로그램은 컴파일러에 의해 컴파일되어 어레이에 대한 방향들의 세트를 생성할 수 있다. 어레이의 모든 요소들이 방향들의 세트를 구현하기 위해 요구되는 것은 아니다. 실시예들에서, 방향들의 세트는 컴퓨트 요소들의 어레이에 위치된 컴퓨트 요소들의 로우 내의 불필요한 컴퓨트 요소를 유휴시킬 수 있다.Flow 700 includes resolving conflicts 740 between candidates. Conflicts may occur between candidates, where conflicts may include violations of one or more of the constraints listed above, resource contention, data conflicts, and the like. A simple collision between candidates can be formulated using conjunctive normal form (CNF) clauses. Constraints based on CNF clauses can be evaluated using a solver such as an operations research (OR) solver. Flow 700 includes selecting a subset 750 of candidates. As discussed above, a subset of candidates may be selected such that the ordering of the resulting "program", i.e., operations, subtasks, tasks, etc., is accurate. In the context of a program, “correctness” refers to the ability of a program to meet specifications. A program is correct if it produces the expected output for each input. A program can be compiled by a compiler to create a set of directions for an array. Not all elements of the array are required to implement a set of directions. In embodiments, the set of directions may idle an unneeded compute element in a row of compute elements located in the array of compute elements.

도 8은 예시적인 압축해제된 제어 워드 필드들을 도시하는 표이다. 전반적으로, 제어는 사이클 단위로 컴퓨트 요소의 어레이에 제공될 수 있다. 어레이의 제어는 마이크로코드 제어 워드의 스트림에 의해 인에이블되며, 여기서 마이크로코드 제어 워드를 컴파일러에 의해 생성할 수 있다. 복수의 필드를 포함하는 마이크로코드 제어 워드는 저장 요건을 감소시키기 위해 압축된 포맷으로 저장될 수 있다. 압축된 제어 워드는 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소들의 제어를 가능하게 하기 위해 압축해제될 수 있다. 압축해제된 제어 워드의 필드들은 이중 분기 실행을 이용하여 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스되며, 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위로 제공되고, 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 인에이블된다. 제어는 분기를 포함한다. 이행된 분기 경로에 의해 생성된 데이터는 분기 결정에 기초하여 프로모트된다.8 is a table showing exemplary decompressed control word fields. Overall, control may be provided to the array of compute elements on a cycle-by-cycle basis. Control of the array is enabled by a stream of microcode control words, which can be generated by a compiler. Microcode control words comprising multiple fields can be stored in a compressed format to reduce storage requirements. The compressed control word may be decompressed to enable control of one or more compute elements in the array of compute elements. The fields of the decompressed control word enable highly parallel processing architectures using double branch execution. A two-dimensional (2D) array of compute elements is accessed, where each compute element in the array of compute elements is known to the compiler and coupled to its neighboring compute elements in the array of compute elements. Control over the array of compute elements is provided on a cycle-by-cycle basis, and control is enabled by a stream of wide variable-length control words generated by a compiler. Control includes branching. Data generated by fulfilled branch paths is promoted based on branch decisions.

압축해제된 제어 워드에 대한 제어 워드 필드들을 보여주는 표(800)가 도시된다. 압축해제된 제어 워드는 필드들(810)을 포함한다. 22개의 필드들이 도시되어 있지만, 다른 수의 필드가 압축해제된 제어 워드에 포함될 수 있다. 필드들의 수는 어레이 내의 컴퓨트 요소들의 수, 컴퓨트 요소들의 처리 능력들, 컴파일러 능력들, 처리 작업들의 요건들 등에 기초할 수 있다. 압축해제된 제어 워드 내의 각 필드는 목적 또는 함수(812)를 할당받을 수 있다. 필드의 기능은 커맨드들, 데이터, 어드레스들 등을 제공하는 것, 제어하는 것 등을 포함할 수 있다. 실시예들에서, 압축해제된 제어 워드 내의 하나 이상의 필드는 스페어 비트를 포함할 수 있다. 압축해제된 제어 워드 내의 각각의 필드는 크기(814)를 포함할 수 있다. 사이즈는 비트, 니블, 바이트의 수 등에 기초할 수 있다. 코멘트(816)는 또한 압축해제된 제어 워드 내의 필드와 연관될 수 있다. 코멘트들은 주어진 필드의 목적, 기능 등을 더 설명한다.A table 800 showing control word fields for a decompressed control word is shown. The decompressed control word includes fields 810. Although 22 fields are shown, other numbers of fields may be included in the decompressed control word. The number of fields may be based on the number of compute elements in the array, the processing capabilities of the compute elements, compiler capabilities, requirements of processing tasks, and the like. Each field within the decompressed control word may be assigned a purpose or function 812. The function of a field may include providing commands, data, addresses, etc., controlling, and the like. In embodiments, one or more fields within the decompressed control word may include spare bits. Each field within the decompressed control word may include size 814 . The size can be based on the number of bits, nibbles, bytes, and the like. Comments 816 may also be associated with fields within the decompressed control word. Comments further explain the purpose, function, etc. of a given field.

도 9는 컴파일러 안내(900)에 기초하여 이행된 분기를 도시한다. 전체적으로 살펴보면, 분기의 두 측은 컴퓨트 요소의 어레이에 대해 제공된 제어에 기초하여 실행될 수 있다. 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드의 스트림에 의해 가능하게 된다. 제어와 연관된 복수의 동작들은 분기를 포함할 수 있다. 컴퓨트 요소들의 어레이의 처리 성능을 개선하기 위해, 분기 경로들 각각과 연관된 명령어들 또는 동작들이 페치될 수 있고, 양쪽 분기 경로들 모두와 연관된 명령어 또는 동작들의 실행이 수행될 수 있다. 각각의 분기 경로는 분기 결정이 제어 로직에 의해 작용되기 전에 데이터를 생성할 수 있다. 일단 분기 결정이 제어 로직에 의해 이루어지면, 이행된 분기 경로와 연관된 데이터는 프로모트될 수 있는 반면, 이행된 분기 경로와 연관된 데이터가 무시될 수 있다. 컴파일러 안내로부터 결정된 이행된 분기는 이중 분기 실행을 사용하는 고도의 병렬 처리 아키텍처에 기초한다. 컴퓨트 요소들의 2차원(2D) 어레이가 액세스된다. 컴퓨트 요소들의 어레이에 대한 제어는 사이클 단위로 제공된다. 어레이 내의 분기의 두 측은 제어 로직에 의해 동작될 분기 결정을 대기하면서 실행된다. 이행된 분기 경로에 의해 생성된 데이터는 분기 결정에 기초하여 프로모트된다. 분기 결정에 의해 나타내지 않은 분기의 측으로부터의 결과는 무시된다.FIG. 9 shows the branch taken based on the compiler guide 900 . Taken as a whole, both sides of the branch may be executed based on the control provided to the array of compute elements. Control is made possible by a stream of wide, variable-length control words generated by the compiler. A plurality of operations associated with control may include branching. To improve processing performance of the array of compute elements, instructions or operations associated with each of the branch paths may be fetched, and execution of instructions or operations associated with both branch paths may be performed. Each branch path can produce data before a branch decision is acted upon by the control logic. Once a branch decision has been made by the control logic, data associated with the diverged branch path may be promoted, while data associated with the diverged branch path may be ignored. Transitioned branches determined from compiler guidance are based on a highly parallel processing architecture that uses dual branch execution. A two-dimensional (2D) array of compute elements is accessed. Control over the array of compute elements is provided on a cycle-by-cycle basis. Both sides of a branch in the array are executed waiting for a branch decision to be acted upon by the control logic. Data generated by fulfilled branch paths is promoted based on branch decisions. Results from the side of the branch not represented by the branch decision are ignored.

분기의 각 측을 실행하는 예가 도시된다(910). 분기의 각 측의 실행은 제어 워드(912)에 기초한다(제어 워드는 점선 박스에서 강조된다). 제어 워드들은 컴파일러에 의해 제공될 수 있으며, 여기서 컴파일러는 컴퓨트 요소들의 어레이 상에서의 실행을 위해 하나 이상의 작업들, 하위 작업들 등을 컴파일함으로써 제어 워드들을 생성할 수 있다. 제어 워드들의 실행은 사이클들(914)에 기초할 수 있고, 여기서 제어 워드들은 사이클 단위로 제공될 수 있다. 제어 워드들은 압축된 제어 워드들을 포함할 수 있다. 제어 워드들은 컴퓨트 요소들의 어레이와 연관된 캐시 내에 압축되거나 압축되지 않은 포맷들로 저장될 수 있다. 각각의 제어는 캐시로부터 또는 저장소로부터 페치될 수 있다(도면에서 "페치"로 표시됨). 페치된 제어 워드는 제어 워드가 어레이에 배포(dr)되기 전에 압축된 포맷으로 저장될 때 압축해제(decomp)될 수 있다. 제어 워드는 어레이 내에 분포되었을 때 실행될 수 있다(ex).An example of executing each side of the branch is shown (910). The execution of each side of the branch is based on the control word 912 (the control word is highlighted in the dotted box). Control words may be provided by a compiler, where the compiler may generate control words by compiling one or more tasks, subtasks, etc., for execution on an array of compute elements. Execution of the control words may be based on cycles 914, where the control words may be provided cycle by cycle. Control Words may include compressed Control Words. Control words may be stored in compressed or uncompressed formats within a cache associated with an array of compute elements. Each control can be fetched from cache or from storage (indicated by "fetch" in the figure). The fetched control word may be decompressed (decomp) when the control word is stored in a compressed format before being distributed (dr) to the array. Control words can be executed when distributed in an array (ex).

제어 워드들의 페치들은 시작 이행된 경로 페치(920) 제어 워드를 페치하는 것을 포함할 수 있다. 시작 이행된 경로 제어 워드는 필요한 경우 압축해제되고, 분배되고, 실행될 수 있다. 시작 이행된 경로 제어 워드가 처리됨에 따라, 추가적인 제어 워드들이 페치되고 처리될 수 있다. 실시예들에서, 페치 및 처리는 파이프라인 기술을 사용하여 달성될 수 있다. 페치되는 추가 제어 워드들 중에는 도시된 두 개의 분기 경로와 연관된 제어 워드들이 있을 수 있다. 각각의 분기 경로와 연관된 제어 워드들은 페치되고, 압축해제되고, 분산되고, 실행될 수 있다. 실행은 데이터를 생성할 수 있다. 분기 결정(922)은 제어 로직에 의해 동작될 수 있다. 분기 결정이 이루어질 때, 분기 경로들 중 하나는 비선임 경로(930)인 것으로 결정될 수 있는 반면, 다른 분기 경로는 선임 분기 경로(932)로 결정될 수 있다. 페치된 제어 워드 및 생성된 임의의 데이터가 불필요하기 때문에, 이행되지 않은 경로는 무시되거나 폐기될 수 있다(940). 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 무시하는 단계를 포함할 수 있다. 캐시, 저장소 등에 배치될 수 있는 무시된 데이터는 단순히 거기에 남겨질 수 있다. 다른 동작이 수행되고 데이터가 생성될 때, 생성된 데이터는 이전에 무시된 데이터의 위치들에 저장될 수 있다. 다른 실시예들은 또한 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 제거하는 것을 포함한다. 이행된 경로(932)는 분기 타겟(942)을 포함한다. 분기 타겟과 연관된 데이터가 프로모트될 수 있다. 데이터를 예측하는 것은 캐시, 공유 저장소, 메모리 등에 데이터를 저장하는 것을 포함할 수 있다. 프로모트하는 단계는 컴퓨팅 요소들의 어레이 내의 다른 컴퓨팅 요소들에 데이터를 포워딩하는 단계를 포함할 수 있다. 추가 실시예들은 다운스트림 동작을 위해 프로모트된 데이터를 사용하는 것을 포함할 수 있다. 다운스트림 동작은 산술 또는 부울 연산, 행렬 연산, 신경망 연산 등을 포함할 수 있다.Fetching of control words may include fetching the start fulfilled path fetch 920 control word. The path control words that have been initiated can be decompressed, distributed, and executed if necessary. As the start fulfilled path control word is processed, additional control words may be fetched and processed. In embodiments, fetching and processing may be accomplished using pipeline technology. Among the additional control words that are fetched, there may be control words associated with the two branch paths shown. The control words associated with each branch path can be fetched, decompressed, distributed, and executed. Execution can generate data. Branch decision 922 may be operated by control logic. When a branch decision is made, one of the branch paths may be determined to be a non-senior path 930 while the other branch path may be determined to be a senior branch path 932. Unfulfilled paths may be ignored or discarded (940), as the fetched control word and any data generated are unnecessary. Embodiments may include ignoring results from a side of a branch not indicated by branch determination. Ignored data that may be placed in cache, storage, etc. may simply be left there. When other actions are performed and data is generated, the generated data may be stored in locations of previously ignored data. Other embodiments also include removing results from the side of a branch not indicated by branch determination. Translated path 932 includes branch target 942 . Data associated with a branch target may be promoted. Predicting the data may include storing the data in a cache, shared storage, memory, or the like. Promoting can include forwarding the data to other computing elements in the array of computing elements. Additional embodiments may include using the promoted data for downstream operations. Downstream operations may include arithmetic or boolean operations, matrix operations, neural network operations, and the like.

도 10은 작업 처리를 위한 시스템 다이어그램이다. 작업 처리는 고도의 병렬 처리 아키텍처에서 수행되며, 여기서 고도의 병렬 처리 아키텍처는 이중 분기 실행을 이용한다. 시스템(1000)은 명령어를 저장하는 메모리(1012)에 부착되는 하나 이상의 프로세서(1010)를 포함할 수 있다. 시스템(1000)은 데이터를 디스플레이하기 위해 하나 이상의 프로세서(1010)에 결합된 디스플레이(1014); 중간 단계들; 방향들; 제어 워드들; VLIW(Very Long Instruction Word) 기능을 구현하는 제어 워드; 수축기, 벡터, 순환기, 공간, 스트리밍, 또는 VLIW 토폴로지들을 포함하는 토폴로지들 등을 더 포함할 수 있다. 실시예들에서, 하나 이상의 프로세서(1010)는 메모리(1012)에 결합되며, 하나 이상의 프로세서는 저장된 명령어들을 실행할 때: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하도록 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합됨 ―; 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하도록 ― 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 되고, 제어는 분기를 포함함 ―; 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 분기의 두 측을 실행하도록 ― 분기 결정은 어레이 내의 계산 결과에 기초함 ―; 및 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하도록 구성된다. 실시예들은 프로모트되었던 데이터를 다운스트림 동작에 사용하는 단계를 포함한다. 다운스트림 동작은 산술 또는 부울 연산, 행렬 연산 등을 포함할 수 있다. 이행된 분기 경로는 실행을 계속할 수 있고 추가 데이터를 생성할 수 있다. 이행되지 않은 분기 경로는 상이하게 핸들링될 수 있다. 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 무시하는 것을 포함한다. 이행되지 않은 분기로부터의 결과들은 삭제될 수 있고, 오버라이트될 수 있는 등이다. 추가 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 제거하는 것을 포함한다. 컴퓨팅 요소들은 하나 이상의 집적 회로들 또는 칩들 내의 컴퓨팅 요소들; 주문형 집적 회로들(ASIC들)과 같은 하나 이상의 프로그래머블 칩들 내에 구성된 컴퓨팅 요소들 또는 코어들; 필드 프로그래머블 게이트 어레이들(FPGA들); 메시로서 구성된 이종 프로세서들; 독립형 프로세서들; 등을 포함할 수 있다.10 is a system diagram for job processing. Job processing is performed in a highly parallel processing architecture, where the highly parallel processing architecture uses double branch execution. System 1000 may include one or more processors 1010 attached to memory 1012 that stores instructions. System 1000 includes a display 1014 coupled to one or more processors 1010 for displaying data; intermediate steps; directions; control words; a control word that implements a Very Long Instruction Word (VLIW) function; topologies including collapsible, vector, circulatory, spatial, streaming, or VLIW topologies; and the like. In embodiments, one or more processors 1010 are coupled to memory 1012, wherein the one or more processors, when executing stored instructions: access a two-dimensional (2D) array of compute elements—within the array of compute elements. Each compute element is known to the compiler and is coupled to its neighboring compute elements in the array of compute elements; to provide control over an array of compute elements on a cycle-by-cycle basis, where the control is enabled by a stream of wide, variable-length control words generated by a compiler, where the control includes branches; execute both sides of a branch in the array while waiting for a branch decision to be acted upon by the control logic, the branch decision being based on the result of a calculation in the array; and based on the branch decision, promote data generated by the branch path fulfilled. Embodiments include using the promoted data in a downstream operation. Downstream operations may include arithmetic or boolean operations, matrix operations, and the like. A branch path that has been fulfilled can continue execution and generate additional data. Unfulfilled branch paths may be handled differently. Embodiments include ignoring results from a side of a branch not indicated by branch determination. Results from unfulfilled branches can be deleted, overwritten, and so on. Further embodiments include removing results from a side of a branch not indicated by branch determination. Computing elements may include computing elements in one or more integrated circuits or chips; computing elements or cores configured within one or more programmable chips, such as application specific integrated circuits (ASICs); field programmable gate arrays (FPGAs); heterogeneous processors configured as a mesh; standalone processors; etc. may be included.

시스템(1000)은 캐시(1020)를 포함할 수 있다. 캐시(1020)는 분기의 측들, 방향들, 제어 워드들, 중간 결과들, 마이크로코드 등과 연관된 데이터와 같은 데이터를 저장하는데 사용될 수 있다. 캐시는 하나 이상의 컴퓨트 요소들에 이용가능한 작고, 로컬이며, 용이하게 액세스가능한 메모리를 포함할 수 있다. 실시예들에서, 저장된 데이터는 분기의 측들과 연관된 데이터를 포함할 수 있다. 전체적으로 살펴보면, 분기의 한 측과 연관된 데이터는 다운스트림 동작을 위해 프로모트될 수 있는 반면, 분기의 다른 측 또는 측들과 연관된 데이터는 무시될 수 있다. 실시예들은 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 방향 또는 제어 워드의 관련 부분들을 저장하는 것을 포함한다. 캐시는 하나 이상의 컴퓨트 요소들에 액세스가능할 수 있다. 캐시는, 존재한다면, 이중 판독 단일 기록(2R1W) 캐시를 포함할 수 있다. 즉, 2R1W 캐시는 판독 및 기록 동작들이 서로 간섭하지 않고 두 개의 판독 동작들 및 하나의 기록 동작을 동시에 인에이블할 수 있다. 시스템(1000)은 액세스 구성요소(1030)를 포함할 수 있다. 액세싱 구성요소(1030)는 컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하기 위한 제어 로직 및 함수들을 포함할 수 있고, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려져 있고 컴퓨팅 요소의 어레이 내의 그의 이웃 컴퓨팅 요소들에 결합된다. 컴퓨트 요소는 하나 이상의 프로세서, 프로세서 코어, 프로세서 매크로 등을 포함할 수 있다. 각각의 컴퓨트 요소는 로컬 저장소의 양을 포함할 수 있다. 로컬 저장소는 하나 이상의 컴퓨팅 요소들에 액세스가능할 수 있다. 각각의 컴퓨트 요소는 이웃들과 통신할 수 있고, 여기서 이웃들은 가장 가까운 이웃들 또는 더 많은 원격 "이웃들"을 포함할 수 있다. 컴퓨트 요소들 간의 통신은 산업 표준 버스와 같은 버스, 링 버스, 유선 또는 무선 컴퓨터 네트워크와 같은 네트워크 등을 사용하여 달성될 수 있다. 실시예들에서, 링 버스는 분산 멀티플렉서(MUX)로서 구현된다. 아래에서 논의하면, 분기 결정을 대기하는 동안 분기의 둘 이상의 측들이 실행될 수 있다. 분기 결정은 코드 조건에 기초할 수 있으며, 여기서 조건은 제어 유닛에 의해 설정될 수 있다. 코드 조건은 분기점, 결정점, 조건 등을 포함할 수 있다. 실시예들에서, 조건은 코드 점프들을 결정할 수 있다. 코드 점프는 코드 실행을 제어 워드의 순차적인 실행으로부터 상이한 제어 워드 세트의 실행으로 변경할 수 있다. 조건은 제어 유닛에 의해 확립될 수 있다. 사용 예에서, 2R1W 캐시는 제어 유닛에 대한 잠재적인 분기 경로들의 동시 페치를 지원할 수 있다. 분기를 포함하는 제어 워드 또는 방향에 의해 이행된 분기 경로는 데이터 의존적일 수 있고, 따라서 선험적으로 알려지지 않기 때문에, 하나보다 많은 분기 경로와 연관된 제어 워드들은 분기 제어 워드의 실행(프리페치) 이전에 페치될 수 있다. 다른 곳에서 논의된 바와 같이, 두 개 이상의 분기 경로들의 초기 부분은 일련의 제어 워드들에서 인스턴스화될 수 있다. 정확한 분기 경로가 결정될 때, 이행되지 않은 분기와 연관된 계산들은 플러싱 및/또는 무시된다.System 1000 may include cache 1020 . Cache 1020 may be used to store data such as data associated with sides of branches, directions, control words, intermediate results, microcode, and the like. A cache may include small, local, easily accessible memory available to one or more compute elements. In embodiments, the stored data may include data associated with the sides of a branch. Taken as a whole, data associated with one side of a branch may be promoted for downstream operation, while data associated with the other side or sides of a branch may be ignored. Embodiments include storing relevant portions of a direction or control word in a cache associated with an array of computing elements. A cache may be accessible to one or more compute elements. The cache, if present, may include a double read single write (2R1W) cache. That is, the 2R1W cache can simultaneously enable two read operations and one write operation without the read and write operations interfering with each other. System 1000 may include an access component 1030 . Accessing component 1030 may include control logic and functions for accessing a two-dimensional (2D) array of computing elements, where each computing element within the array of computing elements is known to a compiler and is an array of computing elements. coupled to its neighboring computing elements in A compute element may include one or more processors, processor cores, processor macros, and the like. Each compute element may include an amount of local storage. Local storage may be accessible to one or more computing elements. Each compute element may communicate with its neighbors, which may include nearest neighbors or more remote "neighbors." Communication between the compute elements may be accomplished using a bus such as an industry standard bus, a ring bus, a network such as a wired or wireless computer network, and the like. In embodiments, the ring bus is implemented as a distributed multiplexer (MUX). As discussed below, more than one side of a branch may execute while waiting for a branch decision. The branch decision may be based on a code condition, where the condition may be set by the control unit. Code conditions may include branching points, decision points, conditions, and the like. In embodiments, a condition may determine code jumps. A code jump can change code execution from sequential execution of control words to execution of a different set of control words. Conditions may be established by the control unit. In a use case, the 2R1W cache may support simultaneous fetching of potential branch paths to the control unit. Since the branch path implemented by the control word or direction containing the branch may be data dependent and therefore not known a priori, the control words associated with more than one branch path are fetched prior to execution (prefetch) of the branch control word. It can be. As discussed elsewhere, the initial portion of two or more branching paths may be instantiated in a series of control words. When the correct branch path is determined, computations associated with unfulfilled branches are flushed and/or ignored.

시스템(1000)은 제공 구성요소(1040)를 포함할 수 있다. 제공 구성요소(1040)는 사이클 단위로 컴퓨트 요소의 어레이에 대한 제어를 제공하는 제어 및 기능을 포함할 수 있고, 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드의 스트림에 의해 인에이블되고, 제어부는 분기를 포함한다. 사이클 단위로 컴퓨트 요소들의 어레이의 제어는 다양한 계산 동작들을 수행하도록 어레이를 구성하는 것을 포함할 수 있다. 계산 동작들은 오디오 또는 비디오 처리, 인공 지능 처리, 기계 학습, 심층 학습 등을 가능하게 할 수 있다. 제어를 제공하는 것은 마이크로코드 제어 워드들에 기초할 수 있으며, 여기서 마이크로코드 제어 워드들은 연산 코드 필드들, 데이터 필드들, 계산 어레이 구성 필드들 등을 포함할 수 있다. 제어를 생성하는 컴파일러는 범용 컴파일러, 병렬화 컴파일러, 컴퓨트 요소의 어레이에 최적화된 컴파일러, 하나 이상의 처리 작업을 수행하도록 특화된 컴파일러 등을 포함할 수 있다. 제어 제공은 컴퓨트 요소의 어레이 내의 처리 토폴로지와 같은 하나 이상의 토폴로지를 구현할 수 있다. 실시예들에서, 컴퓨트 요소들의 어레이 내에서 구현되는 토폴로지들은 수축기, 벡터, 순환기, 공간, 스트리밍, 다중 명령어 다중 데이터(MIMD), 또는 매우 긴 명령어 워드(VLIW) 토폴로지를 포함할 수 있다. 다른 토폴로지들은 신경망 토폴로지를 포함할 수 있다. 제어 워드는 신경망 토폴로지에 대한 기계 학습 기능을 가능하게 할 수 있다.System 1000 may include a provisioning component 1040 . Provide component 1040 may include controls and functions that provide control over an array of compute elements on a cycle-by-cycle basis, the control enabled by a stream of wide variable length control words generated by a compiler; The control unit includes branches. Control of the array of compute elements on a cycle-by-cycle basis may include configuring the array to perform various computational operations. Computational operations may enable audio or video processing, artificial intelligence processing, machine learning, deep learning, and the like. Providing control may be based on microcode control words, where microcode control words may include op code fields, data fields, compute array configuration fields, and the like. Compilers that generate control may include general purpose compilers, parallelizing compilers, compilers optimized for arrays of compute elements, compilers specialized to perform one or more processing tasks, and the like. Control provisioning may implement one or more topologies, such as processing topologies within an array of compute elements. In embodiments, topologies implemented within the array of compute elements may include a constrictor, vector, circulator, spatial, streaming, multiple instruction multiple data (MIMD), or very long instruction word (VLIW) topology. Other topologies may include neural network topologies. Control words may enable machine learning functions for neural network topologies.

시스템(1000)은 실행 구성요소(1050)를 포함할 수 있다. 실행 구성요소(1050)는 제어 로직 및 제어 로직에 의해 동작될 분기 결정 ― 분기 결정은 어레이 내의 계산 결과에 기초함 ― 을 대기하는 동안 어레이에서 분기의 두 측을 실행하기 위한 기능들을 포함할 수 있다. 수행될 수 있는 계산들은 산술 연산, 부울 연산, 행렬 연산, 신경망 연산 등을 포함할 수 있다. 계산들은 컴파일러에 의해 생성된 제어 워드들에 대해 실행될 수 있다. 제어 워드들은 제어 유닛에 제공될 수 있고, 여기서 제어 유닛은 컴퓨트 요소들의 어레이 내의 컴퓨트 요소들의 동작들을 제어할 수 있다. 컴퓨트 요소들의 동작은 컴퓨트 요소들을 구성하는 것, 데이터를 컴퓨트 요소들에 제공하는 것, 컴퓨트 요소들로부터의 결과들을 라우팅 및 순서화하는 것 등을 포함할 수 있다. 실시예들에서, 동일한 제어 워드가 컴퓨트 요소들의 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 실행하는 단계는 제어 워드들을 압축해제하는 단계를 포함할 수 있다. 제어 워드들은 컴퓨트 요소 단위로 압축해제될 수 있고, 여기서 각각의 제어 워드는 복수의 컴퓨트 요소 제어 그룹들 또는 다발들로 구성될 수 있다. 하나 이상의 제어 워드는 캐시와 같은 메모리 내에 압축된 포맷으로 저장될 수 있다. 제어 워드들의 압축은 저장 요건들, 디코딩 구성요소들의 복잡성 등을 감소시킬 수 있다. 실시예에서, 제어 유닛은 압축해제된 제어 워드에 대해 동작할 수 있다. 분기의 두 측은 참 또는 거짓, 충족되거나 충족되지 않은 조건, 평가 등과 같은 결정점을 나타낼 수 있다. 분기의 두 측의 실행은 데이터를 획득하는 것, 데이터에 대해 동작하는 것, 데이터를 저장하는 것 등을 포함할 수 있다. 분기의 두 측의 실행은 분기 결정이 제어 로직에 의해 동작될 때까지 계속될 수 있다. 분기는 둘 초과의 측을 포함할 수 있다. 실시예들에서, 실행은 제어 로직에 의해 결정이 이루어질 때까지 두 개보다 많은 측들 상에서 수행될 수 있다.System 1000 may include an execution component 1050 . Execution component 1050 may include functions for executing both sides of a branch in the array while waiting for control logic and a branch decision to be acted upon by the control logic, the branch decision being based on a result of a computation within the array. . Calculations that may be performed may include arithmetic operations, Boolean operations, matrix operations, neural network operations, and the like. Calculations may be performed on control words generated by the compiler. Control words may be provided to a control unit, where the control unit may control operations of the compute elements in the array of compute elements. Operations of the compute elements may include configuring the compute elements, providing data to the compute elements, routing and ordering results from the compute elements, and the like. In embodiments, the same control word may be executed in a given cycle across an array of compute elements. Executing may include decompressing the control words. The control words may be decompressed in units of compute elements, where each control word may be composed of a plurality of compute element control groups or bundles. One or more control words may be stored in a compressed format in a memory such as a cache. Compression of control words can reduce storage requirements, complexity of decoding components, and the like. In an embodiment, the control unit may operate on the decompressed control word. Both sides of a branch can represent decision points such as true or false, met or not met conditions, evaluations, and so on. Execution on both sides of a branch may include obtaining data, operating on data, storing data, and the like. Execution of both sides of the branch may continue until a branch decision is acted upon by the control logic. A branch may include more than two sides. In embodiments, execution may be performed on more than two sides until a decision is made by control logic.

분기 결정은 컴파일된 작업의 일부일 수 있으며, 이는 처리 작업과 연관된 많은 작업 중 하나일 수 있다. 컴파일된 작업은 컴퓨트 요소들의 어레이 내의 하나 이상의 컴퓨트 요소 상에서 실행될 수 있다. 실시예들에서, 컴파일된 작업의 실행은 실행을 병렬화하기 위해 컴퓨트 요소들에 걸쳐 분산될 수 있다. 컴파일된 작업을 실행하는 단계는 다수의 데이터세트를 처리하기 위한 작업(예를 들어, 단일 명령어 다중 데이터 또는 SIMD 실행)을 실행하는 단계를 포함할 수 있다. 실시예들은 둘 이상의 잠재적인 컴파일된 작업 결과들의 동시 실행을 제공하는 것을 포함할 수 있다. 제공된 제어 워드 또는 워드들이 컴퓨트 요소들의 어레이에 대한 코드 조건을 제어할 수 있다는 것을 상기한다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 작업 결과들은 계산 결과 또는 흐름 제어를 포함한다. 값, 부울 방정식(Boolean equation) 등과 같은 조건을 계산하는 것에 기초할 수 있는 코드 조건성(code conditionality)은, 조건에 기초하여, 명령어들의 두 개 또는 그 초과의 서열들 중 하나의 실행을 야기할 수 있다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 결과는 동일한 제어 워드에 의해 제어될 수 있다. 다른 실시예에서, 조건은 코드 점프를 결정할 수 있다. 둘 이상의 잠재적인 컴파일된 작업 결과들은 하나 이상의 분기 경로들, 데이터 등에 기초할 수 있다. 실행은 하나 이상의 방향 또는 제어 워드에 기초할 수 있다. 잠재적 컴파일된 작업 결과들이 조건의 평가에 선험적으로 알려지지 않기 때문에, 방향들의 세트는 둘 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행을 가능하게 할 수 있다. 조건이 평가될 때, 조건과 연관된 방향들의 세트의 실행은 계속될 수 있는 반면, 조건과 연관되지 않은 방향들의 세트(예를 들어, 이행되지 않은 경로)는 중단되고 플러싱될 수 있다. 실시예들에서, 동일한 방향 또는 제어 워드가 컴퓨트 요소들의 어레이에 걸쳐 주어진 사이클에서 실행될 수 있다. 실행 작업들은 컴퓨트 요소들의 어레이 전체에 걸쳐 위치된 컴퓨트 요소들에 의해 수행될 수 있다. 실시예들에서, 둘 이상의 잠재적인 컴파일된 결과들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들 상에서 실행될 수 있다. 공간적으로 분리된 컴퓨트 요소들을 사용하는 것은 감소된 저장, 버스, 및 네트워크 경합; 컴퓨트 요소들에 의한 감소된 전력 소산 등을 가능하게 할 수 있다. 조건성에 대한 기초가 무엇이든지 간에, 조건성은 제어 유닛에 의해 확립된다.Branch resolution may be part of a compiled task, which may be one of many tasks associated with a processing task. A compiled job may be executed on one or more compute elements in the array of compute elements. In embodiments, execution of a compiled task may be distributed across compute elements to parallelize execution. Executing the compiled job may include executing the job to process multiple datasets (eg, single instruction multiple data or SIMD execution). Embodiments may include providing concurrent execution of two or more potential compiled job results. Recall that a given control word or words can control a code condition for an array of compute elements. In embodiments, the two or more potential compiled job results include a computation result or flow control. Code conditionality, which may be based on computing a condition, such as a value, a Boolean equation, etc., that, based on the condition, will result in the execution of one of two or more sequences of instructions. can In embodiments, two or more potential compiled results may be controlled by the same control word. In another embodiment, a condition may determine a code jump. The two or more potential compiled job results may be based on one or more branch paths, data, etc. Execution may be based on one or more directions or control words. Since the potential compiled job results are not known a priori in the evaluation of the condition, a set of directions may enable concurrent execution of two or more potential compiled job results. When the condition is evaluated, execution of the set of directions associated with the condition may continue, while the set of directions not associated with the condition (eg, unfulfilled paths) may be stopped and flushed. In embodiments, the same direction or control word may be executed in a given cycle across an array of compute elements. Execution tasks may be performed by compute elements located throughout the array of compute elements. In embodiments, two or more potential compiled results may be executed on spatially separated computing elements within an array of computing elements. Using spatially separated compute elements reduces storage, bus, and network contention; reduced power dissipation by the compute elements; and the like. Whatever the basis for the conditionality, the conditionality is established by the control unit.

시스템(1000)은 프로모트 구성요소(1060)를 포함할 수 있다. 프로모트 구성요소(1060)는 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하기 위한 제어 로직 및 기능들을 포함할 수 있다. 분기 결정은 어레이 내의 컴퓨트 요소에 의해 결정되고, 그 후 제어 유닛 로직은 분기 결정에 기초하여 어떤 동작을 이행할지를 결정할 수 있는데, 예를 들어, 이행된 분기 경로와 연관된 데이터가 프로모트될 수 있다. 이행된 분기 경로 데이터는 커밋된 기록 동작을 수행함으로써 프로모트될 수 있다. 실시예에서, 커밋된 기록은 데이터 저장소에 대한 커밋된 기록을 포함할 수 있다. 데이터 저장소는 캐시, 요소들의 어레이와 연관된 로컬 저장소 요소들, 요소들의 어레이에 결합된 저장소 등을 포함할 수 있다. 커밋된 기록 동작은 스케줄링될 수 있다. 추가 실시예들은 컴파일러에 의해, 커밋된 기록을 분기 미결정 윈도우의 외부에서 발생하도록 스케줄링하는 것을 포함할 수 있다. 분기 미결정 윈도우는 어레이에서의 분기 결정의 시간으로부터 분기 결정이 제어 유닛에 의해 동작될 수 있는 시간까지 경과할 수 있는 시간의 양, 사이클들의 수 등을 포함할 수 있고, 제어 유닛은 어레이에 상이한 압축해제된 제어 워드들의 적용을 통해 제어의 흐름을 잠재적으로 변경할 수 있다. 다른 실시예들에서, 프로모트된 데이터는 다운스트림 동작을 위해 사용된다. 다운스트림 동작은 동일한 컴퓨트 요소, 다른 컴퓨트 요소 및 복수의 컴퓨트 요소 등에서 수행되는 연산을 포함할 수 있다. 추가 실시예들은 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들을 무시하는 것을 포함한다. 이행되지 않은 분기에 의해 수행되는 동작으로부터 발생하는 데이터는 정의에 의해 불필요하므로 단순히 무시될 수 있다. 분기와 연관된 임의의 추가 동작들은 실행될 필요가 없다. 일부 실시예들에서, 분기 결정에 의해 표시되지 않은 분기의 측으로부터의 결과들이 제거될 수 있다. 제거는 데이터를 플러싱하고, 데이터를 오버라이트하는 등에 의해 달성될 수 있다.System 1000 may include a promotion component 1060 . The promote component 1060 may include control logic and functions to promote data generated by the fulfilled branch path based on the branch decision. A branch decision is made by a compute element in the array, and control unit logic can then determine what action to take based on the branch decision, eg, data associated with the branch path made can be promoted. . Committed branch path data can be promoted by performing a write committed operation. In an embodiment, a committed record may include a committed record to a data store. Data storage may include caches, local storage elements associated with an array of elements, storage coupled to an array of elements, and the like. Committed write operations can be scheduled. Additional embodiments may include scheduling committed writes to occur outside of the branch undecided window, by the compiler. The branch pending window may include an amount of time that may elapse from the time of a branch decision in the array to the time at which the branch decision can be actuated by a control unit, the number of cycles, etc. The flow of control can potentially be changed through the application of released control words. In other embodiments, the promoted data is used for downstream operations. Downstream operations may include operations performed on the same compute element, other compute elements, multiple compute elements, and the like. Additional embodiments include ignoring results from a side of a branch not indicated by branch determination. Data arising from the operation performed by the unfulfilled branch is by definition unnecessary and can simply be ignored. Any additional operations associated with branching do not need to be executed. In some embodiments, results from a side of a branch not indicated by branch determination may be eliminated. Removal may be accomplished by flushing data, overwriting data, and the like.

시스템(1000)은 작업 처리를 위해 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품을 포함할 수 있으며, 컴퓨터 프로그램 제품은 하나 이상의 프로세서로 하여금: 컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 동작 ― 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 컴퓨트 요소들의 어레이 내의 그 이웃하는 계산 요소들에 결합됨 ―; 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하는 동작 ― 제어는 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 되고, 제어는 분기를 포함함 ―; 제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 분기의 두 측을 실행하는 동작 ― 분기 결정은 어레이에서의 계산 결과들에 기초함 ―; 및 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하는 동작을 수행하게 하는 코드를 포함한다.System 1000 may include a computer program product embodied on a computer readable medium for processing tasks, which computer program product causes one or more processors to: access a two-dimensional (2D) array of compute elements - each compute element in the array of compute elements is known to the compiler and is coupled to its neighboring compute elements in the array of compute elements; providing control over the array of compute elements on a cycle-by-cycle basis, the control being enabled by a stream of wide variable length control words generated by a compiler, the control including branches; executing both sides of a branch in the array while waiting for a branch decision to be acted upon by the control logic, the branch decision being based on calculation results in the array; and code that causes, based on the branch decision, to perform an operation that promotes data generated by the fulfilled branch path.

상기한 방법들 각각은 하나 이상의 컴퓨터 시스템 상의 하나 이상의 프로세서 상에서 실행될 수 있다. 실시예들은 다양한 형태들의 분산 컴퓨팅, 클라이언트/서버 컴퓨팅, 및 클라우드 기반 컴퓨팅을 포함할 수도 있다. 또한, 본 개시의 흐름도들에 포함된 도시된 단계들 또는 박스들은 단지 예시적이고 설명적이라는 것이 이해될 것이다. 단계들은 본 개시의 범위를 벗어나지 않으면서 수정, 생략, 반복, 또는 재정렬될 수도 있다. 또한, 각 단계는 하나 이상의 하위 단계를 포함할 수 있다. 전술한 도면들 및 설명이 개시된 시스템들의 기능적 양태들을 설명하지만, 소프트웨어 및/또는 하드웨어의 특정 구현 또는 배열은 명시적으로 언급되지 않거나 문맥으로부터 달리 명백하지 않으면 이들 설명으로부터 추론되지 않아야 한다. 소프트웨어 및/또는 하드웨어의 모든 이러한 배열은 본 개시의 범위 내에 있는 것으로 의도된다.Each of the above methods may be executed on one or more processors on one or more computer systems. Embodiments may include various forms of distributed computing, client/server computing, and cloud-based computing. Further, it will be understood that the depicted steps or boxes included in the flowcharts of this disclosure are illustrative and explanatory only. Steps may be modified, omitted, repeated, or rearranged without departing from the scope of the present disclosure. Also, each step may include one or more sub-steps. While the foregoing figures and description describe functional aspects of the disclosed systems, no particular implementation or arrangement of software and/or hardware should be inferred from these descriptions unless explicitly stated or otherwise apparent from context. All such arrangements of software and/or hardware are intended to be within the scope of this disclosure.

블록도 및 흐름도는 방법, 장치, 시스템 및 컴퓨터 프로그램 제품을 도시한다. 블록도들 및 흐름도들에서의 요소들 및 요소들의 조합들은 방법들, 장치, 시스템들, 컴퓨터 프로그램 제품들 및/또는 컴퓨터 구현 방법들의 기능들, 단계들, 또는 단계들의 그룹들을 도시한다. 일반적으로 본원에서 "회로", "모듈", 또는 "시스템"으로 지칭되는 임의의 그리고 모든 그러한 기능들은 컴퓨터 프로그램 명령어들에 의해, 특수-목적 하드웨어-기반 컴퓨터 시스템들에 의해, 특정 목적 하드웨어 및 컴퓨터 명령어들의 조합들에 의해서, 범용 하드웨어 및 컴퓨터들 명령어들의 조합들 등에 의해서 구현될 수 있다.Block diagrams and flow diagrams depict methods, apparatus, systems and computer program products. Elements and combinations of elements in block diagrams and flow diagrams illustrate functions, steps, or groups of steps of methods, apparatus, systems, computer program products, and/or computer-implemented methods. Any and all such functions, generally referred to herein as a "circuit," "module," or "system," may be implemented by computer program instructions, by special-purpose hardware-based computer systems, by special-purpose hardware and computers. It may be implemented by combinations of instructions, combinations of general-purpose hardware and computer instructions, and the like.

위에서 언급된 컴퓨터 프로그램 제품 또는 컴퓨터 구현 방법 중 임의의 것을 실행하는 프로그래머블 장치는 하나 이상의 마이크로프로세서, 마이크로제어기, 내장형 마이크로제어기, 프로그래머블 디지털 신호 프로세서, 프로그래머블 디바이스, 프로그래머블 게이트 어레이, 프로그래머블 어레이 로직, 메모리 디바이스, 주문형 집적 회로 등을 포함할 수 있다. 각각은 컴퓨터 프로그램 명령어들을 처리하고, 컴퓨터 로직을 실행하고, 컴퓨터 데이터를 저장하는 등을 위해 적합하게 이용되거나 구성될 수 있을 것이다.A programmable apparatus that implements any of the above-mentioned computer program products or computer implemented methods includes one or more microprocessors, microcontrollers, embedded microcontrollers, programmable digital signal processors, programmable devices, programmable gate arrays, programmable array logic, memory devices, may include application specific integrated circuits and the like. Each may be suitably used or configured for processing computer program instructions, executing computer logic, storing computer data, and the like.

컴퓨터는 컴퓨터 판독 가능 저장 매체로부터의 컴퓨터 프로그램 제품을 포함할 수 있고, 이 매체는 내부 또는 외부, 제거 가능 및 교체 가능 또는 고정될 수 있다는 것이 이해될 것이다. 또한, 컴퓨터는 본 명세서에 설명된 소프트웨어 및 하드웨어를 포함, 인터페이스 또는 지원할 수 있는 BIOS(Basic Input/Output System), 펌웨어, 운영 체제, 데이터베이스 등을 포함할 수 있다.It will be appreciated that a computer may include a computer program product from a computer readable storage medium, which medium may be internal or external, removable and replaceable or fixed. In addition, a computer may include a Basic Input/Output System (BIOS), firmware, an operating system, a database, and the like that may include, interface, or support the software and hardware described herein.

본 발명의 실시예는 종래의 컴퓨터 애플리케이션이나 이를 실행하는 프로그램 가능한 장치에 한정되지 않는다. 예시를 위해, 본 발명의 실시예들은 광학 컴퓨터, 양자 컴퓨터, 아날로그 컴퓨터 등을 포함할 수 있다. 컴퓨터 프로그램은 도시된 기능들 중 일부 및 전부를 수행할 수 있는 특정 머신을 생성하기 위해 컴퓨터에 로딩될 수 있다. 이러한 특정 기계는 도시된 기능들 중 임의의 기능 및 모든 기능을 수행하기 위한 수단을 제공한다.Embodiments of the present invention are not limited to conventional computer applications or programmable devices that run them. For illustrative purposes, embodiments of the present invention may include optical computers, quantum computers, analog computers, and the like. A computer program can be loaded into a computer to create a particular machine capable of performing some or all of the functions shown. This particular machine provides means for performing any and all of the functions shown.

저장을 위한 비일시적 컴퓨터 판독가능 매체; 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 컴퓨터 판독가능 저장 매체 또는 이들의 임의의 적합한 조합; 휴대용 컴퓨터 디스켓; 하드 디스크; 랜덤 액세스 메모리(RAM); 판독 전용 메모리(ROM), 소거가능 프로그램가능 판독-전용 메모리(EPROM, 플래시, MRAM, FeRAM, 또는 상 변화 메모리); 광 섬유; 휴대용 컴팩트 디스크; 광 저장 디바이스; 자기 저장 디바이스, 또는 전술한 것의 임의의 적합한 조합을 포함하지만 이에 제한되지 않는 하나 이상의 컴퓨터 판독가능 매체의 임의의 조합이 이용될 수 있다. 이 문서의 맥락에서, 컴퓨터 판독가능 저장 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함하거나 저장할 수 있는 임의의 유형의 매체일 수 있다.a non-transitory computer readable medium for storage; electronic, magnetic, optical, electromagnetic, infrared, or semiconductor computer readable storage media or any suitable combination thereof; portable computer diskettes; hard disk; random access memory (RAM); read only memory (ROM), erasable programmable read-only memory (EPROM, Flash, MRAM, FeRAM, or phase change memory); optical fiber; portable compact disc; optical storage devices; Any combination of one or more computer readable media including, but not limited to, a magnetic storage device, or any suitable combination of the foregoing may be used. In the context of this document, a computer readable storage medium may be any tangible medium that can contain or store a program for use by or in connection with an instruction execution system, apparatus or device.

컴퓨터 프로그램 명령어들은 컴퓨터 실행가능 코드를 포함할 수 있다는 것이 이해될 것이다. 컴퓨터 프로그램 명령어들을 표현하기 위한 다양한 언어들은 C, C++, Java, JavaScript™, ActionScript™, 어셈블리 언어, Lisp, Perl, Tcl, Python, Ruby, 하드웨어 기술 언어들, 데이터베이스 프로그래밍 언어들, 기능 프로그래밍 언어들, 필수 프로그래밍 언어들을 포함할 수 있지만, 이에 제한되지 않는다. 실시예들에서, 컴퓨터 프로그램 명령어들은 컴퓨터, 프로그래머블 데이터 처리 장치, 프로세서들 또는 프로세서 아키텍처들의 이종 조합 등에서 실행되도록 저장, 컴파일 또는 해석될 수 있다. 제한 없이, 본 발명의 실시예들은 클라이언트/서버 소프트웨어, 서비스로서의 소프트웨어, 피어-투-피어 소프트웨어 등을 포함하는 웹-기반 컴퓨터 소프트웨어의 형태를 이행할 수 있다.It will be appreciated that computer program instructions may include computer executable code. Various languages for expressing computer program instructions are C, C++, Java, JavaScript™, ActionScript™, assembly language, Lisp, Perl, Tcl, Python, Ruby, hardware description languages, database programming languages, functional programming languages, It may include essential programming languages, but is not limited thereto. In embodiments, computer program instructions may be stored, compiled or interpreted to be executed on a computer, programmable data processing device, processors or heterogeneous combination of processor architectures, or the like. Without limitation, embodiments of the present invention may implement any form of web-based computer software including client/server software, software as a service, peer-to-peer software, and the like.

실시예들에서, 컴퓨터는 다수의 프로그램들 또는 스레드들을 포함하는 컴퓨터 프로그램 명령어들의 실행을 가능하게 할 수 있다. 다수의 프로그램들 또는 스레드들은 프로세서의 이용을 향상시키고 실질적으로 동시적인 기능들을 용이하게 하기 위해 거의 동시에 처리될 수 있다. 구현에 의해, 본 명세서에 설명된 임의의 및 모든 방법들, 프로그램 코드들, 프로그램 명령어들 등은 하나 이상의 스레드들에서 구현될 수 있고, 이들은 차례로 다른 스레드들을 스폰(spawn)할 수 있고, 이들은 그들 자신과 연관된 우선순위들을 가질 수 있다. 일부 실시예들에서, 컴퓨터는 우선순위 또는 다른 순서에 기초하여 이들 스레드들을 처리할 수 있다.In embodiments, a computer may enable execution of computer program instructions including multiple programs or threads. Multiple programs or threads may be processed substantially concurrently to enhance utilization of the processor and facilitate substantially concurrent functions. By implementation, any and all methods, program codes, program instructions, etc., described herein may be implemented in one or more threads, which in turn may spawn other threads, which in turn You can have priorities associated with you. In some embodiments, a computer may process these threads based on priority or other order.

명시적으로 언급되지 않거나 문맥으로부터 달리 명백하지 않으면, 동사 "실행" 및 "프로세스"는 실행, 프로세스, 해석, 컴파일, 어셈블, 링크, 로드, 또는 이들의 조합을 나타내기 위해 상호교환가능하게 사용될 수 있다. 따라서, 컴퓨터 프로그램 명령어들, 컴퓨터 실행가능 코드 등을 실행 또는 처리하는 실시예들은 설명된 방식들 중 임의의 방식 및 모든 방식으로 명령어들 또는 코드에 작용할 수 있다. 또한, 도시된 방법 단계들은 하나 이상의 당사자들 또는 엔티티들로 하여금 단계들을 수행하게 하는 임의의 적합한 방법을 포함하도록 의도된다. 단계 또는 단계의 일부를 수행하는 당사자들은 특정 지리적 위치 또는 국가 경계 내에 위치될 필요는 없다. 예를 들어, 미국 내에 위치된 엔티티가 방법 단계 또는 그 일부가 미국 밖에서 수행되게 하는 경우, 방법은 인과 엔티티에 의해 미국에서 수행되는 것으로 간주된다.Unless explicitly stated or otherwise apparent from context, the verbs “run” and “process” may be used interchangeably to denote run, process, interpret, compile, assemble, link, load, or any combination thereof. there is. Thus, embodiments that execute or process computer program instructions, computer executable code, etc. may act on the instructions or code in any and all of the described ways. Further, the depicted method steps are intended to encompass any suitable method of causing one or more parties or entities to perform the steps. Parties performing a step or part of a step need not be located within a particular geographic location or country boundary. For example, a method is considered to be performed in the United States by a causal entity if an entity located in the United States causes method steps or portions thereof to be performed outside the United States.

본 발명이 상세히 도시되고 설명된 바람직한 실시예와 관련하여 개시되었지만, 다양한 변형 및 개선이 당업자에게 명백할 것이다. 따라서, 실시예는 본 발명의 정신 및 범위를 제한해서는 안 되며, 오히려 법에 의해 허용되는 가장 넓은 의미로 이해되어야 한다.Although the present invention has been disclosed in connection with preferred embodiments shown and described in detail, various modifications and improvements will become apparent to those skilled in the art. Therefore, the examples should not limit the spirit and scope of the present invention, but rather should be understood in the broadest sense permitted by law.

Claims (40)

작업 처리를 위한 프로세서 구현 방법으로서,
컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 단계 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합됨 ―;
상기 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하는 단계 ― 상기 제어는 상기 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 되고, 상기 제어는 분기를 포함함 ―;
제어 로직에 의해 동작될 분기 결정을 대기하는 동안 상기 어레이에서 상기 분기의 두 측을 실행하는 단계 ― 상기 분기 결정은 상기 어레이에서의 계산 결과들에 기초함 ―; 및
상기 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트(promote)하는 단계를 포함하는, 방법.
As a processor implementation method for task processing,
accessing a two-dimensional (2D) array of compute elements, each compute element in the array of compute elements being known to a compiler and coupled to its neighboring compute elements in the array of compute elements; ;
providing control over the array of compute elements on a cycle-by-cycle basis, the control enabled by a stream of wide variable length control words generated by the compiler, the control including branches;
executing both sides of the branch in the array while waiting for a branch decision to be acted upon by control logic, the branch decision being based on calculation results in the array; and
based on the branch decision, promoting data generated by a branch path that has been complied with.
제1항에 있어서, 프로모트되었던 데이터를 다운스트림 동작에 사용하는 단계를 더 포함하는, 방법.2. The method of claim 1, further comprising using the data that was promoted in a downstream operation. 제2항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터의 결과들을 무시하는 단계를 더 포함하는, 방법.3. The method of claim 2, further comprising ignoring results from a side of the branch not indicated by the branch determination. 제2항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터 결과들을 제거하는 단계를 더 포함하는, 방법.3. The method of claim 2, further comprising removing results from a side of the branch not indicated by the branch determination. 제1항에 있어서, 이행된 분기 경로에 의해 생성된 상기 데이터는 커밋(commit)된 기록에 사용되는 것인, 방법.2. The method of claim 1, wherein the data generated by a diverged branch path is used for a committed record. 제5항에 있어서, 상기 커밋된 기록은 반전되거나 무시될 수 없는 것인, 방법.6. The method of claim 5, wherein the committed record cannot be reversed or ignored. 제5항에 있어서, 상기 커밋된 기록은 데이터 저장소로의 커밋된 기록을 포함하는 것인, 방법.6. The method of claim 5, wherein the committed writes include committed writes to a data store. 제7항에 있어서, 상기 데이터 저장소는 상기 컴퓨트 요소들의 2D 어레이의 외부에 상주하는 것인, 방법.8. The method of claim 7, wherein the data store resides external to the 2D array of compute elements. 제1항에 있어서, 상기 컴파일러에 의해, 이행된 분기 경로에 의해 생성된 상기 데이터에 대한 커밋된 기록을 분기 미결정 윈도우의 외부에서 발생하도록 스케줄링하는 단계를 더 포함하는, 방법.2. The method of claim 1, further comprising scheduling, by the compiler, a committed write to the data generated by a complied branch path to occur outside of a branch undecided window. 제9항에 있어서, 상기 커밋된 기록을 스케줄링하는 단계는 상기 어레이의 동작을 중단시키는 것을 회피하는 것인, 방법.10. The method of claim 9, wherein scheduling the committed write avoids disrupting operation of the array. 제1항에 있어서, 상기 실행하는 단계는 분기 예측 로직을 배제하는 것인, 방법.2. The method of claim 1, wherein the executing step excludes branch prediction logic. 제1항에 있어서, 이행된 분기 경로에 의해 생성된 상기 데이터를 어레이내 컴퓨트 요소 메모리로 로딩하는 단계를 더 포함하는, 방법.2. The method of claim 1, further comprising loading the data generated by the transitioned branch path into a compute element memory in an array. 제12항에 있어서, 상기 분기 결정에 기초하여, 상기 어레이내 컴퓨트 요소 메모리로 로딩되었던 데이터를 무시하는 단계를 더 포함하는, 방법.13. The method of claim 12, further comprising ignoring data that was loaded into the in-array compute element memory based on the branch decision. 제1항에 있어서, 분기의 상기 두 측과 동시에 추가적인 분기를 실행하는 단계를 더 포함하는, 방법.2. The method of claim 1, further comprising executing an additional branch concurrently with the two sides of the branch. 제14항에 있어서, 상기 추가적인 분기 및 분기의 상기 두 측은 다방향 분기 평가를 포함하는 것인, 방법.15. The method of claim 14, wherein the further branch and the two sides of the branch include multidirectional branch evaluation. 제14항에 있어서, 상기 추가적인 분기 및 분기의 상기 두 측은 두 독립적인 분기 결정을 포함하는 것인, 방법.15. The method of claim 14, wherein the further branch and the two sides of the branch comprise two independent branch decisions. 제1항에 있어서,로우 링 버스(row ring bus)들을 사용하여 분기 어드레스 오프셋들을 상기 컴퓨트 요소들의 어레이에 제공하는 단계를 더 포함하는, 방법.The method of claim 1 , further comprising providing branch address offsets to the array of compute elements using row ring buses. 제1항에 있어서, 상기 분기 결정은 어레이 산술 논리 유닛(Arithmetic Logic Unit, ALU)들의 실행 비트를 사용하여 통신되는 것인, 방법.2. The method of claim 1, wherein the branch decision is communicated using execution bits of array Arithmetic Logic Units (ALUs). 제1항에 있어서, 상기 제어 워드들의 스트림으로부터, 제어 워드의 부분들을 상기 컴퓨트 요소들의 어레이와 연관된 캐시 내에 저장하는 단계를 더 포함하는, 방법.The method of claim 1 , further comprising storing portions of control words from the stream of control words in a cache associated with the array of compute elements. 제19항에 있어서, 상기 캐시는 이중 판독, 단일 기록(dual read, single write, 2R1W) 데이터 캐시를 포함하는 것인, 방법.20. The method of claim 19, wherein the cache comprises a dual read, single write (2R1W) data cache. 제20항에 있어서, 상기 2R1W 캐시는 제어 유닛에 대한 잠재적 분기 경로들의 동시 페치를 지원하는 것인, 방법.21. The method of claim 20, wherein the 2R1W cache supports simultaneous fetching of potential branch paths to a control unit. 제1항에 있어서, 상기 컴파일러는 기계 학습 기능을 상기 컴퓨트 요소들의 어레이에 맵핑하는 것인, 방법.The method of claim 1 , wherein the compiler maps a machine learning function to the array of compute elements. 제22항에 있어서, 상기 기계 학습 기능은 신경망 구현을 포함하는 것인, 방법.23. The method of claim 22, wherein the machine learning function comprises a neural network implementation. 제1항에 있어서, 상기 컴퓨트 요소들의 2D 어레이를 컴퓨트 요소들의 다른 2D 어레이와 적층하여 컴퓨트 요소들의 3차원 스택을 형성하는 단계를 더 포함하는, 방법.The method of claim 1 , further comprising stacking the 2D array of compute elements with another 2D array of compute elements to form a three-dimensional stack of compute elements. 작업 처리를 위해 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 하나 이상의 프로세서로 하여금:
컴퓨트 요소들의 2차원(2D) 어레이에 액세스하는 동작 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합됨 ―;
상기 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하는 동작 ― 상기 제어는 상기 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 되고, 상기 제어는 분기를 포함함 ―;
제어 로직에 의해 동작될 분기 결정을 대기하는 동안 상기 어레이에서 상기 분기의 두 측을 실행하는 동작 ― 상기 분기 결정은 상기 어레이에서의 계산 결과들에 기초함 ―; 및
상기 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하는 동작을 수행하게 하는 코드를 포함하는 것인, 컴퓨터 프로그램 제품.
A computer program product embodied in a computer readable medium for processing a task, the computer program product causing one or more processors to:
accessing a two-dimensional (2D) array of compute elements, each compute element in the array of compute elements being known to a compiler and coupled to its neighboring compute elements in the array of compute elements; ;
providing control over the array of compute elements on a cycle-by-cycle basis, the control enabled by a stream of wide variable length control words generated by the compiler, the control including branching;
executing both sides of the branch in the array while waiting for a branch decision to be acted upon by control logic, the branch decision being based on calculation results in the array; and
and code that causes, based on the branch decision, to perform operations that promote data generated by a complied branch path.
제25항에 있어서, 프로모트되었던 데이터를 다운스트림 동작에 사용하기 위한 코드를 더 포함하는, 컴퓨터 프로그램 제품.26. The computer program product of claim 25, further comprising code for using data that was promoted in a downstream operation. 제26항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터의 결과들을 무시하기 위한 코드를 더 포함하는, 컴퓨터 프로그램 제품.27. The computer program product of claim 26, further comprising code for ignoring results from a side of the branch not indicated by the branch determination. 제26항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터의 결과들을 제거하기 위한 코드를 더 포함하는, 컴퓨터 프로그램 제품.27. The computer program product of claim 26, further comprising code for removing results from a side of the branch not indicated by the branch determination. 제25항에 있어서, 이행된 분기 경로에 의해 생성된 상기 데이터는 커밋된 기록에 사용되는 것인, 컴퓨터 프로그램 제품.26. The computer program product of claim 25, wherein the data generated by a diverged branch path is used for committed writes. 제29항에 있어서, 상기 커밋된 기록은 반전되거나 무시될 수 없는 것인, 컴퓨터 프로그램 제품.30. The computer program product of claim 29, wherein the committed record cannot be reversed or ignored. 제29항에 있어서, 상기 커밋된 기록은 데이터 저장소로의 커밋된 기록을 포함하는 것인, 컴퓨터 프로그램 제품.30. The computer program product of claim 29, wherein the committed write includes a committed write to a data store. 제31항에 있어서, 상기 데이터 저장소는 상기 컴퓨트 요소들의 2D 어레이의 외부에 상주하는 것인, 컴퓨터 프로그램 제품.32. The computer program product of claim 31, wherein the data store resides external to the 2D array of compute elements. 작업 처리를 위한 컴퓨터 시스템으로서,
명령어들을 저장하는 메모리;
상기 메모리에 결합된 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는 저장된 상기 명령어들을 실행할 때:
컴퓨트 요소들의 2차원(2D) 어레이에 액세스하도록 ― 상기 컴퓨트 요소들의 어레이 내의 각 컴퓨트 요소는 컴파일러에 알려져 있고, 상기 컴퓨트 요소들의 어레이 내의 그 이웃하는 컴퓨트 요소들에 결합됨 ―;
상기 컴퓨트 요소들의 어레이에 대한 제어를 사이클 단위 기반으로 제공하도록 ― 상기 제어는 상기 컴파일러에 의해 생성된 넓은 가변 길이 제어 워드들의 스트림에 의해 가능하게 되고, 상기 제어는 분기를 포함함 ―;
제어 로직에 의해 동작될 분기 결정을 대기하는 동안 어레이에서 분기의 두 측을 실행하도록 ― 분기 결정은 어레이 내의 계산 결과에 기초함 ―; 및
상기 분기 결정에 기초하여, 이행된 분기 경로에 의해 생성된 데이터를 프로모트하도록 구성된 것인, 컴퓨터 시스템.
A computer system for processing tasks,
memory for storing instructions;
and one or more processors coupled to the memory, wherein the one or more processors when executing the stored instructions:
to access a two-dimensional (2D) array of compute elements, each compute element in the array of compute elements being known to a compiler and coupled to its neighboring compute elements in the array of compute elements;
to provide control over the array of compute elements on a cycle-by-cycle basis, the control enabled by a stream of wide variable length control words generated by the compiler, the control including branches;
execute both sides of a branch in the array while waiting for a branch decision to be acted upon by the control logic, the branch decision being based on the result of a calculation in the array; and
and based on the branch determination, promote data generated by a branch path that has been fulfilled.
제33항에 있어서, 프로모트되었던 데이터를 다운스트림 동작에 사용하도록 또한 구성된, 컴퓨터 시스템.34. The computer system of claim 33, further configured to use data that was promoted in a downstream operation. 제34항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터의 결과들을 무시하도록 또한 구성된, 컴퓨터 시스템.35. The computer system of claim 34, further configured to ignore results from a side of the branch not indicated by the branch determination. 제34항에 있어서, 상기 분기 결정에 의해 표시되지 않은 상기 분기의 측으로부터의 결과들을 제거하기 위한 코드를 더 포함하는, 컴퓨터 시스템.35. The computer system of claim 34, further comprising code for removing results from a side of the branch not indicated by the branch determination. 제33항에 있어서, 이행된 분기 경로에 의해 생성된 상기 데이터는 커밋된 기록에 사용되는 것인, 컴퓨터 시스템.34. The computer system of claim 33, wherein the data generated by a diverged branch path is used for committed writes. 제37항에 있어서, 상기 커밋된 기록은 반전되거나 무시될 수 없는 것인, 컴퓨터 시스템.38. The computer system of claim 37, wherein the committed record cannot be reversed or ignored. 제37항에 있어서, 상기 커밋된 기록은 데이터 저장소로의 커밋된 기록을 포함하는 것인, 컴퓨터 시스템.38. The computer system of claim 37, wherein the committed writes include committed writes to a data store. 제39항에 있어서, 상기 데이터 저장소는 상기 컴퓨트 요소들의 2D 어레이의 외부에 상주하는 것인, 컴퓨터 시스템.40. The computer system of claim 39, wherein the data store resides external to the 2D array of compute elements.
KR1020237022366A 2020-12-16 2021-12-15 Highly parallel processing architecture using double fork execution KR20230116028A (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063125994P 2020-12-16 2020-12-16
US63/125,994 2020-12-16
PCT/US2021/063441 WO2022132858A1 (en) 2020-12-16 2021-12-15 Highly parallel processing architecture using dual branch execution

Publications (1)

Publication Number Publication Date
KR20230116028A true KR20230116028A (en) 2023-08-03

Family

ID=82058548

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237022366A KR20230116028A (en) 2020-12-16 2021-12-15 Highly parallel processing architecture using double fork execution

Country Status (3)

Country Link
EP (1) EP4264418A4 (en)
KR (1) KR20230116028A (en)
WO (1) WO2022132858A1 (en)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GR1007291B (en) * 2009-10-01 2011-06-01 Intracom Telecom, Matrix inversion using qr decoposition on a parallel pipelined systolic array
US8997060B2 (en) * 2013-07-31 2015-03-31 International Business Machines Corporation Parallel program analysis and branch prediction
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)
US10824938B2 (en) * 2017-04-24 2020-11-03 Intel Corporation Specialized fixed function hardware for efficient convolution

Also Published As

Publication number Publication date
WO2022132858A1 (en) 2022-06-23
EP4264418A1 (en) 2023-10-25
EP4264418A4 (en) 2024-04-24

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 (en) Highly parallel processing architecture using a compiler
US20220075627A1 (en) Highly parallel processing architecture with shallow pipeline
EP4384902A1 (en) Parallel processing architecture using distributed register files
KR20230116028A (en) Highly parallel processing architecture using double fork execution
WO2022055792A1 (en) Highly parallel processing architecture with shallow pipeline
US20220214885A1 (en) Parallel processing architecture using speculative encoding
US20240078182A1 (en) Parallel processing with switch block execution
US20230221931A1 (en) Autonomous compute element operation using buffers
US20230409328A1 (en) Parallel processing architecture with memory block transfers
US20230273818A1 (en) Highly parallel processing architecture with out-of-order resolution
US20230031902A1 (en) Load latency amelioration using bunch buffers
US20240168802A1 (en) Parallel processing with hazard detection and store probes
US20240070076A1 (en) Parallel processing using hazard detection and mitigation
US20240193009A1 (en) Parallel processing architecture for branch path suppression
US20220308872A1 (en) Parallel processing architecture using distributed register files
US20220291957A1 (en) Parallel processing architecture with distributed register files
US20230376447A1 (en) Parallel processing architecture with dual load buffers
US20240028340A1 (en) Parallel processing architecture with bin packing
US20230342152A1 (en) Parallel processing architecture with split control word caches
EP4315045A1 (en) Parallel processing architecture using speculative encoding
US20230281014A1 (en) Parallel processing of multiple loops with loads and stores
US20220374286A1 (en) Parallel processing architecture for atomic operations
US20230350713A1 (en) Parallel processing architecture with countdown tagging