KR20220038694A - 가속기 회로의 조작을 위한 명령어 - Google Patents

가속기 회로의 조작을 위한 명령어 Download PDF

Info

Publication number
KR20220038694A
KR20220038694A KR1020227003569A KR20227003569A KR20220038694A KR 20220038694 A KR20220038694 A KR 20220038694A KR 1020227003569 A KR1020227003569 A KR 1020227003569A KR 20227003569 A KR20227003569 A KR 20227003569A KR 20220038694 A KR20220038694 A KR 20220038694A
Authority
KR
South Korea
Prior art keywords
instruction
data
tensor
input
accelerator circuit
Prior art date
Application number
KR1020227003569A
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 KR20220038694A publication Critical patent/KR20220038694A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • 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
    • 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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic 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/30098Register arrangements
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0454
    • G06N3/0481
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Advance Control (AREA)
  • Control Of Throttle Valves Provided In The Intake System Or In The Exhaust System (AREA)

Abstract

본 발명의 시스템은 입력 데이터를 저장하기 위한 메모리, 가속기 회로 및 프로세서를 포함하고, 가속기 회로는 입력 명령 실행 회로, 뉴런 매트릭스 명령 실행 회로 및 출력 명령 실행 회로를 포함하며, 프로세서가 통신적으로 메모리 및 가속기 회로에 커플링되어 가속기 회로에 대한 소스 코드로부터 명령어 스트림을 생성하고, 명령어 스트림의 각각은 입력 명령, 뉴런 매트릭스 명령 또는 출력 명령 중 적어도 하나를 포함하며, 명령어 스트림을 가속기 회로에 발송하여 입력 명령 실행 회로, 뉴런 매트릭스 명령 실행 회로 및 출력 명령 실행 회로를 통해 실행하게 된다.

Description

가속기 회로를 조작하기 위한 명령
본 발명은 하드웨어 프로세서 회로 및 가속기 회로에 관한 것으로, 특히 가속기 회로를 조작하기 위한 프로세서의 명령어(instruction) 집합 아키텍처에 관한 것이다.
프로세서는 데이터 요소에 대해 조작(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에 비해 이런 가속기 회로의 구현 방식은 프로그래밍 인터페이스와 통합되지 않기 때문에 프로그래머가 디버깅하기가 더욱 어렵다.
상기 인식된 문제점 및 현재 가속기 회로 구현 방식의 결함을 해결하기 위하여, 본 개 시내용은 기술 솔루션을 제공하는 바, 이는 호스트의 프로세서에 의해 발송되는 명령어가 프로그래밍할 수 있는 하드웨어 가속기 회로의 구현 방식을 포함한다. 프로세서(CPU, GPU)는 가속기 회로에 발송된 명령어를 포함하는 명령어 집합 구조(ISA)에 따라 프로그래밍될 수 있다. 이러한 명령은 가속기 회로에 발송되고 가속기 회로에 의해 실행될 때, 가속기 회로를 사용하여 호스트에 대한 조작을 수행하고 성공적으로 수행을 마친 후 결과를 호스트에 반송한다.
일 실시 양태에서, 가속기 회로에 발송된 명령어는 가속기 회로의 직접 프로그래밍 및 디버깅의 편리함을 허용하는 순수 함수 프레임워크(purely functional framework) 내에서 구제적으로 설명될 수 있다. 순수 함수 프레임워크의 처리는 수학 함수의 평가와 유사한 모든 계산이다. 정의에 따르면 순수 함수 프레임워크는, 프레임워크 내의 명령어 실행 결과가 전역 또는 로컬 상황의 상태와 무관하게 오로지 해당 인수에만 의존하도록 확보한다. 따라서 프레임워크 내의 명령어 실행 결과는 입력 값에 따라 결정된다.
순수 함수 프레임워크 구조의 실시 양태에서는 특정된 기술적 특징을 제공한다. 프레임워크 내의 모든 명령어는 순수 함수로 간주될 수 있는 메모리 투 메모리(memory-to-memory)의 명령어이다. 메모리 투 메모리의 명령어는 제1 메모리에서 데이터를 검색하고, 데이터를 처리하며, 데이터를 제2 메모리로 전이하며, 여기서, 제1 메모리와 제2 메모리는 동일하거나(또는 동일한 메모리 위치에 소재) 또는 다른 메모리일 수 있다. 프레임워크 내의 명령어는 단일 순수 함수 명령어 또는 단일 순수 함수 명령어로부터 구성된 복합 순수 함수일 수 있다. 프레임워크 내의 명령어는 메모리 액세스 단계를 은폐하기 위해 동시에 실행될 수 있다. CPU는 명령어 실행의 절차를 직접 제어하고 모니터링한다. 프레임워크는 고객 콜 명령어를 제공할 수 있는바, 이는 가속기 회로가 CPU 또는 다른 하나의 시스템(예를 들어 슬레이브 시스템)의 다른 가속기 회로에 의해 실행되는 다른 프로그램과 협력하여 작업한다. 프레임워크는 컴파일러 최적화가 없이 명령어의 직접 가속을 허용할 수도 있다. 또한, 프레임워크는 지연 평가(즉, 필요할 때의 함수 평가) 및 베타 감소(즉, 수식 입력으로 결과 계산)를 허용할 수 있다. 지연 평가 및 베타 감소를 통해 프레임워크는 데이터 지역성(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 모드에서 로컬 메모리에 저장된 결과 데이터를 외부 메모리로 전이할 수 있다.
일 실시 양태에서, 프레임워크는 가상 명령어의 실행을 허용할 수 있다. 가상 명령어는 크기 매개변수(예를 들면 폭, 길이 또는 채널 수)에 제한이 없는 명령어이다. 이것은 로컬 정보 부분을 제거하여 달성할 수 있다. 내부 메모리 할당은 비교적 큰 수의 메모리 뱅크로 확장될 수 있으며, 각 메모리 뱅크는 전역 크기의 데이터를 지원하는 것을 유지한다.
일 실시 양태에서, 애플리케이션은 프로그래머에 의해 프로그래밍 언어(예를 들어, C 또 는 C++)를 사용하여 소스 코드의 형식으로 지정될 수 있다. 애플리케이션은 신경망 계산과 관련된 조작(예를 들어, 텐서 콘볼루션, 텐서 내적)을 포함할 수 있다. 호스트의 프로세서는 프로세서를 위해 지정된 명령어 집합 구조(ISA)의 구현에 기반하여 컴파일러를 실행하여 소스 코드를 기계 코드로 변환할 수 있다. 프로세서의 조작에 공통적인 명령어를 지정하는 것 외에도, ISA는 가속기 회로 함수에 발송되는 명세서(specification)를 포함할 수 있다. 이러한 함수에는 메모리에서 입력 데이터("특징 맵"이라고 칭함)를 검색하거나 및/또는 메모리에서 필터 데이터("커널"이라고 칭함)를 검색하기 위한 입력 명령이 포함될 수 있다. 이러한 함수에는 가속기 회로가 수행하는 계산을 지정하는 뉴런 매트릭스 명령도 포함될 수 있다. 이러한 함수에는 계산 결과를 메모리에 저장하기 위한 출력 명령이 포함될 수도 있다. 컴파일러는 이러한 명령을 가속기 회로에 발송하는 명령어 스트림으로 추가로 결합할 수 있다. 각각의 명령어는 하나 또는 복수의 입력 명령(command), 하나 또는 복수의 뉴런 매트릭스 명령 및 하나 또는 복수의 출력 명령을 포함할 수 있다. 일 실시 양태에서, 입력 명령은 DMA(직접 메모리 액세스) 입력 명령일 수 있고, 또한 출력 명령은 DMA 출력 명령일 수 있다. 가속기 회로에 구현된 하드웨어 메커니즘은 명령 실행의 올바른 순서를 보장하기 때문에 명령의 실행을 가속기 회로 상의 파이프라인으로 간주할 수 있다. 데이터와 리소스에 충돌이 없을 경우, 명령의 파이프라인 실행은 명령을 동시에 실행하는 것을 허용하기 때문에 가속기 회로의 성능이 크게 향상된다.
본 개시내용은 이하에 주어진 상세한 설명 및 본 개시내용의 다양한 실시예의 첨부 도면을 통해 보다 완전하게 이해할 수 있다. 단, 도면은 본 개시된 내용을 구체적인 실시예로 제한하는 것으로 이해해서는 안되며, 단지 해석 및 이해를 위한 것임을 이해해야 한다.
도 1은 본 개시내용의 일 실시 양태에 따른 가속기 회로를 포함하는 시스템을 도시한다.
도 2는 본 개시내용의 일 실시 양태에 따른 가속기 회로의 모식도이다.
도 3은 본 개시내용의 일 실시 양태에 따른 엔진 회로의 모식도이다.
도 4는 본 개시내용의 일 실시 양태에 따른 로컬 메모리 참조 보드의 모식도이다.
도 5는 본 개시물의 일 실시 양태에 따른 계산 셀의 매트릭스를 도시한다.
도 6은 본 개시내용의 일 실시 양태에 따른 계산 셀의 모식도이다.
도 7은 본 개시내용의 일 실시 양태에 따른 호스트의 프로세서가 가속기 회로를 사용하여 신 경망 애플리케이션을 수행하는 방법의 흐름도이다.
도 8은 본 개시내용의 일 실시 양태에 따른 가속기 회로가 명령어 스트림을 실행하는 방법의 흐름도이다.
도 1은 본 개시내용의 일 실시 양태에 따른 가속기 회로를 포함하는 시스템(100)을 도시 한다. 시스템(100)은 하드웨어 프로세서(예를 들어, CPU 또는 GPU)(102), 가속기 회로(104) 및 프로세서(102)를 가속기 회로(104)에 통신적으로 연결하는 인터페이스 회로(106)를 포함할 수 있다. 또한, 시스템(114)은 가속기 회로(104)의 외부에 있는, 데이터를 저장하기 위한 메모리(108)를 포함할 수 있다.
일 실시 양태에서, 시스템(114)은 컴퓨팅 시스템 또는 시스템온어칩(SoC)일 수 있다. 프로세서(102)는 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU) 또는 임의의 적합한 유형의 처리 장치와 같은 하드웨어 프로세서일 수 있다. 프로세서(102)는 명령어 실행 파이프라인(미도시), 레지스터 파일(미도시) 및 명령어 집합 구조(ISA)(112)에 따라 지정된 회로 구현 명령어를 포함할 수 있다.
일 실시 양태에서, 프로세서(102)는 벡터/텐서 명령어 실행 파이프라인(미도시), 벡터/텐서 레지스터 파일(미도시) 및 벡터/텐서 명령어 집합 구조(ISA)(112)에 따라 지정된 회로 구현 벡터/텐서 명령어를 포함하는 벡터/텐서 프로세서일 수 있다. 벡터/텐서 명령어는 특정된 수의 데이터 요소를 포함하는 벡터/텐서 데이터 객체에서 조작될 수 있다. 간결한 설명을 위해, 본 개시내용은 스칼라 및 벡터 프로세서 모두를 프로세서로 분류한다. 따라서 프로세서는 달리 명시적으로 지정되지 않는 한 스칼라 프로세서 또는 벡터 프로세서로 이해될 것이다.
메모리 장치(108)는 프로세서(102) 및 가속기 회로(104)에 통신적으로 커플링된 저장 장치를 포함할 수 있다. 일 실시 양태에서, 메모리 장치(108)는 신경망 애플리케이션을 위한 입력 데이터(114) 및 신경망 애플리케이션에 의해 생성된 출력 데이터(116)를 저장할 수 있다. 입력 데이터(114)는 예를 들어, 이미지 데이터, 음성(speech) 데이터, 라이다(LiDAR) 데이터 등 또는 필터의 커널과 같은 애플리케이션 데이터로부터 추출된 특징 값을 포함하는 특징 맵(하나 또는 복수의 차원)일 수 있으며, 또한 출력 데이터(116)는 신경망에 의해 결정된 것일 수 있다. 여기서, 결정에는 이미지 내의 객체를 다른 클래스로 분류하는 것, 이미지 내의 객체 인식 또는 음성 문구 분별이 포함될 수 있다. 메모리 장치(108)는 또한, 예를 들어, C 또는 C++와 같은 프로그래밍 언어로 작성된 신경망 애플리케이션(118)의 소스 코드를 저장할 수 있다. 신경망 애플리케이션(118)은 대량의 컴퓨팅 리소스를 필요로 하는 특정된 계산(예를 들어, 콘볼루션)을 이용할 수 있으며 또한, 가속기 회로(104)에서 수행하기에 더욱 적합하다.
시스템(100)은 ISA(112)의 명세서에 기초하여 신경망 애플리케이션(118)의 소스 코드를 기계 코드로 변환할 수 있는 컴파일러(110)가 설치될 수 있다. ISA(112)는 소스 코드의 일부를 가속기 회로(104)로 실행할 수 있는 기계 코드로 변환할 수 있는 명세서를 포함할 수 있다. 기계 코드는 직접 메모리 액세스를 사용하여 메모리(108)에 저장된 DMA 입력 데이터(114)를 가속기 회로(104)의 로컬 메모리로 전이하기 위한 입력 명령, 세부적으로 가속기 회로(104)에 의해 수행되는 계산을 지정하는 뉴런 매트릭스 명령 및 직접 메모리 액세스를 사용하여 가속기 회로(104)의 내부 메모리 DMA로부터 메모리(108)로 결과를 전이하기 위한 출력 명령을 포함할 수 있다. 프로세서(102)는 추가로 DMA 입력 명령, 뉴런 매트릭스 명령 및 DMA 출력 명령을 명령어 스트림으로 결합하기 위해 컴파일러(110)를 실행할 수 있다. 스트림 중의 각 명령어는 하나 또는 복수의 DMA 입력 명령, 하나 또는 복수의 뉴런 매트릭스 명령 및 하나 또는 복수의 DMA 출력 명령을 포함할 수 있다. 신경망 애플리케이션의 실행 기간, 프로세서(102)는 명령어 스트림을 가속기 회로(104)에 전송함으로써 명령어 스트림의 실행을 가속기 회로(104)에 위임할 수 있다.
가속기 회로(104)는 프로세서(102) 및 메모리 장치(108)에 통신적으로 커플링되어 그 중의 특수 용도 회로를 사용하여 계산 밀집형 작업을 수행할 수 있다. 가속기 회로(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 쓰기를 발생시킨다.
도 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) 외부)를 연결하기 위한 인터페이스이다. 외부 메모리(예를 들어 메모리(108))는 직접 메모리 액세스(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)의 하드웨어 구성 요소를 포함할 수 있다. 제어 평면에 대해 디스패치 로직(304)은 제어 인터페이스로부터 명령어(302)를 수신할 수 있다.
디스패치 로직(304)은 호스트의 프로세서에 의해 발송된 명령어 스트림의 명령어와 관련된 정보를 파싱하여 명령어를 생성할 수 있다. 명령은 하나 또는 복수의 DMA 입력 명령(308), 하나 또는 복수의 뉴런 매트릭스 명령(306) 및 하나 또는 복수의 DMA 출력 명령(310)을 포함할 수 있다. 이 세 가지 유형의 명령은 각각 명령어 실행의 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)에 흐르는 데이터 및 뉴런 매트릭스 명령 실행 회로(318)로부터 외부 메모리로 흐르는 데이터를 포함한다. 수동 데이터 흐름은 내부 메모리로부터 데이터를 검색하고 결과를 내부 메모리에 저장하기 위해 뉴런 매트릭스 명령 실행 회로(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 버퍼로 읽어 들이고 또한 계산 유닛이 레벨 0 버퍼 중의 데이터 처리를 마친 후, Fmap 피더는 레벨 0 버퍼 중의 데이터 값을 레벨 1 버퍼로 푸시하고 또한 특징 맵 준비 신호가 다시 활성화되면 다음 데이터 블록을 로드하기 위해 레벨 0 버퍼를 릴리즈한다. 레벨 2 버퍼에 저장된 데이터 값은 서쪽으로 시프트하는 신호를 활성화시키는 데에 응답하여 서쪽으로 이동된다. Fmap 피더는 레벨 1 버퍼로부터 데이터를 다시 로드하고 북쪽으로 시프트하는 신호를 활성화시키는 데에 응답하여 레벨 1 버퍼 중의 데이터 값을 북쪽으로 한 열(raw)만큼 이동할 수 있다. 다중 레벨 버퍼 방식은 더 많은 버퍼를 필요로 할 수 있지만 다중 레벨 버퍼 방식은 수천 개의 계산 유닛이 있을 경우, 연결 와이어의 양을 상당히 줄일 수 있다. 각 버퍼는 각 행 또는 열이 마지막으로 유효한 행 또는 열인지 여부를 인식하는 각 비트 플래그와 연관될 수 있다. 데이터가 북쪽의 행 또는 동쪽의 열로 전이될 경우, 큰 플래그에 의해 마지막 행 또는 열로 인식된 행이나 열은 마지막으로 자동으로 0으로 채워질 수 있다.
입력 면적(스트라이드: 1), 입력 채널(스트라이드: 셀 높이의 배수로 반올림하는 특징 맵 높이, 여기서 반올림은 동일한 위치에 있으며 상이한 입력 채널에서 비롯되는 데이터를 동일한 유닛에 피드되게끔 보장함), 특징 맵 높이 카운터 및 출력 채널을 기반으로 로컬 메모리 뱅크(612)에 액세스하기 위한 주소를 계산한다.
커널 피더(608)는 커널 맵 피연산자를 위한 로컬 메모리 뱅크 중의 데이터 전이를 제어할 수 있다. 커널 피더는 두 가지 레벨의 버퍼를 포함할 수 있으며, 레벨 0 버퍼는 메모리 뱅크에서 비롯되는 커널 요소 행을 보유하고 또한 레벨 1 버퍼는 셀 중의 모든 유닛에 브로드캐스트되는 중복된 요소를 보유한다.
Psum 피더(610)는 부분 합 맵 피연산자의 로컬 메모리 뱅크 중의 데이터 전이를 제어할 수 있다. Psum 피더에는 하나의 레벨의 버퍼만 포함될 수 있다.
라이터(writer) 회로(614)는 계산 유닛으로부터 로컬 메모리 뱅크로의 데이터 출력을 제어할 수 있다. 계산 유닛은 쓰기 활성화(wen) 신호를 발송하여 라이터의 활성화 유닛를 활성화시킨 다음 활성화 유닛의 출력을 로컬 메모리에 쓸 수 있다. 활성화 장치는 선형, ReLU, 시그모이드 및 쌍곡선 탄젠트 함수를 지원한다.
스칼라 레지스터(616)는 로컬 메모리 뱅크와 유사한 방식으로 어드레싱되고 참조될 수 있다. 스칼라 레지스터(616)는 특징 맵의 요소에 적용될 수 있는 스칼라 값을 저장할 수 있다. 예를 들어, 스칼라 레지스터(616)는 특징 맵의 각 요소에 적용될 수 있는 승수 값을 저장할 수 있다.
호스트의 프로세서는 계산 작업을 수행하기 위해 가속기 회로를 사용할 수 있다. 도 7은 본 개시내용의 일 실시 양태에 따른 호스트 프로세서가 가속기 회로를 사용하여 신경망 애플리케이션을 수행하는 방법(700)의 흐름도이다.
도 7에 도시된 바와 같이, 702에서 프로세서는 신경망 애플리케이션의 소스 코드를 수신하여 애플리케이션을 프로세서 또는 가속기 회로에 의해 실행될 수 있는 기계 코드로 컴파일할 수 있다.
704에서, 프로세서는 소스 코드를 기계 코드로 변환하기 위해 컴파일러를 실행할 수 있다. 기계 코드는 가속기 회로에 의해 실행될 수 있는 명령을 포함할 수 있다.
706에서, 프로세서는 가속기 회로에 대한 일부 명령을 각각 하나 이상의 명령을 포함하는 가속기 회로 명령어 스트림으로 결합하기 위해 추가로 컴파일러를 더 실행할 수 있다. 위에서 논의된 일 실시 양태에서, 각각의 가속기 회로 명령어은 하나 또는 복수의 DMA 입력 명령, 하나 또는 이상의 뉴런 매트릭스 명령 및 하나 또는 복수의 DMA 출력 명령을 포함할 수 있다. 가속기 회로 명령어의 스트림은 신경망 애플리케이션의 실행 코드의 일부를 구성할 수 있다.
708에서, 신경망 애플리케이션이 실행되는 동안, 프로세서는 가속기 회로 명령어 스트림에 의해 지정된 조작을 수행하기 위해 가속기 회로 명령어의 스트림을 가속기 회로에 디스패치할 수 있다. 예를 들어, 가속기 회로 명령어의 스트림은 가속기 회로의 계산 지원이 필요할 수 있는 텐서 특징 맵의 필터링을 지정할 수 있다.
710에서, 프로세서는 그것이 가속기 회로 명령어 스트림에 의해 지정된 조작을 성공적으로 완료한 후 가속기 회로로부터 결과를 수신한다.
가속기 회로는 스트림에 의해 지정된 조작을 수행할 수 있다. 도 8은 본 개시내용의 일 실시 양태에 따른 가속기 회로가 가속기 회로 명령어 스트림을 실행하는 방법(800)의 흐름도이다.
도 8에 도시된 바와 같이, 802에서, 가속기 회로는 호스트의 프로세서로부터 가속기 회로 명령어 스트림을 수신할 수 있는 디스패치 로직을 포함할 수 있다. 가속기 회로 명령어의 스트림은 가속기 회로가 수행할 작업을 구체적으로 지정할 수 있다.
804에서, 디스패치 로직은 가속기 회로 명령어 스트림 중의 가속기 회로 명령어를 하나 또는 복수의 DMA 입력 명령, 하나 또는 복수의 뉴런 매트릭스 명령 및 하나 또는 복수의 DMA 출력 명령을 포함하는 명령으로 분해할 수 있다.
806에서 디스패치 로직은 명령의 유형에 따라 명령을 명령 큐에 저장할 수 있다. 예를 들어, 하나 또는 복수의 DMA 입력 명령은 DMA 명령 큐에 저장될 수 있으며; 하나 또는 복수의 뉴런 매트릭스 명령은 뉴런 매트릭스 명령 큐에 저장될 수 있고; 하나 또는 복수의 DMA 출력 명령은 DMA 명령 큐에 저장될 수 있다.
808에서, 명령 실행 회로는 대응하는 큐에 저장된 명령을 실행할 수 있다. 예를 들어, DMA 입력 명령 실행 회로는 DMA 입력 명령 큐 중의 순서에 따라 DMA 입력 명령을 실행할 수 있으며; 뉴런 매트릭스 명령 실행 회로는 뉴런 매트릭스 명령 큐 중의 순서에 따라 뉴런 매트릭스 명령을 실행할 수 있고; DMA 출력 명령 실행 회로는 DMA 출력 명령 큐 중의 순서에 따라 DMA 출력 명령을 실행할 수 있다.
810에서 가속기 회로는 뉴런 매트릭스 명령 실행 회로에 의해 생성된 결과를 프로세서에 다시 전송할 수 있다. 이것은 DMA 출력 명령의 실행에 의해 달성될 수 있다.
본 개시내용의 실시 양태에서는 가속기 회로에 대한 함수 라이브러리를 제공할 수 있다. 이러한 함수는 신경망 응용프로그램이 호출할 때 호스트의 프로세서를 대신하여 특정된 계산 밀집형 작업을 수행하기 위해 가속기 회로를 배치할 수 있다. 아래에는 C 프로그래밍 언어 소스 코드에서 호출할 수 있는 함수 라이브러리를 제공한다.
라이브러리에 정의된 함수는 텐서 데이터 객체를 사용할 수 있다. 파티션 고유(instinct) 호출은 가속기 회로의 최적 사용을 도울 수 있는 파티션된 차원을 리턴할 수 있다. 텐서와 관련된 리턴 값은 다음과 같이 정의된다.
typedef struct {
unsigned short id; // tensor identifier
unsigned short oh; //tensor height
unsigned short ow; //tensor width
unsigned short od; //tensor depth
} __partition_t
컴파일러에는 특정된 고유 함수(인트린식(intrinsics) 또는 빌트인 함수라고 칭함)가 제공될 수 있다. 고유 함수는 컴파일러에 의해 특별히 처리되는 특정된 프로그래밍 언어(예를 들어 C)에 사용될 수 있다. 인수의 전체 또는 일부가 상수 값인 경우, 아래에서 제공하는 텐서 고유 함수는 상수 감소를 지원한다. 컴파일러는 상수 값과 관련된 텐서 차원을 정적으로 최적화할 수 있다.
파티션 고유 함수는 다음과 같은 함수 호출을 포함할 수 있다.
4D 콘볼루션 파티션
__partition_t __builtin_gptx_tensor_part(uint32_t h, uint32_t w, uint32_t in_ch, uint32_t out_ch, uint32_t kh, uint32_t kw);
4D 콘볼루션 파티션 함수는 깊이 방향(3D) 또는 내적(2D)이 아닌 4차원 텐서 콘볼루션에 사용될 수 있으며, 여기서, h 및 w는 각각 특징 맵의 높이 및 폭을 나타낼 수 있고, in_ch 및 out_ch는 각각 입력 채널 및 출력 채널을 나타내고, kh 및 kw는 각각 커널 높이와 커널 폭을 나타낼 수 있다.
깊이 방향의 파티션
__partition_t __builtin_gptx_tensor_part_dw(uint32_t h, uint32_t w, uint32_t in_ch, uint32_t kh, uint32_t kw);
반송 파티션 값 중의 od 값은 id 값과 동일하기 때문에 정의되지 않는다.
내적 파티션
__partition_t __builtin_gptx_tensor_part_dp(uint32_t out_ch)
내적 파티션 함수에서 내적에 대한 out_ch는 출력 벡터의 길이이다. 리턴 파티션 값 중의 id는 내적에 대해 항상 1이기 때문에 정의되지 않는다.
풀링 파티션
__partition_t __builtin_gptx_tensor_part_dw(uint32_t h, uint32_t w, uint32_t in_ch, uint32_t kh, uint32_t kw, uint32_t stride_h, uint32_t stride_w);
풀링 파티션 함수는 높이 방향을 따라 특징 맵이 stride_h로 서브 샘플링되고 폭 방향을 따라 stride_w로 서브 샘플링하는 것을 제외하고는 깊이 방향의 파티션과 유사하다.
로드 함수는 텐서 데이터를 가속기 회로에 로드할 수 있다. 텐서 레지스터 유형은 텐서 고유 함수 사이에 전달될 텐서 레지스터 변수를 정의하는 데에 사용된다. 텐서 변수는 컴파일러와 아키텍처가 텐서 레지스터를 지원할 경우, 런타임 동안 컴파일러에 의해 할당될 수 있다. 대체적으로, 텐서 레지스터를 사용할 수 없을 경우, 텐서 변수를 메모리로 할당할 수 있다. 일 실시 양태에서, 유형 크기는 패킹된 SIMD 유형(예를 들어 __t16x128x8x8_fp16_t)과 유사하게 고정된다. 다른 실시 양태에서, 유형 크기는 그 모든 차원의 다양한 크기를 지원한다.
로드 고유 함수
로드 고유 함수에는 다음 함수가 포함된다.
기본 로드 고유 함수:
void __builtin_gptx_tensor_ld_u_b(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w); //load instruction to load unsigned byte data(8 bits)
void __builtin_gptx_tensor_ld_s_b(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w); //load instruction to load signed byte data(8 bits)
void __builtin_gptx_tensor_ld_hf(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w); //load instruction to load half-precision floating point format(half) data(16 bits)
테이블 조회 로드 고유 함수:
void __builtin_gptx_tensor_ld_tab_b(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, void *tab); //load instruction to load look-up table data, byte data(8 bits)
void __builtin_gptx_tensor_ld_tab_n(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, void *tab); //load instruction to load look-up data, nibble data(4 bits)
희소 로드 고유 함수:
void __builtin_gptx_tensor_ld_tab_n(__t16x128x8x8_fp16_t dest, void *src, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, void *tab); //load instruction to load look-up table for decompress, nibble data(4 bits)
로드 확장 고유 함수
로드 확장 고유 함수는 로드 및 계산의 목적 및 고유 함수가 저장되는 소스에 적용될 수 있는 함수이다. 컴파일에서 컴파일러는 확장을 기반으로 로드 확장 고유 함수를 그 확장 고유 함수에 결합될 수 있다. 중간 결과는 제거된다.
복사
void __builtin_gptx_tensor_dup_fmap(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src); //duplicate instruction to duplicate feature map data, usually with a load instruction
void __builtin_gptx_tensor_dup_kmap(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src); //duplicate instruction to duplicate a kernel map data, usually with a load instruction
트랜스포즈
void __builtin_gptx_tensor_trp(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src); //transpose instruction to transpose the tensor data, usually with a load instructions or a store instruction
패딩
void __builtin_gptx_tensor_pad(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src, uint8_t n, uint8_t w); // padding instruction to pad the input feature map data to the west and north(with data the same to the east and south correspondingly)
내적 합수 계산
덧셈
void __builtin_gptx_tensor_add_tt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, uint16_t d, uint16_t h, uint16_t w); //dest tensor = src0 tensor + src1 tensor
void __builtin_gptx_tensor_add_tv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, uint16_t d, uint16_t h, uint16_t w); //dest tensor = src0 tensor + src1 vector
void __builtin_gptx_tensor_add_ts(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, uint16_t d, uint16_t h, uint16_t w); //dest tensor = src0 tensor + src1 scalar
곱셈
void __builtin_gptx_tensor_mul_tt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // tensor dest = src0 tensor * src1 tensor
void __builtin_gptx_tensor_mul_tv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 vector
void __builtin_gptx_tensor_mul_ts(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 scalar
곱셈과 덧셈
void __builtin_gptx_tensor_mac_ttt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 tensor + src2 tensor
void __builtin_gptx_tensor_mac_tvt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 vector + src2 tensor
void __builtin_gptx_tensor_mac_ttv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 tensor + src2 vector
void __builtin_gptx_tensor_mac_tvv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __ vfp16x2048_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 vector + src2 vector
void __builtin_gptx_tensor_mac_tst(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor *src1 scalar + src2 tensor
void __builtin_gptx_tensor_mac_tts(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 tensor + src2 scalar
void __builtin_gptx_tensor_mac_tsv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // dest tensor = src0 tensor * src1 scalar + src2 vector
void __builtin_gptx_tensor_mac_tvs(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, __fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //dest tensor = src0 tensor * src1 vector + src2 scalar
void __builtin_gptx_tensor_mac_tvs(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __fp16_t src2, uint16_t od, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // dest tensor = src0 tensor * src1 scalar + src2 scalar
아래 4D 곱셈 명령어에 비해, 상기의 곱셈 및 덧셈 명령어는 다중 채널 계산 중 감소/누적 조작이 없는 3D 조작이다.
4D 곱셈
void __builtin_gptx_tensor_mul4_tt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //tensor dest[i] = reduce (tensor src0 * tensor src1 [i]); compose tensor dest[0] - [i] into the final tensor dest; slice number of tensor dest is od(the slice of tensor src0 multiplies the slice of tensor srce1[i] and accumulates into one slice, the number of tensor srce1 is od, and slice number of resulting tensor from this function is also od)
void __builtin_gptx_tensor_mul4_tv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above except for the src1 is a vector
void __builtin_gptx_tensor_mul4_ts(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above except for the src1 is a scalar
void __builtin_gptx_tensor_mac4_ttt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * tensor src1[i] + tensor src2[i])
void __builtin_gptx_tensor_mac4_tvt(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * vector src1[i] + tensor src2[i])
void __builtin_gptx_tensor_mac4_ttv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * tensor src1[i] + vector src2[i])
void __builtin_gptx_tensor_mac4_tvv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __ vfp16x2048_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * vector src1[i] + vector src2[i])
void __builtin_gptx_tensor_mac4_tst(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __t16x128x8x8_fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * scalar src1 + tensor src2[i])
void __builtin_gptx_tensor_mac4_tts(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __t16x128x8x8_fp16_t src1, __fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); //similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * tensor src1[i] + scalar src2)
void __builtin_gptx_tensor_mac4_tsv(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __vfp16x2048_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * scalar src1 + vector src2[i])
void __builtin_gptx_tensor_mac4_tvs(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __vfp16x2048_t src1, __fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * vector src1[i] + scalar src2)
void __builtin_gptx_tensor_mac4_tvs(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, __fp16_t src2, uint16_t od, uint16_t d2, uint16_t oh, uint16_t ow, uint8_t h2, uint8_t w2); // similar to above but having 一initial accumulate tensor dest[i] = reduce(tensor src0 * scalar src1 + scalar src2[i])
활성화 기능
ReLU
void __builtin_gptx_tensor_relu(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, uint16_t d, uint16_t h, uint16_t w); //tensor dest = ReLU(tensor src0)
Leaky ReLU
void __builtin_gptx_tensor_leaky_relu(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __fp16_t src1, uint16_t d, uint16_t h, uint16_t w); //tensor dest = leaky ReLU(tensor src0)
PReLU
void __builtin_gptx_tensor_leaky_relu(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, __ t16x128x8x8_fp16_t src1, uint16_t d, uint16_t h, uint16_t w); //tensor dest = PReLU(tensor src0)
로직
void __builtin_gptx_tensor_sigmoid(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, uint16_t d, uint16_t h, uint16_t w); //tensor dest = Sigmoid(tensor src0)
Tanh
void __builtin_gptx_tensor_tanh(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, uint16_t d, uint16_t h, uint16_t w); //tensor dest = Tanh(tensor src0)
Reduce Max
void __builtin_gptx_tensor_rmax(__t16x128x8x8_fp16_t dest, __t16x128x8x8_fp16_t src0, uint16_t d, uint16_t h, uint16_t w, uint8_t h2, uint8_t w2); //dest tensor = reduce Max(src0 tensor) with the kernel of height of h and width of w
저장 함수
void __builtin_gptx_tensor_st_u_b(__t16x128x8x8_fp16_t src, void *dest, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, uint8_t stride_h, uint8_t stride_w); //store tensor src in dest //store instruction to store unsigned byte data(8 bits)
void __builtin_gptx_tensor_st_s_b(__t16x128x8x8_fp16_t src, void *dest, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, uint8_t stride_h, uint8_t stride_w); //store instruction to store signed byte data(8 bits)
void __builtin_gptx_tensor_st_hf(__t16x128x8x8_fp16_t src, void *dest, uint16_t global_w, uint32_t global_a, uint16_t local_d, uint16_t local_h, uint16_t local_w, uint8_t stride_h, uint8_t stride_w); //store instruction to store hafl data(16 bits)
컴파일러는 컴파일러의 특정된 고유 함수를 가속기 회로에 의해 실행될 수 있는 기계 명령어를 포함하는 기계 코드로 변환할 수 있다. 기계 명령어는 32, 64 또는 96비트일 수 있다. 명령어는 첫 번째 비트를 비트 플래그를 위해 보류하며 라인당 32비트로 인코딩될 수 있으며, 비트 플래그가 설정될 경우(예를 들어, 1), 32비트 라인이 명령어의 종료가 아님을 나타내고 비트 플래그가 복귀될 경우(예를 들어, 0), 32비트 라인이 명령어의 종료임을 나타낸다.
각각의 기계 명령어는 조작 코드를 인코딩하기 위한 제1 부분(예를 들어, 12비트) 및 조작이 적용되는 피연산자를 인코딩하기 위한 제2 부분(예를 들어, 36비트)을 포함할 수 있다. 기계 명령어에는 아래 명령어가 포함된다:
로드 명령어
ldtsdup0f_c_ft $eta, $asa, $rsa, $nsa, $nsb
Figure pct00001
여기서, EXT_CAT는 임베디드 텐서 확장에 해당되고;
OP = ldtsdup0은 로드 명령어를 나타내는 조작 코드이고;
DUP0은 데이터 요소가 해당 셀의 다른 하드웨어 파티션에 복제되어 이들에 대응하는 자신의 유닛에 복제될 때, 하나의 엔진 회로의 동일한 하드웨어 파티션에 있는 셀(텐서 제어 레지스터에 의해 구성됨)이 다른 데이터 값을 가질 수 있음을 나타내고;
C는 데이터가 콘볼루션 또는 내적(conv/dp)에 제공되는지 여부를 나타내고;
FT는 부동 소수점 데이터 요소 유형을 나타내고;
ASA는 입력 데이터 베이스 주소이고;
ETA는 목적지를 위한 텐서 레지스터 id이고;
RSA가 저장하는 전역 차원 정보는 다음과 같다:
Figure pct00002
G0은 전역 폭을 저장하고, G1은 채널의 전역 면적을 저장한다;
NSA가 저장하는 로컬 차원 정보는 다음과 같다:
Figure pct00003
L0은 로컬 폭을 저장하고, L1은 로컬 높이를 저장하며, L2는 로컬 깊이를 저장한다;
NSB 패딩 요구사항은 다음과 같다:
Figure pct00004
N은 북쪽에 패딩된 요소의 수이고 W는 서쪽에 패딩된 요소의 수이다.
lddtsdup0f_c_ft $eta, $asa, $rsa, $nsa, $nsb, $etb
Figure pct00005
OP = lddtsdup0은 조작 코드이다;
ETB는 C가 conv일 때, 경계 데이터에 사용되거나 ETA 데이터를 복사하여 계산 대역폭을 배로 늘리는 데에 사용되는 두 번째 목적지 레지스터이다.
ldtsdup0f_c_ft와 대응되는 정수 버전은 ldtsdup0_c_it이고, lddtsdup0f_c_ft와 대응되는 정수 버전은 lddtsdup0_c_it이다.
ldtsdup1f_t_c_ft $eta, $asa, $rsa, $nsa
Figure pct00006
OP = ldtsdup1은 조작 코드이다;
DUP1은 다른 파티션이 다른 데이터 값을 가질 때 동일한 하드웨어 파티션(텐서 제어 레지스터에 의해 구성됨) 중의 셀이 동일한 데이터 값을 갖는 것을 나타낸다;
T는 차원 0과 차원 1에 적용되는 트랜스포즈의 연산자이다.
ldtsdup1f_t_c_ft의 정수 버전은 ldtsdup1_t_c_it이다.
기계 명령어에는 압축 버전이 있을 수도 있다:
ldtsdup1lookup_t_c_s_it $eta, $asa, $rsa, $nsa, $asb
Figure pct00007
OP = ldtsfdup1lookup은 조작 코드이다;
ASB는 조회 테이블을 로드하기 위한 베이스 주소이다;
S는 데이터가 희소 스토리지 포멧(sparse 또는<nsparse>)에 있음을 나타낸다.
ldtsdup2f_ft $eta, $asa, $rsa, $nsa
Figure pct00008
OP = ldtsdup2는 조작 코드이다;
DUP2는 파티션 중 또는 파티션 사이에 데이터 복사가 없음을 나타내며; 또한
RSA가 저장하는 전역 차원 정보는 다음과 같다:
Figure pct00009
PH는 수평 방향의 풀링 스트라이드이고, PV는 수직 방향의 풀링 스트라이드이다.
ldtsdup2f_ft의 정수 버전은 ldtsdup2_it이다.
ldtsnop $eta
Figure pct00010
OP = nop는 조작이 없는 조작 코드이다.
명령어 저장
sttsf_b_ft $esa, $asa, $rsa, $nsa
Figure pct00011
OP = stts는 조작 코드이다;
B는 배리어 신호(bar/nbar)이다;
ESA는 소스 텐서 레지스터 ID이다;
RSA가 저장하는 전역 정보는 다음과 같다:
Figure pct00012
NSA가 저장하는 로컬 차원 정보는 다음과 같다:
Figure pct00013
PL0은 풀링 후 로컬 폭을 저장한다.
sttsf_b_ft의 정수 버전은 stts_b_it이다.
계산 명령어
maddttt_act_c_s_d $eta, $esa, $esb, $esc, $nsa, $nsb
Figure pct00014
OP = maddttt는 3개의 텐서 피연산자 상에서의 곱셈과 덧셈을 위한 조작 코드다;
D는 깊이 방향(dw/ndw)을 나타낸다;
ACT는 활성화 서브 연산자(nact/relu/tanh/sigmoid)이다;
ESA, ESB 및 ESC는 입력 데이터 식별자(예를 들어, 텐서 레지스터 또는 특징 맵 및 커널 맵의 일부를 저장하는 로컬 메모리 뱅크에 사용되는 식별자)이다;
ETA는 출력 데이터 식별자(예를 들어 출력 데이터를 저장하기 위한 텐서 레지스터 또는 로컬 메모리 뱅크의 식별자임)이다;
NSA가 저장하는 로컬 차원 정보는 다음과 같다. NSA는 호스트 중 64비트 레지스터의 주소를 저장하고, 또한 입력 특징 맵(L00/L01)의 폭/높이 또는 출력 특징 맵의 폭/높이(L20/L21)와 같은 로컬 차원 정보를 포함한다.
Figure pct00015
NSA와 유사하게, NSB는 커널의 팽창 차원(D0/D1), L0, L1, L2, L3에 대응하는 커널 폭, 커널 높이, 입력 채널 수, 출력 채널 수와 같은 조작 차원 정보를 포함한다.
Figure pct00016
동일한 조작이 텐서/텐서/벡터(maddttr), 텐서/벡터/텐서(maddtrt), 텐서/벡터/벡터(maddtrr), 벡터/텐서/텐서(maddrtt), 벡터/텐서/벡터(maddrt) 또는 벡터/벡터/텐서(maddrrt)의 세 피연산자에 적용될 수 있다.
preluXX_s $eta, $esa, $esb, $nsa
Figure pct00017
Op = preluXX는 텐서/텐서(tt) 또는 텐서/벡터(tr)의 두 피연산자에 대한 preLU의 조작 코드다.
NSA가 저장하는 로컬 차원 정보는 다음과 같다:
Figure pct00018
rmaxt_act $eta, $esa $nsa, $nsb
Figure pct00019
Op = rmaxt는 최대 텐서를 감소하는 조작 코드이다. 즉, 텐서에서 최대값을 찾을 때 사용된다.
컴파일러는 나아가 기계 명령어를 더 결합하여 가속기 회로 명령어를 형성할 수 있다. 테이블 1은 특징 맵과 커널 사이의 콘볼루션을 위한 예제의 코드이다.
테이블 1
void conv_hf(fp16* src, fp16*kernel, fp16*dest)
{
__gptx_glob0_t glob_fmap;
__gptx_loc0_t loc;
__gptx_loc_pad_t pad;
__gptx_dual_tensor_t fb = __builtin_gptx_ldtddup0_conv_hf(src, glob_fmap, loc, pad);//FN1

__gptx_glob1_t glob_kern;
__gptx_loc1_t loc;
__gptx_tensor_t kb = __builtin_gptx_ldtdup1f_conv_hf(kernel, glob_kern, loc);//FN2

__gptx_loc3_t loc;
__gptx_cal_dim_t comp;
__gptx_tensor_t ob = __builtin_gptx_mad_conv_dual(fb, kb, NULL_BANK, loc, comp, FN_NOOP);//FN3

__gptx_glob2_t glob;
__gptx_loc2_t loc;
__builtin_gptx_sttsf_hf(dest, ob, glob, loc);//FN4
}
테이블 1과 같은 코드는 기계어 코드를 생성하기 위해 컴파일러에 의해 컴파일될 수 있다. 프로세서는 기계 코드를 실행하고 계산 밀집형 콘볼루션 작업을 가속기 회로에 위임할 수 있다. 콘볼루션 함수 conv_hf는 특징 맵 주소 *src, 커널 맵 주소, *커널 및 목적지 주소 *dest를 포함한 3개의 매개변수를 포함한다. 콘볼루션 함수는 특징 맵을 로딩하기 위한 FN1, 커널 맵을 로딩하기 위한 FN2, 뉴런 매트릭스 계산을 위한 FN3, 결과를 저장하기 위한 FN4를 포함하는 4개의 서브 함수를 포함한다. 각 서브 함수는 매개변수가 준비되기 전에 선행될 수 있다. FN1 - FN3의 출력은 로컬 뱅크 식별자이며, 여기서 fb 또는 kb는 외부 메모리에서 검색된 특징 맵 또는 커널 맵을 저장하기 위한 로컬 뱅크 식별자이고, ob는 뉴런 매트릭스의 계산 결과를 저장하는 로컬 뱅크의 식별자이다. 각 콘볼루션 함수 conv_hf의 호출은 텐서에서 하나의 슬라이스(slice) 데이터의 콘볼루션을 달성할 수 있다. 루프를 사용하여 풀 텐서(full tensor)에서 콘볼루션을 달성할 수 있다.
컴파일하는 동안, conv_hf의 소스 코드는 기계어 코드로 변환될 수 있다. 기계어 코드는 단일 가속기 명령어로 결합될 수 있으며, 여기서, FN1 및 FN2의 기계어 코드는 DMA 입력 명령을 구성할 수 있고, FN2는 뉴런 매트릭스 명령을 구성할 수 있으며, 또한 FN4는 DMA 출력 명령을 구성할 수 있다. 도 2 내지 도 6에서 설명된 바와 같이 가속기 명령어를 가속기 회로에 발송하여 실행할 수 있다.
예 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 (21)

  1. 입력 데이터를 저장하는 메모리;
    입력 명령 실행 회로, 뉴런 매트릭스 명령 실행 회로 및 출력 명령 실행 회로를 포함하는 가속기 회로; 및
    메모리 및 상기 가속기 회로에 통신적으로 커플링된 프로세서를 포함하되, 상기 프로세서는,
    상기 가속기 회로를 타깃으로 하는 소스 코드로부터 명령어 스트림을 생성하고, 상기 명령어 스트림의 각각은 입력 명령, 뉴런 매트릭스 명령 또는 출력 명령 중 적어도 하나를 포함하고; 또한
    상기 명령어 스트림을 상기 가속기 회로에 발송하여 상기 입력 명령 실행 회로, 상기 뉴런 매트릭스 명령 실행 회로 및 상기 출력 명령 실행 회로로 실행하도록 하는 것을 포함하는
    것을 특징으로 하는 시스템.
  2. 제1항에 있어서, 상기 입력 명령은 로드 명령으로서,
    하드웨어 파티션에 대한 데이터 복제 유형, 타깃 조작 또는 데이터 유형 중 적어도 하나를 나타내는 조작 코드;
    상기 메모리에 저장된 상기 입력 데이터의 시작점에 대응하는 베이스 주소를 나타내는 제1 피연산자;
    전역 차원 정보를 저장하는 제1 레지스터에 대한 참조를 나타내는 제2 피연산자;
    로컬 차원 정보를 저장하는 제2 레지스터에 대한 참조를 나타내는 제3 피연산자; 및
    상기 가속기 회로의 로컬 메모리 중의 상기 입력 데이터의 목적지를 나타내는 주소를 나타내는 제4 피연산자를 포함하는
    것을 특징으로 하는 시스템.
  3. 제2항에 있어서,
    상기 하드웨어 파티션에 대한 데이터 복제 유형은 상기 가속기 회로의 하드웨어 파티션에 있는 모든 셀의 제1 데이터 값을 복제하는 단계, 상기 가속기 회로의 제1 하드웨어 파티션에 있는 셀의 제2 데이터 값을 가속기 회로의 제2 하드웨어 파티션에 있는 대응하는 셀에 복제하거나, 또는 복제하지 않되,
    상기 타깃 조작은 콘볼루션 또는 내적 중 하나이고, 또한
    상기 데이터 유형은 부호 없는 바이트, 부호 있는 바이트, 반정밀도 부동 소수점(half precision floating point), 부동 소수점 또는 정수 중 하나인 것을 포함하는
    것을 특징으로 하는 시스템.
  4. 제2항에 있어서,
    상기 전역 차원 정보는 상기 입력 데이터의 폭 및 면적을 포함하고, 상기 로컬 차원 정보는 상기 입력 데이터의 일부의 폭, 높이 및 깊이를 포함하는
    것을 특징으로 하는 시스템.
  5. 제2항에 있어서,
    상기 로컬 메모리는 복수의 로컬 메모리 뱅크를 포함하고, 또한 상기 목적지는 상기 복수의 로컬 메모리 뱅크 중 하나의 식별자를 포함하는
    것을 특징으로 하는 시스템.
  6. 제1항에 있어서, 상기 출력 명령은,
    데이터 저장 조작을 나타내는 조작 코드;
    상기 가속기 회로의 로컬 메모리 중 출력 데이터의 소스를 나타내는 주소를 나타내는 제1 피연산자;
    전역 차원 정보를 저장하는 제1 레지스터에 대한 참조를 나타내는 제2 피연산자;
    로컬 차원 정보를 저장하는 제2 레지스터에 대한 참조를 나타내는 제3 피연산자; 및
    상기 메모리에 저장된 상기 출력 데이터의 시작점에 대응하는 베이스 주소를 나타내는 제4 피연산자를 포함하는
    것을 특징으로 하는 시스템.
  7. 제6항에 있어서,
    상기 전역 차원 정보는 상기 입력 데이터의 폭 및 면적을 포함하고, 상기 로컬 차원 정보는 상기 입력 데이터의 일부의 폭, 높이 및 깊이를 포함하는
    것을 특징으로 하는 시스템.
  8. 제6항에 있어서,
    상기 로컬 메모리는 복수의 로컬 메모리 뱅크를 포함하고, 또한 상기 소스는 상기 복수의 로컬 메모리 뱅크 중 하나의 식별자를 포함하는
    것을 특징으로 하는 시스템.
  9. 제1항에 있어서, 상기 뉴런 매트릭스 명령은,
    계산, 피연산자의 하나 또는 복수의 차원, 활성화 함수 또는 타깃 조작 중 적어도 하나를 나타내는 조작 코드;
    상기 계산에 대한 데이터의 제 1 데이터 소스를 나타내는 제 1 피연산자, 상기 계산에 대한 데이터의 제 2 소스를 나타내는 제 2 피연산자 또는 상기 계산에 대한 데이터의 제 3 소스를 나타내는 제 3 피연산자 중 적어도 하나;
    상기 계산 결과의 목적지를 나타내는 제4 피연산자; 및
    상기 로컬 차원 정보를 저장하는 제1 레지스터에 대한 참조를 나타내는 제5 피연산자를 포함하는
    것을 특징으로 하는 시스템.
  10. 제9항에 있어서,
    상기 뉴런 매트릭스 명령의 상기 계산은 곱셈 및 덧셈(MADD), 정류 선형 유닛(ReLU) 또는 최대 텐서 감소 중 하나를 포함하되, 상기 뉴런 매트릭스 명령의 피연산자의 상기 하나 또는 복수의 차원은 텐서 및 벡터를 포함하고, 상기 뉴런 매트릭스 명령의 상기 활성화 함수는 비활성화, ReLU 함수, tanh 함수, 또는 시그모이드 함수 중 하나를 포함하고, 상기 뉴런 매트릭스 명령의 상기 티켓 조작은 콘볼루션 또는 내적 중 하나인
    것을 특징으로 하는 시스템.
  11. 제10항에 있어서,
    상기 MADD 조작은 상기 제1 데이터 소스에서 비롯되는 데이터 요소와 상기 제2 데이터 소스에서 비롯되는 데이터 요소를 곱하여 중간 결과를 생성하며, 상기 중간 결과를 상기 제3 데이터 소스에서 비롯되는 데이터 요소와 더하여 이러한 결과를 생성하는
    것을 특징으로 하는 시스템.
  12. 제10항에 있어서,
    상기 최대 텐서 감소 연산은 상기 데이터의 제1 소스 중 최대값을 결정하는
    것을 특징으로 하는 시스템.
  13. 제1항에 있어서, 상기 프로세서는,
    상기 소스 코드에서 가속기 회로와 관련된 복수의 고유 함수를 인식하고;
    컴파일러를 실행하여 상기 복수의 고유 함수를 복수의 기계 명령어로 변환하고; 및
    복수의 기계 명령어 중 하나 또는 복수 개를 결합시킴으로써 각각의 상기 명령어 스트림을 생성하는
    것을 특징으로 하는 시스템.
  14. 제1항에 있어서, 상기 가속기 회로는,
    상기 명령어 스트림을 수신하기 위한 제어 인터페이스;
    상기 로컬 메모리; 및
    상기 제어 인터페이스 및 상기 로컬 메모리에 통신적으로 커플링된 엔진 회로를 포함하되, 상기 엔진 회로는,
    상기 명령어 스트림의 명령어를 입력 명령, 상기 뉴런 매트릭스 명령 및 상기 출력 명령으로 디코딩하는 디스패치 회로;
    상기 입력 명령을 입력 명령 큐에 저장하는 입력 명령 큐 회로, 상기 뉴런 매트릭스 명령을 뉴런 매트릭스 명령 큐에 저장하는 뉴런 매트릭스 명령 실행 회로, 및 상기 출력 명령을 출력 명령 큐에 저장하는 출력 명령 큐 회로; 및
    상기 입력 명령을 실행하는 상기 입력 명령 실행 회로, 상기 뉴런 매트릭스 명령을 실행하는 상기 뉴런 매트릭스 실행 회로, 출력 명령을 실행하는 출력 명령 실행 회로를 포함하는
    것을 특징으로 하는 시스템.
  15. 제14항에 있어서,
    상기 입력 명령 실행 회로, 상기 뉴런 매트릭스 명령 실행 회로 및 상기 출력 명령 실행 회로는 동기화 필요 없이 상기 명령어로부터 디코딩된 상기 입력 명령, 상기 뉴런 매트릭스 명령 및 상기 출력 명령을 각각 실행하는
    것을 특징으로 하는 시스템.
  16. 제15항에 있어서,
    상기 입력 명령은 직접 메모리 액세스(DMA) 입력 명령이고, 상기 출력 명령은 DMA 출력 명령인
    것을 특징으로 하는 시스템.
  17. 제14항에 있어서, 상기 뉴런 매트릭스 명령 실행 회로는,
    각각의 셀이 상기 매트릭스의 적어도 다른 하나의 계산 셀에 연결되는 계산 셀의 매트릭스를 포함하되, 상기 계산 셀의 매트릭스 내의 각 계산 셀은,
    계산 유닛 어레이;
    복수의 차원 카운터;
    상기 계산 유닛 어레이에 통신적으로 커플링된 복수의 피더(feeder) 회로; 및
    상기 복수의 피더 회로와 연관된 복수의 로컬 메모리 뱅크를 포함하는
    것을 특징으로 하는 시스템.
  18. 프로세서를 통해 상기 가속기 회로에 대한 복수의 고유 함수를 포함하는 소스 코드를 인식하는 단계;
    상기 프로세서를 통해 상기 소스 코드를 상기 복수의 고유 함수에 대응하는 복수의 기계 명령어를 포함하는 기계 코드로 변환하는 단계;
    상기 프로세서를 통해 복수의 기계 명령어 중 하나 또는 복수 개를 가속기 회로 명령어로 결합시키는 단계; 및
    상기 프로세서를 통해 실행을 위해 상기 가속기 회로 명령을 상기 가속기 회로에 발송하는 단계를 포함하는
    것을 특징으로 하는 방법.
  19. 제18항에 있어서,
    상기 가속기 회로 명령의 스트림을 생성하는 단계; 및
    상기 가속기 회로 명령의 스트림을 가속기 회로에 발송하는 단계를 더 포함하는
    것을 특징으로 하는 방법.
  20. 제18항에 있어서,
    상기 가속기 회로 명령어는 입력 명령, 뉴런 매트릭스 명령 또는 출력 명령 중 적어도 하나를 포함하는
    것을 특징으로 하는 방법.
  21. 제20항에 있어서,
    상기 가속기 회로는 상기 입력 명령을 실행하는 입력 명령 실행 회로, 상기 뉴런 매트릭스 명령을 실행하는 뉴런 매트릭스 명령 실행 회로 및 상기 출력 명령을 실행하는 출력 명령 실행 회로를 포함하는
    것을 특징으로 하는 방법.
KR1020227003569A 2019-07-03 2019-07-03 가속기 회로의 조작을 위한 명령어 KR20220038694A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/094511 WO2021000281A1 (en) 2019-07-03 2019-07-03 Instructions for operating accelerator circuit

Publications (1)

Publication Number Publication Date
KR20220038694A true KR20220038694A (ko) 2022-03-29

Family

ID=74100469

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227003569A KR20220038694A (ko) 2019-07-03 2019-07-03 가속기 회로의 조작을 위한 명령어

Country Status (6)

Country Link
US (1) US20220365782A1 (ko)
EP (1) EP3994621A1 (ko)
KR (1) KR20220038694A (ko)
CN (1) CN114341888A (ko)
TW (1) TWI768383B (ko)
WO (1) WO2021000281A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220036950A (ko) * 2019-07-03 2022-03-23 후아시아 제너럴 프로세서 테크놀러지스 인크. 순수 함수 신경망 가속기 시스템 및 아키텍처
CN113391842A (zh) * 2020-03-13 2021-09-14 华为技术有限公司 一种单指令多数据simd指令的生成、处理方法以及相关设备
US11914894B2 (en) * 2020-12-08 2024-02-27 Western Digital Technologies, Inc. Using scheduling tags in host compute commands to manage host compute task execution by a storage device in a storage system
CN112669852B (zh) * 2020-12-15 2023-01-31 北京百度网讯科技有限公司 内存分配方法、装置及电子设备
US20220222318A1 (en) * 2021-01-08 2022-07-14 Microsoft Technology Licensing, Llc Performing tensor operations using a programmable control engine
US11669331B2 (en) * 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
TWI801316B (zh) * 2022-07-07 2023-05-01 財團法人工業技術研究院 加速典範多元分解的電子裝置和方法
WO2024065860A1 (en) * 2022-10-01 2024-04-04 Intel Corporation Hardware support for n-dimensional matrix load and store instructions

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3006786B1 (fr) * 2013-06-05 2016-12-30 Commissariat Energie Atomique Accelerateur materiel pour la manipulation d'arbres rouges et noirs
GB2510655B (en) * 2013-07-31 2015-02-25 Imagination Tech Ltd Prioritizing instructions based on type
US10540588B2 (en) * 2015-06-29 2020-01-21 Microsoft Technology Licensing, Llc Deep neural network processing on hardware accelerators with stacked memory
US10621486B2 (en) * 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10949736B2 (en) * 2016-11-03 2021-03-16 Intel Corporation Flexible neural network accelerator and methods therefor
JP6852365B2 (ja) * 2016-11-25 2021-03-31 富士通株式会社 情報処理装置、情報処理システム、情報処理プログラムおよび情報処理方法
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
US10019668B1 (en) * 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
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
US11204747B1 (en) * 2017-10-17 2021-12-21 Xilinx, Inc. Re-targetable interface for data exchange between heterogeneous systems and accelerator abstraction into software instructions
WO2019104638A1 (zh) * 2017-11-30 2019-06-06 深圳市大疆创新科技有限公司 神经网络处理的方法、装置、加速器、***和可移动设备
TW201926147A (zh) * 2017-12-01 2019-07-01 阿比特電子科技有限公司 電子裝置、加速器、適用於神經網路運算的加速方法及神經網路加速系統
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US11210063B2 (en) * 2019-03-27 2021-12-28 Intel Corporation Machine learning training architecture for programmable devices
US11461622B2 (en) * 2019-06-28 2022-10-04 Amazon Technologies, Inc. Dynamic code loading for multiple executions on a sequential processor

Also Published As

Publication number Publication date
EP3994621A1 (en) 2022-05-11
WO2021000281A1 (en) 2021-01-07
TWI768383B (zh) 2022-06-21
TW202105175A (zh) 2021-02-01
US20220365782A1 (en) 2022-11-17
CN114341888A (zh) 2022-04-12

Similar Documents

Publication Publication Date Title
TWI768383B (zh) 用於操作加速器電路的指令
US10956218B2 (en) Enqueuing kernels from kernels on GPU/CPU
Lindholm et al. NVIDIA Tesla: A unified graphics and computing architecture
US7877585B1 (en) Structured programming control flow in a SIMD architecture
CN107347253B (zh) 用于专用处理器的硬件指令生成单元
US9639365B2 (en) Indirect function call instructions in a synchronous parallel thread processor
US8321849B2 (en) Virtual architecture and instruction set for parallel thread computing
Owaida et al. Synthesis of platform architectures from OpenCL programs
van der Wolf et al. Design and programming of embedded multiprocessors: an interface-centric approach
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
JP7295104B2 (ja) メモリ・ネットワーク・プロセッサ
US11294713B2 (en) Asynchronous data movement pipeline
TWI754310B (zh) 純函數語言神經網路加速器系統及電路
US20110078418A1 (en) Support for Non-Local Returns in Parallel Thread SIMD Engine
CN113495761A (zh) 用于对线程同步的阶段进行协调的技术
Owaida et al. Massively parallel programming models used as hardware description languages: The OpenCL case
CN112817739A (zh) 用于修改可执行图以实施不同工作负载的技术
JP2023527227A (ja) プロセッサ、処理方法、および関連デバイス
US20230401480A1 (en) Hardware acceleration of machine learning designs
US20240020170A1 (en) Estimating a Cost of Implementing an Operation Unit Graph on a Reconfigurable Processor
CN117270816A (zh) 改变操作数的精度
CN115885263A (zh) 用于识别存储器的应用程序编程接口
CN116501326A (zh) 用于使运算符被编译器使用的应用程序编程接口

Legal Events

Date Code Title Description
A201 Request for examination
WITB Written withdrawal of application