KR20230082621A - 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처 - Google Patents

얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처 Download PDF

Info

Publication number
KR20230082621A
KR20230082621A KR1020237011992A KR20237011992A KR20230082621A KR 20230082621 A KR20230082621 A KR 20230082621A KR 1020237011992 A KR1020237011992 A KR 1020237011992A KR 20237011992 A KR20237011992 A KR 20237011992A KR 20230082621 A KR20230082621 A KR 20230082621A
Authority
KR
South Korea
Prior art keywords
array
computing elements
control
computing
cache
Prior art date
Application number
KR1020237011992A
Other languages
English (en)
Inventor
피터 폴리
Original Assignee
아세니움 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 아세니움 인코포레이티드 filed Critical 아세니움 인코포레이티드
Publication of KR20230082621A publication Critical patent/KR20230082621A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 사용하는 작업 처리 기술이 개시된다. 컴퓨팅 요소들의 2차원 어레이가 액세스된다. 컴퓨팅 요소들의 어레이 내의 각 컴퓨팅 요소는 컴파일러에 알려져 있으며 컴퓨팅 요소들의 어레이 내의 그의 이웃하는 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공된다. 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해 진다. 제어 워드의 관련 부분들은 컴퓨팅 요소들의 어레이와 관련된 캐시에 저장된다. 제어 워드가 압축해제된다. 압축해제는 다수의 사이클들에 걸쳐 캐시에서 사이클별로 발생한다. 압축해제를 기반으로 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다. 두 개 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행이 제공된다.

Description

얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
관련 출원
본 출원은 2020년 9월 9일에 출원된 미국 가 특허 "얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처" 출원 번호 63/075,849에 대한 우선권을 주장한다.
전술한 출원은 본 명세서에 의하여 허용되는 관할권에서 전체적으로 참고로 포함된다.
기술 분야
이 출원은 일반적으로 작업 처리에 관한 것으로, 보다 상세하게는 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처에 관한 것이다.
최초의 전자 컴퓨터들이 도입된 이래 크고 작은 기업들은 무수한 데이터 처리 작업들에 컴퓨터들을 적용해 왔다. 오늘날 컴퓨터들은 기업들의 운영에서 중요한 역할들을 하는 필수 도구들이다. 기업들, 정부들, 병원들, 대학들, 연구 실험실들, 소매 시설들 및 다른 조직들은 모두 막대한 양들의 데이터를 처리하여 그들의 운영을 지원한다. 데이터는 일반적으로 데이터세트들이라고 지칭되는 대규모 집계(aggregation) 또는 데이터 컬렉션(collection)로 수집된다. 데이터세트들은 주어진 조직을 지원하기 위해 다양한 방법들로 처리될 수 있다. 데이터세트들의 처리가 너무 중요지고 따라서 주어진 조직의 성공 또는 실패는 조직의 이익을 위해 데이터를 처리할 수 있는지 여부에 불가분의 관계가 있다. 데이터 처리가 경제적이고 조직의 이익을 위해 수행된다면 조직은 번성한다. 그렇지 않으면 조직에 끔찍한 결과가 예상될 수 있다.
조직들의 데이터 처리 요구사항들을 지원하기 위해 막대한 리소스들이 매년 소비된다. 데이터는 수집, 저장, 분석, 처리, 보존, 보호, 백업 등을 거쳐야만 한다. 일부 조직들은 자체 데이터센터들을 구축, 지원 및 유지관리하여 "사내(in-house)"에서 데이터 취급 및 처리 필요사항들을 계속 지원한다. 사내 처리는 자산 관리, 보안 및 다른 이유들로 선호되는 접근 방식일 수 있다. 다른 조직들은 현재 일반적인 클라우드 기반 컴퓨팅(computational) 시설들을 활용했다. 넓은 지리적 영역들에 분포된 여러 데이터센터들을 포함할 수 있는 후자의 데이터 취급 및 처리 시설들은 계산, 데이터 수집, 데이터 저장 및 다른 필요사항들을 "서비스로" 제공한다. 이러한 서비스들을 사용하면 자체 데이터센터들을 구비, 직원제공 및 유지관리할 수 없는 소규모 조직들에서도 데이터를 처리하고 액세스를 취급할 수 있다. 사내에서 지원하든 클라우드 기반 서비스들과 계약하든 관계없이 조직들은 데이터 처리를 기반으로 운영된다.
광범위하고 다양한 범위의 개인들로부터 데이터를 수집하기 위해 많고 다양한 데이터 수집 기술들이 사용된다. 개인은 일반적으로 클라이언트들, 구매자들, 환자들, 테스트 대상들, 시민들, 학생들 및 자원 봉사자들을 포함한다. 때때로 개인들은 자발적인 참여자들인 반면, 다른 때에는 자신도 모르는 사이에 데이터 수집의 대상들이거나 심지어 희생자들이 된다. 종종 사용되는 데이터 수집 전략들은 개인이 가입, 등록, 사용자 ID 또는 계정을 생성하거나 데이터 수집에 자발적으로 및 적극적으로 참여하는데 동의하는 "옵트-인(opt-in)" 기술들을 포함한다. 다른 기술들은 정부가 시민에게 등록 번호를 획득하고 정부 기관들, 법 집행 기관 또는 긴급 서비스들 등과 상호작용하는 동안 해당 번호를 사용하도록 요구하는 것과 같은 입법이다. 추가 데이터 수집 기술들은 구매 내역들 추적, 웹 사이트 방문들, 버튼 클릭들 및 메뉴 선택들과 같이 더 미묘하거나 의도적으로 숨겨진다. 데이터 수집에 사용된 기술들에 관계없이 수집된 데이터는 데이터를 수집한 조직들에 매우 가치가 있다. 어떻게 수집되든 이 데이터의 신속한 처리는 여전히 중요하다.
조직에 의해 수행되는 다수의 처리 일들은 조직의 미션에 중요하다. 일 처리는 일반적으로 급여 또는 청구 작업 운영, 연구 데이터 분석, 학생 성적 할당 등을 포함한다. 일 처리는 머신 러닝을 위한 신경망과 같은 처리 네트워크 훈련도 포함할 수 있다. 이러한 일은 매우 복잡하고 많은 작업들로 구성된다. 작업은 다양한 데이터세트들의 로딩 및 저장, 처리 컴포넌트 및 시스템에 액세스, 데이터 처리의 실행 등을 포함할 수 있다. 작업 자체는 일반적으로 자체가 복잡할 수 있는 서브작업들을 기반으로 한다. 서브작업은 스토리지에서 데이터 로딩 또는 판독, 데이터에 대한 계산 및 기타 조작 수행, 결과 데이터를 스토리지에 다시 저장하거나 기록, 데이터 전송 및 제어와 같은 서브작업들 간 통신 처리 등과 같은 특정 일을 처리하는 데 사용될 수 있다. 액세스되는 데이터세트들은 종종 엄청나며 처리 작업에 적합하지 않거나 아키텍처 설계가 유연하지 않은 처리 아키텍처를 쉽게 압도할 수 있다. 작업 처리 효율성과 처리량을 크게 개선하기 위해 요소들의 2차원(2D) 어레이가 작업들 및 서브작업들 처리에 사용될 수 있다. 2D 어레이는 컴퓨팅 요소, 곱셈기 요소, 레지스터, 캐시, 큐, 제어기, 압축해제기, 산술 논리 유닛(ALU), 저장 요소 및 서로 통신할 수 있는 기타 컴포넌트들을 포함한다. 이러한 요소들의 어레이는 사이클 단위로 요소들의 어레이에 대한 제어를 제공함으로써 구성되고 동작된다. 2D 어레이의 제어는 컴파일러에서 생성된 제어 워드를 제공하여 수행된다. 제어는 제어 워드의 스트림을 포함하며, 여기서 제어 워드는 컴파일러에서 생성된 다양한 길이의 마이크로코드 제어 워드들을 포함할 수 있다. 제어 워드는 어레이를 구성하고 데이터의 흐름 또는 전송과 작업 및 서브작업의 처리를 제어하는 데 사용된다. 또한 작업 처리에 가장 적합한 토폴로지로 어레이가 구성될 수 있다. 어레이가 구성될 수 있는 토폴로지는 수축기, 벡터, 사이클, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함한다. 토폴로지는 머신 러닝 기능을 활성화하는 토폴로지를 포함할 수 있다.
개시된 기술에서, 작업 처리는 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 사용하여 달성된다. 고도의 병렬 처리 아키텍처는 컴퓨팅 요소들의 2차원(2D) 어레이를 기반으로 한다. 컴퓨팅 요소들은 CPU, GPS, 프로세서 코어, 컴퓨팅 엔진 코어 등을 포함할 수 있다. 컴퓨팅 요소들은 스토리지 요소, 스위칭 요소, 캐시, 메모리 등과 같은 컴퓨팅 요소를 지원하는 요소를 더 포함할 수 있다. 2D 어레이 내의 컴퓨팅 요소는 사이클별로 제어를 제공하여 제어된다. 제어는 하나 이상의 제어 워드를 제공하여 수행된다. 제어 워드는 제어 워드들의 스트림으로 제공될 수 있다. 제어 워드는 컴파일러, 어셈블러 등에서 의해 생성될 수 있는 가변 길이, 마이크로코드 제어 워드를 포함한다. 2D 어레이의 요소에 제어 워드를 제공하려면 메모리 및 스토리지 액세스, 데이터 전파 타이밍으로 인해 상당한 오버헤드가 필요할 수 있으므로 제어 워드가 압축될 수 있다. 제공된 제어 워드는 캐시 메모리에 로딩될 수 있으며 캐시 메모리는 둘 이상의 컴퓨팅 요소에서 공유될 수 있다. 메모리 액세스 및 데이터 전송 오버헤드를 더 줄이기 위해 하나 이상의 컴퓨팅 요소에 단일 제어 워드가 제공될 수 있다. 즉, 컴퓨팅 요소들의 어레이의 로우 또는 컬럼에 걸쳐 요소에 제어 워드가 분산될 수 있다. 제어 워드는 전체 어레이에 분산될 수 있다. 제어 워드를 사용하여 주어진 처리 작업에 필요하지 않은 컴퓨팅 요소를 선택적으로 활성화 및 비활성화할 수도 있다. 컴퓨팅 요소를 선택적으로 비활성화하면 어레이 내에서 데이터 전송을 단순화하고 어레이의 전력 소비를 줄이는 등의 작업을 수행할 수 있다. 하나 이상의 컴퓨팅 요소를 제어할 수 있도록 제어 워드가 압축해제될 수 있다. 컴퓨팅 요소는 단일 컴퓨팅 요소, 컴퓨팅 요소의 로우, 컴퓨팅 요소의 컬럼, 컴퓨팅 요소의 어레이 등을 포함할 수 있다. 2D 어레이 내에 컴퓨팅 요소를 구성하면 컴파일링된 작업이 실행될 수 있다. 압축해제된 제어 워드는 작업, 연결된 서브작업 등의 실행을 제어할 수 있다. 압축해제된 제어 워드는 2D 어레이 내에서 병렬 처리를 추가로 가능하게 할 수 있다.
작업 처리를 위한 프로세서 구현 방법이 개시되며, 이는 컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하는 단계-여기서, 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 그의 이웃하는 컴퓨팅 요소들에 결합됨-; 사이클별로 컴퓨팅 요소들의 어레이에 대한 제어를 제공하는 단계-여기서, 제어는 컴파일러에 의해 생성된 폭넓은 가변 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능함-; 요소별로 제어를 가능하게 하기 위해 제어 워드를 압축해제하는 단계; 및 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하는 단계를 포함하고, 실행하는 단계를 압축해제된 제어 워드에 기초한다. 실시예에서, 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들은 워드 길이, 스크래치패드 메모리 요소의 수 및 크기, 레지스터 파일의 깊이, 처리 속도 등과 같은 동일한 기능을 가질 수 있다. 실시예는 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 제어 워드의 관련 부분들을 저장하는 단계를 포함한다. 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 기반으로 할 수 있다. 2R1W 캐시는 캐시에서 두 번의 판독 또는 페치와 캐시에 대한 한 번의 기록 또는 저장이 실질적으로 동시에 발생할 수 있도록 한다. 캐시는 L1, L2 및 L3 캐시 레벨과 같은 다수의 레벨들의 캐시 스토리지를 포함하는 계층적 캐시를 포함할 수 있다. 캐시는 컴퓨팅 요소를 제어하는 데 사용되는 제어 워드 부분과 어레이 내의 다른 관련 요소에 대한 고속 로컬 액세스를 가능하게 한다. 실시예에서, 압축해제는 캐시 외부에서 사이클 단위로 발생할 수 있으므로 사이클 단위로 2D 어레이의 요소에 대한 제어를 제공한다. 특정 가변 길이 제어 워드 및 제어 워드의 크기에 따라 단일 제어 워드의 압축해제가 다수의 사이클들에 걸쳐 발생할 수 있다. 다수의 사이클들은 캐시 라인 페치 경계에 걸치는 제어 워드를 수용할 수 있다.
제공되는 제어 워드는 작업의 병렬 실행을 가능하게 한다. 작업은 서로 다른 데이터세트(예를 들어, SIMD)를 처리하는 실질적으로 유사한 작업, 서로 독립적인 두 개 이상의 작업 등을 포함할 수 있다. 실시예에서, 2개 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행이 제공될 수 있으며, 여기서 2개 이상의 잠재적인 컴파일링된 작업 결과들은 계산 결과 또는 라우팅 제어를 포함한다. 계산 결과는 산술 연산, 논리 연산 등의 결과를 포함할 수 있다. 라우팅 제어는 조건부 분기, 무조건 분기 등을 포함할 수 있다. 작업 또는 조건부 분기의 결과를 선험적으로 알 수 없으므로 가능한 실행 경로를 병렬로 실행할 수 있다. 둘 이상의 잠재적인 컴파일링된 결과들은 동일한 제어 워드로 제어될 수 있다. 작업 또는 분기 결정의 올바른 결과가 결정되면 올바른 결과에 대한 처리가 계속되고 대체 결과에 대한 처리가 중단된다.
다양한 실시예의 다양한 피쳐, 양태 및 이점은 다음의 추가 설명으로부터 더욱 명백해질 것이다.
특정 실시예들에 대한 다음의 상세한 설명은 다음 도면들을 참조하여 이해될 수 있으며, 여기서:
도 1은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처에 대한 흐름도이다.
도 2는 작업 스케줄링을 위한 흐름도이다.
도 3은 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다.
도 4는 컴퓨팅 요소 어레이 디테일을 예시한다.
도 5는 어레이 로우 제어 디코드를 도시한다.
도 6은 단일 제어 워드 로우에 대한 예시적인 인코딩을 도시한다.
도 7은 압축된 제어 워드 크기들의 예를 도시한다.
도 8은 압축해제된 제어 워드 필드들의 예를 도시하는 테이블이다
도 9는 고도의 병렬 처리 아키텍처를 사용하는 작업 처리를 위한 시스템 도면이다.
얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 사용하는 데이터 조작 기술들이 개시된다. 처리되는 작업들은 산술 동작들, 시프트 동작들, 불(Boolean) 동작들을 포함한 로직 동작들, 벡터 또는 매트릭스 동작들 등을 포함한 다양한 동작들을 수행할 수 있다. 작업들은 복수의 서브작업들을 포함할 수 있다. 서브작업들은 우선(precedence), 우선 사항(priority), 코딩 순서, 병렬화 양, 데이터 흐름, 데이터 가용성, 컴퓨팅 요소 가용성, 통신 채널 가용성 등에 따라 처리될 수 있다. 데이터 조작들은 컴퓨팅 요소들의 2-차원 어레이 상에서 수행된다. CPU들, GPU들, ASIC들, FPGA들, 코어들 및 다른 처리 컴포넌트들을 포함할 수 있는 컴퓨팅 요소들은 캐시(cache) 스토리지를 포함할 수 있는 로컬 스토리지에 결합될 수 있다. 계층적 캐시를 포함할 수 있는 캐시는 제어 워드(word)의 관련 부분들을 저장하는 데 사용할 수 있으며 제어 워드는 컴퓨팅 요소를 제어한다. 압축된 및 압축해제된 제어 워드들 모두 캐시에 저장될 수 있지만 압축해제된 제어 워드들을 캐시에 저장하는 것은 일반적으로 훨씬 덜 효율적이다. 컴퓨팅 요소들은 데이터 캐시에 결합될 수도 있으며, 이는 직접 또는 큐(queue)들, 버스(buss)들 등을 통해 계층적일 수도 있다.
작업들, 서브작업들 등은 컴파일러에 의해 컴파일링된다. 컴파일러는 범용 컴파일러, 하드웨어 설명-기반 컴파일러, 컴퓨팅 요소들의 어레이에 대해 기록되거나 "튜닝된(tuned)" 컴파일러, 제약-기반 컴파일러, 만족-기반 컴파일러(SAT 솔버) 등이 포함할 수 있다. 컴파일러는 폭넓고 길이가 가변적인 마이크로코드 제어 워드들의 스트림을 생성한다. 마이크로코드 제어 워드의 길이는 예를 들어 해당 제어 워드 내의 제어 비트들이 해당 컴퓨팅 요소에 필요하지 않도록 컴퓨팅 요소가 작업에 필요하지 않음을 인식함으로써 제어 워드를 압축함으로써 조정될 수 있다. 제어 워드들은 데이터를 라우팅하고, 컴퓨팅 요소들에 의해 수행될 동작들을 설정하고, 개별 컴퓨팅 요소들 또는 컴퓨팅 요소들의 로우 및/또는 컬럼을 유휴 상태로 만드는 데 사용될 수 있다. 컴퓨팅 요소들과 연관된 컴파일링된 마이크로코드 제어 워드들은 컴퓨팅 요소들에 분포되고 처리 작업이 실행된다. 작업들의 실행을 가속화하기 위해, 실행에는 둘 이상의 잠재적인 컴파일링된 작업 결과들을 동시에 실행함을 제공하는 것을 포함할 수 있다. 사용 예에서 작업은 분기(branch)를 함유하는 제어 워드를 포함할 수 있다. 분기의 결과는 분기를 포함하는 제어 워드의 실행에 대해 선험적으로 알려져 있지 않기 때문에, 분기를 기반으로 실행될 수 있는 모든 가능한 제어 시퀀스들이 어레이에서 동시에 실행될 수 있다. 그런 다음 분기 결과가 알려지면 올바른 계산들의 시퀀스가 사용될 수 있고 잘못된 계산들의 시퀀스들(예를 들어, 분기에 의해 선택되지 않은 경로)은 무시 및/또는 플러싱될 수 있다.
얕은 파이프라인을 가진 고도의 병렬 아키텍처는 작업 처리를 가능하게 한다. 컴퓨팅 요소들의 2-차원(2D) 어레이가 액세스된다. 컴퓨팅 요소들은 집적 회로 내의 컴퓨팅 요소들, 프로세서들 또는 코어들; 주문형 집적 회로(ASIC) 내의 프로세서들 또는 코어들; FPGA(field programmable gate array)와 같은 프로그래밍 가능한 디바이스 내에 프로그래밍된 코어들; 등을 포함할 수 있다. 컴퓨팅 요소들의 2D 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에게 알려져 있다. 범용 컴파일러, 하드웨어 지향 컴파일러 또는 컴퓨팅 요소들에 특정한 컴파일러를 포함할 수 있는 컴파일러는 컴퓨팅 요소들의 각각에 대한 코드를 컴파일할 수 있다. 각각의 컴퓨팅 요소는 컴퓨팅 요소들의 어레이 내에서 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 결합은 컴퓨팅 요소들의 둘 이상의 사이에서 데이터 통신을 가능하게 한다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로(cycle-by-cycle basis) 제공된다. 사이클은 클록 사이클, 데이터 사이클, 처리 사이클 등을 포함할 수 있다. 제어는 컴파일러에서 생성된 폭넓고 길이가 가변적인 마이크로코드 제어 워드의 스트림에 의해 활성화된다. 마이크로코드 제어 워드의 길이들은 제어, 압축, 컴퓨팅 요소가 불필요한지 식별하는 것과 같은 단순화 등에 따라 달라질 수 있다. 압축된 제어 워드들을 포함할 수 있는 제어 워드들은 컴퓨팅 요소 어레이 내에서 요소별로 디코딩된다. 제어 워드는 미세 제어 세분화(granularity)의 레벨로 압축해제될 수 있으며, 여기서 각각의 컴퓨팅 요소(정수 컴퓨팅 요소, 부동 소수점 컴퓨팅 요소, 어드레스 생성 컴퓨팅 요소, 기록 버퍼 요소, 판독 버퍼 요소 등)는 개별적으로 고유하게 제어된다. 압축된 각각의 제어 워드는 요소별로 제어될 수 있도록 압축해제된다. 디코딩은 작업 또는 서브작업을 처리하는 데 주어진 컴퓨팅 요소가 필요한지 여부; 컴퓨팅 요소가 그와 관련된 특정 제어 워드를 가지고 있는지 또는 컴퓨팅 요소가 반복된 제어 워드를 수신하는지 여부(예를 들어, 둘 이상의 컴퓨팅 요소들에 사용되는 제어 워드); 등에 따라 달라질 수 있다. 반복되는 제어 워드 압축해제를 기초로하는 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다. 실행은 컴파일링된 작업과 연관된 복수의 서브작업들을 실행함으로써 달성될 수 있다.
도 1은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처에 대한 흐름도이다. CE(compute element)들의 2D 어레이 내에서 평가가능한 CE들와 같은 CE들의 클러스터들은 다양한 작업들을 처리하도록 구성될 수 있다. 작업들은 복수의 서브작업들을 기초로 할 수 있다. 작업들은 데이터 조작, 애플리케이션 처리 등과 같은 다양한 처리 목표들을 달성할 수 있다. 작업들은 정수, 실수(부동 소수점) 및 문자 데이터 유형들을 포함한 다양한 데이터 유형들; 벡터들 및 매트릭스들; 등에서 동작할 수 있다. 컴파일러에 의해 생성된 마이크로코드 제어 워드들에 기초하여 컴퓨팅 요소들의 어레이에 제어가 제공된다. 제어 워드는 다양한 컴퓨팅 요소들을 활성화하거나 유휴 상태로 만들고; 데이터를 제공; CEs, 캐시들 및 스토리지 간에 결과들을 라우팅하는 등할 수 있다. 스토리지 요구 사항들을 줄이기 위해 압축된 제어 워드들은 컴퓨팅 요소별로 압축이 해제된다. 제어 워드가 전체 어레이에 걸쳐 있기 때문에 압축해제는 컴퓨팅 요소별로 전체 어레이에 걸쳐 이루어진다. 압축해제는 컴퓨팅 요소 어레이에서 컴파일링된 작업의 실행을 가능하게 한다.
흐름(100)은 컴퓨팅 요소들의 2-차원(2D) 어레이(110)에 액세스하는 것을 포함하며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려져 있고 컴퓨팅 요소들의 어레이 내의 이웃하는 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들은 다양한 유형의 프로세서들을 기초로 할 수 있다. 컴퓨팅 요소들 또는 CE들은 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU), 주문형 집적 회로(ASIC) 내의 프로세서들 또는 처리 코어들, 필드 프로그래밍 가능 게이트 어레이(FPGA) 내에 프로그래밍된 처리 코어들 등을 포함할 수 있다. 실시예들에서, 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들은 동일한 기능(functionality)을 갖는다. 컴퓨팅 요소들은 토폴로지(topology)에서 구성될 수 있으며 여기서 토폴로지는 어레이 내로 구축되거나 어레이 내에서 프로그래밍 또는 구성될 수 있다. 실시예들에서, 컴퓨팅 요소들의 어레이는 수축기, SIMD(Single Instruction Multiple Data), MIMD(Multiple Instruction Multiple Data), 벡터, 사이클, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지 중 하나 이상을 구현하기 위해 제어 워드에 의해 구성된다.
컴퓨팅 요소들은 머신 러닝 계산에 적합한 토폴로지를 더 포함할 수 있다. 컴퓨팅 요소들은 CE들의 어레이 내의 다른 요소들에 결합될 수 있다. 실시예들에서, 컴퓨팅 요소들의 결합은 하나 이상의 토폴로지들을 가능하게 할 수 있다. CE들이 결합될 수 있는 다른 요소들은 하나 이상의 캐시 스토리지 레벨들과 같은 스토리지 요소들; 승수(multiplier) 유닛들; 로드(LD) 및 저장(ST) 어드레스들을 생성하기 위한 어드레스 생성기 유닛들; 다양한 큐들(queues); 등을 포함할 수 있다. 각각의 컴퓨팅 요소가 알려진 컴파일러는 C, C++ 또는 Python 컴파일러와 같은 범용 컴파일러; VHDL 또는 Verilog 컴파일러와 같은 하드웨어 지향 컴파일러; 컴퓨팅 요소들의 어레이를 위해 기록된 컴파일러; 등을 포함할 수 있다. 각각의 CE와 그의 인접 CE들의 결합은 캐시 요소들 또는 승수 요소들과 같은 요소들의 공유; 이웃하는 CE들의 둘 이상의 사이의 통신; 등을 가능하게 한다. 또한 컬럼 버스들(buss)들은 CE들과 승수 유닛들 및/또는 데이터 캐시 요소들 사이에 공유를 용이하게 할 수 있다.
흐름(100)은 사이클 별로 컴퓨팅 요소들의 어레이에 대한 제어(120)를 제공하는 것을 포함한다. 제어는 제어 워드의 형태로 제공될 수 있으며, 여기서 제어 워드는 컴파일러에 의해 제공될 수 있다. 제어 워드는 하나 이상의 CE들을 구성하고, CE들로 또는 그로부터 데이터가 흐르도록 하고, CE가 동작을 수행하도록 구성하는 등을 수행하는 데 사용될 수 있다. 컴퓨팅 요소들의 어레이를 제어하기 위해 컴파일링되는 작업의 유형과 크기에 따라, CE들 중 하나 이상이 제어될 수 있는, 반면 다른 CE들은 특정 작업에 불필요하다. 불필요한 CE는 데이터, 제어 워드 등이 제어 워드에 필요하지 않거나 압축해제 후 CE로 발송되지 않도록 불필요한 것으로 마킹될 수 있다. 실시예들에서, 불필요한 컴퓨팅 요소들은 단일 비트로 제어될 수 있다. 실시예들에서, 단일 비트는 로우의 각각의 CE에 대한 유휴 신호들로 압축해제됨으로써 CEs의 전체 로우를 제어할 수 있다. 단일 비트는 "불필요"로 설정되거나, "필요"로 재설정되거나, 작업에서 특정 CE가 불필요할 때를 나타내기 위해 비트의 유사한 용도로 설정될 수 있다. 흐름(100)에서, 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드(122)의 스트림에 의해 제어가 가능해진다. 마이크로코드 제어 워드들은 제어 워드에 의해 제어되는 CE들의 동작, 제어 워드의 압축 등에 따라 길이가 달라질 수 있다. 제어 워드는 제어 워드 내의 비트들의 "다발" 또는 필드들을 인코딩하여 압축될 수 있다. 작업에 CE가 필요하지 않은 경우 제어 워드는 "필요하지 않음" 비트를 포함하기만 하면 되지만 CE가 필요한 경우 그렇지 않으면 채워질 제어 워드의 필드들을 자르거나 제거할 수 있다. 실시예들에서, 컴파일링된 작업은 컴퓨팅 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 포함할 수 있다. 다수의 프로그래밍 루프 인스턴스들을 사용하여 작업에서 수행된 동작들의 병렬화를 달성할 수 있다. 다른 실시예들에서, 컴파일링된 작업은 머신 러닝 기능을 포함할 수 있다. 머신 러닝은 어레이 내의 컴퓨팅 요소들을 구성하여 달성될 수 있다. 실시예들에서, 머신 러닝 기능은 신경 네트워크 구현을 포함할 수 있다. 머신 러닝은 딥 러닝을 기초로 할 수 있다.
흐름(100)은 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 제어 워드의 관련 부분들(130)을 저장하는 것을 더 포함한다. 캐시는 제어 워드들, 데이터, 중간 결과들 등에 대한 빠른 로컬 스토리지를 제공하기 위해 컴퓨팅 요소들의 어레이와 밀접하게 연관될 수 있다. 실시예들에서, 캐시는 계층적 캐시를 포함할 수 있다. 계층적 캐시는 캐시 레벨 1(L1), 캐시 레벨 2(L2), 캐시 레벨 3(L3) 등과 같은 캐시 레벨들의 계층을 포함할 수 있다. 계층적 캐시에서 각각의 연속적인 캐시 레벨은 이전 캐시 레벨보다 크고 느릴 수 있다. 즉, L1은 L2보다 작고 빠를 수 있고, L2는 L1보다 크고 느릴 수 있으며, L3보다 작고 빠를 수 있다. 하나 이상의 캐시의 레벨들은 CE들의 어레이에 액세스할 수 있는 주 스토리지보다 제어 워드들, 데이터, 중간 결과들 등에 대한 더 빠른 액세스를 제공한다. 실시예들에서, L1, L2 및 L3 캐시는 4-방향 세트 연관성일 수 있다. 다른 실시예들에서, L2 캐시와 같은 캐시는 이중 판독, 단일 기록(2R1W) 캐시로 구성된다. 2R1W 캐시에서 캐시에 대한 두 번 판독 또는 로드 액세스들과 한 번의 기록 또는 저장이 거의 동시에 발생할 수 있다. 캐시는 다른 용도들로 사용할 수 있다. 실시예들에서, 캐시는 제어 워드가 컴퓨팅 요소들의 어레이의 로우 전체에 분포되도록 할 수 있다. 제어 워드는 CE들의 어레이의 로우에 있는 하나 이상의 CE들에 걸쳐 캐시로부터 분포될 수 있다. 추가 실시예들에서, 컴퓨팅 요소들의 어레이의 한 로우에 걸친 분포는 한 사이클에서 달성될 수 있다. 다른 실시예들에서, 2R1W 캐시는 컴파일링된 작업에 대한 잠재적 분기 경로들의 동시 페치(fetch)(아래에서 논의됨)를 지원한다. 실시예들에서, 서로 다른 분기 경로들의 초기 부분들은 연속적인(consecutive) 제어 워드들에서 동시에 인스턴스화될 수 있다(instantiated).
흐름(100)은 요소별로 제어 워드들(140)를 압축해제하는 것을 포함한다. 컴퓨팅 요소들의 어레이 내 컴퓨팅 요소들의 주어진 로우 내에서 하나 이상의 CE들이 지정된 작업 또는 서브작업에 불필요할 수 있음을 상기한다. 흐름(100)에서, 요소당 분산(142)되는 제어 워드들은 CE가 데이터에 액세스하고, 동작을 수행하고, 데이터를 생성하는 등을 가능하게 하는 제어 워드들을 포함할 수 있다. 불필요한 CE들의 경우들에 제어 워드는 CE에 대해 "필요하지 않은" 비트만 제공하면 되며 로우의 모든 컴퓨팅 요소들이 필요하지 않은 경우 로우가 유휴 상태임을 나타내기 위해 해당 로우 전체에 1비트만 필요하다. 압축해제는 캐시에 저장된 제어 워드들에 대해 수행될 수 있다. 실시예들에서, 압축해제는 캐시 외부에서 사이클별로 발생한다. 사이클별 압축해제는 CE들의 로우에 대한 제어 워드, 각각의 CE에 대한 제어 워드들, 둘 이상의 CE에게 공유되는 제어 워드들 등을 압축해제하는 것을 포함할 수 있다. 실시예들에서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생할 수 있다. 다수의 사이클들은 캐시의 제어 워드 액세스, CE당 코드 워드 압축해제, 압축해제된 코드 워드들을 CE들로 송신하는 것 등을 포함할 수 있다. 추가 실시예들에서, 다수의 사이클들은 캐시 라인 페치 경계에 걸쳐 있는 제어 워드를 수용할 수 있다. 제어 워드는 길이가 가변적일 수 있으므로 제어 워드는 캐시 라인 페치 경계에 걸쳐 있을 만큼 충분히 길 수 있다. 이러한 제어 워드들에 액세스하려면 다수의 사이클들이 필요할 수 있다. 다른 실시예들에서, 액세스, 제공 및 압축해제는 슈퍼스태틱(superstatic) 프로세서 아키텍처를 구성한다. 슈퍼스태틱 프로세서 아키텍처는 입력 및 출력 컴포넌트들, 메인 메모리, 제어 유닛 및 프로세서를 포함하는 CPU와 같은 다양한 컴포넌트들을 포함할 수 있다. 프로세서는 레지스터들 및 조합 로직들을 추가로 포함할 수 있다.
흐름(100)은 제어 정보를 제공하는 것(144)을 포함할 수 있다. 제어 정보는 컴파일러에 의해 제공되고, 제어 정보 라이브러리에서 다운로드되고, 사용자에 의해 업로드될 수 있다. 제어 정보 제공은 데이터 처리를 포함할 수 있다. 흐름(100)은 데이터 폐기(146)를 주문하는 것을 포함한다. 데이터 폐기는 입력 또는 중간 데이터와 같은 데이터가 작업 또는 서브작업에 더 이상 필요하지 않을 때 발생할 수 있다. 캐시 누락(miss)으로 인해 데이터 폐기가 발생할 수도 있다. 즉, 작업에서 처리할 데이터를 찾고 해당 데이터가 캐시, 상부 레벨의 캐시 또는 캐시에 데이터를 로딩하기 위한 큐에 있지 않은 경우 캐시 누락이 발생한다. 캐시 누락으로 인해 캐시 내의 데이터가 "폐기", 플러싱 또는 다시 기록되고 상부 레벨 캐시 내에서 또는 메인 스토리지로부터 새 데이터가 액세스될 수 있다. 데이터 폐기(retirement)는 대기 시간을 기초로 할 수 있다. 사용 예에서 작업에는 승수 요소에서 수행될 수 있는 곱셈이 필요할 수 있다. 승수 요소가 요구하는 데이터는 일정 시간 내에 이용 가능해야 하며, 승수 요소에 의해 생성된 프로덕트(product)도 데이터 이용 가능 이후 일정 시간 내에 생성되어야 한다. 따라서 승수 요소와 같은 리소스들은 곱셈을 수행하여 "소비" 되거나 곱셈이 시간의 윈도우 내에 발생하지 않았기 때문에 "폐기"되어야 한다.
흐름(100)은 압축해제에 기초하여 컴퓨팅 요소들의 어레이에서 컴파일링된 작업(150)을 실행하는 것을 포함한다. 작업 및 작업과 관련된 모든 서브작업들은 어레이 내의 CE들에서 실행될 수 있다. 실행은 데이터 기록 또는 로드, 데이터 처리, 데이터 기록 또는 저장 등이 포함할 수 있다. 실행은 제어 워드를 기초로 한다. 실행은 단일 사이클 동안 발생하거나 여러 사이클들에 걸쳐 연장될 수 있다. 흐름(100)은 둘 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행(160)을 제공하는 것을 더 포함한다. 작업은 결정 지점을 포함할 수 있으며, 여기서 결정 지점은 데이터, 결과, 조건 등을 기초로 할 수 있다. 결정 지점은 두 개 이상의 잠재적인 컴파일링된 작업 결과들을 생성할 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일링된 작업 결과들은 계산 결과 또는 라우팅 제어(routing control)를 포함한다. 컴파일링된 작업 결과는 조건에 기초하는 하나의 제어 워드들의 시퀀스를 실행; 상이한, 부정적인 또는 충족되지 않은 조건에 기초하는 제어 워드들의 제2 시퀀스를 실행; 등을 포함할 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일링된 결과들은 동일한 제어 워드에 의해 제어될 수 있다. 작업 실행을 가속화하기 위해 잠재적인 컴파일링된 작업 결과들과 관련된 코드 시퀀스들이 페치될 수 있으며 시퀀스가 제어 워드들의 연속인 코드 시퀀스들의 실행이 시작될 수 있다. 그런 다음 올바른(correct) 또는 참된(true) 결과가 결정되면 올바른 결과와 관련된 제어 워드들의 시퀀스가 진행되고 잘못된 결과는 중지된다. 다른 실시예들에서, 2개 이상의 잠재적인 컴파일링된 결과들은 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들에서 실행된다. 공간적으로 분리된 컴퓨팅 요소들은 CE들의 어레이 내에서 리소스 경합(contention)을 감소시키거나 제거할 수 있다. 흐름(100)의 다양한 단계들은 개시된 개념들을 벗어나지 않는 내에서 순서 변경, 반복, 생략 등이 될 수 있다. 흐름(100)의 다양한 실시예들은 하나 이상의 프로세서들에 의해 실행가능한 코드를 포함하는 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품에 포함될 수 있다.
도 2는 작업 스케줄링에 대한 흐름도이다. 전체적으로 논의된 바와 같이 작업들은 컴퓨팅 요소들의 어레이에서 처리될 수 있다. 작업에는 산술, 벡터 또는 행렬 동작들과 같은 일반 동작들; 신경 네트워크 또는 딥 러닝 동작들 같은 애플리케이션들을 기초로 한 동작들; 등을 포함할 수 있다. 작업들을 올바르게 처리하려면 컴퓨팅 요소들의 어레이에서 작업들이 스케줄링되야 한다. 작업들의 스케줄링을 수행하여 작업 처리량을 최대화하고 제2 작업에 대한 데이터를 생성하는 작업이 제2 작업을 처리하기 전에 처리되도록 할 수 있다. 작업 스케줄링은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소들의 2-차원(2D) 어레이가 액세스되며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공되며, 여기서 제어는 컴파일러에 의해 생성된 폭넓은, 가변적인 길이의 마이크로코드 제어 워드들 스트림에 의해 가능해진다. 제어 워드들은 요소별로 압축해제된다(순차적으로가 아니라 병렬로). 압축해제를 기초로, 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다.
흐름(200)은 컴퓨팅 요소들의 2차원 어레이에서 실행하기 위한 컴파일링 작업들(210)을 포함한다. 어레이 내의 컴퓨팅 요소들의 각각은 컴파일러에 알려져 있으므로 컴파일러는 필요한 경우 컴퓨팅 요소들 각각에 대한 묶음(bunch)을 생성할 수 있음을 상기한다. 컴파일러는 C, C++ 또는 Python 컴파일러와 같은 범용 컴파일러; VHDL 또는 Verilog 컴파일러와 같은 하드웨어 지향 컴파일러; 등을 포함할 수 있다. 실시예들에서, 컴파일러는 컴퓨팅 요소들의 어레이가 소프트웨어로 정의된 프로세서로 행동(act)하는 것을 가능하게 한다. 흐름(200)에서, 컴파일링된 작업은 컴퓨팅 요소들의 어레이에서 컴퓨팅 요소의 로우 내에서 불필요한 컴퓨팅 요소(212)를 결정할 수 있다. 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들의 로우는 다수의 컴퓨팅 요소들을 포함할 수 있으며 여기서 컴퓨팅 요소들의 수는 2, 4, 8, 16개 등의 컴퓨팅 요소들을 포함할 수 있다. 컴파일링된 작업은 하나 이상의 컴퓨팅 요소들에서 실행될 수 있다. 작업을 실행하는 데 한 로우 내의 전체 컴퓨팅 요소들보다 적은 수가 필요한 경우 불필요한 컴퓨팅 요소들이 불필요한 것으로 표시될 수 있다. 흐름(200)은 컴파일러에 의해 생성된 제어 워드들의 크기를 줄이기 위해 압축(214)을 사용하는 것을 포함한다. 압축은 제어 워드들의 기능적 밀도(functional density)를 증가시키는 데 사용될 수 있으며, 정보 밀도의 증가로도 알려진 기능적 밀도의 증가는 제어 워드들에 대한 저장 요구사항들을 감소시킬 수 있다. 실시예들에서, 압축은 무손실 압축을 포함할 수 있다. 흐름(200)에서, 불필요한 컴퓨팅 요소 또는 유휴 로우/컬럼은 제어 워드의 단일 비트(216)에 의해 제어될 수 있다. 컴퓨팅 요소가 주어진 작업에 필요하지 않음을 나타내는 비트를 설정하면 불필요한 컴퓨팅 요소에 대한 제어 정보와 같은 추가 정보가 제어 워드에서 제거될 수 있으므로 압축을 더욱 향상시킬 수 있다.
흐름(200)에서, 컴파일링된 작업은 컴퓨팅 요소들의 어레이 내의 하나 이상의 컴퓨팅 요소들에 대한 서브작업들의 공간 할당(218)을 포함한다. 주어진 작업은 복수의 서브작업들을 포함할 수 있다. 서브작업들은 컴퓨팅 요소 가용성, 우선 작업, 작업 순서 등에 기초하여 컴퓨팅 요소들의 어레이 전체에 분포될 수 있다. 서브작업들의 공간 할당은 어레이의 로우 또는 컬럼 내에서 미사용 처리 요소들에 서브작업들을 할당하는 것을 포함할 수 있다. 흐름(200)에서, 공간 할당은 컴퓨팅 요소들의 어레이에서 유휴 컴퓨팅 요소 로우 및/또는 컬럼(220)을 제공한다. 즉, 서브작업들을 무작위 컴퓨팅 요소에 배정(assign)하는 대신 이미 배치된 컴퓨팅 요소들이 포함된 로우들 또는 컬럼들 내의 미사용 컴퓨팅 요소들에 서브작업들이 배정될 수 있다. 따라서 미사용 컴퓨팅 요소들은 "누적"되거나 컬럼들과 로우들로 수집될 수 있으며 컬럼들과 로우들은 불필요한 것으로 표시될 수 있다. 유휴 컴퓨팅 요소 로우들 및/또는 컬럼들을 제공하면 불필요한 로우들 및/또는 컬럼들에 대한 제어 워드들의 필요성을 제거하여 컴파일링된 제어 워드들을 압축할 수 있다.
흐름(200)에서, 컴파일링된 작업은 컴퓨팅 요소들의 어레이에 대한 계산(230)을 스케줄링한다. 컴퓨팅 요소들의 어레이에 대한 계산의 스케줄링은 스케줄링된 작업들 및 서브작업들에 따라 달라질 수 있다. 스케줄링은 우선 작업 또는 우선 순위, 컴퓨팅 요소 가용성, 데이터 가용성 등에 기초할 수 있다. 스케줄링은 컴퓨팅 요소들의 어레이의 시스템 관리를 기초로 할 수 있다. 실시예들에서, 스케줄링된 계산은 컴퓨팅 요소 배치(placement), 결과들 라우팅, 및 컴퓨팅 요소들의 어레이 내의 계산 파면(wave-front) 전파(propagation)를 포함한다. 스케줄링은 또한 전력 소비, 열 소산, 처리 속도 등에 기초될 수 있다. 흐름(200)은 컴퓨팅 요소들의 어레이 내에서 라우팅 및 스케줄링(240)을 결정하는 것을 포함할 수 있다. 라우팅 및 스케줄링을 결정하는 것은 컴퓨팅 요소들의 둘 이상의 사이에서 가장 짧은 통신 경로들을 선택; 컴퓨팅 요소들에 액세스할 수 있는 하나 이상의 캐시 레벨들 내에서 데이터를 정리; 하나 이상의 캐시 레벨들 이상으로 스토리지에 대한 액세스를 최소화; 등을 하는 것을 기초로 할 수 있다. 계산 파면은 요소가 그를 통과하는 데이터를 실제로 조작하지 않고 요소를 통한 라우팅을 포함할 수 있다. 예를 들어 산술 로직 유닛(ALU)는 라우팅된 정보가 그대로 통과하도록 허용할 수 있다. 마찬가지로, 요소 간 통신을 위한 링버스(ringbus) 구조는 라우팅된 정보가 그대로 통과하도록 허용할 수 있다. 또한 계산 파면은 컴퓨팅 어레이 시스템의 메모리 요소 내에 일시적으로 "파킹"된 데이터, 즉 나중에 사용하기 위해 저장된 데이터를 포함할 수 있다. 예를 들어 임시 파킹은 링버스 레지스터, 로컬 메모리 요소, 컴퓨팅 요소 메모리 등에서 발생할 수 있다. 흐름(200)의 다양한 단계들은 개시된 개념을 벗어나지 않는 내에서 순서 변경, 반복, 생략 등이 될 수 있다. 흐름(200)의 다양한 실시예들은 하나 이상의 프로세서들에 의해 실행 가능한 코드를 포함하는 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품에 포함될 수 있다.
도 3은 얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도를 도시한다. 얕은 파이프라인은 주로 본 명세서에 개시된 압축된 제어 워드 페치 및 압축해제 기능들을 위한 파이프라인을 지칭한다. 고도의 병렬 아키텍처는 컴퓨팅 요소들, 처리 요소들, 버퍼들, 하나 이상의 캐시 스토리지의 레벨들, 시스템 관리, 산술 로직 유닛들, 승수들 등을 포함하는 컴포넌트들을 포함할 수 있다. 다양한 컴포넌트들을 사용하여 작업 처리를 달성할 수 있으며 여기서 작업 처리는 프로그램 실행, 일(job) 처리 등과 관련된다. 작업 처리는 얕은 파이프라인을 갖는 병렬 처리 아키텍처를 사용하여 가능해진다. 컴퓨팅 요소들의 2-차원(2D) 어레이가 액세스되며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공되며, 여기서 제어는 컴파일러에 의해 생성된 폭넓은, 가변적인 길이의 마이크로코드 제어 워드들 스트림에 의해 가능해진다. 제어 워드들은 요소별로 압축해제된다. 또한 다음 압축된 제어 워드(CCW) 페치 어드레스, 대기열들 및 다른 요소들에 대한 제어 정보, 위험 감지 로직에 대한 정보 등과 같이 주어진 제어 요소와 연관되지 않은 제어 워드에 글로벌 제어 정보(global control information)가 있을 수 있다. 압축해제를 기초로 한 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다.
얕은 파이프라인을 갖는 고도의 병렬 아키텍처에 대한 시스템 블록도(300)가 도시되어 있다. 시스템 블록도는 컴퓨팅 요소 어레이(310)를 포함할 수 있다. 컴퓨팅 요소 어레이(310)는 컴퓨팅 요소들에 기초할 수 있으며, 여기서 컴퓨팅 요소들은 프로세서들, 중앙 처리 장치들(CPU), 그래픽 처리 장치들(GPU), 코프로세서(coprocessor)들 등을 포함할 수 있다. 컴퓨팅 요소들은 주문형 집적 회로들(ASIC)과 같은 칩들에 구성된 처리 코어들, 필드 프로그래밍 가능 게이트 어레이들(FPGA)과 같은 프로그래밍 가능한 칩들에 프로그래밍된 처리 코어들 등을 기초로 할 수 있다. 컴퓨팅 요소들은 컴퓨팅 요소들의 동종 어레이들을 포함할 수 있다. 시스템 블록도(300)는 변환 및 룩어사이드(look-aside) 버퍼들(312 및 338)과 같은 변환 및 룩어사이드 버퍼들을 포함할 수 있다. 변환 및 룩어사이드 버퍼들은 메모리 캐시를 포함할 수 있으며, 여기서 메모리 캐시들은 스토리지 액세스 시간들을 줄이기 위해 사용될 수 있다. 시스템 블록도는 로드 및 액세스 순서와 선택을 위한 로직을 포함할 수 있다. 로드 및 액세스 순서 및 선택을 위한 로직은 로직(314) 및 로직(340)을 포함할 수 있다. 로직(314 및 340)은 각각의 하부 데이터 블록(316, 318 및 320) 및 상부 데이터 블록(342, 344 및 346)에 대한 로드 및 액세스 순서 및 선택을 달성할 수 있다. 이 레이아웃 기술은 액세스 대역폭을 두 배로 늘리고 상호연결 복잡성을 감소하는 등을 할 수 있다. 로직(340)은 대기열들, 어드레스 생성기들 및 승수 유닛들(347) 컴포넌트를 통해 컴퓨팅 요소 어레이(310)에 결합될 수 있다. 동일한 방식으로, 로직(314)은 대기열들, 어드레스 생성기들 및 승수 유닛들(317) 컴포넌트를 통해 컴퓨팅 요소 어레이(310)에 결합될 수 있다.
시스템 블록도는 액세스 큐들을 포함할 수 있다. 액세스 큐들은 액세스 큐들(316 및 342)을 포함할 수 있다. 액세스 큐들은 데이터를 저장하고 데이터를 로딩하기 위해 캐시들, 스토리지 등에 액세스하기 위한 요청들을 큐잉하기 위해 사용될 수 있다. 시스템 블록도는 L1 캐시들(318 및 344)과 같은 레벨 1(L1) 데이터 캐시들을 포함할 수 있다. L1 캐시들은 함께 처리될 데이터, 순차적으로 처리될 데이터 등과 같은 데이터의 블록들을 저장하는 데 사용될 수 있다. L1 캐시는 컴퓨팅 요소들 및 다른 컴포넌트들에 의해 빠르게 액세스 가능한 작고 빠른 메모리를 포함할 수 있다. 시스템 블록도는 레벨 2(L2) 데이터 캐시들을 포함할 수 있다. L2 캐시들은 L2 캐시들(320 및 346)를 포함할 수 있다. L2 캐시들은 L1 캐시들에 비해 더 크고 느린 스토리지를 포함할 수 있다. L2 캐시들은 "다음"(next-up) 데이터, 중간 결과들과 같은 결과들 등을 저장할 수 있다. L1 및 L2 캐시들은 레벨 3(L3) 캐시들에 추가로 결합될 수 있다. L3 캐시들은 L3 캐시들(322, 348)을 포함할 수 있다. L3 캐시들은 L2 및 L1 캐시보다 클 수 있으며 더 느린 스토리지를 포함할 수 있다. L3 캐시들에서 데이터에 액세스하는 것이 메인 스토리지에 액세스하는 것보다 여전히 빠르다. 실시예들에서, L1, L2 및 L3 캐시들은 4-방향 세트 연관 캐시들을 포함할 수 있다.
블록도(300)는 시스템 관리 버퍼(324)를 포함할 수 있다. 시스템 관리 버퍼는 컴퓨팅 요소들의 어레이(310)를 제어하는 데 사용될 수 있는 시스템 관리 코드들 또는 제어 워드들을 저장하는 데 사용될 수 있다. 시스템 관리 버퍼는 오피코드(opcode)들, 코드들, 루틴들, 함수들 등을 보관하는 데 사용될 수 있고 이는 작업들 처리 등을 위한 병렬 아키텍처의 예외 또는 오류 취급, 관리 등에 사용될 수 있다. 시스템 관리 버퍼는 압축해제기(decompressor)(326)에 결합될 수 있다. 압축해제기는 시스템 관리 압축된 제어 워드 버퍼(328)로부터 시스템 관리 압축된 제어 워드들(CCW)을 압축해제하는 데 사용될 수 있고 압축해제된 시스템 관리 제어 워드들을 시스템 관리 버퍼(324)에 저장할 수 있다. 압축된 시스템 관리 제어 워드들은 압축되지 않은 제어 워드들보다 적은 스토리지를 필요로 할 수 있다. 시스템 관리 CCW 컴포넌트(328)는 또한 스필(spill) 버퍼를 포함할 수 있다. 스필 버퍼는 다수의 중첩(nested) 레벨들의 예외들을 지원하는 데 사용할 수 있는 대형 정적 랜덤 액세스 메모리(SRAM)를 포함할 수 있다.
컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들은 제어 유닛(330)과 같은 제어 유닛에 의해 제어될 수 있다. 컴파일러가 제어 워드를 통해 개별 요소들을 제어하는 동안 제어 유닛은 새로운 제어 워드들이 어레이내로 구동되지 않도록 어레이를 일시 중지할 수 있다. 제어 유닛은 압축해제기(332)로부터 압축해제된 제어 워드를 수신할 수 있다. 압축해제기는 컴퓨팅 요소의 로우들 또는 컬럼들을 활성화 또는 유휴 상태로 설정하거나 개별 컴퓨팅 요소들을 활성화 또는 유휴 상태로 설정하거나 제어 워드들을 개별 컴퓨팅 요소들로 송신하기 위해 제어 워드를 압축해제할 수 있다(아래에서 논의). 압축해제기는 압축된 제어 워드 캐시1(CCWC1)(334)과 같은 압축된 제어 워드 저장소에 결합될 수 있다. CCWC1은 하나 이상의 압축된 제어 워드들을 포함하는 L1 캐시와 같은 캐시를 포함할 수 있다. CCWC1은 압축된 제어 워드 캐시2(CCWC2)(336)와 같은 추가적인 압축된 제어 워드 저장소에 결합될 수 있다. CCWC2는 압축된 제어 워드들에 대한 L2 캐시로 사용될 수 있다. CCWC2는 CCWC1보다 크고 느릴 수 있다. 실시예들에서, CCWC1 및 CCWC2는 4-방향 세트 연관성을 포함할 수 있다. 실시예들에서, CCWC1 캐시는 압축해제된 제어 워드들을 포함할 수 있으며, 이 경우 DCWC1로 지정될 수 있다. 그 경우에, 압축해제기(332)는 CCWC1(334)(이제 DCWC1)과 CCWC2(336) 사이에 결합될 수 있다.
도 4는 컴퓨팅 요소 어레이 상세(400)를 도시한다. 컴퓨팅 요소 어레이는 컴퓨팅 요소들이 하나 이상의 작업들, 서브작업들 등을 처리할 수 있도록 하는 컴포넌트들에 결합될 수 있다. 컴포넌트들은 데이터에 액세스 및 이를 제공하고 특정 고속 동작들을 수행할 수 있다. 컴퓨팅 요소 어레이 및 그의 관련 컴포넌트들은 얕은 파이프라인을 갖는 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소 어레이(410)는 다양한 처리 작업들을 수행할 수 있으며, 여기서 처리 작업들은 산술, 벡터 또는 행렬 동작과 같은 동작들; 오디오 및 비디오 처리 동작들; 신경 네트워크 동작들; 등을 포함할 수 있다. 컴퓨팅 요소 어레이(410)의 각각의 컴퓨팅 요소는 하나 이상의 스크래치패드(scratchpad) 메모리 요소들(411)을 포함할 수 있다. 스크래치패드 메모리 요소들은 컴퓨팅 요소의 필수적인 부분이 될 수 있다. 스크래치패드 메모리 요소들은 개별 컴퓨팅 요소에 대한 레벨 0(L0) 캐시로 기능할 수 있다. 스크래치패드 메모리 요소들은 각각의 개별 CE에 대한 레지스터 파일들로 기능할 수 있다. 컴파일러는 복수의 CE 레지스터 파일들을 더 크고 포트가 많은 레지스터 파일로 조직할 수 있다.
컴퓨팅 요소들은 하부 승수 유닛들(412) 및 상부 승수 유닛들(414)과 같은 승수 유닛들에 결합될 수 있다. 승수 유닛들은 일반적인 처리 작업들 관련된 고속 곱셈들, 딥 러닝 네트워크들과 같은 신경망들과 관련된 곱셈들, 벡터 동작들과 관련된 곱셈들 등을 수행하는 데 사용될 수 있다. 컴퓨팅 요소들은 로드 큐들(416) 및 로드 큐들(418)과 같은 로드 큐들에 결합될 수 있다. 앞에서 설명한 대로 로드 큐들은 L1 데이터 캐시들에 결합될 수 있다. 로드 큐들은 컴퓨팅 요소들로부터 스토리지 액세스 요청들을 로딩하는 데 사용할 수 있다. 로드 큐들은 예상 로드 대기 시간을 추적할 수 있으며 로드 대기 시간들이 임계치를 초과하면 제어 유닛에 통지할 수 있다. 제어 유닛의 통지를 사용하여 로드가 예상 시간 내에 도착하지 않을 수 있음을 시그널링할 수 있다. 로드 큐들은 컴퓨팅 요소들의 어레이를 일시 중지하는 데 더 사용할 수 있다. 로드 큐들은 전체 어레이를 일시 중지하는 제어 유닛에 일시 중지 요청을 보낼 수 있으며 개별 요소들은 제어 워드의 제어하에 유휴 상태가 될 수 있다. 요소가 명시적으로 제어되지 않으면, 이는 유휴(또는 저전력) 상태에 놓일 수 있다. 아무 동작도 수행되지 않지만, 링 버스들은 나머지 어레이가 제대로 동작할 수 있도록 "패스 스루(pass thru)" 모드에서 계속 동작할 수 있다. 컴퓨팅 요소가 ALU를 통해 변경되지 않은 데이터를 라우팅하는 데만 사용되는 경우, 이는 여전히 활성 상태로 간주된다.
컴퓨팅 요소들의 어레이가 일시정지된 동안 메모리들로부터 어레이의 백그라운드 로딩(데이터 및 제어 워드)이 수행될 수 있다. 메모리 시스템들은 자유롭게 운영될 수 있으며 어레이가 일시 중지된 동안에도 계속 동작할 수 있다. 제어 신호 전송으로 인해 추가적인 "데드 타임(dead time)"이 발생할 수 있는 다수-사이클 대기 시간이 발생할 수 있으므로 메모리 시스템이 어레이에 "도달"(reach into)하여 어레이가 일시 중지되어 있는 동안 로드 데이터를 적절한 스크래치패드 메모리들에 전달할 수 있도록 하는 것이 유리할 수 있다. 이 메커니즘은 컴파일러에 관한 한 어레이 상태가 알려지도록 동작할 수 있다. 일시 중지 후 어레이 동작이 재개되면 컴파일러가 정적으로 스케줄링된 모델을 유지 관리하는 데 필요한 새로운 로드 데이터가 스크래치패드에 도착한다.
도 5는 어레이 로우 제어 디코드를 도시한다. 압축된 제어 워드와 같은 제어 워드는 압축해제되고 디코딩될 수 있다. 디코딩된 제어 워드는 컴퓨팅 요소들의 어레이의 로우 또는 컬럼 내에서 컴퓨팅 요소들에게 제어를 제공하는 데 사용될 수 있다. 어레이 로우 제어 디코드는 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소들의 2-차원(2D) 어레이가 액세스되며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공되며, 여기서 제어는 컴파일러에서 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해진다. 제어 워드들은 요소별로 압축해제되고 압축해제를 기초하여 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다.
컴퓨팅 요소 어레이 로우 제어 디코드에 대한 예가 500에 도시된다. 로우 디코드는 로우 유효(valid) 필드 V(510)를 포함할 수 있다. 로우 유효 필드는 컴퓨팅 요소들의 어레이내의 컴퓨팅 요소들의 로우가 유효한지(V = 1) 또는 무효한자(invalid)(V = 0)를 나타내는 데 사용될 수 있다. V가 0이면 컴퓨팅 요소들의 로우가 유휴 상태이고 유휴 제어 워드가 디코딩되어 컴퓨팅 요소들의 로우 내의 모든 컴퓨팅 요소들로 송신될 수 있다. 로우 제어 디코드는 반복 필드 R(512)을 포함할 수 있다. 반복 필드는 로우 내의 각각의 컴퓨팅 요소에 대한 제어 워드가 컴퓨팅 요소에 고유한지(R = 0) 또는 요소들 간에 제어 워드들이 공유되거나 반복될 수 있는지 여부를 나타내는 데 사용될 수 있다. 제어 워드는 요소 유효(EV) 비트(514)와 연관될 수 있다. EV 비트가 설정되지 않은 경우(예를 들어, 0과 같음) 유휴 비트가 송신될 수 있고 이전 제어 워드가 주어진 컴퓨팅 또는 어레이 내의 다른 요소로 보내질 수 있다. 로우 유효 V, 반복 R 및 요소 유효(EV)를 기초로 수행될 수 있는 다양한 기능들이 516에 도시된다. 다양한 기능들은 모든 요소에 대한 유휴 비트들 송신, 주어진 요소에 대한 유휴 비트 송신, 고유한 제어 워드 송신 및 주어진 요소에 대한 반복 제어 워드 송신을 포함할 수 있다.
도 6은 단일 제어 워드 로우(600)에 대한 예시 인코딩을 예시한다. 컴퓨팅 요소들의 로우 내의 컴퓨팅 요소들과 같은 요소들은 일부 또는 모두의 컴퓨팅 요소들이 작업 처리에 대해 가능해질 수 있도록 제어될 수 있다. 주어진 컴퓨팅 요소가 활성인지 여부에 대한 결정은 각각의 컴퓨팅 요소와 연관된 요소 유효(EV) 비트와 같은 비트를 기초로 할 수 있다. 실시예들에서, 컴퓨팅 요소들의 어레이의 로우 내의 모든 컴퓨팅 요소들은 유휴 상태를 유지할 수 있다. 컴퓨팅 요소들의 로우는 계류 중인(pending) 데이터, 계류 중인 처리 작업들 등으로 인해 유휴 상태로 유지할 수 있다. 실시예들에서, 유휴 컴퓨팅 요소 로우는 제어 워드의 단일 비트에 의해 제어될 수 있다. 단일 제어 비트는 선행(leading) 제어 비트를 포함할 수 있다. 실시예들에서, 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들의 컬럼은 유휴 상태일 수 있고, 유휴 컴퓨팅 요소 컬럼은 제어 워드의 단일 비트에 의해 제어될 수 있다. 단일 컴퓨팅 요소 로우에 대한 제어 워드 인코딩은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소들의 2-차원(2D) 어레이가 액세스된다. 컴퓨팅들의 요소 어레이에 대한 제어는 사이클별로 제공되며, 여기서 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해진다. 제어 워드들은 요소별로 압축해제되고 컴파일링된 작업이 컴퓨팅 요소들의 어레이에서 실행된다.
단일 컴퓨팅 요소 로우에 대한 예시 인코딩이 도시된다. 인코딩은 컴퓨팅 요소들의 주어진 로우가 유휴 상태인지를 나타내는 데 사용될 수 있는 단일 비트(610)를 포함할 수 있다. 유사하게, 컴퓨팅 요소들의 주어진 컬럼이 유휴 상태인지 또는 아닌지를 나타내기 위해 단일 비트가 포함될 수 있다(도시되지 않음). 인코딩은 컴퓨팅 요소들의 로우 또는 컬럼 내의 각각의 컴퓨팅 요소와 연관된 요소 유효(EV) 비트들과 같은 비트들을 포함할 수 있다. 컴퓨터 요소들과 연관된 예시 비트들은 612, 614 및 616을 포함한다. 예시 인코딩에서, 비트(612)에 의해 참조되는 컴퓨팅 요소는 유휴(=0)일 수 있다. 비트들(614 및 616)에 의해 참조되는 비트들은 활성(= 1)일 수 있다. 따라서 예시 인코딩은 컴퓨팅 요소들의 로우 내의 두 컴퓨팅 요소들이 활성 상태인 반면 로우 내의 다른 컴퓨팅 요소들은 유휴 상태를 유지하는 것을 나타낼 수 있다. 단일 컴퓨팅 요소 로우에 대한 예시 인코딩은 컴퓨팅 요소 제어 워드 비트들에 대한 필드들 또는 "묶음들"을 포함할 수 있다. 필드(620)와 필드(622)의 두 가지 예시 필드들이 도시된다. 제어 워드 묶음들은 요소의 유형에 대한 제어 비트들을 포함할 수 있으며 여기서 요소의 유형은 컴퓨팅 요소, 곱하기(multiply) 요소 등을 포함할 수 있다.
도 7은 예시 압축된 제어 워드 크기들을 도시한다. 컴퓨팅 요소들의 어레이 내에서 컴퓨팅 요소들을 제어하는 데 사용되는 제어 워드들은 컴파일러에 의해 생성될 수 있다. 컴파일링된 제어 워드들과 연관된 스토리지 요구 사항들을 감소시키기 위해 생성된 제어 워드들이 압축될 수 있다. 압축된 제어 워드들은 압축해제될 수 있으며 압축해제된 제어 워드들은 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들을 제어하는 데 사용될 수 있다. 압축된 제어 워드들은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소들의 2D 어레이는 액세스된다. 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려져 있으며 어레이내의 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공된다. 제어 워드들은 요소별로 압축해제되고 컴파일링된 작업이 컴퓨팅 요소들의 어레이에서 실행된다.
컴퓨팅 요소들의 어레이를 제어하기 위해 제공된 제어 워드들은 압축(700)될 수 있다. 주어진 제어 워드의 목적과 컴퓨팅 요소들 및 주어진 제어 워드와 관련된 다른 요소들의 수들에 따라 압축의 다양한 양들이 달성될 수 있다. 제어 워드에 대해 달성될 수 있는 압축들은 x86 명령어(instruction)와의 비교와 같은 베이스라인(baseline)와 비교될 수 있다. 제어 워드들은 제어 워드들의 스토리지와 연관하여 컴퓨팅 요구 사항들의 어레이에 대한 컴퓨팅의 요구 사항들을 감소시키기 위해 압축된다. 예시 압축된 제어 워드(CCW)는 "일시 중지"(710)를 포함할 수 있다. 일시 중지는 컴퓨팅 요소(CE)들의 어레이의 동작을 중단하고 일시 중지 동안 어떠한 동작들도 수행되지 않는다. 일시 중지는 컴퓨팅 요소들에 의해 처리될 데이터에 액세스할 때 캐시 누락으로 인해 발생할 수 있는 중단(stall)들을 취급하는데 사용될 수 있다. CCW는 어레이 내의 CE들(712)의 다수의 로우들을 제어할 수 있다. CCW는 다수의 CE들(714)을 제어할 수 있으며, 여기서 CE들은 로우 내에 CE들을 포함할 수 있다. CE들은 처리 요소 유효(EV) 비트에 의해 제어될 수 있다. 한 번에 더 많은 CE들의 로우들을 제어하면 CCW의 EV 비트들과 관련하여 규모의 경제를 달성한다. CCW는 곱하기 요소들(ME)(716)의 수와 상부 곱하기 요소들(ME)(718)이 사용되는지 여부를 제어할 수 있다. 예시에서 ME들의 수는 32개의 ME들을 포함할 수 있다. CCW는 다수의 어드레스 생성 유닛들(AGU)(720)을 제어할 수 있다. 증가하는 AGU 수들은 증가하는 컴퓨팅 요소들 수와 연관될 수 있다. CCW는 상부 AGU들(722) 및 하부 AGU들(도시되지 않음)을 제어할 수 있다. CCW는 다수의 로드 동작들(LD)(724) 및 다수의 저장(ST)(726) 동작들을 제어할 수 있다. LD 및 ST 동작들의 수는 CE들에서 처리되는 작업들의 유형들에 따라 달라질 수 있다.
압축된 제어 워드의 크기는 달라질 수 있다(728). 실시예들에서, 제어 워드는 복수의 제어 워드들 내에 제어 워드를 포함할 수 있으며, 여기서 제어 워드들은 컴파일러에 의해 생성된 폭넓은 가변적인 마이크로코드 제어 워드들의 스트림을 포함한다. CCW의 비트들에서 크기는 CE들, ME들, AGU들, 컴퓨팅 요소들의 어레이 내에서 컴퓨팅 요소들에 의해 수행되는 LD 및 ST 동작들의 수에 기초하여 달라질 수 있다. x86 명령어와 같은 베이스라인에 대해 제어 워드에 대해 달성될 수 있는 압축량(730)은 주어진 CCW와 연관된 CE들, ME들, AGU들, 데이터 동작들 등의 수에 따라 달라진다. CCW에 의해 수행되는 제어의 복잡성에 기초하여 압축량 또는 압축 인자(factor)가 감소될 수 있다.
도 8은 예시 압축해제된 제어 워드 필드들을 도시하는 표(table)이다. 전체적으로 논의된 바와 같이 컴퓨팅 요소들의 어레이에 제어가 제공될 수 있다. 어레이의 제어는 마이크로코드 제어 워드들의 스트림에 의해 가능하며 여기서 마이크로코드 제어 워드들은 컴파일러에 의해 생성될 수 있다. 복수의 필드들을 포함하는 마이크로코드 제어 워드는 스토리지 요구 사항들을 감소하기 위해 압축된 포맷으로 저장될 수 있다. 컴퓨팅 요소들의 어레이 내에서 하나 이상의 컴퓨팅 요소들을 제어할 수 있도록 압축된 제어 워드는 압축해제될 수 있다. 압축해제된 제어 워드의 필드들은 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 가능하게 한다. 컴퓨팅 요소들의 2차원(2D) 어레이가 액세스되며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 인접한 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소들의 어레이에 대한 제어는 사이클별로 제공되며, 여기서 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해진다. 제어 워드들은 요소별로 압축해제되므로 제어 워드는 일단 압축해제되면 전체 컴퓨팅 요소들의 어레이(또는 임의의 컴퓨팅 요소들의 서브세트)를 사이클별로 제어할 수 있다. 압축해제를 기초로 한 컴퓨팅 요소들의 어레이에서 컴파일링된 작업이 실행된다.
압축해제된 제어 워드에 대한 제어 워드 필드들을 묘사하는 표(800)가 도시된다. 압축해제된 제어 워드는 필드들(810)을 포함한다. 20개의 필드들이 도시되어 있지만, 다른 수들의 필드들이 압축해제된 제어 워드에 포함될 수 있다. 필드들의 수는 어레이 내의 컴퓨팅 요소들의 수, 컴퓨팅 요소들의 처리 능력들(capability), 컴파일러 능력들, 작업들 처리의 요구 사항들 등을 기초로 할 수 있다. 압축해제된 제어 워드 내의 각각의 필드는 목적 또는 기능(812)에 배정될 수 있다. 필드의 능력은 커맨드들, 데이터, 어드레스들 등을 제공하는 것, 제어하는 것 등을 포함할 수 있다. 실시예들에서, 압축해제된 제어 워드 내의 하나 이상의 필드들은 예비(spare) 비트들을 포함할 수 있다. 압축해제된 제어 워드 내의 각각의 필드는 크기(814)를 포함할 수 있다. 크기는 다수의 비트들을 기초로 할 수 있지만 니블(nibble)들, 바이트(byte)들 등과 같은 다른 비트 그룹화(grouping)가 지정(specify)될 수 있다. 코멘트들(816)은 압축해제된 제어 워드 내의 필드들과 연관될 수도 있다. 코멘트들은 주어진 필드의 목적, 기능 등을 더 설명한다.
도 9는 작업 처리에 대한 시스템 다이어그램이다. 작업 처리는 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처를 사용하여 수행된다. 시스템(900)은 명령어들을 저장하는 메모리(912)에 부착된 하나 이상의 프로세서들(910)을 포함할 수 있다. 시스템(900)은 데이터; 중간 단계들; 제어 워드들; 매우 긴 명령어 워드(VLIW) 기능성을 구현하는 제어 워드들; 수축기, 벡터, 사이클, 공간, 스트리밍 또는 VLIW 토폴로지들을 포함하는 토폴로지들; 등을 표시하기 위해 하나 이상의 프로세서들(910)에 결합된 디스플레이(914) 추가로 포함할 수 있다. 실시예들에서, 하나 이상의 프로세서들(910)이 메모리(912)에 결합되며, 여기서 하나 이상의 프로세서들은 저장된 명령어들을 실행할 때: 컴퓨팅 요소들의 2-차원(2D) 어레이를 액세스하고, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 이웃하는 컴퓨팅 요소들에 결합되며; 사이클별로 컴퓨팅 요소들의 어레이에 대한 제어를 제공하고, 여기서 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능하게 되고; 요소별로 제어 워드들의 압축을 해제하고; 압축해제를 기초로 한 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하도록 구성된다. 추가 실시예들은 컴퓨팅 요소들의 어레이와 연관된 캐시 내에서 제어 워드의 관련 부분들을 저장하는 것을 포함한다(아래에서 논의). 컴퓨팅 요소는 하나 이상의 집적 회로들 또는 칩들 내의 컴퓨팅 요소들; 주문형 집적 회로(ASIC)들과 같은 하나 이상의 프로그래밍 가능한 칩들 내에 구성된 컴퓨팅 요소들 또는 코어들; 필드 프로그래밍 가능 게이트 어레이들(FPGA); 메쉬(mesh)로 구성된 프로세서들; 스탠드어론(standalone) 프로세서들; 등을 포함할 수 있다.
시스템(900)은 캐시(920)를 포함할 수 있다. 캐시(920)는 데이터, 제어 워드들, 중간 결과들, 마이크로코드 등을 저장하는 데 사용될 수 있다. 캐시는 하나 이상의 컴퓨팅 요소들에서 이용가능하고 작고 로컬이며 쉽게 액세스가능한 메모리를 포함할 수 있다. 실시예들은 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 제어 워드의 관련 부분들을 저장하는 것을 포함한다. 캐시는 하나 이상의 컴퓨팅 요소들에 액세스될 수 있다. 실시예들에서, 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 포함한다. 즉, 2R1W 캐시는 판독과 기록 동작들이 서로 간섭하지 않고 두 개의 판독 동작들과 하나의 기록 동작을 동시에 발생하게 할 수 있다. 시스템(900)은 액세스 컴포넌트(930)를 포함할 수 있다. 액세스 컴포넌트(930)는 컴퓨팅 요소들의 2-차원(2D) 어레이에 액세스하기 위한 제어 로직 및 기능들을 포함할 수 있으며, 여기서 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 이웃하는 컴퓨팅 요소들에 결합된다. 컴퓨팅 요소는 하나 이상의 프로세서들, 프로세서 코어들, 프로세서 매크로들 등을 포함할 수 있다. 각각의 컴퓨팅 요소는 일정량의 로컬 스토리지를 포함할 수 있다. 로컬 스토리지는 하나 이상의 컴퓨팅 요소들에 액세스될 수 있다. 각각의 컴퓨팅 요소는 이웃들과 통신할 수 있으며 여기서 이웃들은 가장 가까운 이웃들 또는 더 먼 "이웃들"을 포함할 수 있다. 컴퓨팅 요소들 간의 통신은 산업 표준 버스, 링버스와 같은 버스, 컴퓨터 네트워크와 같은 네트워크를 사용하여 달성될 수 있다. 실시예들에서, 링버스는 분산 멀티플렉서(MUX)로서 구현된다. 다른 실시예들에서, 2R1W 캐시는 컴파일링된 작업에 대한 잠재적 분기(branch) 경로들의 동시 페치를 지원할 수 있다. 분기 제어 워드가 취하는 분기 경로는 데이터 종속적일 수 있으므로 선험적으로 알 수 없기 때문에 분기 제어 워드를 실행하기 전에 하나 이상의 분기 경로와 관련된 제어 워드들이 페치될 수 있다. 앞에서 논의한 바와 같이 두 분기 경로들의 초기 부분들은 일련의 제어 워드들에서 인스턴스화될 수 있다. 올바른 분기 경로가 결정되면 선택되지 않은 분기와 관련된 계산이 플러시 및/또는 무시될 수 있다.
시스템(900)은 제공 컴포넌트(940)를 포함할 수 있다. 제공 컴포넌트(940)는 사이클별로 컴퓨팅 요소들의 어레이에 대한 제어를 제공하기 위한 제어 및 기능들을 포함할 수 있으며, 여기서 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해진다. 컴퓨팅 요소들의 어레이의 제어는 다양한 컴퓨팅 동작들을 수행하도록 어레이를 구성하는 것을 포함할 수 있다. 컴퓨팅 동작들은 오디오 또는 비디오 처리, 인공 지능 처리, 딥 러닝 등을 가능하게 할 수 있다. 마이크로코드 제어 워드들은 연산코드 필드들, 데이터 필드들, 컴퓨팅 어레이 구성 필드들 등을 포함할 수 있다. 마이크로코드를 생성하는 컴파일러는 범용 컴파일러, 병렬화 컴파일러, 컴퓨팅 요소들의 어레이에 최적화된 컴파일러, 하나 이상의 처리 작업들을 수행하도록 특화된 컴파일러 등을 포함할 수 있다. 제어를 제공하는 것은 컴퓨팅 요소들의 어레이 내의 처리 토폴로지들과 같은 하나 이상의 토폴로지들을 구현할 수 있다. 실시예들에서, 컴퓨팅 요소들의 어레이는 수축기, 벡터, 사이클, 공간, 스트리밍 또는 매우 긴 명령어 워드(VLIW) 토폴로지를 포함할 수 있다. 다른 토폴로지들은 신경망 토폴로지를 포함할 수 있다. 어레이 내의 하나 이상의 컴퓨팅 요소들과 연관될 수 있는 제어 워드는 단일 컴퓨팅 요소에 의해 저장될 필요가 없다. 실시예들에서, 캐시(920)는 제어 워드가 컴퓨팅 요소들의 어레이의 한 로우에 걸쳐 분포될 수 있게 한다.
시스템(900)은 압축해제 컴포넌트(950)를 포함할 수 있다. 압축해제 컴포넌트(950)는 요소별로 제어 워드들을 압축해제하기 위한 제어 로직 및 기능들을 포함할 수 있으며, 여기서 각각의 제어 워드는 복수의 컴퓨팅 요소 제어 그룹들 또는 묶음들을 포함할 수 있다. 하나 이상의 제어 워드들이 캐시와 같은 메모리 내에 압축된 형식으로 저장될 수 있다. 제어 워드들의 압축은 스토리지 요구 사항들, 디코딩 컴포넌트들의 복잡성 등을 감소시킬 수 있다. 실질적으로 유사한 압축해제 기술이 사용되어 각각의 컴퓨팅 요소에 대한 제어 워드들을 압축해제하거나 하나 이상의 압축해제 기술이 사용될 수 있다. 제어 워드들의 압축은 컴퓨팅 요소들의 어레이와 연관된 컴퓨팅 사이클을 기초로 할 수 있다. 실시예들에서, 압축해제는 캐시 외부에서 사이클별로 발생할 수 있다. 하나 이상의 컴퓨팅 요소들에 대한 제어 워드들의 압축해제는 사이클별로 발생할 수 있다. 다른 실시예들에서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생할 수 있다.
시스템(900)은 실행 컴포넌트(960)를 포함할 수 있다. 실행 컴포넌트(960)는 압축해제에 기초하여 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하기 위한 제어 로직 및 기능들을 포함할 수 있다. 일 처리와 연관된 많은 작업들 중 하나일 수 있는 컴파일링된 작업은 컴퓨팅 요소들의 어레이 내의 하나 이상의 컴퓨팅 요소들에서 실행될 수 있다. 실시예들에서, 컴파일링된 작업을 실행하는 것은 실행을 병렬화하기 위해 컴퓨팅 요소들에 걸쳐 분산될 수 있다. 컴파일링된 작업을 실행하는 것은 다중 데이터세트들(예를 들어 단일 명령어 다수의 데이터 또는 SIMD 실행)을 처리하기 위한 작업들을 실행하는 것을 포함할 수 있다. 실시예들은 둘 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행을 제공하는 것을 포함할 수 있다. 두 개 이상의 잠재적인 컴파일링된 작업 결과들은 하나 이상의 분기 경로들, 데이터 등을 기초로 할 수 있다. 실행하는 것은 하나 이상의 제어 워드들을 기초로 할 수 있다. 실시예들에서, 동일한 제어 워드는 주어진 사이클에서 컴퓨팅 요소들의 어레이에 걸쳐 실행될 수 있다. 작업들을 실행하는 것은 컴퓨팅 요소들의 어레이 전체에 위치한 컴퓨팅 요소들에 의해 수행될 수 있다. 실시예들에서, 2개 이상의 잠재적인 컴파일링된 결과들은 컴퓨팅 요소들의 어레이 내에서 공간적으로 분리된 컴퓨팅 요소들에서 실행될 수 있다. 공간적으로 분리된 컴퓨팅 요소들을 사용하면 감소된 스토리지, 버스 및 네트워크 경합; 컴퓨팅 요소들에 의해 감소된 전력 소산; 등을 가능하게 한다.
시스템(900)은 작업 처리를 위해 컴퓨터 판독가능 매체에 구현된 컴퓨터 프로그램 제품을 포함할 수 있으며, 컴퓨터 프로그램 제품은 하나 이상의 프로세서들이 컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하는 것-여기서, 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 컴퓨팅 요소들의 어레이 내의 이웃하는 컴퓨팅 요소들에 결합됨-; 사이클별로 컴퓨팅 요소들의 어레이에 대한 제어를 제공하는 것-여기서, 제어는 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능함-; 요소별로 제어 워드들을 압축해제하는 것; 및 압축해제에 기초하여 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하는 것의 동작들을 수행하게 하는 코드를 포함한다.
상기 방법(method)들의 각각은 하나 이상의 컴퓨터 시스템들 상의 하나 이상의 프로세서들에서 실행될 수 있다. 실시예들은 다양한 형태들의 분산 컴퓨팅(computing), 클라이언트/서버 컴퓨팅 및 클라우드 기반 컴퓨팅을 포함할 수 있다. 또한, 본 개시의 흐름 차트들에 함유된 묘사된 단계들 또는 박스들은 단지 예시적이고 설명적인 것임이 이해될 것이다. 단계들은 본 개시의 범위를 벗어나지 않고 수정, 생략, 반복 또는 재배열(re-order)될 수 있다. 또한 각각의 단계는 하나 이상의 서브-단계들이 함유할 수 있다. 전술한 도면들 및 설명은 개시된 시스템들의 기능적 양태들을 제시하지만, 명시적으로 언급되거나 문맥에서 달리 명확하지 않는 한 이러한 설명들로부터 어떤 소프트웨어 및/또는 하드웨어의 특정 구현 또는 배열(arrangement)도 추론되어서는 안 된다. 그러한 모든 소프트웨어 및/또는 하드웨어 배열들은 본 개시의 범위 내에 속하는 것으로 의도된다.
블록도들 및 흐름도 예시들은 방법들, 장치들, 시스템들 및 컴퓨터 프로그램 제품들을 묘사한다. 블록도들 및 흐름도들의 요소들 및 요소들의 조합들은 기능들, 단계들, 또는 방법들, 장치, 시스템들 컴퓨터 프로그램 제품들 및/또는 컴퓨터 구현 방법들의 단계들의 그룹들을 도시한다. 임의의 및 모든 일반적으로 본 명세서에서 "회로", "모듈" 또는 "시스템"이라고 지칭되는 기능들은 컴퓨터 프로그램 명령어들, 특수 목적 하드웨어 기반 컴퓨터 시스템들, 특수 목적 하드웨어와 컴퓨터 명령어들의 조합, 범용 하드웨어와 컴퓨터 명령어들의 조합들 등에 의해 구현될 수 있다.
상기 언급된 임의의 컴퓨터 프로그램 제품들 또는 컴퓨터 구현 방법들을 실행하는 프로그래밍 가능한 장치는 하나 이상의 마이크로프로세서들, 마이크로제어기들, 임베디드 마이크로제어기들, 프로그래밍 가능한 디지털 신호 프로세서들, 프로그래밍 가능한 디바이스들, 프로그래밍 가능한 게이트 어레이들, 프로그래밍 가능한 어레이 로직, 메모리 디바이스들, 애플리케이션 응용 집적 회로들 등을 포함할 수 있다. 각각은 컴퓨터 프로그램 명령어들을 처리하고, 컴퓨터 로직을 실행하고, 컴퓨터 데이터를 저장하는 등을 위해 적절하게 채용되거나 구성될 수 있다.
컴퓨터는 컴퓨터 판독 가능 저장 매체로부터의 컴퓨터 프로그램 제품을 포함할 수 있고 이 매체는 내장형 또는 외장형, 제거 가능 및 교체 가능 또는 고정형일 수 있음이 이해될 것이다. 또한, 컴퓨터는 본 명세서에서 설명된 소프트웨어 및 하드웨어를 포함하거나 인터페이스하거나 지원할 수 있는 기본 입력/출력 시스템(BIOS), 펌웨어, 동작 체제, 데이터베이스 등을 포함할 수 있다.
본 발명의 실시예들은 종래의 컴퓨터 애플리케이션들이나 이를 운영하는 프로그램 가능한 장치로 제한되지 않는다. 예시하면: 본원에 청구된 발명의 실시예들은 광학(optical) 컴퓨터, 양자(quantum) 컴퓨터, 아날로그 컴퓨터 등을 포함할 수 있다. 컴퓨터 프로그램은 컴퓨터에 로딩되어 묘사된 모든 기능들을 수행할 수 있는 특정 머신을 생성할 수 있다. 이 특정 머신은 묘사된 임의의 및 모든 기능들을 수행하기 위한 수단들을 제공한다.
하나 이상의 컴퓨터 판독 가능 매체들의 임의의 조합은: 스토리지에 대한 비일시적 컴퓨터 판독 가능 매체; 전자, 자기, 광학, 전자기(electromagnetic), 적외선 또는 반도체 컴퓨터 판독 가능 스토리지 매체 또는 이들의 임의의 적절한 조합; 휴대용 컴퓨터 디스켓; 하드 디스크; 랜덤 액세스 메모리(RAM); 판독 전용 메모리(ROM), 소거가능 프로그래밍 가능한 판독 전용 메모리(EPROM, Flash, MRAM, FeRAM 또는 상변화(phase change) 메모리); 광섬유; 휴대용 콤팩트 디스크; 광학 저장 장치; 자기 저장 장치; 또는 전술한 것의 적절한 조합을 포함하지만 이에 제한되지 않고 활용될 수 있다. 이 문서의 문맥에서 컴퓨터 판독 가능 저장 매체는 명령어 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 함유하거나 저장할 수 있는 임의의 유형의 매체일 수 있다.
컴퓨터 프로그램 명령어들은 컴퓨터 실행 가능 코드를 포함할 수 있음이 인식될 것이다. 컴퓨터 프로그램 명령어들을 표현하기 위한 다양한 언어들에는 C, C++, Java, JavaScriptTM, ActionScriptTM, 어셈블리 언어, Lisp, Perl, Tcl, Python, Ruby, 하드웨어 설명 언어들, 데이터베이스 프로그래밍 언어들, 함수형 프로그래밍 언어들, 명령형 프로그래밍 언어들 등을 포함할 수 있지만 이에 제한되지는 않는다. 실시예들에서, 컴퓨터 프로그램 명령어들은 컴퓨터, 프로그래밍 가능한 데이터 처리 장치, 프로세서들 또는 프로세서 아키텍처의 이기종(heterogeneous) 조합 등에서 운영하도록 저장, 컴파일링 또는 해석될 수 있다. 제한 없이, 본 발명의 실시예들은 클라이언트/서버 소프트웨어, 서비스로서의 소프트웨어, 피어 투 피어 소프트웨어 등을 포함하는 웹 기반 컴퓨터 소프트웨어의 형태를 취할 수 있다.
실시예들에서, 컴퓨터는 다수의 프로그램들 또는 스레드들을 포함하는 컴퓨터 프로그램 명령어들의 실행을 가능하게 할 수 있다. 다수의 프로그램들 또는 스레드들은 대략 동시에 처리되어 프로세서의 활용도를 높이고 실질적으로 동시적인 기능들을 촉진할 수 있다. 구현 방식에 의해, 본 명세서에 기술된 임의의 및 모든 방법들, 프로그램 코드들, 프로그램 명령어들 등은 하나 이상의 스레드들에서 구현될 수 있으며, 이는 차례로 그들과 연관된 우선 순위들을 가질 수 있는 다른 스레드들을 생성할 수 있다. 일부 실시예들에서, 컴퓨터는 우선순위 또는 다른 순서에 기초하여 이들 스레드들을 처리할 수 있다.
명시적으로 언급되거나 문맥상 달리 명확하지 않은 한, 동사 "실행" 및 "처리"는 실행, 처리, 해석, 컴파일, 조립, 링크, 로드 또는 이들의 조합을 나타내기 위해 상호교환적으로 사용될 수 있다. 따라서, 컴퓨터 프로그램 명령어들, 컴퓨터 실행 가능 코드 등을 실행하거나 처리하는 실시예들은 설명된 임의의 및 모든 방식들로 명령어들 또는 코드에 따라 행동할 수 있다. 또한, 도시된 방법 단계들은 하나 이상의 파티들 또는 엔티티들이 단계들을 수행하게 하는 임의의 적절한 방법을 포함하도록 의도된다. 단계 또는 단계의 부분을 수행하는 파티들은 특정 지리적 위치 또는 국가 경계 내에 위치될 필요가 없다. 예를 들어, 미국 내에 위치된 엔티티가 방법 단계 또는 그 부분이 미국 외부에서 수행되도록 하는 경우 해당 방법은 원인 엔티티에 의해 미국에서 수행되는 것으로 고려된다.
본 발명은 상세히 설명되고 도시된 바람직한 실시예들과 관련하여 개시되었지만, 이에 대한 다양한 수정들 및 개선들이 당업자에게 자명할 것이다. 따라서, 전술한 예들은 본 발명의 사상 및 범위를 제한하지 않아야 하며; 오히려 그것은 법이 허용하는 가장 넓은 의미로 이해되어야 한다.

Claims (46)

  1. 작업 처리를 위한 프로세서 구현 방법으로서,
    컴퓨팅 요소(compute element)들의 2차원(2D) 어레이에 액세스하는 단계-여기서, 상기 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러(compiler)에 알려지고 상기 컴퓨팅 요소들의 어레이 내의 그의 이웃하는 컴퓨팅 요소들에 결합됨-;
    사이클별로 상기 컴퓨팅 요소들의 어레이에 대한 제어를 제공하는 단계-여기서, 상기 제어는 상기 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드(microcode control word)들의 스트림(stream)에 의해 가능해짐-;
    요소별로 제어를 가능하게 하기 위해 상기 제어 워드들을 압축해제하는 단계; 및
    상기 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하는 단계를 포함하고, 상기 실행하는 단계는 상기 압축해제된 제어 워드에 기초하는, 방법.
  2. 제1항에 있어서, 상기 컴퓨팅 요소들의 어레이와 연관된 캐시(cache) 내에 상기 제어 워드의 관련 부분들을 저장하는 단계를 더 포함하는, 방법.
  3. 제2항에 있어서, 상기 압축해제는 상기 캐시로부터 사이클 단위로 발생하는, 방법.
  4. 제3항에 있어서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생하는, 방법.
  5. 제4항에 있어서, 상기 다수의 사이클들은 캐시 라인 페치 경계(cache line fetch boundary)에 걸쳐 있는 제어 워드를 수용하는, 방법.
  6. 제2항에 있어서, 상기 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 포함하는, 방법.
  7. 제6항에 있어서, 상기 2R1W 캐시는 상기 컴파일링된 작업에 대한 잠재적 분기 경로들의 동시 페치를 지원하는, 방법.
  8. 제2항에 있어서, 상기 캐시는 상기 제어 워드가 상기 컴퓨팅 요소들의 어레이의 한 로우(row)에 걸쳐 분산되는 것을 가능하게 하는, 방법.
  9. 제8항에 있어서, 상기 컴퓨팅 요소들의 어레이의 한 로우에 걸친 상기 분포는 한 사이클로 달성되는, 방법.
  10. 제1항에 있어서, 2개 이상의 잠재적인 컴파일링된 작업 결과들의 동시 실행을 제공하는 단계를 더 포함하는, 방법.
  11. 제10항에 있어서, 상기 2개 이상의 잠재적인 컴파일링된 작업 결과들은 계산 결과 또는 라우팅 제어를 포함하는, 방법.
  12. 제10항에 있어서, 상기 2개 이상의 잠재적인 컴파일링된 작업 결과들은 동일한 제어 워드에 의해 제어되는, 방법.
  13. 제12항에 있어서, 상기 동일한 제어 워드가 상기 컴퓨팅 요소들의 어레이에 걸쳐 주어진 사이클에서 실행되는, 방법.
  14. 제13항에 있어서, 상기 2개 이상의 잠재적인 컴파일링된 작업 결과들은 상기 컴퓨팅 요소들의 어레이 내의 공간적으로 분리된 컴퓨팅 요소들에서 실행되는, 방법.
  15. 제1항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이의 상기 컴퓨팅 요소들의 로우 내에서 불필요한(unneeded) 컴퓨팅 요소를 결정하는, 방법.
  16. 제15항에 있어서, 상기 불필요한 컴퓨팅 요소는 상기 제어 워드의 단일 비트에 의해 제어되는, 방법.
  17. 제1항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이 내의 하나 이상의 컴퓨팅 요소들에 대한 서브작업들의 공간 할당을 포함하는, 방법.
  18. 제17항에 있어서, 상기 공간 할당은 상기 컴퓨팅 요소들의 어레이의 유휴 컴퓨팅 요소 로우 및/또는 컬럼을 제공하는, 방법.
  19. 제18항에 있어서, 상기 유휴 컴퓨팅 요소 로우는 상기 제어 워드의 단일 비트에 의해 제어되는, 방법.
  20. 제18항에 있어서, 상기 유휴 컴퓨팅 요소 컬럼은 상기 제어 워드의 단일 비트에 의해 제어되는, 방법.
  21. 제1항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이에서 계산을 스케줄링하는, 방법.
  22. 제21항에 있어서, 상기 계산은 상기 컴퓨팅 요소들의 어레이 내에서 컴퓨팅 요소 배치, 결과 라우팅 및 계산 파면 전파를 포함하는, 방법.
  23. 제1항에 있어서, 상기 컴퓨팅 요소들의 어레이 내의 컴퓨팅 요소들은 동일한 기능을 갖는, 방법.
  24. 제1항에 있어서, 상기 컴퓨팅 요소들의 어레이는 수축기, 벡터, 사이클, 공간, 스트리밍 또는 VLIW(Very Long Instruction Word) 토폴로지를 포함하는, 방법.
  25. 제1항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스(instance)들을 포함하는, 방법.
  26. 제1항에 있어서, 상기 액세스하는 단계, 상기 제공하는 단계 및 상기 압축해제하는 단계는 슈퍼스태틱 프로세서 아키텍처(superstatic processor architecture)를 포함하는, 방법.
  27. 제1항에 있어서, 상기 컴파일링된 작업은 머신 러닝 기능(machine learning functionality)을 포함하는, 방법.
  28. 제27항에 있어서, 상기 머신 러닝 기능은 신경망(neural network) 구현을 포함하는, 방법.
  29. 작업 처리를 위해 컴퓨터 판독 가능 매체에 구현된 컴퓨터 프로그램 제품으로서, 상기 컴퓨터 프로그램 제품은 하나 이상의 프로세서(processor)들이:
    컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하는 것-여기서, 상기 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 상기 컴퓨팅 요소들의 어레이 내의 그의 이웃하는 컴퓨팅 요소들에 결합됨-;
    사이클별로 상기 컴퓨팅 요소들의 어레이에 대한 제어를 제공하는 것-여기서, 상기 제어는 상기 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해짐-;
    요소별로 제어를 가능하게 하기 위해 상기 제어 워드들을 압축해제하는 것; 및
    상기 압축해제된 제어 워드에 기초하여 상기 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하는 것의 동작들을 수행하게 하는 코드를 포함하는, 컴퓨터 프로그램 제품.
  30. 제29항에 있어서, 상기 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 상기 제어 워드의 관련 부분들을 저장하기 위한 코드를 더 포함하는, 컴퓨터 프로그램 제품.
  31. 제30항에 있어서, 상기 압축해제는 상기 캐시로부터 사이클 단위로 발생하는, 컴퓨터 프로그램 제품.
  32. 제31항에 있어서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생하는, 컴퓨터 프로그램 제품.
  33. 제32항에 있어서, 상기 다수의 사이클들은 캐시 라인 페치 경계에 걸친 제어 워드를 수용하는, 컴퓨터 프로그램 제품.
  34. 제30항에 있어서, 상기 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 포함하는, 컴퓨터 프로그램 제품.
  35. 제34항에 있어서, 상기 2R1W 캐시는 상기 컴파일링된 작업에 대한 잠재적 분기 경로들의 동시 페치를 지원하는, 컴퓨터 프로그램 제품.
  36. 제30항에 있어서, 상기 캐시는 상기 제어 워드가 상기 컴퓨팅 요소들의 어레이의 한 로우에 걸쳐 분산되는 것을 가능하게 하는, 컴퓨터 프로그램 제품.
  37. 제29항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 포함하는, 컴퓨터 프로그램 제품.
  38. 작업 처리를 위한 컴퓨터 시스템으로서,
    명령어를 저장하는 메모리;
    메모리에 결합된 하나 이상의 프로세서들을 포함하고, 상기 하나 이상의 프로세서들은 상기 저장된 명령어를 실행할 때:
    컴퓨팅 요소들의 2차원(2D) 어레이에 액세스하고-여기서, 상기 컴퓨팅 요소들의 어레이 내의 각각의 컴퓨팅 요소는 컴파일러에 알려지고 상기 컴퓨팅 요소들의 어레이 내의 그의 이웃하는 컴퓨팅 요소들에 결합됨-;
    사이클별로 상기 컴퓨팅 요소들의 어레이에 대한 제어를 제공하고-여기서, 상기 제어는 상기 컴파일러에 의해 생성된 폭넓은 가변적인 길이의 마이크로코드 제어 워드들의 스트림에 의해 가능해짐-;
    요소별로 제어를 가능하게 하기 위해 상기 제어 워드들을 압축해제하고; 및
    상기 압축해제된 제어 워드에 기초하여 상기 컴퓨팅 요소들의 어레이에서 컴파일링된 작업을 실행하도록 구성되는, 컴퓨터 시스템.
  39. 제38항에 있어서, 상기 컴퓨팅 요소들의 어레이와 연관된 캐시 내에 상기 제어 워드의 관련 부분들을 저장하기 위한 코드를 더 포함하는, 컴퓨터 시스템.
  40. 제39항에 있어서, 상기 압축해제는 상기 캐시로부터 사이클 단위로 발생하는, 컴퓨터 시스템.
  41. 제40항에 있어서, 단일 제어 워드의 압축해제는 다수의 사이클들에 걸쳐 발생하는, 컴퓨터 시스템.
  42. 제41항에 있어서, 상기 다수의 사이클들은 캐시 라인 페치 경계에 걸친 제어 워드를 수용하는, 컴퓨터 시스템.
  43. 제39항에 있어서, 상기 캐시는 이중 판독, 단일 기록(2R1W) 캐시를 포함하는, 컴퓨터 시스템.
  44. 제43항에 있어서, 상기 2R1W 캐시는 컴파일링된 작업에 대한 잠재적 분기 경로들의 동시 페치를 지원하는, 컴퓨터 시스템.
  45. 제39항에 있어서, 상기 캐시는 상기 제어 워드가 상기 컴퓨팅 요소 어레이의 한 로우에 걸쳐 분산되는 것을 가능하게 하는, 컴퓨터 시스템.
  46. 제38항에 있어서, 상기 컴파일링된 작업은 상기 컴퓨팅 요소들의 어레이 내에서 순환하는 다수의 프로그래밍 루프 인스턴스들을 포함하는, 컴퓨터 시스템.
KR1020237011992A 2020-09-09 2021-09-03 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처 KR20230082621A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063075849P 2020-09-09 2020-09-09
US63/075,849 2020-09-09
PCT/US2021/048964 WO2022055792A1 (en) 2020-09-09 2021-09-03 Highly parallel processing architecture with shallow pipeline

Publications (1)

Publication Number Publication Date
KR20230082621A true KR20230082621A (ko) 2023-06-08

Family

ID=80629976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237011992A KR20230082621A (ko) 2020-09-09 2021-09-03 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처

Country Status (3)

Country Link
EP (1) EP4211567A1 (ko)
KR (1) KR20230082621A (ko)
WO (1) WO2022055792A1 (ko)

Families Citing this family (1)

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

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102070199B1 (ko) * 2012-05-11 2020-01-28 삼성전자주식회사 재구성가능 프로세서 및 재구성가능 프로세서의 코드 압축해제 방법
KR102056730B1 (ko) * 2013-04-22 2019-12-17 삼성전자주식회사 Vliw 프로세서를 위한 명령어 압축 장치 및 방법과, 명령어 인출 장치 및 방법
CN109284131B (zh) * 2013-05-24 2023-05-30 相干逻辑公司 具有可编程优化的存储器-网络处理器
US10380009B2 (en) * 2015-02-27 2019-08-13 Walmart Apollo, Llc Code usage map
WO2018217222A1 (en) * 2017-05-26 2018-11-29 The Charles Stark Draper Laboratory, Inc. Machine intelligence and learning for graphic chip accessibility and execution

Also Published As

Publication number Publication date
EP4211567A1 (en) 2023-07-19
WO2022055792A1 (en) 2022-03-17

Similar Documents

Publication Publication Date Title
CN109522254B (zh) 运算装置及方法
US20220107812A1 (en) Highly parallel processing architecture using dual branch execution
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
US20220075627A1 (en) Highly parallel processing architecture with shallow pipeline
WO2023018477A1 (en) Parallel processing architecture using distributed register files
KR20230101851A (ko) 컴파일러를 이용한 고도의 병렬 처리 아키텍처
Zhang et al. Dynasparse: Accelerating gnn inference through dynamic sparsity exploitation
US20220075740A1 (en) Parallel processing architecture with background loads
US20220308872A1 (en) Parallel processing architecture using distributed register files
US20220291957A1 (en) Parallel processing architecture with distributed register files
US20230221931A1 (en) Autonomous compute element operation using buffers
US20240078182A1 (en) Parallel processing with switch block execution
US20230342152A1 (en) Parallel processing architecture with split control word caches
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
US20230350713A1 (en) Parallel processing architecture with countdown tagging
US20220374286A1 (en) Parallel processing architecture for atomic operations
US20240070076A1 (en) Parallel processing using hazard detection and mitigation
US20240168802A1 (en) Parallel processing with hazard detection and store probes
US20220214885A1 (en) Parallel processing architecture using speculative encoding
US20230281014A1 (en) Parallel processing of multiple loops with loads and stores
US20230376447A1 (en) Parallel processing architecture with dual load buffers
EP4229572A1 (en) Parallel processing architecture with background loads
WO2022251272A1 (en) Parallel processing architecture with distributed register files