KR20200143686A - 연산을 가속하기 위한 가속기 및 시스템 - Google Patents

연산을 가속하기 위한 가속기 및 시스템 Download PDF

Info

Publication number
KR20200143686A
KR20200143686A KR1020207029716A KR20207029716A KR20200143686A KR 20200143686 A KR20200143686 A KR 20200143686A KR 1020207029716 A KR1020207029716 A KR 1020207029716A KR 20207029716 A KR20207029716 A KR 20207029716A KR 20200143686 A KR20200143686 A KR 20200143686A
Authority
KR
South Korea
Prior art keywords
data
input
processing
module
control unit
Prior art date
Application number
KR1020207029716A
Other languages
English (en)
Inventor
귤라 나기
마르톤 페헤르
Original Assignee
에이아이모티브 케이에프티.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이아이모티브 케이에프티. filed Critical 에이아이모티브 케이에프티.
Publication of KR20200143686A publication Critical patent/KR20200143686A/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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • 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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06N3/0454
    • 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/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/603Details of cache memory of operating mode, e.g. cache mode or local memory mode
    • 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/044Recurrent networks, e.g. Hopfield networks
    • 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
    • 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

Landscapes

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

Abstract

연산을 가속하기 위한 가속기 및 시스템이 개시된다. 각각의 장치는, 상기 장치를 인터커넥트에 결합시키도록 구성되는 인터페이스와, 데이터를 처리하도록 각각 구성되는 복수의 프로세싱 모듈과, 복수의 프로세싱 모듈 각각의 처리를 제어하도록 구성되는 제어 모듈과, 복수의 프로세싱 모듈 중 적어도 하나에 의해 처리되는 데이터의 적어도 일부를 저장하도록 구성되는 캐시 모듈을 포함한다. 각각의 프로세싱 모듈은, 복수의 프로세싱 요소를 사용하여 데이터에 대한 연산을 수행함으로써 상기 데이터를 처리하도록 구성되는 프로세싱 코어와, 인터페이스를 통한 데이터 및 캐시 모듈에 저장된 데이터를 인출하고, 인출된 데이터를 프로세싱 코어에 제공하도록 구성되는 입력 제어 유닛과, 프로세싱 코어에 의해 처리된 데이터를 인터페이스 및 캐시 모듈에 제공하도록 구성되는 출력 제어 유닛을 포함한다.

Description

연산을 가속하기 위한 가속기 및 시스템
본 발명은 복수의 프로세싱 요소를 갖는 복수의 프로세싱 모듈을 사용하여 연산을 가속하기 위한 장치, 시스템 및 방법에 관한 것이다. 특히, 본 발명은 컨볼루션 신경망의 동작을 가속하기 위한 컨볼루션 연산을 구현하도록 구성될 수 있는 가속기에 관한 것일 수 있다.
최근 컴퓨팅 기술의 발전으로 인해, 대부분의 디바이스, 머신, 또는 인프라의 연산은 해당 디바이스, 머신 또는 인프라를 제어하기에 적합한 정보를 생성하기 위해 다양한 입력 데이터의 컴퓨터 기반 처리 및/또는 처리 상태의 컴퓨터 기반 평가에 전적으로 의존한다. 종종, 이러한 처리 및 대응되는 의사 결정은 상당량의 복잡한 계산 작업 또는 연산을 요구하는데, 이는 종종 유사한 유형의 것이다. 상기 작업 또는 연산이 CPU 또는 프로세싱 디바이스의 코어와 같은 범용 프로세싱 유닛에 의해 수행될 수 있지만, 그러한 작업 또는 연산을 가속하기 위한 전용 하드웨어가 다양하게 제안되었다. 이러한 전용 하드웨어는 통상적으로 가속기라고 지칭된다.
예컨대, 부동 소수점 수 등에 대한 연산과 같은, 수학적 연산을 가속하기 위해 다양한 유형의 수치 연산 코프로세서(math co-processor)가 제안되었다. 가속기의 다른 예로서, 비디오 또는 그래픽 가속기가 그래픽 또는 비디오 객체의 처리 및 렌더링을 가속하기 위하여 제안되었다. 통상적으로 가속기는 요구되는 작업 또는 연산 및 각각의 데이터 포맷에 특화된 전용 하드웨어를 포함한다.
이미지 처리, 컴퓨터 비전(computer vision) 및 인공 지능의 영역에 있어서, 컨볼루션(convolution) 연산을 위한 가속기가 제안되었다. 컨볼루션 연산은 결정 프로세스를 가능하게 하는 입력 데이터의 분석 및 분류를 위한 다수의 인공 지능 접근법에서 요구된다. 통상적으로 이러한 유형의 처리는 캡처된 센서 데이터에 응답하여 각각의 디바이스 상에서 국지적으로 수행되기 때문에, 컨볼루션 연산의 실시간 처리는 예컨대 얼굴 인식, 교통 표지 검출 및 감시, 보안 애플리케이션, 자율 주행 등과 관련된 다른 작업에서 중요한 문제가 된다. 컨볼루션 신경망(convolutional neural network; CNN)은 컨볼루션 연산을 사용하는 컴퓨터 비전 및 인공 지능에 적용되는 기술의 일례이다. CNN은 처리 파라미터를 업데이트함으로써 다양한 시나리오에 적응시킬 수 있는 단일 플렉시블(flexible) 모델에서 특징 추출 및 분류를 결합시킨다.
몇몇 CNN 가속기가 예컨대 S. Chakradhar 등의 문헌 "A Dynamically Configurable Coprocessor for Convolutional Neural Networks"(ISCA, 2010) 및 C. Farabet 등의 문헌 "NeuFlow: A Runtime Reconfigurable Data Flow Processor for Vision"(Embedded Computer Vision Workshop, 2011)에서 제안되었다. 이들 CNN 가속기는 CNN의 동작을 전용 하드웨어에 대해 매핑한다. 그러나, 대부분의 접근법에서는, 입력을 공유하고 CNN의 출력을 다른 리소스에 연결하기 위한 중재 및 라우팅에서 어려움이 발생한다. 다양한 응용 시나리오에 있어서, 가속기의 처리 효율은 과도한 데이터 전송 및 한정된 대역폭으로 인해 심하게 감소될 수 있으며, 이에 의해 가속기의 효율이 저하될 수 있다. M. Peemen 등의 문헌 "Memory-centric Accelerator Design for Convolutional Neural Networks"(ICCD, 2013)은 데이터 재사용 및 메모리 액세스 패턴을 사용함으로써 대역폭 문제에 대처하는 메모리 서브시스템을 갖는 컨볼루션 신경망을 위한 메모리-중심(memory-centric) 가속기 설계를 개시한다. 상기 가속기는 해당 가속기 내외로의 데이터를 스트리밍하기 위해 호스트 프로세서에 의해 사용되는 고속 단신 링크(Fast Simplex Link) 연결을 통해 외부 메모리에 결합된다.
대역폭 문제에 더하여, 공지의 가속기는 입력 데이터의 특정한 크기 및 배열에 의해 제한된다. 미국 특허 제9,665,799호는 사이클마다 기본 데이터(underlying data)를 갖는 가중치 커널(weight kernel)에 대한 컨볼루션을 계산하는 CNN을 개시한다. 그러나, 다른 크기의 가중치 커널이 사용되는 경우 계산 리소스가 완전히 활용되지 않을 수 있고, 입력 데이터가 서브샘플링(subsample)되는 경우 계산 효율이 저하될 수 있다. 가속기의 다른 레이아웃(layout)이 국제공개공보 제2017/003887호에 개시되어 있다. 이러한 설정(setup)의 경우 가중치 커널의 중첩으로 인해 중복된 입력 데이터의 저장이 필요할 수 있다.
따라서, 본 발명의 적어도 하나의 목적은 장치를 사용하여 컨볼루션 연산과 같은 연산을 가속하기 위한 접근법을 정의하는 것으로서, 이는 가용 리소스를 효율적으로 활용하고 상기 장치에 의해 처리되는 입력 및 출력 데이터의 교환에 관한 대역폭 문제를 처리하는 다양한 시나리오에 유연하게 적응될 수 있다.
본 발명은 독립 청구항에 따른 장치, 시스템 및 방법에 의해 정의된다. 바람직한 실시예는 종속항에서 정의된다.
본 발명의 제1 태양에 따르면, 장치가 정의되고, 상기 장치는 상기 장치를 인터커넥트에 결합시키도록 구성되는 인터페이스와, 데이터를 처리하도록 각각 구성되는 복수의 프로세싱 모듈과, 복수의 프로세싱 모듈 각각의 처리를 제어하도록 구성되는 제어 모듈과, 복수의 프로세싱 모듈 중 적어도 하나에 의해 처리되는 데이터의 적어도 일부를 저장하도록 구성되는 캐시 모듈을 포함하며, 각각의 프로세싱 모듈은 복수의 프로세싱 요소를 사용하여 연산을 수행함으로써 데이터를 처리하도록 구성되는 프로세싱 코어와, 인터페이스를 통한 데이터 및 캐시 모듈에 저장된 데이터를 인출하고, 인출된 데이터를 프로세싱 코어에 제공하도록 구성되는 입력 제어 유닛과, 프로세싱 코어에 의해 처리된 데이터를 인터페이스 및 캐시 모듈에 제공하도록 구성되는 출력 제어 유닛을 포함한다.
상기 장치는 상기 인터페이스를 사용하여 컴퓨팅 시스템에 접속(plugged)될 수 있고, 상기 컴퓨팅 시스템은 복수의 프로세싱 모듈에 의한 처리를 위한 입력 데이터를 수신하고, 상기 장치의 처리의 결과를 제공할 수 있다. 상기 장치는, 복수의 프로세싱 모듈이 캐시 모듈을 통해 임의의 중간 데이터 또는 결과를 직접 액세스할 수 있도록 결과 데이터의 일부를 저장하는 캐시 모듈을 더 포함한다. 이를 통해, 최초 설정에 대한 입력 데이터의 전송 및 (최종) 결과의 교환을 감소시킬 수 있다. 처리 중에 데이터가 요구되는 경우에도, 상기 인터페이스를 통한 중간 데이터의 과도한 통신이 감소될 수 있다.
캐시 모듈은 동일한 다이(die)나 회로 상에서, 또는 동일한 패키지 내에서 복수의 프로세싱 모듈과 함께 제공될 수 있고, 캐시 모듈을 통해 다음 계산 사이클에 대한 입력 데이터로서 출력 데이터를 직접 교환할 수 있도록 하기 위해 복수의 프로세싱 모듈에 유선으로 연결되거나 다른 방식으로 결합될 수 있다. 상기 캐시 모듈은, (서로 다른 또는 동일한) 하나 이상의 프로세싱 모듈의 처리를 위한 입력으로서 더 작용할 수 있는, 프로세싱 모듈 중 하나 이상의 결과 데이터의 적어도 일부를 저장 및/또는 버퍼링하는 메모리로서 구성될 수 있다. 상기 캐시 모듈은, 각각의 프로세싱 모듈을 위한 저 레이턴시(latency) 온칩(on-chip) 메모리를 제공하기 위하여, 프로세싱 모듈에 연결될 수 있는 다수의 기입 및 판독 포트를 갖는 메모리일 수 있다
상기 장치는 복수의 프로세싱 모듈을 포함하며, 각 프로세싱 모듈은 상기 인터페이스를 통해 또는 상기 캐시 모듈로부터 직접 인출될 수 있는 입력 데이터에 대한 필요한 연산을 수행할 수 있다. 이를 통해, 다양한 작업이나 연산을 위해 상기 장치를 유연하게 구성할 수 있다.
각각의 프로세싱 모듈은, 입력 데이터의 다수의 데이터 값을 처리하여 대응되는 (중간) 결과를 생성할 수 있는 복수의 프로세싱 요소를 갖는 프로세싱 코어를 포함한다. 각각의 프로세싱 모듈은, 프로세싱 코어에 의해 처리될 입력 데이터가 인터페이스를 통해 인출될지, 또는 캐시 모듈로부터 인출될지를 제어하는 입력 제어 유닛을 더 포함한다. 컨볼루션 연산 결과의 제공은 출력 제어 유닛에 의해 더 제어되며, 출력 제어 유닛은 출력 데이터가 인터페이스를 통해 (외부 저장소에) 제공될지, 또는 복수의 프로세싱 모듈 중 적어도 하나에 의해 후속 입력으로서 더 사용되는 중간 데이터로서 캐시 모듈에 저장될지를 제어한다. 이를 통해, 다양한 작업이나 연산을 위한 동작을 가속하도록 상기 장치를 유연하게 구성할 수 있으며, 이에 따라 가용 리소스가 효율적으로 활용되고, 인터페이스를 통해 외부 호스트에 통신되는 데이터의 양이 감소된다. 따라서, 각 프로세싱 요소는 캐시 모듈에 대한 동시 액세스를 획득하기 위해 개별적인 기입 및 판독 인터페이스 상에서 캐시 모듈에 액세스할 수 있다.
바람직하게는, 입력 데이터 및/또는 출력 데이터는 신경망의 레이어 데이터를 포함할 수 있다. 일 실시예에서, 입력 데이터 및/또는 출력 데이터는 이미지 데이터를 포함할 수 있고, 입력 데이터 및/또는 출력 데이터의 데이터 요소는 각 이미지의 화상 요소(픽셀)일 수 있다.
바람직한 실시예에서, 상기 연산은 컨볼루션 연산일 수 있다. 따라서, 본 명세서의 전반에 걸쳐, 프로세싱 모듈은 컨볼루션 모듈로 표기될 수 있고, 프로세싱 코어는 복수의 프로세싱 요소를 사용하여 컨볼루션 연산을 수행함으로써 데이터를 처리하도록 구성될 수 있는 컨볼루션 코어로 표기될 수 있다. 그러나, 본 발명은 컨볼루션 연산을 가속하는 것에만 한정되지 않음을 이해해야 한다. 다른 실시예에서, 프로세싱 코어는 예컨대 입력 데이터에 대한 관계 연산을 수행할 수 있다. 당업자는 다양한 다른 예의 연산을 고려할 수 있다.
바람직한 실시예에서, 제어 모듈은 인터페이스를 통해 구성 데이터를 인출하고, 해당 구성 데이터에 기초하여 복수의 프로세싱 모듈 중 적어도 하나의 프로세싱 모듈을 설정하도록 구성된다. 상기 구성 데이터는 차원성(dimensionality), 데이터 유형 등을 포함하는 입력 데이터의 특성을 기술/포함할 수 있다. 또한, 상기 구성 데이터는, 처리될 입력 데이터의 데이터, 반복 횟수 등을 식별할 수 있는 연산(예컨대 컨볼루션 연산)의 파라미터를 더 기술/포함할 수 있다. 또한, 상기 구성 데이터는, 임의의 조합으로 중간 데이터 및/또는 결과적인 출력 데이터의 특성(예컨대 크기, 데이터 유형 등)을 저장하기 위한 캐시 모듈의 활용을 더 기술할 수 있다. 상기 구성 데이터는, 원하는 연산을 수행하도록 상기 장치를 설정할 수 있는 호스트에 의해 송신될 수 있다. 설정 후에, 상기 장치는 인터페이스를 통해 최초 입력 데이터를 수신할 수 있고, 상기 제어 모듈은 복수의 프로세싱 모듈을 트리거링(trigger)하여 최초 및 임의의 후속 입력 데이터의 처리를 시작할 수 있다.
바람직한 실시예에서, 상기 제어 모듈은 복수의 프로세싱 모듈 사이에서 커맨드를 스케줄링(schedule)하도록 더 구성된다. 상기 커맨드는 입력 데이터의 가용성에 따라 개별 프로세싱 모듈의 처리를 개시할 수 있고, 인터페이스를 통해 및/또는 캐시 모듈로/로부터 출력 데이터 및/또는 입력 데이터를 저장 및/또는 인출하도록 개별 프로세싱 모듈을 더 구성할 수 있다.
일 실시예에서, 상기 커맨드는 복수의 프로세싱 모듈의 입력 제어 유닛 및 출력 제어 유닛 중 하나 이상으로부터 수신되는 복수의 상태에 응답하여 스케줄링된다. 이들 상태는 상태 플래그로서 또는 유사한 기술을 통해 시그널링될 수 있다. 상기 제어 모듈은, 복수의 프로세싱 모듈의 입력 제어 유닛 및 출력 제어 유닛의 각각에 연결되어, 입력 데이터의 판독이 완료되었다는 표시, 결과가 준비되었다는 표시, 결과의 제공이 완료되었다는 표시, 및 복수의 프로세싱 모듈 사이의 커맨드 중재를 가능하게 하는 처리의 추가 상태 중 하나 이상을 나타낼 수 있는 신호를 수신할 수 있다. 상기 커맨드는 임의의 종류의 프로그래밍 로직 또는 프로그래밍 언어를 사용하여 정의될 수 있다. 상기 커맨드는 다수의 파라미터를 단일 워드로 접합(concatenate)시킬 수 있는 복수의 비트(예컨대 64, 128, 256, 512, 1024, 또는 그 이상(바람직하게는 2의 지수)의 비트)를 포함하는 이진 워드를 사용하여 정의되는 이진 명령어로서 정의될 수 있다. 그러나, 워드를 정의하기 위해 보다 많거나 적은 비트가 사용될 수 있음을 이해해야 한다. 예컨대, 이진 명령어는 512 비트의 워드를 포함할 수 있다. 각각의 프로세싱 모듈에 의한 처리의 파라미터는 레이어 연산 유형 및 파라미터(예컨대 영역 크기, 필터 크기, 스트라이드(stride), 확장(dilation), 컨볼루션/디컨볼루션/풀링(pooling), 스케줄링 종속성 리스트 등); 입력 평면 위치(예컨대 외부 메모리 또는 캐시 모듈 내에서의), 베이스 어드레스, 평면 오프셋 등; 및 출력 평면 위치(예컨대 외부 메모리 또는 캐시 모듈 내에서의). 베이스 어드레스, 평면 오프셋 등 중의 하나 이상을 임의의 조합으로 포함할 수 있다.
또 다른 실시예에서, 상기 제어 모듈은, 적어도 하나의 프로세싱 모듈의 적어도 하나의 출력 제어 유닛 및 하나 이상의 프로세싱 모듈의 하나 이상의 입력 제어 유닛을 제어하여, 적어도 하나의 프로세싱 모듈에 의해 처리된 데이터를 캐시 모듈을 통해 하나 이상의 프로세싱 모듈에 피드백하도록 구성된다. 적어도 하나의 프로세싱 모듈은 후속 (컨볼루션 또는 임의의 다른) 연산에서 하나 이상의 프로세싱 모듈에 의해 요구될 수 있는 결과를 제공할 수 있다. 상기 제어 모듈은 적어도 하나의 프로세싱 모듈의 적어도 하나의 출력 제어 유닛이 임의의 결과를 캐시 모듈에 저장하도록 구성할 수 있고, 하나 이상의 프로세싱 모듈의 하나 이상의 입력 제어 유닛이 입력 데이터를 캐시 모듈로부터 판독하도록 구성할 수 있다. 상기 적어도 하나의 프로세싱 모듈의 적어도 하나의 프로세싱 코어가 컨볼루션(또는 임의의 다른 연산)을 완료하자 마자, 상기 적어도 하나의 프로세싱 모듈의 적어도 하나의 출력 제어 유닛은 결과를 캐시 모듈에 저장할 수 있고, 결과가 이용 가능하다는 것을 (각각의 상태 플래그를 통해) 제어 모듈에 시그널링할 수 있다. 이후에, 상기 제어 모듈은, 하나 이상의 입력 제어 유닛이 각각의 프로세싱 코어에 의해 수행되는 후속 (컨볼루션 또는 임의의 다른) 연산을 위한 입력 데이터로서 결과 데이터를 캐시 모듈로부터 직접 인출하도록, 하나 이상의 프로세싱 모듈의 하나 이상의 입력 제어 유닛의 연산을 트리거링할 수 있다. 이를 통해, 인터페이스를 통한 입력 데이터 또는 결과의 어떠한 교환도 필요로 하지 않고 연산의 반복적인 처리가 가능해지며, 이에 따라 효과적으로 인터페이스의 사용이 감소된다. 캐시 모듈이 복수의 프로세싱 모듈에 의해 공유되기 때문에, 복수의 프로세싱 모듈 각각은 캐싱된 결과를 재사용할 수 있다. 캐시 모듈은 판독 및 기입 측에 다수의 포트를 가질 수 있는 온칩 메모리일 수 있다. 이를 통해, 인터페이스에 비해 온칩 캐시 모듈의 대역폭이 더 넓어질 수 있다. 온칩 캐시 모듈은 전력 집약적인 경계 I/O 인터페이스를 필요로 하지 않기 때문에, 전력 소모를 효과적으로 감소시킬 수 있다.
또 다른 실시예에서, 각각의 프로세싱 모듈은 인터페이스를 통해 계수 데이터를 인출하도록 구성되는 계수 제어 유닛을 더 포함한다. 상기 제어 모듈은 복수의 프로세싱 모듈의 계수 제어 유닛 중 하나 이상으로부터 수신되는 복수의 상태에 응답하여 커맨드를 추가로 스케줄링하도록 구성될 수 있다. 예컨대, 계수 제어 유닛은 계수 데이터가 판독되었다는 것을 제어 모듈에 시그널링할 수 있다. 계수 데이터는 프로세싱 코어에 제공될 수 있고, 이에 따라 프로세싱 코어는 입력 데이터 및 계수 데이터에 기초하여 (컨볼루션 또는 임의의 다른) 연산을 수행할 수 있다.
바람직한 실시예에서, 적어도 하나의 (또는 각각의) 프로세싱 코어는, 데이터 버퍼와, 복수의 프로세싱 요소를 제어하여 상기 데이터 버퍼에 저장된 입력 데이터를 처리하도록 구성되는 처리 제어 유닛을 더 포함한다. 프로세싱 요소에 의해 구현되는 연산이 컨볼루션 연산인 경우, 상기 처리 제어 유닛은 본 명세서의 전반에 걸쳐 컨볼루션 제어 유닛으로도 지칭될 수 있음을 이해해야 한다. 상기 데이터 버퍼는 입력 제어 유닛에 의해 제어될 수 있고, 입력 제어 유닛에 의해 인출된 데이터를 저장할 수 있다. 상기 처리 제어 유닛은 데이터 버퍼로부터의 입력 데이터의 인출을 구동할 수 있다. 이어서, 상기 처리 제어 유닛은, 각각의 입력 데이터를 사용하여 연산의 일부를 각각 계산할 수 있는 복수의 프로세싱 요소에 의한 (컨볼루션 또는 임의의 다른) 연산의 처리를 개시할 수 있다.
바람직한 실시예에서, 적어도 하나의 (또는 각각의) 프로세싱 코어는 계수 버퍼를 더 포함하고, 상기 처리 제어 유닛은 복수의 프로세싱 요소를 제어하여 데이터 버퍼에 저장된 입력 데이터를 계수 버퍼에 저장된 계수 데이터를 사용하여 처리하도록 구성된다. 계수 버퍼는 계수 제어 유닛에 의해 제어될 수 있고, 인출된 계수 데이터를 저장할 수 있다. 상기 처리 제어 유닛은, 계수 데이터 및 입력 데이터가 동시에 판독될 수 있도록, 계수 버퍼 및 데이터 버퍼로부터의 계수 데이터 및 입력 데이터의 인출을 각각 구동할 수 있다. 이어서, 상기 처리 제어 유닛은, 각각의 입력 데이터 및 계수 데이터를 사용하여 연산의 일부를 각각 계산할 수 있는 복수의 프로세싱 요소에 의한 (컨볼루션 또는 임의의 다른) 연산의 처리를 개시할 수 있다.
바람직한 실시예에 따르면, 상기 계수 데이터는 입력 데이터의 적어도 일부에 적용되는 가중치 계수 및 바이어스 값을 포함한다.
일 실시예에서, 상기 데이터 버퍼는 데이터(예컨대 입력 데이터의 적어도 일부)를 2차원 어레이로서 저장하도록 구성되는 2차원 데이터 버퍼이다. 따라서, 저장된 데이터는 2개의 인덱스를 사용하여 액세스될 수 있고, 이에 따라 개별 프로세싱 요소에 의한 처리를 위한 입력 데이터 요소의 선택 및 인출을 단순화할 수 있다. 대부분의 시나리오에 있어서, 상기 복수의 프로세싱 요소는 입력 데이터의 연속적인 영역에서 입력 데이터에 대한 연산을 행할 것이기 때문에, 데이터 버퍼는 입력 데이터의 연속적인 영역으로 로딩될 수 있고, 개별 프로세싱 요소는 이들의 인덱스에 따라 입력 데이터의 각각의 데이터 요소를 제공받을 수 있다.
바람직한 실시예에서, 상기 데이터 버퍼 내의 데이터는 본 발명의 하나 이상의 실시예에서 설명되는 바와 같은 입력 윈도우를 사용하여 액세스될 수 있다.
적어도 하나의 실시예에서, 상기 프로세싱 코어의 적어도 하나의 프로세싱 요소는 승산-누적(multiply-accumulate) 연산을 수행하도록 구성된다. 상기 승산-누적 연산은 승산-누적 회로(multiply-accumulate circuit; MAC)를 사용하여 구현될 수 있다. 각각의 프로세싱 요소는, 전용 하드웨어로서 또는 승산-누적 연산이나 관계 연산과 같은 연산을 수행하도록 구성되는 프로그래밍 가능한 하드웨어로서 제공될 수 있다. 상기 프로세싱 모듈 또는 그 적어도 일부는 ASIC을 포함하는 커스터마이징(customize)된 하드웨어로서, 또는 FPGA를 포함하는 재구성 가능한 하드웨어로서 구현될 수 있다. 모든 프로세싱 요소는 동일하거나 유사한 방식으로 하드웨어로 구현될 수 있고, 각각의 프로세싱 요소는 연산을 구현할 수 있음을 이해해야 한다. 그러나, 프로세싱 요소는 서로 다르게 구현될 수도 있다. 예컨대, 각각의 프로세싱 모듈의 복수의 프로세싱 요소는 서로 다른 연산을 구현할 수 있거나, 또는 동일한 연산에 대해 임의의 조합으로 서로 다르게 구현될 수 있다.
또 다른 실시예에서, 상기 프로세싱 코어의 적어도 하나의 프로세싱 요소는 (승산-누적 또는 임의의 다른) 연산의 결과를 버퍼링하도록 구성되는 결과 저장소를 더 포함한다. 상기 결과 저장소는 부분 결과를 저장할 수 있고, 개별 프로세싱 요소에 의해 수행되는 연산에 의해 영향을 받는 각각의 위치에서 동일한 출력에 대한 부분 결과를 버퍼링하도록 처리 제어 유닛에 의해 제어될 수 있다. 승산-누적 연산을 제공하는 프로세싱 요소는 결과 저장소를 구현하는 메모리를 갖는 MAC 유닛과, 승산기, 가산기 및 바이어스 멀티플렉서를 갖는 MADD 회로로서 구현될 수 있다. FPGA 구현예에 있어서, MADD 회로는 하나 이상의 전용 DSP 블록을 전체적으로 또는 부분적으로 활용할 수 있다. 추가적으로 또는 대안적으로, MADD 회로는 분산 로직으로만 구현될 수 있다. 상기 결과 저장소를 구현하는 메모리는 전용 RAM 또는 LUT 기반 SRAM일 수 있다.
상기 MAC 유닛의 처리는 복수의 클럭 사이클의 레이턴시를 가질 수 있다. 특히, MADD 회로의 처리 및 결과 저장소에서의 후속 저장은 다수의 클럭 사이클을 필요로 할 수 있다. 따라서, 최근에 저장된 부분 결과는 몇 개의 클럭 사이클 후에 이용 가능(및 액세스 가능 또는 인출 가능)할 수 있다. 이에 따라, 결과 저장소에서의 최근에 수정된 어드레스의 지연된 가용성으로 인해 처리가 지연될 수 있다. 이러한 문제를 해결하기 위해, 결과 저장소는 프로세싱 코어의 연산의 다수의 결과를 버퍼링할 수 있고, 프로세싱 코어는 동일하거나 서로 다른 계수 및/또는 파라미터를 사용하여 서로 다른 입력 데이터에 대해 서로 다른 결과를 반복적으로 계산할 수 있다. 각각의 부분 결과가 결과 저장소에 저장된다. MAC 유닛의 레이턴시를 정의하는 다수의 클럭 사이클이 경과한 후에, 프로세싱 코어는 최초 입력 데이터의 처리로 되돌아가서, 결과 저장소에 저장된 부분 결과를 요구하는 최초 데이터에 대한 다음의 또는 동일한 계수 및/또는 파라미터에 기초하여 다음의 부분 결과를 계산할 수 있다. 이러한 결과는 결과 저장소로부터의 요구되는 부분 결과로 누적된다. 이러한 설계는 하드웨어의 레이턴시를 활용하여 프로세싱 요소의 복잡한 하드웨어 구현 없이 파이프라이닝(pipelining)을 가능하게 한다.
MAC 유닛의 메모리는 후속 누적을 위한 결과를 버퍼링하기 위해 레지스터를 사용하는 종래의 MAC과는 상이하다. 본 발명의 실시예에 따른 결과 저장소는 그러한 레지스터에 비해 몇 가지 장점을 갖는다. 종래의 MAC에서는 가산기가 단일 레지스터로부터 입력을 수신하기 때문에, 입력 데이터의 한 영역으로만 누적이 제한될 수 있다. 단일 레지스터를 사용하여 입력 데이터에 대한 순차적 처리를 구현하는 것은, 판독될 입력 데이터의 양의 증가를 더 요구할 수 있다. 어드레싱 가능한 결과 저장소를 프로세싱 요소에 제공함으로써, 프로세싱 요소는 입력 데이터의 여러 영역에 대해 유연하게 연산을 행할 수 있고, 입력 데이터의 각각의 영역에 대한 복수의 부분 결과를 저장할 수 있다.
또 다른 실시예에서, 상기 장치는 인터페이스를 통해 입력 데이터를 인출하도록 구성되며, 상기 입력 데이터는 신경망의 입력 레이어의 적어도 일부를 나타낸다. 상기 제어 모듈은, 신경망의 레이아웃 및 토폴로지(topology)를 나타내고 신경망의 각 레이어 상에서 수행될 (컨볼루션 또는 임의의 다른) 연산을 특정하는 구성 데이터를 인터페이스를 통해 수신할 수 있다.
다른 실시예에서, 적어도 하나의 프로세싱 모듈은 신경망의 레이어의 적어도 일부를 처리하고, 캐시에 저장된 데이터는 신경망의 다음 레이어의 적어도 일부를 나타낸다. 따라서, 상기 장치는 인터페이스를 통해 입력 레이어의 입력 데이터를 수신할 수 있고, 신경망의 다음 레이어의 처리를 위한 입력 데이터로서 사용될 수 있는, 입력 레이어에 대한 컨볼루션 연산에 의해 생성된 결과의 적어도 일부를 캐시 모듈에 저장할 수 있다. 이를 통해, 인터페이스를 통해 교환될 데이터의 양을 줄일 수 있다.
바람직하게는, 상기 신경망은 컨볼루션 신경망(CNN)이다.
특히 바람직한 실시예에서, 상기 장치는 컨볼루션 신경망 가속기이다.
본 발명의 다른 태양에 따르면, 프로세싱 호스트, 적어도 하나의 메모리, 및 인터커넥트를 포함하는 시스템이 정의되며, 상기 시스템은 본 발명의 일 실시예에 따른 장치를 더 포함한다. 상기 인터커넥트는 상기 프로세싱 호스트, 상기 적어도 하나의 메모리 및 상기 장치를 결합시키도록 구성될 수 있으며, 이에 따라 상기 장치는 상기 인터커넥트를 통해 상기 적어도 하나의 메모리로부터 입력 데이터를 인출할 수 있다. 상기 장치는 컨볼루션 연산을 수행하는 가속기일 수 있다. 상기 프로세싱 호스트는 필요한 데이터(예컨대 센서 또는 상태 데이터 및 다른 처리 데이터)를 적어도 하나의 메모리에 로딩할 수 있고, 원하는 (컨볼루션 또는 임의의 다른) 연산을 수행하도록 상기 장치를 구성할 수 있다. 이어서, 상기 호스트는 필요한 작업을 수행하기 위해 상기 적어도 하나의 메모리로부터 입력 데이터를 수신(또는 인출)하도록 상기 장치를 구성할 수 있다. 완료 시에, 상기 장치는 상기 프로세싱 호스트에 대하여 결과의 가용성을 시그널링할 수 있고/있거나 해당 결과를 상기 적어도 하나의 메모리에 직접 기입할 수 있다.
상기 장치는, 다음 반복에서 원하는 연산을 수행하기 위해 동일한 또는 다른 프로세싱 모듈에 의해 액세스될 수 있는, 각각의 프로세싱 모듈에 의해 처리된 데이터의 적어도 일부를 저장할 수 있는 캐시 모듈을 구현하기 때문에, 상기 적어도 하나의 메모리와 상기 장치 사이에서 상기 인터커넥트를 통해 교환될 데이터의 수가 감소된다. 컨볼루션 연산을 수행하도록 개별적으로 구성되고, 인터커넥트를 통해 데이터를 캐시 모듈로부터/로 인출 및/또는 저장하고/하거나 상기 적어도 하나의 메모리에 저장할 수 있는 복수의 프로세싱 모듈을 상기 장치에 제공함으로써, 상기 장치는 다양한 컨볼루션 작업 및 연산에 유연하게 적응될 수 있다.
바람직한 실시예에서, 상기 인터커넥트는 시스템 버스이다.
상기 장치의 실시예는 임의의 조합으로 상기 시스템의 실시예에 병합될 수 있음을 이해해야 한다. 마찬가지로, 본 발명의 일 실시예에 따른 상기 시스템의 특징은 임의의 조합으로 상기 장치의 적어도 하나의 실시예에 병합될 수 있다.
본 발명의 또 다른 태양에 따르면, 본 발명의 하나 이상의 실시예에 따른 장치를 동작시키는 방법이 정의된다.
본 발명의 일 태양에서, 가속기 장치에 의해 데이터를 액세스하고 처리하기 위한 방법이 정의되며, 상기 방법은, 상기 가속기 장치에 의해 처리될 입력 데이터의 적어도 일부를 인출하는 단계, 상기 입력 데이터를 복수의 인접한 입력 타일로 분절화(segment)하는 단계 - 상기 입력 타일은 미리 결정된 크기를 가짐 - , 상기 복수의 인접한 입력 타일 중 적어도 하나를 상기 가속기 장치의 데이터 버퍼에 저장하는 단계, 상기 데이터 버퍼에 저장된, 상기 복수의 인접한 입력 타일 중 상기 적어도 하나의 데이터 요소에 걸쳐 입력 윈도우를 배치함으로써, 상기 데이터 버퍼에 저장된 상기 데이터 요소를 액세스하여 복수의 입력 영역을 생성하는 단계 - 상기 입력 윈도우는 파라미터의 집합에 따라 조절 가능함 - , 및 상기 복수의 입력 영역 중 적어도 하나를 순차적으로 처리하여, 상기 가속기 장치에 의해 상기 복수의 인접한 입력 타일 중 상기 적어도 하나를 적어도 부분적으로 처리하는 단계를 포함한다.
상기 방법은 본 발명의 하나 이상의 실시예에 따른 장치에 적용될 수 있다. 상기 방법은 데이터 버퍼에 저장된 데이터의 인출을 단순화한다. 따라서, 프로세싱 요소를 구현하는 하드웨어는 연속적인 입력 영역의 처리를 위해 단순화될 수 있다.
일 실시예에서, 상기 방법은, 복수의 인접한 입력 타일 중 다른 하나를 데이터 버퍼에 순차적으로 저장하는 단계, 및 입력 윈도우를 사용하여 복수의 인접한 입력 타일 중 상기 다른 하나의 데이터를 액세스하는 단계를 더 포함한다.
일 실시예에 따르면, 파라미터의 집합은 스트라이드 값 및 확장 값을 포함한다.
바람직한 실시예에서, 확장 값은 입력 윈도우의 2개의 연속적인 위치 사이의 거리를 규정한다.
또 다른 실시예에서, 상기 방법은 가속기 장치의 처리 모드를 결정하는 단계를 더 포함한다.
바람직하게는, 제1 처리 모드에서, 스트라이드 값은 입력 윈도우에 의해 샘플링된 데이터 요소 사이의 간격을 정의한다.
다른 실시예에 따르면, 제2 처리 모드에서, 스트라이드 값은 입력 윈도우의 단일 데이터 요소에 의해 생성된 데이터 요소의 수를 정의한다. 데이터 요소는 1 이상의 차원, 2차원, 3차원, 또는 4이상의 차원으로 생성될 수 있다. 예컨대, 데이터 요소는 수평 차원 및 수직 차원을 포함하는 2차원으로 생성될 수 있다. 입력 윈도우의 단일 데이터 요소에 의해 생성된 데이터 요소의 수는, 차원의 수 및/또는 각 차원에 대해 정의될 수 있는 스트라이드 값(또는 스트라이드 값 성분)에 종속될 수 있다. 예컨대, 2차원에서, 수평 스트라이드 값(성분) sx 및 수직 스트라이드 값(성분) sy이 정의될 수 있고, 입력 윈도우의 단일 데이터 요소에 의해 생성된 데이터 요소의 수는 sx * sy일 수 있다. 스트라이드 값 및/또는 확장 값과 같은 파라미터의 집합의 임의의 파라미터는, 입력 및/또는 출력 데이터의 차원을 지칭할 수 있는 하나 이상의 차원에 대한 하나 이상의 성분을 갖는 것으로 정의될 수 있음을 이해해야 한다. 파라미터의 각 성분은, 예컨대 동일한 스트라이드 값(성분)이 적어도 일부의 또는 모든 차원에 적용될 수 있도록, 개별 차원 및/또는 다수의 차원과 연관될 수 있다. 예컨대, sx = sy의 경우, 동일한 스트라이드 값이 출력 데이터의 2개의 차원 각각에 적용될 수 있다.
일 실시예에서, 파라미터의 집합은 계수 버퍼에 저장된 계수 행렬에 대한 매핑을 더 포함하고, 입력 영역은 매핑에 따라 계수 행렬의 적어도 하나의 요소를 입력 영역에 적용함으로써 처리된다.
일 실시예에 따르면, 상기 방법은, 상기 입력 영역의 생성과 병행하여 상기 계수 행렬의 상기 적어도 하나의 요소를 인출하는 단계, 및 적어도 하나의 프로세싱 요소를 사용하여 상기 입력 영역 상에 상기 계수 행렬의 상기 적어도 하나의 요소를 적용하는 단계를 더 포함한다.
바람직한 실시예에서, 상기 적어도 하나의 프로세싱 요소는 요소별 곱(element-wise product)을 구현한다.
다른 실시예에 따르면, 상기 입력 윈도우는 상기 매핑 및/또는 상기 처리 모드에 따라 상기 데이터 버퍼에 저장된 데이터 요소에 걸쳐 배치된다.
또 다른 실시예에서, 입력 윈도우를 통해 데이터 요소를 액세스하는 것은 데이터 버퍼를 구현하는 회로에 내장(hard-wired)된다.
다른 실시예에서, 상기 데이터 버퍼는 2차원 데이터 버퍼이고, 상기 복수의 입력 영역 각각은 2차원 영역을 나타낸다.
바람직하게는, 상기 가속기 장치는 입력 데이터에 대한 컨볼루션 연산을 구현한다.
바람직한 실시예에서, 상기 입력 데이터는 센서 데이터를 포함한다. 바람직하게는, 상기 센서 데이터는 컴퓨터 비전 데이터, 이미지 데이터 및/또는 하나 이상의 디바이스의 처리 상태의 모니터링 데이터 중 하나 이상을 포함할 수 있다.
본 발명의 일 태양에 따르면, 컴퓨팅 디바이스 또는 장치 상에서 실행될 때, 본 발명의 임의의 하나의 실시예에 따른 방법을 실행하도록 상기 컴퓨팅 디바이스 또는 장치를 구성하는 명령어를 저장하는 하나 이상의 머신 판독 가능(machine readable) 매체가 정의된다.
본 발명의 다른 태양에 따르면, 입력 데이터를 처리하기 위한 가속기 장치가 정의되고, 상기 장치는 상기 장치를 인터커넥트에 결합시키도록 구성되는 인터페이스 및 입력 데이터를 처리하도록 구성되는 적어도 하나의 프로세싱 모듈을 포함하며, 상기 가속기 장치는 인터페이스를 통해 입력 데이터의 적어도 일부를 인출하고, 본 발명의 하나 이상의 실시예의 임의의 한 방법에 따라 적어도 하나의 프로세싱 모듈을 사용하여 입력 데이터를 처리하도록 구성된다. 가속기 장치는 본 발명의 하나 이상의 실시예에 따른 장치 또는 시스템의 임의의 특징을 임의의 조합으로 포함할 수 있음을 이해해야 한다.
본 발명의 실시예 및 예시는 다양한 모듈, 유닛, 코어, 또는 요소를 지칭한다. 상기 모듈, 유닛, 코어 및/또는 요소는 필요한 기능을 수행하기 위해 전용 하드웨어로서 및/또는 소프트웨어나 펌웨어에 의해 구성되는 하드웨어로서 임의의 조합으로 구현될 수 있음을 이해해야 한다. 예컨대, 상기 처리(또는 컨볼루션) 모듈, 상기 처리(또는 컨볼루션) 코어 및/또는 상기 처리(또는 컨볼루션) 요소는, 임의의 조합으로, FPGA 또는 ASIC에 기초한 하드웨어 또는 임의의 다른 커스터마이징된 및/또는 프로그래밍 가능한 하드웨어로 구현될 수 있다. 유사하게, 상기 캐시 모듈, 상기 데이터 버퍼, 상기 계수 버퍼 및/또는 상기 결과 저장소는 임의의 조합으로 메모리 회로로서 구현될 수 있다. 하드웨어 구성요소 각각은 본 발명의 실시예에서 설명되는 바와 같은 필요한 기능을 수행하도록 소프트웨어 및/또는 펌웨어에 의해 더 구성될 수 있다. 상기 제어 모듈, 상기 입력 제어 유닛, 상기 출력 제어 유닛 및/또는 상기 컨볼루션 제어 유닛은, 임의의 조합으로, 본 발명의 실시예에서 설명되는 바와 같은 제어 연산 및/또는 시그널링을 수행하도록 구성되는 범용 또는 전용 처리 하드웨어를 사용하여 구현될 수 있다. 그러나, 본 발명의 실시예가 하드웨어 기반이라 하더라도, 이러한 구성은 예시일 뿐 본 발명은 하드웨어 및/또는 소프트웨어로의 특정한 구현에 한정되지 않음을 이해해야 한다.
본 발명의 구체적인 특징, 태양 및 장점은 아래의 설명 및 첨부 도면과 관련하여 더 잘 이해될 것이다.
도 1은 본 발명의 실시예에서 사용될 수 있는 신경망의 개략도를 도시한다.
도 2는 본 발명의 실시예에서 적용될 수 있는 신경망의 레이어에서 수행될 수 있는 컨볼루션 연산을 나타낸다.
도 3은 본 발명의 실시예에서 적용될 수 있는 신경망의 레이어에서 단일 요소를 계산하기 위한 컨볼루션 연산을 도시한다.
도 4는 본 발명의 일 실시예에 따른 가속기 장치를 도시한다.
도 5는 본 발명의 하나 이상의 실시예에 의해 처리되는 입력 데이터의 입력 타일의 구조를 도시한다.
도 6은 본 발명의 하나 이상의 실시예에 따라 입력 평면 영역을 입력 타일로 분할한 것을 도시한다.
도 7은 본 발명의 하나 이상의 실시예에 따른 입력 타일에 기초한 출력 데이터의 계산을 도시한다.
도 8은 본 발명의 하나 이상의 실시예에 적용될 수 있는 입력 타일에 대한 컨볼루션 연산의 개략도를 도시한다.
도 9는 본 발명의 하나 이상의 실시예에 따른 컨볼루션 연산을 계산하기 위한 입력 윈도우의 구성을 도시한다.
도 10은 본 발명의 하나 이상의 실시예에 따른 컨볼루션 연산을 계산하기 위한 입력 윈도우의 구성에 관한 다른 예를 도시한다.
도 11은 본 발명의 하나 이상의 실시예에 따른 컨볼루션 연산을 계산하기 위한 입력 윈도우의 구성 및 배치에 관한 일례를 도시한다.
도 12는 본 발명의 하나 이상의 실시예에 따른 디컨볼루션(de-convolution) 연산을 계산하기 위한 입력 윈도우의 배치에 관한 예를 도시한다.
도 13a 및 도 13b는 본 발명의 실시예에 따른 디컨볼루션 연산을 계산하기 위한 구성의 다른 예를 도시한다.
도 14는 본 발명의 일 실시예에 따른 방법의 흐름도를 도시한다.
이하의 설명에서, 예시로서 다양한 실시예를 도시하는 도면을 참조한다. 또한, 다양한 실시예가 몇개의 예를 참조하여 이하에서 설명될 것이다. 실시예는 청구된 대상의 범위로부터 벗어나지 않고 설계 및 구조의 변화를 포함할 수 있다는 것을 이해해야 한다.
도 1은 신경망의 개략도를 도시한다. 신경망은 인공 지능, 기계 학습, 데이터 마이닝(data mining) 및 다른 영역에서 사용되는 잘 알려진 시스템이다. 신경망은 입력 데이터 내의 요소를 식별 또는 분류하거나 특징짓도록 훈련될 수 있다. 신경망은 전형적으로 입력 레이어(101) 및 출력 레이어(103)을 포함하는 적어도 두 개의 상호 연결된 레이어를 포함하며, 이는 도 1에서 "레이어 0" 및 "레이어 L-1"로 도시된다. 또한, 신경망은 하나 이상의 은닉 레이어(105)를 포함할 수 있으며, 이는 도 1에서 "레이어 1" 내지 "레이어 L-2"으로 도시된다. 각각의 레이어(101, 105, 103)는 신경망의 다음 레이어의 각 데이터 요소를 결정하기 위해 컨볼루션 연산 또는 관계 연산과 같은 수학적 연산에 따라 처리될 수 있는 복수의 1차원, 2차원, 또는 다차원 데이터 요소 또는 텐서(tensor)를 포함할 수 있으며, 여기서 다음 레이어는 또한 1차원, 2차원, 또는 다차원의 데이터 요소 또는 텐서를 포함할 수 있다. 신경망의 입력 및 출력 레이어의 차원 및 구조는 신경망의 인접한 레이어를 상호 연결하는 수학적 연산을 통해 전적으로 정의될 수 있다.
예컨대, 신경망의 입력 레이어(101) 상의 입력 데이터는 예컨대 차량에 장착되거나 또는 스마트 인경, 헤드셋, 헤드마운트(head-mounted) 디스플레이 또는 시스루(see-through) 디스플레이와 같은 웨어러블(wearable) 디바이스에 장착될 수 있는 비디오 카메라에 의해 캡처된 이미지 데이터를 포함할 수 있다. 신경망은 얼굴, 교통 표지, 다른 차량 등과 같은 이미지 데이터 내의 물체를 인식하도록 훈련될 수 있다. 물체에 관한 각각의 분류 및 추가 데이터가 출력 레이어(103)에 제공될 수 있다.
도 1은 예컨대 입력 이미지에 대해 컴퓨터 비전 작업 또는 알고리즘을 수행하는데 사용될 수 있는 특정 유형의 신경망을 도시하지만, 본 발명은 신경망, 특정 유형의 신경망, 또는 특정 응용 영역에 한정되지 않는다는 것을 이해해야 한다.
신경망의 다음 레이어의 값들을 계산하기 위한 수학적 연산은 도 2에 도시된 컨볼루션 연산으로서 표현될 수 있다. 도 2에서, 입력 평면은 각각 IW x IH의 크기를 갖는 복수의 2차원 입력 평면을 포함하는 입력 평면 텐서(201)로서 정의된다. 각각의 입력 평면(201-1, …, 201-c)은 가중치 텐서(203)의 일련의 가중치 행렬(203-1, …, 203-c)의 가중치 행렬과 컨볼루션될 수 있고, 여기서 각각의 가중치 행렬은, 활성화 함수 fact에 의해 매핑된 후에, 신경망의 다음 레이어의 값을 정의하는 출력 평면 텐서(205)의 하나의 출력 평면(205-1, …, 205-n)에 기여한다. 따라서, N개의 출력 평면(205-1, …, 205-n)에 대해, 일련의 가중치 행렬(203-1, …, 203-c)의 각각은 N개의 가중치 행렬을 포함한다. 따라서, 입력 평면 텐서(201)의 C개의 입력 평면 및 출력 평면 텐서(205)의 N개의 출력 평면에 대한 가중치 텐서(203)는 FW x FH x N x C의 크기를 갖는다. 본 명세서의 전반에 걸쳐, 가중치 행렬은 가중치를 계수로서 특정하는 계수 행렬로서 이해될 수 있음을 이해해야 한다. 따라서, 하나 이상의 실시예에서, 가중치 행렬은 계수 행렬일 수 있고, 여기서 계수는 가중치(본 명세서의 전반에 걸쳐 가중치 계수로도 지칭됨)를 나타낸다. 하나 이상의 실시예에서, 가중치는 일반적으로 계수로서 이해될 수 있으며, 따라서 가중치 행렬 및 계수 행렬이라는 용어들뿐만 아니라 가중치, 계수 (값) 및/또는 가중치 계수 (값)이라는 용어들은 본 명세서의 전반에 걸쳐 상호 교환적으로 사용될 수 있다.
입력 평면(201-1, …, 201-c)을 각각의 가중치 행렬과 컨볼루션한 결과는 개별 출력 평면(205-1, …, 205-n)에 대한 바이어스(bias) 값을 포함하는 바이어스 벡터(207)를 형성할 수 있는 단일 바이어스 값에 의해 더 바이어스된다.
컨볼루션된 입력 평면 및 가중치 행렬과 바이어스 값의 합은 활성화 함수 fact에 의해 매핑되어 각각의 출력 평면(205-1, …, 205-n)을 생성한다.
일반적으로, 컨볼루션 연산은
Figure pct00001
로서 정의될 수 있으며, 여기서 fact는 활성화 함수, I(c)는 입력 평면 텐서(201), W(n,c)는 가중치 텐서(203), B(n)은 바이어스 벡터(207), O(n)은 출력 평면 텐서(205)이다.
도 3은 본 발명의 하나 이상의 실시예에서 적용될 수 있는 출력 평면 텐서의 요소를 계산하기 위한 컨볼루션 연산을 도시한다. 도 3에 도시된 연산은 도 2에 도시된 바와 같은 요소에 기초할 수 있기 때문에, 동일 또는 유사한 특징에 대해서는 동일한 참조 부호가 사용되었다.
입력 평면 텐서는 C개의 입력 평면(201-1, …, 201-c)을 포함할 수 있다. 마찬가지로, 출력 평면 텐서는 출력 평면(205-1, …, 205-n)을 포함할 수 있다. 도 2에 도시된 바와 같은 일련의 가중치 행렬(203-1, …, 203-c)로부터 추출될 수 있는 각각의 출력 평면(205-1, …, 205-n)에 대한 가중치 행렬(301-1, …, 301-n)의 집합은 각각의 위치(305)에서 입력 평면(201-1, …, 201-c)으로부터 추출되는 데이터 값(303)과 요소별로 곱해지고, 출력 평면(205-1, …, 205-n)마다 합산되어(내적), 위치(307)에서 출력 평면(205-1, …, 205-n)마다 컨볼루션의 단일 데이터 결과를 제공한다. 따라서, 위치(305)는 출력 평면(205-1, …, 205-n)에서의 위치(307)와 상관될 수 있다.
입력 값(303) 및 가중치 행렬(301-1, …, 301-n)은 각각 단일 값을 계산하기 위한 컨볼루션에 사용된다. 이러한 값은 도 2의 바이어스 벡터(207)에 의해 정의될 수 있는 바이어스 값(309-1, …, 309-n)에 의해 각각 더 바이어스된다. 그 결과는 활성화 함수(311-1, …, 311-n)에 의해 매핑될 수 있다. 각각의 입력 평면(201-1, …, 201-c)의 입력 데이터는 각각의 출력 평면(205-1, …, 205-n)에서의 출력 값에 기여한다. 그러한 기여는 각각의 가중치 행렬 (301-1, …, 301-n)에 의해 제어된다. 본 명세서의 전반에 걸쳐 컨볼루션 커널(convolution kernel)로도 지칭될 수 있는 가중치 행렬의 크기는 입력 평면(201-1, …, 201-c)에서의 입력 데이터의 입력 영역의 각각의 크기를 결정할 수 있다.
도 4는 본 발명의 일 실시예에 따른 장치의 개략도를 도시한다. 장치(401)는 예컨대 도 1, 도 2 및 도 3에 도시된 바와 같은 신경망의 연산을 지원할 수 있는 컨볼루션 연산을 위한 가속기일 수 있다. 그러나, 가속기 장치가 신경망의 컨볼루션 연산에 관하여 설명되더라도, 해당 장치는 하나의 특정 시나리오만에 한정되지 않으며, 입력 데이터에 대해 수행될 상당한 양의 (컨볼루션 또는 임의의 다른) 연산을 수반하는 임의의 작업 또는 시나리오를 가속할 수 있음을 이해해야 한다.
장치(401)는 인터페이스를 통해 인터커넥트(403)에 결합될 수 있다. 인터커넥트는 예컨대 장치(401)를 외부 메모리(405) 및 프로세싱 호스트(407)에 연결하기 위한 시스템 버스 또는 임의의 다른 적절한 연결 또는 링크일 수 있다. 프로세싱 호스트(407)는 장치(401)의 연산을 제어할 수 있고, 컨볼루션 연산을 사용하여 입력 데이터를 처리하기 위해 메모리(405)에 저장된 입력 데이터를 처리하도록 장치(401)를 구성할 수 있다. 장치(401)는 복수의 프로세싱 모듈을 포함할 수 있다. 도 4의 실시예에서, 프로세싱 모듈은 메모리(405)에 저장된 입력 데이터를 처리하도록 각각 구성될 수 있는 컨볼루션 모듈(409)로서 도시될 수 있다. 장치(401)는 임의의 수의 컨볼루션 모듈(409)(예컨대, 도 4에 도시된 바와 같은 E개의 컨볼루션 모듈)로 구성될 수 있다. 이로 인해, 복수의 컨볼루션 모듈(409)에 의한 개별 레이어들 중 일부 또는 다수의 입력 데이터의 병렬 처리가 가능해진다. 컨볼루션 모듈(409)은 또한 본 명세서의 전반에 걸쳐 컨볼루션 엔진으로 지칭될 수 있고, 이들 용어는 상호 교환적으로 사용될 수 있다.
장치(401)는 컨볼루션 모듈(409) 및 캐시 모듈(413) 각각의 처리를 제어할 수 있는 제어 모듈(411)을 더 포함한다. 캐시 모듈(413)은 컨볼루션 모듈(409) 각각에 연결될 수 있으며, 컨볼루션 모듈(409) 중 하나 이상에 의해 처리된 데이터를 저장하고, 컨볼루션 모듈(409) 각각이 상기 저장된 데이터를 추가 처리를 위한 입력 데이터로서 인출(retrieve)할 수 있게 하도록 구성될 수 있다. 캐시 모듈(413)은 온칩 메모리일 수 있다. 집적 회로에서는 대부분의 전력이 외부 하드웨어 액세스에 의해 소비되기 때문에, 캐시 모듈(413)에서 결과를 보유하는 것은 전력 소비를 감소시킨다. 더욱이, 온칩 캐시 모듈(413)은 보다 높은 데이터 교환 속도 및 보다 짧은 레이턴시(latency) 기간을 가능하게 할 수 있다. 캐시 모듈(413)은 캐시된 데이터를 낮은 레이턴시로 제공하기 위한 다수의 기입 및 판독 포트를 포함할 수 있다. 따라서, 캐시 모듈(413)은 임의의 정렬 알고리즘 또는 다른 캐싱 전략 구현 로직을 필요로 하지 않는 저 에너지, 저 레이턴시의 온칩 메모리로서 이해되어야 한다.
컨볼루션 모듈은 컨볼루션 코어(415), 입력 제어 유닛(417) 및 출력 제어 유닛(419)을 포함할 수 있다. 컨볼루션 코어(415)는 M개의 프로세싱 요소(418)와 같은 복수의 프로세싱 요소(418)를 사용하여 (컨볼루션 또는 임의의 다른) 연산을 수행함으로써 임의의 입력 데이터를 처리할 수 있다.
입력 제어 유닛(417)은 컨볼루션 코어(415)에 의해 처리되는 데이터를 인출하도록 구성될 수 있다. 특히, 입력 제어 유닛(417)은 메모리(405)에 저장된 데이터 또는 인터커넥트(403)를 통해 프로세싱 호스트(407)에 의해 제공되는 데이터와 같은 데이터를 인터페이스를 통해 인출할 수 있다. 입력 제어 유닛은 또한 캐시 모듈(413)에 저장된 데이터를 인출하도록 구성될 수 있다. 따라서, 컨볼루션 코어(415)에 의해 처리될 입력 데이터는 인터페이스를 통해 외부에서 인출될 수 있거나, 또는 컨볼루션 모듈(409) 중 임의의 것에 의해 이전에 처리되었던 데이터에 대응될 수 있다. 이로 인해, 인터페이스를 통해 전송될 데이터의 양이 감소될 수 있고, 따라서 인터커넥트(403)의 대역폭을 절약할 수 있다. 컨볼루션 모듈(409) 각각과 상호 연결되는 장치(401) 내에 캐시 모듈을 제공함으로써, 컨볼루션 모듈(409)은 인터페이스를 통한 임의의 데이터 전송을 필요로 하지 않고 다른(또는 동일한) 컨볼루션 모듈에 대해 피드백되는 결과를 유연하게 생성할 수 있다. 따라서, 출력 제어 유닛(419)은 컨볼루션 코어(415)에 의해 처리된 데이터를 인터페이스 및 인터커넥트(403)를 통해 메모리(405) 및/또는 캐시 모듈(413)에 제공하도록 구성될 수 있다. 출력 제어 유닛(419)은 또한 컨볼루션 코어(415)에 의해 처리된 데이터를 인터페이스 및 인터커넥트(403)를 통해 프로세싱 호스트(407)에 직접 또는 메모리(405)를 통해 제공하도록 구성될 수 있다. 예컨대, 출력 제어 유닛(419)은 메모리(405)에 데이터를 기입할 수 있다. 이후에, 프로세싱 호스트(407)는 메모리(405)에서 결과를 입수할 수 있다는 알림을 받을 수 있고, 프로세싱 호스트(407)는 메모리(405)로부터 결과를 인출할 수 있다. 일례에서, 프로세싱 호스트(407)는 결과의 기입 중에 출력 제어 유닛(419)에 의해 어드레싱(address)될 수 있는 어드레싱 가능 공간을 가질 수 있다.
프로세싱 호스트(407)는 구성 데이터를 제어 모듈(411)에 전송함으로써 장치(401)를 구성할 수 있다. 구성 데이터는 임의의 적절한 프로그래밍 또는 기술(description) 언어를 사용하여 데이터 구조 정의, 커맨드 시퀀스(command sequence) 등을 사용하는 처리에 관한 임의의 정의를 포함할 수 있다. 장치(401)에 대한 각각의 명령어는 복수의 파라미터를 긴 이진 워드와 같은 단일 이진 워드로 접합시키는 비트 필드(bit field)로서 정의될 수 있다. 파라미터는 (i) 영역 크기, 필터 크기, 스트라이드, 확장, 컨볼루션/디컨볼루션/풀링, 스케줄링 종속성 리스트 등과 같은 레이어 연산 유형 및 파라미터, (ii) 입력 평면 위치(RAM/캐시), 베이스 어드레스 및 평면 오프셋 등, (iii) 출력 평면 위치(RAM/캐시), 베이스 어드레스 및 평면 오프셋 등 및/또는 장치의 처리를 특정하는 임의의 다른 파라미터를 임의의 조합으로 포함할 수 있다.
제어 모듈(411)은 복수의 컨볼루션 모듈(409)에 의해 시그널링(signal)된 상태에 응답하여 복수의 컨볼루션 모듈(409) 사이에서 커맨드를 스케줄링할 수 있다. 이 상태는 링크(421)를 통해 입력 제어 유닛(417)에 의해 시그널링될 수 있는 "입력 판독 완료" 상태, 링크(423)를 통해 출력 제어 유닛(419)에 의해 시그널링되는 "결과 준비" 상태 또는 "결과 기입 완료" 상태 및 개별 프로세싱 요소에 의해 제어 모듈(411)에 시그널링되는 추가 상태 중 하나 이상을 임의의 조합으로 포함할 수 있다. 일례에서, 커맨드의 스케줄링은 링크(423)를 통해 제어 모듈(411)에 시그널링될 수 있는 "결과 기입 완료" 상태에 의해 제어될 수 있다. "결과 기입 완료" 상태는 현재의 입력 데이터에 대한 이전의 커맨드 처리의 결과를 요구하는 다음 커맨드를 스케줄링하기 위한 조건일 수 있다. 제어 모듈(411)은 (커맨드) 링크(425) 또는 장치(401)에서 이용 가능한 임의의 다른 시그널링 경로를 통해 각각의 컨볼루션 모듈(409)의 처리를 제어할 수 있다.
컨볼루션 모듈(409)은 프로세싱 호스트(407) 및/또는 메모리(405)로부터 인터페이스를 통해 계수 데이터를 인출할 수 있는 계수 제어 유닛(427)을 더 포함할 수 있다. 입력 제어 유닛(417) 및 출력 제어 유닛(419)과 유사하게, 계수 제어 유닛(427)은 (커맨드) 링크(425)를 통해 제어 모듈(411)에 의해 제어될 수 있고, 아래에서 설명되는 바와 같이 데이터 흐름의 폐루프(closed-loop) 제어를 가능하게 하기 위해 제어 모듈(411) 및/또는 입력 제어 유닛(417)에 계수 데이터의 인출에 관한 각각의 상태를 임의의 조합으로 제공할 수 있다. 그러나, 계수 제어 유닛(427)은 전적으로 선택적일 수 있다는 것을 이해해야 한다. 오히려, 계수 제어 유닛(427)은 계수 데이터의 처리를 요구하는 실시예에서만 제공될 수 있다.
연산을 개시하기 위해, 프로세싱 호스트(407)는 커맨드 시퀀스, 계수 집합, 및 입력 레이어 데이터를 메모리(405)에 기입할 수 있다. 이것은 신경망을 정의하는 명령어 및 계수와, 도 1에 도시된 입력 레이어(101)와 같은 입력 레이어의 데이터를 포함할 수 있다. 프로세싱 호스트(407)는 인터커넥트(403)를 통해 제어 모듈(411)에 시작 트리거를 발행할 수 있다. 시작 트리거에 응답하여, 제어 모듈(411)은 메모리(405)로부터 커맨드 시퀀스의 적어도 일부를 판독하고, 컨볼루션 모듈(409)에 대해 개별 커맨드를 스케줄링할 수 있다.
메모리(405)를 동한 커맨드의 제공은 동일한 커맨드 시퀀스가 연속적인 입력 레이어 상에서 반복적으로 실행되어야 하는 경우에 유리할 수 있다. 이러한 경우, 제어 모듈(411)은 각각의 반복 후에 최초로 저장된 커맨드 시퀀스를 메모리(405)로부터 다시 판독하도록 구성될 수 있다. 추가적으로 또는 대안적으로, 제어 모듈(411)의 내부 저장 용량에 따라, 제어 모듈(411)은 단일 패스(single pass)로 메모리(405)로부터 커맨드 시퀀스를 판독하고, 각각의 시작 트리거 후에 커맨드 시퀀스를 재사용하도록 구성될 수 있다. 따라서, 프로세싱 호스트(407)는 다음 입력 레이어의 데이터를 메모리(405)에 기입하고, 각각의 완료 시점에서 메모리(405)로부터 출력 레이어의 결과를 판독하기만 할 필요가 있을 수 있다.
메모리(405)에 커맨드를 저장함으로써, 커맨드 시퀀스, 계수 집합 및 입력 레이어 데이터를 메모리(405)에 최초로 기입하는 것을 제외하고, 실행 중에 프로세싱 호스트(407)가 관여하지 않고 장치(401) 상에서의 실행(예컨대 신경망의 실행)이 가능해진다. 이어서, 다음 레이어(이는 신경망의 (후속) 내부 레이어, 다음 프레임의 입력 레이어, 또는 일반적으로 호스트 기입(host write)일 수 있는 다음 입력 레이어일 수 있음)의 데이터만이 메모리(405)에 기입되어야 하고, 최종 또는 중간 실행 결과는 메모리(405)로부터 판독되어야 한다. 일 실시예에서, 메모리(405)로의 및/또는 메모리(405)로부터의 데이터의 복사는 DMA 프로세스에 의해 이루어질 수 있다.
복수의 프로세싱 요소(418)에 더하여, 컨볼루션 코어(415)는 데이터 버퍼(431) 및 컨볼루션 제어 유닛(433)을 포함할 수 있다. 또한, 계수 데이터의 처리를 필요로 하고 계수 제어 유닛(427)을 포함할 수 있는 실시예에서, 각각의 (또는 적어도 일부의) 프로세싱 요소(들)(418)는 계수 버퍼(429)를 포함할 수 있다. 계수 버퍼(429)는 계수 제어 유닛(427)에 의해 제어될 수 있고, 후속 컨볼루션 연산에 요구되는 계수 데이터를 저장할 수 있다. 데이터 버퍼(431)는 입력 제어 유닛(417)에 의해 제어될 수 있고, 복수의 프로세싱 요소(418)에 의한 후속 컨볼루션 연산에 요구되는 데이터를 저장할 수 있다. 계수 버퍼(429)는 각각의 계수를 저장하고 복수의 프로세싱 요소(418)에 계수를 제공하도록 구성되는 메모리 어레이일 수 있다. 계수 버퍼(429)는 복수의 프로세싱 요소(418) 각각에 가중치 계수와 같은 서로 다른 계수 데이터를 제공하기 위한 복수의 개별 링크를 포함할 수 있다.
계수 제어 유닛(427)은 메모리(405)로부터 계수 및 바이어스 값을 판독할 수 있다. 계수 및 바이어스 값은 메모리 대역폭을 최소화하기 위해 압축된 가변 포맷으로 메모리(405)에 저장될 수 있다. 계수 제어 유닛(427)은 계수 및 바이어스 값을 압축 해제하고, 이를 고정된 최종 포맷으로 계수 버퍼(429)에 전달하도록 구성될 수 있다.
컨볼루션 제어 유닛(433)은 각각의 프로세싱 요소(418)가 계수 버퍼(429) 및 데이터 버퍼(431)로부터 올바른 입력 데이터를 제공받아 연산을 수행하도록 스케줄링 및 제어 방식을 적용할 수 있다. 컨볼루션 제어 유닛(433)은 윈도우 위치 또는 입력 평면 사이의 프로세스 멈춤(process-stall)을 피하기 위해 프로세싱 요소(418)의 처리를 더 모니터링할 수 있다. 스케줄링 및 제어 방식은 NCO 기반일 수 있다. 이 예에서, 계수 및 데이터 선택 패턴은 NCO에 의해 생성될 수 있다. 통상적으로, NCO는 주기적인 값을 생성할 수 있다. 추가적으로 또는 대안적으로, 스케줄링 및 제어 방식은 룩업 테이블(lookup table; LUT) 기반 메커니즘일 수 있으며, 계수 및 데이터 선택 패턴은 룩업 테이블에서 정의된다. 룩업 테이블의 내용은 계수 집합과 함께 정의될 수 있다. LUT는 각각의 계수 집합의 계수 값의 위치를 선택하거나 할당하는 데에 사용될 수 있다. 계수 집합 및 LUT는 임의의 형상 및 희소성(sparseness)을 갖는 행렬을 필터 커널(filter kernel)로서 정의하는 데에 조합되어 사용될 수 있다. 컨볼루션 제어 유닛(433)은 LUT의 요소를 스텝오버(step over)할 수 있고, 이들 요소를 행렬로부터 계수를 선택하기 위한 좌표, 또는 컨볼루션을 위한 계수 집합의 계수 값에 할당하기 위한 좌표로서 사용할 수 있다. 따라서, 계수 집합 및 이것의 LUT는 서로 대응될 수 있다. 계수 제어 유닛(427)은 계수 집합과 함께 임의의 LUT을 판독할 수 있다. 룩업 테이블은 다양한 처리 파라미터의 단순화된 정의(예컨대, 룩업 테이블이 일부 위치에 0의 값을 포함하는 경우, 계수 행렬 내의 어느 계수 위치가 사용되어야 하는지에 관한 정의)를 가능하게 한다. 이를 통해 입력/출력 평면 쌍에 대한 임의의 형상의 계수 행렬의 정의가 가능해진다.
데이터 버퍼(431)는 입력 제어 유닛(417)에 의해 인출된 입력 데이터를 2차원 어레이로서 저장할 수 있는 2차원 데이터 버퍼로서 구성될 수 있다. 따라서, 데이터 버퍼(431) 내의 데이터는 2개의 인덱스를 사용하여 액세스될 수 있다. 바람직한 실시예에서, 데이터 버퍼(431) 내의 데이터는 예컨대 도 14에서 설명되는 바와 같은 조절 가능한 입력 윈도우를 통해 인출될 수 있다. 데이터 버퍼(431)는 복수의 프로세싱 요소(418)의 모든 프로세싱 요소에 대해 데이터 버퍼(431)에 저장된 입력 데이터에 대한 액세스를 가능하게 할 수 있다. 각각의 프로세싱 요소(418) 상에서 컨볼루션 연산을 수행하기 위해 요구되는 입력 데이터의 결정 및 인출은, 계수 버퍼(429)로부터의 서로 다른 계수 값을 고려하면서 데이터 버퍼(431)로부터의 동일한 입력 데이터에 대한 샘플링을 하도록 입력 윈도우를 조절함으로써 달성될 수 있다.
입력 제어 유닛(417)은 입력 데이터를 컨볼루션 코어(415)에 공급할 수 있다. 예컨대, 입력 데이터는 입력 화소일 수 있다. 입력 제어 유닛(417)은 입력 데이터의 타일(예컨대 픽셀의 타일)이 데이터 버퍼(431) 내로 판독되도록 할 수 있다. 타일의 적어도 일부는 하나 이상의 이웃하는 타일 또는 패딩(padding) 값과의 중첩(overlap)을 포함할 수 있다.
컨볼루션 연산은 승산-누적 회로(MAC)를 제공함으로써 복수의 프로세싱 요소(418) 각각에 의해 구현될 수 있으며, MAC는 승산기(435), 합산기(437) 및 결과를 버퍼링하도록 구성되는 결과 저장소(439)를 포함할 수 있다. 복수의 프로세싱 요소(418)의 각 프로세싱 요소는 합산기(437)의 입력을 결정하여 바이어스 값으로 합계를 초기화하거나 승산기(435)의 결과를 결과 저장소(439)에 저장된 부분적인 결과에 누적시키는 멀티플렉서(441)를 더 포함할 수 있다.
결과 저장소(439)는 어드레싱 가능한 메모리(예컨대 어드레싱 가능한 SRAM)로서 구현될 수 있다. 프로세싱 요소(418)에 어드레싱 가능한 결과 저장소(439)를 제공함으로써, 프로세싱 요소(418)는 입력 데이터의 여러 영역에 대해 유연하게 연산을 행하고, 어드레싱 가능한 결과 저장소(439) 내에 입력 데이터의 각각의 영역에 대한 복수의 부분 결과를 저장할 수 있다. 결과 저장소(439)는 TW x TH 크기의 R개의 출력 타일을 수용할 수 있다. 따라서, 각각의 프로세싱 요소(418)에 있어서, 결과 저장소(439)는 컨볼루션 코어(415)의 계산 용량을 단일 입력 평면 시퀀스에 대해 M x R개의 출력 타일까지 늘리기 위해 R개의 출력 타일까지 버퍼링할 수 있다.
복수의 프로세싱 요소(418)의 결과는 결과 스케일링(scaling) 및 양자화 유닛, 직렬화기(serializer), 결과 재정렬 유닛, 그리고 복수의 프로세싱 요소(418)의 결과를 후처리하는 특정한 작업을 수행하도록 구성될 수 있는 추가 프로세싱 유닛 중 하나 이상을 포함하는 컨볼루션 코어(415)의 여러 후속 프로세싱 요소에 제공될 수 있다. 또한, 처리의 결과는, 활성화 함수를 구현할 수 있고 최종 결과를 출력 제어 유닛(419)에 제공할 수 있는 활성화 유닛(443)에 제공될 수 있다. 예컨대, 컨볼루션 곱 누적은 커널 크기 및 입력 평면 카운트가 증가함에 따라 워드 길이를 증가시키며, 누적된 곱의 워드 길이를 효과적으로 증가시킬 수 있다. 프로세싱 요소(418)에서 충분한 정밀도로 연산이 이루어질 수 있도록, 최종 결과만이 다운스케일링(down-scale)되어 결과 스케일링 및 양자화 유닛에서 입력 워드 길이로 다시 양자화될 수 있다.
장치(401)는 컨볼루션 신경망(CNN)을 위한 가속기로서 사용될 수 있다. 예컨대, 메모리(405)로부터 인터커넥트(403)를 통해 인출된 입력 데이터는 CNN의 입력 레이어를 나타낼 수 있고, 각각의 컨볼루션 모듈(409)은 CNN의 레이어 중 적어도 일부를 처리할 수 있다. 또한, 캐시 모듈(413)에 저장된 데이터는, 복수의 컨볼루션 모듈(409) 중 동일한 또는 다른 컨볼루션 모듈에 의해 처리될 CNN의 다음 레이어 중 적어도 일부를 나타낼 수 있다.
초기화 중에, 프로세싱 호스트(407)는 입력 레이어의 입력 평면 텐서 및 가중치 텐서를 메모리(405)에 로딩할 수 있다. 예컨대, 입력 평면 텐서 및 가중치 텐서는 도 2에 도시된 바와 같은 입력 평면 텐서(201) 및 가중치 텐서(203)에 대응될 수 있다. 또한, 프로세싱 호스트(307)는 커맨드 시퀀스를 메모리(405)에 로딩할 수 있다. 입력 평면 텐서, 가중치 텐서 및 커맨드 시퀀스가 메모리(405)에 로딩되자 마자, 프로세싱 호스트(407)는 제어 모듈 (411)을 통해 장치(401)의 동작을 트리거링할 수 있다. 제어 모듈(411)은 메모리(405)로부터 커맨드 시퀀스를 인출할 수 있고, 복수의 컨볼루션 모듈(409) 사이에서 커맨드 시퀀스의 커맨드를 스케줄링하기 위한 중재자로서 작용할 수 있다.
제어 모듈(411)이 복수의 컨볼루션 모듈(409) 중 하나에서 실행할 커맨드를 스케줄링함에 따라, 컨볼루션 모듈(409)의 각각의 입력 제어 유닛(417) 및 계수 제어 유닛(427)은 입력 평면 중 적어도 일부의 입력 데이터 및 그 가중치 텐서를 메모리(405)로부터 각각 인출한다. 입력 평면은 IW x IH의 크기를 가질 수 있고 복수의 타일로 분할될 수 있으며, 컨볼루션 모듈(409)은 타일 중 하나 이상을 인출할 수 있다.
제어 모듈(411)에 의한 복수의 컨볼루션 모듈(409) 중 하나 이상에 대한 커맨드의 스케줄링은 이전 커맨드의 완료에 의존할 수 있다. 각각의 컨볼루션 모듈(409)은 입력 제어 유닛(417) 및 출력 제어 유닛(419)과 제어 모듈(411) 사이의 각각의 연결(예컨대 링크(421, 423))을 포함할 수 있다. 이들 연결은 예컨대 커맨드 식별자, 완료 마커 필드 등을 임의의 조합으로 포함할 수 있는 플래그(flag)나 유사한 신호를 송신하도록 구성될 수 있다. 플래그는 입력 제어 유닛(417)으로부터의 커맨드 완료 플래그를 포함할 수 있다. 이러한 커맨드 완료 플래그는, 입력 데이터를 요구하는 다음 커맨드를 트리거링할 수 있지만 현재 처리의 결과를 요구하지 않는 스케줄링 조건을 나타낼 수 있다. 플래그는 출력 제어 유닛(419)으로부터의 커맨드 완료 플래그를 더 포함할 수 있다. 이러한 커맨드 완료 플래그는, 임의의 컨볼루션 모듈(409)에서, 현재 처리의 결과를 요구하는 다음 커맨드를 트리거링할 수 있는 스케줄링 조건을 나타낼 수 있다.
플래그 기반 스케줄링을 가능하게 하기 위해, 각 커맨드는 종속성 리스트에서 이전 커맨드 및 조건에 대한 종속성을 정의할 수 있고, 이는 컨볼루션 모듈(409) (또는 그 유닛) 중 하나 이상에 의해 제공되는 플래그에 기초하여 제어 모듈(411)에 의해 검사될 수 있다. 종속성은 현재 실행되는 커맨드 주위의 정의된 수의 커맨드(이는 종속성 검사를 위한 이동 윈도우(moving window)를 정의할 수 있음)에 대해 검사될 수 있다. 이를 통해 종속성 리스트의 항목 수를 고정된 비트 수로 감소시킬 수 있다.
스케줄링 시에, 커맨드는 제어 모듈(411)로부터 원하는 컨볼루션 모듈(409)로 송신될 수 있다. 커맨드는 다수의 비트 필드로 이루어진 명령어 워드일 수 있다. 명령어 워드는 컨볼루션 모듈(409)의 내부의 각 스테이지(예컨대 버퍼(429, 431)) 및 컨볼루션 제어 유닛(433))에 병렬로 제공될 수 있다. 명령어 워드를 수신하면, 컨볼루션 모듈(409)의 스테이지는 각 스테이지의 처리를 위해 요구되는 비트 필드만을 사용하여 개별적으로 각 스테이지의 실행을 시작할 수 있다. 데이터 흐름을 제어하기 위해, 컨볼루션 모듈(409)은 컨볼루션 코어(415) 및/또는 프로세싱 요소(418)의 처리가 시작될 때에 계수 및 데이터 가용성을 유지하기 위해 폐루프 제어 접근법을 적용할 수 있다. 제어 모듈(411)은 컨볼루션 모듈(409)에 대한 명령어로서의 커맨드를 스케줄링할 수 있다. 이는 입력 평면 판독 베이스 어드레스, 평면 어드레스 오프셋, 평면 카운트, 산술 연산의 유형 및 파라미터, 계수 판독 베이스 어드레스, 출력 평면 기입 베이스 어드레스, 평면 오프셋 등 중의 하나 이상을 임의의 조합으로 포함하는 단일 명령어 워드일 수 있다. 컨볼루션 모듈(409)의 각 스테이지는 명령어를 병렬로 수신할 수 있고, 명령어 워드의 관련 부분을 개별적으로 사용하여 실행을 시작할 수 있다.
일례에 따르면, 데이터 흐름에 대한 폐루프 제어는 아래의 단계 중 하나 이상을 포함할 수 있다.
1. 계수 제어 유닛(427)은 계수 버퍼(429)에서의 충진(filling) 레벨 또는 가용 공간을 계속하여 모니터링할 수 있고, 계수 버퍼(429)에서 이용 가능한 빈 공간이 충분한 경우 인터페이스를 통해 다음 입력 평면의 계수를 판독할 수 있다. 계수가 판독될 때에, 계수 제어 유닛(427)은 완료 플래그를 입력 제어 유닛(417)에 송신할 수 있다.
2. 입력 제어 유닛(417)은 데이터 버퍼(431)에서의 충진 레벨 또는 가용 공간을 계속하여 모니터링할 수 있다. 계수 제어 유닛(427)으로부터 완료 플래그를 수신한 후에, 입력 제어 유닛(417)은 인터페이스를 통해 및/또는 캐시 모듈(413)로부터 다음 입력 평면의 데이터를 판독할 수 있고, 이용 가능한 빈 공간이 충분한 경우 데이터 버퍼(431)에 데이터를 기입할 수 있다.
3. 컨볼루션 제어 유닛(433)은 데이터 버퍼(431)의 충진 레벨을 계속하여 모니터링할 수 있고, 요구된 데이터가 데이터 버퍼(431)에 존재하는 즉시 산술 연산을 시작할 수 있다. 이는 또한 각각의 플래그를 사용하여 입력 제어 유닛(417)에 의해 컨볼루션 제어 유닛(433)에 시그널링될 수 있다. 이 단계에서는 요구된 계수가 계수 버퍼(429)에 존재하는데, 이는 계수 제어 유닛(427)에 의해 송신된 완료 플래그가 데이터 버퍼(431) 내로 데이터를 판독하기 위한 전제 조건이기 때문이다. 따라서, 데이터 버퍼(431)의 충진 레벨을 검사한 후에, 컨볼루션 제어 유닛(433)은 하나 이상의 프로세싱 요소(418)를 구동하기 위해 계수 데이터 버퍼(429) 및 데이터 버퍼(431)로부터의 계수 및 데이터에 대한 판독 위치를 각각 생성하기 시작할 수 있다.
4. 현재 입력 데이터에 대한 계산이 종료된 후에, 컨볼루션 제어 유닛(433)은 데이터 버퍼(431)로부터의 데이터 및 계수 버퍼(429)로부터의 관련 계수의 적어도 일부를 플러싱(flush)할 수 있다. 가용 공간은 단계 1 및 2에서 모니터링될 수 있고, 계수 제어 유닛(427) 및 입력 제어 유닛(417)은 단계 3에 따라 다음 처리를 트리거링하기 위해 추가적인 계수 및 입력 데이터를 계속하여 판독할 수 있다.
따라서, 컨볼루션 제어 유닛(433)은 산술 연산을 제어할 수 있고, 제어 모듈(411)은 장치(401)에서의 스케줄링을 제어할 수 있다. 계수 버퍼(429) 및 데이터 버퍼(431)는 모두 예컨대 다수의 입력 평면에 대한 여러 개의 계수 집합 및 다수의 데이터 타일과 같은 데이터를 저장하도록 구성될 수 있으며, 이에 따라 컨볼루션 코어(415)는 계수 또는 데이터의 추가 인출을 기다릴 필요 없이 현재 입력 평면에 대한 처리를 완료한 후에 다음 입력 평면에 대한 처리를 직접 계속할 수 있게 된다. 이를 통해, 프로세싱 요소(418)의 동작에 균형을 잡고 지속적인 연산을 제공할 수 있다. 폐루프 제어는 계수 버퍼(429) 및 데이터 버퍼(431)의 최적 충진을 가능하게 한다. 이에 따라, 인터페이스의 하드웨어 제약에 의해서만 제한되는 데이터 처리량(data throughput)이 증가된다.
데이터 흐름의 폐루프 제어는 본 발명의 하나 이상의 실시예에서 정의될 수 있다. 그러나, 폐루프 제어의 일부가 구현될 수 있고, 서로 다른 데이터 흐름 제어 접근법이 다른 실시예에서 사용될 수 있음을 이해해야 한다. 특히, 데이터 흐름은 다른 구성요소에 의해 및/또는 서로 다른 순서로 제어될 수 있고, 본 발명은 데이터 흐름의 특정 유형의 폐루프 제어에 한정되지 않는다.
도 5는 데이터 워드와 같은 복수의 데이터 요소(503)로 구성된 입력 타일(501)을 도시한다. 데이터 요소(509)는 PW x PH의 크기를 갖는 2차원 영역을 나타낼 수 있다. 입력 타일(501)을 결합하기 위해, 데이터 요소(503)는 입력 제어 유닛(417)에 의해 메모리(405)로부터 순차적으로 인출될 수 있다. 도 5에 도시된 바처럼, 입력 타일(501)은 8 x 8 데이터 요소의 어레이로 구성될 수 있다. 그러나, 서로 다른 크기의 데이터 요소(503) 또는 입력 타일(501)의 다른 분할이 선택될 수 있고, 본 발명은 8 x 8 데이터 워드를 포함하는 입력 타일에 한정되지 않음을 이해해야 한다.
도 6은 IW x IH 크기의 입력 평면을 도 5의 입력 타일(501)과 같은 복수의 입력 타일로 분할한 것을 도시한다. 도 6에 도시된 바처럼, 각 입력 타일은 타일 원점(601)을 가질 수 있다. 도 4를 다시 참조하면, 입력 타일(501)은 장치(401)의 기본 프로세싱 유닛을 정의할 수 있다. 입력 평면을 각각의 타일 원점(601)에서 복수의 입력 타일로 분할함으로써, 장치(401)는 가변적인 크기의 입력 평면에 대하여 컨볼루션 연산을 수행하도록 유연하게 적응될 수 있다. 장치(401)는 하나의 시퀀스에서 입력 타일 영역을 처리하도록 구성될 수 있다. 장치(401)는 입력 평면 텐서의 입력 평면에 걸쳐 동일한 타일 원점(601)에서 입력 타일을 순차적으로 판독하여 컨볼루션 연산을 실행할 수 있고, 결과적인 출력 타일은 동일한 원점을 갖는 출력 평면 텐서의 하나 이상의 출력 평면에 걸친 출력 타일에 대응될 수 있다. 따라서, 장치(401)는, 하나 이상의 입력 평면에 걸쳐, 타일 원점(601)을 지나서 진행하여 각 타일 원점(601)부터 순차적인 계산을 실행함으로써 입력 평면 텐서를 처리할 수 있다. 입력 평면 텐서를 고정된 크기의 입력 타일로 분할함으로써, 가속기(401)의 연산은 입력 평면 텐서의 특정 크기의 입력 평면에 대해 독립적일 수 있다. 입력 평면 텐서는 세분되어 서로 다른 타일 원점(601)에서 순차적인 단계로 처리된다.
하나 이상의 바람직한 실시예에서, 입력 데이터는 타일 데이터뿐만 아니라 타일을 둘러싸는 추가 데이터(이는 타일의 가장자리에서 특정 크기의 가중치 커널의 컨볼루션을 가능하게 하는 데 필요할 수 있음)를 포함할 수 있다. 예컨대, 5 x 5의 커널 크기는 타일의 상부 및 좌측 (및/또는 하부 및 우측)에서 적어도 2개의 추가 행을 필요로 할 수 있다. 따라서, 1 x 1 가중치 커널을 제외하고, 가속기는 가중치 커널의 요구되는 중첩에 따라 이웃 타일로부터 데이터를 판독할 수 있다. 장치(401)는 각각의 가중치 커널에 대해 요구되는 주변 데이터를 사용하여 입력 평면 텐서의 하나 이상의 입력 평면으로부터 동일한 원점에서 타일 시퀀스를 판독할 수 있고, 타일 시퀀스에 따라 출력 평면 데이터를 계산하는 컨볼루션 연산을 실행할 수 있다. 컨볼루션 연산을 수행하기 위해, 각 입력 타일은 이후에 본 발명의 실시예에 관하여 설명될 바처럼 프로세싱 요소에 의해 후속하여 액세스, 샘플링 및 처리되는 복수의 처리 영역으로 세분될 수 있다.
본 발명의 실시예가 컨볼루션 연산에 관하여 설명되었지만, 본 발명은 컨볼루션 연산에만 한정되지 않음을 이해해야 한다. 구체적으로, 프로세싱 요소(418)는 예컨대 컨볼루션 연산과 병행하여 또는 그 대신에 실행될 수 있는 관계 연산을 구현할 수 있다. 예컨대, 승산기(435) 및 합산기(437)에 추가하여 또는 그 대신에, 하나 이상의 프로세싱 요소(418)는 최대 풀링을 구현하기 위해 결과 저장소(439)와 데이터 버퍼(431)의 출력 사이에 제공되는 구성 가능한 비교기(예컨대, 소정 유형의 CNN에 의해 요구될 수 있는 레이어 연산을 수행하는, 구성 가능한 윈도우 깊이 방향(window depth-wise) 풀링 유닛)를 포함할 수 있다.
바람직한 실시예에서, 결과 저장소(439)의 용량은 단일 입력 평면으로부터 출력 평면(들)이 계산되는 연산에 각각의 프로세싱 요소(418)를 사용하기 위해 감소될 수 있고, 출력 평면(들)의 독립적인 집합이 모든 입력 평면으로부터 계산될 수 있다. 이러한 실시예에서, 결과 저장소(439)는, 멀티플렉서(441)를 통해 합산기(437)에 직접 피드백되고 (sw * MW) x (sh * MH)의 데이터 워드 용량을 갖는 단일 레지스터 스테이지일 수 있으며, 여기서 sw 및 sh는 디컨볼루션이 사용될 경우에는 각각 최대 수평 및 수직 디컨볼루션 스트라이드 값이고, 그렇지 않은 경우에는 1이다. 또한, 컨볼루션 코어(415)가 단일 입력 평면으로부터 단일 출력 평면을 계산하는 데에만 사용될 경우, M은 1일 수 있다. 이들 연산은 예컨대 평면 방향(plane-wise) 컨볼루션/디컨볼루션 및 평면 방향 풀링을 포함하는 평면 방향 연산으로 지칭될 수 있다.
본 발명의 실시예는 아래의 연산, 즉 컨볼루션(평면 방향 또는 깊이 방향), 디컨볼루션(평면 방향 또는 깊이 방향), 최대 풀링(평면 방향 또는 깊이 방향), 평균 풀링(평면 방향 또는 깊이 방향), 완전 연결 레이어(데이터 버퍼(431)에 연결 가중치를 로딩하고, 각 입력 평면 데이터 값을 개별적인 1 x 1 필터로서 계수 버퍼(429)에 개별적으로 로딩함으로써 이루어짐), 행렬 승산 및/또는 활성화 레이어(예컨대, 활성화 유닛(443)에서 활성화 LUT를 구현함으로써 이루어짐) 중 하나 이상을 가능하게 하도록 구성될 수 있다.
본 발명은 특정 구성의 신경망에 한정되지 않음을 이해해야 한다. 구체적으로, 본 발명의 하나 이상의 실시예는 다양한 구성의 신경망을 구현하는 데에 사용될 수 있다.
도 7은 본 발명의 일 실시예에 따른 장치에 의한 타일 시퀀스의 처리를 도시한다. 이 장치는 도 4에 도시된 바와 같은 장치(401)에 대응될 수 있다. 또한, 입력 평면 텐서의 타일 및 출력 평면 텐서의 타일은 도 5 및 도 6에 도시된 타일에 따라 구성될 수 있다.
도 7은 라인(701, 703, 705)의 동일한 원점에서의 각각의 입력 타일 시퀀스에 대한 계산을 도시한다. 라인(701)에서, 상부 좌측 원점(707)의 타일 시퀀스가 계산될 수 있고, 이어서 라인(703)에 도시된 바와 같은 인접한 위치의 타일 시퀀스가 계산될 수 있다. 라인(705)의 마지막 타일 원점(709)에서 처리가 종료될 수 있다. 가중치 행렬 집합(711)의 값 및 바이어스 값(713)이 각 라인(701, 703, 705)에서 동일하게 유지될 수 있지만, 입력 및 출력 평면에서의 입력 타일의 위치(또는 원점)만이 각 라인(701, 703, 705)에서 변경될 수 있다. 각 시퀀스(701, 703, 705)에서 고정된 크기의 영역을 갖는 입력 타일에 대한 계산을 행함으로써, 임의의 입력 및 출력 평면(또는 텐서)의 크기에 대해 독립적인 처리 능력이 가능해진다.
가속기 장치(401)는 병렬적으로 또는 순차적으로 입력 평면 텐서의 하나 이상의 입력 평면에 걸쳐 동일한 원점에서 입력 타일 시퀀스 IT(c)를 판독하고, 컨볼루션 방정식(715)에 의해 표현되는 바처럼 동일한 타일 영역에 대한 컨볼루션 연산을 수행하여 출력 타일 OT(n)을 생성하도록 구성될 수 있다. 이러한 시퀀스는, 가중치 행렬 집합(711) 및 바이어스 값(713)을 사용하여 전체 입력 평면 텐서의 컨볼루션을 완료하기 위해, 라인(703, 705)에 도시된 바와 같은 후속 타일 원점에서 반복된다.
도 4의 장치(401)를 참조하면, 입력 제어 유닛(417)은 입력 타일의 적어도 하나의 영역(그리고 필요한 경우 주변의 중첩)을 재구성하는 입력 데이터로 데이터 버퍼(431)를 채울 수 있고, 클럭 사이클 단위로 DW x DH 크기의 배치 및 조절 가능한 입력 윈도우를 사용하여 입력 데이터에 대한 액세스를 가능하게 할 수 있다.
입력 제어 유닛(417)이 입력 타일 IT(c)을 판독함에 따라, 계수 제어 유닛(427)은 계산될 각 출력 평면에 대한 바이어스 값 B(n)을 판독할 수 있다. 다음 단계로서 또는 바이어스 값 B(n)을 판독하기 전에, 계수 제어 유닛(427)은 입력 타일 IT(c)마다 가중치 행렬 텐서(711) W(n, c)의 요구되는 행렬 집합을 판독할 수 있다.
가중치 행렬 집합(711) W(n, c) 및 바이어스 값(713) B(n)은 계수 버퍼(429)에 제공될 수 있으며, 계수 버퍼(429)는 가중치 행렬 집합(711) W(n, c)의 가중치 행렬로부터의 단일 계수 및 바이어스 값(713) B(n)로부터의 바이어스 값을 포함하는 M개의 출력 평면에 대한 파라미터에 대해 출력 평면마다 동시 액세스를 제공할 수 있다. M개의 단일 가중치 행렬 계수는 액세스마다 행렬의 동일한 위치로부터 공급될 수 있다.
따라서, 컨볼루션 코어(415)는 출력 평면마다 단일 가중치 계수를 사용하여 M개의 출력 타일 OT(n) 상의 DW x DH 영역에 대한 부분 결과를 동시에 계산할 수 있으며, 이는 단일 가중치 계수와 M개의 프로세싱 요소(418)에서의 DW x DH 영역의 입력 데이터를 요소별로 승산함으로써 이루어진다.
도 4를 다시 참조하면, 컨볼루션 코어(415)의 컨볼루션 제어 유닛(433)은, 컨볼루션 방정식(715)의 승산 피연산자인 W(n, c)와 입력 타일 IT(c)의 입력 데이터의 DW x DH 크기의 각 입력 영역을 복수의 프로세싱 요소(418) 각각의 승산기(435)에 대한 입력으로서 동시에 제공하도록 계수 버퍼(429) 및 데이터 버퍼(431)를 구동하게끔 구성될 수 있다. 바이어스 벡터 B(n)(713)의 바이어스 값은 각 프로세싱 요소(418)에 의해 해당 프로세싱 요소의 제1 계산 사이클에서 판독(및 멀티플렉서(441)에 의해 선택)되어, 결과 저장소(439)에 저장되는 부분 결과의 계산 중에 고려될 수 있고, 후속 반복에서 완료될 수 있다. 따라서, 결과의 누적은 결과 저장소(439)에 의해 달성될 수 있다. 멀티플렉서(441)는 처음에 바이어스 스케일링 및 라운딩(rounding) 요소로부터의 입력을 합산기(437)에 대한 피연산자로서 선택할 수 있다. 후속 사이클에서, 멀티플렉서(441)는 결과 저장소(439)의 출력을 합산기(437)에 대한 피연산자로서 선택하여 누적을 구현할 수 있다. 바이어스 스케일링 및 라운딩 요소는, 업스케일링(up-scale)된 바이어스 값과 함께, 결과의 크기 범위에 비례하는 오프셋을 처리된 계수에 대해 추가할 수 있다. 바이어스 스케일링 및 라운딩 요소에 의해 적용되는 값(예컨대 바이어스 값 및 바이어스 스케일링 값)은 신경망의 정의에서(예컨대 커맨드 워드 내에서) 특정될 수 있다. 이를 통해, 높은 워드 길이(high word-length) 누적 결과의 절단(truncation)으로 인해 양자화 값에 비대칭 오차가 도입되는 효과를 감소시킬 수 있다.
또한, 도 4를 참조하면, 컨볼루션 제어 유닛(433)은, 실제 곱이 계산되고 있는 위치에서 동일한 출력 평면의 누적된 부분 결과를 합산기(437)에서의 입력과 동시에 제시하기 위해, 데이터 버퍼(431) 및 계수 버퍼(429)에 대한 판독에 대하여 정렬된 결과 저장소(439)의 판독을 트리거링할 수 있다. 누적된 부분 결과에 추가된 곱(합산기(437)의 출력)은 추가적인 누적된 부분 결과로서 결과 저장소(439)에 다시 기입될 수 있다.
출력 평면마다 적용되는 단일 가중치 계수에 대한 DW x DH의 카디널리티(cardinality)로 입력 타일 영역을 판독함으로써, 컨볼루션 코어(415)는 M개의 프로세싱 요소(418)를 사용하여 출력 평면의 M개의 출력 타일 OT(n) 각각에 대하여 DW x DH 영역에 대한 클럭 사이클당 부분 결과의 계산을 구현할 수 있다. 컨볼루션 제어 유닛(433)은 W(n, c)의 모든 가중치 행렬 계수를 스텝오버할 수 있고, 계수 위치에 대응되는 계산 영역 원점으로부터의 오프셋으로서 DW x DH의 카디널리티를 갖는 입력 데이터를 데이터 버퍼(431)로부터 판독하여, DW x DH개의 입력 데이터 위치에 걸쳐 가중치 커널에 대한 전체 컨볼루션 연산을 병렬적으로 형성할 수 있다.
하나 이상의 실시예에서, 서로 다른 컨볼루션 모듈(409)은 이웃하는 타일 시퀀스를 병렬적으로 처리할 수 있다. 예컨대, 도 7의 라인(701)의 타일 시퀀스는 제1 컨볼루션 모듈에 의해 계산될 수 있고, 도 7의 라인(703)의 타일 시퀀스는 제2 컨볼루션 모듈에 의해 계산될 수 있으며, 라인(705)의 타일 시퀀스는 장치(401)의 또 다른 컨볼루션 모듈에 의해 계산될 수 있다. 각 컨볼루션 모듈(409)에 있어서, 프로세싱 요소(418)는 각각의 타일 시퀀스와 관련된 동일한 데이터를 데이터 버퍼(431)로부터 획득할 수 있다. 이러한 구성은 입력 평면 영역에 걸친 컨볼루션 모듈(409)의 병렬 처리를 나타낼 수 있다.
하나 이상의 실시예에서, 장치(401)는 복수의 컨볼루션 모듈(409)에 의해 입력 평면 텐서의 입력 평면에 걸쳐 타일 원점에서 타일 시퀀스를 병렬적으로 계산하도록 구성될 수 있다. 이러한 구성은 출력 평면에 걸친 컨볼루션 모듈(409)의 병렬 처리를 나타낼 수 있다.
하나 이상의 실시예에서, 장치(401)는 복수의 컨볼루션 모듈(409)에 걸쳐 타일 시퀀스의 계산을 분배하도록 구성될 수 있고, 서로 다른 프로세싱 요소(418)는 입력 타일의 부분 영역을 병렬적으로 계산할 수 있다. 이것은 데이터 버퍼(431)로부터 컨볼루션 코어(415)의 각 프로세싱 요소(418)로의 각각의 병렬 연결에 의해 가능해진다. 이러한 구성은 입력 타일 영역에 걸친 프로세싱 요소(418)의 병렬 처리를 나타낼 수 있다.
위에서 설명된 일 실시예에 따르면, 장치(401)는 서로 다른 컨볼루션 모듈(409)이 서로 다른 원점에서 서로 다른 타일 시퀀스를 병렬적으로 계산(상술한 바와 같은 입력 평면 영역에 걸친 병렬 처리)할 수 있도록 구성될 수 있다. 다른 실시예에 따르면, 서로 다른 컨볼루션 모듈(409)은 동일한 타일 원점에서(그리고 동일한 타일 시퀀스를 판독하면서) R * M개의 서로 다른 출력 평면의 수를 계산하여, 신경망 레이어에 의해 생성된 전체 출력 평면 카운트를 완료할 수 있다(상술한 바와 같은 출력 평면에 걸친 병렬 처리). 또 다른 실시예에서, 데이터 버퍼(431)의 윈도우 크기 DW x DH는 DW = w * MW, DH = h * MH 로 확대될 수 있고, 이를 통해 동일한 R * M개의 출력 평면에 대한 확대된 DW x DH 윈도우 상에서 w * h개의 프로세싱 요소(418)의 연산이 가능해진다(상술한 바와 같은 입력 타일 영역에 걸친 병렬 처리). 다른 실시예에서, 복수의 컨볼루션 모듈(409) 및 각 컨볼루션 모듈(409)의 복수의 프로세싱 요소(418)는 입력 데이터에 대한 병렬 처리를 가능하게 하기 위해 다양한 (그리고 서로 다른) 방식 및 구성으로 사용될 수 있음을 이해해야 한다.
도 4를 다시 참조하면, 컨볼루션 제어 유닛(433)은 각 출력 타일 OT(n) 상의 요구되는 영역에 대한 입력 타일 IT(c)의 컨볼루션 결과를 순차적인 단계로 누적하는 임의의 처리를 연장시킬 수 있다. 도 8 내지 도 13과 관련하여 후술되는 바처럼, 컨볼루션 제어 유닛(433)은 각 입력 타일 IT(c) 내의 각각의 요구되는 계산 영역 원점(입력 영역 원점)에서 컨볼루션 시퀀스를 반복하여, 출력 타일 OT(n)의 각 영역에 대해 요구되는 부분 결과를 생성할 수 있다. 계산 영역 원점 및 입력 영역 원점이라는 용어는 본 명세서의 전반에 걸쳐 상호 교환적으로 사용될 수 있다. 컨볼루션 제어 유닛(433)은, 복수의 프로세싱 요소(418)의 병렬성을 활용하여 M개의 그룹에서 프로세싱 요소(418)에 의한 컨볼루션 연산을 더 반복하여, 결과 저장소(439)에 저장될 출력 평면의 R * M개의 출력 타일을 생성할 수 있다.
결과 저장소(439)의 용량이 프로세싱 요소(419)당 TW x TH x R개의 데이터 요소에 대응되는 경우, 컨볼루션 코어(415)는 R * M개의 출력 타일에 대한 누적 데이터를 저장할 수 있다. 이를 통해, N개의 출력 평면을 생성하기 위한 입력 평면 시퀀스 판독의 수를 N / M / R회로 감소시킬 수 있다.
N개의 출력 평면을 계산하기 위해, 제어 유닛(411)은 컨볼루션 모듈(409)의 R * M개의 출력 평면 결과를 캐시 모듈(413)에 기입할 수 있고, 신경망의 실제 레이어에 의해 생성될 N개의 출력 평면 전부에 대한 계산이 완료될 때까지, 다음 그룹의 R * M개의 출력 평면을 계산하기 위해 입력 평면을 동일하거나 다른 컨볼루션 모듈(409) 내로 다시 판독할 수 있다. 대응되는 가중치 텐서를 사용하여 입력 평면의 입력 타일 IT(c)에 대한 컨볼루션을 완료한 후에, 컨볼루션 제어 유닛(433)은 입력 평면의 다음 입력 타일 IT(c)과 데이터 버퍼(431) 및 계수 버퍼(429)로부터 판독된 각각의 가중치에 대한 처리를 계속하여, 신경망의 현재 레이어에 대한 입력 평면 및 가중치 텐서의 전체 컨볼루션을 생성할 수 있다.
출력 평면마다 가중치 행렬로부터 각 사이클에서 단일 가중치 계수를 사용함으로써, 컨볼루션 연산의 전체 기능을 유지하면서도, 임의의 가중치 행렬 크기에 대해 독립적으로, 임의의 가중치 행렬 크기 및 형상에 대하여 완전히 스케일링될 수 있도록 프로세싱 요소(418)의 활용이 이루어질 수 있다.
출력 평면의 수 N이 프로세싱 요소의 수 M의 분수인 경우, 크기가 DW x DH = (w * MW) x (h * MH)인 데이터 버퍼(431)의 확대된 입력 윈도우는, 프로세싱 요소(418)마다 서로 다른 출력 평면을 계산하기보다는, 동일한 출력 평면에 대해 크기가 DW x DH인 인접한 MW x MH개의 입력 영역 부분을 계산하도록 다수의 프로세싱 요소(418)를 그룹화할 수 있다.
도 4를 다시 참조하면, 장치(401)에 의한 커맨드 실행은, 모든 입력 평면에 걸쳐 동일한 원점으로부터 입력 타일의 전체 시퀀스를 판독하고, 가중치 행렬로 컨볼루션 연산을 수행하여 출력 평면의 출력 타일을 계산함으로써 이루어질 수 있다. 출력 평면의 단일 출력 타일에 대한 결과는 최종 입력 평면에 대한 가중치 계수에 기초하여 최종 누적 사이클 중에 완료될 수 있다.
도 8은 도 7의 라인(701, 703, 705) 중 하나에 도시된 바와 같은 입력 타일 시퀀스에 대한 단일 계산 원점에서의 계산을 포함하는, 타일 시퀀스와 관련된 계산을 도시한다. 도 8은 대응되는 입력 평면에 걸쳐 동일한 타일 원점(예컨대 도 6의 타일 원점(601) 중 하나)에서 복수의 입력 타일(803-1, …, 803-c)의 입력 타일 시퀀스를 도시한다. 입력 타일(803-1, …, 803-c)은 입력 타일(803-1, …, 803-c) 각각에 걸쳐 분산된 복수의 입력 영역 원점(804)에서 연속적인 인접 입력 영역으로 세분된다. 필요한 경우, 입력 영역은 입력 영역의 경계에서의 처리가 가능하도록 연장될 수 있다. 입력 영역에서의 데이터 요소는, 입력 영역 원점(804)에 대해 입력 타일(803-1, …, 803-c)의 데이터 요소에 걸쳐 입력 윈도우(807, 809, 811, 813)를 배치함으로써 샘플링될 수 있다. 도 8에 도시된 바처럼, 입력 윈도우(807, 809, 811, 813)는 계산 원점으로도 표기될 수 있는 입력 영역 원점(801)에 대해 배치된다. 이러한 배치는 필터 커널(805)의 값에 대한 매핑에 의해 영향을 받을 수 있다. 각 입력 윈도우(807, 809, 811, 813)는 입력 타일(803-1, …, 803-c) 중 하나에서 기본적인(경우에 따라 연장된) 입력 영역의 데이터 값을 샘플링하는데 사용될 수 있고, 이에 따라 입력 영역 집합(815-1, …, 815-c)은 각각 입력 윈도우(807, 809, 811, 813)에 의해 샘플링된 단일 입력 영역(803-1, …, 803-c)의 값을 나타낸다. 따라서, 입력 윈도우는 사이클 단위로 각각의 위치로 이동하여 입력 타일(803-1, …, 803-c)의 기본적인 데이터 요소를 각각 캡처할 수 있다. 집합(815-1, …, 815-c) 내의 사이클 단위로 캡처된 데이터는, 대응되는 출력 평면에 걸쳐 복수의 출력 타일(821-1, …, 821-n)의 동일한 위치에서, 대응되는 출력 영역(819)과 각각 연관되는 처리 항목(817-1, …, 817-n)에서의 요소별 곱 계산을 위한 제1 피연산자로서 사용될 수 있다. 처리 항목(817-1, …, 817-n)에 의한 요소별 곱 계산에 대한 다른 입력은, 대응되는 출력 타일(821-1, …, 821-n)에 대한 필터 커널(805)에서의 위치에 의해 선택된 각각의 가중치 계수일 수 있다. 따라서, 필터 커널(805)은 각각의 가중치(또는 필터) 계수를 특정하는 가중치 행렬에 대응되거나 해당 가중치 행렬로서 정의될 수 있다.
도 4를 다시 참조하면, 요소별 곱 연산 및 집합(815-1, …, 815-c)의 부분 결과의 후속 누적은 컨볼루션 코어(415)의 프로세싱 요소(418)에 의해 수행될 수 있다. 부분 결과는 각각의 출력 타일(821-1, …, 821-n)에 대해 결과 저장소(439)에 누적될 수 있다. 각각의 결과 저장소(439)는, R에 따른 실제 출력 평면에 대한 대응되는 가중치 커널을 사용하여, 순차적인 단계로 프로세싱 요소(418)마다 R개의 출력 타일까지 누적할 수 있다.
도 8에 도시된 바처럼, 일 실시예에서, 제1 입력 평면의 입력 타일(803-1)에 걸쳐 입력 윈도우(807, 809, 811, 813)를 배치하고, 결과 저장소(439)에 누적된 대응되는 부분 결과를 계산한 후에, 최종 입력 평면의 입력 타일(803-c)까지 다음(그리고 그 이후의) 입력 평면의 입력 타일에 걸쳐 입력 윈도우(807, 809, 811, 813)를 배치하는 시퀀스를 계속하여 집합(815-c)를 도출할 수 있다. 따라서, 각각의 입력 타일(803-1, …, 803-c)에 대하여, 입력 영역 원점(801)에서 필터 커널(805)에 따라 입력 영역의 모든 위치에 걸쳐 입력 윈도우가 반복되어 모든 요소별 곱을 누적함으로써, 각 출력 타일(821-1, …, 821-n)의 출력 영역(819)에 대한 컨볼루션 결과를 생성한다.
바람직한 실시예에서, 타일 시퀀스의 다음 입력 평면으로 전환하기 전에, 모든 가능한 출력 평면에 대해 적어도 부분적인 결과를 생성하기 위해, 단일 입력 평면의 입력 타일의 모든 계산 원점에 걸쳐 계산이 수행될 수 있다. 이러한 처리는, 계산 윈도우(807, 809, 811, 813)를 사용할 수 있고 반복적으로 실행될 수 있는 아래의 항목들 중 하나 이상에 따라 정의될 수 있다.
1. 우측에서 수평으로 다음 계산 원점으로 진행한다. 입력 타일의 활성 영역의 수평 말단에 도달하면, 가장 좌측 위치로 되돌아간다. 처리는 항목 1을 계속하고/하거나 항목 2의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
2. 결과 저장소(439)에 저장된 다음 출력 타일(R개 중에서)로 진행한다, 출력 타일의 최대 수에 도달하면, 제1 출력 타일로 되돌아간다. 처리는 항목 2를 계속하고/하거나 항목 3의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
3. 아래에서 수직으로 다음 계산 원점으로 진행한다. 입력 타일의 활성 영역의 수직 말단에 도달하면, 최상단 위치로 되돌아간다. 처리는 항목 3을 계속하고/하거나 항목 4의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
4. 수평으로 필터 커널의 다음 가중치 계수로 진행한다. 필터 커널의 수평 말단에 도달하면, 커널 내의 제1 수평 위치로 되돌아간다. 처리는 항목 4를 계속하고/하거나 항목 5의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
5. 수직으로 필터 커널의 다음 가중치 계수로 진행한다. 필터 커널의 수직 말단에 도달하면, 커널 내의 제1 수직 위치로 되돌아간다. 처리는 항목 5를 계속하고/하거나 항목 6의 실행을 병렬적으로 개시할 수 있다.
6. 항목 1 내지 5가 현재 입력 평면의 타일 영역(항목 1 및 3), 출력 타일(항목 2) 및 필터 계수(항목 4 및 5)에 걸쳐 반복되는 경우, 다음 입력 평면의 가용성에 따라, 항목 1 내지 5 중 하나 이상(또는 전부)의 처리가 중단될 수 있다. 이전 입력 타일은 데이터 버퍼(431)로부터 플러싱된다. 입력 제어 유닛(417) 및 계수 제어 유닛(427)(적용 가능한 경우)은 데이터-흐름 제어(예컨대 상술한 데이터 흐름의 폐루프 제어)에 따라 각 버퍼(431, 429)에 후속 입력 (및 계수) 데이터를 공급한다.
하나 이상의 실시예에서, 다음 계산 원점으로 전환하기 전에 계산 원점에서 완전한 필터 커널의 컨볼루션이 계산되어야 하기 때문에, 특히 결과 저장소(439)가 (sw * MW) x (sh * MH) 데이터 워드의 용량을 갖는 레지스터 어레이인 경우에는 반복 순서가 변경될 수 있다. 이러한 변경된 반복 순서는 아래의 항목들 중 하나 이상에 따라 정의될 수 있다.
1. 수평으로 필터 커널의 다음 가중치 계수로 진행한다. 필터 커널의 수평 말단에 도달하면, 커널 내의 제1 수평 위치로 되돌아간다. 처리는 항목 1을 계속하고/하거나 항목 2의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
2. 수직으로 필터 커널의 다음 가중치 계수로 진행한다. 필터 커널의 수직 말단에 도달하면, 커널 내의 제1 수직 위치로 되돌아간다. 처리는 항목 2를 계속하고/하거나 항목 3의 실행을 병렬적으로 개시할 수 있다.
3. 결과 저장소(439)에 저장된 다음 출력 타일(R개 중에서)로 진행한다, 출력 타일의 최대 수에 도달하면, 제1 출력 타일로 되돌아간다. 처리는 항목 3을 계속하고/하거나 항목 4의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
4. 우측에서 수평으로 다음 계산 원점으로 진행한다. 입력 타일의 활성 영역의 수평 말단에 도달하면, 가장 좌측 위치로 되돌아간다. 처리는 항목 4를 계속하고/하거나 항목 5의 적어도 하나의 단계의 실행을 병렬적으로 개시할 수 있다.
5. 아래에서 수직으로 다음 계산 원점으로 진행한다. 입력 타일의 활성 영역의 수직 말단에 도달하면, 최상단 위치로 되돌아간다. 처리는 항목 5를 계속하고/하거나 항목 6의 실행을 병렬적으로 개시할 수 있다.
6. 항목 1 내지 5가 현재 입력 평면의 타일 영역(항목 4 및 5), 출력 타일(항목 3) 및 필터 계수(항목 1 및 2)에 걸쳐 반복되는 경우, 다음 입력 평면의 가용성에 따라, 항목 1 내지 5 중 하나 이상(또는 전부)의 처리가 중단될 수 있다. 이전 입력 타일은 데이터 버퍼(431)로부터 플러싱된다. 입력 제어 유닛(417) 및 계수 제어 유닛(427)(적용 가능한 경우)은 데이터-흐름 제어(예컨대 상술한 데이터 흐름의 폐루프 제어)에 따라 각 버퍼(431, 429)에 후속 입력 (및 계수) 데이터를 공급한다.
상술한 실시예 중 하나 이상의 반복 중에, 현재의 입력 타일이 마지막 입력 평면의 것이고 현재의 가중치 계수가 수평 방향 및 수직 방향 모두에서 필터 커널의 마지막 위치에 있는 경우, 각 프로세싱 요소(418)의 합산기(437)에 의해 생성되는 현재의 결과는 컨볼루션 코어(415)의 후속 처리 구성요소(예컨대 결과 스케일링 및 양자화 유닛, 직렬화기 유닛, 결과 재정렬 유닛 및/또는 활성화 유닛(443), 그리고 이들의 임의의 순서의 임의의 조합)에 출력될 수 있다. 컨볼루션 코어(415)는 마지막 입력 평면 타일에 걸친 반복 후에 커맨드를 완료할 수 있다. 이후에, 다음 커맨드가 컨볼루션 코어(415)에 의해 스케줄링 및 처리될 수 있다.
컨볼루션 모듈(409)에서 하나 이상의 다음 커맨드를 버퍼링하기 위해, 컨볼루션 모듈(409)의 개별 요소는 제어 유닛(411)이 미리 다음 커맨드(들)를 스케줄링할 수 있도록 (커맨드) 링크(425)에 링크된 내부 저장소(예컨대 커맨드 FIFO)를 가질 수 있으며, 다음 커맨드는 컨볼루션 모듈(409)의 구성요소에 의해 시그널링될 때에 해당 커맨드의 종속성 리스트 및 현재 플래그 또는 상태에 따라 스케줄링될 수 있다. 바람직하게는, 입력 제어 유닛(417)이 링크(421)를 통해 "입력 판독 완료" 플래그를 제어 모듈(411)에 시그널링할 수 있고/있거나 출력 제어 유닛(419)이 링크(423)를 통해 "결과 기입 완료" 플래그를 제어 모듈(411)에 시그널링할 수 있고, 이를 통해 제어 모듈(411)은 컨볼루션 모듈(409)의 내부 저장소에 다음 커맨드(들)을 최대의 양으로 유지할 수 있다. 바이어스 멀티플렉서(823-1, …, 823-n)는 집합(815-1)에 대응되는 제1 계산 사이클에서 출력 타일(821-1, …, 821-n)에 대한 각각의 바이어스 값을 선택하여, 대응되는 바이어스 값의 기여를 결과 저장소(439)의 부분 결과에 대해 최초로 추가할 수 있다.
도 4를 다시 참조하면, 입력 윈도우를 배치하는 것에 의한 컨볼루션 연산의 타일 지향적인 면적 기반의 계산은, 각각의 버퍼(429 및 431)를 통해 입력 데이터 및 계수 데이터를 효율적으로 인출할 수 있게 한다. 모든 출력 타일(821-1, …, 821-n)에 대한 단일 출력 영역(819)의 처리는 도 4의 프로세싱 요소(418)와 같은 하나의 프로세싱 요소에서 순차적으로 수행될 수 있다. 그러나, 하나 이상의 출력 타일(821-1, …, 821-n)의 출력 영역(819)의 계산은, 하나 이상의 출력 타일(821-1, …, 821-n)의 출력 영역(819)이 서로 다른 프로세싱 요소(418)에서 계산될 수 있도록, 2개 이상의(또는 모든) 프로세싱 요소(418)에 걸쳐 분할될 수 있음을 이해해야 한다. 또한, 출력 타일(821-1, …, 821-n)은 복수의 프로세싱 요소의 서로 다른 프로세싱 요소(418)에 의해 병렬적으로 처리될 수 있다. 따라서, 처리 항목(817-1, …, 817-n)은 서로 다른 프로세싱 요소(418)의 서로 다른 승산기(435)에 대응될 수 있고, 멀티플렉서(823-1, …, 823-n)는 서로 다른 프로세싱 요소(418)의 서로 다른 멀티플렉서(441)에 대응될 수 있다. 다른 실시예에서, 프로세싱 요소는 또한 복수의 출력 평면(821-1, …, 821-n)에 대한 복수의 출력 타일을 순차적으로 처리하고, 결과 저장소(439)의 각각의 별개 영역에 부분 결과를 저장하도록 구성될 수 있다. 결과 저장소(439)는 R개까지의 출력 타일을 저장하도록 구성될 수 있다. M개의 프로세싱 요소(418)가 제공되는 경우, 출력 타일 용량은 M * R일 수 있다. 각각의 프로세싱 요소(418)는 동일한 DW x DH 입력 윈도우 데이터를 획득할 수 있고, 서로 다른 출력 타일에 대해 병렬적으로는 M개, 순차적으로는 R개의 결과를 계산하여 M * R개의 출력 타일을 도출할 수 있다. M 및 R은 목표 연산의 요건에 기초하여 로직 설계 중에 구성될 수 있다. 하드웨어 리소스에 관하여, M은 병렬 프로세싱 요소(418)의 양을 결정할 수 있고, R은 각 프로세싱 요소(418)의 결과 저장소(439)의 물리적인 용량을 결정할 수 있다. 다른 실시예에서, 상술한 바와 같이, DW x DH = (w * MW) x (h * MH)인 경우 w * h개의 프로세싱 요소(418)가 동일한 출력 타일에 대하여 계산할 수 있고, 여기서 수평 및 수직 계산 원점은 정규적인 구성에서보다 w배 및 h배 더 멀어질 수 있다. 이는 수평 방향 및 수직 방향 모두에서 입력 타일 영역을 통해 반복할 단계를 보다 적게 필요로 한다. 따라서, 본 발명에 따른 장치는 입력 데이터의 크기 및 요구되는 컨볼루션 연산에 대해 유연하게 적응될 수 있다. 또한, 본 발명의 실시예에 따른 장치는 계산 작업의 요건을 충족하도록 특정 수의 프로세싱 요소 및/또는 다수의 컨볼루션 모듈로 유연하게 구성될 수 있다.
또한, 도 8에 도시된 처리는, 중첩 데이터로 연장된 입력 타일 상의 단일 계산 영역 원점(801)에서의 2 x 2 커널 크기를 갖는, 단일 워드 수평 및 수직 스트라이드 및 확장 컨볼루션 계산 시퀀스로서 특징지어질 수 있다. 계수 데이터는, 입력 윈도우(807, 809, 811, 813)의 각각의 위치에 따라, 2차원 데이터 버퍼(예컨대 도 4의 데이터 버퍼(431))로부터 각각의 입력 데이터가 액세스되는 각각의 위치에서 가중치 행렬로부터 선택될 수 있다. 입력 영역 원점(801)에 대한 입력 윈도우의 위치는 필터 커널(805)에 따른 가중치 행렬에서의 가중치 계수의 위치에 대응될 수 있고, 이를 통해 인접한 입력 데이터 위치에서 가중치 행렬을 사용한 전체 컨볼루션 연산이 병렬적으로 이루어질 수 있다. 전체 타일의 컨볼루션은 모든 연속적인 입력 영역 원점(804)에서 연속적인 계산 시퀀스에 의해 완료된다.
가중치 행렬에서의 가중치 계수의 위치와, 결과적인 출력 타일의 크기에 관한 입력 윈도우의 크기, 형태 및 배치 사이의 관계는, 수행될 컨볼루션 연산의 유형에 종속될 수 있다. 하나 이상의 실시예에 따르면, 컨볼루션 연산의 유형은 컨볼루션 모드 및 디컨볼루션 모드(컨볼루션에 대한 전치)를 포함할 수 있다.
입력 윈도우의 형태, 크기 및 배치와, 가중치 및 계산된 출력 값의 크기에 대한 관계는 스트라이드 값 및 확장 값을 포함하는 파라미터의 집합에 의해 결정될 수 있다.
컨볼루션 모드에서, 확장 값은 입력 윈도우의 2개의 연속적인 위치 사이의 거리를 결정할 수 있다. 이러한 거리는, 입력 영역에 맞춰질 때, 가중치 행렬의 계수 사이의 거리에 대응될 수 있다. 1과 동일한 확장 값은 가중치 행렬 계수가 인접한 데이터 요소에 매핑되는 것으로 정의할 수 있다. 2와 동일한 확장 값은 가중치 행렬 계수가 입력 영역의 각각의 제2 데이터 요소에 매핑되는 것으로 정의할 수 있다. 당업자라면 3 이상의 확장 값 또한 이에 따라 정의될 수 있음을 이해할 것이다.
컨볼루션 모드에서, 스트라이드 값은 입력 타일에 걸쳐 입력 윈도우에 의해 샘플링되는 데이터 요소 사이의 간격을 결정할 수 있다. 스트라이드 값은 입력 타일 상의 입력 영역에서 샘플링되는 각각의 데이터 요소 사이의 간격을 설정함으로써 입력 영역의 형상을 정의할 수 있다. 스트라이드 값이 1과 동일한 경우, 입력 윈도우는 인접한 데이터 요소에 의해 형성된다. 스트라이드 값이 2와 동일한 경우, 입력 윈도우는 입력 타일의 모든 제2 데이터 요소를 포함한다. 따라서, 스트라이드 값은 입력 타일과 출력 타일의 크기 사이의 비율을 결정할 수 있다.
스트라이드 값은 또한 결과 저장소(439)가 2개 이상의 출력 영역의 결과를 저장할 수 있는지 여부를 결정하는 데 사용될 수 있는데, 이는 2개 이상의 스트라이드 값에 대해서는 결과적인 출력 영역의 크기가 대응되는 입력 영역의 크기보다 작을 것이기 때문이다.
하나 이상의 실시예에서, 대응되는 입력 데이터 버퍼(예컨대 도 4의 데이터 버퍼(431))는 적어도 스트라이드 값 및 확장 값을 사용하여 조절될 수 있는 입력 윈도우에 따라 입력 영역을 샘플링할 수 있는 2차원 데이터 버퍼로서 구성될 수 있다. 입력 윈도우는 도 8의 입력 영역 원점(804)과 같은 하나 이상의 입력 영역 원점에 배치되어, 데이터 버퍼(431)에 저장된 입력 데이터에 대한 액세스를 제공할 수 있다. 이를 통해, 데이터 요소가 개별적으로 어드레싱될 필요가 없고, 오히려 파라미터화된 조절 가능한 입력 윈도우에 따라 인출될 수 있기 때문에, 요구되는 입력 데이터의 인출을 단순화할 수 있다.
또한, 도 8을 참조하면, 입력 윈도우 및 그 배치는 2 x 2 필터 커널에 관하여 1의 스트라이드 값 및 1의 확장 값에 의해 정의될 수 있다.
도 9는 가중치 행렬의 가중치 계수를 선택할 수 있는 필터 커널(907)과 관련하여 입력 타일(905)의 입력 영역 원점(903)에 배치될 수 있는 입력 윈도우(901)의 구성에 관한 다른 예를 도시한다. 입력 윈도우(901)는 2 x 2 필터 커널(907)에 관하여 2의 스트라이드 값 및 1의 확장 값에 의해 정의될 수 있다. 입력 윈도우(901)는 복수의 입력 영역 원점(903)의 원점(908) 주위에 배치되어, 입력 윈도우(901, 909, 911 및 913)가 필터 커널(907)에 따라 가중치 행렬의 각 가중치 계수에 관하여 처리되도록 한다. 입력 윈도우(901, 909, 911 및 913)에 의해 샘플링된 4 x 4 입력 영역의 모든 데이터 요소는 출력 타일(917)의 동일한 출력 영역(915)에 기여한다.
따라서, 도 9에 도시된 구성은, 중첩 데이터에 의해 연장되는 입력 타일(905) 상의 복수의 원점(903)의 단일 계산 영역 원점(908)에서의 2 x 2 필터 커널, 2워드 수평 및 수직 스트라이드 및 단일 워드 확장 컨볼루션 계산 시퀀스로서 특징지어질 수 있다.
가중치 행렬로부터의 가중치 계수는, 입력 데이터가 도 4의 데이터 버퍼(431)와 같은 데이터 버퍼로부터 각각의 입력 윈도우(901, 909, 911 및 913)에 의해 샘플링되는 필터 커널(907)에 따라 각각의 위치에서 선택될 수 있다. 이러한 구성에서, 입력 타일(905) 상의 모든 제2 데이터 요소가 인출된다. 계산 영역 원점(908)에 대한 입력 윈도우(901, 909, 911 및 913)의 위치는 가중치 행렬에서의 가중치 계수의 위치에 대응될 수 있고, 이를 통해 2워드 간격의 위치에서 가중치 행렬을 사용한 전체 컨볼루션 사이클이 병렬적으로 이루어질 수 있다. 도 9에 도시된 바처럼, 결과는 출력 타일(917)의 각 출력 영역 원점(921)에서 출력 영역(915) 내의 인접한 데이터 요소들 나타낸다. 전체 입력 타일(905)의 컨볼루션은 모든 원점(903)에서 입력 윈도우를 연속적으로 샘플링함으로써 완료될 수 있고, 이를 통해 출력 타일(917) 내의 모든 원점에 대한 결과가 얻어진다.
도 10은 입력 윈도우의 다른 구성 및 2 x 2 필터 커널에 관한 1의 스트라이드 값 및 2의 확장 값을 사용한 가중치 계수의 매핑을 도시한다. 이는 2 x 2 필터 커널 크기, 단일 워드 수평 및 수직 스트라이드 및 2워드 확장 컨볼루션 계산 시퀀스에 상당할 수 있다. 따라서, 가중치 행렬은 입력 데이터의 인접한 위치로부터 병렬적으로 모든 제2 데이터 요소로 연장된다.
도 11은 2 x 2 필터 커널에 관하여 2의 스트라이드 값 및 2의 확장 값을 갖는 입력 윈도우의 다른 구성을 도시한다. 이는 중첩 데이터로 연장된 입력 타일 상의 단일 계산 영역 원점에서의 2 x 2 필터 커널 크기, 2워드 수평 및 수직 스트라이드 및 확장 컨볼루션 계산 시퀀스에 상당할 수 있다.
도 8, 도 9 및 도 10과 관련하여 설명된 구성과 유사하게, 가중치 계수는 대응되는 입력 윈도우의 위치에 대응되는 위치에서 선택된다. 도 11에 따른 구성에서, 입력 윈도우는, 원점에서 시작하는 입력 타일의 모든 제2 데이터 요소를 캡처하고, 원점에 대한 입력 윈도우의 위치는 가중치 행렬에서의 가중치 계수의 위치에 2를 곱한 것에 대응되며, 이는 2워드만큼 이격된 위치로부터 병렬적으로 모든 제2 데이터 요소까지 연장된 가중치 행렬을 사용한 전체 컨볼루션 사이클과 동일한 계산 시퀀스에 대응될 수 있다. 부분 결과는 출력 타일의 각 출력 영역 원점에서의 인접한 데이터 요소의 것이다. 전체 타일 컨볼루션은 모든 입력 계산 원점에서 연속적인 계산 시퀀스에 의해 완료되어, 출력 타일의 모든 출력 영역 원점에 대한 전체 부분 결과를 생성한다.
디컨볼루션 모드에서, 스트라이드 값은 입력 평면 데이터 요소마다 얼마나 많은 출력 평면 데이터 요소를 수평 방향 및 수직 방향 모두에서 생성할지를 결정할 수 있다. 스트라이드 값은 입력 타일과 출력 타일의 차원 사이의 비율을 결정할 수 있다. 스트라이드 값이 1 보다 큰 경우, 입력 타일의 일부만이 출력 타일을 생성하는 데 사용되고, 단일 입력 타일은 출력 평면의 다수의 출력 타일에 대한 부분 결과를 생성할 수 있다.
바람직하게는, 각 입력 평면에 대해, 데이터 요소는 수평 방향 및 수직 방향 모두에서 스트라이드 값과 동일한 간격을 갖는 출력 평면의 데이터 영역에 걸쳐 배치되고, 가중치 행렬은 입력 평면의 각각의 데이터 요소에 대해 복제되고 입력 데이터 요소마다 가중치 계수로서 사용되어 출력 평면의 부분 결과를 생성할 수 있다. 출력 평면의 데이터 요소에 매핑된 부분 결과의 수는 수평 방향 및 수직 방향 모두에서 스트라이드 값과 동일한 주기를 갖는 패턴을 가질 수 있다.
디컨볼루션 모드에서, 도 4의 컨볼루션 코어(415)와 같은 컨볼루션 코어는 도 4의 데이터 버퍼(431)와 같은 데이터 버퍼로부터 DW x DH개의 인접 데이터 워드를 판독하고, 출력 영역에 걸쳐 스트라이드 값과 동일한 데이터 요소 사이의 간격을 갖는 출력 타일의 출력 영역(카디널리티가 DW x DH임)에 대한 디컨볼루션 연산의 부분 결과를 생성할 수 있다. 가중치 행렬 내부에서 수평 방향 및 수직 방향으로 스트라이드 값에 따른 가중치 계수 선택 단계에 의해 부분 결과가 생성된다.
도 12는 2 x 2 필터 커널에 관하여 1의 스트라이드 값 및 1의 확장 값으로 단일 입력 영역 원점 주위로 디컨볼루션 시퀀스에 대한 입력 윈도우를 배치하는 것을 도시한다. 입력 윈도우는 필터 커널(1203)에 따라 입력 타일의 복수의 입력 영역 원점(1213)의 입력 영역 원점(1201)에 대해 배치될 수 있다. 이에 따라, 입력 영역 원점(1201)에 대해 입력 윈도우(1205, 1207, 1209 및 1211)가 도출될 수 있다.
디컨볼루션 중에, 필터 커널(1203)에 따른 가중치 행렬로부터의 가중치 계수의 선택은, 입력 영역 원점(1201)에 대한 입력 윈도우(1205, 1207, 1209 및 1211)의 위치에 대해 역(inverse)일 수 있다.
도 12에 도시된 바와 같은 구성은, 중첩 데이터로 연장된 입력 타일 상의 단일 계산 영역 원점(1201)에서의 2 x 2 필터 커널, 단일 워드 수평 및 수직 스트라이드 및 확장 디컨볼루션 계산 시퀀스로서 이해될 수 있다. 계수는 입력 윈도우(1205, 1207, 1209 및 1211)의 위치에 따라 가중치 행렬로부터 선택된다. 입력 영역 원점(1201)에 대한 입력 윈도우(1205, 1207, 1209, 1211)의 위치는, 필터 커널(1203)에 따른 가중치 행렬에서의 실제 가중치 계수 위치의 역일 수 있다. 이를 통해, 인접한 위치에서 병렬적으로 가중치 행렬을 사용한 전체 디컨볼루션 사이클과 동일한 계산 시퀀스가 도출될 수 있다. 타일의 전체 디컨볼루션은 입력 타일의 모든 계산 영역 원점(1213)에서 연속적인 계산 시퀀스에 의해 완료된다.
도 13a 및 13b는 입력 타일의 데이터 요소를 샘플링하기 위한 입력 윈도우의 다른 구성 및 2의 스트라이드 값, 1의 확장 값 및 3x3 필터 커널(1303)에 대한 복수의 입력 영역 원점(1302)의 단일 입력 영역 원점(1301) 주위의 디컨볼루션 시퀀스에 대한 출력 타일에 관한 결과를 도시한다. 도 13a 및 도 13b는 입력 타일(1305) 상의 입력 윈도우의 배치 및 출력 타일(1307)에 대한 대응되는 결과를 도시한다. 도 13a 및 도 13b에서 도시된 구성은, 복수의 출력 영역 원점(1310)의 출력 영역 원점(1308)에서 출력 영역을 생성하는 3x3 필터 커널, 2워드 수평 및 수직 스트라이드 및 단일 워드 확장 디컨볼루션 계산 시퀀스로서 이해될 수 있으며, 여기서 출력 영역은 중첩 데이터로 연장된 입력 타일(1305) 상의 단일 계산 영역 원점(1301) 주위의 입력 데이터로부터 수평 방향 및 수직 방향 모두에서 스트라이드 배만큼 더 크다. 복수의 입력 영역 원점(1302) 각각에서의 계산에 의해, 대응되는 출력 영역 원점(1310)에서의 결과가 생성될 수 있다.
입력 윈도우의 배치에 의해 입력 윈도우(1309, 1311, 1313 및 1315)가 도출될 수 있다.
도 13a의 제1 라인에 도시된 바처럼, 필터 커널(1303)의 중심 값에 의해 매핑된 가중치 계수와 입력 윈도우(1309)의 조합은, 출력 타일(1307) 상의 출력 영역(1317)의 스트라이드만큼 이격된 위치에 대한 부분 결과를 생성한다. 본 명세서 전반에 걸쳐 사용되는 스트라이드만큼 이격된 위치라는 용어는, 스트라이드 값에 따라 수평 및/또는 수직으로 이격된 영역 상의 위치를 지칭한다.
입력 윈도우(1311, 1313, 1315, 1309) 및 필터 커널(1303)에 의해 선택된 가중치 행렬로부터의 각각의 가중치 계수는, 출력 타일(1307) 상의 출력 영역(1317)의 위치에 대한 단일 워드 위치 오프셋을 갖는, 출력 타일(1307) 상의 출력 영역(1319)의 스트라이드만큼 이격된 위치에 대한 부분 결과를 도출할 수 있다.
도 13b는 출력 타일(1307)의 다른 데이터 요소를 계산하는 데 사용되는 필터 커널(1303)에 따른 가중치 행렬의 서로 다른 가중치 계수와 입력 윈도우(1309 및 1313) 및 입력 윈도우(1309 및 1315)의 다른 조합을 도시한다.
입력 윈도우(1315)와 가중치 계수(1321)의 조합 및 입력 윈도우(1309)와 가중치 계수(1323)의 조합은, 출력 타일(1307) 상의 출력 영역(1317)의 위치에 대한 단일 워드 수평 오프셋 및 해당 위치에 매칭되는 수직 위치를 갖는, 출력 타일(1307) 상의 출력 영역(1325)의 스트라이드만큼 이격된 위치에 대한 부분 결과를 정의한다. 입력 윈도우(1313)와 가중치 계수(1327)와의 조합 및 입력 윈도우(1309)와 가중치 계수(1329)와의 조합은, 출력 타일(1307) 상의 출력 영역(1317)의 위치에 대한 단일 워드 수직 오프셋 및 해당 위치에 매칭되는 수평 위치를 갖는, 출력 타일(1307) 상의 출력 영역(1331)의 스트라이드만큼 이격된 위치에 대한 부분 결과를 정의한다.
도 13a 및 도 13b에 관하여 상세히 설명한 바와 같이, 입력 영역 원점(1301)에 대한 입력 윈도우의 위치는 가중치 행렬에서의 가중치 계수의 실제 위치를 음의 스트라이드 값(이 예에서는 -2)으로 나눈 것에 대응될 수 있다. 이를 통해, DW x DH 입력 윈도우(1309, 1311, 1313, 1315)에 의한 부분 결과가, 사이클마다 위치 오프셋이 변경됨에 따라 수평 방향 및 수직 방향 모두에서 스트라이드만큼 이격된 위치 각각에 대해 값을 전파하는 동안에, 가중치 행렬을 사용한 전체 디컨볼루션 사이클과 동일한 계산 시퀀스가 도출될 수 있으며, 이에 따라 DW x DH 크기의 입력 영역으로부터 (스트라이드 * DW) x (스트라이드 * DH) 크기의 영역이 효과적으로 도출된다. 출력 영역 원점(1308)에 대한 출력 영역(1317, 1319, 1325, 1331)에 대응되는 부분 결과 전파 패턴의 위치 오프셋은, 가중치 행렬에서의 가중치 계수의 실제 위치에 대응될 수 있다.
도 13a 및 도 13b의 구성에 의해, 입력 윈도우(1309, 1311, 1313, 1315)의 모든 위치 및 필터 커널(1303)에 따른 가중치 행렬의 각 가중치 계수와의 조합에 대하여, 모든 입력 영역 원점(1302)에서의 연속적인 계산 시퀀스에 의한 전체 타일 디컨볼루션이 가능해진다.
도 14는 본 발명의 일 실시예에 따른 가속기 장치에 의해 데이터의 레이어를 액세스하고 처리하기 위한 방법의 흐름도를 도시한다. 이 방법은 도 4에 도시된 장치(401)와 같은 가속기 장치 상에서 구현될 수 있다.
방법(1400)은 항목(1401)에서 시작하여, 가속기 장치에 의해 처리될 입력 데이터의 적어도 일부가 인출되는 항목(1403)으로 진행할 수 있다. 항목(1405)에서 입력 데이터는 복수의 인접한 입력 타일로 분절화 또는 분할될 수 있다. 입력 타일은 미리 결정된 크기를 가질 수 있다. 이어서, 항목(1407)에서 복수의 인접한 입력 타일 중 적어도 하나가 가속기 장치의 데이터 버퍼에 저장될 수 있다.
항목(1409)에서, 데이터 버퍼에 저장된 복수의 인접한 입력 타일 중 적어도 하나의 데이터 요소는, 데이터 버퍼에 저장된 데이터 요소에 걸쳐 입력 윈도우를 배치함으로써 액세스되어 복수의 입력 영역을 생성할 수 있으며, 여기서 입력 윈도우는 파라미터의 집합에 따라 조절될 수 있다. 파라미터의 집합은 스트라이드 값 및 확장 값을 포함할 수 있고, 이는 계수 값의 위치에 관한 입력 영역 상의 입력 윈도우의 구성 및 배치, 그리고 출력 데이터 요소에 대한 기여를 정의할 수 있다. 입력 윈도우의 구성의 예가 도 8 내지 도 13의 실시예에 관하여 설명되었다.
항목(1411)에서, 복수의 입력 영역 중 적어도 하나가 순차적으로 처리되어, 복수의 인접한 입력 타일 중 적어도 하나를 가속기 장치에 의해 적어도 부분적으로 처리할 수 있다.
항목(1407)에서 복수의 인접한 입력 타일 중 다른 하나를 데이터 버퍼에 저장하고, 항목(1409)에서 입력 윈도우를 사용하여 복수의 인접한 입력 타일 중 다른 하나의 데이터를 액세스함으로써 방법(1401)이 반복될 수 있다. 이는 전체 입력 데이터에 대한 계산이 완료될 때까지 순차적으로 또는 병렬적으로 반복될 수 있다.
방법(1400)은 항목(1413)에서 종료될 수 있다.
본 발명의 실시예는, 장치의 자동화 제어에 대하여 컴퓨터에 의해 가이드되거나 자동화되는 의사 결정을 가능하게 하는 정보를 제공하기 위해, 얼굴 및 물체 검출, 교통 모니터링 및 자동화 주행과 같은, 컴퓨터 비전을 포함하는 다양한 기술적 영역 뿐만 아니라, 대량의 수학적 연산의 수행을 필요로 하는 임의의 다른 영역에서 적용될 수 있다. 그러나, 본 발명은 입력 데이터의 특정 구성 및/또는 응용 분야에 한정되지 않으며, 디바이스를 제어하기에 적합한 정보를 도출하기 위하여 센서, 상태, 또는 구성 데이터에 대한 복잡한 계산을 가능하게 하는 처리 장치의 기술적인 설정을 정의할 수 있음을 이해해야 한다.
몇몇 실시예가 상세하게 설명되었으나, 본 발명의 태양은 다양한 형태를 취할 수 있음을 이해해야 한다. 특히, 청구된 대상은 설명된 예와 상이하게 실시 또는 구현될 수 있고, 설명된 특징 및 특성은 임의의 조합으로 실시 또는 구현될 수 있다. 본 명세서에 개시된 실시예는 청구범위에 의해 정의된 바처럼 본 발명을 한정하는 것이 아니라 예시하기 위한 것이다.

Claims (15)

  1. 장치로서,
    상기 장치를 인터커넥트에 결합시키도록 구성되는 인터페이스,
    데이터를 처리하도록 각각 구성되는 복수의 프로세싱 모듈,
    상기 복수의 프로세싱 모듈 각각의 처리를 제어하도록 구성되는 제어 모듈, 및
    상기 복수의 프로세싱 모듈 중 적어도 하나에 의해 처리되는 데이터의 적어도 일부를 저장하도록 구성되는 캐시 모듈
    을 포함하고,
    각각의 프로세싱 모듈은,
    복수의 프로세싱 요소를 사용하여 데이터에 대한 연산을 수행함으로써 상기 데이터를 처리하도록 구성되는 프로세싱 코어,
    상기 인터페이스를 통한 데이터 및 상기 캐시 모듈에 저장된 데이터를 인출하고, 상기 인출된 데이터를 상기 프로세싱 코어에 제공하도록 구성되는 입력 제어 유닛, 및
    상기 프로세싱 코어에 의해 처리된 데이터를 상기 인터페이스 및 상기 캐시 모듈에 제공하도록 구성되는 출력 제어 유닛
    을 포함하는 장치.
  2. 제1항에 있어서,
    상기 제어 모듈은 상기 인터페이스를 통해 구성 데이터를 인출하고, 상기 구성 데이터에 기초하여 상기 복수의 프로세싱 모듈 중 적어도 하나의 프로세싱 모듈을 설정하도록 구성되는 장치.
  3. 제1항 또는 제2항에 있어서,
    상기 제어 모듈은 상기 복수의 프로세싱 모듈 사이에서 커맨드를 스케줄링하도록 구성되고, 상기 커맨드는 상기 복수의 프로세싱 모듈의 상기 입력 제어 유닛 및 상기 출력 제어 유닛 중 하나 이상으로부터 수신되는 복수의 상태에 응답하여 스케줄링되는 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 제어 모듈은, 적어도 하나의 프로세싱 모듈의 적어도 하나의 출력 제어 유닛 및 하나 이상의 프로세싱 모듈의 하나 이상의 입력 제어 유닛을 제어하여, 상기 적어도 하나의 프로세싱 모듈에 의해 처리된 데이터를 상기 캐시 모듈을 통해 상기 하나 이상의 프로세싱 모듈에 피드백하도록 구성되는 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    각각의 프로세싱 모듈은 상기 인터페이스를 통해 계수 데이터를 인출하도록 구성되는 계수 제어 유닛을 더 포함하는 장치,
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 프로세싱 코어는 데이터 버퍼와, 상기 복수의 프로세싱 요소를 제어하여 상기 데이터 버퍼에 저장된 입력 데이터를 처리하도록 구성되는 처리 제어 유닛을 더 포함하는 장치.
  7. 제6항에 있어서,
    상기 프로세싱 코어는 계수 버퍼를 더 포함하고,
    상기 처리 제어 유닛은 상기 복수의 프로세싱 요소를 제어하여 상기 데이터 버퍼에 저장된 입력 데이터를 상기 계수 버퍼에 저장된 계수 데이터를 사용하여 처리하도록 구성되는 장치.
  8. 제6항 또는 제7항에 있어서,
    상기 데이터 버퍼는 상기 입력 데이터를 2차원 어레이로서 저장하도록 구성되는 2차원 데이터 버퍼인 장치.
  9. 제5항 또는 제7항에 있어서,
    상기 계수 데이터는 상기 입력 데이터의 적어도 일부에 적용되는 가중치 계수 및 바이어스 값을 포함하는 장치.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서,
    상기 프로세싱 코어의 적어도 하나의 프로세싱 요소는 승산-누적(multiply-accumulate) 연산을 수행하도록 구성되고, 상기 프로세싱 코어의 상기 적어도 하나의 프로세싱 요소는 상기 승산-누적 연산의 결과를 버퍼링하도록 구성되는 결과 저장소를 더 포함하는 장치.
  11. 제1항 내지 제10항 중 어느 한 항에 있어서,
    상기 장치는 상기 인터페이스 통해 입력 데이터를 인출하도록 구성되고, 상기 입력 데이터는 신경망의 입력 레이어의 적어도 일부를 나타내는 장치.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    각각의 프로세싱 모듈은 신경망의 레이어의 적어도 일부를 처리하고, 상기 캐시 모듈에 저장된 데이터는 상기 신경망의 다음 레이어의 적어도 일부를 나타내는 장치.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서,
    상기 장치는 컨볼루션 신경망 가속기인 장치.
  14. 시스템으로서,
    프로세싱 호스트,
    적어도 하나의 메모리,
    제1항 내지 제13항 중 어느 한 항에 따른 장치, 및
    상기 프로세싱 호스트, 상기 적어도 하나의 메모리 및 상기 장치를 결합시키는 인터커넥트
    를 포함하고,
    상기 장치는 상기 인터커넥트를 통해 상기 적어도 하나의 메모리로부터 입력 데이터를 인출하도록 구성되는 시스템.
  15. 제14항에 있어서,
    상기 인터커넥트는 시스템 버스인 시스템.
KR1020207029716A 2018-04-19 2019-04-09 연산을 가속하기 위한 가속기 및 시스템 KR20200143686A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP18168294.9 2018-04-19
EP18168294.9A EP3557425B1 (en) 2018-04-19 2018-04-19 Accelerator and system for accelerating operations
PCT/EP2019/058871 WO2019201657A1 (en) 2018-04-19 2019-04-09 Accelerator and system for accelerating operations

Publications (1)

Publication Number Publication Date
KR20200143686A true KR20200143686A (ko) 2020-12-24

Family

ID=62027893

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207029716A KR20200143686A (ko) 2018-04-19 2019-04-09 연산을 가속하기 위한 가속기 및 시스템

Country Status (7)

Country Link
US (1) US11467969B2 (ko)
EP (1) EP3557425B1 (ko)
JP (1) JP7358382B2 (ko)
KR (1) KR20200143686A (ko)
CN (1) CN112334885A (ko)
FI (1) FI3557425T3 (ko)
WO (1) WO2019201657A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102636314B1 (ko) * 2023-06-16 2024-02-15 주식회사 하이퍼엑셀 거대 생성 인공지능 하드웨어의 스트리밍 연산을 위한 가중치 메모리 매핑 방법 및 시스템

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FI3557425T3 (fi) 2018-04-19 2024-07-10 Aimotive Kft Kiihdytin ja järjestelmä operaatioiden kiihdyttämiseksi
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US11403530B1 (en) 2018-04-20 2022-08-02 Perceive Corporation Using quinary weights with neural network inference circuit designed for ternary weights
US10977338B1 (en) 2018-04-20 2021-04-13 Perceive Corporation Reduced-area circuit for dot product computation
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11481612B1 (en) 2018-04-20 2022-10-25 Perceive Corporation Storage of input values across multiple cores of neural network inference circuit
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US12093696B1 (en) 2018-04-20 2024-09-17 Perceive Corporation Bus for transporting output values of a neural network layer to cores specified by configuration data
WO2019220692A1 (ja) * 2018-05-15 2019-11-21 三菱電機株式会社 演算装置
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US11868901B1 (en) 2019-05-21 2024-01-09 Percieve Corporation Compiler for optimizing memory allocations within cores
US11354123B2 (en) * 2019-10-18 2022-06-07 Macronix International Co., Ltd. Memory device and computing in memory method thereof
KR20210101903A (ko) * 2020-02-11 2021-08-19 삼성전자주식회사 전자 장치 및 그 제어 방법
DE102020202093A1 (de) * 2020-02-19 2021-08-19 Robert Bosch Gesellschaft mit beschränkter Haftung Verfahren und Vorrichtung für maschinelles Lernen
TWI775296B (zh) * 2020-06-09 2022-08-21 國立清華大學 使用環張量之深度神經網路加速方法及其系統
US20210383198A1 (en) * 2020-06-09 2021-12-09 National Tsing Hua University Deep neural network accelerating method using ring tensors and system thereof
US11263170B1 (en) 2021-03-29 2022-03-01 SambaNova Systems, Inc. Lossless tiling in convolution networks—padding before tiling, location-based tiling, and zeroing-out
US11195080B1 (en) 2021-03-29 2021-12-07 SambaNova Systems, Inc. Lossless tiling in convolution networks—tiling configuration
US11227207B1 (en) 2021-03-29 2022-01-18 SambaNova Systems, Inc. Lossless tiling in convolution networks—section boundaries
US11797280B1 (en) * 2021-06-30 2023-10-24 Amazon Technologies, Inc. Balanced partitioning of neural network based on execution latencies
US20230008014A1 (en) * 2021-07-07 2023-01-12 Renesas Electronics Corporation Data processing device, data-processing method and recording media
WO2023010244A1 (zh) * 2021-08-02 2023-02-09 华为技术有限公司 神经网络加速器及神经网络加速器的数据处理方法
CN117095271B (zh) * 2023-10-20 2023-12-29 第六镜视觉科技(西安)有限公司 目标识别方法、装置、电子设备及存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4227218B2 (ja) * 1997-04-30 2009-02-18 キヤノン株式会社 動的メモリ管理装置及びその制御方法
JP2011141823A (ja) 2010-01-08 2011-07-21 Renesas Electronics Corp データ処理装置および並列演算装置
US8965819B2 (en) * 2010-08-16 2015-02-24 Oracle International Corporation System and method for effective caching using neural networks
EP3035249B1 (en) * 2014-12-19 2019-11-27 Intel Corporation Method and apparatus for distributed and cooperative computation in artificial neural networks
US20160379109A1 (en) 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Convolutional neural networks on hardware accelerators
US9665799B1 (en) 2016-01-29 2017-05-30 Fotonation Limited Convolutional neural network
CN108701236B (zh) * 2016-01-29 2022-01-21 快图有限公司 卷积神经网络
JP6645252B2 (ja) 2016-02-23 2020-02-14 株式会社デンソー 演算処理装置
WO2017165538A1 (en) 2016-03-22 2017-09-28 Uru, Inc. Apparatus, systems, and methods for integrating digital media content into other digital media content
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10802992B2 (en) * 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
US10586148B2 (en) * 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10824938B2 (en) * 2017-04-24 2020-11-03 Intel Corporation Specialized fixed function hardware for efficient convolution
US10354733B1 (en) * 2017-10-17 2019-07-16 Xilinx, Inc. Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
FI3557425T3 (fi) 2018-04-19 2024-07-10 Aimotive Kft Kiihdytin ja järjestelmä operaatioiden kiihdyttämiseksi

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102636314B1 (ko) * 2023-06-16 2024-02-15 주식회사 하이퍼엑셀 거대 생성 인공지능 하드웨어의 스트리밍 연산을 위한 가중치 메모리 매핑 방법 및 시스템

Also Published As

Publication number Publication date
WO2019201657A1 (en) 2019-10-24
EP3557425A1 (en) 2019-10-23
JP2021521516A (ja) 2021-08-26
CN112334885A (zh) 2021-02-05
EP3557425B1 (en) 2024-05-15
US20210173787A1 (en) 2021-06-10
FI3557425T3 (fi) 2024-07-10
JP7358382B2 (ja) 2023-10-10
US11467969B2 (en) 2022-10-11

Similar Documents

Publication Publication Date Title
JP7329533B2 (ja) 演算を加速するための方法および加速器装置
JP7358382B2 (ja) 演算を加速するための加速器及びシステム
JP6821002B2 (ja) 処理装置と処理方法
US11586907B2 (en) Arithmetic unit for deep learning acceleration
JP7009609B2 (ja) 加速数学エンジン
EP3685319B1 (en) Direct access, hardware acceleration in neural network
CN112840356B (zh) 运算加速器、处理方法及相关设备
Shen et al. Escher: A CNN accelerator with flexible buffering to minimize off-chip transfer
CN106228238B (zh) 现场可编程门阵列平台上加速深度学习算法的方法和系统
US11544191B2 (en) Efficient hardware architecture for accelerating grouped convolutions
CN109102065B (zh) 一种基于PSoC的卷积神经网络加速器
CN114119336A (zh) 用于自适应超采样的样本的基于深度学习的选择
CN111445003A (zh) 神经网络生成器
CN110738317A (zh) 基于fpga的可变形卷积网络运算方法、装置和系统
CN104731561B (zh) 在simd处理单元中的任务执行
CN110377874B (zh) 卷积运算方法及系统
CN110490308B (zh) 加速库的设计方法、终端设备及存储介质
Shahbahrami et al. FPGA implementation of parallel histogram computation
US20220350863A1 (en) Technology to minimize the negative impact of cache conflicts caused by incompatible leading dimensions in matrix multiplication and convolution kernels without dimension padding
JP6906622B2 (ja) 演算回路および演算方法
CN116127685A (zh) 使用机器学习执行模拟
US20230004871A1 (en) Machine learning cluster pipeline fusion
Farahani et al. A Partial Method for Calculating CNN Networks Based On Loop Tiling.
CN118426989A (zh) 人工智能模型的优化方法、电子设备与存储介质

Legal Events

Date Code Title Description
E902 Notification of reason for refusal