KR20220046794A - 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치 - Google Patents

신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치 Download PDF

Info

Publication number
KR20220046794A
KR20220046794A KR1020200129868A KR20200129868A KR20220046794A KR 20220046794 A KR20220046794 A KR 20220046794A KR 1020200129868 A KR1020200129868 A KR 1020200129868A KR 20200129868 A KR20200129868 A KR 20200129868A KR 20220046794 A KR20220046794 A KR 20220046794A
Authority
KR
South Korea
Prior art keywords
memory
data
tile
external memory
external
Prior art date
Application number
KR1020200129868A
Other languages
English (en)
Inventor
한정호
Original Assignee
주식회사 사피온코리아
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 사피온코리아 filed Critical 주식회사 사피온코리아
Priority to KR1020200129868A priority Critical patent/KR20220046794A/ko
Publication of KR20220046794A publication Critical patent/KR20220046794A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device
    • G06F1/3275Power saving in memory, e.g. RAM, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Image Processing (AREA)

Abstract

신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치를 개시한다.
본 실시예는, CNN(Convolutional Neural Network) 형태의 신경망에서 타일(tile) 단위로 데이터를 처리함에 있어서, 커널 기반(kernel-based) 연산 시 외부 메모리(external memory)와 온칩 메모리(on-chip memory) 간에 필요한 데이터를 읽거나 쓰기 위한 접근 과정을 효율화하기 위해, 하나의 타일을 다수의 부영역(sub-region)으로 분할하고, 내부 메모리에서 부영역 각각을 접근하는 순서와 상이한 순서를 기반으로 외부 메모리의 부영역 각각을 순차적으로 접근하는 방법 및 이를 위한 DMA(Direct Memory Access) 장치를 제공한다.

Description

신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치{Method and Apparatus for Efficient Memory Access in Neural Network Processing System}
본 개시는 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치에 관한 것이다. 더욱 상세하게는, CNN(Convolutional Neural Network) 형태의 신경망에서 타일(tile) 단위로 데이터를 처리함에 있어서, 커널 기반(kernel-based) 연산을 효율적으로 처리하기 위한 메모리 배치 방법 및 이를 위한 DMA 장치에 대한 것이다.
이하에 기술되는 내용은 단순히 본 발명과 관련되는 배경 정보만을 제공할 뿐 종래기술을 구성하는 것이 아니다.
영상처리에 적합한 것으로 알려진 신경망인 CNN(Convolutional Neural Network)의 HW(Hardware) 가속기(accelerator)의 경우, 입력 이미지를 복수의 작은 타일(tile)들로 분할하여 외부 메모리(external memory 또는 off-chip memory(오프칩 메모리)), 예컨대, DRAM(Dynamic Random Access Memory)에 저장한 후, 연산에 필요한 타일들을 온칩 메모리(on-chip memory, 또는 내부 메모리(internal memory))로 복사하는 방법이 이용된다. 이러한 방식이 널리 이용되는 이유는 방대한 입력 이미지 또는 신경망 연산 중 생성되는 특성 맵(feature map) 전체를 온칩 메모리에 저장시키는 것이 불가능할 수 있기 때문이다.
따라서, 입력 영상 또는 특성 맵을 다수의 작은 타일들로 분할하여 외부 메모리에 저장한 후, 연산에 필요한 타일들만 외부 메모리로부터 내부 메모리(온칩 메모리) 측으로 읽어와서 연산을 수행하고, 연산 결과를 다시 외부 메모리에 저장하는 과정이 반복될 수 있다. 외부 메모리와 내부 메모리 간에 진행되는 데이터의 무수한 이동은 신경망 HW 가속기의 성능을 저하시키는 주요 원인의 하나일 수 있다. 이러한 이동 과정에서 많은 전력이 소비되는데, 예를 들어, ALU(Arithmetic Logic Unit) 내 또는 ALU와 레지스터 파일(register file) 간의 연산 처리에 소비되는 전력보다 내부 메모리와 DRAM 간에 데이터 전송에 소비되는 전력이 수백 배인 것으로 알려져 있다(비특허문헌 1 참조). 또한, 메모리 대역폭의 제한으로 인해 신경망의 연산처리 성능이 제한되는 문제도 발생할 수 있다.
외부 메모리에 대한 접근을 최소화하기 위한 기술들이 존재한다. 그 중 일 예는, 온칩 메모리에 다수의 타일을 저장한 후, 한번 온칩 메모리로 복사한 데이터가 최대한 재이용되도록 연산 순서를 설정하는 방법이다. 또다른 예는, 온칩 메모리로 복사된 데이터를 이용하여 현재 레이어(layer)에 대한 계산을 끝낸 후 그 결과를 바로 오프칩 메모리 측으로 보내지 않고, 연속된 여러 레이어에 대한 계산을 수행하도록 연산 순서를 바꾸는 방법이다.
이러한 방법의 경우, 다수의 타일을 저장하기 위해 온칩 메모리의 크기가 커지는 단점이 있다. 또한, 이미지가 많은 타일로 분할된 경우, 온칩 메모리의 크기 제한으로 인해 외부 메모리에서 다시 온칩 메모리 측으로 필요한 데이터를 읽어 들인 후 연산을 수행해야 하는 문제가 발생한다. 예를 들어, 수평 방향으로 인접한 타일에 대해 먼저 커널 기반(kernel-based) 연산을 수행하는 경우, 수평방향으로 인접한 타일에 걸쳐진 커널 연산에서 데이터의 재활용이 가능하나, 커널의 일부가 위/아래에 인접한 타일에 걸쳐진 경우, 외부 메모리로부터 위/아래에 위치한 인접 타일을 읽어오는 과정이 필요할 수 있다.
한편, 외부 메모리에 대한 접근을 최소화하기 위한 다른 기술로서, 이미지 및 가중치(weight)에 데이터 압축(data compression) 기법을 적용함으로써, 외부 메모리에 저장되는 데이터양을 감소시키는 방법이 있다(비특허문헌 2 참조). 이러한 방법의 경우, 타일 전체의 픽셀들을 순서대로 압축하여 하나의 압축 스트림(compressed stream)으로 저장하기 때문에, 압축 스트림에 대한 압축해제(decompression)가 선행되어야 특정 위치에 있는 픽셀이 이용될 수 있다.
도 13 및 도 14의 예시는 행우선(row-major) 방식으로 외부 메모리에 순차적으로 데이터를 저장하는 기존 방식을 나타낸다. 도 13에 예시된 특성 맵을 구성하는 4 개의 타일(Tile_A, Tile_B, Tile_C 및 Tile_D)은 도 14에 예시된 바와 같이 메모리에 저장될 수 있다.
도 14의 (a)의 예시는 데이터에 대한 압축이 적용되지 않은 경우이다. 외부 메모리에 Tile_A의 크기만큼의 데이터가 행우선 방식으로 저장되고, 이웃한 Tile_B의 데이터가 Tile_A 뒤에 배치된다. 특성 맵이 가로 방향으로 16 개의 타일들을 포함하므로 Tile_C는 Tile_A로부터 16 개 타일에 해당하는 간격 후의 위치부터 저장되고, Tile_D는 Tile_C의 뒤에 연속으로 저장될 수 있다.
도 14의 (b)의 예시는 데이터에 대한 압축이 적용된 경우이다. 각 타일의 데이터를 행우선 방향으로 저장하되 압축 기법을 적용하여 압축된 데이터 스트림(compressed data stream, 이하 '압축 스트림')을 생성한 후, 압축 스트림이 메모리에 저장될 수 있다. 이때, 압축 스트림의 크기는 압축하기 전과 동일하거나 더 축소될 수 있으므로 각 타일의 데이터가 저장된 영역은 도 14의 (a)의 예시보다 축소될 수 있다. 편의상 압축된 각 타일의 시작 위치는 압축되지 않았을 경우의 각 타일의 시작 위치와 동일하게 설정되는 것으로 가정한다.
데이터 전송 효율을 위해 통상적으로 사용하는 외부 메모리(예컨대, DRAM)는 한번의 명령으로 인접한 어드레스 영역에 위치한 여러 데이터를 전달하는 버스트 리드/라이트(burst read/write)를 지원한다. 이는 버스트 방식으로 메모리에 접근해서 데이터를 읽고 쓰는 것이 싱글 리드/라이트(single read/write) 방식보다 탁월한 전송 효율을 보이기 때문이다.
커널 기반 연산 시 한 커널이 인접한 여러 타일 상에 걸치는 경우, 연산을 위해 다른 타일에서 필요한 픽셀들은 통상 적은 수의 행(row) 또는 열(column)이다(예컨대, 열 방향으로 커널의 폭-1, 행 방향으로 커널의 높이-1 만큼의 픽셀들이 필요할 수 있음). 통상 이용되는 방식으로 픽셀 데이터를 메모리에 저장하는 경우, 도 13 및 도 14의 예시와 같이 전체 이미지 또는 개별 타일들에 대해 행우선 방식을 기반으로 메모리의 연속된 영역에 데이터가 순차적으로 저장될 수 있다. 따라서, 특정 타일의 경계 측에 위치하는 적은 수의 행 또는 열에 해당되는 픽셀들에 접근하고자 하는 경우, 다수의 싱글 리드 명령을 이용해야 하고, 이에 따라 메모리 대역폭의 사용 효율이 감소한다는 문제가 발생할 수 있다.
또한, 외부 메모리에 저장된 데이터에 압축이 적용된 경우, 커널 기반 연산 시 다른 타일에 존재하는 적은 수의 픽셀에 대한 선별적 접근을 위해, 타일 전체에 대한 압축 스트림을 읽어 들인 후, 압축해제된 데이터가 온칩 메모리에 저장되야 한다는 문제가 있다.
따라서, 기존 방법들이 보이는 이러한 문제를 해결하면서도, 외부 메모리에 대한 접근을 감소시킬 수 있는 방법에 대한 고려가 필요하다.
비특허문헌 1: https://www.rle.mit.edu/eems/wp-content/uploads/2019/06/Tutorial-on-DNN-05-DNN-Accelerator-Architectures.pdf 비특허문헌 2: Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks", Yu-Hsin Chen et all, IEEE JSSC, 2017.
본 개시는, CNN(Convolutional Neural Network) 형태의 신경망에서 타일(tile) 단위로 데이터를 처리함에 있어서, 커널 기반(kernel-based) 연산 시 외부 메모리(external memory)와 온칩 메모리(on-chip memory) 간에 필요한 데이터를 읽거나 쓰기 위한 접근 과정을 효율화하기 위해, 하나의 타일을 다수의 부영역(sub-region)으로 분할하고, 내부 메모리에서 부영역 각각을 접근하는 순서와 상이한 순서를 기반으로 외부 메모리의 부영역 각각을 순차적으로 접근하는 방법 및 이를 위한 DMA(Direct Memory Access) 장치를 제공하는 데 주된 목적이 있다.
본 개시의 실시예에 따르면, 하드웨어(hardware) 장치가 수행하는 메모리 접근(memory access) 방법에 있어서, 피처 맵(feature map) 및 상기 피처 맵이 분할된 타일(tile)에 대한 정보를 포함하는 레이어(layer) 정보 및 상기 타일이 분할된 복수의 부영역(sub-region)에 대한 부영역 정보를 획득하는 과정; 외부 메모리 내 데이터에 대한 접근 명령을 획득하는 과정, 여기서 상기 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 상기 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함함; 상기 레이어 정보와 부영역 정보를 기반으로 적어도 하나의 내부명령 및 적어도 하나의 외부명령을 설정하는 과정; 및 상기 접근 명령이 상기 외부 메모리로부터의 데이터 읽기인 경우, 상기 적어도 하나의 외부명령에 기반하여 상기 외부 메모리로부터 읽은 데이터를 버퍼(buffer)에 저장하고, 상기 적어도 하나의 내부명령에 기반하여 상기 버퍼로부터 읽은 데이터를 내부 메모리에 저장하는 과정을 포함하는 것을 특징으로 하는 메모리 접근 방법을 제공한다.
본 개시의 다른 실시예에 따르면, 상기 접근 명령이 상기 외부 메모리에의 데이터 저장인 경우, 상기 적어도 하나의 내부명령에 기반하여 상기 내부 메모리로부터 읽은 데이터를 상기 버퍼에 저장하고, 상기 적어도 하나의 외부명령에 기반하여 상기 버퍼로부터 읽은 데이터를 상기 외부 메모리에 저장하는 과정을 더 포함하는 것을 특징으로 하는 메모리 접근 방법을 제공한다.
본 개시의 다른 실시예에 따르면, 피처 맵(feature map) 및 상기 피처 맵이 분할된 타일(tile)에 대한 정보를 포함하는 레이어(layer) 정보 테이블; 상기 타일이 분할된 복수의 부영역에 대한 정보를 포함하는 부영역(sub-region) 정보 테이블; 외부 메모리 내 데이터에 대한 접근 명령을 획득하는 제어부, 여기서 상기 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 상기 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함함; 상기 레이어 정보 테이블 및 부영역 정보 테이블에 기반하여 설정되는 내부명령을 저장하는 내부명령 큐; 상기 레이어 정보 테이블 및 부영역 정보 테이블에 기반하여 설정되는 외부명령을 저장하는 외부명령 큐; 상기 내부명령을 기반으로 내부 메모리에 접근하기 위한 내부어드레스를 생성하는 내부어드레스 생성기; 및 상기 외부명령을 기반으로 상기 외부 메모리에 접근하기 위한 외부어드레스를 생성하는 외부어드레스 생성기를 포함하는 것을 특징으로 하는 DMA(Direct Memory Access) 장치를 제공한다.
본 개시의 다른 실시예에 따르면, 리드 버퍼(read buffer)를 추가로 포함하여, 상기 접근 명령이 상기 외부 메모리로부터의 데이터 읽기인 경우, 상기 외부 어드레스를 기반으로 상기 외부 메모리에 대한 버스트 리드(burst read)를 수행하여 상기 외부 메모리로부터 순차적으로 읽은 데이터를 상기 리드 버퍼에 저장하고, 상기 리드 버퍼로부터 읽은 데이터를 상기 내부 어드레스를 기반으로 상기 외부 메모리에 저장된 순서와 상이한 순서로 상기 내부 메모리에 저장하는 것을 특징으로 하는 DMA 장치를 제공한다.
본 개시의 다른 실시예에 따르면, 라이트 버퍼(write buffer)를 추가로 포함하여, 상기 접근 명령이 상기 외부 메모리에의 데이터 저장인 경우, 상기 내부 어드레스를 기반으로 상기 내부 메모리로부터 읽은 데이터를 상기 라이트 버퍼에 저장하고, 상기 라이트 버퍼로부터 읽은 데이터를 상기 외부 어드레스를 기반으로 상기 외부 메모리에 대한 버스트 라이트(burst write)를 수행하여 상기 내부 메모리에 저장된 순서와 상이한 순서로 상기 외부 메모리에 순차적으로 저장하는 것을 특징으로 하는 DMA 장치를 제공한다.
본 개시의 다른 실시예에 따르면, 압축기(compressor) 및 압축해제기(decompressor)를 추가로 포함하여, 상기 외부 메모리에 저장되는 데이터에 압축 모드가 적용되는 경우, 상기 데이터에 대한 압축 또는 압축해제를 수행하는 것을 특징으로 하는 DMA 장치를 제공한다.
이상에서 설명한 바와 같이 본 실시예에 따르면, CNN 형태의 신경망에서 타일 단위로 데이터를 처리함에 있어서, 하나의 타일을 다수의 부영역으로 분할하고, 내부 메모리에서 부영역 각각을 접근하는 순서와 상이한 순서를 기반으로 외부 메모리의 부영역 각각을 순차적으로 접근하는 방법을 제공함으로써, 커널 연산을 위해 타일의 일부 영역이 필요 시, 해당되는 부영역의 데이터를 효율적으로 온칩 메모리 측으로 읽어오고, 커널 연산의 결과를 외부 메모리에 효율적으로 쓰는 것이 가능해지는 효과가 있다.
또한 본 실시예에 따르면, 신경망 내 연산을 실행하는 HW에서 외부 메모리와의 접근에 사용되는 소비전력을 감소시키고, 외부 메모리에 대한 접근을 위한 메모리 대역폭을 낭비 없이 효율적으로 이용하는 것이 가능해지는 효과가 있다.
도 1은 본 개시의 일 실시예에 따른 DMA 장치에 대한 개략적인 블록도이다.
도 2는 본 개시의 일 실시예에 따른 레이어 정보 테이블과 블록 정보 테이블을 나타내기 위한 예시도이다.
도 3a 및 도 3b는 본 개시의 일 실시예에 따른 가로/세로 두 방향으로 부영역을 분할하는 방식에 대한 예시도이다.
도 4a 및 도 4b는 본 개시의 다른 실시예에 따른 가로 또는 세로 한 방향으로 부영역을 분할하는 방식에 대한 예시도이다.
도 5는 본 개시의 일 실시예에 따른 부영역을 기반으로 외부 메모리에 데이터를 저장하는 방식에 대한 예시도이다.
도 6은 본 개시의 일 실시예에 따른 부영역을 기반으로 외부 메모리에 데이터를 저장하는 방식에 대한 예시도이다.
도 7a 내지 도 7c는 본 개시의 일 실시예에 따른 부영역을 기반으로 2 개의 타일에 대하여 외부 메모리로부터 데이터를 읽어오는 방식에 대한 예시도이다.
도 8은 본 개시의 일 실시예에 따른 부영역을 기반으로 4 개의 타일에 대하여 외부 메모리로부터 데이터를 읽어오는 방식에 대한 예시도이다.
도 9는 본 개시의 일 실시예에 따른 외부 메모리로부터 데이터를 읽어오는 방법에 대한 순서도이다.
도 10은 본 개시의 일 실시예에 따른 외부 메모리에 데이터를 저장하는 방법에 대한 순서도이다.
도 11은 HW 가속기를 포함하는 신경망 처리 시스템의 구성도이다.
도 12는 CNN에서 이용되는 콘볼루션 연산에 대한 예시도이다.
도 13은 행우선 방식으로 외부 메모리에 순차적으로 데이터를 저장하는 기존 방식에 대한 예시도이다.
도 14는 행우선 방식으로 외부 메모리에 순차적으로 데이터를 저장하는 기존 방식에 대한 예시도이다.
도 15a 내지 도 15c는 2 개의 타일에 대하여 행우선 방식으로 외부 메모리로부터 데이터를 읽어오는 기존 방식에 대한 예시도이다.
도 16은 4 개의 타일에 대하여 행우선 방식으로 외부 메모리로부터 데이터를 읽어오는 기존 방식에 대한 예시도이다.
이하, 본 발명의 실시예들을 예시적인 도면을 참조하여 상세하게 설명한다. 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 실시예들을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 실시예들의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.
또한, 본 실시예들의 구성요소를 설명하는 데 있어서, 제 1, 제 2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성요소를 다른 구성요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 명세서 전체에서, 어떤 부분이 어떤 구성요소를 '포함', '구비'한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 '…부', '모듈' 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
첨부된 도면과 함께 이하에 개시될 상세한 설명은 본 발명의 예시적인 실시형태를 설명하고자 하는 것이며, 본 발명이 실시될 수 있는 유일한 실시형태를 나타내고자 하는 것이 아니다.
본 실시예는 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치에 대한 내용을 개시한다. 보다 자세하게는, CNN(Convolutional Neural Network) 형태의 신경망에서 타일(tile) 단위로 데이터를 처리함에 있어서, 커널 기반(kernel-based) 연산 시 외부 메모리(external memory)와 온칩 메모리(on-chip memory) 간에 필요한 데이터를 읽거나 쓰기 위한 접근 과정을 효율화하기 위해, 하나의 타일을 다수의 부영역(sub-region)으로 분할하고, 내부 메모리에서 부영역 각각을 접근하는 순서와 상이한 순서를 기반으로 외부 메모리의 부영역 각각을 순차적으로 접근하는 방법 및 이를 위한 DMA(Direct Memory Access) 장치에 대한 것이다.
이하, 외부 메모리와 오프칩 메모리는 동일한 의미로 사용된다. 또한 내부 메모리와 온칩 메모리는 동일한 의미로 사용된다.
또한, 메모리에 대한 접근(access)은 메모리로부터 데이터를 읽어오거나 메모리에 데이터를 쓰는(또는 저장하는) 것을 의미한다.
메모리에 데이터를 저장할 때, 영상 전체 또는 타일과 같은 행렬 형태의 데이터는 행우선(row-major) 또는 열우선(column-major) 방식으로 연속된 메모리 주소 영역에 순차적으로 저장될 수 있다. 여기서, 행우선 방식은 한 행의 데이터를 순서대로 메모리에 먼저 배치한 후, 다음 행의 데이터를 연속해서 배치하는 방식이고, 열우선 방식은 한 열의 데이터를 순서대로 메모리에 먼저 배치한 후, 다음 열의 데이터를 연속해서 배치하는 방식이다.
외부 메모리는 DRAM(Dynamic Random Access Memory), 플래시 메모리(flash memory), HBM(High Bandwidth Memory) 등 데이터 전송 효율을 위해 연속된 메모리 주소에 모여 있는 다수의 데이터를 버스트(burst) 단위로 처리하는 모드(이하 '버스트 모드(burst mode)')를 지원하는 어느 메모리든 될 수 있다.
외부 메모리에 대하여 편의상 워드(word, 또는 비트(beat)라 함)의 데이터 폭(data width)은 8 Bytes이고, 최대 8 개의 워드를 포함하는 버스트 모드가 지원되는 것으로 가정한다. 이하, '8Bytes_burst_x'는 8 Bytes 워드 x 개를 처리하기 위한 버스트 모드를 의미한다. 예컨대, 8Bytes_burst_8을 지원하는 버스트 모드는 최대 64 Bytes를 한번에 처리할 수 있다.
또한, 외부 메모리는 분산되어 위치하는 픽셀들에 접근하기 위한 모드(이하 '싱글 모드(single mode)')도 지원하는 것으로 가정한다. 싱글 모드에서도 워드는 8 Bytes인 것으로 가정한다. 이하 '8Bytes_single'은 연속된 8 Bytes까지 처리할 수 있는 싱글 모드를 의미한다.
도 11은 HW 가속기를 포함하는 신경망 처리 시스템의 구성도이다.
신경망 처리 시스템(neural processing system)은 전체 시스템을 제어하기 위한 프로세서, 입/출력 데이터를 저장하기 위한 외부 메모리, 및 입력 데이터를 기반으로 추론(inference) 결과를 신속하게 산정하기 위한 신경망 가속기를 포함한다. 신경망 가속기는 신경망에서 자주 사용되는 주요 연산을 신속하게 처리하기 위한 전용 HW로서, 연산 단위(operational unit)들, 온칩 메모리, DMA(Direct Memory Access) 및 제어기의 전부 또는 일부를 포함한다. 여기서, 연산 단위들은 콘볼루션(convolution), 활성화(activation), 풀링(pooling), 정규화(normalization) 등의 연산을 빠르게 처리하고, 온칩 메모리는 각 연산 단위에 데이터를 전달한다. 또한 DMA는 온칩 메모리와 외부 메모리 간의 데이터 이동 기능을 수행하고, 제어기는 신경망 가속기 내의 각 구성요소 간 연결을 제어하는 기능을 수행한다.
대표적인 심층신경망(deep neural network) 방식으로는 CNN 계열과 RNN(Recurrent Neural Network) 계열의 알고리즘들이 존재한다. CNN 계열의 알고리즘에서는 다수의 입력 레이어(input layer)로부터 출력 레이어(output layer)의 생성 시에 많은 연산량을 필요로 하는 콘볼루션 연산이 공통적으로 이용된다. RNN 계열의 알고리즘에서는 대규모의 행렬 곱/합 연산이 공통적으로 이용된다. 이러한 연산들은 기 개발된 대부분의 신경망 처리 시스템에서 공통적으로 사용되는데, 많은 연산량을 요구하기 때문에 대부분의 신경망 가속기에서는 이들을 신속하게 처리하기 위해 많은 수의 연산기로 구성된 전용 연산 단위(computation unit)가 사용될 수 있다.
도 12는 CNN에서 이용되는 콘볼루션 연산에 대한 예시도이다.
도 12에 예시된 바는 CNN에서 이용되는 콘볼루션 연산을 나타내는데, 콘볼루션 커널(convolution kernel)의 크기는 3×3 이다. 특성 데이터(feature data) 내의 굵은 박스가 커널 연산에 이용되는 데이터 영역이다. 콘볼루션 커널(이하 '커널')로 표현된 3×3 크기의 가중치(weight)가 굵은 박스의 각 데이터들과 위치별로 승산된 후, 모두 더해져서 출력이 생성된다.
도 1은 본 개시의 일 실시예에 따른 DMA 장치에 대한 개략적인 블록도이다.
본 개시에 따른 DMA 장치(100)는 내부 메모리와 외부 메모리 간의 데이터 전송 시 타일 내의 부영역에 대한 정보를 이용하여 기 설정된 형태로 데이터를 재배열한다. DMA 장치(100)는 DMA 제어기(102), 카운터(104), 레이어 정보 테이블(106), 블록 정보 테이블(108), 내부 메모리 명령 큐(110, 이하 '내부명령 큐'), 외부 메모리 명령 큐(112, 이하 '외부명령 큐'), 내부 메모리 어드레스 생성기(114, 이하 '내부어드레스 생성기'), 외부 메모리 어드레스 생성기(116, 이하 '외부어드레스 생성기'), 리드 버퍼(read buffer, 118), 라이트 버퍼(write buffer, 120), 압축기(compressor, 122) 및 압축해제기(de-compressor, 124)의 전부 또는 일부를 포함할 수 있다.
도 1의 도시는 본 실시예에 따른 예시적인 구성이며, 레이어 정보 및 블록 정보의 구성, 외부 메모리의 구조 및 접근 방법, 내부명령 및 외부명령의 구조, 압축기 및 압축해제기의 구조 및 동작, DMA 제어기의 동작 등에 따라 다른 구성요소 또는 구성요소 간의 다른 연결을 포함하는 다양한 구현이 가능하다.
본 개시에 따른 레이어 정보 테이블(106)과 블록 정보 테이블(108)은, 도 2에 예시된 바와 같이 이미지 레이어 정보 및 블록 정보를 저장하기 위한 테이블이다. 여기서 이미지 레이어는 입력 영상 또는 특성 맵일 수 있고, 블록은 특성 맵을 구성하는 타일이 분할된 부영역을 의미한다.
도 2의 예시에서 Type_A와 Type_B는 본 개시에 따른 부영역의 분할 방식을 지정한다. 영상을 타일 단위로 분할하여 커널 연산을 적용 시, 커널의 어느 픽셀을 기준으로 출력 결과를 저장할 위치가 설정되는지에 따라 인접한 타일 간의 커널 연산에 이용하는 영역이 달라질 수 있다. Type_A는 도 3a, 도 3b, 도 4a 및 도 4b에 도시된 부영역 분할 방법 중 한 가지만을 이용하는 경우를 지원하고, Type_B는 도 3a 및 도 3b에 도시된 부영역 분할 방법을 모두 이용할 수 있다.
도 3a 및 도 3b에 도시된 바는, 커널 연산 시 하나의 타일이 가로/세로의 두 방향으로 공유되는 경우를 고려하여 본 개시에 따른 부영역을 분할하는 방식이다. 인접한 타일 간에서 커널 연산 시, 도 3a의 ①의 도시는 각각의 타일에서 우측 경계에 위치한 일부 열과 하단 경계에 위치한 일부 행이 이용되는 경우, 도 3a의 ②의 도시는 각각의 타일에서 우측 경계에 위치한 일부 열과 상단 경계에 위치한 일부 행이 이용되는 경우에 대한 부영역 분할 방법을 나타낸다. 또한, 도 3b의 ③의 도시는 각각의 타일에서 좌측 경계에 위치한 일부 열과 하단 경계에 위치한 일부 행이 이용되는 경우, 및 도 3b의 ④의 도시는 각각의 타일에서 좌측 경계에 위치한 일부 열과 상단 경계에 위치한 일부 행이 이용되는 경우에 대한 부영역 분할 방법을 나타낸다.
한편, 도 4a 및 도 4b에 도시된 바는, 커널 연산 시 하나의 타일이 가로 또는 세로 한 방향으로 공유되는 경우를 고려하여 본 개시에 따른 부영역을 분할하는 방식이다. 커널 연산 시 가로 방향의 타일들에 대해 연속적으로 계산한 후, 아래쪽 타일로 이동하여 연산을 진행하는 경우, 가로 방향으로 인접한 타일에 대해서는 내부 메모리에 저장된 값들이 재사용될 수 있다. 이러한 방식에서는 도 4a의 ①과 도 4a의 ②에 도시된 바와 같이 상/하단에 인접한 타일의 경계부분이 커널 연산에 필요한 부영역으로 분할될 수 있다. 반면, 커널 연산 시 세로 방향의 타일들에 대해 먼저 연산을 진행하고, 인접한 세로 방향의 타일들이 내부 메모리에 저장된 채로 재사용하는 경우, 도 4b의 ③과 도 4b의 ④에 도시된 바와 같이 좌/우측에 인접한 타일의 경계부분이 부영역으로 분할될 수 있다.
한편, 현재 레이어의 이미지를 타일화하여 저장할 때, 현재 레이어를 입력으로 받아서 다음 레이어에서 사용하기 위해 커널 연산을 수행하는 커널의 폭/높이 정보는 사전에 설정되므로, 다음 레이어에서 커널 연산을 수행하기 위해 타일 간에 공유되어야 하는 부영역의 크기도 추정될 수 있다.
도 2에 예시된 바와 같이, 레이어 정보 테이블(106)에 저장되는 레이어 정보는, 피처 맵 및 타일에 대한 정보를 포함한다. 먼저, 피처 맵에 대한 정보는 이미지의 전체 크기(Width와 Height), 외부 메모리에서 어디에 위치하는지를 나타내는 주소값(Address) 등을 포함한다. 다음, 타일에 대한 정보는, 타일의 크기(Width와 Height), 이미지 전체를 형성하는 타일의 개수에 대한 정보(NumW와 NumH), 외부 메모리에 저장 시 데이터 압축의 적용 여부를 나타내는 플랙(Compressed), 타일이 커널 연산 시 이용하는 일부 영역을 고려하여 부영역으로 분할된 채로 저장되는지를 나타내는 플랙(Type_A의 경우 SplitW와 SplitH, Type_B의 경우 SplitL, SplitR, SplitT 및 SplitB)의 전부 또는 일부를 포함한다. 여기서 분할 관련된 플랙은 커널 공유를 위해 타일에서 어느 방향으로 부영역을 분할하였는지를 나타낼 수 있다.
블록 정보 테이블(108)에 저장되는 블록 정보는, 도 2에 예시된 바와 같이 Type_A 또는 Type_B에 대한 부영역의 크기 정보 (W0, H0) 또는 (W0, W1, H0, H1)를 포함한다. 타일 1 개의 폭/높이 정보 및, 부영역 1 개의 폭/높이 정보 (W0, H0)를 기반으로 4 개의 각 부영역 각각의 폭/높이가 산정될 수 있다. 또는 가로/세로 방향으로 몇 픽셀씩 분할했는지를 나타내는 정보 (W0, W1, H0, H1)를 저장함으로써 추가적인 연산 없이 부영역의 폭/높이 정보가 추출될 수 있다. 부영역 정보는 모든 타일에서 공통적으로 이용하는 정보이므로, 1 개의 세트가 저장되는 것으로 충분하다.
또한, 압축 모드가 이용되는 경우, 블록 정보는 부영역 각각에 대한 압축 스트림의 길이와 관련된 정보를 저장할 수 있다. 도 2의 예시에서 어드레스 오프셋 또는 압축 스트림의 길이가 이러한 용도로 사용될 수 있다. 예컨대, 각 부영역에 대한 압축 스트림의 시작 메모리 주소값에 해당하는 어드레스 오프셋을 저장함으로써, 이웃한 압축 스트림의 시작 주소값과의 차이로부터 압축 스트림의 길이가 산정될 수 있다. 또는, 부영역 각각에 대하여 각 압축 스트림의 길이 정보를 저장함으로써, 타일의 시작 주소값에 각 부영역의 압축 스트림의 길이를 가산하여 부영역 각각의 압축 스트림이 시작하는 주소값이 추출될 수 있다.
한편 압축 스트림의 길이와 관련된 정보는 타일의 개수에 비례하여 증가하는 정보이다. 따라서, 블록 정보의 전부 또는 일부(압축 스트림의 길이와 관련된 정보)를 온칩 메모리에 모두 보관하는 대신 외부 메모리에 저장한 후, 현재 타일(또는 추후 이용이 예상되는 타일)의 처리 시 필요한 정보가 사용될 수 있다. 도 2의 예시에서 타일에 대한 정보는 블록 정보의 주소(InfoMapAddr)를 포함하는데, 이 주소는 블록 정보의 전부 또는 일부가 저장된 외부 메모리의 위치를 지정한다.
도 2의 예시에서, 레이어 정보 및 블록 정보의 하단에 표기된 구성요소 각각에 대한 크기는 하나의 예시일 뿐이며, 신경망이 적용되는 분야에 따라 가변될 수 있다.
본 개시에 따른 내부명령 큐(110)과 외부명령 큐(112)는 내부 메모리 또는 외부 메모리를 접근하기 위한 메모리 접근(리드 또는 라이트) 명령을 수행 순서대로 포함한다. 특히, 도 3a 및 도 3b에 도시된 바와 같은, 본 실시예에 따른 부영역 간의 관계를 기반으로 접근 명령의 순서가 결정될 수 있다.
표 1 및 표 2는 외부명령 큐(110)와 내부명령 큐(112) 각각에 저장되는 접근 명령에 대한 예시이다.
Figure pat00001
Figure pat00002
본 실시예에 따른 표 1 및 표 2의 예시는, 도 3a 및 도 3b에 도시된 부영역 간의 관계, 및 외부 메모리로부터 내부 메모리 측으로 커널 연산에 필요한 타일 데이터를 이동시키는 경우를 가정한 명령들이다. 표 1 및 표 2의 예시에서는, Tile_A의 이동이 가정된다. 또한, 표 1과 표 2의 예시는, 외부 메모리의 경우 여러 위치에 분산된 데이터를 여러 차례 읽는 것보다 연속된 메모리 영역에 배치된 데이터를 버스트 리드 명령을 이용하여 읽는 것이 효율적이고, 내부 메모리의 경우 임의의 위치에 접근하여 데이터를 읽고 쓰는 것이 용이하다는 특징에 기반하는 명령들이다.
먼저, 커널 연산을 위해 전체 타일의 데이터가 필요한 경우, 해당 타일 데이터는 외부 메모리의 연속된 영역에 존재하므로 타일의 시작 주소부터 Tile_A의 크기에 해당되는 데이터를 읽을 수 있는 한 개의 버스트 리드 명령이 외부명령 큐(112)에 넣어진다. 이때, 외부 메모리로부터 읽어온 데이터는 A0, A1, A2 및 A3의 순서가 되는데, A1과 A2를 하나의 사각형 영역으로 볼 수 있기 때문에 내부 메모리를 위한 명령은 3 개로 분할되어 내부명령 큐(110)에 넣어질 수 있다.
다음, 타일의 우측 부영역들이 필요한 경우, 외부 메모리로부터 A1과 A2의 영역을 읽게 되는데 이 두 영역은 연속된 메모리 주소에 들어 있으므로 한 개의 버스트 리드 명령이 외부명령 큐(112)에 넣어진다. 읽어온 값을 저장하기 위한 내부 메모리 영역은 A1과 A2를 하나의 사각형 영역으로 볼 수 있기 때문에, 한 개의 명령이 내부명령 큐(110)에 넣어진다.
다음, 타일의 하단 부영역들이 필요한 경우, 외부 메모리로부터 A2와 A3에 해당되는 데이터를 읽게 되는데 이 두 영역의 데이터는 연속된 메모리 주소에 있기 때문에 한 개의 버스트 리드 명령이 외부명령 큐(112)에 넣어지고, 내부 메모리에 저장할 때에는 A2에 해당되는 영역을 먼저 저장한 후 A3에 대한 영역을 저장해야 하기 때문에 2 개의 명령이 내부명령 큐(110)에 넣어진다.
다음, 타일의 우하단 부영역이 필요한 경우, 외부 메모리로부터 A2 영역만 읽어오면 되기 때문에 한 개의 버스트 리드 명령이 외부명령 큐(112)에 넣어지고, 외부 메모리에서 읽어온 데이터를 내부 메모리의 한 영역에 저장하기 위해 한 개의 명령이 내부명령 큐(110)에 넣어진다.
한편, 내부명령 큐(110)과 외부명령 큐(112)로부터 명령을 하나씩 꺼내어 기 설정된 수의 리드/라이트(read/write) 동작을 수행 시, DMA 장치(100)는 카운터(104), 리드 버퍼(118), 라이트 버퍼(120), 내부어드레스 생성기(114), 외부어드레스 생성기(116) 등을 이용할 수 있다. 또한, 데이터가 압축된 채로 외부 메모리에 저장되는 경우 데이터 압축을 위한 압축기(122) 및 압축해제를 위한 압축해제기(124)가 이용될 수 있다.
예컨대, 외부 메모리로부터 내부 메모리 측으로 데이터를 읽어오는 경우, DMA 장치(100)는 외부명령 큐(112)로부터 명령을 획득하여 외부어드레스 생성기(116)를 초기화한 후, 외부어드레스 생성기(116)가 생성하는 외부 어드레스를 기반으로 외부 메모리에 대한 버스트 리드를 수행하여 외부 메모리로부터 순차적으로 읽은 데이터를 리드 버퍼(118)에 저장한다. 이때 압축 모드가 적용되는 경우, DMA 장치(100)는 압축해제기(124)를 이용하여 외부 메모리로부터 획득된 데이터를 압축해제하여 리드 버퍼(118)에 저장할 수 있다. 또한, DMA 장치(100)는 내부명령 큐(110)로부터 명령을 획득하여 내부어드레스 생성기(114)를 초기화한 후, 리드 버퍼(118)로부터 읽은 데이터를 내부어드레스 생성기(114)가 생성하는 내부 어드레스를 기반으로 외부 메모리에 저장된 순서와 상이한 순서로 내부 메모리에 저장한다.
또한, 내부 메모리로부터 외부 메모리에 데이터를 저장하는 경우, DMA 장치(100)는 내부명령 큐(110)로부터 명령을 획득하여 내부어드레스 생성기(114)를 초기화한 후, 내부어드레스 생성기(114)가 생성하는 내부 어드레스를 기반으로 내부 메모리로부터 읽은 데이터를 라이트 버퍼(120)에 저장한다. 이때 압축 모드가 적용되는 경우, DMA 장치(100)는 압축기(126)를 이용하여 내부 메모리로부터 획득된 데이터를 압축하여 라이트 버퍼(120)에 저장할 수 있다. DMA 장치(100)는 외부명령 큐(112)로부터 명령을 획득하여 외부어드레스 생성기(116)를 초기화한 다. 또한, DMA 장치(100)는 라이트 버퍼(120)로부터 읽은 데이터를 외부어드레스 생성기(116)가 생성하는 외부 어드레스를 기반으로 외부 메모리에 대한 버스트 라이트(burst write)를 수행하여 내부 메모리에 저장된 순서와 상이한 순서로 외부 메모리에 순차적으로 저장한다.
본 개시에 따른 DMA 제어기(102)는 DMA 장치(100) 내의 각 블록들을 제어한다. DMA 제어기(102)는 신경망 가속기의 제어기로부터 레이어 정보 및 블록 정보를 획득하고, 데이터의 읽기를 지시하는 읽기 명령 또는 외부 메모리에의 데이터의 저장을 지시하는 저장 명령을 획득할 수 있다. 여기서 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 상기 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함할 수 있다.
또한, 레이어 정보 및 블록 정보에 근거하여 DMA 제어기(102)는 표 1 또는 표 2에 예시된 바와 같은 접근 명령들을 외부명령 큐(112) 또는 내부명령 큐(100)에 저장함으로써, 획득된 지시를 수행할 수 있다.
한편, 도 2에 예시된 레이어 정보는 하나의 레이어에 대한 공통 정보이므로, 그 하부 정보인 타일에 대한 정보는 타일의 순차적인 처리를 위한 인덱스를 포함하지 않는다. 본 개시에서는, DMA 제어기(102)가 획득하는 읽기 명령 또는 저장 명령에 이동의 대상이 되는 타일에 대한 인덱스가 포함될 수 있다.
도 5 및 도 6은 본 개시의 일 실시예에 따른 부영역을 기반으로 외부 메모리에 데이터를 저장하는 방식에 대한 예시도이다.
도 5의 예시는 각각의 타일에 대해 커널 연산 시 인접한 타일에서 필요로 하는 영역들을 타일 내의 4 개의 부영역으로 분할한 후(도 3a의 ①의 예시 참조), 부영역 각각을 외부 메모리에 순차적으로 저장하는 방식을 나타낸다. 편의상 특성 맵의 크기를 512×512로 설정하고, 각 타일의 크기를 32×32로 설정하였으나, 반드시 이에 한정하는 것은 아니며 특성 맵 및 각 타일의 크기는 신경망이 적용되는 분야에 따라 변경될 수 있다.
도 5에 예시된 특성 맵을 구성하는 4 개의 타일(Tile_A, Tile_B, Tile_C 및 Tile_D)은 도 6에 예시된 바와 같이 메모리에 저장될 수 있다. 이때, 하나의 타일을 구성하는 4 개의 부영역은 도 5의 예시와 같은 내부 메모리에서의 상호 위치 관계를 갖는데, 아래 첨자를 기준으로 행우선 방식에 따라 부영역 0, 부영역 1, 부영역 3 및 부영역 2의 순서로 위치하여, 좌상단의 부영역 0을 기준으로 4 개의 부영역이 시계방향(clockwise) 순서를 갖는다. 4 개의 부영역은 도 6에 예시된 바와 같은 차례(예컨대, 부영역 0, 부영역 1, 부영역 2 및 부영역 3의 순서)로 외부 메모리에 순차적으로 저장될 수 있다. 이때, 각각의 부영역은 내부 메모리와 외부 메모리에서 상이한 배열을 갖지만, 부영역 내부의 필섹들의 순서는 행우선 방식을 따른다.
한편, 도 6의 (a)의 예시는 외부 메모리에 데이터 저장 시 데이터 압축이 적용되지 않은 경우이고, 도 6의 (b)의 예시는 외부 메모리에 데이터를 저장 시 부영역에 각각에 데이터 압축이 적용된 경우이다.
도 6의 예시에서, DMA 장치(100)는 버스트 리드 명령을 이용하여 외부 메모리로부터 부영역 0 내지 부영역 3을 읽을 수 있다. 또한, 커널 연산을 위해 타일의 우측에 해당하는 적은 수의 열 데이터가 필요한 경우 DMA 장치(100)는 버스트 리드 명령을 이용하여 부영역 1 및 부영역 2를 읽을 수 있다. 또한, 커널 연산을 위해 타일의 하단에 해당하는 적은 수의 행 데이터가 필요한 경우 DMA 장치(100)는 버스트 리드 명령을 이용하여 부영역 2 및 부영역 3을 읽을 수 있다.
도 6의 (b)의 예시에서 Tile_A에 대한 압축 스트림의 뒤에 바로 Tile_B에 대한 압축 스트림을 붙여서 저장할 수도 있으나, 타일 각각에 대한 압축 스트림의 시작 위치와 크기가 추가적으로 저장되어야 하고, 이에 따른 메모리 접근 과정에 오버헤드(overhead)가 발생할 수 있다. 이러한 오버헤드의 처리는 본 개시와 밀접한 관계가 없으므로, 이하, 편의상 압축된 각 타일의 시작 위치는 압축되지 않았을 경우의 각 타일의 시작 위치와 동일하게 설정되는 것으로 가정한다. 도 6의 (b)는 이러한 설정에 따른 외부 메모리 배치를 나타내며, 빗금친 영역은 사용되지 않는 영역을 나타낸다. 즉, 외부 메모리 저장 시 적용되는 타일별 데이터 압축은, 사용되는 외부 메모리의 크기를 감소시키는 것보다는 외부 메모리에 대한 접근 회수를 감소시키기 위한 것이 주된 용도인 것으로 가정한다.
한편, 도 5 및 도 6의 예시는 행우선 방식을 한정하고 있으나, 본 개시의 다른 실시예에 있어서, 열우선 방식이 적용될 수 있다. 따라서, 내부 메모리에서 아래 첨자를 기준으로 열우선 방식에 따라 부영역 0, 부영역 1, 부영역 3 및 부영역 2의 순서로 위치하여, 좌상단의 부영역 0을 기준으로 4 개의 부영역이 반시계방향(counterclockwise) 순서를 갖는다. 4 개의 부영역은 부영역 0, 부영역 1, 부영역 2 및 부영역 3의 순서로 외부 메모리에 순차적으로 저장될 수 있다. 이때, 각각의 부영역은 내부 메모리와 외부 메모리에서 상이한 배열을 갖지만, 부영역 내부의 필섹들의 순서는 열우선 방식을 따른다.
이하, 도 7a 내지 도 7c, 및 도 8을 이용하여 경계 근처에 위치한 행 또는 열에 포함된 픽셀로 인한 데이터 이동에 대하여 자세히 설명한다.
도 7a 내지 도 7c는 본 개시의 일 실시예에 따른 부영역을 기반으로 2 개의 타일에 대하여 외부 메모리로부터 데이터를 읽어오는 방식에 대한 예시도이다.
도 7a 내지 도 7c의 예시는 커널 연산에 필요한 영역이 2 개의 타일 간에 걸쳐서 위치하는 경우를 나타낸다. 예컨대, 도 7a의 예시는 Tile_B에 대한 커널 연산 결과를 생성할 때, 대상이 되는 특성 데이터가 커널이 Tile_A의 우측 경계와 Tile_B에 걸쳐는 경우를 나타낸다.
도 7b의 예시는 Tile_A와 Tile_B에서 필요한 데이터를 외부 메모리로부터 내부 메모리로 이동 시, 이동되는 데이터양 및 외부 메모리에 대한 접근 명령의 회수를 나타낸다. 편의상 도 12에 예시된 바와 같이 커널의 폭은 3, 커널을 구성하는 하나의 픽셀은 1 byte인 것으로 가정한다. 외부 메모리는 최대 8Bytes_burst_8까지 처리할 수 있는 버스트 모드를 지원하는 것으로 가정한다. 커널 연산을 위해 Tile_A에서 필요한 부분은 본 개시에 따른 부영역인 A1과 A2에 위치하는 데이터들이다.
도 7b의 예시와 같이, 부영역인 A1과 A2는 외부 메모리에 연속하여 위치하므로 DMA 장치(100)는 버스트 리드 명령을 이용하여 Tile_A 내의 A1과 A2를 순차적으로 읽어서 내부 메모리에 저장할 수 있다. Tile_B의 경우 전체 타일에 대한 데이터가 모두 필요하기 때문에, 버스트 리드 명령을 이용하여 외부 메모리로부터 B0, B1, B2 및 B3의 순서로 데이터가 읽어 들여진 후 내부 메모리에 저장된다. 이때 Tile_A의 A1과 A2를 읽기 위해 1 번의 8Bytes_burst_8 버스트 리드 명령이 사용되고, Tile_B의 B0, B1, B2 및 B3의 데이터를 읽기 위해 총 16 번의 8Bytes_burst_8 버스트 리드 명령이 사용된다. 따라서 필요한 타일 데이터를 모두 읽기 위해 총 17 번의 외부 메모리에 대한 버스트 리드 명령이 사용되고, 이때 이동되는 데이터양은 1,088 Bytes이다.
도 7c의 예시는, 외부 메모리에 저장된 데이터에 압축이 적용된 경우, Tile_A와 Tile_B에서 필요한 데이터를 내부 메모리로 이동 시, 이동되는 데이터양 및 외부 메모리에 대한 접근 명령의 회수를 나타낸다.
도 7c의 예시에서 데이터가 외부 메모리에 압축 스트림 형태로 저장되나, 부영역 각각에 대하여 압축 스트림의 시작 위치를 산정할 수 있는 부가 정보(도 2에 예시된 압축 스트림의 길이 관련 정보)를 기반으로 DMA 장치(100)는 커널 연산을 위해 필요한 A1과 A2를 선택적으로 외부 메모리에서 읽어올 수 있다. 반면, 도 14의 (b)에 예시된 기존 방식에서는, 하나의 타일을 하나의 압축 스트림으로 저장하므로 커널 연산 시 필요한 일부 부분만을 외부 메모리에서 읽어오는 것이 불가능하다. 따라서 도 7c에 예시에서, 버스트 리드 명령을 사용하여 커널 연산을 위해 필요한 Tile_A의 일부 영역인 A1과 A2, 및 Tile_B 전체(B0, B1, B2 및 B3)를 읽어오는 것이 가능하다. 압축 기법의 적용에 따른 압축률은 타일별로 다를 수 있으나 도 7c의 예시에서는 편의상 70 %인 것으로 가정한다.
Tile_B 전체에 대한 압축 스트림의 크기는 32×32×0.7 = 717 Bytes이다. Tile_B를 읽어오기 위해 11 번의 8Bytes_burst_8 버스트 리드, 1 번의 8Bytes_burst_2 버스트 리드 등 총 12 번의 버스트 리드 명령이 사용된다. Tile_A에서 필요한 A1과 A2,에 대한 압축 스트림의 크기는 2×32×0.7 = 45 Bytes이므로 이를 읽어오기 위해 1 번의 8Bytes_burst_6 버스트 리드 명령이면 충분하다. 따라서, 외부 메모리를 접근하기 위해 총 13 번의 버스트 리드 명령이 필요하고, 이때 이동되는 데이터양은 762 Bytes이다.
도 8은 본 개시의 일 실시예에 따른 부영역을 기반으로 4 개의 타일에 대하여 외부 메모리로부터 데이터를 읽어오는 방식에 대한 예시도이다.
도 8의 예시는 커널 연산에 필요한 영역이 4 개의 타일 간에 걸쳐서 위치하는 경우를 나타낸다. 도 8의 예시에서는, 커널 연산을 위해 Tile_A에서 A2 영역이, Tile_B에서 B3와 B2 영역이, Tile_C에서 C1와 C2 영역이, Tile_D에서 D0, D1, D2 및 D3 영역이 이용된다.
외부 메모리에 데이터 저장 시 압축이 적용되지 않은 경우, 도 7b의 예시와 동일한 가정 하에서 외부 메모리로부터 커널 연산에 필요한 데이터를 내부 메모리로 이동시키기 위해 19 번의 리드 명령이 필요하고, 이때 이동되는 데이터양은 1,156 Bytes이다.
외부 메모리에 저장된 데이터에 압축이 적용된 경우, 도 7c의 예시와 동일하게 한 타일 내에서 커널 연산에 필요한 일부 영역의 데이터를 선택하여 외부 메모리에서 읽어올 수 있다. 압축률 70 %를 포함하여 도 7c의 예시와 동일한 가정 하에서, 외부 메모리에 접근하기 위해 15 번의 리드 명령이 필요하고, 외부 메모리로부터 읽어오는 데이터양은 810 Bytes이다.
한편, 도 7a 내지 도 7c, 및 도 8의 예시는 본 개시에 따른 부영역을 기반으로 외부 메모리로부터 데이터를 읽어서 내부 메모리로 이동시키는 과정을 나타내나, 본 개시의 다른 실시예에 있어서, DMA 장치(100)는 부영역을 기반으로 내부 메모리로부터 데이터를 읽어서 외부 메모리 측으로 이동시킬 수 있다.
또한, 도 4a 및 도 4b의 예시와 같이 각각의 타일에 대해 커널 연산 시 인접한 타일에서 필요로 하는 영역들을 타일 내의 2 개의 부영역으로 분할하는 경우는, 도 7a 내지 도 7c의 예시와 유사한 경우일 수 있으므로, 더 이상의 상세한 설명은 생략한다.
도 7a 내지 도 7c, 및 도 8에 예시된 본 개시에 따른 성능와 비교하기 위해, 도 13 및 도 14에 예시된 기존 방식에 따른 성능을 설명한다.
커널 기반 연산의 수행 시 커널이 다수의 타일 경계에 걸쳐서 위치하는 경우, 이러한 경계 근처에 위치한 행 또는 열에 포함된 픽셀들은 연속된 메모리 주소에 순차적으로 위치하지 않고, 메모리의 여러 위치에 분산되어 존재할 수 있다. 메모리의 여러 위치에 분산된 픽셀들에 접근하기 위해 기존 방식에서는 버스트 모드 대신 싱글 모드를 여러 차례 적용해야만 할 수 있으므로 외부 메모리와 내부 메모리 간에 데이터 이동 회수가 증가될 수 있다.
먼저, 도 15a의 예시는, 커널 연산에 필요한 영역이 2 개의 타일 Tile_A와 Tile_B 간에 걸쳐서 위치하는 경우 행우선 방식으로 외부 메모리로부터 데이터를 읽어오는 기존 방식을 나타낸다.
도 15b의 예시는 Tile_A와 Tile_B에서 필요한 데이터를 외부 메모리로부터 내부 메모리로 이동 시, 이동되는 데이터양 및 외부 메모리에 대한 접근 명령의 회수를 나타낸다. 커널, 픽셀 및 버스트 모드에 대한 가정은 도 7b와 동일한 것으로 가정한다. 도 15b의 예시에서 커널 연산에 필요한 Tile_A의 우측 2 개의 열에 위치한 픽셀들은 연속된 메모리 영역에 순차적으로 위치하지 않으므로, 외부 메모리로부터 데이터를 읽어오기 위해 32 번의 싱글 리드 명령의 수행이 필요하다. 반면, Tile_B에 해당되는 데이터는 외부 메모리의 연속된 영역에 위치하기 때문에, 16 번의 버스트 리드 명령을 이용하여 내부 메모리 측으로 읽어올 수 있다. 따라서, 커널 연산에 필요한 데이터를 이동시키기 위해 필요한 외부 메모리 리드 명령은 48 회이고, 외부 메모리로부터 읽어오는 데이터양은 1,088 Bytes이다.
도 15c의 예시는 외부 메모리에 저장된 데이터에 압축이 적용된 경우를 나타낸다. 압축된 데이터인 경우, 커널 연산을 위한 Tile_A의 우측 2 열에 해당되는 픽셀과 Tile_B에 해당되는 데이터를 내부 메모리로 이동시키기 위해 외부 메모리에 저장된 Tile_A와 Tile_B에 대한 압축 스트림 전부를 읽은 후, 압축해제된 데이터가 내부 메모리에 저장된다. 압축률 70 %를 포함하여 도 7c의 예시와 동일한 가정 하에서, 외부 메모리를 접근하기 위해 모두 24 번의 버스트 명령이 필요하고, 읽어오는 데이터양은 1,434 Bytes이다.
다음, 도 16의 예시는 커널 연산에 필요한 영역이 4 개의 타일에 걸쳐서 위치하는 경우 행우선 방식으로 외부 메모리로부터 데이터를 읽어오는 기존 방식을 나타낸다. 도 16의 예시에서는, Tile_D에서의 커널 연산을 위해 Tile_A에서는 우하단에 위치한 2×2 크기의 영역, Tile_B에서는 최하단에 위치한 2 행(커널 높이-1), 및 Tile_C에서는 우상단에 위치한 2 열(커널 폭-1)에 해당되는 픽셀들이 필요하다.
외부 메모리에 저장된 데이터에 압축이 적용되지 않은 경우, 도 7b의 예시와 동일한 가정 하에서 외부 메모리로부터 커널 연산에 필요한 데이터를 내부 메모리로 이동시키기 위해 51 번의 리드 명령이 필요하고, 이때 이동되는 데이터양은 1,156 Bytes인 것으로 산정된다. 한편, 외부 메모리에 저장된 데이터에 압축이 적용된 경우, 커널 연산에 필요한 Tile_A, Tile_B 및 Tile_C의 경계에 위치한 행/열에 해당되는 데이터를 추출하기 위해 Tile_A, Tile_B 및 Tile_C의 압축 스트림 전체가 외부 메모리에서 읽어 들여진 후, 압축해제된 데이터가 내부 메모리에 저장된다. 압축률 70 %를 포함하여 도 7c의 예시와 동일한 가정 하에서, 외부 메모리를 접근하기 위해 48 번의 리드 명령이 필요하고, 외부 메모리로부터 읽어오는 데이터양은 2,868 Bytes인 것으로 산정된다.
표 3은, 도 7a 내지 도 7c, 및 도 8의 예시에 따른 본 실시예의 성능, 및 도 15a 내지 도 15c, 및 도 16의 예시에 따른 기존 방식의 성능을 비교한 결과를 나타낸다. 표 3에서는 이동되는 데이터양 및 외부 메모리에 대한 접근 명령의 회수의 측면에서 상호 성능이 비교된다.
Figure pat00003
본 실시예를 적용하는 경우, 커널 연산에 필요한 데이터를 내부 메모리 측으로 이동시킴에 있어서, 외부 메모리에 대한 리드 명령의 회수가 기존 방식과 대비하여 약 31.3% ~ 54.1% 정도로 감소될 수 있다. 또한, 외부 메모리로부터 읽어오는 데이터양은 기존 방식과 대비하여 최대 28.3% 정도로 감소될 수 있다.
이상에서 설명한 바와 같이 본 실시예에 따르면, CNN 형태의 신경망에서 타일 단위로 데이터를 처리함에 있어서, 하나의 타일을 다수의 부영역으로 분할하고, 내부 메모리에서 부영역 각각을 접근하는 순서와 상이한 순서를 기반으로 외부 메모리의 부영역 각각을 순차적으로 접근하는 방법을 제공함으로써, 커널 연산을 위해 타일의 일부 영역이 필요 시, 해당되는 부영역의 데이터를 효율적으로 온칩 메모리 측으로 읽어오고, 커널 연산의 결과를 외부 메모리에 효율적으로 쓰는 것이 가능해지는 효과가 있다.
또한 본 실시예에 따르면, 신경망 내 연산을 실행하는 HW에서 외부 메모리와의 접근에 사용되는 소비전력을 감소시키고, 외부 메모리에 대한 접근을 위한 메모리 대역폭을 낭비 없이 효율적으로 이용하는 것이 가능해지는 효과가 있다.
이하, 도 9 및 도 10의 도시를 이용하여, DMA 장치(100)가 외부 메모리를 접근하는 방법을 설명한다.
도 9는 본 개시의 일 실시예에 따른 외부 메모리로부터 데이터를 읽어오는 방법에 대한 순서도이다.
DMA 장치(100)는 레이어 정보 및 블록 정보를 획득한다(S900).
도 2에 예시된 바와 같이 레이어 정보는 피처 맵(feature map) 및 타일(tile)에 대한 정보를 포함하고, 블록 정보는 타일이 분할된 복수의 부영역(sub-region)에 대한 정보이다. 먼저, 피처 맵에 대한 정보는 피처 맵의 크기, 피처 맵이 외부 메모리에서 저장되는 위치 등을 포함한다. 다음, 타일에 대한 정보는 타일의 크기, 피처 맵을 형성하는 타일의 개수, 압축 모드의 적용 여부를 나타내는 플랙, 타일의 부영역 분할 여부를 나타내는 플랙의 전부 또는 일부를 포함한다. 여기서 분할 관련된 플랙은 커널 공유를 위해 타일에서 어느 방향으로 부영역을 분할하였는지를 나타낸다.
블록 정보는 부영역의 크기를 포함하고, 부영역에 압축 모드가 적용되는 경우 압축 스트림의 길이와 관련된 정보를 포함할 수 있다.
DMA 장치(100)는 외부 메모리로부터의 데이터의 읽기를 지시하는 읽기 명령을 획득한다(S902). 여기서, 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함할 수 있다.
하나의 타일을 구성하는 복수의 부영역의 크기, 위치 및 개수는 적어도 2 개의 이웃 타일 간 경계에서 커널 연산에 필요한 영역에 근거하여 설정될 수 있다. 또한, DMA 장치(100)는 이러한 부영역 각각에 대한 선별적 접근을 수행할 수 있다.
한편, 하나의 타일을 구성하는 복수의 부영역 각각은, 도 5 및 도 6의 예시된 바와 같이, 하나의 타일의 좌상단에 위치한 부영역을 기준으로 시계방향(clockwise)으로 외부 메모리의 연속된 주소에 순차적으로 저장될 수 있다. 또한, 본 개시의 다른 실시예에 있어서, 하나의 타일을 구성하는 복수의 부영역 각각은, 하나의 타일의 좌상단에 위치한 부영역을 기준으로 반시계방향(counterclockwise)으로 외부 메모리의 연속된 주소에 순차적으로 저장될 수 있다. 이러한 외부 메모리 상의 부영역 배열을 기반으로 DMA 장치(100)는 커널 연산에 필요한 부영역을 읽어오기 위해 외부 메모리에 대한 버스트 리드를 수행할 수 있다.
DMA 장치(100)는 레이어 정보 및 블록 정보를 기반으로 적어도 하나의 내부 명령 및 적어도 하나의 외부명령을 설정한다(S904).
읽기 명령에 대한 내부명령 및 외부명령의 예시는 표 1 및 표 2에 나타낸 바와 같다. 적어도 하나의 외부명령을 기반으로 DMA 장치(100)는 외부 메모리에 대한 버스트 리드(burst read)를 수행하여 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 순차적으로 읽어올 수 있다.
또한, 적어도 하나의 내부명령을 이용하여 DMA 장치(100)는 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 외부 메모리에 저장된 순서와 상이한 순서로 내부 메모리에 저장할 수 있다.
DMA 장치(100)는 적어도 하나의 외부명령에 기반하여 외부 메모리로부터 읽은 데이터를 리드 버퍼(read buffer)에 저장한다(S906). 압축 모드가 적용되는 경우, DMA 장치(100)는 외부 메모리로부터 읽은 데이터를 압축해제(decompression)하여 리드 버퍼(118)에 저장할 수 있다.
DMA 장치(100)는 적어도 하나의 내부명령에 기반하여 리드 버퍼로부터 읽은 데이터를 내부 메모리에 저장한다(S908).
도 10은 본 개시의 일 실시예에 따른 외부 메모리에 데이터를 저장하는 방법에 대한 순서도이다.
DMA 장치(100)는 레이어 정보 및 블록 정보를 획득한다(S1000).
도 2에 예시된 바와 같이 레이어 정보는 피처 맵(feature map) 및 타일(tile)에 대한 정보를 포함하고, 블록 정보는 타일이 분할된 복수의 부영역(sub-region)에 대한 정보이다.
DMA 장치(100)는 외부 메모리에 데이터의 저장을 지시하는 저장 명령을 획득한다(S1002). 여기서, 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함할 수 있다.
한편, 하나의 타일을 구성하는 복수의 부영역 각각은, 도 5 및 도 6의 예시된 바와 같이, 하나의 타일의 좌상단에 위치한 부영역을 기준으로 시계방향(clockwise)으로 외부 메모리의 연속된 주소에 순차적으로 저장될 수 있다. 또한, 본 개시의 다른 실시예에 있어서, 하나의 타일을 구성하는 복수의 부영역 각각은, 하나의 타일의 좌상단에 위치한 부영역을 기준으로 반시계방향(counterclockwise)으로 외부 메모리의 연속된 주소에 순차적으로 저장될 수 있다. 이러한 외부 메모리 상의 부영역 배열을 기반으로 DMA 장치(100)는 커널 연산에 필요한 부영역을 저장하기 위해 외부 메모리에 대한 버스트 라이트를 수행할 수 있다.
DMA 장치(100)는 레이어 정보 및 블록 정보를 기반으로 적어도 하나의 내부 명령 및 적어도 하나의 외부명령을 설정한다(S1004).
적어도 하나의 내부명령을 이용하여 DMA 장치(100)는 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 내부 메모리로부터 읽어올 수 있다.
또한, 적어도 하나의 외부명령을 이용하여, DMA 장치(100)는 외부 메모리에 대한 버스트 라이트(burst write)를 수행하여 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 내부 메모리에 저장된 순서와 상이한 순서로 외부 메모리에 순차적으로 저장할 수 있다.
DMA 장치(100)는 적어도 하나의 내부명령에 기반하여 내부 메모리로부터 읽은 데이터를 라이트 버퍼(write buffer)에 저장한다(S1006). 압축 모드가 적용되는 경우, DMA 장치(100)는 내부 메모리로부터 읽은 데이터를 압축(compression)하여 라이트 버퍼(120)에 저장할 수 있다.
DMA 장치(100)는 적어도 하나의 외부명령에 기반하여 라이트 버퍼로부터 읽은 데이터를 외부 메모리에 저장한다(S1008).
본 실시예에 따른 각 순서도에서는 각각의 과정을 순차적으로 실행하는 것으로 기재하고 있으나, 반드시 이에 한정되는 것은 아니다. 다시 말해, 순서도에 기재된 과정을 변경하여 실행하거나 하나 이상의 과정을 병렬적으로 실행하는 것이 적용 가능할 것이므로, 순서도는 시계열적인 순서로 한정되는 것은 아니다.
본 명세서에 설명되는 시스템들 및 기법들의 다양한 구현예들은, 디지털 전자 회로, 집적 회로, FPGA(field programmable gate array), ASIC(application specific integrated circuit), 컴퓨터 하드웨어, 펌웨어, 소프트웨어, 및/또는 이들의 조합으로 실현될 수 있다. 이러한 다양한 구현예들은 프로그래밍가능 시스템 상에서 실행가능한 하나 이상의 컴퓨터 프로그램들로 구현되는 것을 포함할 수 있다. 프로그래밍가능 시스템은, 저장 시스템, 적어도 하나의 입력 디바이스, 그리고 적어도 하나의 출력 디바이스로부터 데이터 및 명령들을 수신하고 이들에게 데이터 및 명령들을 전송하도록 결합되는 적어도 하나의 프로그래밍가능 프로세서(이것은 특수 목적 프로세서일 수 있거나 혹은 범용 프로세서일 수 있음)를 포함한다. 컴퓨터 프로그램들(이것은 또한 프로그램들, 소프트웨어, 소프트웨어 애플리케이션들 혹은 코드로서 알려져 있음)은 프로그래밍가능 프로세서에 대한 명령어들을 포함하며 "컴퓨터가 읽을 수 있는 기록매체"에 저장된다.
이상의 설명은 본 실시예의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 실시예의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 실시예들은 본 실시예의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 실시예의 기술 사상의 범위가 한정되는 것은 아니다. 본 실시예의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 실시예의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
100: DMA 장치 102: DMA 제어기
106: 레이어 정보 테이블 108: 블록 정보 테이블
110: 내부 메모리 명령 큐 112: 외부 메모리 명령 큐
114: 내부 메모리 어드레스 생성기
116: 외부 메모리 어드레스 생성기
122: 압축기 124: 압축해제기

Claims (13)

  1. 하드웨어(hardware) 장치가 수행하는 메모리 접근(memory access) 방법에 있어서,
    피처 맵(feature map) 및 상기 피처 맵이 분할된 타일(tile)에 대한 정보를 포함하는 레이어(layer) 정보 및 상기 타일이 분할된 복수의 부영역(sub-region)에 대한 부영역 정보를 획득하는 과정;
    외부 메모리 내 데이터에 대한 접근 명령을 획득하는 과정, 여기서 상기 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 상기 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함함;
    상기 레이어 정보와 부영역 정보를 기반으로 적어도 하나의 내부명령 및 적어도 하나의 외부명령을 설정하는 과정; 및
    상기 접근 명령이 상기 외부 메모리로부터의 데이터 읽기인 경우, 상기 적어도 하나의 외부명령에 기반하여 상기 외부 메모리로부터 읽은 데이터를 버퍼(buffer)에 저장하고, 상기 적어도 하나의 내부명령에 기반하여 상기 버퍼로부터 읽은 데이터를 내부 메모리에 저장하는 과정
    을 포함하는 것을 특징으로 하는 메모리 접근 방법.
  2. 제1항에 있어서,
    상기 접근 명령이 상기 외부 메모리에의 데이터 저장인 경우, 상기 적어도 하나의 내부명령에 기반하여 상기 내부 메모리로부터 읽은 데이터를 상기 버퍼에 저장하고, 상기 적어도 하나의 외부명령에 기반하여 상기 버퍼로부터 읽은 데이터를 상기 외부 메모리에 저장하는 과정을 더 포함하는 것을 특징으로 하는 메모리 접근 방법.
  3. 제1항에 있어서,
    상기 타일에 대한 정보는,
    상기 타일의 크기, 상기 피처 맵을 형성하는 타일의 개수, 압축 모드의 적용 여부를 나타내는 플랙(flag), 상기 타일의 부영역 분할 여부를 나타내는 플랙을 포함하는 것을 특징으로 하는 메모리 접근 방법.
  4. 제3항에 있어서,
    상기 부영역 정보는,
    상기 부영역의 크기를 포함하고, 상기 부영역에 상기 압축 모드가 적용되는 경우 압축 스트림의 길이와 관련된 정보를 포함하는 것을 특징으로 하는 메모리 접근 방법.
  5. 제1항에 있어서,
    적어도 2 개의 이웃 타일 간 경계에서 상기 커널 연산에 필요한 영역에 근거하여 상기 하나의 타일을 구성하는 복수의 부영역의 크기, 위치 및 개수가 설정되고, 상기 부영역 각각에 대한 선별적 접근이 수행되는 것을 특징으로 하는 메모리 접근 방법.
  6. 제3항에 있어서,
    상기 내부 메모리에 저장하는 과정에서 상기 압축 모드가 적용되는 경우, 상기 외부 메모리로부터 읽은 데이터를 압축해제(decompression)하여 상기 버퍼에 저장하고, 상기 외부 메모리에 저장하는 과정에서 상기 압축 모드가 적용되는 경우, 상기 내부 메모리로부터 읽은 데이터를 압축(compression)하여 상기 버퍼에 저장하는 것을 특징으로 하는 메모리 접근 방법.
  7. 제1항에 있어서,
    상기 하나의 타일을 구성하는 복수의 부영역은,
    상기 부영역 각각에 포함되는 픽셀 데이터들이 상기 외부 메모리의 인접한 주소 영역에 순차적으로 배치되고, 상기 복수의 부영역 중 상기 커널 연산 시 함께 이용되는 부영역들이 상기 외부 메모리의 인접한 주소 영역에 순차적으로 배치되 는 것을 특징으로 하는 메모리 접근 방법.
  8. 제2항에 있어서,
    상기 적어도 하나의 외부명령은,
    상기 데이터 저장의 경우, 상기 외부 메모리에 대한 버스트 라이트(burst write)를 수행하여, 상기 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 상기 내부 메모리에 저장된 순서와 상이한 순서로 상기 외부 메모리에 순차적으로 저장하는 것을 특징으로 하는 메모리 접근 방법.
  9. 제1항에 있어서,
    상기 적어도 하나의 내부명령은,
    상기 데이터 읽기의 경우, 상기 커널 연산에 필요한 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 상기 외부 메모리에 저장된 순서와 상이한 순서로 상기 내부 메모리에 저장하는 것을 특징으로 하는 메모리 접근 방법.
  10. 피처 맵(feature map) 및 상기 피처 맵이 분할된 타일(tile)에 대한 정보를 포함하는 레이어(layer) 정보 테이블;
    상기 타일이 분할된 복수의 부영역에 대한 정보를 포함하는 부영역(sub-region) 정보 테이블;
    외부 메모리 내 데이터에 대한 접근 명령을 획득하는 제어부, 여기서 상기 데이터는 커널 연산에 필요한 적어도 하나의 타일에 대하여 상기 각각의 타일을 구성하는 복수의 부영역의 전부 또는 일부를 포함함;
    상기 레이어 정보 테이블 및 부영역 정보 테이블에 기반하여 설정되는 내부명령을 저장하는 내부명령 큐;
    상기 레이어 정보 테이블 및 부영역 정보 테이블에 기반하여 설정되는 외부명령을 저장하는 외부명령 큐;
    상기 내부명령을 기반으로 내부 메모리에 접근하기 위한 내부어드레스를 생성하는 내부어드레스 생성기; 및
    상기 외부명령을 기반으로 상기 외부 메모리에 접근하기 위한 외부어드레스를 생성하는 외부어드레스 생성기
    를 포함하는 것을 특징으로 하는 DMA(Direct Memory Access) 장치.
  11. 제10항에 있어서,
    리드 버퍼(read buffer)를 추가로 포함하여, 상기 접근 명령이 상기 외부 메모리로부터의 데이터 읽기인 경우, 상기 외부 어드레스를 기반으로 상기 외부 메모리에 대한 버스트 리드(burst read)를 수행하여 상기 외부 메모리로부터 순차적으로 읽은 데이터를 상기 리드 버퍼에 저장하고, 상기 리드 버퍼로부터 읽은 데이터를 상기 내부 어드레스를 기반으로 상기 외부 메모리에 저장된 순서와 상이한 순서로 상기 내부 메모리에 저장하는 것을 특징으로 하는 DMA 장치.
  12. 제10항에 있어서,
    라이트 버퍼(write buffer)를 추가로 포함하여, 상기 접근 명령이 상기 외부 메모리에의 데이터 저장인 경우, 상기 내부 어드레스를 기반으로 상기 내부 메모리로부터 읽은 데이터를 상기 라이트 버퍼에 저장하고, 상기 라이트 버퍼로부터 읽은 데이터를 상기 외부 어드레스를 기반으로 상기 외부 메모리에 대한 버스트 라이트(burst write)를 수행하여 상기 내부 메모리에 저장된 순서와 상이한 순서로 상기 외부 메모리에 순차적으로 저장하는 것을 특징으로 하는 DMA 장치.
  13. 제10항에 있어서,
    압축기(compressor) 및 압축해제기(decompressor)를 추가로 포함하여, 상기 외부 메모리에 저장되는 데이터에 압축 모드가 적용되는 경우, 상기 데이터에 대한 압축 또는 압축해제를 수행하는 것을 특징으로 하는 DMA 장치.
KR1020200129868A 2020-10-08 2020-10-08 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치 KR20220046794A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200129868A KR20220046794A (ko) 2020-10-08 2020-10-08 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200129868A KR20220046794A (ko) 2020-10-08 2020-10-08 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20220046794A true KR20220046794A (ko) 2022-04-15

Family

ID=81212008

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200129868A KR20220046794A (ko) 2020-10-08 2020-10-08 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20220046794A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11886973B2 (en) 2022-05-30 2024-01-30 Deepx Co., Ltd. Neural processing unit including variable internal memory

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
비특허문헌 1: https://www.rle.mit.edu/eems/wp-content/uploads/2019/06/Tutorial-on-DNN-05-DNN-Accelerator-Architectures.pdf
비특허문헌 2: Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks", Yu-Hsin Chen et all, IEEE JSSC, 2017.

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11886973B2 (en) 2022-05-30 2024-01-30 Deepx Co., Ltd. Neural processing unit including variable internal memory

Similar Documents

Publication Publication Date Title
US11436483B2 (en) Neural network engine with tile-based execution
KR102316670B1 (ko) 연산 가속기
US11449576B2 (en) Convolution operation processing method and related product
EP3098762B1 (en) Data-optimized neural network traversal
CN109919311B (zh) 生成指令序列的方法、执行神经网络运算的方法和装置
US8250130B2 (en) Reducing bandwidth requirements for matrix multiplication
US20150371359A1 (en) Processing method and apparatus for single-channel convolution layer, and processing method and apparatus for multi-channel convolution layer
KR20180060149A (ko) 컨볼루션 처리 장치 및 방법
WO2018077295A1 (zh) 一种卷积神经网络的数据处理方法和装置
CN108573305B (zh) 一种数据处理方法、设备及装置
WO2021109699A1 (zh) 人工智能加速器、设备、芯片及数据处理方法
US20200272892A1 (en) Super-tiling in neural network processing to enabling analytics at lower memory speed
JP5706754B2 (ja) データ処理装置及びデータ処理方法
US11126359B2 (en) Partitioning graph data for large scale graph processing
CN111028136B (zh) 一种人工智能处理器处理二维复数矩阵的方法和设备
KR20220046794A (ko) 신경망 처리 시스템에서 효율적 메모리 접근을 위한 방법 및 장치
KR20210014561A (ko) 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체
CN111125628A (zh) 人工智能处理器处理二维数据矩阵的方法和设备
CN109324984B (zh) 在卷积运算中使用循环寻址的方法和装置
US20220012587A1 (en) Convolution operation method and convolution operation device
KR20210024751A (ko) 이종 메모리 장치를 포함하는 그래프 처리 시스템 및 그래프 처리 시스템의 동작방법
US20220129744A1 (en) Method for permuting dimensions of a multi-dimensional tensor
EP2400455A1 (en) System, data structure, and method for transposing multi-dimensional data to switch between vertical and horizontal filters
CN117271136A (zh) 数据处理方法、装置、设备和存储介质
KR100853912B1 (ko) 초기 메모리에 저장된 화상 데이타를 처리하는 방법, 컴퓨터 판독가능 기록매체 및 장치