KR20220071618A - 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치 - Google Patents

컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치 Download PDF

Info

Publication number
KR20220071618A
KR20220071618A KR1020200158952A KR20200158952A KR20220071618A KR 20220071618 A KR20220071618 A KR 20220071618A KR 1020200158952 A KR1020200158952 A KR 1020200158952A KR 20200158952 A KR20200158952 A KR 20200158952A KR 20220071618 A KR20220071618 A KR 20220071618A
Authority
KR
South Korea
Prior art keywords
input data
address
data
buffer
sender
Prior art date
Application number
KR1020200158952A
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 KR1020200158952A priority Critical patent/KR20220071618A/ko
Priority to US17/317,339 priority patent/US11971823B2/en
Priority to CN202110570492.8A priority patent/CN114548358A/zh
Publication of KR20220071618A publication Critical patent/KR20220071618A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data
    • 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)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Neurology (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Processing (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치가 제시된다. 일 실시예에 따른 페처는, 로더(Loader); 복수의 센더(Sender); 버퍼 컨트롤러(Buffer Controller); 및 재사용 버퍼(Reuse Buffer)를 포함하고, 상기 로더는, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고, 상기 버퍼 컨트롤러는, 상기 로딩된 입력 데이터를 상기 로딩 순서에 따라 순환적으로 할당된 주소의 상기 재사용 버퍼에 저장하고, 상기 복수의 센더(Sender) 각각은, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.

Description

컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치{METHOD AND APPARATUS FOR }
버퍼 관리 장치에 관한 것으로, 뉴럴 가속기의 병렬성 및 데이터 재사용을 위한 효율적인 버퍼 관리 장치에 관한 것이다.
딥 러닝(Deep learning) 기술은 복수의 뉴런으로 구성된 복수의 레이어를 포함하는 뉴럴 네트워크를 다량의 학습 데이터로 학습시키는 기법을 말한다. 뉴럴 네트워크의 추론의 정확도를 높이기 위해선 다량의 학습 데이터가 필요하며, 학습 데이터는 이미지, 소리 또는 텍스트 정보를 포함한다.
컨벌루셔널 뉴럴 네트워크(Convolutional Neural Network, CNN)는 컨벌루션 연산을 통해 이미지 분류 및 인식의 정확도를 크게 향상시키는 데에 기여한다. 하지만, CNN 계열의 모델은 많은 연산량을 요구하며, 학습 데이터가 증가할수록 요구되는 리소스는 더욱 커진다.
컨벌루션 연산을 가속화하기 위해 다양한 연구가 진행되고 있으며, 하드웨어 가속화는 하드웨어의 개선을 통해 컨벌루션 연산을 가속화한다. 대표적으로, 뉴럴 프로세싱 유닛(Neural Processing Unit, NPU)은 컨벌루션 연산과 같은 행렬 연산의 병렬 처리에 최적화되도록 설계된 프로세싱 유닛으로서 일반적인 프로세싱 유닛에 비해 더 높은 연산 속도를 보인다.
일 실시예에 따른 로더(Loader), 복수의 센더(Sender), 버퍼 컨트롤러(Buffer Controller) 및 재사용 버퍼(Reuse Buffer)를 포함하는 페처(fetcher)의 데이터 공유 방법에 있어서, 상기 로더에 의해, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하는 단계; 상기 버퍼 컨트롤러에 의해, 상기 로딩된 입력 데이터를 상기 로딩 순서에 따라 순환적으로 할당된 주소의 상기 재사용 버퍼에 저장하는 단계; 및 상기 복수의 센더(Sender) 각각에 의해, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하는 단계를 포함하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로딩하는 단계는, 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
상기 방법은, 이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)하는 단계를 더 포함할 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 상기 전송하는 단계는, 상기 제1 센더에 의해 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터는 상기 처리기로 전송되고, 상기 제2 센더에 의해 상기 제3 입력 데이터, 상기 제4 입력 데이터, 상기 제5 입력 데이터 및 상기 제6 입력 데이터는 상기 처리기로 전송될 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고, 상기 로딩하는 단계는, 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 상기 제5 입력 데이터, 상기 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 상기 이전 클락에서 로딩된 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고, 상기 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터에 할당된 주소를 플러싱하는 단계를 더 포함할 수 있다.
다른 실시예에 따른 로더(Loader), 복수의 센더(Sender), 버퍼 컨트롤러(Buffer Controller) 및 복수의 재사용 버퍼(Reuse Buffer)를 포함하는 페처(fetcher)의 데이터 공유 방법에 있어서, 상기 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함하고, 상기 로더에 의해, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하는 단계; 상기 버퍼 컨트롤러에 의해, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼의 주소를 상기 로딩 순서에 따라 상기 로딩된 입력 데이터에 순환적으로 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하는 단계; 및 상기 복수의 센더 각각에 의해, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하는 단계를 포함하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소이고, 상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소이고, 상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로딩하는 단계는, 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)하는 단계를 더 포함할 수 있다.
일 실시예에 따른 컴퓨터 프로그램은, 하드웨어와 결합되어 상기 방법을 실행시키기 위하여 컴퓨터 판독 가능한 기록매체에 저장될 수 있다.
일 실시예에 따른 페처는, 로더(Loader); 복수의 센더(Sender); 버퍼 컨트롤러(Buffer Controller); 및 재사용 버퍼(Reuse Buffer)를 포함하고, 상기 로더는, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고, 상기 버퍼 컨트롤러는, 상기 로딩된 입력 데이터를 상기 로딩 순서에 따라 순환적으로 할당된 주소의 상기 재사용 버퍼에 저장하고, 상기 복수의 센더(Sender) 각각은, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로더는, 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
상기 버퍼 컨트롤러는, 이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)할 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 상기 제1 센더는, 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터를 상기 처리기로 전송하고, 상기 제2 센더는, 상기 제3 입력 데이터, 상기 제4 입력 데이터, 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 상기 처리기로 전송할 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고, 상기 로더는, 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 상기 제5 입력 데이터, 상기 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 상기 이전 클락에서 로딩된 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고, 현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고, 상기 로더는, 상기 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터에 할당된 주소를 플러싱할 수 있다.
다른 실시예에 따른 페처는, 로더(Loader); 복수의 센더(Sender); 버퍼 컨트롤러(Buffer Controller); 및 복수의 재사용 버퍼(Reuse Buffer)를 포함하고, 상기 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함하고, 상기 로더는, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고, 상기 버퍼 컨트롤러는, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼의 주소를 상기 로딩 순서에 따라 상기 로딩된 입력 데이터에 순환적으로 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하고, 상기 복수의 센더 각각은, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소이고, 상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소이고, 상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소일 수 있다.
상기 로더는, 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
상기 버퍼 컨트롤러는, 이전 클락)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱할 수 있다.
일 실시예에 따른 컨벌루션 연산 장치는, 메모리(Memory); 페처(fetcher); 버퍼 컨트롤러(Buffer Controller); 처리기(Executer); 및 저장장치를 포함하고, 상기 페처는, 로더(Loader); 복수의 센더(Sender); 및 재사용 버퍼(Reuse Buffer)를 포함하고, 상기 로더는, 상기 메모리에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고, 상기 버퍼 컨트롤러는, 상기 로딩 순서에 따라 순환적으로 상기 재사용 버퍼의 주소를 상기 로딩된 입력 데이터에 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하고, 상기 복수의 센더(Sender) 각각은, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 상기 처리기로 전송하고, 상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
상기 처리기는, 상기 복수의 센더(Sender) 각각으로부터 수신한 입력 데이터에 대해 컨벌루션 연산을 수행하여 상기 복수의 센더 각각에 대응하는 출력 데이터를 출력하고 상기 저장장치에 저장할 수 있다.
도 1은 일 실시예에 따른 페처에 의해 컨벌루션 연산을 위한 데이터가 공유되는 과정을 설명하기 위한 도면이다.
도 2는 일 실시예에 따른 컨벌루션 연산을 위한 데이터 공유 방법의 동작을 도시한 순서도이다.
도 3은 컨벌루션 연산을 위한 데이터 공유 방법의 일례를 도시한 흐름도이다.
도 4는 일 실시예에 따른 컨벌루션 연산을 위한 데이터 공유 방법에 의해 데이터가 공유되는 상황을 설명하기 위한 도면이다.
도 5는 도 4의 다음 클락에 저장되거나 전송되는 데이터를 도시한 도면이다.
도 6은 일 실시예에 따른 페처의 구성을 도시한 도면이다.
도 7은 일 실시예에 따른 컨벌루션 연산 장치를 도시한 도면이다.
실시예들에 대한 특정한 구조적 또는 기능적 설명들은 단지 예시를 위한 목적으로 개시된 것으로서, 다양한 형태로 변경되어 구현될 수 있다. 따라서, 실제 구현되는 형태는 개시된 특정 실시예로만 한정되는 것이 아니며, 본 명세서의 범위는 실시예들로 설명한 기술적 사상에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 해석되어야 한다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설명된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면들을 참조하여 상세하게 설명한다. 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조 부호를 부여하고, 이에 대한 중복되는 설명은 생략하기로 한다.
도 1은 일 실시예에 따른 페처에 의해 컨벌루션 연산을 위한 데이터가 공유되는 과정을 설명하기 위한 도면이다.
뉴럴 프로세싱 유닛은 복수의 데이터를 병렬적으로 처리한다. 프로세싱 유닛은 메모리로부터 데이터를 가져오고, 가져온 데이터를 분석하고, 분석된 데이터를 연산하는 과정을 수행한다. 여기서, 데이터를 가져오는 기능은 페처(Fetcher)에 의해 수행된다. 페처는 페칭 유닛(Fetching Unit, FU)로 지칭될 수 있다.
페처는 메모리에 저장되어 있는 데이터를 불러오기 위해 메모리 액세스(memory access)를 수행한다. 다량의 데이터의 병렬 처리를 위해 복수의 로더(loader)를 사용할 경우 요구되는 메모리 대역폭(memory bandwidth)이 커지게 되며, 메모리 보틀넥(memory bottleneck) 현상이 발생할 수 있다.
일 실시예에 따르면, 페처는 데이터를 재사용함으로써 메모리 액세스의 횟수를 감소시킬 수 있다. 페처는 메모리 대역폭(memory bandwidth) 자원을 여러 프로세싱 엘레먼트(Processing element, PE)에게 공유함으로써 메모리 보틀넥 현상을 완화할 수 있다.
이를 위하여, 페처는 로더(Loader)(110), 복수의 센더(Sender)(141, 142, 143), 버퍼 컨트롤러(Buffer Controller)(120) 및 재사용 버퍼(Reuse Buffer)(130)를 포함한다. 재사용 버퍼(130)는 로더(110)에서 읽어온 입력 데이터가 저장되는 공간이다. 입력 데이터는 입력 특징 맵(101)을 포함할 수 있다.
버퍼 컨트롤러(120)는 입력 데이터가 저장될 주소를 계산하고, 계산된 주소에 입력 데이터의 쓰기(write)를 수행하고, 할당된 주소를 플러싱(flushing)한다. 버퍼 컨트롤러(120)는 로드 카운터(load counter), 로딩 단위, 재사용 버퍼(130)의 크기, 공유될 데이터의 개수 등을 기초로 재사용 버퍼(130)의 할당될 주소를 계산할 수 있다. 버퍼 컨트롤러(120)는 각 센더의 센드 카운터(send counter)를 기초로 플러싱이 수행될 주소를 계산할 수 있다.
센더(141, 142, 143)는 재사용 버퍼(130)에 저장된 입력 데이터를 처리기(Executer)로 전송한다. 센더(141, 142, 143)는 컨벌루션 연산의 각 출력 데이터에 대응하는 입력 데이터를 재사용 버퍼(130)에서 불러와서 처리기로 전송한다. 각 센더(141, 142, 143)는 센드 카운터를 하나씩 증가시키면서 출력 데이터에 필요한 입력 데이터를 전송할 수 있다. 각 센더(141, 142, 143)는 각 출력 데이터에 대응한다. 예를 들어, 출력 데이터는 출력 특징 맵(102)를 포함할 수 있다. 센더에 의해 읽어 올 버퍼의 주소는 미리 계산될 수 있다. 센드 카운터를 기초로 전송될 입력 데이터의 재사용 버퍼의 주소가 계산될 수 있다. 각 센더(141, 142, 143)가 불러오는 데이터들은 서로 중첩될 수 있다. 센더(141, 142, 143)는 재사용 버퍼(130)에 저장된 데이터들을 공유할 수 있다.
처리기는 컨벌루션 연산을 병렬적으로 수행할 수 있다. 센더가 N개인 경우 N개의 센더로부터 입력되는 입력 데이터에 대해 컨벌루션 연산을 병렬적으로 수행할 수 있다. 처리기는 처리 유닛(Executing Unit)으로 지칭될 수 있다. 출력 데이터는 저장 장치에 저장될 수 있다. 저장 장치는 스토어링 유닛(Storing Unit)으로 지칭될 수 있다.
페처(100)는 재사용 버퍼(130)를 통해 데이터를 재사용할 수 있다. 페처(100)는 재사용 버퍼(130)에 저장된 데이터를 공간적으로 재사용하거나 시간적으로 재사용할 수 있다. 복수의 센더가 재사용 버퍼(130)에 저장된 데이터를 공유함으로써 데이터는 공간적으로 재사용될 수 있다. 재사용 버퍼(130)의 공유되는 데이터는 공유 영역(131)을 형성할 수 있다. 이전에 로딩된 데이터가 현재 로딩될 데이터와 중복되는 경우 중복되는 데이터를 남겨둠으로써 중복되는 데이터는 시간적으로 재사용될 수 있다.
로더(110)는 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩한다. 로더(110)는 데이터의 공유를 고려하여 컨벌루션 연산에 필요한 입력 데이터를 로딩할 수 있다. 로더(110)는 로드 카운터를 하나씩 증가시키면서 메모리로부터 입력 데이터를 로딩할 수 있다. 로드 카운터는 재사용 버퍼의 주소 계산에 사용될 수 있다. 로더(110)는 데이터를 중복하여 로딩하지 않는다. 입력 특징 맵은 미리 학습된 뉴럴 네트워크를 통해 획득될 수 있다. 뉴럴 네트워크는 입력 이미지로부터 특징을 추출하여 입력 특징 맵을 출력하고 메모리에 저장할 수 있다. 여기서, 로딩 단위는 한 번에 로딩하는 입력 데이터에 개수를 의미한다. 로딩 단위는 재사용 버퍼(130)의 크기보다 작을 수 있다. 로딩 단위는 클락(clock)에 대응할 수 있다. 로더(110)는 제1 클락 동안 로딩 단위의 데이터들을 로딩할 수 있고, 다음의 제2 클락 동안 로딩 단위의 다음 데이터들을 로딩할 수 있다.
로딩 순서는 데이터를 로딩하는 순서를 의미한다. 예를 들어, 좌상단에서 우하단으로 종방향의 우선순위로 로딩 순서가 결정될 수 있다. 예를 들어, 웨이트가 2X2인 경우, 입력 특징 맵의 입력 데이터는 웨이트의 크기에 대응하여 좌상단, 좌하단, 우상단, 우하단의 순서로 로딩될 수 있다. 다만, 이는 예시에 불과하며 다양한 순서로 데이터가 로딩될 수 있다.
버퍼 컨트롤러(120)는 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱할 수 있다. 버퍼 컨트롤러(120)는 할당될 주소 중에서 가장 작은 주소 이전의 주소들을 플러싱할 수 있다. 이를 통해, 다음 클락에서 재사용될 데이터가 유지되면서도 새롭게 로딩될 데이터에 할당될 주소가 확보될 수 있다.
로더(110)는 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다. 남겨진 중복되는 입력 데이터는 현재 클락의 컨벌루션 연산에서 재사용될 수 있다. 이처럼, 서로 다른 처리 시간 사이에서 데이터는 시간적으로 공유될 수 있다.
버퍼 컨트롤러(120)는 로딩된 입력 데이터를 로딩 순서에 따라 순환적으로 할당된 주소의 재사용 버퍼(130)에 저장한다. 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 재사용 버퍼(130)의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 재사용 버퍼(130)의 첫번째 주소일 수 있다.
복수의 센더(141, 142, 143)는 각각 컨벌루션 연산의 출력 데이터에 대응할 수 있다. 하나의 센더는 하나의 출력 데이터를 위한 하나 이상의 입력 데이터를 처리기로 전송할 수 있다. 복수의 센더(141, 142, 143)는 하나의 재사용 버퍼(130)에 저장된 입력 데이터 중에서 필요한 입력 데이터를 처리기로 전송할 수 있다. 복수의 센더는 재사용 버퍼(130)에 저장된 입력 데이터를 공간적으로 공유할 수 있다.
예를 들어, 컨벌루션 연산의 웨이트의 크기가 2x2이고, 페처(100)는 제1 센더와 제2 센더를 포함할 수 있다. 컨벌루션 연산의 출력은 출력 특징 맵일 수 있으며, 출력 특징 맵에는 제1 출력 데이터와 제1 출력 데이터에 인접한 제2 출력 데이터가 포함될 수 있다. 제1 센더는 제1 출력 데이터에 대응하고 제2 센더는 제1 출력 데이터에 인접한 제2 출력 데이터에 대응할 수 있다. 제1 출력 데이터에는 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터이 대응될 수 있다. 제2 출력 데이터에는 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터가 대응될 수 있다.
로딩 단위가 6개인 경우, 제1 클락에서, 로더(110)는 입력 특징 맵에 포함된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터를 로딩할 수 있다. 버퍼 컨트롤러(120)는 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터를 각각 재사용 버퍼(130)의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장할 수 있다.
제1 센더는 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터 및 제4 입력 데이터를 처리기로 전송할 수 있다. 제2 센더는 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터를 처리기로 전송할 수 있다. 여기서, 제3 입력 데이터와 제4 입력 데이터는 로더(110)에 의해 1회 로딩되며 재사용 버퍼(130)에 1회 저장된 데이터이다. 이처럼, 제3 입력 데이터와 제4 입력 데이터는 제1 센더와 제2 센더에 의해 공유될 수 있다.
제2 클락에서, 제1 센더는 제3 출력 데이터에 대응하고 제2 센더는 제3 출력 데이터에 인접한 제4 출력 데이터에 대응할 수 있다. 제3 출력 데이터에는 제5 입력 데이터, 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터이 대응될 수 있다. 제4 출력 데이터에는 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터 및 제10 입력 데이터가 대응될 수 있다.
제2 클락에서, 버퍼 컨트롤러(120)는 컨벌루션 연산이 수행될 제3 출력 데이터 및 제4 출력 데이터에 대응하는 제5 입력 데이터, 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 이전 클락에서 로딩된 입력 데이터와 중복되는 제5 입력 데이터 및 제6 입력 데이터를 제외한 나머지 입력 데이터의 주소를 플러싱할 수 있다. 버퍼 컨트롤러(120)는 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터 및 제4 입력 데이터에 할당된 주소를 플러싱할 수 있다.
제2 클락에서, 로더(110)는 컨벌루션 연산이 수행될 제3 출력 데이터 및 제4 출력 데이터에 대응하는 제5 입력 데이터, 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 이전 클락에서 로딩된 입력 데이터와 중복되는 제5 입력 데이터 및 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다. 로더(110)는 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터를 로딩할 수 있다.
다른 실시예에 따르면, 페처는 로더, 복수의 센더, 버퍼 컨트롤러 및 복수의 재사용 버퍼를 포함한다. 페처는 N개의 센더 및 M개의 재사용 버퍼를 포함할 수 있다. 여기서, M < N 이다. 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함할 수 있다. 복수의 센더에 의해 적어도 하나의 재사용 버퍼에 저장된 데이터는 공유될 수 있다.
로더는 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩할 수 있다. 버퍼 컨트롤러는 제1 재사용 버퍼 또는 제2 재사용 버퍼의 주소를 로딩 순서에 따라 로딩된 입력 데이터에 순환적으로 할당하고, 할당된 주소에 로딩된 입력 데이터를 저장할 수 있다.
복수의 센더 각각은 제1 재사용 버퍼 또는 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송할 수 있다. 여기서, 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복될 수 있다.
제1 재사용 버퍼와 제2 재사용 버퍼는 하나의 주소 체계를 형성할 수 있다. 버퍼 컨트롤러는 제1 재사용 버퍼 및 제2 재사용 버퍼의 주소를 로딩 순서에 따라 로딩된 입력 데이터에 순환적으로 할당할 수 있다. 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 제1 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제1 재사용 버퍼의 첫번째 주소일 수 있다. 이전 입력 데이터에 할당된 주소가 제2 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제2 재사용 버퍼의 첫번째 주소일 수 있다.
제1 재사용 버퍼와 제2 재사용 버퍼는 각각 순환적 주소 체계를 가질 수 있다. 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 제1 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제2 재사용 버퍼의 첫번째 주소일 수 있다. 이전 입력 데이터에 할당된 주소가 제2 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제1 재사용 버퍼의 첫번째 주소일 수 있다.
버퍼 컨트롤러는 이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)할 수 있다. 로더는 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
도 2는 일 실시예에 따른 컨벌루션 연산을 위한 데이터 공유 방법의 동작을 도시한 순서도이다.
일 실시예에 따르면, 단계(201)에서, 로더는 메모리에 저장된 입력 특징 맵의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩한다. 미리 학습된 뉴럴 네트워크는 입력 이미지를 입력 받고 입력 특징 맵을 출력할 수 있다. 입력 특징 맵은 메모리에 저장될 수 있다.
단계(203)에서, 재사용 버퍼는 로딩된 입력 데이터를 로딩 순서에 따라 순환적으로 할당된 주소에 저장한다. 버퍼 컨트롤러는 입력 데이터가 저장될 주소를 계산할 수 있다. 이전 입력 데이터에 할당된 주소가 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 재사용 버퍼의 첫번째 주소일 수 있다.
단계(205)에서, 복수의 센더 각각은 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송한다. 여기서, 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되므로, 복수의 센더는 재사용 버퍼의 입력 데이터를 공유할 수 있다.
도 3은 컨벌루션 연산을 위한 데이터 공유 방법의 일례를 도시한 흐름도이다.
도 3의 동작은 하나의 시간 단위에서 수행될 수 있다. 예를 들어, 하나의 시간 단위는 클락을 포함할 수 있다. 모든 동작이 수행된 후에 단계(307)의 조건이 만족되면, 도 3의 동작들은 다시 반복될 수 있다.
단계(301)에서, 버퍼 컨트롤러는 재사용 버퍼가 가득 찼는지 판단할 수 있다. 단계(309)에서, 재사용 버퍼가 가득 찬 경우, 버퍼 컨트롤러는 재사용되지 않을 입력 데이터를 플러싱할 수 있다. 버퍼 컨트롤러는 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱할 수 있다.
단계(303)에서, 재사용 버퍼가 남아있거나 플러싱이 수행된 경우, 로더는 메모리로부터 입력 데이터를 로딩하고, 재사용 버퍼는 로딩된 입력 데이터를 저장할 수 있다. 버퍼 컨트롤러는 컨벌루션 연산이 수행될 출력 데이터를 위한 입력 데이터를 결정할 수 있다. 로더는 로딩 순서에 따라 로딩 단위로 입력 데이터를 로딩할 수 있다.
단계(305)에서, 복수의 센더 각각은 필요한 하나 이상의 입력 데이터를 재사용 버퍼로부터 가져와서 처리기로 전송할 수 있다. 각 센더에 의해 전송되는 입력 데이터는 중복될 수 있으며, 복수의 센더는 재사용 버퍼에 저장된 입력 데이터를 공유할 수 있다. 처리기는 입력 데이터 및 웨이트를 기초로 컨벌루션 연산을 수행할 수 있다.
단계(307)에서, 컨벌루션 연산이 남아있는지 여부가 판단될 수 있다. 컨벌루션 연산이 남아있는 경우, 단계(301)가 다시 수행될 수 있다. 컨벌루션 연산이 남아있지 않은 경우, 절차는 종료될 수 있다.
도 4는 일 실시예에 따른 컨벌루션 연산을 위한 데이터 공유 방법에 의해 데이터가 공유되는 상황을 설명하기 위한 도면이다. 도 5는 도 4의 다음 클락에 저장되거나 전송되는 데이터를 도시한 도면이다.
도 4와 도 5는 센더의 개수가 4개이고 웨이트(410)의 크기가 2x2일 때, 동시에 연산되는 출력 픽셀의 위치에 따라 센더들이 입력 데이터를 어떻게 공유하는지를 나타낸 예시이다. 도 4는 제1 클락에서 수행되는 컨벌루션 연산을 나타낸다. 웨이트(410)는 입력 특징 맵(420)의 2x2의 영역에 대응된다.
입력 특징 맵(420)은 7x7의 크기이며, 각 픽셀에는 특징값이 저장될 수 있다. 입력 특징 맵(420)은 미리 학습된 뉴럴 네트워크를 통해 입력 이미지로부터 획득될 수 있다. 입력 특징 맵(420)의 각 픽셀에는 0에서 48까지의 식별 번호가 할당될 수 있다. 도 4의 입력 특징 맵(420)에는 0 내지 9의 식별 번호가 표시되었으며, 10 내지 48까지의 식별번호는 설명을 위해 생략되었다.
버퍼 컨트롤러는 출력 특징 맵(440)을 구성하는 출력 데이터 0 내지 출력 데이터 3의 컨벌루션 연산을 위한 입력 데이터를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 0에 대해 입력 데이터 0 내지 입력 데이터 3를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 1에 대해 입력 데이터 2 내지 입력 데이터 5를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 2에 대해 입력 데이터 4 내지 입력 데이터 7를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 3에 대해 입력 데이터 6 내지 입력 데이터 9를 결정할 수 있다.
로더는 메모리에 저장된 입력 특징 맵(420)에서 필요한 입력 데이터를 메모리로부터 로딩할 수 있다. 로더는 입력 데이터 0 내지 입력 데이터 9를 10개의 로딩 단위로 로딩할 수 있다. 로더는 좌상단, 좌하단, 우상단, 우하단의 순서로 입력 데이터를 로딩할 수 있다.
버퍼 컨트롤러는 컨벌루션 연산이 수행될 출력 데이터들에 대응하는 입력 데이터들에 할당될 주소를 계산할 수 있다. 버퍼 컨트롤러는 로딩된 입력 데이터를 로딩 순서에 따라 순환적으로 할당된 주소에 저장할 수 있다. 재사용 버퍼(450)는 20의 크기를 가지며, 가득 찰 경우에는 첫 번째 저장 공간의 주소가 할당될 수 있다. 재사용 버퍼(450)는 입력 데이터 0 내지 입력 데이터 9를 저장할 수 있다.
제1 센더(431), 제2 센더(432), 제3 센더(433) 및 제4 센더(434)는 각각 출력 특징 맵(440)의 출력 데이터 0 내지 출력 데이터 3에 대응될 수 있다. 제1 센더(431)는 출력 데이터 0의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제2 센더(432)는 출력 데이터 1의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제3 센더(433)는 출력 데이터 2의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제4 센더(434)는 출력 데이터 3의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제1 센더(431), 제2 센더(432), 제3 센더(433) 및 제4 센더(434)는 입력 데이터 2 내지 입력 데이터 7을 공유한다.
처리기는 웨이트(410) 및 입력 데이터 0 내지 입력 데이터 3에 대해 컨벌루션 연산을 수행하여 출력 데이터 0을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 2 내지 입력 데이터 5에 대해 컨벌루션 연산을 수행하여 출력 데이터 1을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 4 내지 입력 데이터 5에 대해 컨벌루션 연산을 수행하여 출력 데이터 2을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 6 내지 입력 데이터 9에 대해 컨벌루션 연산을 수행하여 출력 데이터 3을 출력할 수 있다.
도 5는 제2 클락에서 수행되는 컨벌루션 연산을 나타낸다. 도 5의 입력 특징 맵(520)에는 8 내지 19의 식별 번호가 표시되었으며, 0 내지 7 및 20 내지 48까지의 식별번호는 설명을 위해 생략되었다.
버퍼 컨트롤러는 출력 특징 맵(540)을 구성하는 출력 데이터 0 내지 출력 데이터 3의 컨벌루션 연산을 위한 입력 데이터를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 0에 대해 입력 데이터 8 내지 입력 데이터 11을 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 1에 대해 입력 데이터 10 내지 입력 데이터 13를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 2에 대해 입력 데이터 14 내지 입력 데이터 17를 결정할 수 있다. 버퍼 컨트롤러는 출력 데이터 3에 대해 입력 데이터 16 내지 입력 데이터 19를 결정할 수 있다.
로더는 메모리에 저장된 입력 특징 맵(420)에서 필요한 입력 데이터를 메모리로부터 로딩할 수 있다. 로더는 입력 데이터 10 내지 입력 데이터 19를 10개의 로딩 단위로 로딩할 수 있다. 로더는 좌상단, 좌하단, 우상단, 우하단의 순서로 입력 데이터를 로딩할 수 있다. 로더는 이미 로딩된 입력 데이터 8 및 입력 데이터 9의 로딩을 생략할 수 있다. 시간적 공유를 통해 로딩 횟수가 감소될 수 있다.
버퍼 컨트롤러는 컨벌루션 연산이 수행될 출력 데이터들에 대응하는 입력 데이터들에 할당될 주소를 계산할 수 있다. 재사용 버퍼(550)는 입력 데이터 10 내지 입력 데이터 19를 저장할 수 있다. 입력 데이터 8과 입력 데이터 9는 제1 클락에서 이미 저장된 것이다.
제1 센더(431), 제2 센더(432), 제3 센더(433) 및 제4 센더(434)는 각각 출력 특징 맵(540)의 출력 데이터 0 내지 출력 데이터 3에 대응될 수 있다. 제1 센더(431)는 출력 데이터 0의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제2 센더(432)는 출력 데이터 1의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제3 센더(433)는 출력 데이터 2의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제4 센더(434)는 출력 데이터 3의 컨벌루션 연산을 위한 복수의 입력 데이터를 처리기로 전송할 수 있다. 제1 센더(431) 및 제2 센더(432)는 입력 데이터 10 및 입력 데이터 11을 공유한다. 제3 센더(433) 및 제4 센더(434)는 입력 데이터 16 및 입력 데이터 17을 공유한다.
처리기는 웨이트(410) 및 입력 데이터 8 내지 입력 데이터 11에 대해 컨벌루션 연산을 수행하여 출력 데이터 0을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 10 내지 입력 데이터 13에 대해 컨벌루션 연산을 수행하여 출력 데이터 1을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 14 내지 입력 데이터 15에 대해 컨벌루션 연산을 수행하여 출력 데이터 2을 출력할 수 있다. 처리기는 웨이트(410) 및 입력 데이터 16 내지 입력 데이터 19에 대해 컨벌루션 연산을 수행하여 출력 데이터 3을 출력할 수 있다.
도 6은 일 실시예에 따른 페처의 구성을 도시한 도면이다.
일 실시예에 따르면, 페처(100)는 로더(110), 복수의 센더(141, 142, 143), 버퍼 컨트롤러(120) 및 재사용 버퍼(130)를 포함한다.
로더(110)는 메모리에 저장된 입력 특징 맵의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩한다. 로더(110)는 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
버퍼 컨트롤러(120)는 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱할 수 있다.
버퍼 컨트롤러(120)는 로딩된 입력 데이터를 로딩 순서에 따라 순환적으로 할당된 주소의 재사용 버퍼(130)에 저장한다. 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 재사용 버퍼(130)의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 재사용 버퍼(130)의 첫번째 주소일 수 있다.
복수의 센더(141, 142, 143) 각각은 재사용 버퍼(130)에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송한다. 복수의 센더(141, 142, 143) 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
재사용 버퍼(130)는 공간적으로 재사용될 수 있다. 예를 들어, 웨이트의 크기가 2x2일 수 있다. 복수의 센더는 제1 센더(141)와 제2 센더(142)를 포함할 수 있다. 제1 센더(141)는 제1 출력 데이터에 대응하고 제2 센더는 제1 출력 데이터에 인접한 제2 출력 데이터에 대응할 수 있다. 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 재사용 버퍼(130)의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장될 수 있다. 제1 센더(141)는 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터 및 제4 입력 데이터를 처리기로 전송할 수 있다. 제2 센더는, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터를 처리기로 전송할 수 있다.
재사용 버퍼(130)는 시간적으로 재사용될 수 있다. 예를 들어, 웨이트의 크기가 2x2일 수 있다. 복수의 센더는 제1 센더(141)와 제2 센더(142)를 포함할 수 있다. 이전 클락에서, 제1 센더(141)는 제1 출력 데이터에 대응하고 제2 센더(142)는 제1 출력 데이터에 인접한 제2 출력 데이터에 대응할 수 있다. 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 재사용 버퍼(130)의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장될 수 있다.
현재 클락에서, 제1 센더(141)는 제3 출력 데이터에 대응하고 제2 센더(142)는 제3 출력 데이터에 인접한 제4 출력 데이터에 대응할 수 있다. 로더(110)는 컨벌루션 연산이 수행될 제3 출력 데이터 및 제4 출력 데이터에 대응하는 제5 입력 데이터, 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 이전 클락에서 로딩된 입력 데이터와 중복되는 제5 입력 데이터 및 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
재사용 버퍼(130)의 시간적 재사용을 위하여 버퍼 컨트롤러(120)는 중복되지 않는 주소를 할당할 수 있다. 예를 들어, 웨이트의 크기가 2x2일 수 있다. 복수의 센더는 제1 센더(141)와 제2 센더(142)를 포함할 수 있다. 이전 클락에서, 제1 센더(141)는 제1 출력 데이터에 대응하고 제2 센더(142)는 제1 출력 데이터에 인접한 제2 출력 데이터에 대응할 수 있다. 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 재사용 버퍼(130)의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장될 수 있다.
현재 클락에서, 제1 센더(141)는 제3 출력 데이터에 대응하고 제2 센더(142)는 제3 출력 데이터에 인접한 제4 출력 데이터에 대응할 수 있다. 로더(110)는 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 제3 출력 데이터 및 제4 출력 데이터에 대응하는 입력 데이터와 중복되는 제5 입력 데이터 및 제6 입력 데이터를 제외한 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터 및 제4 입력 데이터에 할당된 주소를 플러싱할 수 있다.
다른 실시예에 따르면, 페처는 로더(110), 복수의 센더(141, 142, 143), 버퍼 컨트롤러(120) 및 복수의 재사용 버퍼를 포함한다. 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함할 수 있다.
로더(110)는 메모리에 저장된 입력 특징 맵의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩한다. 일 실시예에 따르면, 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 제1 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제1 재사용 버퍼의 첫번째 주소이고, 이전 입력 데이터에 할당된 주소가 제2 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제2 재사용 버퍼의 첫번째 주소일 수 있다. 다른 실시예에 따르면, 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 이전 입력 데이터에 할당된 주소가 제1 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제2 재사용 버퍼의 첫번째 주소이고, 이전 입력 데이터에 할당된 주소가 제2 재사용 버퍼의 마지막 주소인 경우, 현재 입력 데이터에 할당될 주소는 제1 재사용 버퍼의 첫번째 주소일 수 있다.
버퍼 컨트롤러(120)는 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱할 수 있다. 로더(110)는 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩할 수 있다.
버퍼 컨트롤러(120)는 제1 재사용 버퍼 또는 제2 재사용 버퍼의 주소를 로딩 순서에 따라 로딩된 입력 데이터에 순환적으로 할당하고, 할당된 주소에 로딩된 입력 데이터를 저장한다.
복수의 센더(141, 142, 143) 각각은 제1 재사용 버퍼 또는 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송한다. 복수의 센더(141, 142, 143) 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다
도 7은 일 실시예에 따른 컨벌루션 연산 장치를 도시한 도면이다.
일 실시예에 따르면, 컨벌루션 연산 장치는 메모리(710), 페처(100), 버퍼 컨트롤러(120), 처리기(720) 및 저장장치(730)를 포함한다.
페처(100)는 로더(110), 복수의 센더(141, 142, 143), 재사용 버퍼(130) 및 버퍼 컨트롤러(120)를 포함한다.
로더(110)는 메모리(710)에 저장된 입력 특징 맵의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩한다.
버퍼 컨트롤러(120)는 로딩 순서에 따라 순환적으로 재사용 버퍼(130)의 주소를 로딩된 입력 데이터에 할당하고, 할당된 주소에 로딩된 입력 데이터를 저장한다.
복수의 센더(141, 142, 143) 각각은, 재사용 버퍼(130)에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기(720)로 전송한다. 복수의 센더(141, 142, 143) 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복된다.
처리기(720)는 복수의 센더(141, 142, 143) 각각으로부터 수신한 입력 데이터에 대해 컨벌루션 연산을 수행하여 복수의 센더 각각에 대응하는 출력 데이터를 출력하고 저장장치(730)에 저장한다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 컨트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있으며 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
위에서 설명한 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 또는 복수의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 이를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (27)

  1. 로더(Loader), 복수의 센더(Sender), 버퍼 컨트롤러(Buffer Controller) 및 재사용 버퍼(Reuse Buffer)를 포함하는 페처(fetcher)의 데이터 공유 방법에 있어서,
    상기 로더에 의해, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하는 단계;
    상기 버퍼 컨트롤러에 의해, 상기 로딩된 입력 데이터를 상기 로딩 순서에 따라 순환적으로 할당된 주소의 상기 재사용 버퍼에 저장하는 단계; 및
    상기 복수의 센더(Sender) 각각에 의해, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하는 단계를 포함하고,
    상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  2. 제1항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 재사용 버퍼의 첫번째 주소인,
    컨벌루션 연산을 위한 데이터 공유 방법.
  3. 제1항에 있어서,
    상기 로딩하는 단계는,
    컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  4. 제1항에 있어서,
    이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)하는 단계를 더 포함하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  5. 제1항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    상기 전송하는 단계는,
    상기 제1 센더에 의해 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터는 상기 처리기로 전송되고, 상기 제2 센더에 의해 상기 제3 입력 데이터, 상기 제4 입력 데이터, 상기 제5 입력 데이터 및 상기 제6 입력 데이터는 상기 처리기로 전송되는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  6. 제3항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고,
    이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고,
    상기 로딩하는 단계는,
    컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 상기 제5 입력 데이터, 상기 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 상기 이전 클락에서 로딩된 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  7. 제4항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고,
    이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고,
    상기 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터에 할당된 주소를 플러싱하는 단계를 더 포함하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  8. 로더(Loader), 복수의 센더(Sender), 버퍼 컨트롤러(Buffer Controller) 및 복수의 재사용 버퍼(Reuse Buffer)를 포함하는 페처(fetcher)의 데이터 공유 방법에 있어서, 상기 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함하고,
    상기 로더에 의해, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하는 단계;
    상기 버퍼 컨트롤러에 의해, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼의 주소를 상기 로딩 순서에 따라 상기 로딩된 입력 데이터에 순환적으로 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하는 단계; 및
    상기 복수의 센더 각각에 의해, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하는 단계를 포함하고,
    상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  9. 제8항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소이고,
    상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소인,
    컨벌루션 연산을 위한 데이터 공유 방법.
  10. 제8항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소이고,
    상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소인,
    컨벌루션 연산을 위한 데이터 공유 방법.
  11. 제8항에 있어서,
    상기 로딩하는 단계는,
    컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  12. 제8항에 있어서,
    이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)하는 단계를 더 포함하는,
    컨벌루션 연산을 위한 데이터 공유 방법.
  13. 하드웨어와 결합되어 제1항 내지 제12항 중 어느 하나의 항의 방법을 실행시키기 위하여 컴퓨터 판독 가능한 기록매체에 저장된 컴퓨터 프로그램.
  14. 로더(Loader);
    복수의 센더(Sender);
    버퍼 컨트롤러(Buffer Controller); 및
    재사용 버퍼(Reuse Buffer)를 포함하고,
    상기 로더는, 메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고,
    상기 버퍼 컨트롤러는, 상기 로딩된 입력 데이터를 상기 로딩 순서에 따라 순환적으로 할당된 주소의 상기 재사용 버퍼에 저장하고,
    상기 복수의 센더(Sender) 각각은, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하고,
    상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되는,
    페처.
  15. 제14항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 재사용 버퍼의 첫번째 주소인,
    페처.
  16. 제14항에 있어서,
    상기 로더는, 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    페처.
  17. 제14항에 있어서,
    상기 버퍼 컨트롤러는, 이전 클락(clock)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱(flushing)하는,
    페처.
  18. 제14항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    상기 제1 센더는, 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터를 상기 처리기로 전송하고,
    상기 제2 센더는, 상기 제3 입력 데이터, 상기 제4 입력 데이터, 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 상기 처리기로 전송하는,
    페처.
  19. 제16항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고,
    이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고,
    상기 로더는,
    컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 상기 제5 입력 데이터, 상기 제6 입력 데이터, 제7 입력 데이터, 제8 입력 데이터, 제9 입력 데이터, 제10 입력 데이터 중에서 상기 이전 클락에서 로딩된 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    페처.
  20. 제17항에 있어서,
    상기 복수의 센더는 제1 센더와 제2 센더를 포함하고,
    이전 클락에서, 상기 제1 센더는 제1 출력 데이터에 대응하고 상기 제2 센더는 상기 제1 출력 데이터에 인접한 제2 출력 데이터에 대응하고, 로딩된 제1 입력 데이터, 제2 입력 데이터, 제3 입력 데이터, 제4 입력 데이터, 제5 입력 데이터 및 제6 입력 데이터는 각각 상기 재사용 버퍼의 제1 주소, 제2 주소, 제3 주소, 제4 주소, 제5 주소 및 제6 주소에 저장되고,
    현재 클락에서, 상기 제1 센더는 제3 출력 데이터에 대응하고 상기 제2 센더는 상기 제3 출력 데이터에 인접한 제4 출력 데이터에 대응하고,
    상기 로더는,
    상기 이전 클락에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 상기 제3 출력 데이터 및 상기 제4 출력 데이터에 대응하는 입력 데이터와 중복되는 상기 제5 입력 데이터 및 상기 제6 입력 데이터를 제외한 상기 제1 입력 데이터, 상기 제2 입력 데이터, 상기 제3 입력 데이터 및 상기 제4 입력 데이터에 할당된 주소를 플러싱하는,
    페처.
  21. 로더(Loader);
    복수의 센더(Sender);
    버퍼 컨트롤러(Buffer Controller); 및
    복수의 재사용 버퍼(Reuse Buffer)를 포함하고,
    상기 복수의 재사용 버퍼는 제1 재사용 버퍼 및 제2 재사용 버퍼를 포함하고,
    상기 로더는,
    메모리(Memory)에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고,
    상기 버퍼 컨트롤러는, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼의 주소를 상기 로딩 순서에 따라 상기 로딩된 입력 데이터에 순환적으로 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하고,
    상기 복수의 센더 각각은, 상기 제1 재사용 버퍼 또는 상기 제2 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 처리기로 전송하고,
    상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되는,
    페처.
  22. 제21항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소이고,
    상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소인,
    페처.
  23. 제21항에 있어서,
    상기 로딩된 입력 데이터에 포함된 이전 입력 데이터와 현재 입력 데이터에 대하여, 상기 이전 입력 데이터에 할당된 주소가 상기 제1 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제2 재사용 버퍼의 첫번째 주소이고,
    상기 이전 입력 데이터에 할당된 주소가 상기 제2 재사용 버퍼의 마지막 주소인 경우, 상기 현재 입력 데이터에 할당될 주소는 상기 제1 재사용 버퍼의 첫번째 주소인,
    페처.
  24. 제21항에 있어서,
    상기 로더는,
    컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터 중에서 이전 클락(clock)에서 로딩된 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터를 로딩하는,
    페처.
  25. 제21항에 있어서,
    상기 버퍼 컨트롤러는,
    이전 클락)에서 로딩된 입력 데이터 중에서 컨벌루션 연산이 수행될 출력 데이터에 대응하는 입력 데이터와 중복되는 입력 데이터를 제외한 나머지 입력 데이터에 할당된 주소를 플러싱하는,
    페처.
  26. 메모리(Memory);
    페처(fetcher);
    버퍼 컨트롤러(Buffer Controller);
    처리기(Executer); 및
    저장장치를 포함하고,
    상기 페처는,
    로더(Loader);
    복수의 센더(Sender); 및
    재사용 버퍼(Reuse Buffer)를 포함하고,
    상기 로더는, 상기 메모리에 저장된 입력 특징 맵(input feature map)의 입력 데이터를 로딩 순서에 따라 로딩 단위로 로딩하고,
    상기 버퍼 컨트롤러는, 상기 로딩 순서에 따라 순환적으로 상기 재사용 버퍼의 주소를 상기 로딩된 입력 데이터에 할당하고, 상기 할당된 주소에 상기 로딩된 입력 데이터를 저장하고,
    상기 복수의 센더(Sender) 각각은, 상기 재사용 버퍼에 저장된 입력 데이터 중에서 컨벌루션 연산의 출력 데이터 각각에 대응하는 입력 데이터를 상기 처리기로 전송하고,
    상기 복수의 센더 각각에 의해 전송되는 입력 데이터의 일부는 서로 중복되는,
    컨벌루션 연산 장치.
  27. 제26항에 있어서,
    상기 처리기는,
    상기 복수의 센더(Sender) 각각으로부터 수신한 입력 데이터에 대해 컨벌루션 연산을 수행하여 상기 복수의 센더 각각에 대응하는 출력 데이터를 출력하고 상기 저장장치에 저장하는,
    컨벌루션 연산 장치.

KR1020200158952A 2020-11-24 2020-11-24 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치 KR20220071618A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020200158952A KR20220071618A (ko) 2020-11-24 2020-11-24 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치
US17/317,339 US11971823B2 (en) 2020-11-24 2021-05-11 Computing method and device with data sharing
CN202110570492.8A CN114548358A (zh) 2020-11-24 2021-05-25 计算方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200158952A KR20220071618A (ko) 2020-11-24 2020-11-24 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치

Publications (1)

Publication Number Publication Date
KR20220071618A true KR20220071618A (ko) 2022-05-31

Family

ID=81657074

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200158952A KR20220071618A (ko) 2020-11-24 2020-11-24 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치

Country Status (3)

Country Link
US (1) US11971823B2 (ko)
KR (1) KR20220071618A (ko)
CN (1) CN114548358A (ko)

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101478025B1 (ko) * 2009-07-23 2015-01-06 삼성전자주식회사 무선 단말 및 그 단말에서의 데이터 통신 방법
KR101713930B1 (ko) * 2010-04-22 2017-03-09 삼성전자주식회사 휴대 단말기의 송신 장치 및 그의 운용 방법
EP3098681B1 (en) * 2015-05-27 2020-08-26 Tata Consultancy Services Limited Artificial intelligence based health management of host system
US20180212894A1 (en) * 2015-08-02 2018-07-26 Wave Computing, Inc. Fork transfer of data between multiple agents within a reconfigurable fabric
KR102631381B1 (ko) 2016-11-07 2024-01-31 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
CN108228081B (zh) * 2016-12-21 2021-03-02 伊姆西Ip控股有限责任公司 用于数据保护的方法和设备
KR102415508B1 (ko) * 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
KR20180123846A (ko) 2017-05-10 2018-11-20 울산과학기술원 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기
US11783174B2 (en) 2018-05-04 2023-10-10 Apple Inc. Splitting of input data for processing in neural network processor
CN109146072B (zh) 2018-08-01 2021-03-23 上海天数智芯半导体有限公司 基于卷积神经网络加速器的数据重用方法
US11176427B2 (en) 2018-09-26 2021-11-16 International Business Machines Corporation Overlapping CNN cache reuse in high resolution and streaming-based deep learning inference engines
US11620503B2 (en) * 2020-03-18 2023-04-04 Arm Limited Neural network processing
KR20220030681A (ko) * 2020-09-03 2022-03-11 삼성전자주식회사 뉴럴 네트워크 연산 장치 및 방법

Also Published As

Publication number Publication date
US11971823B2 (en) 2024-04-30
CN114548358A (zh) 2022-05-27
US20220164289A1 (en) 2022-05-26

Similar Documents

Publication Publication Date Title
JP7382925B2 (ja) ニューラルネットワークアクセラレーションのための機械学習ランタイムライブラリ
US11768911B2 (en) Method and apparatus for execution of neural network
KR20180012439A (ko) 회선 신경망에서 가속기 및 이의 동작 방법
CN111465943B (zh) 一种集成电路和用于神经网络处理的方法
CN110554913A (zh) 神经网络系统及其操作方法以及应用处理器
KR20200031150A (ko) 데이터 처리장치의 데이터 항목들 내의 성분들의 계수
US20210089873A1 (en) Apparatus and system for execution of neural network
US11972341B2 (en) Parallel processing for signal generation neural networks
CN113469355A (zh) 分布式系统中的多模型训练管道
CN114830135A (zh) 算子的层次分区
US20180046474A1 (en) Method for executing child kernels invoked on device side utilizing dynamic kernel consolidation and related non-transitory computer readable medium
CN116348885A (zh) 用于可部署推理系统的存储器映射的神经网络加速器
KR20220071618A (ko) 컨벌루션 연산을 위한 데이터 공유 방법, 페처 및 컨벌루션 연산 장치
US20170083637A1 (en) Condition analysis
KR20220090104A (ko) 컨벌루션 연산을 위한 데이터 전송 방법, 페처 및 컨벌루션 연산 장치
EP3729260B1 (en) A multiple-pipeline architecture with special number detection
CN111194451B (zh) 门控激活单元运算的并行执行
KR20220078290A (ko) 뉴럴 네트워크 연산 스케줄링 방법 및 장치
US10762035B1 (en) Matrix tiling to accelerate computing in redundant matrices
JP6572668B2 (ja) 検査方法
US20180129517A1 (en) Performance acceleration in mixed-language applications
CN111709513B (zh) 长短期记忆网络lstm的训练系统、方法及电子设备
KR102665580B1 (ko) 신경 네트워크 가속화를 위한 머신 러닝 런타임 라이브러리
US20210209462A1 (en) Method and system for processing a neural network
US20210365294A1 (en) Reducing the memory load time for logic simulator by leveraging architecture simulator

Legal Events

Date Code Title Description
A201 Request for examination