KR20220036950A - 순수 함수 신경망 가속기 시스템 및 아키텍처 - Google Patents

순수 함수 신경망 가속기 시스템 및 아키텍처 Download PDF

Info

Publication number
KR20220036950A
KR20220036950A KR1020227003568A KR20227003568A KR20220036950A KR 20220036950 A KR20220036950 A KR 20220036950A KR 1020227003568 A KR1020227003568 A KR 1020227003568A KR 20227003568 A KR20227003568 A KR 20227003568A KR 20220036950 A KR20220036950 A KR 20220036950A
Authority
KR
South Korea
Prior art keywords
circuit
instruction
data
dma
instructions
Prior art date
Application number
KR1020227003568A
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 KR20220036950A publication Critical patent/KR20220036950A/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Computational Linguistics (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Quality & Reliability (AREA)
  • Advance Control (AREA)

Abstract

명령 스트림을 수신하기 위한 제어 인터페이스, 입력 데이터를 저장하기 위한 제1 메모리 및 명령어 스트림의 명령어를 복수의 명령으로 디코딩하기 위한 디스패치 회로를 포함하는 엔진 회로, 명령어로부터 디코딩된 복수의 명령 중 각각의 명령을 저장하기 위한 큐 데이터 구조를 지원하는 복수의 큐 회로 및 각각의 수신 및 실행은 복수의 큐로부터 추출된 대응하는 큐의 명령을 수신하고 실행하는 복수의 명령 실행 회로를 포함하는 가속기 회로를 제공한다.

Description

순수 함수 신경망 가속기 시스템 및 구조
본 발명은 하드웨어 프로세서 회로 및 가속기 회로에 관한 것으로, 특히 순수 함수 명령을 실행할 수 있는 프로세서 회로 및 가속기 회로에 관한 것이다.
프로세서는 데이터 요소에 대해 조작(operate)을 실행하는 명령어를 포함하는 명령어 집합 구조(ISA)를 구현하는 하드웨어 처리 장치(예를 들어, 중앙 처리 장치(CPU) 또는 그래픽 처리 장치(GPU))이다. 텐서 프로세서는 데이터 요소를 포함하는 텐서에서 조작되는 명령어를 포함하는 ISA를 구현할 수 있다. 텐서는 정렬된 스칼라 데이터 요소를 포함하는 다방향 데이터 구조이다. 복수의 데이터 요소를 포함하는 텐서에 대해 조작을 시행함으로써 텐서 프로세서는 오직 단일 데이터 요소에서만 스칼라 명령어 조작을 지원하는 스칼라 프로세서보다 상당한 성능 향상을 달성할 수 있다.
프로세서, 특히 텐서 프로세서는 예를 들어 신경망 애플리케이션과 같은 복잡한 계산을 수행하는 데에 사용될 수 있다. 신경망은 인공 지능(AI) 애플리케이션에 널리 사용된다. 본 개시 내용 중의 신경망은 입력 데이터에 기초하여 결정을 내리기 위해 전기 회로에서 구현될 수 있는 인공 신경망이다. 신경망은 하나 또는 더 많은 층(layer)의 노드를 포함할 수 있다. 층은 임의의 입력 층, 은폐 층 또는 출력 층일 수 있다.
입력 층은 입력 데이터에 노출되는 노드를 포함할 수 있고, 출력 층은 출력에 노출되는 노드를 포함할 수 있다. 입력 층 및 출력 층은 신경망 외부에서 관찰할 수 있기 때문에 가시적인 층이다. 입력층과 출력 층 사이의 층을 은폐 층(hidden layer)이라고 칭한다. 은폐 층은 입력 층에서 출력 층으로 전파되는 계산을 수행하기 위해 하드웨어로 구현되는 노드를 포함할 수 있다. 계산은 예를 들어 필터 함수(filter function) 및 활성화 함수와 같은 미리 결정된 함수의 공통 세트를 사용하여 수행될 수 있다. 필터 함수는 곱셈 연산 및 합산(감소 라고도 칭함) 연산을 포함할 수 있다. 활성화 함수는 전 통과 함수(all-pass function), 시그모이드 함수(sig) 또는 쌍곡선 탄젠트 함수(tanh) 중 하나일 수 있다.
일부 실시 양태에서, CPU는 GPU를 위임하여 신경망 또는 다른 계산 밀집형 작업에 관한 계산을 수행할 수 있다. 다른 일 실시 양태에서, CPU의 가속기 회로에 커플링되어 GPU의 작업 로드를 인수할 수 있다. 가속기 회로는 신경망의 계산을 가속화하기 위해 제작된 특수 용도의 하드웨어 회로 장치를 포함할 수 있다. 비록 가속기 회로는 현재 클라우드단(cloud end)이나 장치단(device end)에서 실시되지만, GPU에 비해 아주 저렴한 비용으로 고성능 계산을 수행할 수 있으며, GPU에 비해 이런 가속기 회로의 구현 방식은 프로그래밍 인터페이스와 통합되지 않기 때문에 프로그래머가 디버깅하기가 더욱 어렵다.
상기 인식된 문제점 및 현재 가속기 회로 구현 방식의 기타 결함을 해결하기 위해, 본 개시 내용은 순수 함수 프레임워크 내에서 가속기 회로의 직접 프로그래밍 및 디버깅의 편리를 위한 가속기 회로의 구현 방식의 기술 솔루션을 제공한다. 순수 함수 프레임워크(purely functional framework) 처리는 수학 함수의 평가의 모든 계산과 유사하다. 정의에 따르면 순수 함수 프레임워크 내에서 명령어 실행 결과가 전역 또는 로컬 상황의 상태와 무관하게 오로지 해당 인수에만 의존하도록 확보한다. 따라서 프레임워크 내에의 명령어 실행 결과는 입력 값에 따라 결정된다.
순수 함수 프레임워크 구조의 실시 양태에서는 특정된 기술적 특징을 제공한다. 프레임워크 내의 모든 명령어는 순수 함수로 간주될 수 있는 메모리 투 메모리(memory-to-memory)의 명령어이다. 메모리 투 메모리의 명령어는 제1 메모리에서 데이터를 검색하고, 데이터를 처리하며, 데이터를 제2 메모리로 전이하며, 여기서, 제1 메모리와 제2 메모리는 동일하거나(또는 동일한 메모리 위치에 소재) 또는 다른 메모리일 수 있다. 프레임워크 내의 명령어는 단일 순수 함수 명령어 또는 단일 순수 함수 명령어로부터 구성된 복합 순수 함수일 수 있다. 프레임워크 내의 명령어는 메모리 액세스 단계를 은폐하기 위해 동시에 실행될 수 있다. CPU는 명령어 실행의 절차를 직접 제어하고 모니터링한다. 프레임워크는 가속기 회로가 CPU 또는 기타 시스템(예: 슬레이브 시스템) 중의 기타 가속기 회로에 의해 실행되는 기타 프로그램과 협력하여 작업할 수 있도록 커스텀 콜(custom call) 명령어를 제공할 수 있다. 프레임워크는 컴파일러 최적화가 없이 명령어의 직접 가속을 허용할 수도 있다. 또한, 프레임워크는 지연 평가(즉, 필요할 때의 함수 평가) 및 베타 감소(즉, 수식 입력으로 결과 계산)를 허용할 수 있다. 지연 평가 및 베타 감소를 통해 프레임워크는 데이터 지역성(data locality)(즉, 대량의 데이터를 계산 위치로 이동하는 대신 계산을 데이터가 소재하는 노드에 가깝게 계산을 이동하는 능력)을 달성할 수 있다. 프레임워크는 명령어의 제어 절차와 가속기 회로의 행위를, 외부 상태에 의해 가해지는 영향이 없이 CPU가 실행하는 프로그램을 통해 관찰할 수 있도록 한다. 순수 함수의 특징으로 인해 성능이 주어진 환경에서 확실하고 예측 가능함을 확보함으로써 프로그래머가 응용 프로그램을 더 쉽게 디버깅할 수 있다.
프레임워크는 상호 연결된(분리되지 않음) 계산 유닛 회로를 포함하는 MAC(multiplication - addition-cumulation) 매트릭스 회로를 제공할 수 있다. CPU는 콘볼루션, 내적, 풀링 및 정류 선형 유닛(ReLU) 계산을 위해 MAC 매트릭스 회로를 재사용할 수 있다. 프레임워크는 4차원 조직화 영역 로컬 데이터 레이아웃(four dimensional organized local data layout)과 3차원 조직화 MAC 매트릭스를 허용하여 시스템의 능력을 더욱 향상시킬 수 있다.
CPU는 가속기 회로에 대한 명령어를 실행할 수 있다. 일 실시 양태에서, 명령어는 4개 부분, 즉 조작 부분, 전역 정보 부분, 로컬 정보 부분 및 내부 메모리 할당 부분을 포함하도록 구성될 수 있다. 조작 부분은 가속기 회로가 수행을 위한 기능성을 지정할 수 있다. 구체적으로, 조작 부분은 MAC(multiplication-addition-cumulation), 최대 풀링(max pooling) 또는 정류 선형 유닛(ReLU) 계산 중 하나를 지정하는 계산 필드를 포함할 수 있다.
전역 정보 부분은 예를 들어 시작점, 폭, 높이 등과 같이 텐서 데이터에 영향을 미치는 것을 전체로 하는 매개변수 값을 지정할 수 있다. 전역 정보는 4개의 텐서를 포함할 수 있는바, 입력 특징 맵(베이스, 전역 폭, 면적 = 전역 폭 * 전역 높이), 커널(베이스, 커널 폭, 커널 높이, 커널 면적 = 커널 폭 * 커널 높이, 입력 커널 크기 = 커널 폭 * 커널 높이 * 전역 입력 채널), 부분 합(기수, 전역 폭(출력과 공유 됨), 전역 폭 * 전역 높이(출력과 공유됨)) 및 출력 특징 맵(베이스, 전역 폭, 전역 폭 *전역 높이) 및 메타 데이터 베이스를 할 수 있다.
로컬 정보 부분은 예를 들어 파티션 폭, 파티션 높이, 파티션과 관련된 채널 수 등과 같은 텐서 데이터의 파티션과 관련된 차원 값을 지정할 수 있다. 또한 로컬 정보 부분은 명령어가 특정된 차원에서 평행 실행을 선택할 수 있도록 하드웨어 실행 선호(preferences)를 지정할 수 있다. 로컬 정보는 4개의 텐서를 포함할 수 있는바, 출력 특징 맵과 공유되는 부분 합(데시메이션 전의 폭, 로컬 폭, 로컬 폭 * 로컬 높이, 로컬 출력 채널), 커널 맵(입력 커널 맵 크기 = 커널 폭 * 커널 높이* 로컬 입력 채널), 입력 특징 맵(델타 폭 = 입력 로컬 폭 - 출력 로컬 폭, 델타 높이 = 입력 로컬 높이 - 출력 로컬 높이, 로컬 입력 채널) 및 하드웨어 파티션(계산 유닛의 파티션)을 포함할 수 있다.
내부 메모리 할당 부분은 명령어를 위한 메모리 뱅크를 지정할 수 있다. 내부 메모리 할당은 로컬 메모리 뱅크 식별자를 포함할 수 있되, 여기서 각 식별자는 피연산자이며, 예를 들어 입력 특징 맵, 경계 특징 맵, 커널 맵, 부분 합 맵 및 텐서, 벡터 또는 스칼라 뱅크와 같은 출력 특징 맵이다. 동시에 불필요한 데이터 전이(transfer)를 절약하기 위한 재사용 플래그 및 무동기화(no-synchronization) 플래그도 포함될 수 있다. 내부 메모리 할당 정보는 또한 로컬 메모리에서 피연산자의 데이터 유형을 표시하기 위한 로컬 메모리 데이터 유형을 포함할 수 있다.
각 명령어의 실행은 직접 메모리 액세스(DMA) 입력, 계산 및 DMA 출력의 3단계를 포함할 수 있다. DMA 입력 단계에서, 가속기 회로는 DMA 모드를 사용하여 외부 메모리로부터 가속기 회로와 관련된 로컬 메모리로 데이터를 직접 로드할 수 있다. 계산 단계에서, 가속기 회로는 소스 위치에서 로컬 메모리로부터 데이터를 읽고, 계산을 수행하고, 결과를 로컬 메모리로부터 로컬 메모리 중의 목적지 위치까지 다시 쓸 수 있다. DMA 출력 단계에서, 가속기 회로는 DMA 모드에서 로컬 메모리에 저장된 결과 데이터를 외부 메모리로 전이할 수 있다.
일 실시 양태에서, 프레임워크는 가상 명령어의 실행을 허용할 수 있다. 가상 명령어는 크기 매개변수(예를 들면 폭, 길이 또는 채널 수)에 제한이 없는 명령어이다. 이것은 로컬 정보 부분을 제거하여 달성할 수 있다. 내부 메모리 할당은 비교적 큰 수의 메모리 뱅크로 확장될 수 있으며, 각 메모리 뱅크는 전역 크기의 데이터를 지원하는 것을 유지한다.
본 개시내용은 이하에 주어진 상세한 설명 및 본 개시내용의 다양한 실시예의 첨부 도면을 통해 보다 완전하게 이해할 수 있다. 단, 도면은 본 개시된 내용을 구체적인 실시예로 제한하는 것으로 이해해서는 안되며, 단지 해석 및 이해를 위한 것임을 이해해야 한다.
도 1은 본 개시 내용의 일 실시예에 따른 가속기 회로를 포함하는 시스템을 도시한다.
도 2는 본 개시 내용의 일 실시예에 따른 가속기 회로의 개략도를 도시한다.
도 3은 본 개시 내용의 일 실시예에 따른 엔진 회로의 개략도를 도시한다.
도 4는 본 개시 내용의 일 실시예에 따른 로컬 메모리 참조 보드의 개략도를 도시한다.
도 5는 본 개시 내용의 일 실시예에 따른 계산 셀의 매트릭스를 도시한다.
도 6은 본 개시 내용의 일 실시예에 따른 계산 셀의 개략도를 도시한다.
도 1은 본 개시 내용의 일 실시예에 따른 가속기 회로를 포함하는 시스템(100)을 도시한다. 시스템(100)은 마스터 시스템(114) 및 슬레이브 시스템(116)을 포함할 수 있다. 일 실시예에서, 마스터 시스템(114) 및 슬레이브 시스템(116)은 동일한 구성 요소로 구성될 수 있고, 마스터 및 슬레이브의 역할은 교환될 수 있다. 대안적으로, 슬레이브 시스템(116)은 마스터 시스템(114)에 의해 수행되는 계산을 지원하기 위해 마스터 시스템(114)의 컴포넌트의 서브 세트로 구성될 수 있다. 다른 실시예에서, 시스템(100)은 슬레이브 시스템(116)이 없이 독립형 마스터 시스템(114)만을 포함할 수 있다.
시스템(114)은 하드웨어 프로세서(예를 들어, CPU 또는 GPU)(102), 가속기 회로(104) 및 프로세서(102)를 가속기 회로(104)에 통신적으로 연결하는 인터페이스 회로(106)를 포함할 수 있다. 또한, 시스템(114)은 데이터를 저장하기 위한 가속기 회로(104) 외부에 있는 메모리(108)를 포함할 수 있다.
일 실시예에서 시스템(114)은 컴퓨팅 시스템 또는 시스템온칩(SoC)일 수 있다. 프로세서(102)는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU) 또는 임의의 적합한 유형의 처리 장치와 같은 하드웨어 프로세서일 수 있다. 프로세서(102)는 명령어 실행 파이프라인(미도시), 레지스터 파일(미도시) 및 명령어 집합 구조 (ISA)에 따라 지정된 회로 구현 명령어를 포함할 수 있다.
일 실시예에서, 프로세서(102)는 벡터/텐서 명령어 실행 파이프라인(도시되지 않음), 벡터/텐서 레지스터 파일(미도시) 및 벡터/텐서 명령어 조합 구조(ISA)에 따라 지정된 회로 구현 벡터/텐서 명령어를 포함하는 벡터/텐서 프로세서일 수 있다. 벡터/텐서 명령어는 특정 수의 데이터 요소를 포함하는 벡터/텐서에서 조작될 수 있다. 간결한 설명을 위해 본 개시 내용은 스칼라 및 벡터 프로세서 모두를 여기에서 프로세서로 분류한다. 따라서 프로세서는 달리 명시적으로 지정되지 않는 한 스칼라 프로세서 또는 벡터 프로세서로 이해될 것이다.
메모리 장치(108)는 프로세서(102) 및 가속기 회로(104)에 통신적으로 연결된 저장 장치를 포함할 수 있다. 일 실시예에서, 메모리 장치(108)는 신경망 애플리케이션에 대한 입력 데이터 및 신경망 애플리케이션에 의해 생성된 출력 데이터를 저장할 수 있다. 입력 데이터는 예를 들어 이미지 데이터, 음성(speech) 데이터, 라이다(Lidar) 데이터 등과 같은 애플리케이션 데이터로부터 추출된 특징 맵을 포함하는 특징 맵(하나 이상의 차원)일 수 있으며, 출력 데이터는 신경망에 의해 결정될 수 있다. 그 중, 결정에는 이미지 내의 객체를 다른 클래스로 분류, 이미지 내의 객체 인식 또는 음성 문구의 분별이 포함될 수 있다.
가속기 회로(104)는 프로세서(102) 및 메모리 장치(108)에 통신적으로 커플링되어 그 중의 특수 용도 회로를 사용하여 계산 밀집형 작업을 수행할 수 있다. 하기에서, 프로세서(102)는 또한 가속기 회로(104)의 호스트를 의미할 수도 있다. 가속기 회로(104)는 프로세서(102)를 대신하여 이러한 작업을 수행할 수 있다. 예를 들어, 프로세서(102)는 신경망 애플리케이션을 복수(수백 또는 수천)의 계산 작업으로 분해하고 이러한 작업의 수행을 가속기 회로(104)에 위임하도록 프로그래밍될 수 있다. 가속기 회로(104)에 의해 이러한 작업이 완료되면, 프로세서(102)는 계산된 결과를 대가로 수신할 수 있다. 가속기 회로(104)는 응용 주문형 집적 회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 디지털 신호 처리 장치(DSP), 네트워크 프로세서 또는 이러한 것일 수 있다. 일 실시 양태에서, 가속기 회로(104)는, 프로세서(102)에 의해 가속기 회로(104)로 전송된 명령어가 순수 함수로서 실행되도록 순수 함수 플랫폼 내에서 실시된다. 따라서, 가속기 회로(104)에 대한 명령어를 실행하여 생성된 출력은 입력 값에만 의존한다. 가속기 회로(104)의 순수 함수의 구현 방식은 프로그래머가 명령어 실행의 제어 절차에 대한 가시성(visibility)과 프로세서(102)에 의해 실행되는 뉴런 네트워크 애플리케이션을 디버깅하는 능력을 허용한다. 도 2와 결부하여, 이하는 가속기 회로(104)의 상세한 설명을 제공한다.
인터페이스 회로(106)는 프로세서(102)로부터 가속기 회로(104) 및/또는 메모리(108)로 명령어 및 데이터를 발송하도록 구현된 일반 버스 인터페이스일 수 있다. 예를 들어, 프로세서(102)는 인터페이스 회로(106)를 이용하여 가속기 회로(104)에 명령어를 발송하고, 또한 메모리(108)에 제어 신호를 생성하여, 메모리(108)로부터 DMA 읽기 및 메모리(108)에 DMA 쓰기를 발생시킨다.
특정 상황에서, 도 1에 도시된 바와 같이, 마스터 시스템(114)의 가속기 회로(104)는 슬레이브 시스템(116)으로부터 지원을 요청할 수 있다. 마스터 시스템(114)은 시스템 인터페이스(118)를 통해 슬레이브 시스템(116)에 연결될 수 있다. 마스터 시스템(114)의 가속기 회로(104)는 시스템 인터페이스 (118)를 통해 슬레이브 시스템(116)의 프로세서(CPU, GPU)(110) 및/또는 슬레이브 시스템(116)의 가 속기 회로(112)에 직접 명령을 전송한다. 이러한 방식으로, 마스터 시스템(114)은 슬레이브 시스템 (116)을 사용하여 그 계산 능력을 더욱 향상시킬 수 있다.
도 2는 본 개시내용의 일 실시 양태에 따른 가속기 회로(200)의 모식도를 도시한다. 도 2에 도시된 바와 같이, 가속기 회로(200)는 엔진 회로(202), 제어 인터페이스(204), 시스템 버스 마스터 포트(206), 인터럽트 컨트롤러(210) 및 성능 모니터(212)를 포함할 수 있다. 선택적으로, 가속기 회로(200)는 다른 슬레이브 시스템에 연결하기 위하여 고속 슬레이브 포트(208)를 포함할 수 있다.
엔진 회로(202)는 명령어 파싱 및 디스패치(dispatch) 회로, 비동기화 명령 큐, 뉴런 매트릭스 명령 실행 회로, 레지스터 및 로컬 메모리 뱅크를 포함할 수 있다. 프로세서(예를 들어 CPU, GPU)에 의해 발송된 명령어의 방향에 따라, 엔진 회로(202)는 순수 함수 플랫폼에서 프로세서의 계산을 수행할 수 있으며, 이러한 경우, 엔진 회로(202)에 의해 생성된 출력 결과는 입력 값에만 의존한다. 엔진 회로(202)에 의해 수행된 계산은 콘볼루션, 내적, ReLU 등을 포함할 수 있다. 도 3을 참조하여 엔진 회로(202)에 대해 상세히 설명한다.
제어 인터페이스(204)는 호스트의 프로세서가 엔진 회로(202)에 명령어를 발송할 수 있도록 엔진 회로(202)를 호스트의 프로세서(CPU, GPU)에 연결할 수 있다. 일 실시 양태에서, 제어 인터페이스(204)는 명령어 실행 파이프라인에 직접 연결되어 명령어 및 엔진 회로(202)에 발송되는 구성 데이터를 수신한다. 다른 실시 양태에서 제어 인터페이스(204)는, 명령어 및 엔진 회로(202)에 발송되는 구성 데이터를 수신하기 위해 호스트의 일반 버스 시스템에 연결된다. 두 실시 양태에서, 명령어 및 엔진 회로(202)에 발송되는 구성 데이터는 엔진 회로(202)와 연관된 식별자에 의해 인식될 수 있다. 호스트의 프로세서로부터 명령어를 수신하는 것에 응답하여 제어 인터페이스(204)는 프로세서로부터 수신된 명령어를 엔진 회로(202)로 전달할 수 있다. 구성 데이터 수신에 응답하여 제어 인터페이스(204)는 인터럽트 컨트롤러(210) 및 성능 모니터(212)의 구성을 설정할 수 있다.
시스템 버스 마스터 포트(206)는 외부 메모리(가속기 회로(200) 외부)를 연결하기 위한 인터페이스이다. 외부 메모리는 직접 메모리 액세스(DMA) 입력 채널을 사용하여 엔진 회로(202)의 로컬 메모리로 전이될 수 있는 입력 값을 저장할 수 있으며, 또한 DMA 출력 채널을 사용하여 출력 결과를 로컬 메모리로부터 외부 메모리로 전이할 수 있다. DMA 입/출력은 호스트의 프로세서와 독립되어 로컬 메모리와 메인 메모리 사이에서 데이터를 전이할 수 있기 때문에, 호스트의 프로세서에 가해지는 데이터 전이의 부담을 줄일 수 있다. 일 실시 양태에서 시스템의 구성에 따라 시스템 버스 마스터 포트(206)는 하나 또는 두 개의 고급 확장 인터페이스(AXI) 포트일 수 있다.
고속 슬레이브 포트(208)는 가속기 회로(200)의 엔진 회로(202)를 슬레이브 시스템에 연결하기 위한 인터페이스이다. 고속 슬레이브 포트(208)는 메인 외부 메모리를 거치지 않고 엔진 회로(202)의 내부 메모리 및 슬레이브 시스템의 내부 메모리 사이의 데이터 교환을 용이하게 하기 때문에, 마스터 시스템 및 슬레이브 시스템 사이의 저지연(low-latency) 데이터 전송을 달성할 수 있다.
성능 모니터(212)는 엔진 회로(202)와 관련된 상이한 성능 매개변수를 모니터링하기 위한 회로 로직을 포함할 수 있다. 제어 인터페이스(204)는 모니터링될 성능 매개변수를 설정 및 복귀(unset)하는 데에 사용될 수 있는 구성 데이터를 수신할 수 있다. 성능 매개변수는 데이터 전송에 대한 이용률 및 엔진 회로(202) 내의 뉴런 매트릭스 명령 실행 회로에 대한 이용률을 포함할 수 있다. 채널 대역폭을 고려하면 데이터 전송에 대한 이용률은 엔진 회로(202)와 외부 메모리 사이에서 전이되는 데이터 양을 측정할 수 있다. 매트릭스 중의 총 뉴런 수를 고려하면 뉴런 매트릭스 명령 실행 회로의 이용률은, 뉴런 매트릭스 명령 실행 회로 내의 활성 뉴런 수를 측정할 수 있다. 성능 모니터(212)는 제어 인터페이스를 거쳐 이러한 성능 매개변수를 호스트의 프로세서에 다시 피드(feed)할 수 있다.
인터럽트 제어기(210)는 엔진 회로(202)와 관련된 높은 우선순위 이벤트가 발생한 것을 검출한 것에 응답하여 호스트에 인터럽트 신호를 생성할 수 있다. 높은 우선순위 이벤트는 엔진 회로(202)와 관련된 하드웨어 오류(또는 고장)를 포함할 수 있다. 다른 높은 우선순위 이벤트는 명령 완료, 명령 버퍼 풀 또는 엠티(empty) 이벤트를 포함할 수 있다. 인터럽트 신호는 호스트의 인터럽트 핸들러로 전송될 수 있으며, 여기서, 인터럽트 핸들러는 호스트의 프로세서를 대신하여 인터럽트 신호를 추가로 처리할 수 있다. 예를 들어, 인터럽트 핸들러는 프로세서에 의해 수행되는 현재 작업을 중단하고 프로세서가 인터럽트를 처리하도록 지시할 수 있다. 대체적으로, 인터럽트 핸들러는 프로세서에 알리지 않고 인터럽트 신호를 마스킹(mask)할 수 있다. 일 실시 양태에서 제어 인터페이스(204)는 인터럽트 컨트롤러(210)를 위한 구성 데이터를 수신하고 구성 데이터에 기초하여 인터럽트 컨트롤러(210)를 설정할 수 있다. 예를 들어, 구성 데이터는 인터럽트 상태의 레지스터에 저장된 플래그를 설정하는 데에 사용될 수 있다. 각 플래그는 특정된 인터럽트 이벤트에 해당할 수 있다. 플래그가 설정되면 인터럽트 컨트롤러(210)는 인터럽트 이벤트에 대응하는 인터럽트 신호를 호스트로 포워딩할 수 있다. 플래그가 복귀되면 인터럽트 제어기(210)는 인터럽트 이벤트를 무시하고 인터럽트 신호를 호스트로 전달하는 것을 거부할 수 있다.
위에서 논의된 바와 같이, 엔진 회로(202)는 제어 인터페이스(204)를 거쳐 호스트의 프로세서로부터 명령어를 수신할 수 있다. 명령어의 일부는 엔진 회로(202)가 특정된 계산 작업(예를 들어, 콘볼루션, 내적 또는 ReLU)을 수행하도록 지시할 수 있다. 기타 명령어는 명령어 실행 스트림에 체크 포인트를 삽입하여 제어 인터페이스(204)를 통해 호스트의 프로세서에 디버그 정보를 다시 제공할 수 있다.
엔진 회로는 데이터 로딩, 처리 및 저장 작업을 수행하는 가속기 회로의 일부이다. 이를 위해 엔진 회로는 두 가지 정보 절차를 가지도록 구현될 수 있다. 제1 절차(도 3에서 점선을 사용하여 표현된 "제어 평면"이라고 칭함)는 제어 인터페이스에 의해 수신된 명령어 스트림을 관리할 수 있다. 제2 절차(도 3에서 실선으로 표시된 "데이터 평면"이라고 함)는 벡터/텐서의 데이터 요소를 관리할 수 있다.
도 3은 본 개시내용의 일 실시 양태에 따른 엔진 회로(300)의 모식도를 도시한다. 도 3에 도시된 바와 같이, 엔진 회로(300)는 디스패치 로직(304), 뉴런 매트릭스 명령 큐(312), DMA 입력 명령 큐(314), DMA 출력 명령 큐(316), 뉴런 매트릭스 명령 실행 회로(318), DMA 입력 명령 실행 회로(320), DMA 출력 명령어 실행 회로(322), 로컬 메모리 뱅크 참조 보드(324) 및 로컬 메모리 뱅크(326)의 하드웨어 구성요소를 포함할 수 있다. 위에서 논의된 바와 같이, 명령어(302)는 조작 부분, 전역 정보 부분, 로컬 정보 부분 및 내부 메모리 할당 부분의 4개 부분을 포함할 수 있다.
디스패치 로직(304)은 호스트의 프로세서에 의해 발행된 명령어 스트림 중의 명령어와 관련된 정보를 파싱할 수 있고, 4개의 부분으로부터 추출된 정보에 기초하여 명령어에 대한 3개의 명령을 생성할 수 있다. 이 3개의 명령은 DMA 입력 명령(308), 뉴런 매트릭스 명령(306) 및 DMA 출력 명령(310)을 포함한다. 이 3개의 명령은 각각 명령어 실행의 DMA 입력 단계, 계산 단계 및 DMA 출력 단계에 해당한다. 디스패처 로직(304)은 DMA 입력 명령(308)을 DMA 입력 명령 큐(314)에 배치하고, 뉴런 매트릭스 명령(306)을 뉴런 매트릭스 명령 큐(312)에 배치하고, DMA 출력 명령(310)을 DMA 출력 명령 큐(316)에 배치할 수 있다. 일 실시 양태에서, DMA 입력 명령 큐(314), 뉴런 매트릭스 명령 큐(312) 및 DMA 출력 명령 큐(316)는 저장 장치(예를 들어, 로컬 레지스터, 로컬 메모리)에 저장된 스택 데이터 구조를 사용하여 실시된다. DMA 입력 명령 큐(314), 뉴런 매트릭스 명령 큐(312) 및 DMA 출력 명령 큐(316)는 다수의 엔트리(예를 들어, 각 큐의 16개 엔트리)를 구비하는 선입선출(FiFo) 큐로 구현될 수 있다. FiFo 큐는 세 큐 중의 임의의 하나의 명령이 큐에 배치된 순서대로 순차적으로 실행되도록 보장한다. 그러나 동일한 명령어에서 파생된 세 개의 명령이 동기적으로 실행될 필요는 없다. 따라서 공통 명령어에서 파생된 명령일지라도 다른 큐에 있는 명령은 흩어진 순서로 발송될 수 있다. 즉, 명령어 스트림 중 늦은 명령어의 큐에 있는 명령은 명령어 스트림 중 이른 명령어의 다른 큐에 있는 다른 명령보다 먼저 발송되어 실행될 수 있다. 세 개의 큐를 사용하면 서로 다른 명령어에서 파생된 서로 다른 명령을 동시에 실행할 수 있다. 이 기능은 데이터 사전 로딩(예를 들어 데이터를 사용하는 뉴런 매트릭스 명령이 발송되기 전에 데이터를 로컬 메모리 뱅크에 로딩)를 가능하게 하여 메모리 대기 시간을 은폐하고 엔진 회로(300)의 전체 성능을 개선한다.
DMA 입력 명령 실행 회로(320)는 DMA 입력 명령 큐(314)로부터 추출된 DMA 입력 명령(308)을 수신하고 또한 DMA 입력 명령(308)을 실행할 수 있고; 뉴런 매트릭스 명령 실행 회로(318)는 뉴런 매트릭스 명령 큐(312)로부터 추출된 뉴런 매트릭스 명령(306)을 수신하고 또한 뉴런 매트릭스 명령(306)을 실행할 수 있고; DMA 출력 명령 실행 회로(322)는 DMA 출력 명령 큐(316)로부터 추출된 DMA 출력 명령(310)을 수신하고 또한 DMA 출력 명령(310)을 실행할 수 있다. 로컬 메모리 뱅크 참조 보드(324)는 명령어의 DMA 입력 명령(308), 뉴런 매트릭스 명령(306) 및 DMA 출력 명령(310)이 비동기 방식으로 실행되더라도 실행 결과를 정확하게 확보하기 위한 논리 회로를 포함할 수 있다.
일 실시 양태에서, 로컬 메모리 뱅크 참조 보드(324)는 하드웨어에 구현되어, 인터록킹 의존성을 갖는 명령이 정확한 순서로 실행되도록 보장하는 카운터를 포함할 수 있다. 로컬 메모리 뱅크 참조 보드(324)는 로컬 메모리 뱅크(326)에 대한 읽기 및 쓰기 조작을 제어하는 신호를 생성할 수 있다. 데이터 의존성 및 리소스 의존성을 포함하는 두 가지 유형의 의존성이 있다. 데이터 의존성은, 명령어의 뉴런 매트릭스 명령(306)이 동일한 명령어의 DMA 입력 명령(308)에 의해 제공되는 데이터를 필요로 할 수 있고; 뉴런 매트릭스 명령(306)은 동일한 뉴런 매트릭스 명령 실행 회로에 의해 실행된 이전 뉴런 매트릭스 명령의 결과에서 비롯한 데이터를 필요로 할 수 있으며; 명령어의 DMA 출력 명령(310)은 동일한 명령어의 뉴런 매트릭스 명령(306)에서 비롯한 데이터를 필요로 할 수 있다. 리소스 의존성은, 메모리 뱅크가 뉴런 매트릭스 명령(306)에 의해 판독되고 있거나 DMA 출력 명령(310)에 의해 외부 메모리로 출력되기 때문에 DMA 입력 명령(308)이 로컬 메모리 뱅크에 쓸 수 없는 것; 및 메모리 뱅크는 DMA 출력 명령(310)에 의해 외부 메모리로 출력되기 때문에 뉴런 매트릭스 명령은 로컬 메모리 뱅크에 쓸 수 없는 것을 포함할 수 있다.
도 4는 본 개시내용의 일 실시 양태에 따른 로컬 메모리 참조 보드(400)의 모식도를 도시한다. 로컬 메모리 참조 보드(400)는 데이터 의존성 및 리소스 의존성에 기초하여 명령 실행의 정확한 순서를 보장하기 위해 하드웨어 카운터를 포함할 수 있다. 도 4에 도시된 바와 같이, 로컬 메모리 참조 보드(400)는 카운터(402, 404) 및 로컬 메모리 뱅크(326)에 대한 읽기 및 쓰기 조작을 제어하기 위한 신호를 생성하는 데에 사용될 수 있는 참조 레지스터(406, 408)를 포함할 수 있다.
일 실시 양태에서, 로컬 메모리 뱅크(326)의 각 메모리 뱅크에 DMA 입력 배리어(barrier) 신호, 뉴런 매트릭스 배리어 신호 및 DMA 출력 배리어 신호를 제공할 수 있다. 이러한 배리어 신호는 메모리 뱅크가 읽기 또는 쓰기 가능한지 여부를 결정할 수 있다. DMA 입력 명령 실행 회로(320)는, DMA 입력 명령 실행 회로(320)가 메모리 뱅크에 데이터를 전송하는 것을 완료하고 메모리 뱅크에 새로운 읽기 참조(또는 주소 포인터)가 있는 것에 대해 대응하게끔 지시하는 것을 결정하는 것에 응답하여, DMA 입력 명령 실행 회로(320)는 카운터(404)의 증분(di_cons_cnt)을 유발할 수 있다. 뉴런 매트릭스 명령 실행 회로(318)는 메모리 뱅크 판독을 완료하는 결정에 응답하며 뉴런 매트릭스 명령 실행 회로(318)는 카운터(404)의 증분(di_cons_cnt)을 유발할 수 있다. 카운터(402)에 저장된 값(di_prod_cnt)이 카운터(404)에 저장된 값(di_cons_cnt)과 일치한 경우, DMA 입력 명령 실행 회로(320)에 의해 생성된 참조는 뉴런 매트릭스 명령 실행 회로(318)에 의해 소모되지 않고, 또한 뉴런 매트릭스 명령 실행 회로(318)는 기다려야 한다. 일 특수한 경우는, 메모리 뱅크와 연관된 재사용 플래그가 설정될 때 DMA 입력 명령 실행 회로(320)는 모든 이전 참조가 소모될 때까지 기다리지 않고 카운터(402)의 증분을 유발할 수 있다. 이러한 방법은 더 많은 DMA 입력 명령을 미리 실행할 수 있다.
DMA 입력 명령 실행 회로(320)가 계산 결과를 절약하기 위해 메모리 뱅크에 대한 액세스 권한을 보류하기 시작할 때, DMA 입력 명령 실행 회로(320)는 참조 레지스터(406)(nr_w_ref)를 설정할 수 있다. 이는 명령어 실행의 시작점을 마킹한다. 계산 결과가 메모리 뱅크에 저장될 때 참조 레지스터(406)는 뉴런 매트릭스 명령 실행 회로(318)에 의해 제거될 수 있다. DMA 입력 명령 실행 회로(320) 또는 뉴런 매트릭스 명령 실행 회로(318)는 참조 레지스터(408)(do_r_ref)를 설정하여 메모리 뱅크에 저장된 데이터가 외부 메모리로 발송되고 있음을 표시할 수 있다. DMA 출력 명령 실행 회로(322)는 참조 레지스터(408)를 제거하여, 데이터가 외부 메모리로 전이되었고 또한 메모리 뱅크가 릴리즈되었음을 나타낼 수 있다.
카운터(402, 404) 및 참조 레지스터(406, 408)는 각각의 로컬 메모리 뱅크에 제공된다. 따라서 모든 명령은 실행 전에 모든 배리어 신호를 확인해야 한다. 도 4에 도시된 바와 같이 DMA 입력 배리어 신호는 다음 조건 중 하나에 의해 설정된다: (1) di_prod_cnt == di_cons_cnt; 또는 rn_w_ref가 1로 설정됨; 또는 do_r_ref가 1로 설정된다. 만일 di_prod_cnt != di_cons_cnt이면 뉴런 매트릭스 배리어 신호가 설정된다. DMA 출력 배리어 신호는 다음 조건 중 하나에 의해 설정된다: (1) nr_w_ref = 1; 또는 (2) do_r_ref = 0. 배리어 신호는 관련 명령의 실행을 방지할 수 있다. 예를 들어, DMA 입력 배리어 신호가 설정될 경우, DMA 명령 실행 회로(320)는 메모리 뱅크에 대한 액세스를 중지할 수 있고; 뉴런 매트릭스 배리어 신호가 설정될 경우, 뉴런 매트릭스 명령 실행 회로(318)는 메모리 뱅크에 대한 액세스를 중지할 수 있고; DMA 출력 배리어 신호가 설정될 때 DMA 출력 명령 실행 회로(322)는 메모리 뱅크에 대한 액세스를 중지할 수 있다.
도 4에 도시된 예제의 실시 양태는 오직 하나의 뉴런 매트릭스 명령 실행 회로 및 하나의 DMA 출력 명령 실행 회로만을 포함한다. 따라서, 참조 레지스터(406, 408)는 1로 설정되거나 0으로 복귀될 수 있는 오직 하나의 비트 플래그만 포함한다. 다른 실시 양태에서 하나 이상의 뉴런 매트릭스 명령 실행 회로 또는 하나 이상의 DMA 출력 명령 실행 회로를 포함할 수 있으며, 카운터(402, 404와 같은)는 비트 플래그를 대신하여 사용될 수 있다.
도 3에 도시된 바와 같이, 엔진 회로와 관련된 데이터 평면을 위한 두 개의 데이터 흐름이 있다. 활성(acrive) 데이터 흐름은, DMA 입력 명령(308)을 실행하여 외부 메모리에서 로컬 메모리 뱅크(326)에로의 데이터를 검색(retrive)하는 것, 뉴런 매트릭스 명령 실행 회로에 의해 데이터를 처리하고, 데이터를 다시 로컬 메모리 뱅크(326)에 저장하고, DMA 출력 명령(322)을 실행하여 외부 메모리에 데이터를 쓰는 것을 포함할 수 있다. 활성 데이터 흐름은 엔진 회로(300)에 의해 발송되는 모든 청구와 함께 엔진 회로(300)에 의해 제어된다. 수동(passive) 데이터 흐름은 내부 메모리로부터 오는 데이터를 검색하고 결과를 내부 메모리에 저장하기 위해 뉴런 매트릭스 명령 실행 회로(318)에 흐르는 데이터를 포함한다.
뉴런 매트릭스 명령 실행 회로는 명령어의 조작 부분 중 조작 코드(opcode)에 의해 지정된 조작을 수행할 수 있다. 뉴런 매트릭스 명령 실행 회로는 계산 셀의 매트릭스 및 배리어 신호 제어 로직을 포함할 수 있다. 도 5는 본 개시내용의 일 실시 양태에 따른 계산 셀(500)의 매트릭스를 도시한다. 매트릭스는 x 및 y 차원을 따라 동일한 수의 셀이 있는 정방형 매트릭스이거나 또는 x 및 y 차원에 따라 다른 수의 셀이 있는 직사각형 매트릭스일 수 있다. 도 5에 도시된 바와 같이, 2차원 어레이 내의 셀은 가로(x) 및 세로(y) 차원에서 연결되어 있다. 각 셀은 하나의 세트의 차원 카운터, 피더 회로, 라이터 회로, 계산 유닛 어레이 및 로컬 메모리 뱅크를 포함할 수 있다. 따라서 각 셀이 계산 유닛 어레이를 포함하는 셀의 매트릭스는 텐서 계산을 수행하는 데에 특별히 적합하다. 텐서 데이터 객체는 3차원에 따라 인덱싱된 데이터 큐브(cube)이고 어레이 객체는 2차원을 따라 인덱싱된 데이터 어레이이다.
각각의 계산 셀은 그 안에 있는 계산 유닛 어레이를 사용하여 벡터 조작을 수행하도록 구성될 수 있다. 도 6은 본 개시내용의 일 실시 양태에 따른 계산 셀(600)의 모식도를 도시한다. 도 6에 도시된 바와 같이, 계산 셀(600)은 계산 유닛 어레이(각각의 유닛은 U로 표시)(602) 및 제어 논리 회로를 포함할 수 있다. 제어 논리 회로는 차원 카운터(604), 3개의 피더 회로(606, 608, 610), 로컬 메모리 뱅크(612), 라이터(writer) 회로(614) 및 스칼라 레지스터(616)를 포함할 수 있다. 계산 셀(600)은 뉴런 매트릭스 명령 및 셀에 발송되는 뉴런 매트릭스 배리어 신호에 기초하여 로컬 메모리에 저장된 데이터에 대해 조작을 실행할 수 있다. 각 계산 유닛은 하나 또는 복수의 제어 신호의 제어 하에 한 가지 유형의 계산을 수행할 수 있는 단일 회로 블록이다. 제어 신호는 두 그룹으로 구분할 수 있다. 제1 그룹의 제어 신호는 뉴런 매트릭스 명령을 디코딩하여 생성되며 또한 셀의 내부 요소와 독립된다. 뉴런 매트릭스 명령이 뉴런 매트릭스 명령 실행 회로에 발송되면 제1 그룹의 제어 신호는 설정된다. 제1 그룹의 제어 신호가 모든 계산 유닛에 적용된다. 제2 그룹의 제어 신호는 차원 카운터(604)에 저장된 값에 기초하여 제1 피더 회로(606)(Fmap 피더)에 의해 내부적으로 동적으로 생성된다. 제2 그룹의 제어 신호는 어레이 내의 상이한 계산 유닛에 적용될 때 달라질 수 있다. 제2 그룹의 제어 신호는 나중에 논의되는 바와 같이 mac_en, acc_clear_en, export, acc_ reset_en 등을 포함할 수 있다. 차원 카운터가 데이터 구조(예를 들어 어레이)의 경계를 넘을 때, 이러한 제어 신호는 활성화되어 차원 카운터가 예를 들어, 3D 텐서, 깊이 별, 포인트 별, 요소 별 등과 같은 더 높은 차원의 조작을 수행한다. 제2 그룹의 제어 신호는 각 계산 유닛이 2차원 어레이 구조를 구비하여 올바른 입력/출력 값과 올바른 계산 결과를 갖도록 확보하는 데에 도움이 될 수 있다.
차원 카운터(604)는 계산과 관련된 상이한 차원 값을 카운트 다운하는 데에 사용될 수 있다. 일 실시 양태에서 뉴런 매트릭스 배리어 신호는 계산 셀을 활성화(enabling) 또는 비활성화(disabling)시키기 위해 차원 카운터(604)에 제공될 수 있다. 뉴런 매트릭스 배리어 신호가 설정된 경우(예를 들어 1), 차원 카운터가 비활성화되고 뉴런 매트릭스 명령에 의해 액세스가 금지될 수 있다. 만일, 뉴런 매트릭스 배리어 신호가 설정되지 않은 경우(예를 들어 0), 차원 카운터는 뉴런 매트릭스 명령에 의해 초기화될 수 있다. 뉴런 매트릭스 명령은 입력 데이터(특징 데이터라고 칭함)와 필터 데이터(커널이라고 칭함)의 높이와 폭을 나타내는 초기 값을 차원 카운터에 제공할 수 있다. 계산은 콘볼루션을 사용하여 필터(예를 들어 고역/저역 통과 필터)를 입력 데이터(예를 들어 2D 이미지)에 응용한다.
차원 카운터(604)는 커널 폭 카운터, 커널 높이 카운터, 입력 채널 카운터, 입력 면적 카운터(입력의 높이 및/또는 폭) 및 출력 채널 카운터를 포함할 수 있다. 커널 폭 카운터 및 커널 높이 카운터는 커널의 폭과 높이를 저장할 수 있다. 입력 채널 카운터는 메모리 뱅크에서 데이터를 검색하는 횟수를 지정할 수 있다. 특정된 계산의 경우, 계산 유닛의 크기 제한으로 인해 입력 데이터를 여러 번 검색해야 할 수도 있다. 큰 특징 맵은 별도로 처리되는 더 작은 부분으로 파티션될 수 있다. 이러한 솔루션에서 채널 카운터는 특징 맵과 관련된 부분의 수를 저장할 수 있다. 출력 채널 카운터는 출력 결과를 수신하는 메모리 뱅크를 지정할 수 있다. 예를 들어, 출력 채널 카운터는 이러한 특징 맵의 부분에서 콘볼루션 계산을 수행하는 횟수를 저장할 수 있다. 총 계산 량은 커널 폭*커널 높이* 파티션 카운터*입력 채널 카운터*출력 채널 카운터에 비례할 수 있다.
차원 카운터에 저장된 값은 피더 회로(606, 608, 610)에 피드될 수 있다. 피더 회로(606)(Fmap 피더)는 로컬 메모리 뱅크(612)에서 비롯되는 입력 데이터(특징 맵)의 전이를 제어할 수 있다. 피더 회로(608)(커널 피더)는 로컬 메모리 뱅크(612)에서 비롯되는 커널의 전이를 제어할 수 있다. 피더 회로(610)(psum 피더)는 로컬 메모리 뱅크(612) 중의 부분 합 값의 전이를 제어할 수 있다. 피더 회로(606)는 차원 카운터(604)에 저장된 값 및 뉴런 매트릭스 명령으로부터 수신된 조작 코드를 기반으로 피연산자 값(op0s)을 계산 유닛 및 제어 신호 mac_en, acc_clear 및 export에 공급한다. 피더 회로(608, 610)는 기타 2개의 피연산자(op1, op2)를 계산 유닛에 공급하기 위해 결합될 수 있다. 피더 회로(610)는 제어 신호(acc_reset)를 생성할 수 있다. 피연산자 값 op0s는 특징 맵이 이로부터 검색할 수 있는 로컬 메모리 뱅크에 대한 참조일 수 있다. 피연산자 값 op1s는 커널을 제공하는 로컬 메모리 뱅크에 대한 참조일 수 있다. 피연산자 값 op2s는 부분 합을 저장하기 위한 로컬 메모리 뱅크에 대한 참조일 수 있다.
제어 신호는 차원 카운터에 저장된 값을 기반으로 활성화 및 비활성화될 수 있다. 커널 폭 카운터 또는 커널 높이 카운터가 0이 아닌 값을 저장할 때, 피더 회로(606)는 mac_en 신호를 설정하여 곱셈-덧셈-누적(multiplication-addition-cumulation, MAC) 조작을 트리거할 수 있다. 커널 폭 카운터의 값이 감소될 때, 피더 회로(606)는 서쪽으로 시프트하는 신호(shift-to-west signal)를 활성화시켜 계산 유닛 어레이(602) 중의 값을 서쪽 방향(도 6에 도시된 바와 같이, N, S, E, W 각각 북쪽, 남쪽, 동쪽, 서쪽 방향을 나타냄)으로 시프트하게 한다. 커널 높이 카운터의 값이 감소될 때, 피더 회로(606)는 북쪽으로 시프트하는 신호를 활성화시켜 계산 유닛 어레이(602)의 값을 북쪽 방향으로 시프트한다. 입력 채널 카운터의 값이 감소될 때, 피더 회로(606)는 특징 맵 준비 신호를 활성화시켜 특징 맵이 계산을 위해 계산 유닛 어레이에 의해 판독될 준비가 되었음을 나타낸다. 입력 면적 카운터 중의 값이 감소할 때, 피더 회로(606)는 acc_clear 및 export 신호를 활성화하여 계산 유닛에서 로컬 메모리 뱅크로 결과를 수출(export)하고 계산 유닛 중의 누산기를 클리어한다.
피더 회로(Fmap 피더)는 특징 맵 데이터 및 경계 특징 맵 데이터의 피연산자를 로컬 메모리 뱅크에서 4가지 유형의 버퍼로 전송하는 것을 제어한다. 4가지 유형의 버퍼는 op0을 계산 유닛에 제공하기 위한 피연산자 버퍼, 동쪽 인접 데이터 값을 피연산자 버퍼를 보유하는 영역에 제공하기 위한 동쪽 경계 버퍼, 영역에 남쪽 인접 데이터 값을 공급하기 위한 남쪽 경계 버퍼 및 남쪽 경계 버퍼를 유지하는 영역에 동부 인접 데이터 값을 공급하기 위한 코너(또는 동남) 경계 버퍼를 포함할 수 있다.
피연산자 버퍼 및 동쪽 경계 버퍼는 세 개(3)의 레벨로 구현될 수 있다. 레벨 0 버퍼는 Fmap 피더가 데이터를(로컬 메모리 뱅크에서) 레벨 0 버퍼로 검색하는 데에 사용되고; 레벨 1 버퍼는 북쪽 방향 시프팅을 위한 데이터를 유지하는 데에 사용되고; 레벨 2 버퍼는 동쪽 방향 시프팅을 위한 데이터를 유지하는 데에 사용된다. 특징 맵 준비 신호가 처음 활성화되면, Fmap 피더는 데이터를 레벨 0 버퍼로 읽어 들이고, Fmap 피더는 레벨 0 버퍼 중의 데이터 값을 레벨 1 버퍼로 푸시하고 또한 특징 맵 준비 신호가 다시 활성화되면 다음 데이터 블록을 로드하기 위해 레벨 0 버퍼를 릴리즈한다. 레벨 2 버퍼에 저장된 데이터 값은 서쪽으로 시프트하는 신호를 활성화시키는 데에 응답하여 서쪽으로 이동된다. Fmap 피더는 레벨 1 버퍼로부터 데이터를 다시 로드하고 북쪽으로 시프트하는 신호를 활성화시키는 데에 응답하여 레벨 1 버퍼 중의 데이터 값을 북쪽으로 한 열(raw)만큼 이동할 수 있다. 다중 레벨 버퍼 방식은 더 많은 버퍼를 필요로 할 수 있지만 다중 레벨 버퍼 방식은 수천 개의 계산 유닛이 있을 경우, 연결 와이어의 양을 상당히 줄일 수 있다. 각 버퍼는 각 행 또는 열이 마지막으로 유효한 행 또는 열인지 여부를 인식하는 각 비트 플래그와 연관될 수 있다. 데이터가 북쪽의 행 또는 동쪽의 열로 전이될 경우, 큰 플래그에 의해 마지막 행 또는 열로 인식된 행이나 열은 마지막으로 자동으로 0으로 채워질 수 있다.
입력 면적(스트라이드: 1), 입력 채널(스트라이드: 셀 높이의 배수로 반올림하는 특징 맵 높이, 여기서 반올림은 동일한 위치에 있으며 상이한 입력 채널에서 비롯되는 데이터를 동일한 유닛에 피드되게끔 보장함), 특징 맵 높이 카운터 및 출력 채널을 기반으로 로컬 메모리 뱅크(612)에 액세스하기 위한 주소를 계산한다.
커널 피더는 커널 맵 피연산자를 위한 로컬 메모리 뱅크 중의 데이터 전이를 제어할 수 있다. 커널 피더는 두 가지 레벨의 버퍼를 포함할 수 있으며, 레벨 0 버퍼는 메모리 뱅크에서 비롯되는 커널 요소 행을 보유하고 또한 레벨 1 버퍼는 셀 중의 모든 유닛에 브로드캐스트되는 중복된 요소를 보유한다.
Psum 피더는 부분 합 맵 피연산자의 로컬 메모리 뱅크 중의 데이터 전이를 제어할 수 있다. Psum 피더에는 하나의 레벨의 버퍼만 포함될 수 있다.
라이터(writer) 회로(614)는 계산 유닛으로부터 로컬 메모리 뱅크로의 데이터 출력을 제어할 수 있다. 계산 유닛은 쓰기 활성화(wen) 신호를 발송하여 라이터의 활성화 유닛을 활성화시킨 다음 활성화 유닛의 출력을 로컬 메모리에 쓸 수 있다. 활성화 장치는 선형, ReLU, 시그모이드 및 쌍곡선 탄젠트 함수를 지원한다.
스칼라 레지스터(616)는 로컬 메모리 뱅크와 유사한 방식으로 어드레싱되고 참조될 수 있다. 스칼라 레지스터(616)는 특징 맵의 요소에 적용될 수 있는 스칼라 값을 저장할 수 있다. 예를 들어, 스칼라 레지스터(616)는 특징 맵의 각 요소에 적용될 수 있는 승수 값을 저장할 수 있다.
예 1은 명령 스트림을 수신하기 위한 제어 인터페이스, 입력 데이터를 저장하기 위한 제1 메모리 및 명령어 스트림의 명령어를 복수의 명령으로 디코딩하기 위한 디스패치 회로를 포함하는 엔진 회로, 명령어로부터 디코딩된 복수의 명령 중 각각의 명령을 저장하기 위한 큐 데이터 구조를 지원하는 복수의 큐 회로 및 복수의 큐로부터 추출된 대응하는 큐의 명령을 수신하고 실행하는 복수의 명령 실행 회로를 포함하는 가속기 회로이다.
본 개시내용은 제한된 수의 실시 양태를 통해 설명되었으나, 본 기술분야의 통상의 기술자는 이로부터 수많은 수정 및 변경이 이루어 질 것을 인식할 것이다. 첨부된 청구범위는 본 개시내용의 사상 및 범위 내에서의 수정 및 변경을 포함하도록 의도된다.
설계는 창조에서 시뮬레이션 및 제작에 이르기까지 다양한 단계를 거치게 된다. 설계를 나타내는 데이터는 다양한 방식으로 설계를 나타낼 수 있다. 우선, 시뮬레이션에서 유용한 것과 같이, 하드웨어는 하드웨어 기술 언어 또는 다른 기능 기술 언어를 사용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트가 있는 회로 레벨 모델은 설계 과정의 일부 단계에서 제작될 수 있다. 또한, 대부분의 설계는 어느 한 단계에서 하드웨어 모델 중 다양한 장치의 물리적 배치를 나타내는 데이터 레벨에 도달하게 된다. 종래의 반도체 제조 기술이 사용되는 예제의 경우, 하드웨어 모델을 나타내는 데이터는 집적 회로를 제작하는 데에 사용되는 차폐에 대해 서로 다른 차폐 층에 다양한 특성을 가진 데이터의 존재 또는 결여를 지정하는 데이터일 수 있다. 설계의 모든 표현에서 데이터는 모든 형식의 기계 판독 가능 매체에 저장될 수 있다. 메모리 또는 디스크와 같은 자기 또는 광학 저장은 광학 또는 전자파 변조를 통해 전송되는 정보 또는 따로 생성하여 이러한 정보를 전송하는 기계 판독 가능 매체일 수 있다. 코드 또는 디자인을 나타내거나 전달하는 전기적 반송파가 전송될 때, 전기 신호의 복사, 버퍼링 또는 재전송을 수행하는 정도가 될 경우, 새로운 사본이 만들어진다. 따라서, 통신 제공자 또는 네트워크 제공자는 적어도 반송파로 인코딩된 정보와 같은 문장을 유형의, 기계 판독 가능 매체에 일시적으로 저장할 수 있음으로써, 본 개시내용의 실시 예의 기술을 나타낸다.
본 명세서에서 사용되는 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 가리킨다. 예를 들어, 모듈은 마이크로 컨트롤러에 의해 실행되도록 적응된 코드를 저장하는 비일시적 매체와 관련된 마이크로 컨트롤러와 같은 하드웨어를 포함한다. 따라서, 일 실시 양태에서 모듈에 대한 언급은, 비일시적 매체에 보유될 코드를 인식 및/또는 실행하도록 특별히 구성된 하드웨어를 말한다. 또한, 다른 일 실시 양태에서, 모듈은 코드를 포함하는 비일시적 매체를 가리키는 바, 이는 마이크로컨트롤러가 미리 결정된 조작을 수행하도록 특별히 구성된다. 그리고 추론할 수 있는 바와 같이, 또 다른 일 실시 양태에서, 모듈(본 예시에서) 용어는 마이크로컨트롤러 및 비일시적 매체의 조합을 나타낼 수 있다. 예시에 의해 분리된 모듈 경계는 일반적으로 다르며 또한 겹칠 수 있다. 예를 들어, 제1 및 제2 모듈은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있으며, 일부 독립 하드웨어, 소프트웨어 또는 펌웨어를 보유할 수 있다. 일 실시 양태에서, 로직 용어는 예를 들어 트랜지스터, 레지스터 또는 기타 하드웨어, 예를 들어 프로그래밍 가능한 로직 디바이스와 같은 하드웨어를 포함한다.
일 실시 양태에서 "구성되다”라는 문구는 구성하고, 같이 놓고, 제작하고, 제공하는 것을 뜻하는 바, 장치, 하드웨어, 로직 또는 요소를 판매, 도입 및/또는 설계하여 지정된 또는 결정된 작업을 수행한다. 본 예에서, 만약 조작되지 않은 장치 또는 그 요소가 설계, 커플링 및/또는 상호 연결되어 상기 지정된 작업을 실행할 경우, 그것은 여전히 상기 지정된 작업을 수행하도록 “구성되어” 있다. 순 예시적인 예와 같이, 로직 게이트는 조작 동안 0 또는 1을 제공할 수 있다. 그러나 클록에 활성화 신호를 제공하도록 “구성된” 로직 게이트에는 1 또는 0을 제공할 수 있는 모든 잠재적 로직 게이트가 포함되지 않는다. 반면 로직 게이 트는 클록 활성화를 위한 그 어떤 방식으로 연결되어 조작 중에 1 또는 0으로 출력되는 로직 게이트이다. “구성되다”라는 용어는 조작을 필요로 하지 않지만 대신 장치, 하드웨어 및/또는 요소의 잠복 상태에 치중하는 것에 유의해야 하며, 여기서, 잠복 상태에서, 장치, 하드웨어 및/또는 요소가 실행 시, 특정된 작업을 수행하도록 설계된다.
또한, 일 실시 양태에서 "으로(to)”, “할 수 있는/으로(capable of/to)" 및/또는 “조작하여 ...에 사용 가능”이라는 문구는 이러한 방식으로 설계되어 지정된 방식으로 장치, 로직, 하드웨어 및/또는 요소의 사용을 활성화하는 그 어떤 장치, 로직, 하드웨어 및/또는 요소를 가리킨다. 일 실시 양태에서, “으로”, “할 수 있는/으로” 및/또는 "조작하여 ??에 사용 가능”의 사용은 장치, 논리, 하드웨어 및/또는 요소의 잠재 상태를 의미하며, 여기서, 장치, 논리, 하드웨어 및/또는 요소는 조작하지 않지만 이러한 방식으로 설계되어 특정된 형식으로 장치를 활성화할 수 있도록 한다.
본 명세서에서 사용되는 값은 숫자, 상태, 로직 상태 또는 이진법 로직 상태의 임의의 알려진 표현 방식을 포함한다. 일반적으로 로직 레벨, 로직 값(logic value) 또는 로지컬 값(logical value)의 사용은 단순히 이진법 로직 상태를 나타내는 1 및 0이라고도 칭한다. 예를 들어, 1은 높은 로직 수준을 나타내고 0은 낮은 로직 수준을 나타낸다. 일 실시 양태에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 로직 값 또는 다중 로직 값을 유지할 수 있다. 그러나 컴퓨터 시스템 중의 값의 다른 표현 방식이 사용되었다. 예를 들어, 10진수 10은 910의 이진법 값과 16진수 문자 A로 나타낼 수도 있다. 따라서 값에는 컴퓨터 시스템에 저장할 수 있는 정보의 모든 표현 방식이 포함된다.
또한, 상태는 값 또는 값의 일부로 표현될 수 있다. 예를 들어, 로직1과 같은 첫 번째 값은 디폴드 또는 초기 상태를 나타낼 수 있는 반면 로직0과 같은 두 번째 값은 설정되지 않은 상태를 나타낼 수 있다. 또한, 일 실시 양태에서, 재설정 및 설정의 용어는 각각 기설정 및 업데이트된 값 또는 상태를 나타낸다. 예를 들어, 디폴드 값은 잠재적으로 높은 로직 값, 즉 재설정을 포함하는 반면 업데이트된 값은 잠재적으로 낮은 로직 값, 즉 설정을 포함한다. 값의 임의의 조합을 사용하여 임의의 수량의 상태를 나타낼 수 있다.
위에 설명된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시 양태는 처리 요소에 의해 실행 가능한 기계 액세스 가능, 기계 판독 가능, 컴퓨터 액세스 가능 또는 컴퓨터 판독 가능한 매체에 저장된 명령어 또는 코드를 통해 구현될 수 있다. 비일시적 기계 액세스 가능/판독 가능 매체는 컴퓨터 또는 전자 시스템과 같은 기계가 액세스 가능한 형식으로 정보를 제공(즉, 저장 및/또는 발송)하는 모든 메커니즘을 포함한다. 예를 들어, 비일시적 기계 액세스 가능 매체는 정적 RAM(SRAM) 또는 동적 RAM(DRAM)과 같은 랜덤 액세스 메모리(Random-Access Memory); ROM; 자기 또는 광 저장 매체; 플래시 메모리 장치; 전기 저장 장치; 광 저장 장치; 음향 저장 장치; 일시적(전파) 신호(예를 들어 반송파, 적외선 신호, 디지털 신호)로부터 수신된 정보를 보유하기 위한 기타 형식의 저장 장치 등을 포함하며, 이는 정보를 수신할 수 있는 비일시적 매체와 구별된다.
본 개시내용의 실시 양태를 수행하기 위해 로직을 프로그래밍하는 데에 사용되는 명령어들은 예를 들어 DRAM, 캐시, 플래시 메모리 또는 기타 스토리지와 같은 시스템의 메모리 내에 저장될 수 있다. 또한, 명령어는 네트워크를 통하거나 또는 기타 컴퓨터 판독 가능 매체를 통해 배포될 수 있다. 따라서 기계 판독 가능 매체는 기계(예를 들어 컴퓨터)가 읽을 수 있는 형식으로 정보를 저장하거나 전송하기 위한 모든 메커니즘을 포함할 수 있는바, 플로피 디스켓, 광 디스크(optical disk), 콤팩트 디스크(compact disc), 읽기 전용 메모리(CD -ROM) 및 광자기 디스크, 읽기 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM(Erasable Programmable Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), 자기 또는 광학 카드, 플래시 메모리 또는 전기, 광학, 음향 또는 기타 형식의 전파 신호(예를 들어 반송파, 적외선 신호, 디지털 신호 등)를 통해 인터넷에서 정보를 발송하는 데에 사용되는 유형의 기계 판독 가능 저장을 포함하지만 이에 국한되지 않는다. 따라서, 컴퓨터 판독 가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독 가능한 형식으로 전자 명령어 또는 정보를 저장하거나 발송하기에 적합한 모든 종류의 유형 기계 판독 가능 매체를 포함한다.
본 명세서는 전반에 걸쳐 "하나의(one) 실시 양태" 또는 "일(an) 실시 양태"는 실시 양태와 관련되어 설명된 상기 특정된 특징(feature), 구조 또는 특징(characteristic)이 본 개시내용의 적어도 하나의 실시 양태에 포함된다는 것을 의미한다. 따라서, 본 명세서 전반에 걸쳐 여러 곳에서 "하나의(one) 실시 양태에서" 또는 "일(an) 실시 양태에서"라는 문구는 모두 동일한 실시 양태를 지칭하는 것은 아니다. 또한, 특정된 적인 특징(feature), 구조 또는 특징(characteristic)은 하나 또는 복수의 실시 양태에서 임의의 적합한 방식으로 조합될 수 있다.
전술한 명세서에서 특정된 예제의 실시 양태를 참조하여 상세히 설명하였다. 그러나, 첨부된 특허청구범위에 기재된 개시내용의 보다 넓은 사상 및 범위를 벗어나지 않는 전제하에 다양한 수정 및 변경이 이루어질 수 있음은 명백할 것이다. 따라서, 본 명세서 및 도면은 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다. 또한, 상기 실시 양태 및 기타 예시적인 언어의 사용은 반드시 동일한 실시 양태 또는 동일한 예를 지칭하는 것이 아니고, 상이하고 구별되는 실시 양태 및 잠재적으로 동일한 실시 양태를 가리킬 수 있다.

Claims (20)

  1. 명령어(instruction) 스트림을 수신하기 위한 제어 인터페이스;
    입력 데이터를 저장하는 제1 메모리; 및
    제어 인터페이스 및 제1 메모리에 통신적으로 연결된 엔진 회로를 포함하되, 상기 엔진 회로는,
    명령어 스트림 중의 명령어를 복수의 명령(command)으로 디코딩하는 디스패치 회로;
    상기 명령어로부터 디코딩된 복수의 명령어 중 각각의 명령을 저장하기 위해 큐 데이터 구조를 지원하는 복수의 큐 회로; 및
    복수의 큐 중 대응하는 큐로부터 추출된 명령을 수신하고 실행하는 복수의 명령 실행 회로를 포함하는 것을 특징으로 하는 가속기 회로.
  2. 제1항에 있어서,
    상기 복수의 명령 실행 회로는 상기 명령어로부터 디코딩된 복수의 명령을 동기화 없이 실행하는 것을 특징으로 하는 가속기 회로.
  3. 제1항 또는 제2항에 있어서,
    상기 복수의 큐 회로 각각은 큐 데이터 구조를 지원하여 상기 명령어 스트림으로부터 디코딩된 명령 시퀀스를 저장하되, 상기 복수의 명령 실행 회로 각각은 상기 복수의 큐 중 대응하는 큐로부터 추출된 명령의 시퀀스를 수신하고 순서대로 실행하도록 구성되는 것을 특징으로 하는 가속기 회로.
  4. 제1항에 있어서,
    상기 명령어는 상기 가속기 회로에 의해 수행되는 조작을 지정하기 위한 조작 부분, 텐서의 차원 정보를 지정하기 위한 전역 정보 부분, 상기 텐서의 파티션을 지정하기 위한 로컬 정보 부분 및 상기 조작에 할당된 상기 제1 메모리 중 하나 이상의 메모리 뱅크를 지정하는 로컬 메모리 정보 부분을 포함하는 것을 특징으로 하는 가속기 회로.
  5. 제4항에 있어서,
    상기 디스패치 회로는 상기 명령어 스트림의 명령어를, 입력 단계에 대응하는 직접 메모리 액세스 (DMA) 입력 명령, 계산 단계에 대응하는 뉴런 매트릭스 명령 및 출력 단계에 대응하는 DMA 출력 명령으로 디코딩하는 것을 특징으로 하는 가속기 회로.
  6. 제5항에 있어서,
    상기 복수의 큐 회로는 DMA 명령 큐를 지원하는 제1 큐 회로, 뉴런 매트릭스 명령 큐를 지원하는 제2 큐 회로 및 DMA 출력 명령 큐를 지원하는 제3 큐 회로를 포함하는 것을 특징으로 하는 가속기 회로.
  7. 제6항에 있어서,
    상기 복수의 명령 실행 회로는 DMA 입력 명령을 실행하는 DMA 입력 명령 실행 회로, 상기 뉴런 매트릭스 명령을 실행하는 뉴런 매트릭스 명령 실행 회로 및DMA 출력 명령을 실행하는 DMA 출력 명령 실행 회로를 포함하는 것을 특징으로 하는 가속기 회로.
  8. 제7항에 있어서,
    상기 DMA 입력 명령의 실행은 상기 가속기 회로 외부의 제2 메모리로부터 상기 제1 메모리로의 입력 데이터의 DMA 읽기를 초래하는 것을 특징으로 하는 가속기 회로.
  9. 제8항에 있어서,
    상기 뉴런 매트릭스 명령 실행 회로는,
    각각의 계산 셀(computation cell)이 적어도 매트릭스 중의 다른 계산 셀에 연결된 복수의 계산 셀의 매트릭스; 및
    상기 계산 셀의 매트릭스를 제어하는 복수의 제어 신호를 생성하기 위한 배리어 제어 로직을 포함하는 것을 특징으로 하는 가속기 회로.
  10. 제9항에 있어서,
    상기 계산 셀의 매트릭스 내의 각 계산 셀은,
    계산 유닛 어레이;
    복수의 차원 카운터;
    상기 계산 유닛 어레이에 통신적으로 컬플링된 복수의 피더 회로; 및
    상기 복수의 피더 회로와 연관된 복수의 로컬 메모리 뱅크를 포함하는 것을 특징으로 하는 가속기 회로.
  11. 제10항에 있어서,
    상기 복수의 차원 카운터는,
    커널의 제1 높이 값을 저장하는 커널 높이 카운터;
    커널의 제1 폭 값을 저장하는 커널 폭 카운터;
    특징 맵의 제2 높이 값을 입력 데이터의 일부로서 저장하기 위한 특징 맵 높이 카운터;
    특징 맵의 제2 폭 값을 저장하는 특징 맵 폭 카운터; 및
    상기 특징 맵을 저장하는 상기 복수의 로컬 메모리 뱅크 중 제1 로컬 메모리 뱅크에 제1 참조를 저장하는 입력 채널 카운터; 및
    상기 계산 유닛 어레이에 의해 생성된 결과를 저장하기 위해 제2 참조를 제2 로컬 메모리 뱅크에 저장하는 출력 채널 카운터를 포함하는 것을 특징으로 하는 가속기 회로.
  12. 제11항에 있어서,
    상기 조작은 곱셈-덧셈-누적 (MAC), 최대값 또는 정류 선형 유닛(ReLU) 조작 중 하나를 포함하는 것을 특징으로 하는 가속기 회로.
  13. 제11항에 있어서,
    상기 복수의 피더 회로는,
    제1 로컬 메모리 뱅크로부터 상기 복수의 계산 유닛으로의 특징 맵:
    설정될 때, 상기 MAC 조작을 활성화하는 MAC활성화 신호;
    설정될 때, 상기 복수의 계산 유닛 중 적어도 하나와 연관된 누산기를 소거하는 누산 소거 신호; 및
    설정될 때, 라이터(writer) 회로를 활성화시켜 상기 결과를 상기 제2 로컬 메모리 뱅크로 수출(export)하는 수출 신호;
    상기 커널이 상기 복수의 로컬 메모리로부터 상기 복수의 계산 유닛으로의 전이(transfer)를 제어하기 위한 커널 피더 회로; 및
    부분 합 피더 회로:
    부분 합을 상기 복수의 로컬 메모리로부터 상기 복수의 계산 유닛으로 전송하는 것을 제어하되, 상기 부분 합은 상기 가속기 회로에 연결된 다른 가속기 회로에 의해 생성되고; 또한
    상기 누산기를 재설정을 위해 누산기 재설정 신호를 활성화하는 것을 포함하는 것을 특징으로 하는 가속기 회로.
  14. 제13항에 있어서,
    상기 피더 회로는,
    상기 계산 유닛 어레이의 상이한 계산 유닛에 할당된 복수의 피연산자를 저장하기 위한 피연산자 버퍼 - 피연산자는 상기 특징 맵에서 파생됨 -;
    상기 계산 유닛 어레이 중 대응하는 계산 유닛에 대해 동쪽인 계산 유닛의 복수의 동쪽 인접 데이터를 저장하기 위한 동쪽 경계 버퍼 - 각각의 상기 동쪽 인접 데이터는 상기 대응하는 계산 유닛으로 전송됨 -;
    상기 계산 유닛 어레이 중 대응하는 계산 유닛에 대해 남쪽인 계산 유닛의 복수의 남쪽 인접 데이터를 저장하기 위한 남쪽 경계 버퍼 - 각각의 상기 남쪽 인접 데이터는 상기 대응하는 계산 유닛으로 전송됨 -; 및
    계산 유닛 어레이에서 대응하는 계산 유닛에 대해 남동쪽인 계산 유닛의 남동쪽 인접 데이터를 저장하기 위한 코너 경계 버퍼 - 각각의 상기 남동쪽 인접 데이터는 상기 대응하는 계산 유닛으로 전송됨 -;
    을 포함하는 3레벨의 버퍼를 포함하는 것을 특징으로 하는 가속기 회로.
  15. 제14항에 있어서, 상기 피더 회로는,
    상기 커널 폭 카운터에 저장된 제1 폭 값이 0이 아니라는 결정에 응답하여 상기 MAC 활성화 신호를 설정하는 것;
    상기 커널 폭 카운터에 저장된 상기 제1 폭 값의 감소를 결정하는 것에 응답하여 상기 계산 유닛의 어레이를 위해 서쪽으로 시프트하는 신호를 활성화시키는 것;
    상기 커널 높이 카운터에 저장된 상기 제1 높이 값의 감소를 결정하는 것에 응답하여 상기 계산 유닛 어레이를 위해 북쪽으로 시프트하는 신호를 활성화시키는 것; 및
    상기 입력 채널 카운터에 저장된 상기 제1 참조 값의 감소를 결정하는 것에 응답하여 특징 맵 준비(ready) 신호를 활성화시키는 것에 사용되는 것을 특징을 하는 가속기 회로.
  16. 제15항에 있어서, 상기 피더 회로는,
    특징 맵 준비 신호를 활성화하는 것에 응답하여, 상기 복수의 로컬 메모리 뱅크로부터 상기 피연산자 버퍼로 특징 맵을 읽는 것;
    상기 복수의 메모리 뱅크로부터 상기 피연산자 버퍼로 특징 맵을 읽는 것에 응답하여, 상기 피연산자 버퍼에 저장된 상기 피연산자를 상기 동부 경계 버퍼 및 상기 남부 경계 버퍼로 이동하고 상기 피연산자 버퍼를 릴리즈하는 것;
    상기 커널 폭 카운터에 저장된 상기 제1 폭 값을 감소시켜 서쪽으로 시프트하는 신호를 생성하는 것;
    상기 커널 높이 카운터에 저장된 상기 제1 높이 값을 감소시켜 북쪽으로 시프트하는 신호를 생성하는 것; 및
    상기 특징 맵 준비 신호를 다시 활성화시키는 것에 응답하여, 상기 복수의 로컬 메모리 뱅크로부터 상기 피연산자 버퍼로 상기 특징 맵을 읽는 것에 사용되는 것을 특징으로 하는 가속기 회로.
  17. 제10항에 있어서,
    각각의 계산 셀은 상기 명령어에 의해 참조 가능한 복수의 스칼라 레지스터를 더 포함하고, 상기 복수의 스칼라 레지스터 중 적어도 하나는 스칼라 값을 계산에 대한 승수(multiplier)로서 상기 계산 유닛 어레이의 적어도 하나의 계산 유닛에 저장하는 것에 사용되는 것을 특징으로 하는 가속기 회로.
  18. 제1항에 있어서, 상기 엔진 회로는,
    상기 제1 메모리와 상기 복수의 명령 실행 회로 사이의 데이터 전이를 관리하는 로컬 메모리 참조 보드;
    상기 엔진 회로의 작업 중의 오류를 검출하는 것에 응답하게끔 호스트에 인터럽트 신호를 생성하는 인터럽트 컨트롤러;
    상기 엔진 회로의 성능을 모니터링하는 성능 모니터;
    상기 가속기 회로 외부의 제2 메모리에 통신적으로 커플링된 시스템 버스 마스터 포트; 및
    제2 가속기 회로에 통신적으로 커플링된 고속 슬레이브 포트를 더 포함하는 것을 특징으로 하는 가속기 회로.
  19. 제1항에 있어서,
    상기 명령어 스트림은 디버그 명령어를 포함하고, 상기 디버그 명령어의 실행에 응답하며, 상기 엔진 회로는 상기 제어 인터페이스를 통해 외부 프로세서에 디버그 정보를 제공하는 것을 특징으로 하는 가속기 회로.
  20. 프로세서; 및
    제1항 내지 제20항의 가속기 회로를 포함하는 것을 특징으로 하는 순수 함수 계산을 수행하기 위한 시스템.
KR1020227003568A 2019-07-03 2019-07-03 순수 함수 신경망 가속기 시스템 및 아키텍처 KR20220036950A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/094512 WO2021000282A1 (en) 2019-07-03 2019-07-03 System and architecture of pure functional neural network accelerator

Publications (1)

Publication Number Publication Date
KR20220036950A true KR20220036950A (ko) 2022-03-23

Family

ID=74101136

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227003568A KR20220036950A (ko) 2019-07-03 2019-07-03 순수 함수 신경망 가속기 시스템 및 아키텍처

Country Status (6)

Country Link
US (1) US20220405221A1 (ko)
EP (1) EP3994573A4 (ko)
KR (1) KR20220036950A (ko)
CN (1) CN114341805A (ko)
TW (1) TWI754310B (ko)
WO (1) WO2021000282A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11809981B1 (en) * 2019-11-27 2023-11-07 Amazon Technologies, Inc. Performing hardware operator fusion
CN112669852B (zh) * 2020-12-15 2023-01-31 北京百度网讯科技有限公司 内存分配方法、装置及电子设备
CN117992396B (zh) * 2024-03-29 2024-05-28 深存科技(无锡)有限公司 流式张量处理器

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5272664A (en) * 1993-04-21 1993-12-21 Silicon Graphics, Inc. High memory capacity DRAM SIMM
US6055619A (en) * 1997-02-07 2000-04-25 Cirrus Logic, Inc. Circuits, system, and methods for processing multiple data streams
US5887175A (en) * 1997-02-14 1999-03-23 Integrated Device Technology, Inc. Apparatus and method for managing interrupt delay on floating point error
US7430652B2 (en) * 2003-03-28 2008-09-30 Tarari, Inc. Devices for performing multiple independent hardware acceleration operations and methods for performing same
WO2007049150A2 (en) * 2005-09-28 2007-05-03 Arc International (Uk) Limited Architecture for microprocessor-based systems including simd processing unit and associated systems and methods
US8464032B2 (en) * 2009-07-10 2013-06-11 Via Technologies, Inc. Microprocessor integrated circuit with first processor that outputs debug information in response to reset by second processor of the integrated circuit
US8782356B2 (en) * 2011-12-09 2014-07-15 Qualcomm Incorporated Auto-ordering of strongly ordered, device, and exclusive transactions across multiple memory regions
US9880935B2 (en) * 2014-03-24 2018-01-30 Intel Corporation Efficient data transfer between a processor core and an accelerator
US10031758B2 (en) * 2014-03-31 2018-07-24 Netronome Systems, Inc. Chained-instruction dispatcher
US9841974B2 (en) * 2014-04-25 2017-12-12 Avago Technologies General Ip (Singapore) Pte. Ltd. Renaming with generation numbers
US10095518B2 (en) * 2015-11-16 2018-10-09 Arm Limited Allowing deletion of a dispatched instruction from an instruction queue when sufficient processor resources are predicted for that instruction
US10496412B2 (en) * 2016-02-08 2019-12-03 International Business Machines Corporation Parallel dispatching of multi-operation instructions in a multi-slice computer processor
US10241946B2 (en) * 2017-01-18 2019-03-26 Nxp Usa, Inc. Multi-channel DMA system with command queue structure supporting three DMA modes
US11290392B2 (en) * 2017-01-30 2022-03-29 Intel Corporation Technologies for pooling accelerator over fabric
US10409614B2 (en) * 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
EP4187539B1 (en) * 2017-07-30 2024-06-05 NeuroBlade Ltd. A memory-based distributed processor architecture
US10127494B1 (en) * 2017-08-02 2018-11-13 Google Llc Neural network crossbar stack
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
US11609623B2 (en) * 2017-09-01 2023-03-21 Qualcomm Incorporated Ultra-low power neuromorphic artificial intelligence computing accelerator
KR20200100672A (ko) * 2017-12-04 2020-08-26 옵티멈 세미컨덕터 테크놀로지스 인코포레이티드 신경망 가속기의 시스템 및 아키텍쳐
EP3994621A1 (en) * 2019-07-03 2022-05-11 Huaxia General Processor Technologies Inc. Instructions for operating accelerator circuit

Also Published As

Publication number Publication date
TW202109286A (zh) 2021-03-01
CN114341805A (zh) 2022-04-12
TWI754310B (zh) 2022-02-01
EP3994573A1 (en) 2022-05-11
WO2021000282A1 (en) 2021-01-07
US20220405221A1 (en) 2022-12-22
EP3994573A4 (en) 2022-08-10

Similar Documents

Publication Publication Date Title
US7617384B1 (en) Structured programming control flow using a disable mask in a SIMD architecture
TWI768383B (zh) 用於操作加速器電路的指令
US8607247B2 (en) Method and system for workitem synchronization
US8312254B2 (en) Indirect function call instructions in a synchronous parallel thread processor
JP7295104B2 (ja) メモリ・ネットワーク・プロセッサ
TWI754310B (zh) 純函數語言神經網路加速器系統及電路
US8572355B2 (en) Support for non-local returns in parallel thread SIMD engine
CN113495865A (zh) 异步数据移动管线
CN113495761A (zh) 用于对线程同步的阶段进行协调的技术
US20230418677A1 (en) Preemption in a machine learning hardware accelerator
Du et al. Breaking the interaction wall: A DLPU-centric deep learning computing system
US12020076B2 (en) Techniques for balancing workloads when parallelizing multiply-accumulate computations
US11822541B2 (en) Techniques for storing sub-alignment data when accelerating Smith-Waterman sequence alignments
US10437728B2 (en) Branchless instruction paging in reconfigurable fabric
CN117667210A (zh) 指令控制装置、方法、处理器、芯片和板卡

Legal Events

Date Code Title Description
A201 Request for examination