KR20240068718A - 컨볼루션 신경망 연산 - Google Patents
컨볼루션 신경망 연산 Download PDFInfo
- Publication number
- KR20240068718A KR20240068718A KR1020247013117A KR20247013117A KR20240068718A KR 20240068718 A KR20240068718 A KR 20240068718A KR 1020247013117 A KR1020247013117 A KR 1020247013117A KR 20247013117 A KR20247013117 A KR 20247013117A KR 20240068718 A KR20240068718 A KR 20240068718A
- Authority
- KR
- South Korea
- Prior art keywords
- lane
- data
- vgprs
- dot product
- operations
- Prior art date
Links
- 238000013527 convolutional neural network Methods 0.000 title claims abstract description 12
- 238000000034 method Methods 0.000 claims abstract description 36
- 230000007704 transition Effects 0.000 claims description 31
- 238000004364 calculation method Methods 0.000 abstract description 4
- 230000008569 process Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Classifications
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Image Processing (AREA)
- Complex Calculations (AREA)
Abstract
단일-명령어-다중-데이터(SIMD) 유닛에서 연산을 실행하는 방법 및 시스템이 개시된다. 개시된 기술들은 입력 데이터를 컨볼루션하는 단계, 중간 데이터를 생성하는 단계, 및 출력 데이터를 생성하기 위해 중간 데이터에 하나 이상의 전이 연산들을 적용하는 단계를 포함하는, 하나의 컴퓨터 사이클 동안 입력 데이터에 대한 내적 연산을 수행한다. 설명된 양태들에서, 입력 데이터는 컨볼루션 신경망의 계층에 대한 입력이고, 생성된 출력 데이터는 계층의 출력이다.
Description
관련 출원들에 대한 상호 참조
본 출원은 2021년 9월 29일자로 출원된 미국 정규 특허 출원 제17/489,734호의 이익을 주장하며, 이는 그 전체 내용이 본원에 원용되어 포함된다.
다양한 전산 작업들은 다수의 단계에서의 다차원 데이터 처리를 수반한다. 예를 들어, 컨볼루션 신경망(CNN: convolutional neural network)은 전형적으로 다수의 계층의 아키텍처로 배열된다. 각각의 계층에서, 입력 이미지에 대한 컨볼루션 연산과 같은 전산 연산이 계층의 입력에 적용될 수 있다. 그러한 경우, 생성된 컨볼루션된 이미지(또는 중간 이미지)는 계층의 출력을 생성하기 위해 전이 연산(transitional operation)들을 통해 더 프로세싱될 수 있다. 전이 연산들은 다음 계층에 의한 프로세싱을 위해 중간 이미지를 준비하기 위해 중간 이미지를 재포맷팅, 정류(rectifying), 및/또는 클램핑하는 것을 포함할 수 있다. 그러나, 이들 전이 연산은 전산 연산 자체(예를 들어, 컨볼루션)를 수행하는 데 걸리는 시간에 비해 상당한 시간을 소비한다. 다층 프로세싱 아키텍처에 채용되는 전이 연산의 실행 효율성을 높이기 위한 기술이 요구된다.
첨부된 도면과 함께 실시예로서 주어진 하기의 설명으로부터 보다 상세한 이해를 얻을 수 있다.
도 1a는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스의 블록선도이다.
도 1b는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 도 1a의 디바이스에 의해 채용 가능한 가속기를 보여주는 예시적인 시스템의 블록선도이다.
도 2는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 단일-명령어-다중-데이터(SIMD: single-instruction-multiple-data) 유닛에서 웨이브(wave)의 레인에 의해 수행되는 예시적인 내적 연산을 예시한다.
도 3은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 CNN의 예시적인 계층 프로세싱을 예시한다.
도 4 및 도 5는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 컨볼루션 연산(도 4) 및 전이 연산들(도 5)을 포함하는 예시적인 이중 내적 명령어를 예시한다.
도 6은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 SIMD 유닛에서 웨이브들의 레인들에 의해 수행되는 예시적인 내적 연산들을 예시한다.
도 7은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 다른 예시적인 이중 내적 명령어를 예시한다.
도 8은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 이중 내적 명령어의 적용을 위한 예시적인 방법의 흐름도이다.
도 1a는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스의 블록선도이다.
도 1b는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 도 1a의 디바이스에 의해 채용 가능한 가속기를 보여주는 예시적인 시스템의 블록선도이다.
도 2는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 단일-명령어-다중-데이터(SIMD: single-instruction-multiple-data) 유닛에서 웨이브(wave)의 레인에 의해 수행되는 예시적인 내적 연산을 예시한다.
도 3은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 CNN의 예시적인 계층 프로세싱을 예시한다.
도 4 및 도 5는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 컨볼루션 연산(도 4) 및 전이 연산들(도 5)을 포함하는 예시적인 이중 내적 명령어를 예시한다.
도 6은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 SIMD 유닛에서 웨이브들의 레인들에 의해 수행되는 예시적인 내적 연산들을 예시한다.
도 7은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 다른 예시적인 이중 내적 명령어를 예시한다.
도 8은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 이중 내적 명령어의 적용을 위한 예시적인 방법의 흐름도이다.
본 출원에서는, 전이 연산들, 예를 들어, CNN의 계층 출력을 생성하기 위해 CNN의 계층의 입력 데이터에 적용되는 컨볼루션 연산들을 포함하는 내적 연산들을 채용하는 시스템 및 방법들이 개시된다. 본원에 개시된 내적 명령어들이 입력 데이터의 2개의 요소들에 대해 동시에 실행되어 이중 출력 데이터, 즉 이중 내적 명령어들을 생성할 수 있다. 이중 내적 명령어는 하나의 컴퓨터 사이클 동안 실행 가능하며, SIMD 유닛들에 의해 병렬로 실행되는 웨이브들의 레인들에 의해 수행될 수 있다. 이러한 레인은 벡터 범용 레지스터(VGPR: vector general purpose register)를 활용하여 개별 내적 명령어의 실행에 필요한 데이터를 저장한다. 본원에 개시된, 각각의 레인은 또한 내적 명령어를 실행하기 위해 다른 레인의 VGPR에 저장된 데이터에 액세스할 수 있다.
본원에 개시된 양태들은 SIMD유닛에서 연산을 실행하는 방법을 설명한다. 방법은 SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 레인의 VGPR들에 로딩하는 단계, 및 그런 다음, 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하는 단계를 포함할 수 있다. 수행된 내적 연산은 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 중간 데이터 요소에 적용하여 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함할 수 있다. 방법은 레인에 의해 하나의 컴퓨터 사이클 동안 제2 내적 연산을 수행하는 단계를 더 포함할 수 있다. 제2 내적 연산은 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 제2 중간 데이터 요소에 적용하여 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함할 수 있다.
본원에 개시된 양태들은 또한 SIMD 유닛에서 연산을 실행하기 위한 회로부를 설명한다. 회로부는 적어도 하나의 프로세서 및 명령어를 저장하는 메모리를 포함할 수 있다. 명령어는, 적어도 하나의 프로세서에 의해 실행될 때, 회로부들로 하여금, SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 레인의 VGPR에 로딩하게 하고, 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하게 할 수 있다. 수행된 내적 연산은 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 중간 데이터 요소에 적용하여 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함할 수 있다. 명령어는 또한 회로부가 레인에 의해 하나의 컴퓨터 사이클 동안 제2 내적 연산을 수행하도록 할 수 있다. 제2 내적 연산은 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 제2 중간 데이터 요소에 적용하여 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함할 수 있다.
또한, 본원에 개시된 양태들은 SIMD 유닛에서 연산을 실행하는 방법을 수행하기 위해 적어도 하나의 프로세서에 의해 실행 가능한 명령어들을 포함하는 비일시적 컴퓨터 판독 가능 매체를 설명한다. 방법은 SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 레인의 VGPR에 로딩하는 단계, 및 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하는 단계를 포함할 수 있다. 수행된 내적 연산은 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 중간 데이터 요소에 적용하여 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함할 수 있다. 방법은 레인에 의해 하나의 컴퓨터 사이클 동안 제2 내적 연산을 수행하는 단계를 더 포함할 수 있다. 제2 내적 연산은 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 단계, 및 하나 이상의 전이 연산을 제2 중간 데이터 요소에 적용하여 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함할 수 있다.
도 1a는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스(100A)의 블록선도이다. 디바이스(100A)는, 예를 들어, 컴퓨터, 게임 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터일 수 있다. 디바이스(100A)는 프로세서(102), 가속 처리 장치(APU: accelerated processing unit)(116), 메모리(104), 저장소(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100A)는 또한 입력 드라이버(112) 및 출력 드라이버(114)를 포함한다. 일 양태에서, 디바이스(100A)는 도 1에 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다.
프로세서(102)는 중앙 처리 장치(CPU: central processing unit) 또는 CPU들의 하나 이상의 코어를 포함할 수 있다. 그래픽 처리 장치(GPU: graphics processing unit)를 나타내는 APU(116)는 APU들의 하나 이상의 코어를 포함할 수 있다. 프로세서(102) 및 APU(116)는 동일한 다이에 또는 별개의 다이들에 위치될 수 있다. 메모리(104)는 프로세서(102)와 동일한 다이에 위치될 수 있거나, 또는 프로세서(102)와 별도로 위치될 수 있다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어, 랜덤 액세스 메모리(RAM), 동적 RAM, 캐시, 또는 이들의 조합을 포함할 수 있다.
저장소(106)는 고정식 또는 탈착 가능한 저장소, 예를 들어 하드 디스크 드라이브, 솔리드스테이트 드라이브, 광학 디스크, 또는 플래시 드라이브를 포함할 수 있다. 입력 디바이스들(108)은, 예를 들어, 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 바이오메트릭 스캐너, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 수신을 위한 무선 근거리 통신망 카드)을 포함할 수 있다. 출력 디바이스들(110)은, 예를 들어, 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 조명들, 안테나, 또는 네트워크 연결(예를 들어, 무선 IEEE 802 신호들의 송신을 위한 무선 근거리 통신망 카드)을 포함할 수 있다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스들(108)과 통신하고, 입력 디바이스들(108)로부터 프로세서(102)로의 입력의 수신을 용이하게 한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스들(110)과 통신하고, 프로세서(102)로부터 출력 디바이스들(110)로의 출력의 송신을 용이하게 한다. 일 양태에서, 입력 드라이버(112) 및 출력 드라이버(114)는 선택적인 컴포넌트들이고, 디바이스(100A)는 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않을 때 동일한 방식으로 동작할 수 있다.
APU(116)는 프로세서(102)로부터 계산 커맨드들 및 그래픽 렌더링 커맨드들을 수용하도록, 이들 계산 및 그래픽 렌더링 커맨드를 프로세싱하도록 그리고/또는 디스플레이(출력 디바이스(110))에 출력을 제공하도록 구성될 수 있다. 아래에서 더 자세히 설명되는 바와 같이, APU(116)는 예를 들어, SIMD 패러다임에 따라 계산을 수행하도록 구성된 하나 이상의 병렬 프로세싱 유닛을 포함할 수 있다. 따라서, 다양한 기능이 APU(116)에 의해 또는 이와 함께 수행되는 것으로 본원에서 설명되지만, 다양한 대안에서, APU(116)에 의해 수행되는 것으로 설명되는 기능은 예를 들어 디스플레이에 그래픽 출력을 제공하도록 구성될 수 있고 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않는 유사한 기능을 갖는 다른 컴퓨팅 디바이스에 의해 추가적으로 또는 대안적으로 수행될 수 있다. 프로세싱 시스템이 SIMD 패러다임에 따라 프로세싱 작업을 수행할 수 있는지 여부에 관계없이 프로세싱 시스템은 본원 설명된 기능을 수행하도록 구성될 수 있다.
도 1b는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 도 1a의 디바이스에 의해 채용 가능한 예시적인 시스템(100B)의 블록선도이다. 도 1b는 APU(116)에서 프로세싱 태스크의 실행을 더 상세히 예시한다. 프로세서(102)는 프로세서(102)에 의한 실행을 위해 메모리(104)에 하나 이상의 모듈을 유지할 수 있다. 모듈은 운영 체제(120), 커널 모드 드라이버(122) 및 애플리케이션(126)을 포함한다. 이러한 모듈은 프로세서(102) 및 APU(116)의 동작의 다양한 특징을 제어할 수 있다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 인터페이스하기 위해 애플리케이션(126)에 의해 채용될 수 있는 시스템 호출, 즉 애플리케이션 프로그래밍 인터페이스(API)를 제공할 수 있다. 커널 모드 드라이버(122)는, 예를 들어, APU(116)의 다양한 기능에 액세스하기 위해 프로세서(102)에서 실행되는 애플리케이션들(126)에 API를 제공함으로써 APU(116)의 동작을 제어할 수 있다. 커널 모드 드라이버(122)는 또한 (아래에서 더 자세히 설명되는 SIMD 유닛(138)과 같은) APU(116)의 컴포넌트를 프로세싱함으로써 실행을 위한 프로그램을 컴파일하는 적시(just-in-time) 컴파일러를 포함할 수 있다.
APU(116)는 병렬 프로세싱 또는 순차적 프로세싱 및 순서화 또는 비순서화 프로세싱 중 하나를 포함하는 그래픽 연산 및 비그래픽 연산을 위한 커맨드 및 프로그램을 실행할 수 있다. APU(116)는 프로세서(102)로부터 수신된 커맨드들에 기초하여, 그래픽 파이프라인 연산들 - 예컨대 픽셀들 및/또는 기하학적 계산들을 프로세싱하는 연산들(예를 들어, 이미지를 디스플레이(출력 디바이스(110))에 렌더링함) - 을 실행하기 위해 사용될 수 있다. APU(116)는 또한 프로세서(102)로부터 수신된 커맨드에 기초하여, 그래픽 연산과 관련되지 않은 프로세싱 연산, 예컨대 비디오, 물리 시뮬레이션, 계산 유체 역학 또는 다른 작업과 관련된 연산을 실행할 수 있다.
APU(116)는 워크그룹 프로세서(WGP: workgroup processor)(132.1 내지 132.M)를 포함할 수 있고; 각각의 WGP(예를 들어, 132.1)는, SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청에 따라 연산들을 수행할 수 있는 하나 이상의 SIMD 유닛들(예를 들어, 138.1.1 내지 138.1.N)을 가질 수 있다. SIMD 패러다임은 다수의 프로세싱 요소들이 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고, 따라서 동일한 프로그램을 그러나 상이한 데이터에 대해 실행할 수 있는 것이다. 일 실시예에서, 각각의 SIMD 유닛(예를 들어, 138.1.1)은 64개의 레인(즉, 스레드)을 포함할 수 있으며, 여기서 각각의 레인은 SIMD 유닛 내의 다른 레인들과 동일한 시간에 동일한 명령어를 실행하지만, 상이한 데이터에 대해 해당 명령어를 실행한다. 레인들은, 예컨대 주어진 명령어를 실행하기 위해 모든 레인들이 필요하지 않을 때, 예측에 따라 스위칭 오프될 수 있다. 예측은 다양한 제어 흐름으로 프로그램을 실행하는 데에도 사용될 수 있다. 특히, 제어 흐름이 개별 레인에 의해 수행되는 계산에 기초하는 조건부 분기 또는 다른 명령어를 갖는 프로그램의 경우, 현재 실행되고 있지 않은 제어 흐름 경로에 대응하는 레인의 예측 및 상이한 제어 흐름 경로의 직렬 실행은 임의의 제어 흐름을 허용한다. 일 양태에서, WGP(132.1 내지 132.M)의 각각은 로컬 캐시를 갖는다. 다른 양태에서, 다수의 WGP는 캐시를 공유한다.
WGP(예를 들어, 132.1)에서의 기본 실행 단위는 작업 항목(work-item)이다. 전형적으로 각각의 작업 항목은 특정 레인에서 병렬로 실행될 수 있는 프로그램의 단일 인스턴스화를 나타낸다. 작업 항목은 단일 SIMD(예를 들어, 138.1.1)에서 "웨이브프론트(wavefront)"(또는 "웨이브")로 동시에 실행될 수 있다. 하나 이상의 웨이브프론트들은 작업 그룹에서 실행될 수 있고, 각각의 웨이브는 동일한 프로그램을 실행하도록 지정된 작업 항목의 컬렉션을 포함한다. 작업 그룹은 작업 그룹을 구성하는 각각의 웨이브를 실행함으로써 실행된다. 웨이브는 또한 단일 SIMD 유닛에서 순차적으로 실행되거나 서로 다른 SIMD 유닛(138.1 내지 138.N)에서 부분적으로 또는 완전히 병렬로 실행될 수 있다. 따라서 웨이브는 단일 SIMD 유닛(예를 들어, 138.1.1)에서 동시에 실행될 수 있는 작업 항목의 컬렉션으로 간주될 수 있다. 따라서, 프로세서(102)로부터 수신된 커맨드가 특정 프로그램이 단일 SIMD 디바이스에서 동시에 실행될 수 없을 정도로 병렬화되어야 함을 나타내는 경우, 해당 프로그램은 2개 이상의 SIMD 유닛(예를 들어, 138.1.1 내지 138.1.N)에서 병렬화될 수 있는 웨이브로 분할될 수 있거나, 동일한 SIMD 유닛(예를 들어, 138.1.1)에서 직렬화될 수 있거나 필요에 따라 병렬화 및 직렬화될 수 있다. 스케줄러(136)는 상이한 WGP들(132.1 내지 132.M) 및 그들의 개개의 SIMD 유닛들에서 다양한 웨이브들을 스케줄링하는 단계와 관련된 연산들을 수행하도록 구성될 수 있다.
WGP들(132.1 내지 132.M)에 의해 제공되는 병렬성은, 예를 들어, 픽셀 값들에 대한 연산(예를 들어, 필터 연산), 기하학적 데이터에 대한 연산(예를 들어, 정점(vertex) 변환), 및 다른 그래픽 관련 연산과 같은 그래픽 관련 연산에 적합하다. 예를 들어, 프로세서(102)에서 실행되는 애플리케이션(126)은 APU(116)에 의해 수행될 계산들을 수반할 수 있다. 애플리케이션(126)은 커널 모드 드라이버(122)에 의해 제공된 API를 사용하여 APU(116)에 프로세싱 커맨드들을 발행할 수 있다. 이어서, 프로세싱 커맨드들은 스케줄러(136)에 제공된다. 스케줄러(136)는 프로세싱 커맨드들을 병렬로 실행하기 위해 WGP들(132.1 내지 132.M)에 할당되는 계산 작업들로 변환한다.
도 2는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 SIMD 유닛에서 웨이브의 레인에 의해 수행되는 예시적인 내적 연산(200)을 예시한다. 웨이브(210)의 2개의 레인(220.1 및 220.2)의 연산이 도 2에 도시되어 있다. 레인은 64개의 VGPR(230)에 액세스할 수 있고, 각각의 레지스터는 예를 들어 4바이트를 보유할 수 있다. 전형적으로, 레인의 VGPR들 중 일부(예를 들어, 230.1 내지 230.3)는 연산들이 수행될 입력 데이터를 저장하기 위해 레인에 의해 사용될 수 있고, 다른 레지스터들, 예를 들어, 230.63은 연산들의 결과를 저장하기 위해 레인에 의해 사용될 수 있다. 웨이브의 레인들의 VGPR(230)에 저장된 데이터는 레인들에 의해 병렬 연산들이 수행될 임의의 다차원 데이터일 수 있다. 예를 들어, 레인(220.1)의 VGPR(230.2)은 이미지의 4개의 이웃 픽셀을 보유할 수 있고, 각각의 픽셀 값은 바이트로 표현된다. 다른 실시예에서, 레인(220.1)의 VGPR(230.2)은 픽셀의 4개의 컴포넌트를 보유할 수 있으며, 각각의 컴포넌트는 이미지의 채널(예를 들어, RGB(적색, 청색 및 녹색) 컬러 모델의 3개의 채널 및 투명 채널)에 대응하고, 여기서 각각의 컴포넌트 값은 바이트로 표현된다. 전자의 실시예에서, 레인-1(220.1)의 연속적인 VGPR(230.1 내지 230.3)은 이미지의 4x3 픽셀 블록을 보유할 수 있다. 이미지의 다음 4x3 픽셀 블록은 레인-2(220.2)의 VGPR(230.1 내지 230.3)에 의해 보유될 수 있다.
일 양태에서, 레인들은 이미지에 대한 컨볼루션 연산을 수행하기 위해 채용될 수 있다. 컨볼루션 연산은 이미지의 픽셀 블록을 가중치들의 커널과 곱하는 단계를 포함한다. 예를 들어, 이미지는 3x3 커널(240)과 컨볼루션될 수 있으며, 즉, 각각의 픽셀에 대해, 커널 요소들과 이미지 내의 픽셀의 위치에 중심을 둔 3x3 픽셀 블록 사이에 내적이 적용된다. 따라서, 레인-1(220.1)이 이미지 I의 픽셀 I(x,y)(250)에 대해 컨볼루션 연산을 실행할 것이면, 먼저, 레인(220.1) 은 커널(240) 및 픽셀(250)에 중심을 둔 3x3 픽셀 블록들에 액세스해야 한다. 이들 데이터는 연산 동안 빠른 액세스를 허용하기 위해 레인의 VGPR로 (전형적으로 개개의 WGP(132)에 의해) 로딩될 수 있다. 예를 들어, 전술한 바와 같이, 레인-1의 VGPR(230.1 내지 230.3)에는 4x3 픽셀의 이미지 영역이 저장될 수 있다. 픽셀 I(x,y)(250)을 컨볼루션하기 위해, 예를 들어, 픽셀(250)에 중심을 둔 3x3 픽셀 블록(260)은 내적 연산을 사용하여 커널 w(240)와 곱해진다:
.
내적의 결과인 I'(x,y)는 출력(컨볼루션된) 이미지 픽셀을 저장하는 데 사용되는 레인-1의 VGPR에 저장될 수 있다. 예를 들어, VGPR(230.63)은 도 2에 도시된 바와 같이, 자신의 제2 바이트(270)에 I'(x,y)를 저장하는 데 사용될 수 있다. 마찬가지로, 레인-1의 VGPR(230.2)의 다른 픽셀은 커널(240)과 컨볼루션될 수 있다. 예를 들어, 픽셀 I(x,y)(250)의 우측의 픽셀, 즉 VGPR(230.2)의 제3 바이트에 저장된 픽셀은 컨볼루션될 수 있고, VGPR(230.63)의 제3 바이트에 저장된 생성된 내적을 가질 수 있다.
도 3은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 CNN의 예시적인 계층 프로세싱을 예시한다. 일반적으로, 계층(320)의 입력은 3차원(3D) 볼륨 또는 2차원(2D) 행렬과 같은 정수 또는 부동 소수점 숫자의 다차원 어레이일 수 있다. 도 3에 도시된 바와 같이, 계층(320)의 입력(310)은 2D 이미지의 하나의 채널이며, 여기서 이미지의 각각의 픽셀은 8 비트 정수일 수 있다. 계층(320)의 출력(380)은 동일하거나 상이한 크기일 수 있는 다른 2D 이미지이다. 계층(320)의 입력에 전형적으로 적용되는 연산자는 컨볼루션 연산자(340) 및 전이 연산자 예컨대, 재포맷팅 연산자(350), 정류 연산자(360) 및 클램핑 연산자(370)를 포함한다. 따라서, 입력 이미지(310)의 각각의 픽셀(315)에 대해, 컨볼루션 연산자는 픽셀(315)의 중심에 있는 픽셀 블록(316)과 커널(330) 사이에 내적을 적용하고, 이로써 대응하는 컨볼루션된 픽셀이 생성된다. 이러한 내적은 도 2를 참조하여 설명된 바와 같이 레인에 의해 수행될 수 있다. 다음과 같이 (CNN의 다음 계층에 공급될) 출력 이미지(380)를 생성하기 위해 이미지(310)의 컨볼루션된 픽셀들 각각에 대해 전이 연산들이 수행된다. 컨볼루션(340)된 후, 각각의 픽셀(예를 들어, 315)은 재포맷팅될 수 있다(350). 예를 들어, 컨볼루션된 픽셀에 를 곱하여 가장 작은 표현 가능한 부동 소수점(FP16)으로 스케일링하고 바이어스(FP16 값)가 거기에 추가될 수 있다. 재포맷팅된 픽셀은 또한 정류(360)될 수 있다. 예를 들어, 정류된 선형 유닛(ReLU: rectified linear unit)이 채용될 수 있으며, 정류기로의 입력이 음이면 출력은 제로로 설정되고, 그렇지 않으면 출력은 입력과 동일하다. 다른 실시예에서, 누설 정류된 선형 유닛(LReLU: leaky rectified linear unit)이 채용될 수 있으며, 정류기로의 입력이 음이면 출력은 4로 분할되고, 그렇지 않으면 출력은 입력과 동일하다. 그런 다음, 정류된 픽셀은 범위, 예를 들어, 8 비트 부호 정수의 -127 내지 128 범위 내에서 그의 값을 설정하기 위해 클램핑(370)될 수 있다. 클램핑된 픽셀은 출력 픽셀(385)이 된다.
상기에서 언급된 바와 같이, 컨볼루션 연산(340)의 출력을 CNN의 다음 계층에 의한 프로세싱을 위해 준비된 출력(380)으로 변환하는 전이 연산들(재포맷팅(350), 정류(360), 및 클램핑(370))은 컨볼루션(340)을 수행하는 데 걸리는 시간을 초과하지 않더라도 경쟁하는 상당한 계산 시간을 소비한다. 하나의 컴퓨터 사이클에서 컨볼루션 연산 및 전이 연산들을 실행하도록 설계된 명령어들이 본원에 개시된다. 도 4 및 도 5는 함께 아래에 상세히 설명되는 바와 같이, 하나의 컴퓨터 사이클에서 이미지의 2개의 픽셀에 대한 컨볼루션 연산(도 4) 및 전이 연산(도 5)을 실행하도록 설계된 명령어, 즉 이중 내적 명령어를 도시한다.
도 4 및 도 5는 본 개시내용의 하나 이상의 특징이 구현될 수 있는 컨볼루션 연산(도 4) 및 전이 연산(도 5)을 포함하는 예시적인 이중 내적 명령어를 예시한다. 도 4는 VGPR(450)의 제2 및 제3 바이트(도 4에 둘러싸임)에 저장된 2개의 이웃 픽셀, 즉 픽셀 I 22 및 픽셀 I 23 에 대해 연산하는 이중 내적 명령어를 도시한다. 픽셀들, I 22 및 I 23 의 컨볼루션을 용이하게 하기 위해, VGPR들(440, 450, 460)에 저장되는 데이터는 2개의 3x3 픽셀 블록들을 포함한다. 픽셀들{I 11 , I 12 , I 13 ; I 21 , I 22 , I 23 ; I 31 , I 32 , I 33 }을 포함하는 제1 픽셀 블록은 I 22 의 컨볼루션을 위해 사용된다. 픽셀들{I 12 , I 13 , I 14 ; I 22 , I 23 , I 24 ; I 32 , I 33 , I 34 }을 포함하는 제2 픽셀 블록은 픽셀I 23 의 컨볼루션을 위해 사용된다. 3개의 내적 유닛(415, 425, 435)은 제1 픽셀 블록의 제1, 제2 및 제3 라인에서 각각 내적 연산을 수행하는 데 사용된다. 이러한 내적의 합은 픽셀 I 22 (480)의 컨볼루션 결과를 구성한다. 마찬가지로, 3개의 내적 유닛(410, 420, 430)은 제2 픽셀 블록의 제1, 제2, 및 제3 라인들에서 각각 내적 연산을 수행하는 데 사용된다. 이러한 내적의 합은 픽셀 I 23 (470)의 컨볼루션 결과를 구성한다. 내적 유닛들(410, 415, 420, 425, 430, 435)은 3x3 커널의 가중치들: {w11, w12, w13; w21, w22, w23; w31, w32, w33}을 사용한다는 것에 유의한다. 예를 들어, 내적 유닛(410) 출력은 이다.
도 5에 도시된 바와 같이, 픽셀 I 22 (480) 및 픽셀 I 23 (470)에 대한 컨볼루션 결과들에 전이 연산들이 추가로 적용된다. 도 5에서, 픽셀 I 22 (510) 및 픽셀 I 23 (540)에 대한 컨볼루션 결과들은 재포맷팅(515, 545), 정류(520, 550), 및 클램핑(530, 560)될 수 있다. 예를 들어, 픽셀 I 22 (510)의 컨볼루션 값은 부동 소수점 포맷으로 재포맷팅될 수 있다. 즉, I 22 의 정수 값은 14 비트의 분수(fraction)를 허용하기 위해 14 비트만큼 오른쪽 시프트될 수 있다. 바이어스 값(505)(예를 들어, 부동 소수점 숫자)은 재포맷팅된 I 22 의 분수 비트들에 정렬될 수 있고 그에 추가될 수 있다. 바이어스 값은 상수 값 또는 개별 레인의 VGPR에 저장된 값일 수 있다. 유사하게, 픽셀 I 23 (540)의 컨볼루션 값이 재포맷팅될 수 있고 바이어스 값(535)이 그에 추가될 수 있다. 그런 다음, 재포맷팅된 값들은 시프트 연산자(522, 552) 및 ReLU(또는 LReLU) 연산자(525, 555)를 적용함으로써 정류될 수 있다(520, 550). 그런 다음, 정류된 값들은 클램핑될 수 있고(530, 560), 생성된 출력 픽셀들(580, 590)이 목적지 VGPR(570)에 저장된다.
도 6은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 SIMD 유닛에서 웨이브들의 레인들에 의해 수행되는 예시적인 내적 연산들을 예시한다. 도 6은 경계에 위치된 픽셀들(예를 들어, 도 4의 픽셀 I 21 또는 I 24 )의 컨볼루션 연산들을 도시한다. 일반적으로, 이미지를 프로세싱하는 데 필요한 웨이브의 수는 이미지에서 프로세싱될 픽셀의 수를 웨이브의 크기로 나눈 것이다. 웨이브의 크기는 레인의 수(예를 들어, 64)에 각각의 레인이 프로세싱을 위해 할당된 픽셀 수(예를 들어, 4 픽셀)를 곱한 것이다. 2개의 웨이브가 도 6에 도시된다. 각각의 웨이브는 이미지 라인의 세그먼트의 프로세싱으로 할당된다. 예를 들어, 웨이브-1(610)은 256개 픽셀의 제1 세그먼트를 프로세싱하고 웨이브-2(650)는 256개 픽셀의 제2 세그먼트를 프로세싱한다. 웨이브의 각각의 레인(즉, 도시된 웨이브-1(610)의 레인들(620.1 내지 620.64) 및 웨이브-2(650)의 레인-1(660.1))은 이미지 라인의 4개의 픽셀을 프로세싱한다. 예를 들어, 레인-1(620. 1)은 이미지 라인(630.2)의 픽셀들 1 내지 4의 프로세싱을 할당받고, 레인-2(620.2)는 이미지 라인(630.2)의 픽셀들 5 내지 8의 프로세싱을 할당받는다.
예를 들어, 도 2에 대해 설명된 바와 같이, 픽셀을 컨볼루션하기 위해, 레인은 픽셀에 중심을 둔 픽셀 블록에 대한 액세스를 필요로 한다. 따라서, 레인은 (이미지 라인(630.2)에서) 컨볼루션을 계산해야 하는 4개의 픽셀들뿐만 아니라 (이미지 라인(630.1)에서) 위의 4개의 픽셀들 및 (이미지 라인(630.3)에서) 아래의 4개의 픽셀들도 자신의 VGPR에 저장했다. 그러나, 경계 픽셀들을 컨볼루션하기 위해 레인에 의해 요구되는 픽셀 블록들은 개별 레인에 의해 저장되지 않는 픽셀들을 포함한다. 예를 들어, 라인(630.2)의 픽셀 4를 컨볼루션하기 위해, 레인-1(620.1)은 이미지 라인들(630.1, 630.2, 및 630.3)의 픽셀 5에 대한 액세스를 요구한다. 일 양태에서, 레인(예를 들어, 레인-1(620.1))은 웨이브(예를 들어, 웨이브-1(610)의 레인-2(620.2)의 VGPR)에 있는 다른 레인의 VGPR에 저장된 픽셀 데이터에 액세스할 수 있다.
유사하게, 라인(630.2)의 픽셀 256을 컨볼루션하기 위해, 레인-64(620.64)는 이미지 라인들(630.1, 630.2, 및 630)의 픽셀 257에 대한 액세스를 요구한다. 그러나, 픽셀 256은 웨이브-1(610)에 할당된 이미지 세그먼트의 끝에 있기 때문에, 이들 픽셀들은 레인-64에 액세스 가능하지 않다. 따라서, 일 양태에서, 픽셀 블록(645)의 누락된 우측 열을 메모리로부터 로딩(즉, 이미지 라인들(630.1, 630.2, 및 630.3)의 픽셀 257을 로딩하는 단계)하는 대신에, 레인-64(620. 64)은 이미지 라인들(630.1, 630.2, 및 630.3)의 픽셀 256을 (도 6에서 화살표(646)에 의해 도시된 바와 같이) 픽셀 블록(645)의 우측 열로 패딩할 수 있다. 이 패딩은, 메모리로부터 레인-64의 VGPR들로 데이터를 로딩할 필요성을 절감하지만, 이미지 라인(630.2)의 픽셀 256과 같은 경계 픽셀들의 컨볼루션 결과를 오염시킨다. 해결책은 2개의 이웃하는 웨이브들에 할당된 제1 세그먼트와 제2 세그먼트 사이의 2 픽셀 오버랩을 유지하는 것이다. 예를 들어, 도 6에 도시된 바와 같이, 웨이브-1의 레인-64의 픽셀들 255 및 256은 또한 웨이브-2의 레인-1에 의해 로딩되고 프로세싱된다. (도 6의 화살표(686)에 의해 도시된 바와 같이) 이미지 라인(670.2)내의 픽셀 255의 컨볼루션을 계산하는데 필요한 픽셀 블록(680)을 완료하기 위해 패딩이 또한 수행되면, 이 픽셀에 대한 컨볼루션 결과 또한 오염될 것이다. 그러나, 라인(630.2)의 픽셀 255 및 라인(670.2)의 픽셀 256은 그것들 개개의 레인-64(620.64) 및 레인-1(660.1)에서의 경계 픽셀들이 아니며, 따라서 그것들 개개의 컨볼루션 결과는 유효하다는 점에 유의한다. 일 양태에서, 레인-1 및 레인-64는 컨볼루션 결과들을 스위칭할 수 있다; 즉, 레인-64는 (라인(630.2의)) 256에 대한 오염된 컨볼루션 결과를 레인-1에 의해 계산된 (라인(670.2의)) 256에 대한 유효 결과로 대체할 수 있다(695); 및 레인-1은 (라인(670.2의)) 255에 대한 오염된 컨볼루션 결과를 레인-64에 의해 계산된 (라인(630.2의)) 255에 대한 유효 결과로 대체할 수 있다(690).
도 7은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 다른 예시적인 이중 내적 명령어를 예시한다. 도 7에 도시된 이중 내적 명령어는 또한 도 5에 도시된 전이 연산들을 포함한다. 일 양태에서, 도 7에 도시된 명령어는 2개의 행(row) 및 4개의 열(column)의 데이터 행렬에 내적을 수행하기 위해 적용될 수 있다. 예를 들어, 이 명령어는 이미지의 채널들에 걸친 컨볼루션(즉, 포인트별(point-wise) 컨볼루션)에 적용될 수 있다. 도 7은 8개의 채널을 갖는 이미지에 대해 이중 컨볼루션을 수행하는 단계를 도시한다. 따라서, 제1 픽셀의 채널들은 1(1), 1(2), 1(3), 및 1(4)로 표시된 제1 VGPR(715) 및 1(5), 1(6), 1(7), 및 1(8)로 표시된 제2 VGPR(725)에 저장된다. 제2 픽셀의 채널들은 2(1), 2(2), 2(3), 및 2(4)로 표시된 제1 VGPR(735) 및 2(5), 2(6), 2(7), 및 2(8)로 표시된 제2 VGPR(745)에 저장된다. 4개의 내적 유닛들(710, 720, 730, 및 740)이 이중 내적 연산을 수행하기 위해 사용된다. 2개의 유닛들(710, 720)은 커널과 제1 픽셀의 내적 즉, , , , , , , , 및 의 합을 실행한다. 이러한 내적은 전이 연산자들(도 5에 예시된, 예를 들어, 재포맷팅 연산자(515), 정류 연산자(520), 및 클램핑 연산자(530))에 공급될 수 있는 제1 픽셀(750)의 컨볼루션 결과를 구성하며, 이의 결과는 레인의 VGPR 중 하나(예를 들어, 580)에 저장될 수 있다. 2개의 유닛들(730, 740)은 커널과 제2 픽셀의 내적 즉, , , , , , , , 및 의 합을 실행한다. 이러한 내적은 전이 연산자들(도 5에 예시된, 예를 들어, 재포맷팅 연산자(545), 정류 연산자(550), 및 클램핑 연산자(560))에 공급될 수 있는 제2 픽셀(760)의 컨볼루션 결과를 구성하며, 이의 결과는 레인의 VGPR 중 하나(예를 들어, 590)에 저장될 수 있다.
일 양태에서, 제1 단계에서, 도 4의 이중 내적 명령어는 이미지의 각각의 채널 내의 픽셀들에 컨볼루션(즉, 깊이별(depth-wise) 컨볼루션)을 적용하는 데 사용될 수 있고, 그 결과 각각의 채널에 대한 출력 이미지가 생성된다. 그런 다음, 제2 단계에서, 도 7의 이중 내적 명령어는 채널들에 걸쳐 컨볼루션(즉, 포인트별 컨볼루션)을 적용하고, 입력으로 제1 스테이지에 의해 생성된 출력들을 수신하는 데 사용될 수 있다.
도 8은 본 개시내용의 하나 이상의 특징이 구현될 수 있는 이중 내적 명령어의 적용을 위한 예시적인 방법(800)의 흐름도이다. SIMD 유닛에서 실행되는 웨이브의 레인에 의해 채용되는 방법(800)은 레인의 VGPR에 입력 데이터를 로딩하는 단계 810에서 시작한다. 그런 다음, 단계 820에서 하나의 컴퓨터 사이클 동안 내적 연산이 수행될 수 있다. 내적 연산은 입력 데이터의 데이터 요소를 컨볼루션한 다음, 컨볼루션된 데이터 요소에 대한 전이 연산들을 적용하는 단계를 포함한다. 제2 내적 연산은 단계 830에서 하나의 컴퓨터 사이클 동안 수행될 수 있다. 제2 내적 연산은 입력 데이터의 제2 데이터 요소를 컨볼루션한 다음, 컨볼루션된 제2 데이터 요소에 대한 전이 연산들을 적용하는 단계를 포함할 수 있다. 단계 820 및 단계 830의 내적 연산들은, 도 4 내지 도 7을 참조하여 설명된 바와 같이, 이중 내적 명령어들을 적용함으로써 수행될 수 있다.
본원의 개시내용에 기초하여 많은 변형예들이 가능하다는 것이 이해되어야 한다. 특징 및 요소가 특정 조합으로 위에서 설명되었지만, 각각의 특징 또는 요소는 다른 특징 및 요소 없이 단독으로 또는 다른 특징 및 요소를 갖거나 갖지 않는 다양한 조합으로 사용될 수 있다.
제공된 방법들은 범용 컴퓨터, 프로세서, 또는 프로세서 코어에서 구현될 수 있다. 적합한 프로세서들은, 예로서, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, 디지털 신호 프로세서(DSP), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 제어기, 마이크로제어기, 주문형 집적 회로(ASIC), 필드 프로그래밍 가능 게이트 어레이(FPGAs) 회로, 임의의 다른 유형의 집적 회로(IC), 및/또는 상태 기계를 포함한다. 이러한 프로세서들은 프로세싱된 하드웨어 기술 언어(HDL: hardware description language) 명령어의 결과 및 넷리스트를 포함하는 다른 중간 데이터(이러한 명령어들은 컴퓨터 판독 가능 매체 상에 저장될 수 있음)를 사용하여 제조 프로세스를 구성함으로써 제조될 수 있다. 이러한 프로세싱의 결과는 실시형태의 양태를 구현하는 프로세서를 제조하기 위해 반도체 제조 공정에서 사용되는 마스크작업일 수 있다.
본원에 제공된 방법들 또는 흐름도들은 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독 가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독 가능 저장 매체의 예로는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 내부 하드 디스크 및 탈착 가능한 디스크와 같은 자기 매체, 자기 광학 매체, CD-ROM 디스크 및 디지털 다목적 디스크(DVD)와 같은 광학 매체를 포함한다.
Claims (20)
- 단일-명령어-다중-데이터(SIMD) 유닛들에서 연산들을 실행하는 방법으로서,
SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 레인의 벡터 범용 레지스터(VGPR)들에 로딩하는 단계;
상기 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하는 단계를 포함하고, 상기 내적 연산을 수행하여 출력 데이터를 생성하는 단계는,
상기 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 단계, 및
하나 이상의 전이 연산들을 상기 중간 데이터 요소에 적용하여 상기 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함하는, SIMD 유닛들에서 연산들을 실행하는 방법. - 제1항에 있어서,
상기 레인에 의해, 상기 하나의 컴퓨터 사이클 동안 내적 연산을 수행하는 단계를 더 포함하고, 상기 내적 연산을 수행하는 단계는,
상기 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 단계, 및
상기 하나 이상의 전이 연산들을 상기 제2 중간 데이터 요소에 적용하여 상기 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함하는, SIMD 유닛들에서 연산들을 실행하는 방법. - 제1항에 있어서, 상기 하나 이상의 전이 연산들은 재포맷팅 연산, 정류 연산, 또는 클램핑 연산 중 하나인, SIMD 유닛들에서 연산들을 실행하는 방법.
- 제1항에 있어서, 상기 입력 데이터는 컨볼루션 신경망의 계층에 대한 입력이고, 상기 출력 데이터는 상기 계층의 출력인, SIMD 유닛들에서 연산들을 실행하는 방법.
- 제1항에 있어서,
상기 입력 데이터는 픽셀 및 상기 픽셀에 중심을 둔 픽셀 블록을 포함하는 이미지의 픽셀들을 포함하고;
상기 컨볼루션은 상기 픽셀 블록과 가중치들의 커널의 내적을 포함하고, 상기 픽셀 블록과 상기 커널은 상기 레인의 VGPR들에 저장되는, SIMD 유닛들에서 연산들을 실행하는 방법. - 제5항에 있어서, 상기 픽셀 블록의 제1 부분이 상기 레인의 VGPR들에 저장되고 상기 픽셀 블록의 제2 부분이 상기 웨이브 내의 다른 레인의 VGPR들에 저장될 때, 상기 레인은 상기 다른 레인의 VGPR들로부터 상기 제2 부분에 액세스하는, SIMD 유닛들에서 연산들을 실행하는 방법.
- 제5항에 있어서, 상기 픽셀 블록의 제1 부분이 상기 레인의 VGPR들에 저장되고 상기 픽셀 블록의 제2 부분이 상기 레인의 VGPR들에 저장되지 않을 때, 상기 제2 부분으로부터의 데이터는 상기 제1 부분으로부터의 데이터로 대체되는, SIMD 유닛들에서 연산들을 실행하는 방법.
- 제7항에 있어서, 상기 생성된 출력 데이터는 제2 웨이브의 레인에 의해 생성된 출력 데이터로 대체되는, SIMD 유닛들에서 연산들을 실행하는 방법.
- 제1항에 있어서,
상기 입력 데이터는 이미지의 픽셀의 채널 데이터이고,
상기 컨볼루션은 상기 채널 데이터와 가중치들의 커널의 내적을 포함하고, 상기 채널 데이터 및 상기 커널은 상기 레인의 VGPR들에 저장되는, SIMD 유닛들에서 연산들을 실행하는 방법. - SIMD 유닛들에서 연산들을 실행하기 위한 회로부로서,
적어도 하나의 프로세서; 및
명령어들을 저장하는 메모리를 포함하고, 상기 메모리는, 상기 명령어들이 상기 적어도 하나의 프로세서에 의해 실행될 때, 상기 회로부로 하여금,
SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 상기 레인의 VGPR들에 로딩하게 하고;
상기 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하게 하고, 상기 내적 연산을 수행하여 출력 데이터를 생성하는 것은,
상기 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 것, 및
하나 이상의 전이 연산들을 상기 중간 데이터 요소에 적용하여 상기 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함하는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부. - 제10항에 있어서, 상기 회로부로 하여금,
상기 레인에 의해, 상기 하나의 컴퓨터 사이클 동안 내적 연산을 수행하게 하는 명령어들을 더 포함하고, 상기 내적 연산을 수행하는 것은,
상기 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 것, 및
상기 하나 이상의 전이 연산들을 상기 제2 중간 데이터 요소에 적용하여 상기 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함하는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부. - 제10항에 있어서, 상기 하나 이상의 전이 연산들은 재포맷팅 연산, 정류 연산, 또는 클램핑 연산 중 하나인, SIMD 유닛들에서 연산들을 실행하기 위한 회로부.
- 제10항에 있어서, 상기 입력 데이터는 컨볼루션 신경망의 계층에 대한 입력이고, 상기 출력 데이터는 상기 계층의 출력인, SIMD 유닛들에서 연산들을 실행하기 위한 회로부.
- 제10항에 있어서,
상기 입력 데이터는 픽셀 및 상기 픽셀에 중심을 둔 픽셀 블록을 포함하는 이미지의 픽셀들을 포함하고;
상기 컨볼루션은 상기 픽셀 블록과 가중치들의 커널의 내적을 포함하고, 상기 픽셀 블록과 상기 커널은 상기 레인의 VGPR들에 저장되는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부. - 제14항에 있어서, 상기 픽셀 블록의 제1 부분이 상기 레인의 VGPR들에 저장되고 상기 픽셀 블록의 제2 부분이 상기 웨이브 내의 다른 레인의 VGPR들에 저장될 때, 상기 레인은 상기 다른 레인의 VGPR들로부터 상기 제2 부분에 액세스하는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부.
- 제14항에 있어서, 상기 픽셀 블록의 제1 부분이 상기 레인의 VGPR들에 저장되고 상기 픽셀 블록의 제2 부분이 상기 레인의 VGPR들에 저장되지 않을 때, 상기 제2 부분으로부터의 데이터는 상기 제1 부분으로부터의 데이터로 대체되는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부.
- 제16항에 있어서, 상기 생성된 출력 데이터는 제2 웨이브의 레인에 의해 생성된 출력 데이터로 대체되는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부.
- 제10항에 있어서,
상기 입력 데이터는 이미지의 픽셀의 채널 데이터이고,
상기 컨볼루션은 상기 채널 데이터와 가중치들의 커널의 내적을 포함하고, 상기 채널 데이터 및 상기 커널은 상기 레인의 VGPR들에 저장되는, SIMD 유닛들에서 연산들을 실행하기 위한 회로부. - 비일시적 컴퓨터 판독 가능 매체로서, SIMD 유닛들에서 연산들을 실행하는 방법을 수행하기 위해 적어도 하나의 프로세서에 의해 실행 가능한 명령어들을 포함하고, 상기 방법은,
SIMD 유닛에서 실행되는 웨이브의 레인에 의해, 입력 데이터를 레인의 VGPR들에 로딩하는 단계; 및
상기 레인에 의해, 하나의 컴퓨터 사이클 동안 내적 연산을 수행하여 출력 데이터를 생성하는 단계를 포함하고, 상기 내적 연산을 수행하여 출력 데이터를 생성하는 단계는,
상기 입력 데이터의 데이터 요소를 컨볼루션하여 중간 데이터 요소를 생성하는 단계, 및
하나 이상의 전이 연산들을 상기 중간 데이터 요소에 적용하여 상기 출력 데이터의 출력 데이터 요소를 생성하는 단계를 포함하는, 비일시적 컴퓨터 판독 가능 매체. - 제19항에 있어서,
상기 레인에 의해, 상기 하나의 컴퓨터 사이클 동안 내적 연산을 수행하는 단계를 더 포함하고, 상기 내적 연산을 수행하는 단계는,
상기 입력 데이터의 제2 데이터 요소를 컨볼루션하여 제2 중간 데이터 요소를 생성하는 단계, 및
상기 하나 이상의 전이 연산들을 상기 제2 중간 데이터 요소에 적용하여 상기 출력 데이터의 제2 출력 데이터 요소를 생성하는 단계를 포함하는, 비일시적 컴퓨터 판독 가능 매체.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/489,734 | 2021-09-29 | ||
US17/489,734 US20230097279A1 (en) | 2021-09-29 | 2021-09-29 | Convolutional neural network operations |
PCT/US2022/043872 WO2023055586A1 (en) | 2021-09-29 | 2022-09-16 | Convolutional neural network operations |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240068718A true KR20240068718A (ko) | 2024-05-17 |
Family
ID=85718176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020247013117A KR20240068718A (ko) | 2021-09-29 | 2022-09-16 | 컨볼루션 신경망 연산 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20230097279A1 (ko) |
EP (1) | EP4409400A1 (ko) |
JP (1) | JP2024533636A (ko) |
KR (1) | KR20240068718A (ko) |
CN (1) | CN118043777A (ko) |
WO (1) | WO2023055586A1 (ko) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9361115B2 (en) * | 2012-06-15 | 2016-06-07 | International Business Machines Corporation | Saving/restoring selected registers in transactional processing |
US11029949B2 (en) * | 2015-10-08 | 2021-06-08 | Shanghai Zhaoxin Semiconductor Co., Ltd. | Neural network unit |
CN108009976A (zh) * | 2016-10-27 | 2018-05-08 | 超威半导体公司 | 用于图形处理单元(gpu)计算的超级单指令多数据(超级simd) |
US11113061B2 (en) * | 2019-09-26 | 2021-09-07 | Advanced Micro Devices, Inc. | Register saving for function calling |
US11281554B2 (en) * | 2020-03-17 | 2022-03-22 | Samsung Electronics Co., Ltd. | System and method for in-memory computation |
-
2021
- 2021-09-29 US US17/489,734 patent/US20230097279A1/en active Pending
-
2022
- 2022-09-16 JP JP2024518136A patent/JP2024533636A/ja active Pending
- 2022-09-16 KR KR1020247013117A patent/KR20240068718A/ko unknown
- 2022-09-16 EP EP22877130.9A patent/EP4409400A1/en active Pending
- 2022-09-16 CN CN202280064879.9A patent/CN118043777A/zh active Pending
- 2022-09-16 WO PCT/US2022/043872 patent/WO2023055586A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
JP2024533636A (ja) | 2024-09-12 |
US20230097279A1 (en) | 2023-03-30 |
CN118043777A (zh) | 2024-05-14 |
EP4409400A1 (en) | 2024-08-07 |
WO2023055586A1 (en) | 2023-04-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11403069B2 (en) | Accelerated mathematical engine | |
JP6764954B2 (ja) | プログラマブル二次元画像プロセッサ上の畳み込みニューラルネットワーク | |
US20170287103A1 (en) | Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform | |
KR20200081044A (ko) | 뉴럴 네트워크의 컨볼루션 연산을 처리하는 방법 및 장치 | |
KR20220029582A (ko) | 컴포징 가능한 신경망 커널 | |
KR20200110165A (ko) | 뉴럴 네트워크의 레이어들의 처리에서 제로 값(zero value)의 연산을 처리하는 방법 및 장치 | |
US11409840B2 (en) | Dynamically adaptable arrays for vector and matrix operations | |
JP7541515B2 (ja) | レイトレーシングにおけるトライアングル及びボックスの交差テストのための統合されたデータパス | |
JP2023519564A (ja) | 機械学習ジョブ中にメモリ圧縮転送を改善するための類似性に基づく特徴の並べ替え | |
KR20240068718A (ko) | 컨볼루션 신경망 연산 | |
US11113061B2 (en) | Register saving for function calling | |
US20230004385A1 (en) | Accelerated processing device and method of sharing data for machine learning | |
EP3839736B1 (en) | Unified programming interface for regrained tile execution | |
US20220206851A1 (en) | Regenerative work-groups | |
KR20230124598A (ko) | 높은 처리량 및 낮은 오버헤드 커널 개시를 위한 압축 커맨드 패킷 | |
US20220101110A1 (en) | Persistent weights in training | |
US9430304B2 (en) | Method and system for block scheduling control in a processor by remapping | |
US20230004871A1 (en) | Machine learning cluster pipeline fusion |