KR20190068616A - 신경 네트워크 명령어 세트 아키텍처 - Google Patents
신경 네트워크 명령어 세트 아키텍처 Download PDFInfo
- Publication number
- KR20190068616A KR20190068616A KR1020197014904A KR20197014904A KR20190068616A KR 20190068616 A KR20190068616 A KR 20190068616A KR 1020197014904 A KR1020197014904 A KR 1020197014904A KR 20197014904 A KR20197014904 A KR 20197014904A KR 20190068616 A KR20190068616 A KR 20190068616A
- Authority
- KR
- South Korea
- Prior art keywords
- tensor
- processing unit
- instruction
- computation
- loop
- Prior art date
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 55
- 238000012545 processing Methods 0.000 claims abstract description 141
- 238000000034 method Methods 0.000 claims abstract description 55
- 230000004044 response Effects 0.000 claims abstract description 11
- 238000004364 calculation method Methods 0.000 claims description 47
- 230000004913 activation Effects 0.000 description 49
- 238000001994 activation Methods 0.000 description 49
- 230000008569 process Effects 0.000 description 17
- 239000000872 buffer Substances 0.000 description 16
- 238000004590 computer program Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 5
- 239000011159 matrix material Substances 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Images
Classifications
-
- G06N3/0454—
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Neurology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Magnetic Resonance Imaging Apparatus (AREA)
- Image Analysis (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
Abstract
프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 단계를 포함하는 컴퓨터로 구현되는 방법. 상기 방법은 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 단계를 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의된다. 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부일 수 있다. 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함할 수 있고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의될 수 있다.
Description
본 명세서는 딥 신경 네트워크(DNN, Deep Neural Network)의 계산을 위한 명령어 세트에 관한 것이다.
신경 네트워크들은 모델들의 하나 이상의 레이어들을 이용하여 수신된 입력에 대한 출력 예를 들면, 분류를 생성하는 기계 학습 모델들이다. 일부 신경 네트워크들은 출력 레이어에 더하여 하나 이상의 히든 레이어들을 포함한다. 각 히든 레이어의 출력은 네트워크에서 다음 레이어 즉, 다음 히든 레이어 또는 네트워크의 출력 레이어에 대한 입력으로서 사용된다. 네트워크의 각 레이어는 각각의 세트의 현재 값들에 따라 수신된 입력으로부터 출력을 생성한다.
일부 신경 네트워크는 하나 이상의 컨볼루션 신경 네트워크 레이어들을 포함한다. 각 컨벌루션 신경 네트워크 레이어는 연관된 커널들의 세트를 가진다. 각 커널은 사용자가 만든 신경 네트워크 모델에 의해 설정된 값을 포함한다. 일부 구현예에서, 커널들은 특정한 이미지 윤곽, 모양 또는 색상을 식별한다. 커널들은 가중 입력들의 행렬 구조로서 표현될 수 있다. 각 컨벌루션 레이어는 또한 액티베이션 입력들의 세트를 프로세싱할 수 있다. 액티베이션 입력들의 세트 또한 행렬 구조로서 표현될 수 있다.
본 명세서에 기술된 발명의 일 혁신적 양태는 컴퓨터로 구현되는 방법으로 이용될 수 있다. 방법은 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 단계를 포함한다. 상기 방법은 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 단계를 포함할 수 있으며, 상기 루프 네스트의 구조는 상기 명령어의 파라미터들 중 하나 이상에 기초하여 정의된다. 이들 또는 다른 실시예들은 다음 구성들 중 하나 이상을 각각 선택적으로 포함할 수 있다. 예를 들면, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부일 수 있다. 상기 명령어에 의해 특정된 파라미터들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 파라미터를 포함할 수 있고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의될 수 있다. 그에 따라, 복수의 루프들을 포함하는 루프 네스트를 실행하는 것은 네스팅된 루프(nested loop, 중첩 루프)의 구조에 의해 특정된 순서로 텐서의 엘리먼트들에 대한 순회(traversal)를 수행하는 것을 지칭할 수 있으며, 상기 구조는 예를 들어 루프 네스팅의 깊이, 시작 및 종료 인덱스들, 각 루프의 폭 및 방향에 의해 특정된다.
일부 구현예들에서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부이다. 일부 구현예들에서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의된다. 일부 구현예들에서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부이다. 일부 구현예들에서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 저장 매체의 어레이의 적어도 하나의 메모리 주소에 액세스하게 하고, 상기 어레이의 상기 메모리 주소는 상기 텐서 계산의 수행 동안에 상기 프로세싱 유닛에 의해 판독되는 변수(variable)를 포함한다.
일부 구현예들에서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, TTU(tensor traversal unit)가 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 루프 인덱스들을 방출하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 것을 포함한다. 일부 구현예들에서, 상기 방법은 상기 프로세싱 유닛에 의해, 상기 TTU의 어레이 참조로 하여금 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 참조된 어레이 엘리먼트에 대한 주소를 생성하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 단계를 더 포함한다. 일부 구현예들에서, 명령어는 상기 TTU와 연관된 어레이 참조에 대한 주소를 생성하기 위해 제2 TTU 카운터와 합산된 제1 TTU 카운터를 표시한다.
일부 구현예들에서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 텐서 계산의 수행과 연관된 하나 이상의 오퍼랜드들을 관리하는 제1 동기화 절차를 실행하는 것을 포함하며, 오퍼랜드를 관리하는 것은 동기화 플래그 조건에 기초하여 하나 이상의 루프 네스트들을 정지(stalling)시키는 것을 포함한다. 일부 구현예들에서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 루프 네스트의 특성과 연관된 카운터를 증가시키는 것을 관리하는 제2 동기화 절차를 실행하는 것을 포함한다.
본 명세서에 기술된 발명의 다른 혁신적 양태는 전자 시스템에서 구현될 수 있으며, 상기 전자 시스템은: 상기 전자 시스템에 배치된 프로세싱 유닛, 상기 프로세싱 유닛은 하나 이상의 프로세싱 디바이스들을 포함하며; 및 동작들을 수행하기 위해 상기 하나 이상의 프로세싱 디바이스들에 의해 실행가능한 명령어들을 저장하는 하나 이상의 기계 판독가능 저장 디바이스들을 포함하며, 상기 동작들은: 상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의된다.
본 명세서에 기술된 발명의 다른 혁신적 양태는 프로세싱 유닛에 의해 실행가능한 명령어들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체에서 구현될 수 있으며, 상기 명령어들은 실행시 상기 프로세싱 유닛으로 하여금 동작들을 수행하게 하며, 상기 동작들은: 상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의된다.
상기 그리고 다른 양태들의 다른 구현예들은 상기 방법들의 액션들을 수행하도록 구성된 대응 시스템들, 장치들 및 컴퓨터 저장 디바이스들에 인코딩된 컴퓨터 프로그램들을 포함한다. 하나 이상의 컴퓨터들의 시스템은 동작 중에 시스템이 상기 동작들을 수행하게 하는 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합에 의해 구성될 수 있다. 하나 이상의 컴퓨터 프로그램들은 데이터 프로세싱 장치에 의해 실행될 때 상기 장치로 하여금 동작들을 수행하게 하는 명령어들을 갖도록 구성될 수 있다.
본 명세서에 기술된 본 발명은 다음의 이점들을 실현하도록 특정한 실시예들에서 구현될 수 있다. 프로세싱 유닛은 하나의 명령어로 깊게 네스팅된 루프들을 반복하는 프로그램들을 개시할 수 있다. 프로세싱 유닛은 텐서 계산을 수행하기 위한 데이터 값들로 인코딩된 수신된 명령어들을 실행할 수 있다. 하나 이상의 계산들을 수행하기 위해 텐서를 순회할 때 프로세서가 실행하도록 요구되는 명령어의 수를 감소시킴으로써 프로세싱 유닛의 계산 대역폭이 증가된다. 주어진 신경 네트워크 레이어에 대한 텐서 계산을 수행하기 위한 명령어들은 예시적인 하드웨어 컴퓨팅 시스템의 하나 이상의 컴퓨팅 시스템들 사이에서 인코딩되고 분산될 수 있다. 다양한 컴퓨터 시스템들에 대한 인코딩된 명령어들의 분산은 단일 시스템 내에서 계산 대역폭을 증가시킬 수 있다. 하나의 시스템이 주어진 텐서에 필요한 총 계산들의 서브셋에 대해서만 책임을 지기 때문에 계산 시스템의 명령어 양은 감소된다.
본 명세서에 기술된 본 발명의 하나 이상의 구현예들의 세부 사항은 첨부 도면과 아래의 설명에서 기술된다. 본 발명의 다른 잠재적 구성들, 양태들 및 이점들은 설명, 도면 및 청구항으로부터 명백해질 것이다.
도 1은 예시적 컴퓨터 시스템의 블록도이다.
도 2는 텐서 순회 유닛의 예시를 도시한다.
도 3은 도 1의 예시적 계산 시스템에 의해 적어도 부분적으로 수행되는 연산 코드(opcode) 및 대응하는 연산들을 포함하는 예시적 테이블을 도시한다.
도 4a는 예시적 액티베이션 텐서, 예시적 가중치 텐서 및 예시적 출력 텐서를 도시한다.
도 4b는 도 1의 예시적 계산 시스템의 프로세싱 유닛에 의해 실행될 수 있는 예시적 루프 네스트를 도시한다.
도 5는 컴퓨터로 구현되는 방법에 의해 텐서 계산을 수행하기 위한 프로세스의 예를 도시하는 흐름도이다.
다양한 도면들에서 동일한 참조 번호 및 기호는 동일한 구성요소를 표시한다.
도 2는 텐서 순회 유닛의 예시를 도시한다.
도 3은 도 1의 예시적 계산 시스템에 의해 적어도 부분적으로 수행되는 연산 코드(opcode) 및 대응하는 연산들을 포함하는 예시적 테이블을 도시한다.
도 4a는 예시적 액티베이션 텐서, 예시적 가중치 텐서 및 예시적 출력 텐서를 도시한다.
도 4b는 도 1의 예시적 계산 시스템의 프로세싱 유닛에 의해 실행될 수 있는 예시적 루프 네스트를 도시한다.
도 5는 컴퓨터로 구현되는 방법에 의해 텐서 계산을 수행하기 위한 프로세스의 예를 도시하는 흐름도이다.
다양한 도면들에서 동일한 참조 번호 및 기호는 동일한 구성요소를 표시한다.
본 명세서에 기술된 발명은 기계 학습 추론 워크로드들을 가속하기 위한 컴퓨터로 구현되는 프로세스 또는 방법에 관한 것으로, 워크로드를 수행하는 프로세싱 유닛이 계산들을 실행하면서 높은 성능을 달성할 수 있도록 한다. 본 명세서에 기술될 프로세스 및 방법은 타일들의 세트로서 조직화된 하드웨어 컴퓨팅 시스템들 내에서 실행될 수 있으며, 각 타일은 자립적이며, 신경 네트워크 레이어에 의해 요구되는 계산의 적어도 일부를 독립적으로 실행할 수 있다.
신경 네트워크 내에서 수행되는 계산 프로세스는 하나 이상의 사이클들에서 입력 텐서와 파라미터/가중치 텐서의 곱 및 다수의 사이클들에 걸친 곱의 누적을 수행하는 것으로 이루어질 수 있다. 그 다음, 입력-가중치 곱은 입력 텐서 또는 행렬의 열과 곱해진 각 가중 엘리먼트의 곱의 합으로서 기록될 수 있다. 딥 신경 네트워크들(Deep Neural Networks, DNNs)은 서로 연결되는 다수의 레이어들을 포함한다. 주어진 레이어에 대한 텐서 계산들을 포함하는 추론 워크로드는 본 명세서에 기술된 방법으로 가속화된다. 본 명세서에서 기술된 발명은 또한 신경 네트워크 명령어 세트 아키텍처를 사용하는 개시된 기법들 및 하드웨어를 사용하여 이미지 인식 및/또는 분류 방법/시스템과 관련될 수 있다.
일반적으로, 소프트웨어 알고리즘이 N 차원 텐서를 프로세싱함으로써 텐서 계산들을 수행하는 경우, 각 루프는 N 차원 텐서의 각 차원을 순회할 책임이 있는 네스팅된 루프가 사용될 수 있다. 다차원 텐서는 행렬 또는 다차원 행렬들일 수 있다. N 차원 텐서의 각 차원은 하나 이상의 엘리먼트들을 포함할 수 있으며, 각 엘리먼트는 각각의 데이터 값을 저장할 수 있다. 예를 들어, 텐서는 프로그램에서 변수일 수 있고, 상기 변수는 3개의 차원들을 가질 수 있다. 제1 차원은 300개의 엘리먼트들의 길이를 가질 수 있고, 제2 차원은 1000개의 엘리먼트들의 길이를 가질 수 있고, 제3 차원은 20개 엘리먼트들의 길이를 가질 수 있다.
네스팅된 루프에서 텐서를 순회하는 것은 엘리먼트의 해당 데이터 값을 로드하거나 저장하기 위해 엘리먼트의 메모리 주소 값의 계산을 요구한다. 예를 들어, for-루프는 네스팅된 루프이고, 3개의 루프 인덱스 변수들에 의해 추적된 3개의 루프들은 3차원 텐서를 통해 순회하기 위해 네스팅될 수 있다. 일부 경우에, 프로세서는 외부 루프 인덱스 변수로 내부 루프의 루프 바운드를 설정하는 것과 같이 루프 바운드 조건을 실행해야 할 수 있다. 예를 들어, 네스팅된 루프의 가장 안쪽 루프를 종료할지 여부를 결정함에 있어, 프로그램은 가장 안쪽 루프의 루프 인덱스 변수의 현재 값을 네스팅된 루프의 가장 바깥쪽 루프 인덱스 변수의 현재 값과 비교할 수 있다.
3차원 텐서 순회와 연관된 계산 작업들은 분기 명령어들 및 정수 산술 명령어들과 같은 상당한 수의 명령어들을 요구할 수 있다. 각 루프 바운드가 작고, 루프들의 수가 많은 경우, 메모리 주소 계산 및 텐서 차원 순회에 대한 계산들은 전체 실행 시간의 상당 부분을 차지할 수 있으며, 전반적 성능을 심각하게 저하시킬 수 있다. 아래에 더 자세히 기술될 바와 같이, 텐서 계산을 수행하기 위한 데이터 값들로 인코딩된 명령어들을 수신하는 프로세싱 유닛에 의해 실행가능한 방법들은 프로세서가 하나 이상의 계산들을 수행하기 위해 텐서를 순회하는 경우 실행할 것이 요구되는 명령어들의 수를 감소시킴으로써, 프로세싱 유닛의 계산 대역폭을 증가시킬 수 있다. 일부 구현예에서, 계산 대역폭은 예를 들어, 텐서에서 수행될 수 있는 연산들의 최대 비율 또는 텐서에서 수행될 수 있는 연산들의 수를 지칭한다.
주어진 레이어에 대한 텐서 계산을 수행하기 위한 명령어들은 예시적인 하드웨어 컴퓨팅 시스템 내의 하나 이상의 컴퓨팅 시스템들(아래에서 계산 타일들로 기술됨) 사이에서 인코딩되고 분산될 수 있다. 다양한 계산 타일들에 대한 인코딩된 명령어들의 분산은 단일 타일 내에서 계산 대역폭을 증가시킬 수 있다. 게다가, 다수의 계산 타일들로 계산들을 분산시킴으로써, 계산 타일의 프로세싱 유닛은 텐서를 순회하는 경우 감소된 수의 명령어들을 소비한다(현재 시스템과 비교하여). 따라서, 명령어를 소비하는 것은 예를 들어, 계산 타일의 프로세싱 유닛에 의해 하나 이상의 명령어들을 실행하는 것을 의미한다. 단일의 타일이 주어진 텐서에 필요한 총 계산들의 서브셋에 대해서만 책임을 지기 때문에 계산 타일에서 명령어 양은 감소될 수 있다.
신경 네트워크 추론 워크로드들에 대한 내적 및 행렬-승산을 포함하는 신경 네트워크 텐서 계산들을 가속하기 위한 하드웨어 컴퓨팅 시스템들과 관련된 추가적 세부사항들 및 설명들은 2016년 10월 27일 출원된 미국 특허출원 제15/335,769호 "신경 네트워크 계산 타일"에 기술되어 있다. 미국 특허출원 제15/335,769호의 전체 개시 내용은 그 전체가 본 명세서에 참조로서 통합된다.
도 1은 신경 네트워크 레이어에 대한 계산들을 수행하기 위해 하나 이상의 텐서들을 순회하기 위한 예시적 컴퓨팅 시스템(100)의 블록도를 도시한다. 도시된 바와 같이, 컴퓨팅 시스템(100)은 프로세싱 유닛(102), 저장 매체(104), TTU(tensor traversal unit)(106), 곱셈 누산 연산자(MAC operator)(108) 및 액티베이션 유닛(110)을 포함한다. 단일 TTU가 도시되어 있지만, 시스템(100)은 하나 이상의 계산 타일들이 주어진 신경 네트워크 레이어에 대한 텐서 계산들을 프로세싱하기 위해 사용되는 경우, 메모리 액세스 동작들 뿐만 아니라 텐서 순회 동작들을 프로세싱하기 위해 2개 이상의 TTU(106)들을 포함할 수 있다. 유사하게, 단일 MAC가 도시되었지만, 시스템(100)은 다수의 MAC 연산자(108)를 포함할 수 있다.
프로세싱 유닛(102)은 저장 매체(104)에 저장된 명령어 또는 프로그램 코드 또는 다른 저장 디바이스에 저장된 다른 명령어/코드를 포함하여 컴퓨팅 시스템(100) 내에서 실행하기 위한 명령어들을 프로세싱하도록 구성된다. 프로세싱 유닛(102)은 하나 이상의 프로세서들을 포함할 수 있다. 저장 매체(104)는 액티베이션들을 저장하기 위한 제1 뱅크(112) 및 가중치들을 저장하기 위한 제2 뱅크(114)를 포함하는 하나 이상의 메모리 뱅크들 또는 유닛들을 포함할 수 있다. 일부 구현예들에서, 저장 매체(104)는 휘발성 메모리 유닛 또는 유닛들이다. 일부 다른 구현예에서, 저장 매체(104)는 예를 들어 ROM(read-only memory) 및/또는 EEPROM(electrically erasable programmable read-only memory)과 같은 비휘발성 메모리 유닛 또는 유닛들이다. 저장 매체(104)는 플로피 디스크 디바이스, 하드 디스크 디바이스, 광 디스크 디바이스 또는 테이프 디바이스, 플래시 메모리 또는 다른 유사한 고체 상태 메모리 디바이스, 또는 저장 영역 네트워크 또는 다른 구성의 디바이스를 포함하는 디바이스의 어레이와 같은 컴퓨터 판독가능 매체의 다른 형태일 수 있다.
명령어 세트(103)는 프로세싱 유닛(102)에 의해 실행될 때, 상기 프로세싱 유닛(102)로 하여금 예를 들어, 제1 뱅크(112)의 메모리 주소 위치들에 액티베이션들을 저장하는 것 및 제2 뱅크(114)의 메모리 주소 위치들에 가중치들을 저장하는 것을 포함하는 하나 이상의 작업들을 수행하게 한다. 추가로, 명령어들(103)은 프로세싱 유닛(102)으로 하여금 제1 뱅크(112) 및 제2 뱅크(114)로부터 저장된 데이터에 액세스하게 하고, 상기 액세스된 데이터를 MAC 연산자(108)에 제공하게 할 수 있다. 아래에 더 자세히 기술될 바와 같이, MAC 연산자(108)는 액티베이션을 가중치와 곱하여 부분 합계를 생성하거나 액티베이션 유닛(110)에 제공되는 출력 액티베이션(들)을 생성하는 것을 포함할 수 있는 곱셈 연산을 수행할 수 있다.
일반적으로, 컴퓨팅 시스템(100)은 명령어 세트(103) 내에 포함된 하나 이상의 명령어들을 프로세싱하여 출력(116)을 생성한다. 명령어 세트(103)는 텐서 연산(텐서op) 명령어 또는 직접 메모리 액세스 연산 (DMAop) 명령어 중 적어도 하나를 포함할 수 있다. 컴퓨팅 시스템(100)은 다수의 선형 대수 계산들을 포함하는 텐서 계산들을 수행하기 위해 적어도 하나의 텐서op 및 적어도 하나의 DMAop 명령어를 실행하도록 구성될 수 있다.
일부 구현예들에서, 텐서 계산들을 수행하는 것은 텐서의 특정한 차원의 엘리먼트에 대응하는 메모리 주소 위치들에 액세스하기 위해 DMAop 명령어를 실행하는 것을 포함하며, 적어도 하나의 메모리 주소 위치는 텐서의 엘리먼트에 대한 데이터 값을 저장한다. 텐서 계산들은 텐서의 특정한 차원을 따라 엘리먼트들을 순회하도록 텐서op를 실행하는 것을 더 포함할 수 있다. 일부 구현예에서, 텐서 계산을 수행하는 것은 신경 네트워크 레이어에 대한 출력 값들을 생성하기 위해 액티베이션 텐서의 엘리먼트들에 대한 데이터 값을 파라미터 또는 가중치 텐서의 엘리먼트들에 대한 데이터 값과 곱하는 것에 대응한다.
도시된 바와 같이, TTU(106)는 명령어 버퍼(124)를 포함할 수 있다. 단일 명령어 버퍼(124)가 도시되어 있지만, 계산 시스템(100)은 다수의 명령어 버퍼들(124)을 포함할 수 있다. 또한, 시스템(100)은 다수의 TTU(106)들을 포함할 수 있고, 각 TTU(106)는 하나 이상의 명령어 버퍼들(124)을 포함할 수 있다. 일부 구현예에서, 시스템(100) 내의 상이한 명령어 버퍼들(124)은 텐서op 명령어 버퍼 및 DMAop 명령어 버퍼를 포함할 수 있다. 아래에 더 자세히 기술될 바와 같이, 시스템(100)에 의해 수신되고 프로세싱 유닛(102)에 의해 실행되는 명령어들은 텐서op 명령어 및 DMAop 명령어 중 하나를 포함할 수 있다. 일부 구현예에서, 수신된 명령어들은 프로세싱 유닛(102)에 의한 실행 이전에 명령어 버퍼(124)에 저장된다.
도 4를 참조하여 아래에 더 자세히 기술될 바와 같이, 액티베이션들은 입력 텐서의 엘리먼트들에 대응하는 각각의 메모리 주소 위치들에서 제1 뱅크(112)에 프리-로딩될 수 있다. 마찬가지로, 가중치들은 가중치 텐서의 엘리먼트들에 대응하는 각각의 메모리 주소 위치들에서 제2 뱅크(114)에 프리-로딩될 수 있다. 일부 구현예에서, 신경 네트워크 하드웨어 컴퓨팅 시스템과 연관된 외부 또는 상위 레벨 제어 디바이스로부터 명령어들, 액티베이션들 및 가중치들이 시스템(100)에 제공된다.
일반적으로, 프로세싱 유닛(102)이 텐서의 특정한 엘리먼트에 액세스하기 위한 하나 이상의 명령어들을 실행할 때, 텐서 순회 유닛(106)은 엘리먼트의 메모리 주소를 결정하여 프로세싱 유닛(102)이 특정한 엘리먼트의 값을 나타내는 데이터를 판독하기 위해 저장 매체(104)에 액세스할 수 있도록 한다. 예를 들어, 저장 매체(104)에 저장된 명령어들은 프로세싱 유닛(102)에 의해 실행될 수 있는 네스팅된 루프 프로그램을 위한 프로그램 코드를 포함할 수 있다.
네스팅된 루프 프로그램은 명령어 세트(103)에 의해 제공된 데이터 값들에 기초하여 결정되는 값들의 범위를 가질 수 있는 다수의 변수들을 포함할 수 있다. 프로세싱 유닛(102)은 네스팅된 루프 프로그램에 대한 프로세싱 코드를 실행하여 TTU(106)로 하여금 적어도 2개의 다차원 어레이들의 각각의 엘리먼트들에 대응하는 메모리 주소 위치드에 액세스하게 할 수 있다. 예를 들어, 다수의 변수들은 다수의 내부 및 외부 루프들을 포함하는 예시적 딥 루프 네스트를 인스턴스화하기 위한 데이터 값들을 포함할 수 있다. 일부 구현예에서, 다수의 변수들 및 데이터 값들은 TTU(106)로 하여금 도 b(예를 들어, 딥 루프 네스트(402))를 참조하여 후술되는 루프 네스트와 같은 딥 루프 네스트를 인스턴스화하게 한다.
네스팅된 루프와 연관된 현재 인덱스 변수 값들에 기초하여, TTU(106)는 다차원 어레이 변수의 제1 엘리먼트로부터의 오프셋을 나타내는 오프셋 값을 결정할 수 있다. 프로세싱 유닛(102)은 오프셋 값을 사용하여, 저장 매체로부터, 2차원 어레이 변수의 특정한 엘리먼트에 액세스할 수 있다.
텐서 순회 유닛(106)은 하나 이상의 텐서들과 연관된 상태를 결정하도록 구성된다. 상태는 루프 바운드 값들, 현재 루프 인덱스 변수 값들, 메모리 주소 값을 계산하기 위한 차원 승수들 및/또는 브랜치 루프 바운드들을 처리하기 위한 프로그램 카운터 값들을 포함할 수 있다. 텐서 순회 유닛(106)은 텐서 상태 엘리먼트들(122) 및 산술 논리 유닛을 포함한다. 각각의 텐서 상태 엘리먼트들(122) 각각은 저장 엘리먼트, 예를 들어 레지스터 또는 임의의 다른 적절한 저장 회로일 수 있다. 일부 구현예에서, 텐서 상태 엘리먼트들(122)은 물리적으로 또는 논리적으로 상이한 그룹으로 구성될 수 있다.
일부 구현예에서, 텐서 상태 엘리먼트들(122)의 그룹은 물리적으로 또는 논리적으로 다차원 어레이로 구성될 수 있다. 예를 들면, 텐서 상태 엘리먼트들(122)의 각 그룹은 물리적으로 또는 논리적으로 2차원 어레이로 구성될 수 있다. 산술 논리 유닛은 산술 및 논리 연산들을 수행하도록 구성된 하나 이상의 산술 논리 유닛들(ALU)을 포함한다. 예를 들어, 산술 논리 유닛은 덧셈, 뺄셈, 곱셈, 나눗셈, 논리 AND, 논리 OR 또는 임의의 다른 적절한 산술 및 논리 연산을 수행하도록 구성된 디지털 회로를 포함할 수 있다.
도 2는 텐서 순회 유닛의 텐서 상태 엘리먼트들(200)의 예시적 세트를 도시한다. 텐서 순회 엘리먼트들(200)은 텐서 순회 유닛(106)의 텐서 상태 엘리먼트들(122)에 대응할 수 있다. 텐서 순회 유닛(200)은 텐서 인덱스 엘리먼트들(202)의 그룹, 텐서 바운드 엘리먼트들(204)의 그룹 및 차원 승수 엘리먼트들(206)의 그룹을 포함한다. 텐서 인덱스 엘리먼트들(202)은 M 행 및 N 열을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 구성될 수 있으며, M 및 N은 1보다 크거나 같은 정수이다. 일부 구현예에서, 텐서 인덱스 엘리먼트들(202)의 각 행은 텐서에 대한 텐서 인덱스 정보를 나타낼 수 있다. 예를 들어, 프로그램이 2 개의 어레이 변수들 V1 및 V2를 정의하면, 텐서 순회 유닛은 어레이 변수들 V1 및 V2 각각에 대한 텐서 인덱스 정보를 추적하기 위해 행들(202a 및 202b)을 할당할 수 있다. 일부 구현예에서, 텐서 인덱스 엘리먼트들(202)의 각 열은 텐서와 연관된 네스팅된 루브 인덱스 변수 값들에 대한 텐서 인덱스 정보를 나타낼 수 있다. 예를 들어, 프로그램이 변수 V1에 액세스하기 위한 3개의 루프들을 갖는 네스팅된 루프를 정의하고, 상기 네스팅된 루프의 각 루프가 네스팅된 루프 인덱스 변수 i, j 및 k에 의해 인덱싱되는 경우, 텐서 순회 유닛은 텐서 인덱스 엘리먼트 X1,1, X1,2 및 X1,3을 할당하여 네스팅된 루프 인덱스 변수 i, j 및 k를 각각 추적한다.
텐서 바운드 엘리먼트들(204)은 텐서 인덱스 엘리먼트들(202)과 동일한 차원들을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 구성될 수 있으며, 텐서 바운드 엘리먼트(204)의 각 엘리먼트는 텐서 인덱스 엘리먼트들(202)에서 대응하는 엘리먼트를 갖는다. 일부 구현예에서, 텐서 바운드 엘리먼트들(204)의 각 행은 텐서에 대한 텐서 바운드 정보를 나타낼 수 있다. 예를 들어, 프로그램이 2 개의 어레이 변수들 V1 및 V2를 정의하면, 텐서 순회 유닛은 어레이 변수들 V1 및 V2 각각에 대한 텐서 바운드 정보를 추적하기 위해 행들(204a 및 204b)을 할당할 수 있다.
차원 승수 엘리먼트들(206)은 텐서 인덱스 엘리먼트들(202)과 동일한 차원들을 갖는 2-D 어레이로서 물리적으로 또는 논리적으로 구성될 수 있으며, 차원 승수 엘리먼트들(206)의 각 엘리먼트는 텐서 인덱스 엘리먼트들(202)에서 대응하는 엘리먼트를 갖는다. 일부 구현예에서, 차원 승수 엘리먼트들(206)의 각 행은 텐서에 대한 차원 승수 정보를 나타낼 수 있다. 예를 들어, 프로그램이 2 개의 어레이 변수들 V1 및 V2를 정의하면, 텐서 순회 유닛은 어레이 변수들 V1 및 V2 각각에 대한 차원 승수 정보를 추적하기 위해 행들(206a 및 206b)을 할당할 수 있다.
일부 구현예에서, 텐서 인덱스 값을 차원 승수에 곱하기 위해 승수를 사용하기보다는, 다른 실시예는 승산 함수 대신에 가산 함수를 활용하는 TTU(106)를 포함할 수 있다. 이들 실시예에서, 프로세싱 유닛(102)은 TTU(106)에 이미 곱해진 수(예를 들어, 특정한 루프의 시작, 종료 및 단계 값들에 대해)를 제공하기 위해 프로그램 코드를 실행할 수 있다.
딥 신경 네트워크들(Deep Neural Networks, DNNs)은 서로 연결되는 다수의 레이어들을 포함한다. 일부 구현예에서, 예시적 신경 네트워크는 다음의 레이어 유형들 중 하나 이상을 포함할 수 있다: 컨벌루션 레이어(예를 들어, 깊이-단위(depth-wise)), 감소 레이어, 완전 연결(FC) 레이어, 분류자 레이어, 엘리먼트-단위 승산 레이어 또는 풀링 레이어(예: 평균 및 최대). 일부 구현예에서, 작은(예를 들어, 1 또는 2) 입력 및 출력 깊이들을 갖는 계산들은 완전히 연결된 레이어 또는 컨벌루션 레이어와 같은 기존 레이어의 속성일 수 있는 얕은(shallow) 커널 속성을 갖는 레이어들과 연관될 수 있다. 일반적으로, 제1 레이어(예를 들어, 컨볼루션 레이어)에 대한 시스템(100) 내에서 발생하는 텐서 계산들은 제1 레이어와 상이한 제2 레이어(예를 들어, 풀링 레이어)에 대한 입력 액티베이션들로서 연속적으로 제공되는 출력 액티베이션들을 생성할 수 있다.
일부 구현예에서, 둘 이상의 컴퓨팅 시스템(100)은 계산 타일들의 세트로서 구성될 수 있다. 이러한 구현예에서, 각 계산 타일은 주어진 레이어에 대한 추론 워크로드들을 프로세싱하는데 필요한 계산들의 일부를 독립적으로 수행한다. 그 다음, 계산들의 결과들은 출력이 필요한 다른 타일로 이동되어 주어진 레이어에 대한 후속 계산을 수행한다. 또한, 신경 네트워크 레이어는 시스템 설계자가 원하는 방식으로 파티셔닝될 수 있고, 계산의 일부가 특정한 레이어 파티션에 대응하도록 각 파티션이 타일에 매핑될 수 있다.
다시 도 1을 참조하면, 일부 구현예에서, 시스템(100)은 명령어(103)를 통해, 주어진 신경 네트워크 레이어에 요구되는 텐서 계산들의 적어도 일부를 수행하기 위해 시스템(100)에 의해 실행되는 다수의 연산들을 인코딩하는 적어도 하나의 명령어를 수신한다. 명령어 및 인코딩된 연산들은 레이어의 유형, 액티베이션 텐서의 구조 및 가중치 텐서의 구조를 특정할 수 있다. 또한, 인코딩된 연산들은 프로세싱 유닛(102)으로 하여금 프로그램 코드를 실행하게 하여 신경 네트워크의 레이어 유형에 의해 적어도 부분적으로 정의되는 루프 네스트 구조를 생성한다. 인코딩된 연산들과 관련하여, 명령어 세트(103)는 텐서 연산(텐서op) 명령어 또는 직접 메모리 액세스 연산(DMAop) 명령어 중 적어도 하나를 포함할 수 있다. 명령어 세트(103)는 또한 동기화 연산, 배리어 연산 및 펜싱 연산(후술됨)과 같은 다양한 연산들을 인코딩하는 하나 이상의 다른 명령어들을 포함할 수 있다.
도 3은 시스템(100)에 의해 적어도 부분적으로 수행되는 연산 코드 및 대응하는 연산들을 포함하는 테이블(300)을 도시한다. 테이블(300)은 연산들(302), 연산들(304) 및 연산들(308)을 포함한다. 테이블(300)에 도시된 바와 같이, 시스템(100)은 예를 들어, 명령어 세트(103)에 의해 제공되는 단일 명령어에 의해 인코딩되는 다수의 연산들을 실행할 수 있다. 일반적으로, 명령어 세트(103)는 특정한 계산 시퀀스에 대해 시스템(100) 내에서 발생할 연산들의 유형을 정의하기 위해 연산 코드를 사용하는 표준화된 구조를 포함할 수 있다. 고유 연산 코드는 특정한 연산 유형에 해당할 수 있다. 일부 구현예에서, 하나 이상의 명령어들 입력 액티베이션들 및 가중치의 형태로 인코딩된 연산들이 신경 네트워크 하드웨어 컴퓨팅 시스템과 연관된 외부 입력/출력(I/O) 디바이스 또는 상위 레벨 제어 디바이스로부터 시스템(100)에 제공된다. 하나 이상의 데이터 버스들이 예시적 I/O 디바이스로부터 또는 하드웨어 컴퓨팅 시스템의 다수의 계산 타일들(예, 다수의 시스템(100)) 간의 명령어들, 액티베이션들 및 가중치들을 통과시키기 위해 사용될 수 있다.
테이블(300)에 도시된 바와 같이, 연산들(302)은 대응하는 연산 코드들을 갖는 하나 이상의 텐서op들을 포함할 수 있는 인코딩된 텐서op들이다. 일부 구현예에서, 단일 명령어 또는 명령어 세트는 특정한 텐서op를 표시하는 연산 코드들의 형태로 인코딩을 정의하는 다수의 서브 명령어들을 포함할 수 있다. 예를 들어, 서브-명령어들은 하나 이상의 계산 타일들에 분산되어, 상기 타일들로 하여금 특정한 신경 네트워크 레이어에 대응하는 계산들을 위해 텐서op들을 수행하게 할 수 있다. 예를 들어, 텐서op 서브 명령어는 컨벌루션, FC, 풀링, 감소 또는 엘리먼트 단위의 승산과 같은 상기 언급된 레이어들 중 적어도 하나에 대한 연산 코드들을 포함할 수 있다. 텐서 서브-명령어는 계산 타일/시스템(100) 내에서 발생하는 모든 텐서 계산들이 텐서op 서브-명령어로부터의 필요한 인코딩들을 갖도록 구성될 수 있다.
일반적으로, 시스템(100) 내에서 발생하는 텐서 계산들은 명령어 세트(103)로부터 수신된 명령어들에 의해 특정된 필요한 인코딩들을 가질 것이다. 다수의 시스템(100)이 계산 타일들의 세트로서 구성된 경우, 텐서 서브-명령어들 및 인코딩들은 상이한 계산 타일들이 상이한 명령어들을 실행하게 할 수 있다. 일부 구현예에서, 상이한 서브-명령어들은 신경 네트워크 레이어의 특정 파티션에 대한 텐서 계산들에 대응할 수 있다. 텐서op 인코딩은 또한 TTU(106)로 하여금 원하는 TTU 텐서op을 표시하는 메인 TTU 루프 네스트 필드를 통해 프로세싱 유닛(102)에 루프 인덱스들을 방출하게 한다. 텐서op 인코딩은 또한 TTU(106)가 주소를 계산하기 위해 어느 카운터들이 가산되는지를 표시하는 TTU 루프 마스크에 기초하여, 특정한 어레이/텐서 엘리먼트에 대한 메모리 주소를 생성할 수 있게 한다. 텐서op 인코딩은 또한 입력 액티베이션 텐서, 가중치 텐서 및 출력 액티베이션 텐서를 순회하기 위해, 프로세싱 유닛(102)에 의해 실행 가능한 다수의 TTU 루프 네스트 명령어들 제공할 수 있다.
일부 구현예에서, 2개 이상의 계산 시스템(100)이 계산 타일들의 세트로서 구성된 경우, 각 계산 타일은 독립적으로 명령어들을 실행하는 자립형 유닛일 수 있다. 일반적으로, 계산 타일은 2개의 유형의 연산들 텐서op들 및 DMAop들을 정의하는 명령어들을 실행한다. 일부 구현예에서, 상이한 연산들은 동기화 플래그를 통해 데이터를 동기화하는 계산 시스템(100) 내의 독립적 제어 유닛에 의해 실행될 수 있다. 그러나, 제어 유닛들이 독립적이지만, 유지되어야 할 종속성이 있을 수 있다. 예를 들어, 저장 매체(104)의 메모리 위치에서 루프 네스트에 의해 필요한 데이터를 가지지 않는 한, 텐서op들은 루프 네스트의 루프를 실행하지 않아야 한다. 요구되는 데이터는 DMAop 또는 다른 연산에 의해 저장 매체(104)에 배치될 수 있다.
일반적으로, 시스템(100) 내의 데이터 동기화는 동기화 플래그 연산들을 통해 발생한다. 일부 구현예에서, 시스템(100)은 가상 기록 포트마다 동기화 플래그 엔트리를 포함하는 레지스터 파일을 가질 것이다. 예를 들어, 텐서op는 부분합들(제2 뱅크(114)에 기록됨) 및 액티베이션들(제1 뱅크(112)에 기록됨)일 수 있는 2개 이상의 텐서 참조들을 가질 수 있다. 이 구현예에서, 각 부분합 및 액티베이션에 대한 동기화 플래그 레지스터가 있을 수 있다. 또한, 주어진 명령어 세트의 실행 중에, 프로세싱 유닛(102)은 특정한 동기화 플래그 레지스터에 대한 증가를 트리거 할 텐서 참조의 차원을 선택할 수 있다. 또한, 프로세싱 유닛(102)은 선택된 동기화 플래그 레지스터들에서 필요한 카운트를 대기할 루프 네스트의 깊이를 선택할 수 있다. 이는 데이터 종속성이 위반되지 않게 한다. 또한, 선택된 동기화 플래그 레지스터들에서 필요한 동기화 플래그 카운트들에 아직 도달하지 않은 경우, 하나 이상의 스레드들이 정지할 것이다.
예를 들어, 텐서op 인코딩은 하나 이상의 동기화 플래그 조건에 기초하여 루프 네스트를 정지하게 할 수 있다. 일부 구현예에서, TTU(106)는 다음 조건들로 인해 정지될 수 있다: 1) 미리 결정된 동기화 플래그 조건이 충족되지 않음(예를 들어, 동기화 플래그 카운트가 임계 카운트보다 크지 않다); 또는 2)명령어 파이프라인의 특정한 단계에서 검출된 위험이 있음. 추가적으로, 텐서op 인코딩은 MAC 연산자(108)로 하여금 원하는 비트 폭의 특정한 데이터 값(예를 들어, 액티베이션 또는 가중치)을 수신하게 할 뿐만 아니라 액티베이션 유닛(110)에 의해 수행될 원하는 기능을 선택하게 하도록 구성된다.
텐서op 인코딩에 의해 정의된 동기화 플래그 조건은 시스템(100)의 프로세싱 유닛(102)으로 하여금 동기화 감시자 연산 및 동기화 생성자 연산 중 적어도 하나를 실행하게 할 수 있다. 프로세싱 유닛(102)에 의한 텐서op의 실행 동안, 동기화 감시자 연산은 프로세싱 유닛(102)에 어떤 루프 반복을 동기화할 지, 루프가 반복되기 전에 요구되는 동기화 플래그 카운트 및 다음 반복을 위해 예상되는 동기화를 얼마나 증가시킬지를 표시하는데 사용될 수 있다.
테이블(300)에 의해 도시된 바와 같이, 인코딩된 직접 메모리 액세스 연산 명령어들은 하나 이상의 DMAop들을 포함할 수 있다. 명령어 세트(103)에 의해 특정된 DMA 연산들은 프로세싱 유닛(102)으로 하여금 시스템(100)에 의한 특정 텐서op의 성능을 달성하는데 필요한 데이터를 이동하게 한다. 일부 구현예에서, 데이터가 동등하지 않는 폭의 2개의 메모리 리소스들(예를 들어, 넓은 메모리 유닛 및 좁은 메모리 유닛) 사이에서 이동되는 경우, 데이터의 전송 크기는 보다 넓은 리소스의 배수이어야 한다. 예를 들어, 넓은 메모리(W-mem)로부터/넓은 메모리에 데이터를 이동시키는 DMAop을 고려할 때, 전송 크기는 넓은 메모리 폭의 배수이어야만 한다. 예를 들어, 좁은 메모리(N-mem)로부터/좁은 메모리에 데이터를 이동시키는 DMAop의 경우, 데이터의 전송 크기는 좁은 메모리 폭의 배수이어야만 한다.
메모리 유닛의 속성을 기술하기 위해 명세서 전반에 걸쳐 사용되는 넓고 좁은의 명칭은 일반적으로 하나 이상의 메모리 유닛들의 폭(비트/바이트)의 대략적인 크기를 지칭한다. 일부 구현예에서, 제1 뱅크(112)의 메모리 폭 및 제2 뱅크(114)의 메모리 폭은 예를 들어, 16 비트와 같은 특정 비트 수에 의해 정의되지 않는다. 일반적으로, 시스템(100)의 각 인스턴스화에서 2개의 상이한 유형의 메모리가 있으며, “좁은/넓은”은 메모리의 특성을 표시하는데 사용되는 상대적인 용어이며 절대적이지 않다. 일부 예시적 구현예에서, 제1 뱅크 (112)는 하나 이상의 좁은 메모리 유닛들을 포함하고 제2 뱅크(114)는 하나 이상의 넓은 메모리 유닛들을 포함한다.
상기 기술된 바와 같이, 시스템(100)에 의해 수신되고 프로세싱 유닛(102)에 의해 실행되는 명령어들은 텐서op 명령어 및 DMAop 명령어를 포함할 수 있다. 수신된 명령어들은 프로세싱 유닛(102)에 의한 실행 이전에 명령어 버퍼(124)에 저장될 수 있다. 테이블(300)에 도시된 바와 같이, 동작들(304)은 다음을 포함하는 명령 서브유형들을 포함할 수있는 DMA 연산들(예를 들어, 버퍼 위치에 '쓰기' 지시)이다: 1)인바운드 명령어 버퍼; 2)아웃바운드 명령어 버퍼; 3)좁은-넓은 DMA 명령어 버퍼; 4)넓은-좁은 DMA 명령어 버퍼; 및 5)링 버스 DMA 명령어 버퍼.
이제 테이블(300)을 참조하면, 프로세싱 유닛(102)에 의한 DMAop.in 연산의 실행은 시스템(100)으로 하여금 명령어 세트(103)로부터 (예시적 데이터 버스를 통해) 입력 액티베이션들 및 다른 데이터를 수신하고 제1 뱅크(112)에 상기 액티베이션들을 저장하게 한다. 아래에 더 자세히 기술될 바와 같이, 입력 액티베이션들은 액티베이션 텐서의 각각의 엘리먼트들에 대응하는 메모리 주소 위치들에서 제1 뱅크(112)에 저장된다. 프로세싱 유닛(102)에 의한 DMAop.out 연산의 실행은 시스템(100)으로 하여금 제1 뱅크(112)로부터 데이터(예를 들어, 출력 액티베이션들)를 판독하고 시스템(100)으로부터 데이터를 출력하기 위해 예시적 데이터 버스에 데이터를 기록하게 한다. 프로세싱 유닛(102)은 제1 뱅크(112)(좁은 메모리)로부터 제2 뱅크(114)(넓은 메모리)로 데이터를 이동시키기 위해 DMAop.N-W 연산을 실행할 수 있다. 프로세싱 유닛(102)은 제2 뱅크(114)(넓은 메모리)로부터 제1 뱅크(112)(좁은 메모리)로 데이터를 이동시키기 위해 DMAop.W-N 연산을 실행할 수 있다.
프로세싱 유닛(102)은 DMAop.R-bus 연산을 실행하여 명령어 세트 (103)로부터 (예시적 데이터 버스를 통해) 데이터를 검색한 후, 제2 뱅크(114)에 데이터 (예를 들어, 가중치들/ 파라미터들)를 기록할 수 있다. 또한 DMAop.R-bus 연산의 실행은 프로세싱 유닛(102)으로 하여금 제2 뱅크(114)의 메모리 주소 위치들에 저장된 데이터(예를 들어, 가중치들)를 판독/액세스하고 데이터를 예시적 데이터 버스에 기록하여, 데이터가 시스템(100)으로부터의 출력일 수 있도록 한다. 일부 구현예에서, 예시적 데이터 버스는 링 구조로 다수의 계산 시스템(100)을 연결하는 링 버스이다. 다수의 시스템들(100)을 링으로 연결하는 것에 더하여, 링 버스는 다수의 시스템들(100)을 외부 I/O 디바이스 또는 고레벨 제어 디바이스에 연결할 수 있다. 계산 타일들을 연결하기 위한 데이터 버스 옵션들을 포함하는 신경 네트워크 텐서 계산들을 가속하기 위한 하드웨어 컴퓨팅 시스템과 관련된 추가적 세부사항들 및 설명들은 2016년 10월 27일 출원된 미국 특허출원 제15/335,769호 "신경 네트워크 계산 타일"에 기술되어 있다.
일부 구현예에서, 주어진 계산 타일 세트에 대해, 계산 타일들의 세트 중 적어도 하나의 계산 타일은 분류자(classifier) 타일일 수 있다. 분류자 타일은 신경 네트워크의 특정한 레이어 대해 발생된 텐서 계산과 연관된 데이터 값들에 함수를 적용하도록 구성될 수 있다. 예를 들어, FC 레이어는 타일들을 가로질러 파티션화될 수 있으므로, 각 타일은 출력들의 서브셋을 생성하고 그 출력을 제2 뱅크(114)에 저장한다. 일반적으로, DMAop은 제1 계산 타일로부터 그리고 데이터 링 버스를 통해, 제2 메모리(114)의 메모리 주소 위치들로부터 제2 타일(예를 들어, 분류자 타일)로의 선형 출력을 이동시키는데 사용될 수 있다. 분류자 타일은 적어도 하나의 함수(예: softmax 함수)를 각 선형 출력에 적용하여, 함수-이후 결과를 고레벨 제어 디바이스 또는 외부 I/O 디바이스에 제공한다.
테이블(300)을 다시 참조하면, 일부 구현예에서, DMAop.infeed 및 DMAop.outfeed는 외부 제어기 디바이스 및 시스템(100) 둘 모두와 연관된 연산들에 대응한다. 일반적으로, DMAop.infeed 연산은 외부 제어기에서 개시하여, 상기 제어기로 하여금 입력 액티베이션들 및 가중치들 둘 모두를 예시적 데이터 버스(예: 링 버스)에 제공하게 한다. 데이터 버스는 멀티 타일 구성에서 어떤 계산 타일이 액티베이션들 및 가중치들을 소비해야하는지를 나타내는 데이터 스트림(예: 비트 맵)을 멀티 캐스트하도록 구성될 수 있다. 따라서, 특정한 수신 타일의 프로세싱 유닛(102)은 외부 제어기로부터 계산 타일(시스템(100))의 메모리 뱅크들로 액티베이션들 및 가중치들/파라미터들을 이동시키는 DMAop.infeed 연산의 일부를 실행할 수 있다. 유사하게, 일부 구현예에서, 프로세싱 유닛(102)은 계산 타일의 메모리 뱅크들(112, 114)로부터 예시적 추론 워크로드의 결과(출력들)을 분류자 타일로, 그리고 상기 분류자 타일로부터 외부 제어기로 이동시키는 DMAop.outfeed 연산의 일부를 실행할 수 있다. 또한, 외부 제어기는 DMAop.outfeed 연산의 일부를 실행하여 추론 워크로드 결과를 예시적 외부 I/O 디바이스로 이동시킬 수 있다.
연산들(306)은 시스템(100)에 의해 다른 연산들이 실행되는 동안 새로운 명령어들의 발행을 관리하기 위해 프로세싱 유닛(102)에 의해 실행될 수 있는 tilefenceop 및 scalarfenceop 연산들이다. 프로세싱 유닛(102)에 의한 tilefenceop 명령어의 실행은 시스템(100)으로 하여금 시스템(100)의 각각의 명령어 버퍼 내의 모든 계류중인 명령어들이 완료될 때까지 시스템(100)에 임의의 새로운 명령어들을 발행되는 것을 차단 또는 방지하게 한다. 추가적으로, scalarfenceop 명령어는 tilefenceop 명령어와 협력하여 새로운 명령어들의 발행을 배제하고, 계류 중인 명령어들은 프로세싱 유닛(102)에 의해 실행된다. 예를 들어, tilefenceop 명령어는 프로세싱 유닛(102)으로 하여금 tilefenceop과 연관된 동기화 플래그 카운트 메트릭을 모니터링하게 할 수 있다. 프로세싱 유닛(102)은 임계 tilefenceop 카운트 메트릭에 도달될 때까지 새로운 명령어들의 발행을 방지하기 위해 scalarfenceop 명령어를 실행할 수 있다.
도 4a는 예시적 입력 액티베이션 텐서(404), 예시적 가중치 텐서(406) 및 예시적 출력 텐서(408)를 도시한다. 도 4b는 내적(dot product) 계산 및 행렬 승산에 관한 텐서 계산들을 수행하기 위해 프로세싱 유닛(102)에 의해 실행될 수 있는 예시적 딥 루프 네스트(402)를 도시한다. 도 4a에서, 계산들은 출력 텐서(408)의 형태로 출력/결과를 생성하기 위해 하나 이상의 계산 사이클에서 파라미터/가중치 텐서(406)와 액티베이션 텐서(404)의 승산(곱셈)을 포함할 수 있다.
각 텐서(404, 406, 408)는 x, y 및 z 차원 평면에 걸쳐 행-열 포맷으로 구성된 다수의 데이터 엘리먼트들을 포함할 수 있다. 액티베이션들은 액티베이션 텐서(404)의 엘리먼트들에 대응하는 제1 뱅크(112)의 각각의 메모리 주소 위치들로부터 판독될 수 있다. 마찬가지로, 가중치들은 가중치 텐서의 엘리먼트들에 대응하는 각각의 메모리 주소 위치들에서 제2 뱅크(114)로부터 판독될 수 있다. 일부 구현예에서, 프로세싱 유닛(102)은 TTU(106)로 하여금 액티베이션 텐서(404) 및 가중치 텐서(406)의 각각의 엘리먼트들에 대응하는 메모리 주소 위치들에 액세스하게 하는 네스팅된 루프 프로그램을 위해 저장 매체(104)(예를 들어, ROM/EEPROM 메모리 유닛들)의 특정 메모리 유닛들에 저장된 프로그램 코드를 실행할 수 있다. 프로세싱 유닛(102)은 부분적으로 주어진 차원에 대한 텐서 엘리먼트들을 순회하는 복수의 루프들을 인스턴스화하기 위해 루프 네스트 프로그램을 실행함으로써 하나 이상의 텐서 계산들을 수행할 수 있다.
TTU(106)가 액티베이션 텐서(404) 및 가중치 텐서(406)를 순회함에 따라, 텐서(404)의 x-차원 데이터 엘리먼트로부터의 단일 액티베이션을 포함하는 승산 연산들은 예를 들어, 특정한 가중치 텐서(406)의 kx-차원에서 가중치 행(다수의 데이터 엘리먼트)과 개별적으로 승산된다. 이러한 승산 연산들은 출력 텐서(408)의 zo 차원에서 제1 x행에 대응하는 출력 행을 생성할 수 있다. 일반적으로, MAC 연산자(108)는 내적(dot product) 계산에 관련된 산술 연산을 포함하는 텐서 계산들을 실행할 수 있다. 입력 액티베이션들은 제1 뱅크(112)로부터 하나의 MAC 연산자(108)에 의한 각각의 액세스를 위해 하나씩 제공된다. MAC 연산자(108)는 제2 뱅크(114)로부터 액세스된 가중치와 입력 액티베이션을 곱하여 출력 텐서(408)의 각 데이터 엘리먼트에 대응하는 단일 출력 액티베이션 값을 생성한다.
도 4b에서, 예시적 딥 루프 네스트(402)가 도시되어 있으며, 가장 안쪽 루프(zo)에서의 MAC 연산을 포함한다. 액티베이션 텐서(404)에 대응하는 입력 차원은 [x, y, zi]로 표시되고, 가중치 텐서(406)에 대응하는 필터 차원은 [x, y, zi, zo]로 표시되고, 출력 텐서(408)에 대응하는 출력 차원은 [x, y, zo]로 표시된다. 따라서, 딥 루프 네스트(402)는 텐서들(404, 406)의 다양한 차원에 걸친 계산에 기초하여 출력 [x][y][zo]로 표시되는 출력 텐서(408)를 특정한다. 일반적으로, 딥 루프 네스트(402)는 시스템(100)에 의해 실행될 수 있는 소프트웨어 알고리즘을 제공하여 N 차원 텐서를 순회하는 네스팅된 루프를 프로세싱함으로써 텐서 계산을 수행한다. 일 예시적 계산 프로세스에서, 각 루프는 대응하는 N 차원 텐서의 특정한 차원을 순회하는 역할을 할 수 있다. 따라서, 딥 루프 네스트(402)는 다수의 계산 타일들 내에서 동시적으로 수행될 수 있는 하나 이상의 텐서 계산의 표현을 제공한다.
대안적 구현예에서, 출력 텐서(408)의 변형을 생성하는 딥 루프 네스트(402)의 다른 순서가 있을 수 있다. 시스템(100)은 임의의 순서로 액티베이션 텐서(404) 및 가중치 텐서(406)를 순회하게 하는 데이터 값의 범위를 포함하는 딥 루프 네스트(402)를 인스턴스화하기 위한 명령어들을 수신할 수 있다. 하나 이상의 루프들은 시스템(100)에서 공간적으로 전개될 수 있다. 일부 구현예에서, xx 및 yy 루프 네스트들은 하나 이상의 계산 타일들에 걸쳐 전개될 수 있으므로, 상이한 계산 타일들이 상이한 레이어 파티션들과 연관된 추론 워크로드들을 프로세싱할 수 있다. 예시적 딥 루프 네스트(402)에서, 매 사이클마다 액티베이션 판독 및 매 zi * kx * ky 사이클마다 부분 합 판독이 있을 수 있다.
루프 네스트의 구조(예를 들어, 내부 및 외부 루프의 수)는 명령어 세트(103)를 통해 시스템(100)에 제공되는 명령어들의 하나 이상의 데이터 값들에 기초하여 정의될 수 있다. 컨벌루션 레이어 내에서 발생하는 예시적 계산들은 주어진 레이어에 대한 추론 워크로드들을 계산하기 위한 연산들을 인코딩하는 명령어의 실행을 설명하기 위한 기초로 사용될 수 있다. 컨벌루션 레이어 계산들은은 3차원(3D) 텐서의 2차원(2D) 공간 컨벌루션을 포함할 수 있다. 컨볼루션 레이어에 대한 계산은 3D 액티베이션 텐서(404)와 적어도 하나의 3D 필터(가중치 텐서(406)) 사이의 2D 공간 컨벌루션을 수행하는 것을 포함할 수 있다.
이 계산을 위해, 깊이 차원에 따른 내적의 합이 있을 것이다. 3D 입력에 대해 하나의 3D 필터(406)를 컨벌루션화하는 것은 2D 공간 평면을 생성한다. 도시된 바와 같이, 3D 입력 텐서(404)가 컨벌루션화될 필요가 있는 다수의 3D 필터가 존재할 수 있다. 계산들은 3D 텐서 출력(408)을 결과로 할 것이다. 컨벌루션 레이어에 대한 계산들이 기술되었지만, 다른 신경 네트워크 레이어들에 대한 계산 연산들을 인코딩하는 하나 이상의 명령어들도 본 명세서에 설명된 내용에 기초하여 생성될 수 있다.
일반적으로, 단일 계산 타일이 다수의 MAC 연산자(108)를 포함하는 경우, 연산자들은 그들 각각의 계산들을 수행하기 위해 단일 액티베이션 입력을 각각 공유함으로써 SIMD(single instruction multiple data) 기능을 집합적으로 제공한다. SIMD는 일반적으로 모든 병렬 유닛들(단일 시스템(100) 내의 다수의 MAC 연산자(108))이 동일한 명령어(딥 루프 네스트에 기초함)를 공유하지만, 각 MAC 연산자(108)는 텐서(404 및 406)의 상이한 데이터 엘리먼트에 대해 명령어를 실행하는 것을 의미한다. 하나의 기본 예시에서, 한 사이클에서 어레이[6,8,10,12]를 얻기 위해 어레이[1,2,3,4] 및 [5,6,7,8]을 엘리먼트 단위로 더하는 것은 일반적으로 각 엘리먼트에 대한 연산을 실행하는 4개의 산술 유닛들을 요구한다. SIMD를 사용하면, 4개의 유닛들이 동일한 명령어(예: "더하기")를 공유하고 병렬로 계산을 수행할 수 있다. 루프 네스트의 형태로 tensorop들을 인코딩하는 단일 명령어는 다차원 텐서들의 특정 데이터 엘리먼트와 연관된 추론 워크로드들을 계산하기 위해 하나 이상의 시스템들(100)에 제공될 수 있다. 따라서, 시스템(100)은 종래의 방법에 비해 텐서 계산에서 향상된 가속 및 병렬성을 제공한다.
시스템(100)의 가속 기능은 적어도 2가지 유형의 병렬 처리에 대응한다. 첫 번째 유형의 병렬 처리는 딥 네스트 루프(402)의 가장 안쪽 루프의 공간적 전개를 통해 노출된다. 시스템(100)은 SIMD 기능을 포함하기 때문에, 딥 루프 네스트(402)의 가장 안쪽 루프 바운드는 선형 유닛(예를 들어, 다수의 MAC들의 셀)의 MAC 연산자(108)의 수에 고정될 수 있다. 병렬 처리의 제2 양태는, 각각 딥 루프 네스트(402)를 실행하지만, 특정한 신경 네트워크 레이어에 대한 상이한 부분의 텐서 계산을 수행하는 다수의 계산 타일들을 갖는 구성에 의해 노출된다. 각 타일 내에 구성가능한 수의 MAC 연산자들과 함께 구성가능한 수의 타일들의 수가 가속기 디바이스에 있을 수 있다.
일부 구현예에서, 프로그래머 또는 개발자는 예를 들어 액티베이션 입력 대역폭을 줄이고 부분 합계 판독 대역폭을 증가시키기 위해 특정한 루프 네스트를 세부적으로 선택하거나 구성할 수 있다. 이는 대안적인 방식으로 딥 루프 네스트(402)를 작성하거나 구성함으로써 수행될 수 있다. 텐서 계산을 가속화하기 위해 본 명세서에서 설명된 딥 루프 네스트들은 매우 유연하며, 특정한 문제 세트에 맞게 원하는대로 구성될 수 있다. 본 명세서에서 설명된 신경 네트워크 및 계산 타일(시스템(100))은 최대 8개의 딥 루프 네스트 계산 구조를 지원할 수 있으므로, 개발자가 원하는대로 입력 및 출력이 타일링될 수 있으므로, 로컬성을 최대한 활용하고 전반적인 대역폭 요구사항을 감소시킬 수 있다.
도 5는 명령어들에 의해 인코딩된 하나 이상의 연산들을 실행하기 위해 컴퓨팅 시스템(100)을 사용함으로써 텐서 계산들을 수행하기 위한 예시적 프로세스(500)를 나타내는 흐름도이다. 블록(502)에서, 프로세싱 유닛(102)은 시스템(100)에서 텐서 계산들을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신한다. 블록(504)에서, 명령어 수신에 응답하여, 프로세싱 유닛(102)은 다수의 루프들을 포함하는 루프 네스트를 실행함으로써 텐서 계산들을 수행한다. 전술한 바와 같이, 프로세싱 유닛(102)은 네스팅된 루프 프로그램에 대한 프로그램 코드를 실행하기 위해(명령어 세트(103)와 연관된 명령어들과 구별되는) 명령어들에 액세스할 수 있다. 그 다음, 프로세싱 유닛(102)은 TTU(106)로 하여금 액티베이션 텐서(404) 및 가중치 텐서(406)의 각각의 엘리먼트에 대응하는 메모리 주소 위치들에 액세스하게 하는 프로그램 코드를 실행할 수 있다.
블럭(506)에서, 루프 네스트가 레이어 유형에 기초하여 정의된 구조를 갖는 구현예에 대해, 명령어 세트(103)는 레이어 유형 및 레이어에 대한 루프 네스트 구조를 나타내는 특정 데이터 값들(예를 들어, 하나 이상의 op코드들)을 포함할 수 있다. 예를 들어, 도 3의 연산(302)에 표시된 바와 같이, 명령어 세트(103)는 컨벌루션 및 FC 레이어들(예를 들어, opcode 0)에 대한 텐서 계산을 위한 tensorop들에 대응하는 하나 이상의 op코드들을 포함할 수 있다. 따라서, 명령어 세트(103)에 의해 제공된 tensorop 명령어와 연관된 데이터 값들을 사용하여, 프로세싱 유닛(102)은 명령어의 데이터 값에 기초하여 루프 네스트 구조를 정의할 수 있다. 일단 루프 네스트 구조가 정의되면, 프로세싱 유닛(102)은 부분적으로 루프 네스트 프로그램을 실행하여 액티베이션 텐서(404) 및 가중치 텐서(406)의 주어진 차원에 대한 텐서 엘리먼트들을 순회하는 루프를 인스턴스화함으로써 하나 이상의 텐서 계산들을 수행한다.
블록(508)에서, 프로세싱 유닛(102)은 개별 출력 액티베이션(116)들이 출력 텐서(408)의 각각의 데이터 엘리먼트에 기록되게 한다. 추가적으로, 블록(508)에서, 프로세싱 유닛(102)은 DMAop.outfeed 연산을 실행하여 텐서 계산의 결과가 후속하는 텐서 계산을 위해 하나 이상의 다른 계산 타일에 기록되도록 할 수 있다. 대안적으로, DMAop.outfeed 연산은 추론 워크로드의 결과(출력)를 제1 계산 타일의 메모리 뱅크들(112,114)로부터 분류자 타일(예를 들어, 제2 계산 타일)로, 그리고 상기 분류자 타일로부터 외부 제어기 및 외부 I/O 디바이스로 이동시킬 수 있다.
본 발명의 실시예들과 본 명세서에 기술된 기능적 동작들은 본 발명에 개시된 구조들 및 그들의 구조적 균등물들 또는 그들 중 하나 이상의 조합들을 포함하는, 디지털 전자회로에서, 유형적으로 수록된 컴퓨터 소프트웨어 또는 펌웨어에서, 컴퓨터 하드웨어에서 구현될 수 있다. 본 명세서에 기술된 본 발명의 실시예들은 하나 이상의 컴퓨터 프로그램들로서 구현될 수 있다. 즉, 데이터 프로세싱 장치에 의해 실행 또는 데이터 프로세싱 장치의 동작을 제어하기 위한 유형적 비일시적인 프로그램 캐리어에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈들. 대안적으로 또는 추가로, 프로그램 명령어들은 데이터 프로세싱 장치에 의해 실행하기 위한 적절한 수신기 장치에 전송하기 위한 정보를 인코딩하기 위해 생성된 인공적으로 생성된 전파된 신호 즉, 기계-생성 전기, 광학 또느전자기적 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독가능 저장 디바이스, 기계 판독가능 저장 기판, 랜덤 또는 직렬 엑세스 메모리 디바이스 또는 그들 중 하나 이상의 조합일 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 어플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드로도 참조되거나 기술될 수 있음)은 컴파일된 또는 인터프리트된 언어들, 또는 선언적 또는 절차적 언어들을 포함하는 임의의 형태의 프로그래밍 언어로 작성될 수 있으며, 독립 실행형 프로그램으로서 또는 모듈, 컴포넌트, 서브루틴으로서 또는 컴퓨팅 환경에서 사용하기에 적합한 기타 단위를 포함하는 임의의 형태로 배포될 수 있다. 컴퓨터 프로그램은 파일 시스템의 파일에 대응할 수 있지만, 반드시 그런 것은 아니다. 프로그램은 다른 프로그램들이나 데이터, 예를 들어, 마크업 언어 문서에 저장된 하나 이상의 스크립트들을 가지는 파일의 부분에, 문제되는 프로그램 전용 단일의 파일에 또는 다수의 조정된 파일들, 예를 들어, 하나 이상의 모듈들, 서브프로그램 또는 코드의 일부를 저장하는 파일들에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 하나의 사이트에 위치되어 있거나 다수의 사이트들에 걸쳐서 분산되어 있고 통신 네트워크에 의해 상호연결된 다수의 컴퓨터들에서 실행되도록 배포될 수 있다.
본 명세서에 기술된 프로세스들 및 논리 흐름들은 입력 데이터를 동작하고 출력을 생성함으로써 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그래머블 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 논리 흐름들은 또한 FPGA(field programmable gate array), ASIC(application specific integrated circuit), GPGPU(General purpose graphics processing unit)와 같은 특수 목적 논리 회로 또는 일부 다른 유형의 프로세서에 의해 수행될 수 있고, 장치는 또한 특수 목적 논리 회로 또는 일부 다른 유형의 프로세서로서 구현될 수 있다.
컴퓨터 프로그램의 실행에 적절한 컴퓨터들은 예시로서, 일반적 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 기타 종류의 중앙 프로세싱 유닛을 포함하거나 이에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 읽기-전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 엘리먼트들은 명령어들을 수행하거나 실행하기 위한 중앙 프로세싱 유닛 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대형 저장 디바이스들 예를 들면, 자기적, 자기-광학 디스크들 또는 광학적 디스크들 또한 포함하거나 또는 그로부터 데이터를 수신하거나 그에 데이터를 전송하기 위해 동작적으로 결합될 수 있다. 그러나, 컴퓨터는 상기 디바이스들을 반드시 가져야하는 것은 아니다. 추가로, 컴퓨터는 다른 디바이스, 예를 들어, 몇 가지만 나열하면, 모바일 전화, 개인 휴대 정보 단말기(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS 수신기 또는 휴대용 저장 디바이스 예를 들어, 범용 직렬 버스 (USB) 플래시 드라이브에 내장될 수 있다.
컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체는 예를 들어, EPROM, EEPROM 및 플래시 메모리 디바이스들과 같은 반도체 메모리 디바이스들; 예를 들어, 내부 하드 디스크들 또는 이동식 디스크들과 같은 자기 디스크들; 및 CD-ROM 및 DVD-ROM 디스크들을 포함하는 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 논리 회로에 의해 보충되거나 그 안에 통합될 수 있다.
본 명세서에서 기술된 발명의 실시예는 예를 들어 데이터 서버와 같은 백엔드 컴포넌트, 애플리케이션 서버와 같은 미들웨어 컴포넌트 또는 그래픽 사용자 인터페이스를 가지는 사용자 컴퓨터 또는 사용자가 본 명세서에 기술된 본 발명의 구현예와 인터렉션할 수 있는 웹 브라우저와 같은 프론트엔드 컴포넌트 또는 하나 이상의 상기 백엔드, 미들웨어 또는 프론트엔드 컴포넌트들의 임의의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트들은 디지털 데이터 통신의 임의의 형태 또는 매체, 예를 들어 통신 네트워크에 의해 상호연결될 수 있다. 통신 네트워크들의 예시들은 LAN(local area network) 및 WAN(wide area network) 예를 들어, 인터넷을 포함한다.
컴퓨팅 시스템은 사용자들 및 서버들을 포함할 수 있다. 사용자와 서버는 일반적으로 서로 멀리 떨어져 있으며, 일반적으로 통신 네트워크를 통해 인터렉션한다. 사용자와 서버의 관계는 각각의 컴퓨터에서 실행되고 서로 사용자-서버 관계를 갖는 컴퓨터 프로그램에 의해 발생한다.
추가적 구현예들은 다음 예시들에 요약되어 있다.
예시 1: 컴퓨터로 구현되는 방법으로서, 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 단계; 및 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 방법.
예시 2: 예시 1에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 방법.
예시 3: 예시 2에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 방법.
예시 4: 예시 2에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 방법.
예시 5: 예시 2에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 저장 매체의 어레이의 적어도 하나의 메모리 주소에 액세스하게 하고, 상기 어레이의 상기 메모리 주소는 상기 텐서 계산의 수행 동안에 상기 프로세싱 유닛에 의해 판독되는 변수(variable)를 포함하는 것을 특징으로 하는 방법.
예시 6: 예시 5에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, TTU(tensor traversal unit)가 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 루프 인덱스들을 방출하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 것을 포함하는 것을 특징으로 하는 방법.
예시 7: 예시 5에 있어서, 상기 프로세싱 유닛에 의해, 상기 TTU의 어레이 참조로 하여금 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 참조된 어레이 엘리먼트에 대한 주소를 생성하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
예시 8: 예시 7에 있어서, 상기 명령어는 상기 TTU와 연관된 어레이 참조에 대한 주소를 생성하기 위해 제2 TTU 카운터와 합산된 제1 TTU 카운터를 표시하는 것을 특징으로 하는 방법.
예시 9: 예시 1에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 텐서 계산의 수행과 연관된 하나 이상의 오퍼랜드들을 관리하는 제1 동기화 절차를 실행하는 것을 포함하며, 오퍼랜드를 관리하는 것은 동기화 플래그 조건에 기초하여 하나 이상의 루프 네스트들을 정지(stalling)시키는 것을 포함하는 것을 특징으로 하는 방법.
예시 10: 예시 9에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 루프 네스트의 특성과 연관된 카운터를 증가시키는 것을 관리하는 제2 동기화 절차를 실행하는 것을 포함하는 것을 특징으로 하는 방법.
예시 11: 전자 시스템으로서, 상기 전자 시스템에 배치된 프로세싱 유닛, 상기 프로세싱 유닛은 하나 이상의 프로세싱 디바이스들을 포함하며; 및 동작들을 수행하기 위해 상기 하나 이상의 프로세싱 디바이스들에 의해 실행가능한 명령어들을 저장하는 하나 이상의 기계 판독가능 저장 디바이스들을 포함하며, 상기 동작들은: 상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 전자 시스템.
예시 12: 예시 11에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 전자 시스템.
예시 13: 예시 12에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 전자 시스템.
예시 14: 예시 12 또는 13에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 전자 시스템.
예시 15: 예시 12 또는 13에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 저장 매체의 어레이의 적어도 하나의 메모리 주소에 액세스하게 하고, 상기 어레이의 상기 메모리 주소는 상기 텐서 계산의 수행 동안에 상기 프로세싱 유닛에 의해 판독되는 변수(variable)를 포함하는 것을 특징으로 하는 전자 시스템.
예시 16: 예시 15에 있어서, 상기 텐서 계산을 수행하는 동작은, 상기 프로세싱 유닛에 의해, TTU(tensor traversal unit)가 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 루프 인덱스들을 방출하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 것을 포함하는 것을 특징으로 하는 전자 시스템.
예시 17: 프로세싱 유닛에 의해 실행가능한 명령어들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어들은 실행시 상기 프로세싱 유닛으로 하여금 동작들을 수행하게 하며, 상기 동작들은: 상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및 상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
예시 18:
예시 17에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
예시 19: 예시 18에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
예시 20: 예시 18에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
본 명세서는 많은 특정 구현 세부내용을 포함하지만, 이들은 임의의 발명의 범위 또는 청구될 수 있는 범위에 대한 제한으로서 해석되어서는 안되며, 오히려 특정한 발명의 특정한 실시예에 특정적일 수 있는 구성들에 대한 설명으로 해석되어야 한다. 별개의 실시예의 맥락에서 본 명세서에서 기술되는 일정 구성들은 또한 단일 실시예에서 조합하여 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 기술된 다양한 구성들은 또한 다수의 실시예에서 개별적으로 또는 임의의 적합한 서브 조합으로 구현될 수 있다. 게다가, 구성들은 일정 조합으로 동작하고 심지어 초기적으로 그렇게 청구되는 것으로서 상기에서 기술될 수 있지만, 청구된 조합으로부터의 하나 이상의 구성들은 일부 경우, 조합으로부터 제거될 수 있고, 청구된 조합은 서브 조합 또는 서브 조합의 변형으로 안내될 수 있다.
유사하게, 동작들이 특정한 순서로 도면에서 도시되었지만, 이는 상기 동작들이 도시된 특정한 순서로 또는 시계열적 순서로 수행되어야 함을 요구하는 것으로서 또는 모든 도시된 동작들이 수행되어야 하는 것으로 이해되어서는 안된다. 특정 환경에서, 멀티태스킹과 병렬 프로세싱은 이점이 있다. 게다가, 상기 기술된 실시예에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예에서 그러한 분리가 필요한 것으로서 이해되어서는 안되며, 일반적으로 기술된 프로그램 컴포넌트들 및 시스템들은 단일의 소프트웨어 제품에 함께 통합되거나 다수의 소프트웨어 제품들에 패키징될 수 있다고 이해되어야 한다.
본 발명의 특정한 실시예들이 기술되었다. 다른 실시예들도 다음의 청구항들의 범위 내에 있다. 예를 들면, 청구항들에서 기재된 액션들은 상이한 순서로 수행되고 여전히 원하는 결과들을 달성할 수 있다. 일 예시로서, 첨부 도면들에 도시된 프로세스들은 원하는 결과들을 달성하기 위해 특정한 도시된 순서, 또는 시계열적 순서를 반드시 필요로 하지 않는다. 특정 구현예에서, 멀티태스킹과 병렬 프로세싱은 이점이 있다.
Claims (20)
- 컴퓨터로 구현되는 방법으로서,
프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 단계; 및
상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 단계를 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 방법. - 청구항 1에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 방법.
- 청구항 2에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 방법.
- 청구항 2에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 방법.
- 청구항 2에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 저장 매체의 어레이의 적어도 하나의 메모리 주소에 액세스하게 하고, 상기 어레이의 상기 메모리 주소는 상기 텐서 계산의 수행 동안에 상기 프로세싱 유닛에 의해 판독되는 변수(variable)를 포함하는 것을 특징으로 하는 방법.
- 청구항 5에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, TTU(tensor traversal unit)가 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 루프 인덱스들을 방출하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 것을 포함하는 것을 특징으로 하는 방법.
- 청구항 5에 있어서, 상기 프로세싱 유닛에 의해, 상기 TTU의 어레이 참조(reference)로 하여금 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 참조된 어레이 엘리먼트에 대한 주소를 생성하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 청구항 7에 있어서, 상기 명령어는 상기 TTU와 연관된 어레이 참조에 대한 주소를 생성하기 위해 제2 TTU 카운터와 합산된 제1 TTU 카운터를 표시하는 것을 특징으로 하는 방법.
- 청구항 1에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 텐서 계산의 수행과 연관된 하나 이상의 오퍼랜드들을 관리하는 제1 동기화 절차를 실행하는 것을 포함하며, 오퍼랜드를 관리하는 것은 동기화 플래그 조건에 기초하여 하나 이상의 루프 네스트들을 정지(stalling)시키는 것을 포함하는 것을 특징으로 하는 방법.
- 청구항 9에 있어서, 상기 텐서 계산을 수행하는 단계는, 상기 프로세싱 유닛에 의해, 상기 루프 네스트의 특성과 연관된 카운터를 증가시키는 것을 관리하는 제2 동기화 절차를 실행하는 것을 포함하는 것을 특징으로 하는 방법.
- 전자 시스템으로서,
상기 전자 시스템에 배치된 프로세싱 유닛, 상기 프로세싱 유닛은 하나 이상의 프로세싱 디바이스들을 포함하며; 및
동작들을 수행하기 위해 상기 하나 이상의 프로세싱 디바이스들에 의해 실행가능한 명령어들을 저장하는 하나 이상의 기계 판독가능 저장 디바이스들을 포함하며, 상기 동작들은:
상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및
상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 전자 시스템. - 청구항 11에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 전자 시스템.
- 청구항 12에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 전자 시스템.
- 청구항 12에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 전자 시스템.
- 청구항 12에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 저장 매체의 어레이의 적어도 하나의 메모리 주소에 액세스하게 하고, 상기 어레이의 상기 메모리 주소는 상기 텐서 계산의 수행 동안에 상기 프로세싱 유닛에 의해 판독되는 변수(variable)를 포함하는 것을 특징으로 하는 전자 시스템.
- 청구항 15에 있어서, 상기 텐서 계산을 수행하는 동작은, 상기 프로세싱 유닛에 의해, TTU(tensor traversal unit)가 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용되는 루프 인덱스들을 방출하게 하기 위해 적어도 하나의 제어 신호를 TTU에 제공하는 것을 포함하는 것을 특징으로 하는 전자 시스템.
- 프로세싱 유닛에 의해 실행가능한 명령어들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어들은 실행시 상기 프로세싱 유닛으로 하여금 동작들을 수행하게 하며, 상기 동작들은:
상기 프로세싱 유닛에 의해, 텐서 계산을 수행하기 위한 데이터 값들을 특정하는 명령어를 수신하는 동작; 및
상기 프로세싱 유닛에 의해, 상기 명령어의 수신에 응답하여, 복수의 루프들을 포함하는 루프 네스트를 실행함으로써 상기 텐서 계산을 수행하는 동작을 포함하며, 상기 루프 네스트의 구조는 상기 명령어의 상기 데이터 값들 중 하나 이상에 기초하여 정의되는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체. - 청구항 17에 있어서, 상기 텐서 계산은 신경 네트워크 레이어의 계산의 적어도 일부인 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
- 청구항 18에 있어서, 상기 명령어에 의해 특정된 상기 데이터 값들은 상기 신경 네트워크 레이어의 유형을 특정하는 적어도 하나의 값을 포함하고, 상기 루프 네스트의 구조는 상기 신경 네트워크 레이어의 상기 유형에 의해 적어도 부분적으로 정의되는 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
- 청구항 18에 있어서, 상기 명령어는 상기 프로세싱 유닛으로 하여금 텐서(tensor)의 차원의 적어도 하나의 엘리먼트에 액세스하게 하고, 상기 엘리먼트는 상기 텐서 계산의 수행 동안에 상기 루프 네스트를 실행하는데 사용된 적어도 하나의 인덱스의 일부인 것을 특징으로 하는 비일시적 컴퓨터 판독가능 저장 매체.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020227011447A KR102525080B1 (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/336,216 US9959498B1 (en) | 2016-10-27 | 2016-10-27 | Neural network instruction set architecture |
US15/336,216 | 2016-10-27 | ||
US15/455,685 | 2017-03-10 | ||
US15/455,685 US9836691B1 (en) | 2016-10-27 | 2017-03-10 | Neural network instruction set architecture |
PCT/US2017/049165 WO2018080628A1 (en) | 2016-10-27 | 2017-08-29 | Neural network instruction set architecture |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227011447A Division KR102525080B1 (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190068616A true KR20190068616A (ko) | 2019-06-18 |
KR102385349B1 KR102385349B1 (ko) | 2022-04-11 |
Family
ID=60452227
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227011447A KR102525080B1 (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
KR1020197014904A KR102385349B1 (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
KR1020237013355A KR20230058539A (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227011447A KR102525080B1 (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237013355A KR20230058539A (ko) | 2016-10-27 | 2017-08-29 | 신경 네트워크 명령어 세트 아키텍처 |
Country Status (10)
Country | Link |
---|---|
US (4) | US9959498B1 (ko) |
EP (2) | EP3532996A1 (ko) |
JP (4) | JP6921951B2 (ko) |
KR (3) | KR102525080B1 (ko) |
CN (1) | CN108009627A (ko) |
DE (2) | DE102017120588A1 (ko) |
GB (1) | GB2558980A (ko) |
HK (1) | HK1254701A1 (ko) |
SG (1) | SG11201903631XA (ko) |
WO (1) | WO2018080628A1 (ko) |
Families Citing this family (107)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10175980B2 (en) | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
US9959498B1 (en) | 2016-10-27 | 2018-05-01 | Google Llc | Neural network instruction set architecture |
US10360163B2 (en) | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
EP3998539A1 (en) * | 2016-12-30 | 2022-05-18 | INTEL Corporation | Deep learning hardware |
US9875167B1 (en) | 2017-03-29 | 2018-01-23 | Google Inc. | Distributed hardware tracing |
US10365987B2 (en) | 2017-03-29 | 2019-07-30 | Google Llc | Synchronous hardware event collection |
US10795836B2 (en) * | 2017-04-17 | 2020-10-06 | Microsoft Technology Licensing, Llc | Data processing performance enhancement for neural networks using a virtualized data iterator |
US10684955B2 (en) | 2017-04-21 | 2020-06-16 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access with memory maps based on memory operations |
US11113051B2 (en) * | 2017-04-28 | 2021-09-07 | Tenstorrent Inc. | Processing core with metadata actuated conditional graph execution |
US10817293B2 (en) * | 2017-04-28 | 2020-10-27 | Tenstorrent Inc. | Processing core with metadata actuated conditional graph execution |
US11138494B2 (en) * | 2017-05-02 | 2021-10-05 | International Business Machines Corporation | Storage controller acceleration for neural network training and inference |
US12131250B2 (en) * | 2017-09-29 | 2024-10-29 | Intel Corporation | Inner product convolutional neural network accelerator |
US10565285B2 (en) * | 2017-12-18 | 2020-02-18 | International Business Machines Corporation | Processor and memory transparent convolutional lowering and auto zero padding for deep neural network implementations |
US10747631B2 (en) * | 2018-01-19 | 2020-08-18 | DinoplusAI Holdings Limited | Mission-critical AI processor with record and replay support |
US10373291B1 (en) | 2018-01-31 | 2019-08-06 | Google Llc | Image transformation for machine learning |
US10445638B1 (en) * | 2018-02-28 | 2019-10-15 | Amazon Technologies, Inc. | Restructuring a multi-dimensional array |
US20190318229A1 (en) * | 2018-04-12 | 2019-10-17 | Advanced Micro Devices, Inc. | Method and system for hardware mapping inference pipelines |
US11468145B1 (en) | 2018-04-20 | 2022-10-11 | Perceive Corporation | Storage of input values within core of neural network inference circuit |
US11783167B1 (en) | 2018-04-20 | 2023-10-10 | Perceive Corporation | Data transfer for non-dot product computations on neural network inference circuit |
US11586910B1 (en) | 2018-04-20 | 2023-02-21 | Perceive Corporation | Write cache for neural network inference circuit |
US11049013B1 (en) * | 2018-04-20 | 2021-06-29 | Perceive Corporation | Encoding of weight values stored on neural network inference circuit |
US11531727B1 (en) | 2018-04-20 | 2022-12-20 | Perceive Corporation | Computation of neural network node with large input values |
US11210586B1 (en) | 2018-04-20 | 2021-12-28 | Perceive Corporation | Weight value decoder of neural network inference circuit |
US11222257B1 (en) | 2018-04-20 | 2022-01-11 | Perceive Corporation | Non-dot product computations on neural network inference circuit |
US11568227B1 (en) | 2018-04-20 | 2023-01-31 | Perceive Corporation | Neural network inference circuit read controller with multiple operational modes |
US12093696B1 (en) | 2018-04-20 | 2024-09-17 | Perceive Corporation | Bus for transporting output values of a neural network layer to cores specified by configuration data |
US20190332925A1 (en) * | 2018-04-30 | 2019-10-31 | International Business Machines Corporation | Neural hardware accelerator for parallel and distributed tensor computations |
KR20210006919A (ko) * | 2018-05-08 | 2021-01-19 | 더 가버닝 카운슬 오브 더 유니버시티 오브 토론토 | 신경망 처리 요소 |
US10887182B1 (en) * | 2018-05-10 | 2021-01-05 | Hrl Laboratories, Llc | System and method for pairwise network alignment |
CN110490295B (zh) * | 2018-05-15 | 2022-04-05 | 华为技术有限公司 | 一种数据处理方法及处理装置 |
US11443176B2 (en) * | 2018-05-17 | 2022-09-13 | International Business Machines Corporation | Acceleration of convolutional neural networks on analog arrays |
US11449363B2 (en) * | 2018-05-31 | 2022-09-20 | Neuralmagic Inc. | Systems and methods for improved neural network execution |
US12099912B2 (en) | 2018-06-22 | 2024-09-24 | Samsung Electronics Co., Ltd. | Neural processor |
US11205125B2 (en) | 2018-06-29 | 2021-12-21 | International Business Machines Corporation | Scheduler and simulator for an area-efficient, reconfigurable, energy-efficient, speed-efficient neural network |
US20200019836A1 (en) * | 2018-07-12 | 2020-01-16 | International Business Machines Corporation | Hierarchical parallelism in a network of distributed neural network cores |
US10956315B2 (en) | 2018-07-24 | 2021-03-23 | Micron Technology, Inc. | Memory devices and methods which may facilitate tensor memory access |
US10796225B2 (en) * | 2018-08-03 | 2020-10-06 | Google Llc | Distributing tensor computations across computing devices |
WO2020033898A1 (en) * | 2018-08-09 | 2020-02-13 | Board Of Trustees Of Michigan State University | Systems and methods for providing flexible, multi-capacity models for use of deep neural networks in mobile devices |
CN110825530B (zh) * | 2018-08-10 | 2022-12-23 | 昆仑芯(北京)科技有限公司 | 用于人工智能芯片的指令执行方法和装置 |
CN112732601B (zh) * | 2018-08-28 | 2024-06-18 | 中科寒武纪科技股份有限公司 | 数据预处理方法、装置、计算机设备和存储介质 |
CN112740233B (zh) * | 2018-09-27 | 2024-08-23 | 株式会社索思未来 | 网络量化方法、推理方法以及网络量化装置 |
US11586417B2 (en) * | 2018-09-28 | 2023-02-21 | Qualcomm Incorporated | Exploiting activation sparsity in deep neural networks |
CN112740174B (zh) * | 2018-10-17 | 2024-02-06 | 北京比特大陆科技有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
KR102637733B1 (ko) | 2018-10-31 | 2024-02-19 | 삼성전자주식회사 | 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법 |
US11263011B2 (en) | 2018-11-28 | 2022-03-01 | International Business Machines Corporation | Compound instruction set architecture for a neural inference chip |
US11056098B1 (en) * | 2018-11-28 | 2021-07-06 | Amazon Technologies, Inc. | Silent phonemes for tracking end of speech |
US11995533B1 (en) | 2018-12-05 | 2024-05-28 | Perceive Corporation | Executing replicated neural network layers on inference circuit |
CN111291240B (zh) * | 2018-12-06 | 2023-12-08 | 华为技术有限公司 | 处理数据的方法和数据处理装置 |
CN110033091B (zh) | 2018-12-13 | 2020-09-01 | 阿里巴巴集团控股有限公司 | 一种基于模型进行预测的方法和装置 |
US20200202198A1 (en) * | 2018-12-21 | 2020-06-25 | Waymo Llc | Neural network processor |
CN109670158B (zh) * | 2018-12-27 | 2023-09-29 | 北京及客科技有限公司 | 一种用于根据资讯数据生成文本内容的方法与设备 |
US20200234129A1 (en) * | 2019-01-22 | 2020-07-23 | Nvidia Corporation | Techniques for removing masks from pruned neural networks |
US11347297B1 (en) | 2019-01-23 | 2022-05-31 | Perceive Corporation | Neural network inference circuit employing dynamic memory sleep |
US11961007B2 (en) | 2019-02-06 | 2024-04-16 | Qualcomm Incorporated | Split network acceleration architecture |
CN109902819B (zh) * | 2019-02-12 | 2023-04-18 | Oppo广东移动通信有限公司 | 神经网络计算方法、装置、移动终端及存储介质 |
CN111563587B (zh) * | 2019-02-14 | 2022-12-09 | 上海寒武纪信息科技有限公司 | 一种神经网络模型的拆分方法及相关产品 |
US11748599B2 (en) * | 2019-02-21 | 2023-09-05 | Texas Instruments Incorporated | Super-tiling in neural network processing to enable analytics at lower memory speed |
EP3716154A1 (en) * | 2019-03-27 | 2020-09-30 | GrAl Matter Labs S.A.S. | Neuromorphic processing system and method of operating the same |
CN112347186B (zh) * | 2019-08-09 | 2023-02-28 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN111831337B (zh) * | 2019-04-19 | 2022-11-29 | 安徽寒武纪信息科技有限公司 | 数据同步方法及装置以及相关产品 |
CN110046705B (zh) * | 2019-04-15 | 2022-03-22 | 广州异构智能科技有限公司 | 用于卷积神经网络的装置 |
CN110033085B (zh) * | 2019-04-15 | 2021-08-31 | 广州异构智能科技有限公司 | 张量处理器 |
CN110059805B (zh) * | 2019-04-15 | 2021-08-31 | 广州异构智能科技有限公司 | 用于二值阵列张量处理器的方法 |
CN110033086B (zh) * | 2019-04-15 | 2022-03-22 | 广州异构智能科技有限公司 | 用于神经网络卷积运算的硬件加速器 |
US11671111B2 (en) | 2019-04-17 | 2023-06-06 | Samsung Electronics Co., Ltd. | Hardware channel-parallel data compression/decompression |
US11880760B2 (en) | 2019-05-01 | 2024-01-23 | Samsung Electronics Co., Ltd. | Mixed-precision NPU tile with depth-wise convolution |
CN110147253B (zh) * | 2019-05-16 | 2020-10-20 | 湖南毂梁微电子有限公司 | 一种基于延迟栅栏同步操作指令的多核处理器同步方法 |
CN112395002B (zh) * | 2019-08-14 | 2023-04-18 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN111966401A (zh) * | 2019-05-20 | 2020-11-20 | 上海寒武纪信息科技有限公司 | 指令处理方法、装置及相关产品 |
US11615322B1 (en) | 2019-05-21 | 2023-03-28 | Perceive Corporation | Compiler for implementing memory shutdown for neural network implementation configuration |
KR102192325B1 (ko) * | 2019-06-04 | 2020-12-28 | (주)딥엑스 | 인공신경망의 데이터 로컬리티 기반의 데이터 캐슁을 이용하여 고속의 인공신경망 오퍼레이션을 지원하는 데이터 관리 장치 |
KR102351087B1 (ko) * | 2019-06-04 | 2022-01-14 | 주식회사 딥엑스 | 인공신경망의 데이터 로컬리티 기반의 데이터 캐슁을 이용하여 고속의 인공신경망 오퍼레이션을 지원하는 데이터 관리 장치 |
US11354564B2 (en) * | 2019-06-27 | 2022-06-07 | Intel Corporation | Tuning of loop orders in blocked dense basic linear algebra subroutines |
US11308396B2 (en) * | 2019-06-27 | 2022-04-19 | Amazon Technologies, Inc. | Neural network layer-by-layer debugging |
US20210064987A1 (en) * | 2019-09-03 | 2021-03-04 | Nvidia Corporation | Processor and system to convert tensor operations in machine learning |
US20210081841A1 (en) * | 2019-09-12 | 2021-03-18 | Viani Systems, Inc. | Visually creating and monitoring machine learning models |
US20210103803A1 (en) * | 2019-10-08 | 2021-04-08 | Apple Inc. | Multi-Mode Planar Engine For Neural Processor |
US20210110243A1 (en) * | 2019-10-10 | 2021-04-15 | Hewlett Packard Enterprise Development Lp | Deep learning accelerator system interface |
JP7462140B2 (ja) * | 2019-10-29 | 2024-04-05 | 国立大学法人 熊本大学 | ニューラルネットワーク回路及びニューラルネットワーク演算方法 |
US12112141B2 (en) | 2019-12-12 | 2024-10-08 | Samsung Electronics Co., Ltd. | Accelerating 2D convolutional layer mapping on a dot product architecture |
KR20210093127A (ko) * | 2020-01-17 | 2021-07-27 | 에스케이하이닉스 주식회사 | Aim 장치 |
US11314674B2 (en) | 2020-02-14 | 2022-04-26 | Google Llc | Direct memory access architecture with multi-level multi-striding |
CN113391842B (zh) * | 2020-03-13 | 2024-09-17 | 华为技术有限公司 | 一种单指令多数据simd指令的生成、处理方法以及相关设备 |
US11568249B2 (en) | 2020-04-07 | 2023-01-31 | International Business Machines Corporation | Automated decision making for neural architecture search |
CN111506520B (zh) * | 2020-07-01 | 2020-09-22 | 腾讯科技(深圳)有限公司 | 一种地址生成的方法、相关装置以及存储介质 |
US11954580B2 (en) | 2020-09-16 | 2024-04-09 | Meta Platforms, Inc. | Spatial tiling of compute arrays with shared control |
US20220092408A1 (en) * | 2020-09-23 | 2022-03-24 | Facebook, Inc. | Neural network weight distribution using a tree direct-memory access (dma) bus |
US11526965B2 (en) * | 2020-09-28 | 2022-12-13 | Robert Bosch Gmbh | Multiplicative filter network |
CN114444675A (zh) * | 2020-10-30 | 2022-05-06 | 北京晶视智能科技有限公司 | 一种硬件加速器 |
CN114761972A (zh) * | 2020-11-02 | 2022-07-15 | 蒂普爱可斯有限公司 | 基于人工神经网络数据局部性的人工神经网络存储器系统 |
US11704562B1 (en) | 2020-11-04 | 2023-07-18 | Meta Platforms, Inc. | Architecture for virtual instructions |
US11709783B1 (en) | 2020-11-11 | 2023-07-25 | Meta Platforms, Inc. | Tensor data distribution using grid direct-memory access (DMA) controller |
US11972349B1 (en) | 2020-11-12 | 2024-04-30 | Meta Platforms, Inc. | Flexible compute array utilization in a tensor processor |
US11922306B2 (en) | 2020-12-28 | 2024-03-05 | Meta Platforms, Inc. | Tensor controller architecture |
US12001893B1 (en) | 2020-12-28 | 2024-06-04 | Meta Platforms, Inc. | Distributed synchronization scheme |
US11790611B2 (en) | 2020-12-30 | 2023-10-17 | Meta Platforms, Inc. | Visual editor for designing augmented-reality effects that utilize voice recognition |
TWI840715B (zh) * | 2021-01-21 | 2024-05-01 | 創惟科技股份有限公司 | 基於卷積神經網路的運算電路、資料處理方法及電腦可讀取儲存媒體 |
US11797270B2 (en) | 2021-06-17 | 2023-10-24 | International Business Machines Corporation | Single function to perform multiple operations with distinct operation parameter validation |
US11269632B1 (en) | 2021-06-17 | 2022-03-08 | International Business Machines Corporation | Data conversion to/from selected data type with implied rounding mode |
US11669331B2 (en) | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
US11675592B2 (en) | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
US11734013B2 (en) | 2021-06-17 | 2023-08-22 | International Business Machines Corporation | Exception summary for invalid values detected during instruction execution |
US12079658B2 (en) | 2021-06-17 | 2024-09-03 | International Business Machines Corporation | Detection of invalid machine-specific data types during data conversion |
US11693692B2 (en) | 2021-06-17 | 2023-07-04 | International Business Machines Corporation | Program event recording storage alteration processing for a neural network accelerator instruction |
US20220414054A1 (en) * | 2021-06-25 | 2022-12-29 | Intel Corporation | Dual pipeline parallel systolic array |
CN114970844B (zh) * | 2022-01-12 | 2024-11-05 | 厦门壹普智慧科技有限公司 | 一种通用神经网络张量处理器 |
KR20240102798A (ko) * | 2022-12-26 | 2024-07-03 | 리벨리온 주식회사 | 뉴럴 프로세서 및 이의 명령어 페치 방법 |
Family Cites Families (58)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS4874139A (ko) | 1971-12-29 | 1973-10-05 | ||
JPS5364439A (en) | 1976-11-20 | 1978-06-08 | Agency Of Ind Science & Technol | Linear coversion system |
JPS58134357A (ja) * | 1982-02-03 | 1983-08-10 | Hitachi Ltd | ベクトルプロセッサ |
US5138695A (en) * | 1989-10-10 | 1992-08-11 | Hnc, Inc. | Systolic array image processing system |
US5325464A (en) * | 1990-05-22 | 1994-06-28 | International Business Machines Corporation | Pyramid learning architecture neurocomputer |
WO1991019267A1 (en) | 1990-06-06 | 1991-12-12 | Hughes Aircraft Company | Neural network processor |
AU658066B2 (en) | 1992-09-10 | 1995-03-30 | Deere & Company | Neural network based control system |
JPH06139218A (ja) | 1992-10-30 | 1994-05-20 | Hitachi Ltd | ディジタル集積回路を用いて神経回路網を完全に並列にシミュレートするための方法及び装置 |
DE69609613D1 (de) | 1996-10-01 | 2000-09-07 | Finmeccanica Spa | Programmierter Neuronalmodul |
US6243734B1 (en) | 1998-10-30 | 2001-06-05 | Intel Corporation | Computer product and method for sparse matrices |
JP2001117900A (ja) | 1999-10-19 | 2001-04-27 | Fuji Xerox Co Ltd | ニューラルネットワーク演算装置 |
US20020044695A1 (en) | 2000-05-05 | 2002-04-18 | Bostrom Alistair K. | Method for wavelet-based compression of video images |
JP2003244190A (ja) * | 2002-02-19 | 2003-08-29 | Matsushita Electric Ind Co Ltd | データフロー制御スイッチ用プロセッサ及びデータフロー制御スイッチ |
US7016529B2 (en) | 2002-03-15 | 2006-03-21 | Microsoft Corporation | System and method facilitating pattern recognition |
US7493498B1 (en) | 2002-03-27 | 2009-02-17 | Advanced Micro Devices, Inc. | Input/output permission bitmaps for compartmentalized security |
US20070124565A1 (en) | 2003-06-18 | 2007-05-31 | Ambric, Inc. | Reconfigurable processing array having hierarchical communication network |
US7426501B2 (en) | 2003-07-18 | 2008-09-16 | Knowntech, Llc | Nanotechnology neural network methods and systems |
US7818729B1 (en) | 2003-09-15 | 2010-10-19 | Thomas Plum | Automated safe secure techniques for eliminating undefined behavior in computer software |
JP2007518199A (ja) * | 2004-01-13 | 2007-07-05 | ニューヨーク・ユニバーシティ | 多重線形独立要素分析を使用した画像認識の方法、システム、記憶媒体、及びデータ構造 |
CN101441441B (zh) | 2007-11-21 | 2010-06-30 | 新乡市起重机厂有限公司 | 起重机智能防摇控制系统的设计方法 |
JP4513865B2 (ja) * | 2008-01-25 | 2010-07-28 | セイコーエプソン株式会社 | 並列演算装置および並列演算方法 |
US9490848B2 (en) * | 2008-05-21 | 2016-11-08 | Nxp B.V. | Data handling system comprising memory banks and data rearrangement |
US8321652B2 (en) | 2008-08-01 | 2012-11-27 | Infineon Technologies Ag | Process and method for logical-to-physical address mapping using a volatile memory device in solid state disks |
JP2010039625A (ja) | 2008-08-01 | 2010-02-18 | Renesas Technology Corp | 並列演算装置 |
EP2290563B1 (en) | 2009-08-28 | 2017-12-13 | Accenture Global Services Limited | Accessing content in a network |
US8595467B2 (en) | 2009-12-29 | 2013-11-26 | International Business Machines Corporation | Floating point collect and operate |
US8457767B2 (en) | 2010-12-31 | 2013-06-04 | Brad Radl | System and method for real-time industrial process modeling |
US8977629B2 (en) | 2011-05-24 | 2015-03-10 | Ebay Inc. | Image-based popularity prediction |
US8812414B2 (en) | 2011-05-31 | 2014-08-19 | International Business Machines Corporation | Low-power event-driven neural computing architecture in neural networks |
US8909576B2 (en) | 2011-09-16 | 2014-12-09 | International Business Machines Corporation | Neuromorphic event-driven neural computing architecture in a scalable neural network |
US9165243B2 (en) * | 2012-02-15 | 2015-10-20 | Microsoft Technology Licensing, Llc | Tensor deep stacked neural network |
US9292787B2 (en) * | 2012-08-29 | 2016-03-22 | Microsoft Technology Licensing, Llc | Computer-implemented deep tensor neural network |
US9201828B2 (en) | 2012-10-23 | 2015-12-01 | Analog Devices, Inc. | Memory interconnect network architecture for vector processor |
US9921832B2 (en) | 2012-12-28 | 2018-03-20 | Intel Corporation | Instruction to reduce elements in a vector register with strided access pattern |
US20150071020A1 (en) | 2013-09-06 | 2015-03-12 | Sony Corporation | Memory device comprising tiles with shared read and write circuits |
ES2880316T3 (es) | 2014-08-29 | 2021-11-24 | Google Llc | Procesamiento de imágenes mediante redes neuronales profundas |
CN104463209B (zh) | 2014-12-08 | 2017-05-24 | 福建坤华仪自动化仪器仪表有限公司 | 一种基于bp神经网络的pcb板上数字代码识别方法 |
US10013652B2 (en) | 2015-04-29 | 2018-07-03 | Nuance Communications, Inc. | Fast deep neural network feature transformation via optimized memory bandwidth utilization |
US10489703B2 (en) | 2015-05-20 | 2019-11-26 | Nec Corporation | Memory efficiency for convolutional neural networks operating on graphics processing units |
US20160358069A1 (en) * | 2015-06-03 | 2016-12-08 | Samsung Electronics Co., Ltd. | Neural network suppression |
US10380479B2 (en) * | 2015-10-08 | 2019-08-13 | International Business Machines Corporation | Acceleration of convolutional neural network training using stochastic perforation |
US10474627B2 (en) * | 2015-10-08 | 2019-11-12 | Via Alliance Semiconductor Co., Ltd. | Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory |
JP6750203B2 (ja) * | 2015-10-20 | 2020-09-02 | 富士通株式会社 | 畳み込みニューラルネットワークの演算方法及び演算プログラム、情報処理装置 |
US9904874B2 (en) * | 2015-11-05 | 2018-02-27 | Microsoft Technology Licensing, Llc | Hardware-efficient deep convolutional neural networks |
US9875104B2 (en) | 2016-02-03 | 2018-01-23 | Google Llc | Accessing data in multi-dimensional tensors |
US10552119B2 (en) * | 2016-04-29 | 2020-02-04 | Intel Corporation | Dynamic management of numerical representation in a distributed matrix processor architecture |
US10817802B2 (en) * | 2016-05-07 | 2020-10-27 | Intel Corporation | Apparatus for hardware accelerated machine learning |
CN106023065B (zh) * | 2016-05-13 | 2019-02-19 | 中国矿业大学 | 一种基于深度卷积神经网络的张量型高光谱图像光谱-空间降维方法 |
CN106127297B (zh) * | 2016-06-02 | 2019-07-12 | 中国科学院自动化研究所 | 基于张量分解的深度卷积神经网络的加速与压缩方法 |
US10175980B2 (en) * | 2016-10-27 | 2019-01-08 | Google Llc | Neural network compute tile |
US9959498B1 (en) | 2016-10-27 | 2018-05-01 | Google Llc | Neural network instruction set architecture |
US10360163B2 (en) | 2016-10-27 | 2019-07-23 | Google Llc | Exploiting input data sparsity in neural network compute units |
US10733505B2 (en) | 2016-11-10 | 2020-08-04 | Google Llc | Performing kernel striding in hardware |
CN106529511B (zh) * | 2016-12-13 | 2019-12-10 | 北京旷视科技有限公司 | 图像结构化方法及装置 |
US10037490B2 (en) | 2016-12-13 | 2018-07-31 | Google Llc | Performing average pooling in hardware |
US20180189675A1 (en) | 2016-12-31 | 2018-07-05 | Intel Corporation | Hardware accelerator architecture and template for web-scale k-means clustering |
US11164071B2 (en) | 2017-04-18 | 2021-11-02 | Samsung Electronics Co., Ltd. | Method and apparatus for reducing computational complexity of convolutional neural networks |
US10572409B1 (en) | 2018-05-10 | 2020-02-25 | Xilinx, Inc. | Sparse matrix processing circuitry |
-
2016
- 2016-10-27 US US15/336,216 patent/US9959498B1/en active Active
-
2017
- 2017-03-10 US US15/455,685 patent/US9836691B1/en active Active
- 2017-08-29 KR KR1020227011447A patent/KR102525080B1/ko active IP Right Grant
- 2017-08-29 KR KR1020197014904A patent/KR102385349B1/ko active IP Right Grant
- 2017-08-29 WO PCT/US2017/049165 patent/WO2018080628A1/en unknown
- 2017-08-29 JP JP2019522877A patent/JP6921951B2/ja active Active
- 2017-08-29 EP EP17765517.2A patent/EP3532996A1/en not_active Ceased
- 2017-08-29 SG SG11201903631XA patent/SG11201903631XA/en unknown
- 2017-08-29 KR KR1020237013355A patent/KR20230058539A/ko not_active Application Discontinuation
- 2017-08-29 EP EP23161136.9A patent/EP4235509A3/en active Pending
- 2017-09-07 DE DE102017120588.8A patent/DE102017120588A1/de active Pending
- 2017-09-07 DE DE202017105403.9U patent/DE202017105403U1/de active Active
- 2017-09-19 GB GB1715031.9A patent/GB2558980A/en not_active Withdrawn
- 2017-09-29 CN CN201710909908.8A patent/CN108009627A/zh active Pending
- 2017-11-22 US US15/820,704 patent/US11379707B2/en active Active
-
2018
- 2018-10-25 HK HK18113686.2A patent/HK1254701A1/zh unknown
-
2021
- 2021-07-28 JP JP2021123193A patent/JP7158543B2/ja active Active
-
2022
- 2022-06-21 US US17/845,291 patent/US12061968B2/en active Active
- 2022-10-11 JP JP2022163303A patent/JP7485740B2/ja active Active
-
2024
- 2024-05-01 JP JP2024074476A patent/JP2024102216A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
HK1254701A1 (zh) | 2019-07-26 |
EP3532996A1 (en) | 2019-09-04 |
US12061968B2 (en) | 2024-08-13 |
US20180197068A1 (en) | 2018-07-12 |
EP4235509A2 (en) | 2023-08-30 |
CN108009627A (zh) | 2018-05-08 |
EP4235509A3 (en) | 2023-09-20 |
DE202017105403U1 (de) | 2017-12-06 |
JP6921951B2 (ja) | 2021-08-18 |
JP2024102216A (ja) | 2024-07-30 |
KR102385349B1 (ko) | 2022-04-11 |
US9959498B1 (en) | 2018-05-01 |
WO2018080628A1 (en) | 2018-05-03 |
JP2019533868A (ja) | 2019-11-21 |
JP7158543B2 (ja) | 2022-10-21 |
US20180121786A1 (en) | 2018-05-03 |
SG11201903631XA (en) | 2019-05-30 |
GB201715031D0 (en) | 2017-11-01 |
JP2021184276A (ja) | 2021-12-02 |
KR102525080B1 (ko) | 2023-04-24 |
KR20220048043A (ko) | 2022-04-19 |
JP7485740B2 (ja) | 2024-05-16 |
KR20230058539A (ko) | 2023-05-03 |
GB2558980A (en) | 2018-07-25 |
US20220318594A1 (en) | 2022-10-06 |
US9836691B1 (en) | 2017-12-05 |
JP2022188245A (ja) | 2022-12-20 |
DE102017120588A1 (de) | 2018-05-03 |
US11379707B2 (en) | 2022-07-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20190068616A (ko) | 신경 네트워크 명령어 세트 아키텍처 | |
CN109324827B (zh) | 用于处理用于访问数据的指令的装置、方法和系统 | |
CN112236784B (zh) | 修改机器学习模型以改善局部性 | |
Shen et al. | Glinda: a framework for accelerating imbalanced applications on heterogeneous platforms | |
CN111506520B (zh) | 一种地址生成的方法、相关装置以及存储介质 | |
US20210263739A1 (en) | Vector reductions using shared scratchpad memory | |
JP2024153697A (ja) | ニューラルネットワーク計算を加速するためのハードウェア回路 | |
EP3857384B1 (en) | Processing sequential inputs using neural network accelerators | |
WO2021054990A1 (en) | Systems and methods for generation of sparse code for convolutional neural networks | |
Steinbach et al. | Sources and obstacles for parallelization-a comprehensive exploration of the unate covering problem using both CPU and GPU | |
CN113496248A (zh) | 训练计算机实施的模型的方法和设备 | |
CN117492838A (zh) | 访问序言和结尾数据 | |
WO2022208173A2 (en) | Vectorizing a loop | |
Dikbayir | Kernel and launch time optimizations for deep learning frameworks | |
CN112348173A (zh) | 一种移动平台上cnn流水线优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |