KR102272839B1 - 재구성 가능한 특정 용도 컴퓨터 가속기 - Google Patents
재구성 가능한 특정 용도 컴퓨터 가속기 Download PDFInfo
- Publication number
- KR102272839B1 KR102272839B1 KR1020197023744A KR20197023744A KR102272839B1 KR 102272839 B1 KR102272839 B1 KR 102272839B1 KR 1020197023744 A KR1020197023744 A KR 1020197023744A KR 20197023744 A KR20197023744 A KR 20197023744A KR 102272839 B1 KR102272839 B1 KR 102272839B1
- Authority
- KR
- South Korea
- Prior art keywords
- processor
- data
- reconfigurable
- accelerator
- dataflow
- Prior art date
Links
- 239000000872 buffer Substances 0.000 claims description 50
- 230000006870 function Effects 0.000 claims description 23
- 230000004888 barrier function Effects 0.000 claims description 21
- 238000000034 method Methods 0.000 claims description 18
- 238000004891 communication Methods 0.000 claims description 7
- 230000004044 response Effects 0.000 claims description 3
- 230000001360 synchronised effect Effects 0.000 claims 2
- 238000012545 processing Methods 0.000 abstract description 29
- 230000008901 benefit Effects 0.000 abstract description 4
- 238000004364 calculation method Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4022—Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1689—Synchronisation and timing concerns
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7867—Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
- G06F15/7885—Runtime interface, e.g. data exchange, runtime control
- G06F15/7889—Reconfigurable logic implemented as a co-processor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/82—Architectures of general purpose stored program computers data or demand driven
- G06F15/825—Dataflow computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Mathematical Physics (AREA)
- Advance Control (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
Abstract
컴퓨터를 위한 재구성 가능한 하드웨어 가속기는, 프로그램 가능한 스위치의 네트워크에서 신속하게 재구성되는 프로그래밍 가능한 기능 유닛을 가지는 고속 데이터플로우 프로세서와, 간단한 스트림 명령을 수신한 후에 미리 정의된 액세스 패턴으로 메모리에 자율적으로 액세스할 수 있는 스트림 프로세서를 결합한다. 그 결과는 가속화할 수 있는 많은 특정 용도 프로그램과 연관된 병렬 처리를 활용할 수 있는 소형의 고속 프로세서이다.
Description
본 출원은 2017 년 1 월 26 일자로 출원된 미국 비-가출원(non-provisional application) 제15/416,670호의 이익을 주장하며, 상기 출원은 참고로 포함된다.
본 발명은 전자 컴퓨터 아키텍처(computer architecture)에 관한 것으로, 구체적으로 상이한 적용(applications)에 대해 재구성될 수 있는 특정 용도 컴퓨터 가속기(application-specific computer accelerator)에 관한 것이다.
증가된 컴퓨터 처리 속도와 향상된 에너지 효율에 대한 필요는, 다양한 적용(applications)에 대해 범용 폰노이만 유형 프로세서(general-purpose VonNeuman type processors)를 대체할 수 있는 단일 명령 다중 데이터(SIMD: instruction multiple data) 머신(machines) 및 범용 그래픽 처리 유닛(GPGPU: general-purpose graphic processing units) 머신과 같은 데이터 병렬 아키텍처(data-parallel architectures)의 개발을 야기(motivated)하였다. 기계 학습(machine learning) 및 컴퓨터 비전과 같은 더욱 요구가 많은 적용을 위해, 이러한 범용 데이터 병렬 아키텍처는 데이터 센터에서 사용하기 위한 마이크로소프트 캐터펄트 FPGA 가속기(Microsoft Catapult FPGA accelerator)와 같은 특정 용도 가속기(application-specific accelerators), 및 분산 기계 학습(distributed machine learning)을 위한 구글의 텐서 처리 유닛(Google's Tensor processing unit)으로 대체될 수 있다. 일반적으로, 이러한 특정 용도 가속기는 예를 들어 비순차적 실행(out-of-order execution) 및 추측 실행(speculative execution)을 포함하는 진보된 아키텍처 피처(advanced architectural features)를 구현하는 범용 고성능 폰노이만 프로세서(general-purpose, high-performance VonNeuman processor)와 팀을 이룬(teamed)다.
이러한 특정 용도 가속기에 사용되는 특정 목적 하드웨어(special-purpose hardware)는, 새로운 처리 알고리즘의 구현에 불리(adversely)한 영향을 미친다. 이는 가속기의 특정 목적 하드웨어에서 실행되는 새로운 알고리즘이 일반적으로 새로운 아키텍처에 대해 값 비싼 재설계와 검증을 요구하기 때문이다. 또한 특정 용도 가속기의 한정(narrow)된 기능(functionality)은, 광범위한 적용(applications)이 구현되어야 하는 컴퓨터 시스템에서의 그 가치(value)를 제한한다. 마지막으로 이러한 특정 용도 가속기가 틈새 시장을 다루는 정도까지, 이러한 아키텍처의 분석 및 개선을 촉진하는 것과 같이 학문적으로 관심을 끌지 못할 수 있다.
본 발명자들은 다양한 특정 용도 가속기가 광범위함에도 불구하고, 특정 용도 가속기가 실행하는 소프트웨어의 특정 공통 피처(certain common features)가 있다는 것을 알고 있다. 구체적으로, 특정 용도 가속기에 의해 실행되는 소프트웨어는 단순한 메모리와 재사용 패턴 및 긴 단계(long phases)에서 고강도의 계산(high computational intensity)을 가지는 경향이 있다. 결국, 이는 간단한 메모리 액세스 패턴(handle simple memory access patterns)을 자동으로 처리할 수 있는 스트림 프로세서와 계산 강도(computational intensity)를 처리하기 위한 빠르고 효율적인 프로세서를 결합(combining)함으로써, "범용(general-purpose)" 특정 용도 가속기가 구성(constructed)될 수 있음을 제안한다. 이러한 후자의 처리 요건은 신속하게 재구성되도록 구성된 데이터플로우 프로세서에 의해 충족될 수 있다. 그 결과는, 특정 목적 하드웨어와 연관된 단점을 피하면서, 특정 용도 가속기와 경쟁할 수 있는 범용 가속기이다.
따라서, 일 실시예에서, 본 발명은 다음을 포함하는 재구성 가능한 가속기 아키텍처(reconfigurable accelerator architecture)를 제공한다: (1) 상기 가속기의 다른 구성 요소(components)를 제어하기 위한 명령(instructions) 및 데이터를 수신하도록 구성(adapted)된 마이크로컨트롤러(microcontroller); (2) 미리 정의된 메모리 액세스 패턴(memory access patterns)의 선택된 세트(set)에 따라 메모리에 저장된 복수의 입력 값(input values)을 자율적으로(autonomously) 판독하고, 미리 정의된 메모리 액세스 패턴의 선택된 세트에 따라 상기 가속기로부터 메모리로 복수의 출력 값(output values)을 자율적으로 기록하기 위해, 상기 마이크로컨트롤러로부터 명령을 수신하는 스트림 프로세서(stream processor); 및 (3) 그 구성에 기초하여 상기 복수의 입력 값을 수신하고 출력 값을 제공하도록 상기 마이크로컨트롤러에 의해 구성된 재구성 가능한 데이터플로우 프로세서(reconfigurable dataflow processor).
따라서, 복수의 특정 목적 가속기(special-purpose accelerators)의 기능(function)을 구현할 수 있는 재구성 가능한 가속기에 고정(fixed)된 특정 목적 가속기의 공통 기능을 구현하는 것은, 본 발명의 적어도 하나의 실시예의 특징(feature)이다. 현재의 시뮬레이션은 본 발명의 아키텍처가 특정 목적 가속기의 성능과 매칭될 수 있는 것을 제안하며, 전력 소비 및 회로 영역(circuit area)에서의 허용 가능한 다소(tolerably small)의 증가로 다기능(versatility)의 장점을 제공한다.
상기 재구성 가능한 데이터플로우 프로세서는, 입력 값을 수신하는 입력 포트와 출력 값을 제공하는 출력 포트 사이에서 메쉬(mesh)에서 기능 유닛들(functional units)을 상호 연결(interconnecting)하는 프로그램 가능한 스위치들(programmable switches)의 세트를 제공하고, 상기 기능 유닛들은 선택 가능한 복수의 산술 기능(arithmetic functions)을 제공하고, 상기 메쉬는, 입력 포트로부터, 기능 유닛을 통해, 스위치 프로그래밍에 의해 결정된 출력 포트로의 경로를 제공한다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 고정된 목적 가속기에서 발견되지만, 예를 들어 스위치를 설정하는 이미지 파일의 사용을 통해 신속하게 다시 재프로그램 가능(re-reprogrammable)하고, 기능 유닛을 구성하는 것과 비교 가능(comparable)한 속도의 고속 데이터플로우 프로세서(high-speed data flow processor)를 제공하는 것이다.
상기 메쉬는, 스위치와 기능 유닛 사이의 직접적인 상호 연결 및 스위치들 간의 직접적인 상호 연결을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 기능 유닛을 상호 연결하고, 기능 유닛을 바이패스(bypass)하는 둘 모두를 할 수 있는 다기능 메쉬(versatile mesh)를 제공하는 것이다.
메쉬는 스위치들 사이, 및 스위치와 기능 유닛 사이에서, 적어도 32 개의 병렬 데이터 라인(thirty-two parallel data lines)(예를 들어, 최대 64 개의 병렬 데이터 라인)을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 현재 프로세싱 아키텍처와 일치하는 큰 데이터 워드(large data words)의 신속한 통신을 제공하는 것이다.
상기 기능 유닛은, 산술 및 논리 연산(arithmetic and logical operations)의 상이한 선택을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 다기능 및 칩 영역(chip area) 사이에서 유연한 트레이드-오프(trade-off)를 허용하는 이종(heterogeneous) 기능 유닛의 사용을 허용하는 것이다.
기능 유닛들은 병렬로 동작할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 연산 엔진(computational engine)에서 고도의 병렬 처리(high degree of parallelism)를 제공하는 것이다.
기능 유닛들간의 데이터플로우는 스위치 설정(switch settings)에 의해 결정될 수 있고, 데이터플로우 프로세서는, 각각의 클록 사이클(clock cycle)에 대해, 하나의 스위치로 스위치들 사이, 또는 하나의 기능 유닛으로 기능 유닛들 사이에서 데이터의 이동을 허용하는 클록(clock)을 더 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 다단계 계산들(multistage calculations)의 피연산자들(operands)이 메쉬를 통해 그 경로의 적절한 선택을 제공하는 스위치 설정을 통해 조정(coordinated)될 수 있게 하는 클록킹 기능(clocking function)을 제공하는 것이다.
상기 마이크로컨트롤러는, 상기 스위치에 대한 프로그래밍을 정의하는 이미지 파일을 로딩(loading)하고, 상기 기능 유닛의 기능에 대해 선택함으로써, 상기 재구성 가능한 데이터플로우 프로세서를 제어할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 컴파일(compilation)을 필요로 하지 않고, 데이터플로우 프로세서의 구성에서 매우 신속한 변경(extremely rapid change)을 제공하는 것이다.
상기 마이크로컨트롤러는, 폰노이만, 싱글-이슈, 인오더 코어(VonNeuman, single-issue, in-order core)일 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 저전력 및 작은 칩 영역을 필요로 하고, 어떤 경우에서 데이터플로우 프로세서로 가능한 것보다 더 큰 명령 세트를 실행하는데 사용될 수 있는 가속기의 요소(elements)를 조정하기 위한 플렉시블 회로(flexible circuit)를 제공하는 것이다.
상기 마이크로컨트롤러는, 스트림 프로세서 또는 상기 재구성 가능한 데이터플로우 프로세서 없이, 프라이머리 프로세서(primary processor)에 데이터를 리턴하기 위해, 명령 및 데이터에 응답하여, 논리 및 산술 명령을 실행하기 위해, 상기 프라이머리 프로세서로부터 상기 명령 및 데이터를 수신하도록 더 구성될 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 특정 작업(tasks)을 위한 데이터플로우 프로세서 없이 마이크로컨트롤러의 사용을 허용하는 것이다.
상기 스트림 프로세서는, 2 개의 메모리 어드레스들(memory addresses) 사이에서의 연속적인 어드레스의 선형 액세스 패턴(linear access pattern), 및 2 개의 메모리 어드레스들 사이에서의 규칙적으로 이격된 불연속적인 어드레스의 스트라이드 액세스 패턴(strided access pattern)을 포함하는 미리 정의된 메모리 액세스 패턴을 제공할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 특정 용도 가속기에 공통으로 사용되는 메모리 액세스 패턴을 제공하는 것이다.
상기 스트림 프로세서는, 상기 재구성 가능한 데이터플로우 프로세서에 제공된 상기 복수의 입력 값으로서 사용될 데이터의 어드레스로서, 상기 미리 정의된 메모리 액세스 패턴으로 획득된 데이터를 사용할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 포인터 유형 기능(pointer-type functionality)을 구현하는 간접 어드레싱(addressing)을 제공하는 것이다.
상기 스트림 프로세서는, 상기 마이크로컨트롤러에 의한 프로그래밍 이후에 상기 마이크로컨트롤러에 대해 자율적으로 동작할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 전용 상태 머신, 또는 데이터플로우 프로세서가 효율적으로 계산에만 집중할 수 있게 하는 유사한 설계로 가능한 초고속(extremely fast)의 메모리 액세스 동작을 제공하는 것이다.
상기 재구성 가능한 데이터플로우 프로세서는, 상기 스트림 프로세서에 대해 비동기적(asynchronously)으로 동작하는 입력 및 출력 버퍼(input and output buffers)를 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 향상된 병렬 처리를 위해 메모리 동작과 계산 사이의 분리(decoupling)를 허용하는 것이다.
상기 마이크로컨트롤러는, 데이터 소스(data source), 데이터 목적지(data destination), 및 데이터의 액세스 패턴(access pattern)을 정의하는 상기 스트림 프로세서에 스트림 명령을 발행(issues)할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 스트림 처리를 위해 매우 간단한 명령 세트를 제공하는 것이다.
상기 마이크로컨트롤러는, 배리어 명령(barrier command) 전후에 메모리 액세스의 필요한 완료 오더(completion order)를 정의하는 상기 스트림 프로세서에 상기 배리어 명령을 더 발행할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 경쟁 상태(race conditions) 또는 데이터 의존성에 대한 문제점을 피할 필요가 있을 때, 병렬 처리를 제한하기 위해 간단한 메커니즘(mechanism)을 제공하는 것이다.
컴퓨터 아키텍처는, 상기 스트림 프로세서에 의해 제어되는 상기 메모리로부터 데이터를 판독하거나, 또는 상기 메모리에 데이터를 기록하기 위해, 상기 스트림 프로세서와 통신하는 스크래치패드 메모리(scratchpad memory)를 더 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 향상된 실행 속도를 위해 불필요한 메모리 액세스를 제거하는 것이다.
컴퓨터 아키텍처는 스크래치패드 메모리 및 재구성 가능한 데이터플로우 프로세서에 의해 공유되는 단일 메모리 인터페이스(single memory interface)를 포함할 수 있다.
따라서, 본 발명의 적어도 하나의 실시예의 특징은, 가속기의 기본 구성 요소(elemental component)를 단순화(simplify)하는 반면에 데이터플로우 프로세서들 사이에서 메모리와의 고 대역폭 통신을 계속 허용하는 것이다.
상기 마이크로컨트롤러는, 미리 결정된 명령에 응답하여, 상기 재구성 가능한 데이터플로우 프로세서 내 기능 유닛의 개수 및 유형에 관한 정보를 제공할 수 있다.
이러한 특정 목적 및 장점은 청구항에 속하는 일부 실시예에만 적용될 수 있으며, 이에 따라 본 발명의 범위를 정의하지 않는다.
도 1은, 본 발명의 재구성 가능한 특정 용도 가속기를 사용하고, 다중 스트림 데이터플로우 프로세서(multiple stream-dataflow processors)로 구성된 가속기의 확장된 세부 사항을 제공하는 프로세서 시스템의 블록도이다.
도 2는 경량 코어(lightweight core)와 데이터플로우 메쉬(dataflow mesh), 스크래치패드 메모리 및 스트림 프로세서의 조합을 도시하는 단일 스트림-데이터플로우 프로세서의 상세한 블록도이다.
도 3은 간단한 데이터플로우 그래프의 구현을 도시하는 데이터플로우 메쉬의 상세한 블록도이다.
도 4는 고도(high degree)의 병렬 처리를 제공하는 것과 같이 도 3의 데이터플로우 그래프를 사용하여 데이터의 스트림에 대해 처리(processing)하는 것을 도시하는 타이밍도(timing diagram)이다.
도 5는 스트림 프로세서에 의해 구현될 수 있는 미리 결정된 메모리 액세스 패턴의 개략도이다.
도 6은 직접 도 3의 범용 코어 및 데이터플로우 프로세서를 이용하는 프로세서 시스템의 블록도이다.
도 2는 경량 코어(lightweight core)와 데이터플로우 메쉬(dataflow mesh), 스크래치패드 메모리 및 스트림 프로세서의 조합을 도시하는 단일 스트림-데이터플로우 프로세서의 상세한 블록도이다.
도 3은 간단한 데이터플로우 그래프의 구현을 도시하는 데이터플로우 메쉬의 상세한 블록도이다.
도 4는 고도(high degree)의 병렬 처리를 제공하는 것과 같이 도 3의 데이터플로우 그래프를 사용하여 데이터의 스트림에 대해 처리(processing)하는 것을 도시하는 타이밍도(timing diagram)이다.
도 5는 스트림 프로세서에 의해 구현될 수 있는 미리 결정된 메모리 액세스 패턴의 개략도이다.
도 6은 직접 도 3의 범용 코어 및 데이터플로우 프로세서를 이용하는 프로세서 시스템의 블록도이다.
이제 도 1을 참조하면, 본 발명에 따라 구성된 컴퓨터 시스템(10)은 고성능 폰노이만 프로세서(12)를 제공(provide)할 수 있으며, 예를 들어, 산술 및 논린 명령의 많은 명령 세트(rich instruction set)의 비순차적 실행(out-of-order execution) 및 추측 실행(speculative execution)를 제공할 수 있다. 이러한 프로세서(12)의 예는, "아이 7(i7)"의 상표명 하에서 인텔 사(Intel Corporation)에 의해 제조된 것뿐만 아니라 어드밴스 마이크로 디바이스 사(Advanced Micro Devices, Inc.) 및 ARM 사(ARM Ltd.)에 의해 제조된 유사한 장치(devices)를 포함한다.
프로세서(12)는 예를 들어 랜덤 액세스 메모리(RAM: random access memory), 디스크 메모리 및 기타로 구성된 더 큰 스케일의 메모리(20)의 하나 이상의 층과 연결(coupled)된 캐시(18)의 추가 레벨을 포함하지만 이에 한정되지 않는 표준 메모리 계층(standard memory hierarchy)을 제공하는 메모리 시스템(16)과 통신하기 위한 L1 캐시(14)를 포함할 수 있다.
메모리 시스템(16)은 예를 들어 시각 처리, 기계 학습, 그래프 처리 등을 포함하는 하드웨어 가속으로부터 이익을 얻을(benefit) 수 있는 것과 같이 컴퓨터 시스템(10)에 의한 실행을 위한 프로그램(22)을 저장할 수 있다.
메모리 시스템(16) 및 프로세서(12)는, 예를 들어 제어 라인(control lines)(26)뿐만 아니라, 가속할 수(amenable) 있는 프로세서(12)가 프로그램(22)의 일부분의 실행을 위해 하드웨어 가속기(24)를 등록(enlist)시키는 것을 허용하는 어드레스 및 데이터 라인(address and data lines)(23)에 의해 재구성 가능한 하드웨어 가속기와 통신할 수 있다. 제어 라인(26) 및/또는 어드레스 및 데이터 라인(23)에 의해 메모리 라인(16)을 통해 전송된 데이터를 사용하여, 프로세서(12)는 간단한 메모리 액세스 패턴을 가지는 강도의(intense) 계산을 독립적인 실행을 위한 하드웨어 가속기(24)로 오프로딩(offload)할 수 있다. 이와 관련하여 프로세서(12)는, 그 실행의 시작 및 결론을 조정하지만, 그 계산 중 다른 작업을 위해 셧 다운(shut down)하거나 사용될 수 있다. 동작 중, 하드웨어 가속기(24)는 프로세서(12)의 도움없이 자율적으로 멀티코어 프로세서(multicore processor)의 방식으로 L2 캐시에서 메모리 시스템(16)에 독립적으로 액세스할 수 있다.
메모리 시스템(16)은 프로그램(22)의 원하는 부분에 대해 하드웨어 가속기(24)에 의해 수행될 특정한 특정 용도 계산(specific application-specific calculation)을 프로그램하는데 사용될 구성 이미지(27)를 제공하는 구성 파일(25)의 세트를 포함할 수 있다. 상이한 구성 이미지들(27)을 로딩(loading)함으로써, 상이한 특정 용도 계산이 최적화(optimized)될 수 있다. 이러한 구성 이미지(27)는 예를 들어 하드웨어 가속기(24)의 현재 설계를 사용하여 통상적인 특정 용도 가속기의 상이한 기능들을 제공하기 위해 특정 애플리케이션(applications)에 대해 개발되고 표준화될 수 있다. 일반적으로, 하드웨어 가속기(24)는 컴파일러에 의해 생성될 수 있는 아래에 설명될 특정 명령(special instructions)을 사용하여 호출(invoked)될 것이다.
이제 도 2를 참조하면, 하드웨어 가속기(24)는 병렬로 동작하는 프로그램(22)의 일부를 각각 수신할 수 있는 복수의 독립적으로 동작하는 처리 유닛(28)을 포함할 수 있다. 각각의 처리 유닛(28)은 경량 코어(30), 데이터플로우 프로세서(32), 스크래치패드 메모리(34) 및 스트림 프로세서(36)를 포함한다. 일 실시예에서, 주어진 처리 유닛(28)의 경량 코어(30), 데이터플로우 프로세서(32), 스크래치패드 메모리(34) 및 스트림 프로세서(36) 각각은, 공통 메모리 액세스 인터페이스(common memory access interface)(40)를 메모리 시스템(16)에 공유하여, 처리 유닛들(28) 사이에서 독립적 및 병렬 메모리 액세스를 제공할 수 있다.
일반적으로, 경량 코어(lightweight core)(30)는 추측 실행이 없는 폰노이만, 싱글-이슈, 인오더 코어일 것이다. 그럼에도 불구하고, 이러한 경량 코어(30)는 데이터플로우 프로세서(32)보다 넓은 범위의 상이한 유형의 산술 및 논리 명령을 처리할 수 있을 것이며, 이러한 이유로 예를 들어 데이터플로우 프로세서(32)를 포함하는 처리 유닛(28)의 나머지를 포함하지 않고 일부 유형의 가속을 위해 프로세서(12)에 의해 사용될 수 있다. 경량 코어(30)는 프로세서(12)보다 훨씬 적은 집적 회로 영역(integrated circuit area)을 필요로 할 것이고, 훨씬 적은 전력을 사용할 것이다. 경량 코어가 산술 및 논리 기능을 할 수 있는 어떤 범용 프로세서일 수 있다는 것을 이해할 것이다.
통상적인 동작 중, 경량 코어(30)는 메모리 시스템(16)으로부터, 필요한 계산을 위해 데이터플로우 프로세서(32)를 구성할 데이터플로우 프로세서(32)로 구성 이미지(27)를 로딩하도록 명령을 스트림 프로세서(36)로 발행(issue)할 것이다. 경량 코어(30)는, 데이터플로우 프로세서(32) 또는 스크래치패드 메모리(34)에 이러한 데이터를 직접 전송하는 스트림 프로세서(36)에 명령을 발행할 것이며, 결국 상기 스트림 프로세서(36)는 데이터플로우 프로세서(32)에 의한 계산에 필요한 정보를 획득하기 위해 메모리 액세스 인터페이스(40)를 제어할 것이다.
경량 코어(30)에 의해 스트림 프로세서(36)에 제공되는 명령은 다음을 포함할 것이다: (1) 적절한 구성 이미지(27)를 획득하고 로딩함으로써, 데이터플로우 프로세서(32)를 구성하기 위한 구성 명령(configuration instructions); (2) 경량 코어(30) 또는 프로세서(12)의 포함 없이 데이터플로우 프로세서(32)에 데이터의 스트림을 제공하기 위한 스트림 명령(stream instructions); 및 (3) 아래에서 설명될 처리 유닛(28)에 의해 실행되는 명령의 어느 정도의 직렬화(serialization)를 강제(enforce)하는데 사용되는 배리어 명령(barrier instructions).
이제 도 3을 참조하면, 데이터플로우 프로세서(32)는 상호 연결 스위치(44)에 의해 형성된 메쉬(33)에 배치(arranged)된 기능 유닛(42)의 세트를 제공할 수 있다. 스위치(44)는 그 사이에 병렬 데이터 경로를 제공하기 위해, 입력 포인트(46)로부터 대응하는 출력 포인트(48)까지 연장되는 논리 열(logical columns)에 배치된다. 또한, 스위치(44)는 논리 열의 데이터 경로의 폭과 동일한 폭의 병렬 데이터 경로에 의해 결합(joined)된 논리 행(logical rows)에 배치된다. 기능 유닛(42)은 연속적인 행 및 열에서 4 개의 스위치들(44)의 세트들 사이에 논리적으로 위치되어, 이들 스위치들(44) 각각과 통신하여 이들로부터 데이터를 수신하거나 이들로 데이터를 제공한다. 따라서, 각각의 스위치(44)는 일반적으로 스위치(44)에서 수신된 데이터를 인접 열에서의 스위치 또는 하부 인접 행에서의 스위치 또는 2 개 이하의 하부 기능 유닛(42)까지 전송(direct)할 수 있다.
스위치(44)에 의해 제공된 데이터 플로우(data flow)의 특정 방향은, 로딩되는 특정 구성 이미지(27)에 의해 결정되는 스위치(44)와 연관된 구성 스위치 레지스터(45)로 메쉬(33)의 비트 값에 의해 결정될 수 있다. 일반적으로, 입력 포인트(46)로부터, 연속적인 스위치(44) 및 기능 유닛(42)을 통해, 출력 포인트(48)로 메쉬(33)에 의해 제공되는 데이터 경로는, 예를 들어 32 또는 64 비트와 같은 컴퓨터 워드의 크기(width)와 동일할 것이다.
기능 유닛(42) 각각은 몇몇 산술 또는 논리 기능들 중 하나를 구현할 수 있지만, 경량 코어(30)에 의해 제공되는 것보다 일반적으로 적은 기능을 구현할 수 있다. 예를 들어, 주어진 기능 유닛(42)은 정수 또는 부동 소수점(floating-point) 곱, 감산, 가산 등 중에서 적어도 하나; 및/또는 시프트(shift), 비교(compare), 비트 연산(bit wise) AND, OR 등과 같은 논리 기능(logical functions); 및/또는 시그모이드 기능(sigmoid function), 선험적 기능(transcendental functions) 등과 같은 특정 목적 기능(special-purpose functions)을 구현할 수 있다. 또한, 기능 유닛(42)은 전력 소비를 크게 감소시키도록 사용되지 않을 때 저전력(low-power) 또는 오프 상태(off state)를 가질 수 있다. 각 기능 유닛(42)에 의해 구현될 수 있는 기능들은 상이한 기능 유닛들(42)에 대해 다를 수 있다. 기능 유닛(42)에 의해 제공되는 이러한 특정 기능은, 로딩된 구성 이미지(27)에 의해 설정된 것과 같이, 기능 유닛(42) 각각과 연관된 구성 기능 레지스터(47)로 메쉬(33)의 비트 값에 의해 결정된다.
일반적으로 데이터플로우 프로세서(32)는 경량 코어(30)에 대해 독립적이고 비동기적으로 실행될 수 있는 반면에, 데이터플로우 프로세서(32)를 통과하는 데이터는 예측 가능한 실행을 제공하기 위해, 예를 들어 자체 내장 클록 요소(self-contained clock element)(35)를 사용하여 클록킹(clocked)될 것이다. 구체적으로, 데이터는 각 클록 사이클에 대해 한 단계씩 수평으로 및/또는 하향으로 이동하기 위해, 기능 유닛(42) 및 스위치(44)의 메쉬(33)를 통해 흐를(flow) 수 있으며, 단계는 입력 포인트(46)로부터 스위치(44)로, 또는 스위치(44)로부터 제2 스위치(44)로, 또는 스위치(44)로부터 출력 포인트(48)로, 또는 스위치(44)로부터 기능 유닛(42)으로, 또는 기능 유닛(42)으로부터 스위치(44)로의 데이터 플로우일 수 있다. 이러한 방식으로, 계산에 의해 요구되는 기능 유닛(42)에 도착(arrive)하는 피연산자의 조정은, 바람직한 지연을 획득하기 위해 필요한 양의 데이터 경로에서 스위치들(또는 불능(no-op) 기능 유닛들)의 삽입(interposition)에 의해 제어될 수 있다. 필요한 라우팅은 미리 결정될 수 있고, 구성 이미지(27)를 생성하기 위해, 수동으로, 또는 특수 프로그램(예를 들어, 컴플라이어(complier))의 사용을 통해, 구성 이미지(27)로 통합(incorporated)될 수 있다.
일반적으로, 데이터플로우 프로세서(32)는 프로그램 카운터 또는 제어 흐름 명령을 제공하지 않을 수 있으며, 오히려 제어 흐름은 스위치(44)와 기능 유닛(42)의 상호 연결에 의해 결정된다. 또한, 기능 유닛(42)에 의한 레지스터 파일 또는 메모리에 대한 액세스는 필요하지 않다. 고속으로 발생할 수 있는 클록킹의 제약 조건 내에서 피연산자가 사용 가능한 한 빨리 계산이 실행(occur)된다. 기능 유닛(42)은 데이터플로우 회로를 이용하여, 또는 하나의 클록 사이클 내에서 계산을 완료하기에 충분한 속도로 동작하는 반복 회로(iterating circuitry)를 이용하여 구현될 수 있다. 따라서, 데이터플로우 프로세서(32)는 매우 빠른 계산을 제공한다.
데이터플로우 프로세서(32)의 입력 포인트(46) 및 출력 포인트(48) 각각은, 스트림 프로세서(36)의 제어 하에서 데이터플로우 프로세서(32)에 의해 수행되는 처리에 대해 비동기적으로 채워(filled)질 수 있거나, 또는 비동기적으로 비워(emptied)질 수 있는 선입 선출 버퍼(first-in, first-out buffer)(50)와 연관된다. 따라서, 버퍼(50)는 병렬 데이터 획득 및 데이터 처리를 제공한다. 일 실시예에서, 각각의 버퍼(50)는 8, 64 비트 워드를 제공할 수 있으며, 이에 따라 8x64크기(wide)가 될 수 있으며 임의의 깊이를 가진다. 본 발명은 또한 상이한 크기(widths)가 바람직하도록 사용될 수 있다는 것을 고려한다. 입력 포인트(46) 및 출력 포인트(48)의 독립적인 유사한 추가 버퍼들(Additional similar buffers)(50')은, 논의될 간접 로딩(loads) 및 저장을 위한 스트리밍 어드레스들을 저장하기 위해 사용될 수 있다. 입력 포인트(46)는 주어진 입력 버퍼(50)가 스위치들(44)의 제1 열 중 적어도 하나와 통신하게 하는 고정된 연결을 제공하는 상호 연결(interconnect)(41)을 통해 각각의 버퍼(50)에 연결되며, 각각의 스위치(44)는 미리 정의된 상호 연결 패턴에 따라, 임의의 버퍼들(50) 중 하나로부터만 데이터를 수신한다. 따라서, 주어진 버퍼(50)로부터의 상이한 64 비트 워드가 상이한 스위치(44)에 전송될 수 있다.
또한, 출력 포인트(48)는 주어진 출력 포인트(48)가 하나 이상의 출력 버퍼(50)에 연결되게 하는 고정된 연결을 제공하는 상호 연결(49)을 통해 각각의 버퍼(50)에 연결되며, 각 출력 버퍼는 미리 정의된 상호 연결 패턴에 따라, 임의의 출력 포인트(48) 중 하나로부터만 데이터를 수신한다.
일단 스트림 프로세서(36)는, 경량 코어(30)로부터 프로그램 명령을 수신하면, 메모리 시스템(16)과 다른 저장 위치 사이에 데이터를 자율적으로 이동시킬 수 있는 간단한 상태 머신(simple state machine)을 제공한다. 일반적으로, 미리 정의된 패턴에 따라, 스트림 프로세서(36)는, 메모리 시스템(16)으로부터 스크래치패드 메모리(34)로 또는 버퍼들(50)로, 또는 스크래치패드 메모리(34)로부터 입력 버퍼(50)로, 입력 데이터를 이동시킬 것이거나, 또는 스크래치패드 메모리(34)로부터 메모리 시스템(16)으로, 또는 버퍼(50)로부터 스크래치패드 메모리(34) 또는 메모리 시스템(16) 또는 다른 버퍼(50)로 출력 데이터를 이동시킬 수 있다. 이와 관련하여, 스트림 프로세서(36)는 3 개의 개별 회로를 제공할 수 있으며, 하나는 메모리를 위한 것이고, 다른 하나는 스크래치패드를 위한 것이고, 또 다른 하나는 출력 포트로부터 입력 포트로의 데이터의 리사이클(re-cycling)을 제어하고 또한 상수 값(constant values)을 생성하기 위한 것이다. 이러한 3 개의 회로는 고속 동작을 위해 독립적으로(그러나 메모리 액세스 인터페이스(40)를 통한 동기화(synchronization)를 위해) 동작할 수 있다.
스트림 프로세서(36)는 또한 구성을 위해 아래에서 논의되는 바와 같이, 구성 이미지(27)의 데이터의 이동을 데이터플로우 프로세서(32)의 메쉬(33) 구성 레지스터(45 및 47)로 제공할 수 있다.
보다 구체적으로, 위에서 간략하게 언급한 바와 같이, 스트림 프로세서(36)는 경량 코어(30)에 의해 발행될 수 있는 구성 명령, 스트림 명령 및 배리어 명령에 따라 동작한다. 구성 명령 포맷은 아래의 표 I에 도시된다.
명령 이름 (Command Name) |
파라미터 (Parameters) |
기술 (Description) |
SD_Config | 구성 이미지 어드레스(Configuration image address), 크기(Size) | 어드레스에서 구성 이미지로부터 데이터플로우 프로세서 구성을 설정 |
이러한 명령은 메모리 시스템(16) 내의 구성 이미지(27)의 시작 어드레스 및 크기를 스트림 프로세서(36)에 제공하고, 구성 이미지(27)를 메쉬(33) 구성 레지스터(45 및 47)로 로딩하도록 동작한다. 이러한 처리(process)는 데이터플로우 프로세서(32)의 메쉬(33)의 바람직한 구성을 제공할 것이고, 예를 들어 제어 라인(26)을 통해 가속기(24)와 통신하는 프로세서(12)에 의해 트리거되는, 프로그램(22)의 가속에 필요한 기능 유닛 (42)의 기능을 제공할 것이다.경량 코어(30)에 의해 스트림 프로세서(36)에 제공되는 스트림 명령들(표 II에 도시됨)은 일반적으로 다음과 같이 데이터의 소스(source), 목적지 데이터(destination data) 및 데이터 패턴(data pattern)을 식별한다:
명령 이름 | 파라미터 | 기술 |
SD_Mem_Scr | 소스 메모리 어드레스(Source Memory Address), 액세스 크기(Access Size), 스트라이드 길이(Stride Length), 스트라이드의 수(Number), 목적지 스크래치패드 어드레스(Destination Scratchpad Address) | 지시된 액세스 패턴(indicated access pattern)을 사용하여 메모리 시스템(16)으로부터 스크래치패드 메모리(34)로 판독 |
SD_Scr_Port | 소스 스크래치패드 어드레스, 액세스 크기, 스트라이드 길이, 스트라이드의 수, 입력 포트 번호(Input Port Number) | 지시된 패턴으로 사용하여 스크래치패드 메모리(34)로부터 지정된 입력 포인트(46)로 판독 |
SD_Mem_Port | 소스 메모리 어드레스, 액세스 크기, 스트라이드 길이, 스트라이드의 수, 입력 포트 번호 | 지시된 패턴을 사용하여 메모리 시스템(16)으로부터 지정된 입력 포인트(46)로 판독 |
SD_Const_Port | 상수 값, 요소(Elements)의 수, 목적지 포트 번호(Destination Port Number) | 지정된 입력 포인트(46)에 일련의 상수 값을 전송 |
SD_Chuck_Port | 요소의 수, 소스 포트 번호 | 지정된 출력 포인트(48)의 버퍼(50)로부터 정의된 일련의 값을 추출(Eject) |
SD_Port_Port | 소스 포트 번호, 요소의 수, 목적지 포트 번호 | 지정된 출력 포인트(48)로부터 지정된 입력 포인트(46)로 정의된 일련의 값들을 재순환(Recirculate) |
SD_Port_Scr | 소스 포트 번호, 요소의 수, 목적지 스크래치패드 어드레스. | 지정된 출력 포인트(48)로부터 스크래치패드 메모리(34)로 정의된 일련의 값들을 기록 |
SD_Port_Mem | 소스 포트 번호, 액세스 크기, 스트라이드 길이, 스트라이드의 수, 목적지 메모리 어드레스. | 지시된 패턴을 사용하여 지정된 출력 포인트(48)로부터 메모리 시스템(16)으로 기록 |
SD_IndPort_Port | 간접 포트 번호, 오프셋 어드레스, 목적지 포트 번호 | 지정된 목적지 포트에 저장하기 위해 지정된 간접 출력 포인트(48)의 어드레스 데이터에 기초하여 메모리 시스템(16)으로부터의 간접 로딩 |
SD_IndPort_Mem | 간접 포트 번호, 오프셋 어드레스, 목적지 포트 번호 | 지정된 출력 포트로부터 간접 포트에서 어드레스를 기초로 메모리 시스템(16)으로 간접 저장 |
이러한 명령은 아래에서 논의될 지정된 패턴을 사용하여 자율적으로 저장 위치들 사이에서 데이터를 전송한다.
간접 어드레싱(Indirect addressing)은 어드레스 값으로 (예를 들어, 버퍼(50')에) 저장된 데이터를 사용하여 가능하다. 간접 어드레싱에서, 예를 들어 스트리밍 패턴으로부터의 데이터는, 기능 유닛들(42)에 의해 동작되는 데이터를 더 획득하기 위한 어드레스로 사용된다. 이러한 간접 어드레싱은, 예를 들어 희소 행렬(sparse matrix)의 행을 액세스할 때 유용한 포인터에 영향을 미친다. 스트림 프로세서(36)는 2 개의 스트림을 함께 연결(chaining)함으로써 간접 액세스를 용이하게 하는 능력을 제공할 수 있으며, 첫번째 스트림은 연속적인 또는 스트라이드(strided) 패턴의 포인터에 액세스하기 위한 것이고, 그 다음의 스트림들은 메모리 시스템(16)으로부터 이들 포인터들의 값을 로딩하고, 이들을 재구성 가능한 데이터플로우 프로세서(32)에 전달하기 위한 것이다. 추가 명령은, (메모리로부터 이들을 로딩하는 것보다) 상수 값을 생성하고, (비기능적 메모리 영역으로 이들을 로딩하는 것과는 대조적으로) 사용되지 않은 출력 값을 폐기하도록 제공된다.
일반적으로, 이들 명령 각각은 가속기의 명령 세트 아키텍처의 명령 세트 아키텍처, 및 가속기의 다른 구성 요소를 제어하기 위해 경량 코어(30)에 의한 최소 처리로 사용되는 이러한 명령들의 데이터의 일부로 프로세서(12)에 의해 직접 발행될 수 있다.
이제 도 5를 참조하면, 스트림 프로세서(36)는 메모리 액세스의 간단한 패턴을 사용하여 저장 위치들 사이에서 자율적으로 데이터를 로딩 또는 기록하기 위한 상태 머신을 제공한다. 가장 간단한 패턴은 명령에 의해 지정된 시작 어드레스(62) 및 종료 어드레스(64) 사이에서 모든 메모리 어드레스를 순차적으로 판독(또는 기록)하는 선형 패턴(60)이다. 이러한 패턴은 0(zero)과 동일한 스트라이드 길이를 설정함으로써 지시(indicated)된다. 시작 어드레스는 판독을 위한 소스 어드레스 및 쓰기를 위한 목적지 어드레스로 상기 명령에서 지정되며, 반면에 종료 어드레스는 소스가 포트일 때 요소의 수이거나, 액세스 크기 X 스트라이드 길이 X 소스가 메모리 또는 스크래치패드인 경우 시작 어드레스에 가산된 스트라이드의 수의 곱(a product of the access size times the stride length times the number of strides added to the starting address)일 수 있다.
대안적으로, 스트림 프로세서(36)는, 액세스 크기에 의해 정의되는 액세스 부분들(67) 사이의 어드레스에서 갭 또는 스트라이드(66)를 기술하는 0이 아닌(nonzero) 값과 동일하게 스트라이드 길이를 설정함으로써, 스트라이드 패턴(65)을 사용하도록 프로그램될 수 있다.
유사하게, 중첩(overlapping)되는 축 패턴(68)은 중첩된 패턴의 신호를 보내는 스트라이드 크기보다 큰 액세스 크기를 설정함으로써 호출될 수 있다. 반복되는 패턴(69)은 스트라이드의 수에 의해 제공되는 반복을 이용하여 스트라이드 길이를 0으로 설정함으로써 용이하게 획득된다.
또한, 경량 코어(30)는 데이터 저장 자원과 연관된 소정의 특정 이전 명령이 완료될 때까지, 새로운 메모리 액세스 명령의 발행을 막(block)는 스트림 프로세서(36)에 배리어 명령을 제공할 수 있다. 예를 들어, 스크래치패드 메모리(34)에 대한 기록과 연관된 배리어 명령(아래의 표 III에 도시됨)은, 배리어 명령 이전에 스크래치패드 메모리(34)에 대한 모든 기록이 완료될 때까지, 스크래치패드 메모리(34)에 대한 후속 기록을 막을 것이다. 또한, 배리어는 경량 코어(30)에 계산의 완료의 신호를 보내기 위해 사용될 수 있다.
명령 이름 | 파라미터 | 기술 |
SD_Bar_Scr_Rd | - | 스크래치패드 판독을 위한 배리어 |
SD_Bar_Scr_Wr | - | 스크래치패드 기록을 위한 배리어 |
SD_Bar_All | - | 모든 명령 완료를 기다리기 위한 배리어 |
이제 도 3 및 도 4를 참조하면, 예시적인 계산은 이러한 예에서 단일 인접 입력 포인트(46)와 통신하는 A, B 및 D로 지정된 입력 버퍼(50)에서 입력을 수신하여 데이터플로우 그래프(data flow graph)(70)를 제공할 수 있다. 포트 A 및 B와 연관된 버퍼(50)로부터 연속적인 값이, 함께 곱(multiplied)하여질 기능 유닛(42a)에 적절한 스위치(44)를 통해 제공된다. 가장 단순한 경우에, 계산의 주어진 사이클(입력 포인트(46)에서 출력 포인트(48)까지 메쉬(33)를 통과하는 하나)에 필요한 피연산자는, 동시에 버퍼(50)로부터 메쉬(33)로 방출(released)되도록 조정된다. 피연산자의 방출은, 각 버퍼에 대해 구성된 데이터 "크기(size)"를 기초로 파이어 신호(fire signal)를 트리거할 때를 아는, 간단한 준비 모니터링 로직에 의해 모니터링될 수 있다. 그러나, 본 발명은 또한 버퍼(50)로부터의 시차제(staggered) 방출이 메쉬(33)를 통과할 때 특정 기능 유닛(42)에서 피연산자의 동기화의 일부로 사용될 수 있다는 것을 고려한다. 기능 유닛(42a)의 출력은 적절한 스위치를 통해 기능 유닛(42b)으로 전달되어, D로 지정된 입력 포인트(46)와 연관된 버퍼(50)의 값에 가산된다. 버퍼(A 및 B)로부터의 데이터는 기능 유닛(42b)에서 수신되기 전에 동일한 수의 스위치(44) 및 기능 유닛(42)을 통과한다는 것을 유의해야 하며, 포트(D)로부터의 데이터가 기능 유닛(42b)에서 수신하는 것은 버퍼(50)의 대응하는 데이터가 이러한 계산에서 처리된다는 것을 보장하기 때문이다. 데이터플로우 프로세서(32)에 의해 실행되는 각각의 특정 알고리즘에 대한 구성 이미지(27)는, 수동으로 또는 컴파일러와 같은 프로그램의 사용을 통해 데이터플로우 경로 길이의 적절한 조정(coordination)을 보장하도록 조정(adjusted)된다. 컴파일러는, 연산에 의해 사용되는 데이터의 데이터 의존성에 따라, 실행된 알고리즘의 특정 연산을 순차적 시간 슬라이스(time slices)로 식별함으로써 연산할 수 있으며, 이전 연산에 의존적인 데이터를 요구하는 연산이 이후 시간 슬라이스에 있다는 것을 보장한다. 입력 포트로부터, 각각의 연산(스위치(44) 또는 기능 유닛(42)을 통한 클록 사이클)과 연관된 기능 유닛(42)으로의 데이터의 경로는, 동일하게 조정될 수 있다. 따라서, 예를 들어 기능 유닛(42a)에서의 가산 연산에 대해, 버퍼(A, B 및 D)로부터의 데이터의 경로는, 점선(dotted line)(43a)으로 도시된 (4 개의 클록 사이클 동안) 2 개의 스위치(44) 및 하나의 기능 유닛(42a)을 통과하는 버퍼(A)로부터의 경로, 점선(43b)으로 도시된 (4 개의 클록 사이클 동안) 2 개의 스위치(44) 및 하나의 기능 유닛(42a)을 통과하는 버퍼(B)로부터의 경로, 및 점선(43c)으로 도시된 (4 개의 클록 사이클 동안) 3 개의 스위치(44)를 통과하는 버퍼(D)로부터의 경로와 동일하게 된다. 버퍼(50)로부터의 피연산자의 시차제 또는 늦은 방출은, 본 발명의 일부 버전에서 추가적인 클록 사이클을 시뮬레이팅하기 위해 사용될 수 있다.기능 유닛(42b)에서 가산의 완료에 따라, 출력은 G로 지정된 출력 버퍼(50)로 전달된다.
일반적으로, 이러한 처리는 입력 포트(A 및 B)에 저장된 복수의 데이터 값에 대해 반복될 것이다. 기능 유닛(42a)에서 각각의 곱은 파이프라인의 방식으로 기능 유닛(42b)에서 가산과 동시에 수행되며, 높은 처리율을 제공한다.
이제 도 4를 참조하면, 이러한 계산은 도 4에서 명령(C1-C8)으로 지정된 경량 코어(30)로부터 발행된 8 개의 명령을 통해 구현될 수 있다. 도시된 바와 같이, 이러한 명령들은 수평 스케일로 표시된 다른 시간에서 큐 삽입(enqueued)되고, 디스패치(dispatched)되고, 및 완료될 것이다. 계산 이전에, 데이터플로우 프로세서(32)는 구성 명령(이러한 예에서는 미도시)에 의해 구성된다. 일단 모든 명령들이 큐 삽입되었을 경우, 경량 코어(30)는 시간(71)에서 유휴 상태(idle state)에 놓일 수 있다.
제1 명령(C1)은 포트(A)의 버퍼(50)를 로딩하는데 궁극적으로 사용될 데이터에 대한 메모리 시스템(16)으로부터 스크래치패드 메모리(34)로의 전송을 제공한다. 이러한 명령은 큐 삽입된 이후에 즉시 실행을 시작한다. 스크래치패드 메모리가 완전히 로딩되고, 이에 따라 다음 명령(C2)이 명령(C1)이 완료될 때까지 스크래치패드 메모리(34)의 판독이 없음을 보장하는 스크래치패드 메모리 판독 배리어를 제공할 때까지 스크래치패드 메모리가 판독되지 않아야 하는 것이 중요하다. 따라서, 포트(A)로 스크래치패드 메모리(34)의 판독을 제공하는 명령(C3)은, 시간(74)에서 명령(C1)의 완료까지 지연된다. 배리어 명령은, 모든 이전 명령을 병렬로 진행하도록 허용하는 배리어 조건과 관련된 데이터플로우 프로세서(32)로부터 후속 명령을 지연시킴으로써, 간단히 실시(enforced)된다.
충돌되는 리소스가 없기 때문에, 배리어 명령(C2)은 명령(C4)이 포트(B)의 버퍼로 메모리를 판독하는 것을 막지 않는다. 따라서, 이러한 전송 처리는 명령(C3)의 전송 프로세스와 병렬로 이전에 시작하여 계속 진행할 수 있다. 유사하게는, 메모리 시스템(16)으로부터 포트(D)로의 전송은 이러한 명령이 큐 삽입(equeued)된 이후에 간단히 수행될 수 있다.
시간(76)에서, 데이터플로우 프로세서(32)가 계산을 시작하게 하고, 이러한 값이 버퍼(50)로부터 방출되게 하는 포트(A, B 및 D) 각각에 제공(present)될 것이다. 데이터플로우 프로세서(32)에 의해 수행되는 이러한 계산들은, 입력 포인트(46)의 버퍼(50) 각각에서 연속적인 값을 사용하여 반복되고, 처리 사이클(78)에 의해 지시된 바와 같이 출력 포인트(48)의 출력 버퍼(50)로 새로운 계산된 값을 제공할 것이다.
일단 제1 처리 사이클(78)이 완료되면, 시간(80)에서 포트(G)의 출력 버퍼로부터 메모리 시스템(16)으로의 기록은, 시작할 수 있다.
시간(82)에서 버퍼(50)에 보유된 데이터에 대한 모든 처리 사이클(78)의 종료(conclusion) 이후에, 새로운 명령이 경량 코어(30)로부터 수신될 수 있도록, 포트(G)로부터 메모리 시스템(16)으로의 기록은 명령(C8)의 배리어를 방출하고, 경량 코어(30)로 신호를 보내도록 결정한다. 모든 버퍼(50)가 하드웨어에 의해 비어 있는 것으로 검출될 때, 명령(C8)의 "모든" 배리어가 방출된다.
명령(C4)의 처리 동안에, 메모리로부터 포트(B)를 로딩한 후에, 제2 명령(C7)은 또한 메모리 시스템(16)으로부터 포트(B)로 로딩하여, 큐 삽입될 수 있다. 자연적(natural)으로 배리어는 본질적으로 버퍼(50)에 대한 로딩을 직렬화(serializes)하는 스트림 프로세서(36)로 인한 경우에 생성된다.
또한, 버퍼(B)로 데이터를 로딩하기 위한 명령(C7)에 대한 제2 스트림은, 이전 액세스 패턴과 동일한 액세스 패턴을 가지지 않을 수 있다. 또한, 그 유형(예를 들어, 소스(source) 또는 목적지(destination))은 상이할 수 있다. 보다 일반적으로, 주어진 버퍼(50)에 대한 스트림 명령은, 데이터플로우 아키텍처 및 다른 스트림 명령이 능동적으로 처리되는 동안 변경될 수 있다. 이는 더 많은 프로그래밍 유연성(programming flexibility)과 병렬 처리(parallelism)를 이룬다.
사실상 병렬 처리가 도 4에 도시된 중첩 라인 세그먼트(line segments)에 기초하여 데이터플로우 프로세서(32)에 의해 제공되는 이러한 처리에서 획득되는 것을 이해할 것이다. 이는, 프로세서(12)에 의해 요청(enlisted)될 수 있는 복수의 데이터플로우 프로세서(28)를 구비함으로써 획득되는 병렬 처리와 결합(combined)되어, 매우 빠른 처리를 허용한다.
이제 도 6을 참조하면, 프로세서(12)가 직접 메모리 액세스를 처리하게 하고, 버퍼(50)를 로딩 및 판독함으로써, 데이터플로우 프로세서(32)의 요소가 스트림 프로세서(36), 스크래치패드 메모리(34) 및 경량 코어(30)에 대해 독립적으로 또한 사용될 수 있을 뿐만 아니라, 스위치(44) 및 기능 유닛(42)을 구성하는 메모리 이미지 파일을 제공할 수 있다는 것을 이해할 것이다. 이러한 구성은 아키텍처를 상당히 단순화시키지만, 프로세서(12)가 메모리 액세스 패턴을 처리할 것을 필요로 한다. 프로세서(12)에 의해 수행되는 이러한 추가 의무는, 긴 계산 실행이 있을 때 여전히 효율적일 수 있다. 이러한 경우에, 버퍼(50)는 또한 메모리 액세스 연산을 통합하기 위해 크기가 증가될 수 있다.
경량 코어(30)는, 또한 본 기술 분야에서 일반적으로 이해되는 바와 같이 컴파일러에 의한 사용을 위해 데이터플로우 프로세서(32)를 통해, 기능 유닛(42)의 수 및 유형, 버퍼의 깊이(50 및 50'), 스크래치패드 메모리(34)의 크기, 및 데이터의 가장 긴 반복(재활용)을 포함하는 하드웨어 가속기(24)의 하드웨어 파라미터를 노출시킬 수 있다.
본 명세서에 사용된 바와 같이 미리 정의된 메모리 액세스 패턴은, 계산의 기능이 이루어지는 메모리 액세스 패턴과 반대되는, 수행될 메모리 액세스가 요구하는 계산 이전에 정의될 수 있는 제한된 수의 패턴을 의미한다. 본 명세서에서 사용되는 "자율적(Autonomous)"은 마이크로 코어 또는 데이터 구조(data fabric)에 의한 지시(guidance)가 더 필요 없다는 것을 의미한다.
특정 용어는 단지 참조의 목적으로 본 명세서에서 사용되었으며, 이에 따라 제한하려고 의도된 것은 아니다. 예를 들어, "상부(upper)", "하부(lower)", "상위(above)" 및 "하위(below)"와 같은 용어는 참조되는 도면에서의 방향을 지칭한다. "앞쪽(front)", "뒤쪽(back)", "후방(rear)", "아래쪽(bottom)" 및 "측면(side)"과 같은 용어는, 논의 하에서 구성요소를 도시하는 텍스트(text) 및 연관된 도면을 참조함으로써 명확해지는 참조의 일관되지만 임의인 틀 내의 구성 요소의 부분의 방향을 기술한다. 이러한 용어는 구체적으로 상술된 단어를 포함할 수 있으며, 그 파생어 및 유사한 의미의 단어를 포함할 수 있다. 마찬가지로, 구조를 지칭하는 "제1", "제2" 및 다른 그러한 수치적인 용어는 문맥에 의해 명확하게 지시되지 않는 한 연속(sequence) 또는 순서(order)를 의미하지 않는다.
본 개시 및 예시적인 실시예들의 요소 또는 특징을 소개할 때, "하나(a)", "하나의(an)", "상기(the)"의 관사 및 "상기(said)"는 그러한 요소 또는 특징 중 적어도 하나가 있다는 것을 의미하도록 의도된다. "포함(comprising)", "포함하는(including)"및 "가지는(having)"의 용어는 포괄적인 것으로 의도되며, 구체적으로 언급된 것 이외의 추가적인 요소 또는 특징이 있을 수 있음을 의미한다. 본 명세서에 설명된 방법 단계, 처리(processes) 및 동작(operations)들은 구체적으로 수행(performance)의 순서로 식별되지 않는 한, 논의되거나 또는 도시된 특정 순서로 그 수행을 반드시 요구하는 것으로 해석되어서는 안된다는 것을 이해해야 한다. 부가적이거나 또는 대안적인 단계들이 사용될 수 있다는 것 또한 이해해야 한다.
마이크로컨트롤러에 대한 언급은 폰노이만 아키텍처를 포함하지만 반드시 이에 제한되지 않는 본 명세서에 설명된 기능을 실행할 수 있는 임의의 회로를 포함하는 것으로 이해해야 한다.
본 발명은 본 명세서에 포함된 실시예 및 예시에 제한되지 않는 것으로 특히 의도되며, 청구항은 다음의 청구항의 범위 내에 있는 상이한 실시예의 요소들의 조합 및 실시예의 부분들을 포함하는 이들 실시예의 수정된 형태를 포함하는 것을 이해해야 한다. 특허 및 비특허 간행물을 포함하는 본 명세서에 기술된 모든 간행물은, 본 명세서에 전체적으로 참조로 포함된다.
Claims (23)
- 재구성 가능한 컴퓨터 가속기에 있어서,
(1) 상기 가속기의 다른 구성 요소를 제어하기 위한 명령 및 데이터를 수신하도록 구성된 마이크로컨트롤러;
(2) 미리 정의된 메모리 액세스 패턴의 선택된 세트에 따라 메모리에 저장된 복수의 입력 값을 자율적으로 판독하고, 미리 정의된 메모리 액세스 패턴의 선택된 세트에 따라 상기 가속기로부터 메모리로 복수의 출력 값을 자율적으로 기록하기 위해, 상기 마이크로컨트롤러로부터 명령을 수신하는 스트림 프로세서; 및
(3) 구성에 따라 상기 복수의 입력 값을 수신하고 출력 값을 제공하도록 상기 마이크로컨트롤러에 의해 구성된 재구성 가능한 데이터플로우 프로세서
를 포함하는 재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 마이크로컨트롤러로부터 상기 스트림 프로세서로의 연속적인 명령은,
상기 데이터플로우 프로세서의 동작에 대해 비동기적으로 수신될 수 있고,
상이한 미리 정의된 메모리 액세스 패턴에 따라 상기 가속기로부터의 복수의 출력 값의 자율적인 기록 또는 메모리에 저장된 복수의 입력 값의 자율적인 판독을 제공할 수 있는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 재구성 가능한 데이터플로우 프로세서는,
입력 값을 수신하는 입력 포트와 출력 값을 제공하는 출력 포트 사이에서 기능 유닛들을 상호 연결하는 프로그램 가능한 스위치들의 세트를 제공하고,
상기 기능 유닛들은,
선택 가능한 복수의 산술 기능을 제공하고,
상기 상호 연결은,
입력 포트로부터, 기능 유닛을 통해, 스위치 프로그래밍에 의해 결정된 출력 포트로의 경로를 제공하는,
재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
상기 상호 연결은,
스위치와 기능 유닛 사이의 직접적인 상호 연결 및 스위치들 간의 직접적인 상호 연결을 제공하는,
재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
상기 상호 연결은,
스위치들 사이, 및 스위치와 기능 유닛 사이에서, 적어도 32 개의 병렬 데이터 라인을 제공하는,
재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
상기 기능 유닛은,
산술 및 논리 연산의 상이한 선택을 제공할 수 있는,
재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
상기 기능 유닛은,
병렬로 동작하는, 재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
각각의 클록 사이클에 대해, 하나의 스위치로 스위치들 사이, 또는 하나의 기능 유닛으로 기능 유닛들 사이에서 데이터의 이동을 허용하는 클록
을 더 포함하는 재구성 가능한 컴퓨터 가속기.
- 제3항에 있어서,
상기 마이크로컨트롤러는,
상기 스위치에 대한 프로그래밍을 정의하는 이미지 파일을 로딩하고, 상기 기능 유닛의 기능에 대해 선택함으로써, 상기 재구성 가능한 데이터플로우 프로세서를 제어하는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 마이크로컨트롤러는,
폰노이만, 싱글-이슈, 인오더 코어인, 재구성 가능한 컴퓨터 가속기.
- 제10항에 있어서,
상기 마이크로컨트롤러는,
스트림 프로세서 및 상기 재구성 가능한 데이터플로우 프로세서 없이, 프라이머리 프로세서에 데이터를 리턴하기 위해, 명령 및 데이터에 응답하여, 논리 및 산술 명령을 실행하기 위해, 상기 프라이머리 프로세서로부터 상기 명령 및 데이터를 수신하도록 더 구성되는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 스트림 프로세서는,
2 개의 메모리 어드레스들 사이에서의 연속적인 어드레스의 선형 액세스 패턴, 및 2 개의 메모리 어드레스들 사이에서의 규칙적으로 이격된 불연속적인 어드레스의 스트라이드 액세스 패턴을 포함하는 미리 정의된 메모리 액세스 패턴을 제공하는,
재구성 가능한 컴퓨터 가속기.
- 제12항에 있어서,
상기 스트림 프로세서는,
상기 재구성 가능한 데이터플로우 프로세서에 제공된 상기 복수의 입력 값으로서 사용될 데이터의 어드레스로서, 상기 미리 정의된 메모리 액세스 패턴으로 획득된 데이터를 사용하는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 스트림 프로세서는,
상기 마이크로컨트롤러에 의한 프로그래밍 이후에 상기 마이크로컨트롤러에 대해 자율적으로 동작하는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 재구성 가능한 데이터플로우 프로세서는,
상기 스트림 프로세서에 대해 비동기적으로 동작하는 입력 및 출력 버퍼
를 포함하는 재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 마이크로컨트롤러는,
데이터 소스, 데이터 목적지, 및 데이터의 액세스 패턴을 정의하는 상기 스트림 프로세서에 스트림 명령을 발행하는,
재구성 가능한 컴퓨터 가속기.
- 제16항에 있어서,
상기 마이크로컨트롤러는,
배리어 명령 전후에 메모리 액세스의 완료 오더(completion order)를 정의하는 상기 배리어 명령을 상기 스트림 프로세서에 더 발행하는,
재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 스트림 프로세서에 의해 제어되는 상기 메모리로부터 데이터를 판독하거나, 또는 상기 메모리에 데이터를 기록하기 위해, 상기 스트림 프로세서와 통신하는 스크래치패드 메모리
를 더 포함하는 재구성 가능한 컴퓨터 가속기.
- 제18항에 있어서,
상기 스크래치패드 메모리 및 상기 재구성 가능한 데이터플로우 프로세서에 의해 공유되는 단일 메모리 인터페이스
를 더 포함하는 재구성 가능한 컴퓨터 가속기.
- 제1항에 있어서,
상기 마이크로컨트롤러는,
미리 결정된 명령에 응답하여, 상기 재구성 가능한 데이터플로우 프로세서 내 기능 유닛의 개수 및 유형에 관한 정보를 제공하는,
재구성 가능한 컴퓨터 가속기.
- 컴퓨터에 있어서,
명령을 수신하고, 데이터를 읽고 기록하기 위해, 메모리와 통신하는 비순차적 추측 프로세서 코어; 및
상기 비순차적 추측 프로세서 코어에 의해 제어되는 복수의 재구성 가능한 가속기
를 포함하고,
상기 가속기 각각은,
(1) 상기 가속기의 다른 구성 요소를 제어하기 위한 명령 및 데이터를 수신하도록 구성된 마이크로컨트롤러;
(2) 미리 정의된 메모리 액세스 패턴의 선택된 세트에 따라 메모리에 저장된 복수의 입력 값을 자율적으로 판독하고, 미리 정의된 메모리 액세스 패턴의 선택된 세트에 따라 상기 가속기로부터 메모리로 복수의 출력 값을 자율적으로 기록하기 위해, 상기 마이크로컨트롤러로부터 명령을 수신하는 스트림 프로세서; 및
(3) 출력 값을 제공하기 위해, 상기 복수의 입력 값을 수신하도록 상기 마이크로컨트롤러에 의해 구성된 재구성 가능한 데이터플로우 프로세서
를 구비하는 컴퓨터.
- 데이터플로우 컴퓨터에 있어서,
기능 유닛들, 및 입력 값을 수신하는 입력 포트와 출력 값을 제공하는 출력 포트 사이에서 상기 기능 유닛들을 상호 연결하는 프로그램 가능한 스위치들의 세트를 제공하는 데이터플로우 프로세서;
기능 유닛들 및 프로그램 가능한 스위치들을 통해, 데이터의 동기적 이동을 제공하는 클록; 및
상기 데이터에서 산술 기능의 시퀀스를 구현하기 위해, 상기 입력 포트에서 수신된 데이터가 상기 기능 유닛들 및 프로그램 가능한 스위치들을 통해 상기 출력 포트로 클록킹되는 미리 결정된 프로그램을 실행하도록, 상기 기능 유닛들의 상호 연결 및 상기 기능 유닛들의 상기 산술 기능을 구성하는 데이터를 보유하는 구성 저장소
를 포함하고,
상기 기능 유닛들은,
프로그램 가능한 산술 기능을 제공하고,
상기 상호 연결은,
입력 포트로부터, 기능 유닛을 통해, 스위치 프로그래밍에 의해 결정된 출력 포트로의 경로를 제공하고,
상기 구성 저장소는,
추가적인 버퍼 저장 요소 필요 없이 상기 데이터플로우 프로세서를 통해 데이터의 경로를 조정함으로써, 대응하는 피연산자가 상기 프로그램에 따라 각각의 기능 유닛에 동시에 도착하는 것을 보장하는 상기 데이터플로우 프로세서를 통해 상기 데이터의 경로를 정의하는,
데이터플로우 컴퓨터.
- 제22항에 있어서,
상기 데이터플로우 프로세서의 입력 포트와 연관된 버퍼들의 세트
를 더 포함하고,
상기 버퍼들은,
상기 프로그램 및 상기 구성 저장소에 따라, 대응하는 피연산자들이 각각의 기능 유닛에 동시에 도착하는 것을 보장하도록 구성되는 때에, 상기 입력 포트로 데이터를 방출하기 위해, 상기 클록과 동기화되는,
데이터플로우 컴퓨터.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/416,670 | 2017-01-26 | ||
US15/416,670 US11853244B2 (en) | 2017-01-26 | 2017-01-26 | Reconfigurable computer accelerator providing stream processor and dataflow processor |
PCT/US2017/065582 WO2018140140A1 (en) | 2017-01-26 | 2017-12-11 | Reconfigurable, application-specific computer accelerator |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190103379A KR20190103379A (ko) | 2019-09-04 |
KR102272839B1 true KR102272839B1 (ko) | 2021-07-05 |
Family
ID=62907071
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197023744A KR102272839B1 (ko) | 2017-01-26 | 2017-12-11 | 재구성 가능한 특정 용도 컴퓨터 가속기 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11853244B2 (ko) |
EP (1) | EP3574401B1 (ko) |
KR (1) | KR102272839B1 (ko) |
CN (1) | CN110214309B (ko) |
WO (1) | WO2018140140A1 (ko) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10157060B2 (en) | 2011-12-29 | 2018-12-18 | Intel Corporation | Method, device and system for control signaling in a data path module of a data stream processing engine |
US10776310B2 (en) * | 2017-03-14 | 2020-09-15 | Azurengine Technologies Zhuhai Inc. | Reconfigurable parallel processor with a plurality of chained memory ports |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10977854B2 (en) | 2018-02-27 | 2021-04-13 | Stmicroelectronics International N.V. | Data volume sculptor for deep learning acceleration |
US11586907B2 (en) | 2018-02-27 | 2023-02-21 | Stmicroelectronics S.R.L. | Arithmetic unit for deep learning acceleration |
US11687762B2 (en) * | 2018-02-27 | 2023-06-27 | Stmicroelectronics S.R.L. | Acceleration unit for a deep learning engine |
US10832370B2 (en) * | 2018-03-27 | 2020-11-10 | Arista Networks, Inc. | System and method of hitless reconfiguration of a data processing pipeline with standby pipeline |
US10585725B2 (en) | 2018-03-27 | 2020-03-10 | Arista Networks, Inc. | System and method of hitless reconfiguration of a data processing pipeline |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US11048661B2 (en) | 2018-04-16 | 2021-06-29 | Simple Machines Inc. | Systems and methods for stream-dataflow acceleration wherein a delay is implemented so as to equalize arrival times of data packets at a destination functional unit |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
CN109189475B (zh) * | 2018-08-16 | 2022-06-10 | 北京算能科技有限公司 | 可编程人工智能加速器指令集的构建方法 |
CN109325494B (zh) * | 2018-08-27 | 2021-09-17 | 腾讯科技(深圳)有限公司 | 图片处理方法、任务数据处理方法和装置 |
US10705762B2 (en) | 2018-08-30 | 2020-07-07 | Micron Technology, Inc. | Forward caching application programming interface systems and methods |
US11210100B2 (en) | 2019-01-08 | 2021-12-28 | Apple Inc. | Coprocessor operation bundling |
CN109785224B (zh) * | 2019-01-29 | 2021-09-17 | 华中科技大学 | 一种基于fpga的图数据处理方法和系统 |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US10817291B2 (en) * | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
WO2021145803A1 (en) * | 2020-01-13 | 2021-07-22 | Telefonaktiebolaget Lm Ericsson (Publ) | Programmable controller |
US11709664B2 (en) | 2020-06-02 | 2023-07-25 | SambaNova Systems, Inc. | Anti-congestion flow control for reconfigurable processors |
US11237971B1 (en) | 2020-09-16 | 2022-02-01 | SambaNova Systems, Inc. | Compile time logic for detecting streaming compatible and broadcast compatible data access patterns |
US11645057B2 (en) | 2020-09-24 | 2023-05-09 | SambaNova Systems, Inc. | Systems and methods for memory layout determination and conflict resolution |
US12086080B2 (en) | 2020-09-26 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
CN113032011B (zh) * | 2021-03-12 | 2023-06-27 | 北京睿芯数据流科技有限公司 | 一种数据流架构中循环程序执行的方法及系统 |
WO2023014033A1 (en) * | 2021-08-02 | 2023-02-09 | Samsung Electronics Co., Ltd. | Method and electronic device for handling resource operating performance configuration in electronic device |
CN115408104B (zh) * | 2022-08-25 | 2023-08-11 | 科东(广州)软件科技有限公司 | 一种映像的加载方法与装置及生成方法与装置 |
CN116501504B (zh) * | 2023-06-27 | 2023-09-12 | 上海燧原科技有限公司 | 数据流的时空映射方法、装置、电子设备及存储介质 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7089344B1 (en) * | 2000-06-09 | 2006-08-08 | Motorola, Inc. | Integrated processor platform supporting wireless handheld multi-media devices |
US7159099B2 (en) * | 2002-06-28 | 2007-01-02 | Motorola, Inc. | Streaming vector processor with reconfigurable interconnection switch |
US20110238948A1 (en) * | 2002-08-07 | 2011-09-29 | Martin Vorbach | Method and device for coupling a data processing unit and a data processing array |
US7590823B1 (en) * | 2004-08-06 | 2009-09-15 | Xilinx, Inc. | Method and system for handling an instruction not supported in a coprocessor formed using configurable logic |
US7941585B2 (en) * | 2004-09-10 | 2011-05-10 | Cavium Networks, Inc. | Local scratchpad and data caching system |
US7920584B2 (en) | 2005-05-04 | 2011-04-05 | Arm Limited | Data processing system |
US7856523B2 (en) * | 2005-06-01 | 2010-12-21 | Microsoft Corporation | Random Access Memory (RAM) based Content Addressable Memory (CAM) management |
US20080244238A1 (en) | 2006-09-01 | 2008-10-02 | Bogdan Mitu | Stream processing accelerator |
US8122078B2 (en) * | 2006-10-06 | 2012-02-21 | Calos Fund, LLC | Processor with enhanced combined-arithmetic capability |
US8726289B2 (en) | 2008-02-22 | 2014-05-13 | International Business Machines Corporation | Streaming attachment of hardware accelerators to computer systems |
US8181003B2 (en) * | 2008-05-29 | 2012-05-15 | Axis Semiconductor, Inc. | Instruction set design, control and communication in programmable microprocessor cores and the like |
KR101515568B1 (ko) * | 2009-02-03 | 2015-04-28 | 삼성전자 주식회사 | 재구성 가능 어레이의 스케줄러, 스케줄링 방법 및 이를 이용한 컴퓨팅 장치 |
US20120204008A1 (en) * | 2011-02-04 | 2012-08-09 | Qualcomm Incorporated | Processor with a Hybrid Instruction Queue with Instruction Elaboration Between Sections |
US10078620B2 (en) * | 2011-05-27 | 2018-09-18 | New York University | Runtime reconfigurable dataflow processor with multi-port memory access module |
KR20160037827A (ko) * | 2013-01-17 | 2016-04-06 | 엑소케츠 인코포레이티드 | 시스템 메모리로의 연결을 위한 오프로드 프로세서 모듈들 |
JP6286551B2 (ja) * | 2014-01-16 | 2018-02-28 | インテル・コーポレーション | 処理要素構成のための装置、デバイス構成のための装置および方法、高速デバイス構成のための装置、プログラム、並びに、非一時的コンピュータ可読ストレージ媒体 |
US10591983B2 (en) | 2014-03-14 | 2020-03-17 | Wisconsin Alumni Research Foundation | Computer accelerator system using a trigger architecture memory access processor |
US20150268963A1 (en) | 2014-03-23 | 2015-09-24 | Technion Research & Development Foundation Ltd. | Execution of data-parallel programs on coarse-grained reconfigurable architecture hardware |
US11132203B2 (en) * | 2014-08-14 | 2021-09-28 | Texas Instruments Incorporated | System and method for synchronizing instruction execution between a central processor and a coprocessor |
US9715475B2 (en) | 2015-07-21 | 2017-07-25 | BigStream Solutions, Inc. | Systems and methods for in-line stream processing of distributed dataflow based computations |
US20170083313A1 (en) * | 2015-09-22 | 2017-03-23 | Qualcomm Incorporated | CONFIGURING COARSE-GRAINED RECONFIGURABLE ARRAYS (CGRAs) FOR DATAFLOW INSTRUCTION BLOCK EXECUTION IN BLOCK-BASED DATAFLOW INSTRUCTION SET ARCHITECTURES (ISAs) |
-
2017
- 2017-01-26 US US15/416,670 patent/US11853244B2/en active Active
- 2017-12-11 WO PCT/US2017/065582 patent/WO2018140140A1/en unknown
- 2017-12-11 CN CN201780084864.8A patent/CN110214309B/zh active Active
- 2017-12-11 EP EP17894362.7A patent/EP3574401B1/en active Active
- 2017-12-11 KR KR1020197023744A patent/KR102272839B1/ko active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
US11853244B2 (en) | 2023-12-26 |
EP3574401B1 (en) | 2023-05-31 |
CN110214309B (zh) | 2023-10-31 |
EP3574401A4 (en) | 2021-01-27 |
EP3574401A1 (en) | 2019-12-04 |
KR20190103379A (ko) | 2019-09-04 |
WO2018140140A1 (en) | 2018-08-02 |
CN110214309A (zh) | 2019-09-06 |
US20180210730A1 (en) | 2018-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102272839B1 (ko) | 재구성 가능한 특정 용도 컴퓨터 가속기 | |
KR102497178B1 (ko) | 재진입 큐를 사용하는 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 루프 실행 제어 | |
KR102545047B1 (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 중지 신호를 사용한 역압 제어 | |
US11175920B2 (en) | Efficient work execution in a parallel computing system | |
KR20200139741A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭에 대한 다수의 유형의 스레드 식별자 | |
Falsafi et al. | FPGAs versus GPUs in data centers | |
KR20200139742A (ko) | 멀티 스레드, 자체 스케줄링 재구성 가능한 컴퓨팅 패브릭의 실행 제어 | |
US20070130447A1 (en) | System and method for processing thread groups in a SIMD architecture | |
US20030061601A1 (en) | Data processing apparatus and method, computer program, information storage medium, parallel operation apparatus, and data processing system | |
US20090119484A1 (en) | Method and Apparatus for Implementing Digital Logic Circuitry | |
JP2002509302A (ja) | メモリサブシステムに複数のメモリアルゴリズムプロセッサを組込むマルチプロセッサコンピュータアーキテクチャ | |
US10817309B2 (en) | Runtime optimization of configurable hardware | |
Hurkat et al. | VIP: A versatile inference processor | |
Li et al. | An area-efficient FPGA overlay using DSP block based time-multiplexed functional units | |
AskariHemmat et al. | RISC-V barrel processor for deep neural network acceleration | |
US11151077B2 (en) | Computer architecture with fixed program dataflow elements and stream processor | |
Boutros et al. | Specializing for efficiency: Customizing AI inference processors on FPGAs | |
CN113228113A (zh) | 射线跟踪中用于三角形和方盒相交测试的合并数据路径 | |
Ma et al. | DO-GPU: Domain Optimizable Soft GPUs | |
CN101258480A (zh) | 具有分离串行模块的处理器阵列 | |
US20050166034A1 (en) | Processing method and apparatus for implementing systolic arrays | |
US11829321B2 (en) | General-purpose systolic array | |
Huang et al. | Simulator implementation and performance study of a polymorphous array computer | |
Yin et al. | On the implementation of virtual array using configuration plane | |
Soliman et al. | SystemC implementation of mat-core: A matrix core extension for general-purpose processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |