KR20200022384A - 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치 - Google Patents

콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치 Download PDF

Info

Publication number
KR20200022384A
KR20200022384A KR1020197037032A KR20197037032A KR20200022384A KR 20200022384 A KR20200022384 A KR 20200022384A KR 1020197037032 A KR1020197037032 A KR 1020197037032A KR 20197037032 A KR20197037032 A KR 20197037032A KR 20200022384 A KR20200022384 A KR 20200022384A
Authority
KR
South Korea
Prior art keywords
dpe
dpes
convolutional
utilization
convolution
Prior art date
Application number
KR1020197037032A
Other languages
English (en)
Other versions
KR102670479B1 (ko
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 KR1020247017492A priority Critical patent/KR20240093932A/ko
Publication of KR20200022384A publication Critical patent/KR20200022384A/ko
Application granted granted Critical
Publication of KR102670479B1 publication Critical patent/KR102670479B1/ko

Links

Images

Classifications

    • 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
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • G06K9/00979
    • 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
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/70Arrangements for image or video recognition or understanding using pattern recognition or machine learning
    • G06V10/82Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/95Hardware or software architectures specially adapted for image or video understanding structured as a network, e.g. client-server architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Neurology (AREA)
  • Multimedia (AREA)
  • Medical Informatics (AREA)
  • Databases & Information Systems (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Complex Calculations (AREA)
  • Image Analysis (AREA)

Abstract

콘볼루션 신경망(CNN) 가속기의 콘볼루션 효율을 개선하기 위한 방법들, 장치, 시스템들, 및 제조 물품들이 개시된다. 예시적인 장치는, 플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하기 위한 DPE 인벤토리 엔진, DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하기 위한 모드 선택기, DPE들 중 식별된 DPE들에 기반하여 DPE 활용률을 결정하기 위한 DPE 구성 최적화기, 및 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 DPE들 중 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하기 위한 콘볼루션 엔진을 포함한다.

Description

콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치
관련 출원
본 특허는, 2017년 5월 19일자로 출원된 미국 가특허 출원 일련번호 제62/508,896호의 이익을 청구하는 출원으로부터 발생하며, 미국 가특허 출원 일련번호 제62/508,896호는 이로써 그 전체가 인용에 의해 본원에 포함된다. 이로써, 미국 가특허 출원 일련번호 제62/508,896호에 대한 우선권이 청구된다.
본 개시내용은 일반적으로 이미지 처리에 관한 것으로, 더 상세하게는, 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치에 관한 것이다.
최근, 이미지 처리 능력들에 대한 요구는 고전력 전용 데스크톱 하드웨어를 넘어서 개인용 및/또는 다른 모바일 디바이스들에 대해 기대를 갖게 되었다. 모바일 디바이스들은 전형적으로, 크기 제약들, 온도 관리 제약들, 및/또는 공급 전력 제약들에 의해 제한되는 처리 능력들을 포함한다.
도 1은, 콘볼루션을 사용하는 예시적인 입력 볼륨 및 예시적인 출력 볼륨의 예시적인 콘볼루션 연산을 예시한다.
도 2는, "출력 위치별" 기반의 예시적인 다중채널 콘볼루션 연산을 예시한다.
도 3은, 예시적인 풀링 연산의 개략적인 표현을 예시한다.
도 4는, 예시적인 완전-연결 연산의 개략적인 표현을 예시한다.
도 5는, 예시적인 콘볼루션 신경망(CNN) 가속기의 블록도를 예시한다.
도 6은, 예시적인 데이터 경로 요소(DPE)를 예시한다.
도 7은, 예시적인 계수 저장소들의 예시이다.
도 8은, 예시적인 계수 저장소에 대한 예시적인 어드레싱 모델을 도시하는 예시적인 표이다.
도 9는, 비-FP16 포맷들에 기반한 예시적인 계수 저장소에 대한 예시적인 어드레싱 모델을 도시하는 예시적인 표이다.
도 10은, 본원에 개시된 예들을 구현하기 위한 예시적인 콘볼루션 연산을 예시한다.
도 11은, 예시적인 1 * 256 콘볼루션 배열에 기반한 예시적인 연결 다중화기의 예시적인 연산을 예시한다.
도 12는, 예시적인 2 * 128 콘볼루션 배열에 기반한 예시적인 연결 다중화기의 예시적인 연산을 예시한다.
도 13은, 도 5의 예시적인 CNN 가속기를 구현하기 위한 다른 예시적인 CNN 가속기의 예시적인 구현의 블록도이다.
도 14는, 입력 이미지와 연관된 이미지 데이터를 처리하도록 도 5의 CNN 가속기 및/또는 도 13의 CNN 가속기를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도이다.
도 15는, 임의적 풀링의 콘볼루션 연산을 수행하도록 도 5의 CNN 가속기 및/또는 도 13의 CNN 가속기를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도이다.
도 16은, 중첩 풀링 연산을 수행하도록 도 5의 CNN 가속기 및/또는 도 13의 CNN 가속기를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도이다.
도 17은, 완전-연결 연산을 수행하도록 도 5의 CNN 가속기 및/또는 도 13의 CNN 가속기를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도이다.
도 18은, 예시적인 누산기를 구성하도록 도 5의 CNN 가속기 및/또는 도 13의 CNN 가속기를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들을 나타내는 흐름도이다.
도 19는, 도 13의 CNN 가속기를 구현하도록 도 14-18의 예시적인 기계 판독가능 명령어들을 실행하기 위해 구조화된 예시적인 프로세서 플랫폼의 블록도이다.
도면들은 실측이 아니다. 일반적으로, 동일한 참조 번호들은 동일하거나 유사한 부분들을 지칭하기 위해 도면(들) 및 동반되는 기재된 설명 전반에 걸쳐 사용될 것이다.
개인용 및/또는 다른 모바일 디바이스들을 포함하는 전형적인 컴퓨팅 시스템들은, 인간 시각 시스템들이 수행할 수 있는 작업들을 자동화하기 위해 고급 이미지 처리 또는 컴퓨터 시각 알고리즘들을 이용한다. 컴퓨터 시각 작업들은, 디지털 이미지들의 획득, 처리, 분석, 및 이해를 포함하며, 이들은, 디지털 이미지들로부터의 차원 데이터의 추출을 부분적으로 용이하게 하여 수치 및/또는 기호 정보를 생성한다. 컴퓨터 시각 알고리즘들은, 다른 것들 중에서도, 3차원(3D) 포즈 추정, 이벤트 검출, 객체 인식, 비디오 추적 등과 연관된 결정들을 행하고/거나 동작들을 다른 방식으로 수행하기 위해 수치 및/또는 기호 정보를 사용할 수 있다.
고급 이미지 처리 또는 컴퓨터 시각 알고리즘들은 콘볼루션 신경망(CNN 또는 ConvNet)을 이용할 수 있다. CNN은, 이미지들을 분류하고, 유사성(예컨대, 포토 탐색)으로 이미지들을 클러스터링하고, 콘볼루션을 사용하여 이미지들 내에서 객체 인식을 수행하는 데 전형적으로 사용되는 심층 인공 신경망이다. 본원에서 사용되는 바와 같이, 콘볼루션은, 함수들 중 하나의 함수의 형상이 다른 함수의 형상에 의해 어떻게 수정되는지를 표현하는 통합에 의해 2개의 주어진 함수로부터 도출되는 함수를 지칭한다. 예컨대, CNN은, 입력 이미지 내의 이미지 피쳐(예컨대, 수평선, 2차원(2D) 형상 등)의 매치들을 식별하기 위해 입력 이미지에 걸쳐 이미지 피쳐에 대응하는 하나 이상의 필터를 통과시킴으로써, 입력 이미지에 포함된 얼굴들, 개인들, 도로 표지판들, 동물들 등을 식별하는 데 사용될 수 있다.
일부 예들에서, CNN들은, 이미지들을, 부가적인 차원들을 갖는 수들의 행렬들인 텐서들로서 입수하고/거나 다른 방식으로 처리한다. 예컨대, CNN은, 3D 텐서들에 의해 표현되는 입력 이미지를 획득할 수 있으며, 여기서, 제1 및 제2 차원은 행렬의 폭 및 높이에 대응하고, 제3 차원은 행렬의 심도에 대응한다. 예컨대, 행렬의 폭 및 높이는 입력 이미지의 폭 및 높이에 대응할 수 있고, 행렬의 심도는 이미지의 색상 심도(예컨대, 색상 계층) 또는 색상 인코딩(예컨대, 적녹청(RGB) 인코딩)에 대응할 수 있다.
신경망들과 비교하여, CNN들은 전체 이미지들로 잘 규모조정된다. 예컨대, 전형적인 신경망은 입력(예컨대, 단일 벡터)을 수신하고 일련의 은닉 계층들을 통해 입력을 변환하는데, 여기서, 각각의 은닉 계층은 뉴런들의 세트를 포함하고, 각각의 뉴런은 이전 계층의 모든 뉴런들에 완전히 연결되며, 단일 계층에서의 뉴런들은 완전히 독립적으로 기능하고 어떠한 연결들도 공유하지 않는다. 그러한 예들에서, 전형적인 신경망은 200 x 200 x 3(예컨대, 200 픽셀 x 200 픽셀 x 3 색상 심도)의 이미지를 120,000 가중치로 변환하며, 각각의 가중치는 하나 초과의 뉴런을 가질 수 있다. 예컨대, 이미지는 각각의 색상 심도에 대응하는 3개의 입력 채널을 가질 수 있으며, 여기서, 각각의 입력 채널은 200 픽셀 x 200 픽셀의 치수를 갖는다.
전형적인 CNN은 또한, 입력을 수신하고 일련의 은닉 계층들을 통해 입력을 변환한다. 예컨대, CNN은 복수의 콘볼루션 계층들, 풀링 계층들, 및/또는 완전-연결 계층들을 가질 수 있다. 그러한 예들에서, CNN은, 콘볼루션 계층, 풀링 계층, 및 완전-연결 계층을 포함하는 복수의 계층 트리플릿(triplet)들을 가질 수 있다. 일부 예들에서, CNN은, 하나 이상의 완전-연결 계층에 출력되는 복수의 콘볼루션 및 풀링 계층 쌍들을 갖는다. 일부 예들에서, CNN은 20개의 계층, 30개의 계층 등을 포함할 수 있다.
콘볼루션 계층은, CNN에서 입력(이전) 계층의 이미지들을 다음 계층에 맵핑하기 위해 콘볼루션 함수 또는 연산을 적용한다. 콘볼루션은 3D인데, 그 이유는, 각각의 입력 계층이 입력 이미지와 연관된 다수의 입력 피쳐들(예컨대, 입력 채널들)을 가질 수 있기 때문이다. 콘볼루션 계층은, 각각의 개별 입력 채널에 구역 필터 윈도우를 형성하고, (1) 구역 필터 윈도우와 연관된 필터 가중치와 (2) 구역 필터 윈도우에 의해 적용받는 입력 데이터의 곱을 계산하여 출력 데이터 또는 활성화들을 생성함으로써 콘볼루션을 수행한다. 예컨대, 입력 이미지의 출력 피쳐는, 콘볼루션 필터를 사용하여, 복수의 구역 필터 윈도우들을 포함하는 복수의 입력 채널들을 스캐닝함으로써 결정될 수 있다.
풀링 계층은 각각의 출력 채널에서의 활성화들의 세트로부터 정보를 추출한다. 풀링 계층은, 최대 풀링 계층에 대응하는 최대 풀링 연산 또는 평균 풀링 계층에 대응하는 평균 풀링 연산을 수행할 수 있다. 최대 풀링 연산은, 풀링 윈도우 내의 활성화들의 최대 값을 선택하는 것을 포함한다. 평균 풀링 연산은, 풀링 윈도우 내의 활성화들의 평균 값을 계산하는 것을 포함한다.
완전-연결 계층은, 콘볼루션 계층(들) 및/또는 풀링 계층(들)에 의해 계산된 데이터를 획득하고 그 데이터를 하나 이상의 부류로 분류한다. 완전-연결 계층은, 분류된 데이터가 입력 이미지의 특정 이미지 피쳐에 대응하는지 여부를 결정한다. 예컨대, 완전-연결 계층은, 분류된 데이터가 단순한 이미지 피쳐(예컨대, 수평선)에 대응하는지 또는 동물(예컨대, 고양이)과 같은 더 복잡한 이미지 피쳐에 대응하는지를 결정할 수 있다.
일부 예시들에서, CNN은, 콘볼루션 계층, 풀링 계층 등 이후에 개시되는 사후-처리 연산, 이를테면, 파라미터 정류된 선형 유닛(PReLU) 연산 또는 정류된 선형 유닛(ReLU) 연산을 수행한다. PReLU 연산 및 ReLU 연산은, CNN 뉴런들의 출력들에 적용되는 활성화 함수들에 대응한다. 예컨대, CNN이 콘볼루션 계층, 풀링 계층 등으로부터 출력을 생성한 후에, PReLU 연산 또는 ReLU 연산은 활성화에 대해 요소별 활성화 함수를 적용하는 것을 포함할 수 있다. 예컨대, PReLU 연산은, 출력이 PReLU 기본 파라미터보다 작을 때, 활성화와 제1 PReLU 파라미터를 곱하고/거나 다른 방식으로 제1 PReLU에 의해 활성화를 규모조정하는 것을 포함할 수 있다. 다른 예시들에서, PReLU 연산은, 활성화가 PReLU 기본 파라미터보다 클 때, 활성화와 제2 PReLU 파라미터를 곱하고/거나 다른 방식으로 제2 PReLU에 의해 활성화를 규모조정하는 것을 포함할 수 있다. ReLU 연산은 활성화에 최대 함수를 적용하는 것을 포함할 수 있으며, 여기서, ReLU 연산은 0과 활성화 사이의 최대 값을 반환한다. 그러한 예시들에서, ReLU 연산은, 임의의 음의 요소들을 영으로 설정하고, 그에 따라, 활성화에 대한 부가적인 지수, 곱셈, 또는 나눗셈 연산들을 제거하고/거나 다른 방식으로 피함으로써 CNN의 훈련을 가속시키는 것을 포함할 수 있다.
그러나, CNN의 은닉 계층들은, 폭, 높이, 및 심도를 포함하는 3차원으로 배열된 뉴런들을 가질 수 있다. CNN의 계층에서의 뉴런들 각각은 그 계층 전에 계층의 일부분(예컨대, 비교적 작은 부분(예컨대, 2 x 2 활성화 맵, 3 x 3 활성화 맵 등))에만 연결된다. 계층의 모든 뉴런들이 선행 계층의 모든 뉴런들에 연결되는 전형적인 신경망과 비교하여, CNN 계층의 뉴런들은, 계층들 사이의 실질적으로 더 적은 수의 연결들로 인해 실질적으로 더 적은 가중치들을 초래한다.
본원에 개시된 예들은 CNN 연산들의 효율을 개선한다. 본원에 개시된 예시적인 CNN 가속기는, 임의적 PReLU/ReLU/ReLU-X 및 활성화별 규모조정 및 바이어스를 이용하는, 완전-연결을 포함하는 임의의 계층에서의 임의적 비-중첩 최대 및 평균 풀링을 이용한 다중채널 CNN 행렬-행렬 콘볼루션들을 구현한다. 개별 콘볼루션 연산들을 순차적으로 수행하는 이전 구현들과 비교하여, 본원에 개시된 예시적인 CNN 가속기들은, 복수의 콘볼루션 연산들을 실질적으로 병렬로 수행한다. 부가적으로, 예시적인 CNN 가속기는 중첩 풀링(예컨대, 최대 풀링, 평균 풀링 등) 연산들을 구현할 수 있다.
도 1은, 콘볼루션을 사용하는 예시적인 입력 볼륨(102) 및 예시적인 출력 볼륨(104)의 예시적인 콘볼루션 연산(100)을 예시한다. 도 1의 예시적인 입력 볼륨(102)은, 다차원 행렬들에 저장된 픽셀 값들에 의해 표현되는 예시적인 입력 이미지(예컨대, 사진, 비디오 프레임 등)(106)에 대응한다. 예컨대, 입력 이미지(106)는, 카메라와 같은 디바이스 또는 메모리(예컨대, 비-휘발성 메모리, 휘발성 메모리 등)로부터 검색될 수 있다. 예시적인 입력 볼륨(102)은, 다차원 행렬을 나타내는 예시적인 입력 채널들(C1, CC 등)(110, 112)의 세트를 포함한다. 예시적인 입력 볼륨(102)은 X x Y x C에 의해 표현되며, 여기서, X 및 Y는 예시적인 픽셀들(108)에서의 예시적인 입력 채널들(110, 112) 각각의 치수들이고, C는 입력 볼륨(102)의 입력 채널들의 수 또는 심도를 표현한다. 예시적인 픽셀들(108) 각각은 숫자에 의해 표현된다. 예컨대, 숫자는 픽셀(108)의 색상의 강도(예컨대, 적색, 녹색, 또는 청색의 강도)에 대응할 수 있다.
도 1의 예시된 예에서, 입력 볼륨(102)은, 치수들이 X 및 Y인 제1 채널(110) 내지 치수들이 X 및 Y인 C 채널(112)을 포함하는 복수의 다차원 행렬들을 포함한다. 일부 예들에서, 입력 채널들의 양(C)은 입력 이미지의 색상 인코딩(예컨대, 적녹청(RGB) 인코딩)에 대응한다. 예컨대, 입력 볼륨(102)은 200 x 200 x 3의 크기를 갖는 입력 이미지(106)에 대응할 수 있으며, 여기서, 입력 이미지(106)는 높이가 200개의 픽셀(예컨대, Y = 200)이고 폭이 200개의 픽셀(예컨대, X = 200)이며, 3개의 인코딩된 색상(예컨대, C = 3)을 갖는다.
도 1의 예시된 예에서, 출력 볼륨(104)은 예시적인 필터들, 이를테면, 제1 예시적인 필터(필터 1)(114) 및 제2 예시적인 필터(필터 K)(116)를 사용하여 입력 볼륨(102)을 콘볼빙(convolve)함으로써 생성된다. 도 1의 예시적인 필터들(114, 116)은 이미지 피쳐들에 대응한다. 예컨대, 이미지 피쳐는, 입력 이미지(106)에 포함될 수 있는 수평선, 수직선, 대각선 등일 수 있다. 대안적으로, 예시적인 필터들(114, 116)은 피쳐 검출기들 또는 커널들로 지칭된다. 도 1의 예시된 예에서, 필터들(114, 116)은 치수들 Fw, Fh, C의 다차원 행렬들이며, 여기서, Fw는 계수들 또는 가중치들(예컨대, 제1 필터(114)와 연관된 제1 계수들(118), 제2 필터(116)와 연관된 제2 계수들(120) 등)에서의 필터들(114, 116)의 폭을 표현하고, Fh는 계수들(118, 120)에서의 필터들(114, 116)의 높이를 표현하고, C는 필터들(114, 116)의 심도를 표현한다. 도 1의 예시된 예에서, 입력 볼륨(102)의 심도는 필터들(114, 116)의 심도와 매칭한다. 예컨대, 필터 채널들의 양은 C로 표현된 입력 채널들의 양과 동일하다. 예시적인 계수들(118, 120)은, 예시적인 입력 이미지(106)에 포함된 이미지 피쳐들을 식별하도록 조정될 수 있는 학습가능한 값들을 표현한다.
도 1의 예시된 예에서, 필터들(114, 116)의 개개의 채널들(예컨대, C1, C2, CC 등)은 9개의 예시적인 계수들(118, 120)을 포함하는 3 x 3 행렬이다. 대안적으로, 예시적인 필터들(114, 116)의 채널들은, 상이한 수의 계수들을 포함하는 상이한 행렬 크기일 수 있다. 도 1의 예시된 예에서, 제1 필터(필터 1)(114)는 제1 계수들(118)을 포함하고, 제2 필터(필터 K)(116)는 제2 계수들(120)을 포함하며, 여기서, 제1 계수들(118)은 제2 계수들(120)과 상이하다. 대안적으로, 제1 예시적인 계수들(118) 중 하나 이상 및 제2 예시적인 계수들(120) 중 하나 이상은 동일할 수 있다. 도 1의 예시된 예에서, 필터들(114, 116)은 각각의 채널에 대해 상이한 계수들을 포함한다. 도 1의 예시된 예에서, 콘볼루션 연산(100)은 K개의 필터(114, 116)를 사용한다. 예컨대, 콘볼루션 연산(100)은, 50개의 필터(예컨대, K = 50), 100개의 필터(예컨대, K = 100) 등을 사용할 수 있다.
연산 시, 예시적인 출력 위치들(122)은, 예시적인 입력 채널 부분들(124)과 예시적인 필터들(114, 116)의 내적을 수행함으로써 생성된다. 전형적인 CNN에서, 예시적인 출력 위치들(122)과 같은 출력 위치들이 또한 활성화들로 지칭될 수 있다. 예컨대, 콘볼루션 연산(100)은, 제1 필터(114)의 제1 필터 채널과 제1 입력 채널(110)의 입력 채널 부분(124)의 제1 내적을 계산하는 것을 포함할 수 있다. 예시적인 콘볼루션 연산(100)은, 제1 예시적인 필터(114)의 제2 필터 채널과 제2 예시적인 입력 채널(112)의 예시적인 입력 채널 부분(124)의 제2 내적을 계산하는 것을 포함할 수 있다. 입력 채널들(124) 각각에 대해 내적이 계산될 때까지 부가적인 내적들이 계산된다.
도 1의 예시된 예에서, 각각이 C의 심도를 갖는 필터들(114, 116)에 기반하여 출력 위치들(122) 각각에 대해 C개의 내적이 계산된다. 그러한 예들에서, 예시적인 출력 채널들(128) 중 제1 예시적인 출력 채널(K1)(126)의 출력 위치(122)는, 제1 내적, 제2 내적 등의 최대 C개의 내적의 합을 결정함으로써 계산된다. 전형적인 CNN에서, 제1 예시적인 출력 채널(126)과 같은 출력 채널들이 또한 활성화 맵, 피쳐 맵, 또는 콘볼빙된 피쳐로 지칭될 수 있다.
제1 예시적인 출력 채널(126)의 예시적인 출력 위치(122)를 계산하는 것에 대한 응답으로, 제1 예시적인 입력 채널(110) 전체가 처리될 때까지, 제2 예시적인 입력 채널 부분(130), 제3 예시적인 입력 채널 부분(132) 등에 대한 내적들이 계산된다. 제1 예시적인 입력 채널(110) 전체를 처리하는 것에 대한 응답으로, 나머지 입력 채널들(예컨대, CC까지의 C2, C3 등) 각각에 대해 위에 설명된 연산을 수행하도록 예시적인 콘볼루션 연산(100)이 진행되어, 예시적인 출력 채널들(128)의 대응하는 것들이 생성된다.
도 1의 예시된 예에서, 콘볼루션 연산(100)은 입력 채널 부분들(124)에 한 번만 액세스한다. 제1 예시적인 출력 채널(122)이 고려되는 경우, 입력 데이터 및 연관된 필터링만이 판독될 필요가 있고, 모든 후속 출력 채널들(128)에 대해 반복될 수 있지만 대응하는 상이한 필터들로 이루어진다. 예시적인 콘볼루션 연산(100)을 순차적으로가 아니라 병렬로 수행함으로써, 필요한 데이터의 양이 감소된다. 입력 데이터의 다수의 채널들이 적절한 예시적인 필터들(114, 116)로 콘볼빙되어 복수의 예시적인 출력 채널들(128)에 대한 예시적인 출력 위치들(122)이 병렬로 생성되며, 이들은, 일부 예들에서, 각각이 임의적으로 풀링된다.
도 2는, "출력 위치별" 기반의 예시적인 다중채널 콘볼루션 연산(200)을 예시한다. 예컨대, 다중채널 콘볼루션 연산(200)은 활성화별 기반으로 수행될 수 있다. 도 2의 예시적인 다중채널 콘볼루션 연산(200)은, 예시적인 CNN(예컨대, CNN 가속기, CNN 하드웨어 가속기 등)의 예시적인 콘볼루션 계층을 표현한다. 예컨대, 다중채널 콘볼루션 연산(200)은 풀링 계층에 활성화들을 제공할 수 있고, 풀링 계층은 차례로, 완전-연결 계층(예컨대, 비-선형 계층) 또는 다른 콘볼루션 계층에 활성화들을 제공할 수 있다. 그러한 예들에서, 완전-연결 계층은, 다른 콘볼루션, 풀링, 및 완전-연결 계층을 포함하는 다른 계층 트리플릿에 활성화들을 제공할 수 있다.
도 2의 예시된 예에서, 열들 또는 워드들에서의 치수가 X(예컨대, 16 비트 워드)이고 라인들에서의 치수가 Y인 예시적인 입력 데이터(202)는, 치수들 Fw 및 Fh의 복수의 예시적인 필터들(204)을 사용하여 콘볼빙되며, 여기서, Fw 및 Fh 둘 모두는 3이다. 예컨대, 입력 데이터(202)는 도 1의 입력 이미지(106) 및/또는 메모리로부터 획득될 수 있다. 도 2의 예시된 예에서, 입력 데이터(202)는, 콘볼빙될 복수의 입력 채널들에 대해 로컬로 저장된 데이터의 L개의 예시적인 라인(206)을 포함한다. 도 2의 예시된 예에서, 라인들(206)의 일부분이 각각의 입력 채널에 대해 저장된다. 일부 예들에서, 라인들(206)은 입력 채널에 대한 모든 데이터를 포함하지만, 다른 예들에서, 라인들(206)은 입력 채널에 대한 데이터의 일부분을 포함한다.
도 2의 예시된 예에서, 다중채널 콘볼루션 연산(200)은, 예시적인 출력 채널들(210)의 예시적인 출력 위치들(208) 각각을 실질적으로 병렬로 생성하는 것을 포함한다. 예컨대, 데이터 라인들(206) 중 제1 데이터 라인이 필터들(204) 중 제2 필터를 사용하여 콘볼빙되어 출력 채널들(210) 중 제2 출력 채널에 포함된 출력 위치들(208) 중 제2 출력 위치를 생성하는 것과 실질적으로 병렬로, 데이터 라인들(206) 중 제1 데이터 라인이 필터들(204) 중 제1 필터를 사용하여 콘볼빙되어 출력 채널들(210) 중 제1 채널 출력에 포함된 출력 위치들(208) 중 제1 출력 위치를 생성한다.
도 2의 예시된 예에서, 출력 채널들(210) 각각은, 자신 고유의 누산기(예컨대, 하드웨어 및/또는 기계 판독가능 명령어들로 구현된 누산기)를 갖고/거나 다른 방식으로 그와 연관된다. 일부 예들에서, 최대 풀링 또는 평균 풀링은, 예시적인 풀(pool) 영역(212)에서 각각의 요소에 대해 비교 연산, 저장 연산, 및 누산 연산을 수행함으로써 출력 채널들(210) 상에서 구현되며, 결과만을 출력한다.
도 2의 예시된 예에서, 풀 영역(212)은 출력 위치들(208)의 2 x 2 영역이다. 대안적으로, 예시적인 풀 영역(212)은 임의의 다른 크기일 수 있다. 예컨대, 풀링 연산은, 풀 영역(212)에 포함된 값들의 최대 값, 평균 값 등을 취하는 것, 및 결과적인 최대 값, 평균 값 등을 출력하는 것을 포함할 수 있다. 일부 예들에서, 풀링 연산은 중첩을 포함한다. 다른 예들에서, 풀링 연산은 중첩을 포함하지 않는다. 예컨대, 풀 영역(212)은 다른 풀 영역과 중첩할 수 없는데, 그 이유는, 풀링 연산이 중첩을 포함하지 않을 때 각각의 위치가 한 번만 판독되어야 하기 때문이다.
도 3은, 예시적인 풀링 연산(300)의 개략적인 표현을 예시한다. 도 3의 예시적인 풀링 연산(300)은, 예시적인 CNN의 풀링 계층을 표현한다. 예컨대, 풀링 연산(300)은, CNN의 완전-연결 계층 또는 CNN의 다른 콘볼루션 계층에 출력들을 제공할 수 있다. 도 3의 예시된 예에서, 풀링 연산(300)은, 도 2의 다중채널 콘볼루션 연산(200)으로부터의 출력 채널들(210)을 처리하는 것을 포함한다. 도 3의 예시된 예에서, 출력 채널들(210)은, 출력 채널들(210)의 높이, 폭, 및 심도에 각각 대응하는 치수들 H, W, 및 C를 갖는다.
도 3의 예시된 예에서, 풀링 연산(300)은, 풀 영역(212)의 최대 값(예컨대, 최대 풀링) 또는 평균 값(예컨대, 평균 풀링)을 계산하고, 예시적인 풀링된 출력 채널들(304)의 개개의 예시적인 풀링된 출력 채널들의 예시적인 출력 위치들(302)의 개개의 예시적인 출력 위치들에서 최대 값 또는 평균 값을 출력함으로써, 도 2의 풀 영역(212)을 처리한다. 도 3의 예시된 예에서, 풀링된 출력 채널들(304)은, 도 2의 출력 채널들(210)과 매칭하기 위해 치수들 H, W, 및 C를 갖는다.
도 3의 예시적인 풀링 연산(300)은, 풀링 연산(300)의 스트라이드(stride)(예컨대, 스트라이드 길이)에 기반하여 복수의 풀 영역들(212)을 처리(예컨대, 반복적으로 처리)한다. 도 3의 예시된 예에서, 스트라이드 길이는, 풀 영역(212)이 하나의 색인, 열 등 만큼 인접하게 이동되는 것(예컨대, 출력 채널들(210)의 우측으로 이동되는 것)에 대응하는 것이다. 도 3의 예시된 예에서, 풀링 연산(300)은 중첩 풀링 연산이다. 예컨대, 도 3에 도시된 풀 영역(212)은 제1 위치에 있다. 출력 위치들(302) 중 제1 출력 위치들이 계산된 후에, 풀 영역(212)은 제2 위치로 이동되며, 여기서, 제2 위치는, 스트라이드 길이가 1일 때, 제1 위치의, 하나의 색인 또는 하나의 열 만큼 우측에 있다. 그러한 예들에서, 제1 위치에서의 풀 영역(212)의 제2 열은 제2 위치에서의 풀 영역(212)의 제1 열과 중첩한다. 예시적인 풀링 연산(300)은, 출력 채널들(210) 전체에 걸쳐 풀 영역(212)의 최대 값 또는 평균 값을 계산한다.
도 4는, 예시적인 완전-연결 연산(400)의 개략적인 표현을 예시한다. 도 4의 예시적인 완전-연결 연산(400)은 예시적인 CNN의 완전-연결 계층이다. 예컨대, 완전-연결 연산(400)은, 다른 콘볼루션, 풀링, 및 완전-연결 계층을 포함하는 CNN 트리플릿 계층에 출력들을 제공할 수 있다. CNN에서, 완전-연결 계층은, 이전 계층에서의 모든 활성화들에 대한 완전한 연결들을 갖는다. 완전-연결 계층은, 벡터 행렬 곱셈을 수행하기 위한 채널 콘볼루션과 유사하다.
도 4의 예시된 예에서, 데이터 입력(402)은 1 x M 어레이로서 도시되며, 계수 또는 가중치들은 V x M의 어레이(404)로서 도시된다. 대응하는 예시적인 출력 어레이(406)는 크기 1 x V를 갖는다. (크기 M의) 각각의 열이 각각의 요소와 곱해져 합이 획득되며, 이는 V회 수행된다. 일부 예들에서, CNN은, 도 1의 입력 이미지(106)에 이미지 피쳐가 포함될 가능성의 퍼센트를 결정하기 위해 출력 어레이(406)를 평가한다. 예컨대, CNN은, 수평선, 대각선 등과 같은 복수의 단순한 이미지 피쳐들이 입력 이미지(106)에 포함될 가능성의 퍼센트를 결정할 수 있다. 다른 예들에서, CNN은, 고양이, 개, 코끼리 등과 같은 복수의 복잡한 이미지 피쳐들이 입력 이미지(106)에 포함될 가능성의 퍼센트를 결정할 수 있다.
도 5는, 예시적인 CNN 가속기(500)의 블록도를 예시한다. 도 5의 예시된 예에서, CNN 가속기(500)는, 이미지 및 비디오 인식, 추천자 시스템들, 및 자연어 처리에서 이미지 분류 알고리즘들 및/또는 다른 유형들의 프로세스들을 가속시키는 데 사용되는 플랫폼(예컨대, 하드웨어 플랫폼) 또는 하드웨어 가속기이다. 부가적으로 또는 대안적으로, CNN 가속기(500)는, 하드웨어 프로세서 상에서 실행되는 소프트웨어에 의해 구현될 수 있다. 예시적인 CNN 가속기(500)는, 도 1의 예시적인 콘볼루션 연산(100), 도 2의 예시적인 다중채널 콘볼루션 연산(200), 도 3의 예시적인 풀링 연산(300), 또는 도 4의 완전-연결 연산(400) 중 적어도 하나를 구현한다. 도 5의 예시된 예에서, CNN 가속기(500)는, 예시적인 제어기(502), 예시적인 직접 메모리 액세스(DMA) 제어기(504), 예시적인 데이터 저장소(506), 예시적인 계수 저장소(508), 예시적인 연결 다중화기(CONXTN MUX)(510), 예시적인 데이터 경로 요소(DPE) 어레이(512), 및 예시적인 출력 버퍼(514)를 포함한다.
도 5의 예시된 예에서, CNN 가속기(500)는, CNN 가속기(500)의 연산 모드 및 연산 시퀀스를 결정하기 위해 제어기(502)를 포함한다. 예컨대, 제어기(502)는, (임의적 풀링의) 콘볼루션 모드, 풀링 모드(예컨대, 중첩 풀링 모드), 또는 완전-연결 모드(예컨대, 비-선형 모드)에서 연산할 것을 CNN 가속기(500)에 지시할 수 있다. 일부 예들에서, 제어기(502)는, 하나 이상의 모드에 의해 생성된 출력에 대해 사후-프로세스 연산(예컨대, PReLU 연산, ReLU 연산 등)을 수행할지 여부를 결정한다. 예시적인 제어기(502)는, 콘볼빙되고/거나 다른 방식으로 처리될 입력 채널들과 연관된 계수 데이터 및 이미지 데이터를 검색할 것을 예시적인 DMA 제어기(504)에 지시한다. 예컨대, 제어기(502)는, 예시적인 메인 메모리(516)로부터 도 2의 입력 데이터(202), 및 필터들(204)과 연관된 계수 데이터를 검색할 것을 DMA 제어기(504)에 지시할 수 있다.
일부 예들에서, 제어기(502)는, 모드에 기반하여 CNN 가속기(500)의 하나 이상의 구성요소를 구성한다. 예컨대, 제어기(502)는, 데이터 저장소(506) 및/또는 계수 저장소(508)를 하나 이상의 랜덤 액세스 메모리(RAM)(예컨대, 정적 RAM(SRAM), 동적 RAM(DRAM) 등) 블록들로 구성함으로써 데이터 저장소(506) 및/또는 계수 저장소(508)를 구성할 수 있다. 다른 예들에서, 제어기(502)는, 특정 구성, 순서, 및/또는 방식으로 데이터 저장소(506)로부터 데이터를 수신(예컨대, 1 x 256, 2 x 128, 4 x 64 등의 데이터 행렬을 데이터 저장소(506)로부터 수신)하도록 연결 다중화기(510)의 행렬들을 구성한다. 다른 예들에서, 제어기(502)는, 콘볼루션 모드, 풀링 모드, 또는 완전-연결 모드에서 연산하도록 DPE 어레이(512)를 구성한다.
일부 예들에서, 제어기(502)는, 콘볼루션 모드의 콘볼루션 배열을 결정한다. 예컨대, 제어기(502)는, 콘볼루션 모드의 1 x 256, 2 x 128, 4 x 64, 8 x 32 등의 콘볼루션 배열을 결정할 수 있다. 예컨대, 2 x 128 콘볼루션 배열에서, 입력 채널들의 2개의 스트림은 128개의 출력 채널에 대한 단일 위치에 대해 순차적으로 합산되며, 여기서, 최종 결과는 2개의 스트림의 합이다. 일부 예들에서, 제어기(502)는, 콘볼루션 연산 동안 미사용된 채 남아 있는 DPE들(520)의 양을 결정하는 것에 기반하여 콘볼루션 배열을 결정한다.
콘볼루션 연산이 64개의 입력 채널 및 192개의 출력 채널을 요구하는 예에서, 제어기(502)는, 1 * 256 콘볼루션 배열과 비교하여 4 * 64 콘볼루션 배열을 사용하기로 결정할 수 있다. 예컨대, 4 * 64 콘볼루션 배열을 사용하기로 결정함으로써, CNN 가속기(500)는 256개의 DPE(520) 전부를 활용할 수 있다. 그러한 예들에서, 192개의 출력 채널이 64개의 출력 채널의 3개의 배치(batch)로 처리될 수 있으며, 여기서, 64개의 출력 채널의 각각의 출력 채널은 완전한 DPE 활용률을 달성하기 위해 4개의 DPE(520)(예컨대, 256개 DPE = 4개 DPE * 64개 출력 채널)에 의해 처리된다. 1 * 256 콘볼루션 배열을 사용하기로 결정함으로써, 예시적인 CNN 가속기(500)는 64개의 미사용 DPE(520)를 가질 것인데, 그 이유는, 192개의 출력 채널이 병렬로 처리될 것이기 때문이며, 여기서, 192개의 출력 채널의 각각의 출력 채널은 1개의 DPE(520)에 의해 처리되며, 따라서, 75 %의 DPE 활용률만이 초래된다. 예시적인 제어기(502)는, 4 * 64 콘볼루션 배열이 다른 콘볼루션 배열들보다 더 큰 DPE 활용률을 초래한다고 결정함으로써, 4 * 64 콘볼루션 배열을 사용하기로 결정할 수 있다.
일부 예들에서, 제어기(502)는, CNN 가속기(500)의 연산들의 순서를 결정하고/거나 다른 방식으로 제어한다. 예컨대, 제어기(502)는, 처리할 데이터 저장소(506)의 하나 이상의 데이터 라인, 처리할 계수 저장소(508)의 하나 이상의 계수 블록 등을 선택할 수 있다. 예컨대, 제어기(502)는, 어드레스 명령들을 생성함으로써, 그리고/또는 다른 방식으로, 데이터 저장소(506), 계수 저장소(508), 및/또는 출력 버퍼(514)의 어드레스들을 선택하여, 처리될 데이터를 선택함으로써 CNN 가속기(500)의 연산들의 순서를 제어할 수 있다.
도 5의 예시된 예에서, CNN 가속기(500)는, 컴퓨팅 시스템의 메인 메모리(516)로부터 데이터를 검색하기 위해 DMA 제어기(504)를 포함한다. 도 5의 예시된 예에서, 메인 메모리(516)는 DRAM이다. 대안적으로, 예시적인 메인 메모리(516)는 SRAM 또는 임의의 다른 유형의 비-휘발성 또는 휘발성 메모리일 수 있다. 도 5의 예시된 예에서, DMA 제어기(504)는 메모리 인터페이스이다. 예컨대, DMA 제어기(504)는, 메인 메모리(516)로부터의 데이터(예컨대, 이미지 데이터, 계수 데이터 등)를 질의하고, 수신하고/거나 다른 방식으로 검색하고, 검색된 데이터를, 예시적인 데이터 입력 인터페이스(518)를 통해 데이터 저장소(506), 계수 저장소(508) 등에 전송한다.
도 5의 예시된 예에서, CNN 가속기(500)는, 데이터 행렬을 저장하고 처리를 위해 데이터 행렬의 부분들을 연결 다중화기(510)에 제공하기 위한 데이터 저장소(506)를 포함한다. 도 5의 예시된 예에서, 데이터 저장소(506)는 DRAM이다. 대안적으로, 예시적인 데이터 저장소(506)는 SRAM 또는 임의의 다른 유형의 비-휘발성 또는 휘발성 메모리일 수 있다. 예시적인 데이터 저장소(506)는 16개의 저장 인스턴스를 포함하며, 각각의 인스턴스는 크기가 8 kB여서 128 kB의 총 저장소를 산출한다. 예시적인 데이터 저장소(506)는, 데이터 라인당 128 비트의 512개의 데이터 라인으로서 구성된다. 대안적으로, 예시적인 데이터 저장소(506)는, 상이한 양의 저장 인스턴스들, 상이한 저장 인스턴스 크기들, 상이한 양의 데이터 라인들, 및/또는 상이한 양의 데이터 라인당 비트로 구성될 수 있다. 예시적인 데이터 저장소(506)에 대응하는 부가적인 세부사항은 도 11 및/또는 도 12와 관련하여 아래에서 설명된다.
도 5의 예시된 예에서, CNN 가속기(500)는, 계수들(예컨대, 필터 계수들, 커널 계수들 등)의 데이터 행렬을 저장하고 처리를 위해 데이터 행렬의 부분들을 DPE 어레이(512)에 제공하기 위한 계수 저장소(508)를 포함한다. 일부 예들에서, 계수 저장소(508)는, 하나 이상의 바이어스 값 및/또는 하나 이상의 규모조정 값을 저장한다. 도 5의 예시된 예에서, 계수 저장소(508)는 DRAM이다. 대안적으로, 예시적인 계수 저장소(508)는 SRAM 또는 임의의 다른 유형의 비-휘발성 또는 휘발성 메모리일 수 있다. 예시적인 계수 저장소(508)에 대응하는 부가적인 세부사항은 도 7, 도 8, 및/또는 도 9와 관련하여 아래에서 설명된다.
도 5의 예시된 예에서, CNN 가속기(500)는, 데이터 저장소(506)에 저장된 데이터의 부분(들)을 선택하기 위한 연결 다중화기(510)를 포함한다. 일부 예들에서, 연결 다중화기(510)는, CNN 가속기(500)의 콘볼루션 배열에 기반하여 데이터 저장소(506)로부터 데이터를 선택한다. 예컨대, 2 x 128 콘볼루션 배열에 기반하여 연산하도록 제어기(502)가 CNN 가속기(500)를 구성하는 것에 대한 응답으로, 연결 다중화기(510)는, 데이터 저장소(506)로부터 128개의 부동 소수점(FP) 16 비트(FP16) 워드의 2개 세트(예컨대, 2 x 128 FP16 워드)를 선택하고, 처리를 위해 256개의 FP16 워드를 DPE 어레이(512)에 송신한다.
도 5의 예시된 예에서, CNN 가속기(500)는, 하나 이상의 콘볼루션 연산, 하나 이상의 풀링 연산, 또는 하나 이상의 완전-연결 연산을 수행하기 위한 DPE 어레이(512)를 포함한다. 일부 예들에서, DPE 어레이(512)는, 사후-프로세스 연산들, 이를테면, 이에 제한되진 않지만, 바이어스 연산들, 파라미터 정류된 선형 유닛(PReLU) 연산들, 정류된 선형 유닛(ReLU) 연산들(예컨대, ReLU-X 연산들), 또는 규모조정 연산들을 수행한다. 그러한 예들에서, DPE 어레이(512)는, 제어기(502)로부터 수신되는 명령, 명령어 등에 기반하여, 연산들(예컨대, 콘볼루션 연산 등) 중 하나 또는 사후-프로세스 연산들 중 하나를 수행한다. 도 5의 예시된 예에서, DPE 어레이(512)는 256개의 예시적인 DPE(520)를 포함하며, 256개의 DPE(520)의 각각의 DPE는, DPE 어레이(512)의 다른 DPE들(520)과 실질적으로 병렬로 연산(예컨대, 콘볼루션 연산, 풀링 연산 등), 사후-프로세스 연산(예컨대, PReLU 연산, ReLU 연산 등)을 수행할 수 있다. 대안적으로, 도 5에 도시된 256개의 DPE(520)보다 더 적거나 더 많은 DPE가 사용될 수 있다. DPE들(520)에 대응하는 부가적인 세부사항은 도 6과 관련하여 아래에서 설명된다.
도 5의 예시된 예에서, CNN 가속기(500)는, DPE 어레이(512)로부터의 출력들을 저장하고, 추가적인 처리를 위해 출력들을 외부 컴퓨팅 디바이스, 하드웨어, 시스템 등에 송신하기 위한 예시적인 출력 버퍼(514)를 포함한다. 도 5의 예시적인 출력 버퍼(514)는 별개의 판독 및 기입 포트들을 포함한다. 예시적인 출력 버퍼(514)는 256개의 채널을 가지며, 채널들의 각각의 채널은 16 비트 입력/출력(I/O) 채널이다. 예시적인 출력 버퍼(514)는, 2 x 8 * 4096 비트 데이터 행렬들로서 구성되는 8 킬로바이트(kB) 메모리 저장소의 하나의 인스턴스이다. 예컨대, 출력 버퍼(514)는 핑퐁 버퍼로서 동작한다. 대안적으로, 예시적인 출력 버퍼(514)는, 하나 초과의 인스턴스 및/또는 8 kB보다 더 적거나 더 많은 메모리 저장소를 포함할 수 있다. 대안적으로, 예시적인 출력 버퍼(514)는 임의의 다른 구성(예컨대, 4 x 4 * 4096 비트 데이터 행렬들, 8 x 2 * 4096 비트 데이터 행렬들 등)으로 구성될 수 있다.
CNN 가속기(500)를 구현하는 예시적인 방식이 도 5에 예시되지만, 도 5에 예시된 요소들, 프로세스들, 및/또는 디바이스들 중 하나 이상이 조합되고, 분할되고, 재배열되고, 생략되고, 제거되고/거나 임의의 다른 방식으로 구현될 수 있다. 추가로, 도 5의 예시적인 제어기(502), 예시적인 DMA 제어기(504), 예시적인 데이터 저장소(506), 예시적인 계수 저장소(508), 예시적인 연결 다중화기(510), 예시적인 DPE 어레이(512), 예시적인 출력 버퍼(514), 예시적인 DPE들(520), 및/또는 더 일반적으로는 예시적인 CNN 가속기(500)는, 하드웨어, 소프트웨어, 펌웨어, 및/또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예컨대, 예시적인 제어기(502), 예시적인 DMA 제어기(504), 예시적인 데이터 저장소(506), 예시적인 계수 저장소(508), 예시적인 연결 다중화기(510), 예시적인 DPE 어레이(512), 예시적인 출력 버퍼(514), 예시적인 DPE들(520), 및/또는 더 일반적으로는 예시적인 CNN 가속기(500) 중 임의의 것은, 하나 이상의 아날로그 또는 디지털 회로(들), 논리 회로, 프로그래밍가능 프로세서(들), 프로그래밍가능 제어기(들), 그래픽 처리 유닛(들)(GPU(들)), 디지털 신호 프로세서(들)(DSP(들)), 주문형 집적 회로(들)(ASIC(들)), 프로그래밍가능 논리 디바이스(들)(PLD(들)), 및/또는 필드 프로그래밍가능 논리 디바이스(들)(FPLD(들))에 의해 구현될 수 있다. 순전히 소프트웨어 및/또는 펌웨어 구현을 포괄하도록 본 특허의 장치 또는 시스템 청구항들 중 임의의 청구항을 읽을 때, 예시적인 제어기(502), 예시적인 DMA 제어기(504), 예시적인 데이터 저장소(506), 예시적인 계수 저장소(508), 예시적인 연결 다중화기(510), 예시적인 DPE 어레이(512), 예시적인 출력 버퍼(514), 및/또는 예시적인 DPE들(520) 중 적어도 하나는, 이로써, 소프트웨어 및/또는 펌웨어를 포함하는, 비-일시적인 컴퓨터 판독가능 저장 디바이스 또는 저장 디스크, 이를테면, 메모리, 디지털 다기능 디스크(DVD), 콤팩트 디스크(CD), 블루-레이 디스크 등을 포함하도록 명백히 정의된다. 더 추가로, 도 5의 예시적인 CNN 가속기(500)는, 도 5에 예시된 것들에 더하여 또는 그 대신에, 하나 이상의 요소, 프로세스, 및/또는 디바이스를 포함할 수 있고/거나 예시된 요소들, 프로세스들, 및 디바이스들 중 임의의 것 또는 그 전부 중 하나 초과를 포함할 수 있다. 본원에서 사용되는 바와 같이, "통신한다"와 그 변형들을 포함하는 문구는, 직접적인 통신 및/또는 하나 이상의 중간 구성요소를 통한 간접적인 통신을 포괄하며, 직접적인 물리(예컨대, 유선) 통신 및/또는 일정한 통신을 요구하지 않으며, 오히려, 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들 및/또는 일회성 이벤트들로의 선택적 통신을 부가적으로 포함한다.
도 6은 예시적인 DPE(600)를 예시한다. 예컨대, 도 6의 DPE(600)는 도 5의 DPE들(520) 중 하나 이상에 대응할 수 있다. 도 6의 예시적인 DPE(600)는, 콘볼루션 연산, 풀링 연산, 또는 완전-연결 연산을 수행한다. 일부 예들에서, 도 6의 DPE(600)는, 도 5의 예시적인 CNN 가속기(500)의 모드(예컨대, 연산 모드)에 기반하여, 사후-프로세스 연산, 이를테면 바이어스 연산, PReLU 연산, ReLU 연산(예컨대, ReLU-X 연산), 규모조정 연산 등을 수행한다. 도 6의 예시된 예에서, DPE(600)는, 예시적인 곱셈기(MULT)(602), 예시적인 누산기(ACCUM)(604), 예시적인 레지스터(REG)(606), 및 예시적인 비교기(COMP)(608)를 포함한다.
도 6의 예시된 예에서, DPE(600)는, 2개의 값의 곱셈 연산을 수행하기 위한 곱셈기(602)를 포함한다. 일부 예들에서, 곱셈기(602)는, 제1 예시적인 인터페이스(DATA IN)(610)로부터 획득된 제1 값과 제2 예시적인 인터페이스(COEFF/BIAS/SCALE)(612)로부터 획득된 제2 값을 곱한다. 도 6의 예시된 예에서, 제1 인터페이스(610)는 데이터 저장 인터페이스이다. 예컨대, 제1 인터페이스(610)로부터 수신된 데이터는, 도 5의 연결 다중화기(510)를 통한 데이터 저장소(506)로부터의 데이터에 대응할 수 있다. 도 6의 예시된 예에서, 제2 인터페이스(612)는 계수 저장 인터페이스이다. 예컨대, 제2 인터페이스(612)로부터 수신된 데이터는, 도 5의 계수 저장소(508)로부터의 바이어스 값, 계수 값, 규모조정 값 등일 수 있다.
도 6의 예시된 예에서, 곱셈기(602)는 이진 곱셈기(예컨대, 하나 이상의 이진 또는 논리 덧셈기들)이다. 예시적인 곱셈기(602)는, 예시적인 인에이블 인터페이스(ENABLE)(614)로부터 수신된 신호에 기반하여 인에이블링된다. 예컨대, 인에이블 인터페이스(614)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값(예컨대, 0과 연관된 로우 신호 또는 1과 연관된 하이 신호)에 대응할 수 있다. 예시적인 곱셈기(602)는, 예시적인 우회 선택기 인터페이스(BYPASS_SEL)(616)로부터의 신호에 기반하여 우회된다. 예컨대, 우회 선택기 인터페이스(616)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 제1 인터페이스(610) 및/또는 제2 인터페이스(612)로부터의 하나 이상의 값은, 우회 선택기 인터페이스(616)로부터의 신호가 하이 신호일 때(예컨대, 제1 우회 인터페이스(618)(BYPASS)가 인에이블링될 때) 제1 예시적인 우회 인터페이스(618)를 통해 통과될 수 있다. 예컨대, 제어기(502)는, DPE(600)의 하나 이상의 연산을 수행할 때, 속도 증가 및/또는 전력 감소를 위해 우회 선택기 인터페이스(616)에 신호를 송신할 수 있다.
도 6의 예시된 예에서, DPE(600)는, 덧셈 또는 누산 연산들을 수행하기 위한 누산기(604)를 포함한다. 도 6의 예시적인 누산기(604)는, 부호있는 고정 소수점 값을 보유하는 24 비트 누산기이다. 일부 예들에서, FP 포맷에서의 정수 비트 및 분수 비트의 양은, 범위 대 정밀도의 적합한 균형이 달성되는 것을 보장하기 위해 누산 동안 동적으로 조정된다. 예컨대, 누산기(604)는, 누산기(604)의 범위(예컨대, 누산기(604)에 누산되고/거나 다른 방식으로 그에 저장될 수 있는 데이터의 크기) 또는 정밀도 중 적어도 하나를 수정하도록 조정될 수 있다. 예컨대, 누산기(604)는 처음에 12개의 정수 비트를 획득, 처리, 및/또는 다른 방식으로 취급하도록 구성될 수 있다. 예시적인 누산기(604)는, 누산기(604)에 대한 입력이, 이용가능한 정수 비트 수보다 많은 수의 비트를 요구할 때, 12개의 정수 비트를 조정할 수 있다. 그러한 예들에서, 누산기(604)는, 12개의 정수 비트를, 분수 비트들의 비용으로, 입력과 매칭할 정수 비트들의 양으로 증가시킨다(예컨대, 범위가 증가되지만 정밀도가 감소됨).
일부 예들에서, 누산기(604)는, 누산기 덧셈의 결과가 오버플로우될 때, 누산기(604)가 처리할 수 있는 정수 비트들의 양을 조정하고/거나 다른 방식으로 수정한다. 예컨대, 누산기(604)는, 정수 비트 수를 하나만큼 증가시킬 수 있고, 따라서, 분수 비트 수가 하나만큼 감소된다(예컨대, 범위가 증가되지만 정밀도가 감소됨). 일부 예들에서, 누산기(604)는, 누산기 덧셈의 결과가 정수 비트들의 전체 범위를 사용하지 않을 때, 누산기(604)가 처리할 수 있는 정수 비트들의 양을 조정하고/거나 다른 방식으로 수정한다. 예컨대, 누산기(604)는, 최소 12 비트를 조건으로 정수 비트 수를 하나만큼 감소시킬 수 있고, 따라서, 분수 비트 수가 하나만큼 증가된다(예컨대, 범위가 감소되지만 정밀도가 증가됨). 대안적으로, 예시적인 누산기(604)는 하나 초과만큼 정수 비트 수를 증가(예컨대, 반복적으로 증가) 또는 감소(예컨대, 반복적으로 감소)시킬 수 있다.
예시적인 누산기(604)의 범위 및/또는 정밀도가 조정되는 예들에서, 누산기(604)는 근사 값, 추정 값 등을 생성할 수 있다. 예컨대, 누산기(604)가 누산기(604)의 범위를 조정 또는 수정하기 위해 누산기(604)의 정밀도를 증가 또는 감소시키는(예컨대, 비트들(예컨대, 분수 비트들)의 수를 증가시키는 것, 비트 수를 감소시키는 것 등의) 정밀도 균형 연산을 누산기(604)가 수행하는 것에 대한 응답으로, 누산기(604)의 출력은, 누산기(604)가 수정되지 않은 경우의 출력과 비교하여 근사 값 또는 추정 값을 초래할 수 있다. 그러나, 누산기(604)에 의해 생성되는 근사 값, 추정 값 등은, 누산기(604)가 수정되지 않았을 경우의 출력과 실질적으로 등가이고/거나 다른 방식으로 그에 상응한다. 예컨대, 도 6의 DPE(600)의 하나 이상의 연산, 프로세스, 출력 등의 성능 및/또는 생성은, 조정되는 누산기(604)의 정밀도, 범위 등에 기반하여 영향을 받지 않는다. 그러한 예들에서, 연산 또는 출력들에서의 임의의 변화는 실질적으로 무시가능하다.
도 6의 예시된 예에서, 곱셈기(602)는, 2개의 값의 곱셈에 기반하여 누산기(604)의 출력을 생성한다. 예시적인 누산기(604)는, 곱셈기(602)로부터 출력을 획득하고, 제2 예시적인 인에이블 인터페이스(ENABLE)(620)로부터의 신호가 누산기(604)가 인에이블링됨을 표시할 때, 이전에 계산된 합과 그 출력의 합을 계산한다. 예컨대, 제2 인에이블 인터페이스(620)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 누산기(604)는, 제2 인에이블 인터페이스(620)로부터 하이 신호가 수신될 때 인에이블링된다.
일부 예들에서, 누산기(604)는 우회 선택기 인터페이스(616)로부터의 신호에 기반하여 우회된다. 예컨대, 곱셈기(602)로부터의 값은, 우회 선택기 인터페이스(616)로부터 하이 신호가 수신될 때(예컨대, 제2 우회 인터페이스(BYPASS)(622)가 인에이블링될 때) 제2 예시적인 우회 인터페이스(622)를 통해 누산기(604)를 우회할 수 있다. 일부 예들에서, 누산기(604)는 예시적인 누산기 소거 인터페이스(CLR)(624)로부터의 신호에 기반하여 소거되고/거나 다른 방식으로 비워진다. 예컨대, 누산기 소거 인터페이스(624)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다.
도 6의 예시된 예에서, 누산기(604)의 출력은, 레지스터(606) 또는 예시적인 데이터 출력 인터페이스(626) 중 적어도 하나에 송신된다. 도 6의 예시적인 데이터 출력 인터페이스(626)는 출력 버퍼 인터페이스이다. 예컨대, 데이터 출력 인터페이스(626)는, 도 5의 출력 버퍼(514)에 데이터를 송신할 수 있다. 도 6의 예시적인 레지스터(606)는, 예시적인 데이터 출력 인터페이스(626)에 기입되기 전에 결과들(예컨대, 개별 결과들)을 보유하는 데 사용되는 중간 저장 요소이다. 예컨대, DPE(600)는, 평균 풀링 연산에 대한 값들을 저장하기 위해 레지스터(606)를 사용할 수 있다. 예시적인 레지스터(606)는 예시적인 레지스터 소거 인터페이스(STORE_CLR)(628)로부터의 신호에 기반하여 소거되고/거나 다른 방식으로 비워진다. 예컨대, 레지스터 소거 인터페이스(628)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 레지스터(606)에 저장된 값은, 레지스터 소거 인터페이스(628)로부터 하이 신호가 수신될 때 삭제될 수 있다.
도 6의 예시된 예에서, DPE(600)는 콘볼루션 모드를 위해 구성된다. 연산 시, 예시적인 곱셈기(602)는, 콘볼루션 출력 값(예컨대, 활성화, 활성화 값, 활성화 출력 등)을 생성하기 위해, 제1 인터페이스(610)로부터의 데이터 입력 값(예컨대, FP16으로 표현되는 활성화 값, 픽셀 값 등)과 제2 인터페이스(612)로부터의 계수 값을 곱한다. 예시적인 곱셈기(602)는, 콘볼루션 출력 값을 예시적인 누산기(604)에 송신한다. 콘볼루션 출력 값을 수신하는 것에 대한 응답으로, 예시적인 누산기(604)는 콘볼루션 출력 값을 데이터 출력 인터페이스(626)에 송신하며, 데이터 출력 인터페이스(626)는 차례로 도 5의 출력 버퍼(514)에 송신한다.
일부 예들에서, 콘볼루션 모드에서의 DPE(600)는 임의적 풀링을 위해 구성된다. 예컨대, DPE(600)는, 최대 풀링 인터페이스(MP_POOL)(627)로부터 하이 신호를 수신하는 것에 기반하여, 콘볼루션 모드에서 최대 풀링 연산을 위해 구성될 수 있다. 하이 신호를 수신하는 것에 대한 응답으로, DPE(600)는, 예시적인 레지스터(606)에 저장된 풀 출력 값(예컨대, 도 2의 풀 영역(212)의 최대 값)을 데이터 출력 인터페이스(626)에 송신하기 전에 전체 풀 영역이 처리될 때까지 대기한다.
예시적인 최대 풀링 연산에서, 예시적인 곱셈기(602)는, 제1 콘볼루션 출력 값을 생성하기 위해, 제1 인터페이스(610)로부터의 제1 데이터 입력 값과 제2 인터페이스(612)로부터의 제1 계수 값을 곱한다. 예컨대, 제1 데이터 입력 값은 도 2의 입력 데이터(202)로부터의 FP16의 제1 픽셀 값, 제1 활성화 값 등일 수 있고, 제1 계수 값은 도 2의 필터들(204) 중 제1 필터의 FP16의 제1 계수 값일 수 있다. 예컨대, 제1 콘볼루션 출력 값은, 도 2의 풀 영역(212)의 출력 위치들(208) 중 제1 위치일 수 있다. 예시적인 곱셈기(602)는 제1 콘볼루션 출력 값을 예시적인 누산기(604)에 송신하며, 예시적인 누산기(604)는 제1 콘볼루션 출력 값을 예시적인 레지스터(606)에 송신한다. 예시적인 레지스터(606)는 제1 콘볼루션 값을 예시적인 비교기(608)의 제1 예시적인 입력(629)에 송신한다.
저장에 대한 응답으로, 예시적인 곱셈기(602)는, 제2 콘볼루션 출력 값을 생성하기 위해, 제1 인터페이스(610)로부터의 제2 데이터 입력 값과 제2 인터페이스(612)로부터의 제2 계수 값을 곱한다. 예컨대, 제2 데이터 입력 값은 도 2의 입력 데이터(202)로부터의 제2 픽셀 값, 제2 활성화 값 등일 수 있고, 제2 계수 값은 도 2의 필터들(204) 중 제1 필터의 제2 계수일 수 있다. 예시적인 곱셈기(602)는, 제2 콘볼루션 출력 값을 예시적인 누산기(604)에 송신한다. 예시적인 누산기(604)는, 예시적인 풀 인터페이스(POOL)(630)로부터 하이 신호를 수신할 때, 제2 콘볼루션 출력 값을 비교기(608)의 제2 예시적인 입력(631)에 송신한다. 예컨대, 풀 인터페이스(630)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예시적인 풀 인터페이스(630)는, 풀링이 인에이블링될 때(예컨대, 평균 풀링 또는 최대 풀링이 인에이블링될 때) 하이 신호를 생성하고, 풀링이 인에이블링되지 않을 때 로우 신호를 생성한다. 예컨대, 누산기(604)는, 풀 인터페이스(630)로부터 하이 신호가 수신될 때, 제2 콘볼루션 출력 값을 비교기(608)의 제2 입력(631)에 송신한다. 예컨대, 제2 콘볼루션 출력 값은, 도 2의 풀 영역(212)의 출력 위치들(208) 중 제2 위치일 수 있다.
도 6의 예시된 예에서, 비교기(608)는, DPE(600)가 최대 풀링 연산을 수행하고 있을 때 제1 콘볼루션 출력 값 및 제2 콘볼루션 출력 값의 최대 값을 결정한다. 제1 콘볼루션 출력 값(예컨대, 레지스터(606)에 저장된 값)이 제2 콘볼루션 출력 값보다 작다고 결정하는 것에 대한 응답으로, 예시적인 비교기(608)는, 예시적인 비교기 출력(632)에 대해 하이 신호(예컨대, 1의 이진 값에 대응하는 신호)를 생성한다. 예시적인 비교기 출력(632)에 대한 하이 신호는, 예시적인 플립-플롭(634)이 1(예컨대, 하이 신호에 대응하는 이진 값)의 예시적인 논리 출력(Y_FF)(636)을 생성할 수 있게 한다. 예컨대, 논리 출력(636)은 이진 값(예컨대, 0 또는 1의 값)에 대응한다. 예컨대, 논리 출력(636)이 1일 때, 용어는 Y_FF로서 도시되며, 논리 출력(636)이 0이고/거나 다른 방식으로 로우 신호에 대응할 때 ~Y_FF로서 도시된다.
예시적인 논리 출력(636)이 1이고/거나 다른 방식으로 인에이블링되는 것에 대한 응답으로, 예시적인 제어기(502)는 제2 콘볼루션 출력 값을 풀 출력 값으로서 레지스터(606)에 저장한다. 예컨대, 제어기(502)는, 예시적인 저장 인터페이스(
Figure pct00001
)(644)에 대한 신호를 생성한다. 예시적인 저장 인터페이스(644)로부터의 신호는 이진 값에 대응한다. 예시적인 저장 인터페이스(644)로부터 로우 신호를 수신하는 것에 대한 응답으로, 예시적인 제어기(502)는, 값을 저장할 것을 예시적인 레지스터(606)에 지시하지 않는다. 예시적인 저장 인터페이스(644)로부터 하이 신호를 수신하는 것에 대한 응답으로, 예시적인 제어기(502)는, 값을 저장할 것을 레지스터(606)에 지시한다. 예컨대, 저장 인터페이스(644)로부터의 신호는, 논리 출력(636)이 하이 신호이고, 풀 인터페이스(630)가 하이 신호이고, 예시적인 PReLU 인터페이스(PRELU)(638)가 로우 신호(예컨대, DPE(600)가 PReLU 연산을 수행하지 않음)일 때, 하이 신호이다. 다른 예들에서, 저장 인터페이스(644)는, 논리 출력(636)이 로우 신호이거나, 풀 인터페이스(630)가 로우 신호이거나, PReLU 인터페이스(638)가 하이 신호인 것 중 적어도 하나일 때, 로우 신호를 출력한다.
제1 콘볼루션 출력 값(예컨대, 예시적인 레지스터(606)에 저장된 값)이 제2 콘볼루션 출력 값보다 크다고 결정하는 것에 대한 응답으로, 비교기(608)는, 예시적인 비교기 출력(632)에 대해 로우 신호를 생성하며, 이는, 예시적인 논리 출력(636)에 대응하는 로우 신호를 생성할 것을 예시적인 플립-플롭(634)에 지시한다. 예시적인 논리 출력(636)이 로우 신호에 대응하고/거나 다른 방식으로 디스에이블링되는 것에 대한 응답으로, 예시적인 제어기(502)는 제2 콘볼루션 출력 값을 레지스터(606)에 저장하지 않는다.
예시적인 DPE(600)는, 전체 풀 영역(예컨대, 도 2의 풀 영역(212))이 처리될 때까지 데이터 입력 값들을 처리(예컨대, 반복적으로 처리)한다. 전체 풀 영역이 처리될 때, 예시적인 레지스터(606)는, 예시적인 최대 풀링 인터페이스(627)가 인에이블링된 때에는 풀 출력 값(예컨대, 도 2의 풀 영역(212)의 최대 값)을 예시적인 데이터 출력 인터페이스(626)에 출력한다.
다른 예들에서, DPE(600)는, 콘볼루션 모드에서 연산할 때 평균 풀링 연산을 위해 구성될 수 있다. 예컨대, 곱셈기(602)는, 도 2의 풀 영역(212)의 출력 위치들(208)에 대응하는, 제1 출력 값, 제2 출력 값, 제3 출력 값, 및 제4 출력 값을 계산할 수 있다. 예시적인 누산기(604)는, 제1 내지 제4 출력 값들의 합을 계산할 수 있다. 예컨대, 곱셈기(602)는 제1 출력 값을 계산할 수 있으며, 이는, 누산기(604)가 제1 출력 값에 기반하여 제1 합을 생성하기 위해 영 값에 더한다. 그러한 예들에서, 곱셈기(602)는 제2 출력 값을 계산할 수 있으며, 이는, 누산기(604)가 제1 및 제2 출력 값들 등과 동일한 제2 합을 생성하기 위해, 총계가 계산되고 총계가 제1 내지 제4 출력 값들의 합과 동일할 때까지 제1 합에 더한다.
총계를 계산하는 것에 대한 응답으로, 예시적인 누산기(604)는 예시적인 레지스터(606)에 총계를 저장하며, 예시적인 레지스터(606)는 차례로, 제3 예시적인 인터페이스(
Figure pct00002
)(637)로부터의 신호에 기반하여 예시적인 곱셈기(602)에 총계를 송신한다. 예컨대, 제3 인터페이스(637)로부터의 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 제3 인터페이스(637)의 신호는, DPE(600)가 PReLU 연산을 수행하고 있지 않거나(예컨대,
Figure pct00003
), DPE(600)가 바이어스 연산 또는 규모조정 연산을 수행하고 있거나(예컨대,
Figure pct00004
), 또는 DPE(600)가 평균 풀링 연산을 수행(예컨대,
Figure pct00005
)하고 있을 때, 하이 신호이다. 예컨대, 제3 인터페이스(637)는, DPE(600)가 평균 풀링 연산을 수행하고 있을 때 표현
Figure pct00006
에 대해 하이 신호를 출력한다.
예시적인 레지스터(606)로부터 총계를 수신하는 것에 대한 응답으로, 예시적인 곱셈기(602)는, 총계와 예시적인 풀 크기 값(1/Av; X)(640)을 곱함으로써 평균 풀 값을 계산하고, 평균 풀 값을 예시적인 누산기(604)에 출력하며, 예시적인 누산기(604)는 차례로, 평균 풀 값을 예시적인 데이터 출력 인터페이스(626)에 출력한다. 예시적인 풀 크기 값(640)은 풀 영역의 크기에 대응한다. 예컨대, 풀 크기 값(640)은 1/(풀 폭 x 풀 높이)의 몫일 수 있다. 예컨대, 도 2의 풀 영역(212)과 연관된 풀 크기 값(640)은 1/4(예컨대, 1/4 = 1/(2 x 2))이다. 도 6의 예시된 예에서, 곱셈기(602)는, 예시적인 평균 풀링 인터페이스(AV POOL)(642)로부터의 신호에 기반하여 풀 크기 값(640)을 검색한다. 예컨대, 평균 풀링 인터페이스(642)로부터의 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 평균 풀링 인터페이스(642)는, DPE(600)가 평균 풀링 연산을 수행하고 있을 때 하이 신호를 출력한다.
일부 예들에서, DPE(600)는 풀링 연산을 위해 구성된다. 예컨대, DPE(600)는, 도 2의 풀 영역(212)의 출력 위치들(208)에 대응하는, 제1 입력 값, 제2 입력 값, 제3 입력 값, 및 제4 입력 값을 획득할 수 있다. 그러한 예들에서, DPE(600)는, 위에 설명된 바와 같이 제1 내지 제4 입력 값들의 평균 값 또는 최대 값을 결정할 수 있다.
또 다른 예들에서, DPE(600)는, 바이어스 연산, 규모조정 연산, PReLU 연산, 또는 ReLU 연산(예컨대, ReLU-X 연산) 중 적어도 하나를 포함하는 하나 이상의 사후-처리 연산을 위해 구성될 수 있다. 예컨대, DPE(600)는, 계층별 기반으로 임의의 계층의 출력에서 바이어스 연산, 규모조정 연산, PReLU 연산, 또는 ReLU-X 연산을 위해 구성될 수 있다. 예컨대, 누산기(604)는, 예시적인 바이어스 규모조정 인에이블 인터페이스(BIAS_SCALE_EN)(646)로부터의 신호에 기반하여 제2 인터페이스(612)로부터 바이어스 값 또는 규모조정 값을 획득할 수 있다. 예컨대, 바이어스 규모조정 인에이블 인터페이스(646)로부터의 신호는 이진 값에 대응한다. 예컨대, 누산기(604)는, 바이어스 규모조정 인에이블 인터페이스(646)가 하이 신호를 출력할 때, 제2 인터페이스(612)로부터 바이어스 값 또는 규모조정 값을 획득할 수 있다.
예시적인 바이어스 연산에서, 예시적인 누산기(604)는, 예시적인 레지스터(606)에 저장된 출력 값(예컨대, 콘볼루션 출력 값, 평균 풀 값, 최대 풀 값, 풀 출력 값 등)에 제2 인터페이스(612)로부터 검색된 바이어스 값을 더한다. 예시적인 규모조정 연산에서, 예시적인 곱셈기(602)는, 바이어스 규모조정 인에이블 인터페이스(646)가 하이 값을 출력할 때, 제2 인터페이스(612)로부터 검색된 규모조정 값과 출력 값을 곱하고/거나 다른 방식으로 출력 값을 그 규모조정 값으로 규모조정한다.
일부 예들에서, DPE(600)는, DPE(600)가 콘볼루션 연산, 풀링 연산 등을 수행한 후에 PReLU 연산을 위해 구성된다. 그러한 예들에서, 도 5의 제어기(502)는, PReLU 인터페이스(638)에 대해 하이 신호를 생성한다. 예컨대, PReLU 인터페이스(638)로부터 수신된 신호는, 도 5의 제어기(502)에 의해 생성된 이진 값에 대응할 수 있다. 예컨대, 제어기(502)가 PReLU 인터페이스(638)에 대해 하이 신호를 생성하는 것에 대한 응답으로, 비교기(608)는, 콘볼루션 연산 또는 풀링 연산의 출력에 대응하는 제1 값과 예시적인 PReLU 기본 파라미터(t0)(648)에 대응하는 제2 값을 비교한다. 예컨대, 제1 값은, 도 2의 출력 위치들(208) 중 제1 출력 위치의 값, 도 2의 풀 영역(212)의 최대 값 등일 수 있다. 도 2의 예시된 예에서, PReLU 기본 파라미터(648)는 FP16 포맷으로 변환된 10 비트의 부호있는 정수이다. 대안적으로, 예시적인 PReLU 기본 파라미터(648)는 임의의 다른 양의 비트 및/또는 임의의 다른 포맷일 수 있다.
제1 값(예컨대, 레지스터(606)에 저장된 값)이 제2 값(예컨대, 예시적인 PReLU 기본 파라미터(t0)(648))보다 작은 것에 대한 응답으로, 예시적인 비교기(608)는 로우 신호를 출력하고, 따라서, 예시적인 논리 출력(636)이 로우 신호에 대응하게 된다. 예시적인 논리 출력(636)이 로우 신호에 대응하는 것에 대한 응답으로, 예시적인 곱셈기(602)는, 제1 예시적인 PReLU 입력 파라미터(a0)(650)와 예시적인 레지스터(606)에 저장된 출력 값의 곱셈에 기반하여 제1 PReLU 출력 값을 계산한다. 예컨대, 예시적인 PReLU 스위치 인터페이스(PRELU&~Y_FF)(652)는, PReLU 인터페이스(638)가 하이 신호를 출력하고(예컨대, DPE(600)가 PReLU 연산을 수행하고 있음) 논리 출력(636)이 로우 신호에 대응할 때, 하이 신호를 출력한다.
다른 예들에서, 제1 값이 제2 값보다 클 때, 비교기(608)는 하이 신호를 출력하고, 따라서, 논리 출력(636)이 하이 신호에 대응하게 된다. 예시적인 논리 출력(636)이 하이 신호에 대응하는 것에 대한 응답으로, 예시적인 곱셈기(602)는, 제2 예시적인 PReLU 입력 파라미터(a1)(654)와 예시적인 레지스터(606)에 저장된 출력 값의 곱셈에 기반하여 제2 PReLU 출력 값을 계산한다. 예컨대, PReLU 스위치 인터페이스(652)는, PReLU 인터페이스(638)가 하이 신호를 출력하고 논리 출력(636)이 하이 신호에 대응할 때, 로우 신호를 생성한다. PReLU 연산의 일반적인 형태는 수학식 (1) 및 수학식 (2)에서 아래에 설명된다.
Figure pct00007
,
Figure pct00008
인 경우 수학식 (1)
Figure pct00009
,
Figure pct00010
인 경우 수학식 (2)
위의 수학식들 (1)-(2)의 예시된 예들에서, y는 곱셈기(602)에 의해 계산된 PReLU 출력 값을 지칭하고, x는 레지스터(606)에 저장된 출력 값을 지칭하고, a0은 제1 PReLU 입력 파라미터(650)를 지칭하고, a1은 제2 PReLU 입력 파라미터(654)를 지칭하고, t0은 PReLU 기본 파라미터(648)를 지칭한다.
일부 예들에서, DPE(600)는, DPE(600)가 콘볼루션 연산, 풀링 연산 등을 수행한 후에 ReLU 연산(예컨대, ReLU-X 연산)을 위해 구성된다. 그러한 예들에서, 도 5의 제어기(502)는, 예시적인 ReLU-X 인터페이스(RELU_X)(656)에 대해 하이 신호를 생성한다. 예컨대, ReLU-X 인터페이스(656)로부터 수신된 신호는 이진 값에 대응할 수 있다. 예컨대, 제어기(502)가 ReLU-X 인터페이스(656)에 대해 하이 신호를 생성하는 것에 대한 응답으로, 비교기(608)는, 콘볼루션 연산 또는 풀링 연산의 출력에 대응하는 제1 값과 예시적인 ReLU-X 파라미터(1/AV; X)(658)에 대응하는 제2 값을 비교한다. 예컨대, 제1 값은, 도 2의 출력 위치들(208) 중 제1 출력 위치의 값, 도 2의 풀 영역(212)의 최대 값 등일 수 있다. 도 2의 예시된 예에서, ReLU-X 파라미터(658)는 FP16 값이다. 대안적으로, 예시적인 ReLU-X 파라미터(658)는 임의의 다른 양의 비트 및/또는 임의의 다른 포맷일 수 있다.
도 6의 예시된 예에서, ReLU-X 파라미터(658)는 풀 크기 값(1/Av; X)(640)과 레지스터를 공유한다. 일부 예들에서, ReLU-X 파라미터(658)는 영의 값을 갖는다. 그러한 예들에서, ReLU-X 연산은 수학식 (3)에서 아래에 설명된 기능을 수행한다.
Figure pct00011
수학식 (3)
위의 수학식 (3)의 예에서, y는 ReLU-X 출력 값을 지칭하고, x는 레지스터(606)에 저장된 출력 값을 지칭하고, z는 ReLU-X 파라미터(658)를 지칭한다. 예컨대, DPE(600)가 ReLU-X 연산을 위해 구성될 때, 제어기(502)는 ReLU-X 파라미터(658)를 영으로 설정하고, 비교기(608)는, 레지스터(606)에 저장된 출력 값이 영보다 큰지 여부를 결정한다. 예시적인 비교기(608)가, 출력 값이 영보다 크다고 결정하는 경우, 예시적인 제어기(502)는 ReLU-X 파라미터(658)를 ReLU-X 값으로 설정하고, 비교기(608)는, 레지스터(606)에 저장된 출력 값이 ReLU-X 값보다 큰지 여부를 결정한다. 예시적인 비교기(608)가, 레지스터(606)에 저장된 출력 값이 ReLU-X 값보다 크다고 결정하는 경우, 출력 값은 데이터 출력 인터페이스(626)에 송신되고, 그렇지 않은 경우, ReLU-X 값이 예시적인 ReLU-X 값 인터페이스(~Y_FF&RELU_X)(660)를 통해 데이터 출력 인터페이스(626)에 송신된다.
도 6의 예시된 예에서, 곱셈기(602), 레지스터(606), 및 비교기(608)는 FP16 기반이다. 예컨대, 곱셈기(602), 레지스터(606), 및 비교기(608)는, 값들을 FP16 포맷으로 처리하고, 저장하고/거나 다른 방식으로 취급할 수 있다. 도 6의 예시된 예에서, 누산기(604)는 고정 24 비트 기반 포맷이다. 예컨대, 누산기(604)는, 값들을 고정 24 비트 기반 포맷으로 처리하고, 저장하고/거나 다른 방식으로 취급할 수 있다. 대안적으로, 예시적인 곱셈기(602), 예시적인 누산기(604), 예시적인 레지스터(606), 및/또는 예시적인 비교기(608) 중 하나 이상은 임의의 다른 포맷일 수 있다.
일부 예들에서, 누산기(604)는, 예시적인 인접 DPE 인터페이스(662)를 통해 인접 DPE로부터 데이터를 획득한다. 예컨대, 누산기(604)는, 도 6의 DPE(600)에 결합된 도 5의 DPE들(520) 중 하나로부터 데이터를 획득할 수 있다. 예시적인 누산기(604)는, 다수의 스트림들의 하나 이상의 합이 계산될 예들(예컨대, 콘볼루션 연산이 다수의 입력 스트림들로 분할됨)에서, 인접 DPE로부터의 획득된 데이터를 처리한다. 예컨대, DPE(600)는 2 * 128 콘볼루션 배열을 위해 구성될 수 있으며, 여기서, 도 1의 입력 채널들(110, 112)의 2개의 스트림이 단일 위치에 대해 순차적으로 합산된다. 그러한 예들에서, DPE(600)는, 제어기(502)가 예시적인 인접 데이터 인터페이스(ACCUM)(664)에 대해 하이 신호를 생성할 때 다른 DPE(600)로부터 입력 스트림을 획득할 수 있다. 예컨대, 인접 데이터 인터페이스(664)가 하이 신호를 수신하는 것에 대한 응답으로, 곱셈기(602)는 인접 DPE 인터페이스(662)를 통해 인접 DPE로부터 데이터를 수신한다. 그러한 예들에서, 제어기(502)는, 제1 우회 인터페이스(618)를 인에이블링하기 위해 우회 선택기 인터페이스(616)에 하이 신호를 송신한다. 제1 예시적인 우회 인터페이스(618)가 인에이블링되는 것에 대한 응답으로, 예시적인 곱셈기(602)는 인접 DPE로부터의 수신된 데이터를 예시적인 누산기(604)에 송신하며, 여기서, 누산기(604)는, DPE(600)에 의해 계산된 제1 합과 인접 DPE에 의해 계산된 제2 합에 기반하여 총 합을 계산한다.
도 7은, 도 5의 예시적인 CNN 가속기(500)의 연산 모드에 기반하여 제2 예시적인 계수 저장소(702) 및 제3 예시적인 계수 저장소(704)로 구성된 제1 예시적인 계수 저장소(700)의 예시이다. 예시적인 계수 저장소들(700, 702, 704)은 도 5의 예시적인 계수 저장소(508)에 대응할 수 있다. 예컨대, 계수 저장소들(700, 702, 704)은 도 5의 제어기(502)로부터 어드레싱 및/또는 제어될 수 있다.
도 7의 예시된 예에서, 계수 저장소들(700, 702, 704)은, 별개의 판독 및 기입 입력/출력(I/O) 포트들 또는 채널들을 포함한다. 예시적인 계수 저장소들(700, 702, 704) 각각은 256개의 채널(CH0-CH255)을 가지며, 여기서, 각각의 채널은 16 비트이다. 예시적인 계수 저장소들(700, 702, 704) 각각은 256 * 4096 비트의 단일 인스턴스로서 구성되어 128 kB의 총 저장소를 산출한다. 대안적으로, 예시적인 계수 저장소들(700, 702, 704)은 임의의 다른 크기 및/또는 임의의 다른 구성일 수 있다.
도 7의 예시된 예에서, 제1 계수 저장소(700)는 256개의 FP16 출력의 256개의 채널을 가져서 256 * 256 워드 계수 저장소를 산출하며, 여기서, FP16 출력들 각각은 도 5의 DPE들(520) 중 하나에 연결된다. 도 7의 예시된 예에서, 제1 계수 저장소(700)는, CNN 가속기(500)가 1 * 256 모드에서 연산하고 있을 때 도 5의 제어기(502)에 의해 제2 계수 저장소(702)로 구성된다. 예컨대, 도 1의 입력 채널들(110, 112) 각각은, 1 * 256 모드에서 연산할 때 도 1의 출력 채널들(126) 각각에 대하여 단일 위치(예컨대, 출력 채널들(122))에 대해 순차적으로 합산된다. 예컨대, 1 * 256 모드는, DPE들(520) 중 하나가, 256개의 출력 채널에서 출력 위치들을 실질적으로 병렬로 산출하도록 1개의 입력 채널을 처리하는 것에 대응한다.
도 7의 예시된 예에서, 제1 계수 저장소(700)는, CNN 가속기(500)가 1 * 256 모드에서 연산하고 있을 때 도 5의 제어기(502)에 의해 제2 계수 저장소(702)로 구성된다. 도 7의 제2 예시적인 계수 저장소(702)는 계수들의 단일 블록으로서 구성되며, 여기서, 단일 블록은 256개의 열(예컨대, CH0 내지 CH255)로 분할되고, 여기서, 256개의 열 각각은 도 1의 모든 입력 채널들(110, 112)에 대한 계수들의 세트를 표현한다. 예컨대, 256개의 열 각각은 도 1의 필터들(114, 116) 중 하나에 대응할 수 있다.
도 7의 예시된 예에서, 제1 계수 저장소(700)는, CNN 가속기(500)가 2 * 128 모드에서 연산하고 있을 때 도 5의 제어기(502)에 의해 제3 계수 저장소(704)로 구성된다. 예컨대, 도 1의 입력 채널들(110, 112)의 2개의 스트림은, 2 * 128 모드에서 연산할 때 도 1의 출력 채널들(126) 각각에 대하여 단일 위치(예컨대, 출력 채널들(122))에 대해 순차적으로 합산된다. 그러한 예들에서, 2 * 128 모드의 결과는 2개의 스트림의 합산이다. 예컨대, 2 * 128 모드는, DPE들(520) 중 2개가, 128개의 출력 채널에서 출력 위치들을 실질적으로 병렬로 산출하도록 1개의 입력 채널을 처리하는 것에 대응한다.
도 7의 예시된 예에서, 제3 계수 저장소(704)는 계수들의 2개의 예시적인 블록(706, 708)으로 구성되며, 여기서, 블록들(706, 708) 각각은 도 5의 데이터 저장소(506)의 각각의 데이터 RAM 블록에 대응한다. 도 7의 예시된 예에서, 블록들(706, 708) 각각은 128개의 열을 포함한다. 예컨대, 제1 블록(706)은 제1 세트의 64개 채널(예컨대, CH0 내지 CH63)을 포함하고, 제2 블록(708)은 제2 세트의 64개 채널(CH64 내지 CH127)을 포함한다. 도 7의 예시된 예에서, 블록들(706, 708) 중 하나에서의 열은, 도 1의 입력 채널들(110, 112)의 절반에 대한 계수들의 세트를 표현한다. 도 7의 예시된 예에서, 어드레스마다, 128 * FP16 워드의 2개의 블록(706, 708)이 존재하므로, 블록들(706, 708) 중 하나는 데이터 저장소(506)로부터의 데이터 입력들의 각각의 블록에 대해 도 5의 DPE들(520)의 2개의 세트 중 하나에 적용된다.
대안적으로, 제1 예시적인 계수 저장소(700)는, 예시적인 CNN 가속기(500)가 4 * 64 모드에서 연산하고 있을 때, 도 5의 예시적인 제어기(502)에 의해 제4 계수 저장소(도시되지 않음)로 구성될 수 있다. 예컨대, 제4 계수 저장소는 계수들의 4개의 블록으로서 구성될 수 있으며, 여기서, 4개의 블록 각각은 도 5의 데이터 저장소(506)의 각각의 데이터 RAM 블록에 대응한다. 예컨대, 제4 계수 저장소가, 어드레스마다, 64 * FP16 워드의 4개의 블록을 가질 수 있으므로, 4개의 블록 중 하나는 데이터 저장소(506)로부터의 데이터 입력들의 각각의 블록에 대해 도 5의 DPE들(520)의 4개의 세트 중 하나에 적용된다.
대안적으로, 제1 예시적인 계수 저장소(700)는, 예시적인 CNN 가속기(500)가 8 * 32 모드에서 연산하고 있을 때, 도 5의 예시적인 제어기(502)에 의해 제5 계수 저장소(도시되지 않음)로 구성될 수 있다. 예컨대, 제5 계수 저장소는 계수들의 8개의 블록으로서 구성될 수 있으며, 여기서, 8개의 블록 각각은 도 5의 데이터 저장소(506)의 각각의 데이터 RAM 블록에 대응한다. 예컨대, 제5 계수 저장소가, 어드레스마다, 32 * FP16 워드의 8개의 블록을 가질 수 있으므로, 8개의 블록 중 하나는 데이터 저장소(506)로부터의 데이터 입력들의 각각의 블록에 대해 도 5의 DPE들(520)의 8개의 세트 중 하나에 적용된다.
대안적으로, 제1 예시적인 계수 저장소(700)는, 예시적인 CNN 가속기(500)가 16 * 16 모드에서 연산하고 있을 때, 도 5의 예시적인 제어기(502)에 의해 제6 계수 저장소(도시되지 않음)로 구성될 수 있다. 예컨대, 제6 계수 저장소는 계수들의 16개의 블록으로서 구성될 수 있으며, 여기서, 16개의 블록 각각은 도 5의 데이터 저장소(506)의 각각의 데이터 RAM 블록에 대응한다. 예컨대, 제6 계수 저장소가, 어드레스마다, 16 * FP16 워드의 16개의 블록을 가질 수 있으므로, 16개의 블록 중 하나는 데이터 저장소(506)로부터의 데이터 입력들의 각각의 블록에 대해 도 5의 DPE들(520)의 16개의 세트 중 하나에 적용된다.
예컨대, 도 1의 입력 채널들(110, 112)의 4개의 스트림은, 4 * 64 모드에서 연산할 때 도 1의 출력 채널들(126) 각각에 대하여 단일 위치(예컨대, 출력 채널들(122))에 대해 순차적으로 합산된다. 그러한 예들에서, 4 * 64 모드의 결과는 4개의 스트림의 합산이다. 예컨대, 4 * 64 모드는, DPE들(520) 중 4개가, 64개의 출력 채널의 출력들을 실질적으로 병렬로 산출하도록 1개의 입력 채널을 처리하는 것에 대응한다.
도 8은, 도 5의 예시적인 계수 저장소(508)에 대한 예시적인 어드레싱 모델을 도시하는 예시적인 표(800)이다. 도 8의 예시적인 표(800)에서, 예시적인 어드레스 시퀀스 열(어드레스 시퀀스)(802)은 예시적인 계수 저장소(508)에 대한 어드레싱 방식을 설명한다. 예시적인 어드레스 시퀀스 열(802)에서, CH STR IN이라는 용어는 입력 채널 스트라이드 값을 지칭하고, CH STR OUT이라는 용어는 출력 채널 스트라이드 값을 지칭한다. 도 8의 예시적인 표(800)에서, 예시적인 입력 채널 열(입력 채널)(804)은, 콘볼루션 연산에 대한 입력 채널(예컨대, 도 1의 입력 채널들(110, 112))을 표현한다.
도 8의 예시적인 표(800)에서, 예시적인 데이터 열(데이터[127:0])(806)은, 계수 모드(예컨대, 1 * 256 모드, 2 * 128 모드 등)에 관계없이 16 비트 채널을 효과적으로 점유하는, 한 번에 8개의 채널 각각에 대해 단일 계수 16 비트 워드를 저장하는 128 비트 워드들을 표현한다. 예컨대, FP16은 16 비트 채널을 완전히 점유하고, 2개의 uf8 계수가 16 비트 채널을 점유하는 그러한 식이다. 예시적인 계수 열(계수)(808)은 필터의 색인(예컨대, 도 1의 제1 필터(114)의 계수)을 표현한다.
도 9는, 비-FP16 포맷들에 기반한 도 5의 예시적인 계수 저장소(508)에 대한 예시적인 어드레싱 모델을 도시하는 예시적인 표(900)이다. 도 9의 예시적인 표(900)에서, 각각의 채널에 16 비트가 할당된다. 예시적인 데이터 열(데이터[127:0])(902)에서의 16 비트 채널들(예컨대, CH0, CH1, CH7 등) 각각 내에서, 데이터가 모든 입력 채널들에 대해 패킹된다. 비-FP16 모드들의 경우, 입력 채널 스트라이드(CH STR IN)는 어떠한 직접적인 의미도 갖지 않지만, RAM당 채널들의 양(CH_PER_RAM)과 곱해질 때, 스트라이드가 다음 RAM 블록에 올바르게 도달할 것이도록(예컨대, CH STR IN이 128 비트가 아닌 경계 상에 정렬될 수 있도록), 스트라이드로서 계산된다. 3 x 3 콘볼루션(예컨대, 9개의 계수)에 대한 4 비트 팔레트화된 이미지의 예가 아래에 설명된다:
4개 채널, 8 비트 계수를 갖는 예시적인 3 x 3 필터: Coeff Stride(In) = 4.5 라인 = 0x0048h.
4개 채널, 4 비트 계수를 갖는 예시적인 2 x 2 필터: Coeff Stride(In) = 2.25 라인 = 0x0024h.
도 10은, 본원에 개시된 예들을 구현하기 위한 예시적인 콘볼루션 연산(1000)을 예시한다. 예컨대, 콘볼루션 연산(1000)은 도 5의 CNN 가속기(500)에 의해 실행될 수 있다. 도 10의 예시된 예에서, 콘볼루션 연산(1000)의 콘볼루션 모드는 1 * 256 모드이며, 여기서, 예시적인 입력 채널들(1002)의 각각의 예시적인 입력 채널은, 복수의 출력 채널들에 대한 예시적인 출력 채널(1006)에 대하여 단일의 예시적인 출력 위치(1004)에 대해 순차적으로 합산된다.
도 10의 예시된 예에서, 입력 채널들(1002)은 폭이 28개 픽셀(X = 28)이고 높이가 28개 픽셀(Y = 28)이고 심도가 50개 채널(C = 50)인 치수들을 갖는다. 예시적인 입력 채널들(1002)에 대한 예시적인 입력 위치들(1008)은, 폭이 5개 픽셀(Fw = 5)이고 높이가 5개 픽셀(Fh = 5)이고 심도가 50개 채널(C = 50)인 치수들을 갖는 예시적인 필터들(1010)을 사용하여 처리된다. 대안적으로, 예시적인 입력 채널들(1002)은, CNN의 이차 콘볼루션 계층(예컨대, 초기 콘볼루션 계층 이후의 콘볼루션 계층)에 대응할 수 있다. 예컨대, 입력 채널들(1002)은 픽셀 값들과 비교하여 활성화들을 포함할 수 있다.
도 10의 예시된 예에서, 출력 위치(1004)는, 입력 채널들(1002)의 입력 위치들(1008)과 필터들(1010)의 모든 콘볼루션들의 모든 곱들의 합을 계산함으로써 결정된다. 예시적인 출력 채널(1006)의 부가적인 출력 위치들은, 입력 위치들 전체가 처리될 때까지 예시적인 입력 채널들(1002)의 나머지 입력 위치들을 콘볼빙함으로써 처리된다. 예시적인 입력 채널들(1002)의 입력 위치들 전체를 처리하는 것에 대한 응답으로, 예시적인 CNN 가속기(500)는, 상이한 세트의 필터들을 사용하여 다른 출력 채널을 계산한다. 도 10의 예시된 예에서, CNN 가속기(500)는, 100개의 세트의 필터들에 대해 상이한 세트의 필터들과 입력 채널들(1002)을 콘볼빙(예컨대, 반복적으로 콘볼빙)하여 100개의 출력 채널을 생성한다.
도 11은, 1 * 256 콘볼루션 배열에 기반한 도 5의 예시적인 연결 다중화기(510)의 예시적인 연산(1100)을 예시한다. 도 11의 예시된 예에서, 연결 다중화기(510)는, 도 5의 256개의 DPE(520) 전부에 걸쳐 복제된 단일 FP16 출력을 갖는다. 도 11의 예시된 예에서, 연결 다중화기(510)는 데이터 저장소(506)로부터 FP16 데이터를 선택한다.
도 11의 예시된 예에서, 데이터 저장소(506)는, 1 * 256 콘볼루션 배열에 기반하여 구성된다. 도 11의 예에 도시된 데이터 저장소(506)는, 단일 대형 RAM으로서 구성되는 16개의 예시적인 블록(RAM0-RAM15)(1102)으로 구성된다. 블록들(1102) 각각은, FP16 워드들의 8개의 예시적인 열(1104)을 포함하며, 8개의 열(1104) 각각은 복수의 예시적인 데이터 라인들(1106)을 포함한다. 대안적으로, 예시적인 블록들(1102)은, 도 11에 도시된 8개의 열보다 더 적거나 더 많은 열 및/또는 도 11에 도시된 데이터 라인보다 더 적거나 더 많은 데이터 라인을 가질 수 있다. 도 11의 예시된 예에서, 데이터 라인(1106) 각각은 입력 채널의 8개의 워드를 포함한다. 예시적인 연결 다중화기(510)는, 필터 및 처리되는 현재 입력 채널에 기반하여, 각각의 사이클마다 8개의 입력 워드 중 적절한 워드를 선택한다. 도 5의 예시적인 제어기(502)는, 입력 채널 스트라이드에 기반하여 적절한 워드의 어드레스를 결정한다. 예시적인 제어기(502)는, RAM 어드레스 및 연결 행렬 어드레스 중 적어도 하나를 결합하는 것에 기반하여 전체 어드레스를 결정한다.
도 11의 예시된 예에서, 단일 입력 채널이 한 번에 처리된다. 예컨대, 제1 클록 사이클 동안, 연결 다중화기(510)는, 제1 입력 채널에 대응하는 블록들(1102) 각각의 데이터 라인들(1106) 중 처음 2개를 선택하고, 복수의 데이터 라인들(1106)을 도 1의 DPE들(520)의 개개의 DPE들에 출력한다. 예컨대, 연결 다중화기(510)는, 데이터 라인들(1106) 중 32개(예컨대, 32개 데이터 라인 = (2개 데이터 라인/블록) X (16개 블록))를 선택할 수 있으며, 여기서, 각각의 데이터 라인(1106)은, 128 비트(예컨대, 128 비트 = (16 비트/워드) X (8개 워드/데이터 라인))를 포함하여, DPE들(520)에 의해 처리될 4096 비트(예컨대, 4096 비트 = (128 비트/데이터 라인) X (2개 데이터 라인/블록) X 16개 블록)를 산출한다. 그러한 예들에서, 제2 클록 사이클 동안, 연결 다중화기(510)는, 제2 입력 채널에 대응하는 16개의 블록(1102) 각각의 다음 2개의 데이터 라인(1106)을 선택하고, 처리를 위해 복수의 데이터 라인들(1106)을 DPE들(520)의 개개의 DPE들에 출력할 수 있다. 그러한 예들에서, 데이터 저장소(506), 연결 다중화기(510) 등의 어드레싱 및 제어 시퀀싱은, 도 5의 제어기(502) 또는 DMA 제어기(504) 중 적어도 하나에 의해 수행된다.
도 12는, 2 * 128 콘볼루션 배열에 기반한 도 5의 예시적인 연결 다중화기(510)의 예시적인 연산(1200)을 예시한다. 도 12의 예시된 예에서, 연결 다중화기(510)는, 도 5의 DPE들(520)의 128개 DPE 세트 둘 모두에 걸쳐 복제된 2개의 FP16 출력을 갖는다. 도 12의 예시된 예에서, 연결 다중화기(510)는 데이터 저장소(506)로부터 FP16 데이터를 선택한다.
도 12의 예시된 예에서, 데이터 저장소(506)는, 2 * 128 콘볼루션 배열에 기반하여 구성된다. 도 12의 예에 도시된 데이터 저장소(506)는, 2개의 예시적인 RAM 블록(1204, 1206)으로서 구성되는 16개의 예시적인 블록(RAM0-RAM15)(1202)으로 구성된다. 제1 예시적인 RAM 블록(1204)은 RAM0-RAM7을 포함하고, 제2 예시적인 RAM 블록(1206)은 RAM8-RAM15를 포함한다. 블록들(1202) 각각은, FP16 워드들의 8개의 예시적인 열(1208)을 포함하며, 8개의 열(1208) 각각은 복수의 예시적인 데이터 라인들(1210)을 포함한다. 도 12의 예시된 예에서, 제1 RAM 블록(1204)은 입력 채널 세트의 처음 절반을 포함하고, 제2 RAM 블록(1206)은 입력 채널 세트의 두 번째 절반을 포함한다. 대안적으로, 예시적인 블록들(1202)은, 도 12에 도시된 8개의 열보다 더 적거나 더 많은 열 및/또는 도 12에 도시된 데이터 라인보다 더 적거나 더 많은 데이터 라인을 가질 수 있다.
도 12의 예시된 예에서, 단일 입력 채널이 한 번에 처리된다. 예컨대, 제1 클록 사이클 동안, 연결 다중화기(510)는, 제1 RAM 블록(1204)에 포함된 블록들(1202) 각각의 데이터 라인들(1210) 중 처음 2개, 및 제2 RAM 블록(1206)에 포함된 블록들(1202) 각각의 데이터 라인들(1210) 중 처음 2개를 선택하며, 여기서, 선택된 데이터 라인들(1210)은 처리될 제1 입력 채널에 대응한다. 예시적인 연결 다중화기(510)는, 복수의 데이터 라인들(1210)을 도 1의 DPE들(520)의 개개의 DPE들에 출력한다. 예컨대, 연결 다중화기(510)는, 제1 RAM 블록(1204)으로부터 데이터 라인들(1210) 중 16개를 그리고 제2 RAM 블록(1206)으로부터 데이터 라인들(1210) 중 16개를 선택할 수 있으며, 여기서, 각각의 데이터 라인(1210)은, 128 비트를 포함하여, DPE들(520)에 의해 처리될 4096 비트를 산출한다.
그러한 예들에서, 제2 클록 사이클 동안, 연결 다중화기(510)는, 처리될 제2 입력 채널에 대응하는, 제1 RAM 블록(1204)에 포함된 블록들(1202) 각각의 다음 2개의 데이터 라인(1210), 및 제2 RAM 블록(1206)에 포함된 블록들(1202) 각각의 다음 2개의 데이터 라인(1210)을 선택할 수 있다. 예시적인 연결 다중화기(510)는, 처리를 위해 복수의 데이터 라인들(1210)을 DPE들(520)의 개개의 DPE들에 출력한다. 그러한 예들에서, 데이터 저장소(506), 연결 다중화기(510) 등의 어드레싱 및 제어 시퀀싱은, 도 5의 제어기(502) 또는 DMA 제어기(504) 중 적어도 하나에 의해 수행된다.
도 13은, 도 5의 예시적인 CNN 가속기(500)를 구현하기 위한 예시적인 CNN 가속기(1300)의 예시적인 구현의 블록도이다. 도 13의 예시적인 CNN 가속기(1300)는, 복수의 입력 채널들을 처리하고/거나 하나 이상의 출력 채널을 실질적으로 병렬로(예컨대, 실질적으로 동시에) 생성함으로써 콘볼루션 연산들을 가속시킨다. 도 13의 예시된 예에서, CNN 가속기(1300)는, 예시적인 DPE 인벤토리 엔진(1302), 예시적인 DPE 구성 최적화기(1304), 예시적인 모드 선택기(1306), 예시적인 콘볼루션 엔진(1308), 예시적인 풀링 엔진(1310), 및 예시적인 완전-연결 엔진(1312)을 포함한다.
도 13의 예시된 예에서, CNN 가속기(1300)는, 플랫폼(예컨대, 도 5의 CNN 가속기(500))에 상주하는 이용가능한 DPE들을 인벤토리화하고/거나 다른 방식으로 식별하기 위한 DPE 인벤토리 엔진(1302)을 포함한다. 예시적인 DPE 인벤토리 엔진(1302)은 도 5의 예시적인 제어기(502)에 대응할 수 있다. 도 13의 예시된 예에서, DPE 인벤토리 엔진(1302)은, 플랫폼 상에 상주하는 DPE들을 질의, 결정, 특성화, 및/또는 식별하기 위한 수단을 구현한다. 일부 예들에서, DPE 인벤토리 엔진(1302)은, 처리에 이용가능한 도 5의 DPE들(520)의 양을 결정한다. 일부 예들에서, DPE 인벤토리 엔진(1302)은, 도 5의 하나 이상의 DPE(520) 및/또는 더 일반적으로는 도 5의 CNN 가속기(500)의 콘볼루션 배열, 모드 등을 결정한다.
도 13의 예시된 예에서, CNN 가속기(1300)는, DPE 리소스 활용률을 증가시키고/거나(예컨대, 최대화하고/거나) 다른 방식으로 최적화하고 전력 소모를 감소시키고/거나(예컨대, 최소화하고/거나) 다른 방식으로 최적화하기 위해 DPE 구성, 모드 등을 선택하고/거나 다른 방식으로 결정하기 위한 예시적인 DPE 구성 최적화기(1304)를 포함한다. 예시적인 DPE 구성 최적화기(1304)는 도 5의 예시적인 제어기(502)에 대응할 수 있다. 도 13의 예시된 예에서, DPE 구성 최적화기(1304)는, DPE 리소스 활용률을 증가시키고 전력 소모를 감소시키기 위해 DPE 구성, 모드 등을 결정하기 위한 수단을 구현한다. 예컨대, DPE 구성은, CNN 가속기(500)가 콘볼루션 모드, 풀링 모드, 완전-연결 모드 등에 있을 때, 데이터 저장소(506), 계수 저장소(508), DPE 어레이(512) 등의 구성에 대응할 수 있다. 예시적인 DPE 구성 최적화기(1304)는, 실질적으로 낮은 전력(예컨대, 반복되는 데이터 이동이 거의 없거나 전혀 없음) 및 최대 하드웨어 활용률을 사용하여 도 5의 예시적인 CNN 가속기(500)의 최적 연산을 제공하기 위한 수단을 구현한다.
일부 예들에서, 데이터 이동을 감소시키기 위해, 총 출력 수 및 총 계수 세트가 도 5의 예시적인 계수 저장소(508)에 유지될 수 있다. 일부 예들에서, DPE 구성 최적화기(1304)는, 데이터 이동을 감소시키기 위해 필터 치수들에 기반하여 계수 저장소(508)의 구성을 결정한다. 예컨대, FP16 계수들을 사용하는 3 x 3의 필터 크기의 경우, DPE 구성 최적화기(1304)는, 대략적으로 28개(예컨대,
Figure pct00012
이며, 여기서, 계수 저장소(508)는 256개의 위치를 가짐)의 입력 채널의 제한을 결정할 수 있다. 그러한 예들에서, DPE 구성 최적화기(1304)는, 총 출력 수 및 총 계수 세트가 도 5의 계수 저장소(508)에 저장될 수 있음을 보장하기 위해 28개의 입력 채널의 제한을 결정한다.
일부 예들에서, DPE 구성 최적화기(1304)는 출력 채널들의 양을 감소시키며, 여기서, 모드에서의 각각의 감소는 입력 채널 취급 능력의 배가를 산출한다. 예컨대, DPE 구성 최적화기(1304)는, 1 * 256 콘볼루션 배열을 2 * 128 콘볼루션 배열 또는 4 * 64 콘볼루션 배열로 변경하여 동일한 가속을 제공하지만 전체 전력 사용은 더 적어질 수 있다. 일부 예들에서, DPE 구성 최적화기(1304)는, 이미지와 연관된 모든 입력 채널들(예컨대, 입력 이미지 데이터) 또는 모든 계수들이 계수 저장소(508)에 적합하지 않을 때 원형 버퍼 관리를 배치한다. 예컨대, DPE 구성 최적화기(1304)는 채널별 원형 버퍼 관리 시스템을 구성할 수 있으며, 여기서, 모든 채널들이 메모리(예컨대, SRAM, DRAM 등)로부터 가장 빠른 기회에 지속적으로 보충되어 최소의 스톨링 또는 스톨링이 전혀 없는 것을 보장한다.
일부 예들에서, DPE 구성 최적화기(1304)는, 콘볼루션 배열을 사용하는 것으로부터 비롯되는 DPE 활용률에 기반하여 CNN 가속기(1300)가 연산(예컨대, 콘볼루션 연산, 풀링 연산, 완전-연결 연산 등)을 계속하는 것을 중단하고/거나 다른 방식으로 방지한다. 예컨대, DPE 구성 최적화기(1304)는, 1 * 256 콘볼루션 배열을, 분석, 평가, 처리 등이 이루어질 제1 콘볼루션 배열로서 선택할 수 있다. 그러한 예들에서, DPE 구성 최적화기(1304)는, 1 * 256 콘볼루션 배열이, 연산 요건들(예컨대, 처리 또는 생성될 입력 채널들의 양, 출력 채널들의 양 등)에 기반하면, CNN 가속기(1300)의 연산 동안 DPE 어레이(512)의 256개의 DPE(520) 중 64개가 미사용된다는 것에 기반하여 75 %의 제1 DPE 활용률을 초래한다고 결정할 수 있다. 예시적인 DPE 구성 최적화기(1304)는, 75 %의 제1 DPE 활용률을 90 % DPE 활용 임계치와 비교하고, 비교(예컨대, 75 %의 제1 DPE 활용률은 90 % DPE 활용 임계치보다 작음)에 기반하여, 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않는다고 결정할 수 있다. 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않는다고 결정하는 것에 대한 응답으로, 예시적인 DPE 구성 최적화기(1304)는, DPE 활용률에 대해 다른 콘볼루션 배열이 생성, 결정, 및/또는 평가될 때까지 예시적인 CNN 가속기(1300)가 제1 콘볼루션 배열로 연산을 실행하는 것을 중단할 수 있다.
일부 예들에서, 중단에 대한 응답으로, DPE 구성 최적화기(1304)는 처리될 제2 콘볼루션 배열, 이를테면 4 * 64 콘볼루션 배열을 선택한다. 그러한 예들에서, DPE 구성 최적화기(1304)는, 4 * 64 콘볼루션 배열이, 연산 요건들에 기반하면, CNN 가속기(1300)의 연산 동안 DPE 어레이(512)의 256개 DPE(520) 중 0개가 미사용된다는 것에 기반하여 100 %의 제2 DPE 활용률을 초래한다고 결정할 수 있다. 예시적인 DPE 구성 최적화기(1304)는, 100 %의 제2 DPE 활용률을 90 % DPE 활용 임계치와 비교하고, 비교(예컨대, 100 %의 제2 DPE 활용률은 90 % DPE 활용 임계치보다 큼)에 기반하여, 제2 DPE 활용률이 DPE 활용 임계치를 충족시킨다고 결정할 수 있다. 제2 DPE 활용률이 DPE 활용 임계치를 충족시킨다고 결정하는 것에 대한 응답으로, 예시적인 DPE 구성 최적화기(1304)는, 제2 콘볼루션 배열로 연산을 실행할 것을 예시적인 CNN 가속기(1300)에 지시할 수 있다. 부가적으로 또는 대안적으로, 예시적인 DPE 구성 최적화기(1304)는, 제2 DPE 활용률을 제1 DPE 활용률과 비교하고, 제2 콘볼루션 배열이 제1 콘볼루션 배열보다 더 큰 DPE 활용률을 갖는 것에 기반하여, 제2 콘볼루션 배열로 연산을 실행할 것을 예시적인 CNN 가속기(1300)에 지시할 수 있다.
일부 예들에서, DPE 구성 최적화기(1304)는, DPE들(520)의 누산기(604)의 구성을 조정(예컨대, 동적으로 조정, 동적으로 구성 등)한다. 일부 예들에서, DPE 구성 최적화기(1304)는, 입력 값들이 누산기(604)가 이용가능한 기존 정수 비트 수를 요구하지 않을 때, 누산기(604)의 정수 비트 수를 감소시킨다. 예컨대, DPE 구성 최적화기(1304)는, 누산기(604)가 처리할 수 있는 정수 비트 수를 감소시켜 누산기(604)의 범위를 증가시킬 수 있지만 정밀도를 감소시킨다. 일부 예들에서, DPE 구성 최적화기(1304)는, 누산기(604)가 오버플로우할 때 누산기(604)의 정수 비트 수를 증가시킨다. 예컨대, 구성 최적화기(1304)는, 누산기(604)가 처리할 수 있는 정수 비트 수를 증가시켜 누산기(604)의 범위를 증가시킬 수 있지만 정밀도를 감소시킨다.
도 13의 예시된 예에서, CNN 가속기(1300)는, 연산 모드, 수행될 연산, 및/또는 콘볼루션 배열을 선택하기 위한 모드 선택기(1306)를 포함한다. 예시적인 모드 선택기(1306)는 도 5의 예시적인 제어기(502)에 대응할 수 있다. 도 13의 예시된 예에서, 모드 선택기(1306)는, 콘볼루션 모드, 풀링 모드, 완전-연결 모드 등과 같은 연산 모드를 선택하고 선택된 모드에 기반하여 CNN 가속기(1300)를 구성하기 위한 수단을 구현한다. 일부 예들에서, 모드 선택기(1306)는, 콘볼루션 모드 내에서 임의적 풀링 모드를 선택한다. 일부 예들에서, 모드 선택기(1306)는, 모드들 중 하나 내에서 사후-프로세스 연산을 선택한다. 예컨대, 모드 선택기(1306)는, 콘볼루션 모드에서 콘볼루션 연산을 완료한 후, 풀링 모드에서 풀링 연산을 완료한 후 등의 시점에, 바이어스 연산, 규모조정 연산, PReLU 연산, ReLU 연산 등을 수행할 것을 도 5의 DPE들(520)에 지시할 수 있다.
일부 예들에서, 모드 선택기(1306)는, 선택된 모드에 기반하여 도 5의 CNN 가속기(500)를 구성한다. 예컨대, 모드 선택기(1306)는, 선택된 모드에 기반하여 도 5의 데이터 저장소(506), 계수 저장소(508), DPE 어레이(512) 등을 구성할 수 있다. 예컨대, 모드 선택기(1306)는, 계수 값들을 계수 저장소(508)에 송신할 것을 DMA 제어기(504)에 지시함으로써 계수 저장소(508)를 콘볼루션 모드를 위해 구성할 수 있다. 다른 예들에서, 모드 선택기(1306)는, 처리를 위해 바이어스 파라미터, 규모조정 파라미터 등을 DPE 어레이(512)에 송신할 것을 계수 저장소(508)에 지시함으로써, DPE 어레이(512)를 바이어스 연산, 규모조정 연산 등을 위해 구성할 수 있다.
도 13의 예시된 예에서, CNN 가속기(1300)는, 입력 이미지와 연관된 이미지 데이터에 대한 콘볼루션 연산을 수행하고/거나 다른 방식으로 용이하게 하기 위한 콘볼루션 엔진(1308)을 포함한다. 예시적인 콘볼루션 엔진(1308)은 도 5의 예시적인 제어기(502)에 대응할 수 있다. 예컨대, 콘볼루션 엔진(1308)은, 콘볼루션 연산을 수행할 것을 데이터 저장소(506), 계수 저장소(508), DPE들(520) 중 하나 이상 등에 지시하고/거나 다른 방식으로 명령하는 제어기(502)에 대응할 수 있다. 도 13의 예시된 예에서, 콘볼루션 엔진(1308)은, 복수의 출력 채널들을 실질적으로 병렬로 생성하기 위해, 복수의 필터들로 활성화 값들, 픽셀 값들 등을 포함하는 복수의 입력 채널들을 콘볼빙하기 위한 수단을 포함한다. 예컨대, 콘볼루션 엔진(1308)은, DPE 어레이(512)의 하나 이상의 DPE(520)를 사용하여 콘볼루션 연산을 용이하게 하기 위한 수단을 포함한다.
일부 예들에서, 콘볼루션 엔진(1308)은, 입력 이미지(예컨대, 도 1의 입력 이미지(106))와 연관된 이미지 데이터(예컨대, 활성화 값들, 픽셀 값들 등)를 획득하고, 입력 이미지에서 검출될 관심 이미지 피쳐들과 연관된 필터 계수들로 이미지 데이터를 콘볼빙하고, 필터 계수들과 이미지 데이터의 중첩과 연관된 출력들을 생성함으로써 콘볼루션을 수행한다. 그러한 예들에서, 모델 선택기(1306)는, 콘볼루션 배열에 기반하여 도 5의 데이터 저장소(506), 계수 저장소(508), DPE 어레이(512) 등을 구성한다.
모드 선택기(1306)가 2 * 128 콘볼루션 배열을 선택하는 예에서, 예시적인 콘볼루션 엔진(1308)은, 도 12와 관련하여 위에 설명된 바와 같이, 예시적인 데이터 저장소(506)를 2개의 RAM 블록으로 구성한다. 예시적인 콘볼루션 엔진(1308)은, 도 7의 제3 예시적인 계수 저장소(704)와 관련하여 위에 설명된 바와 같이, 계수 저장소(508)를 2개의 계수 블록으로 구성한다. 예시적인 콘볼루션 엔진(1308)은, 예시적인 데이터 저장소(506)에서 처리될 각각의 입력 채널에 대한 데이터 라인들의 일부분 또는 그 전량(full complement)을 로딩하고, 입력 데이터와 연관된 계수들을 도 5의 예시적인 계수 저장소(508)로 로딩하여, 데이터 라인들 및 계수들이 도 5의 DPE들(520)의 개개의 DPE들과 정렬되게 한다.
예시적인 데이터 저장소(506) 및 예시적인 계수 저장소(508)가 로딩되고/거나 다른 방식으로 구성되는 것에 대한 응답으로, 예시적인 콘볼루션 엔진(1308)은, 제1 출력 위치(예컨대, 도 10의 출력 위치(1004))에 대해 실질적으로 병렬로 콘볼루션 연산(예컨대, 도 10의 콘볼루션 연산(1000))을 수행한다. 예컨대, 콘볼루션 엔진(1308)은, 콘볼루션 출력 값들을 생성하기 위해, 계수 저장소(508)에 포함된 계수들이 DPE들(520)을 통해 사이클링되는 동안, 데이터 저장소(506)에 저장된 적절한 워드들(예컨대, 입력 위치들(1008)과 연관된 워드들)을 어드레싱하여 DPE들(520)의 개개의 DPE들에 송신함으로써 콘볼루션 연산을 구현한다.
예시적인 콘볼루션 엔진(1308)은, 워드들 전체(예컨대, 도 10의 입력 위치들(1008)과 연관된 워드들 전체)가 처리될 때까지 워드들을 처리(예컨대, 반복적으로 처리)한다. 일부 예들에서, 콘볼루션 엔진(1308)은, 입력 위치에 대한 모든 워드들이 처리되었을 때 사후-프로세스 연산(예컨대, 바이어스 연산, 규모조정 연산, PReLU 연산, ReLU 연산 등)을 수행한다. 입력 채널 스트라이드를 사용하여, 예시적인 콘볼루션 엔진(1308)은, 입력 채널들의 처리되는 모든 입력 위치들이 처리되어 콘볼루션 출력 값들을 생성할 때까지 DPE들(520)을 사용하여 다음 채널(들)을 콘볼빙한다.
일부 예들에서, 콘볼루션 엔진(1308)은, 콘볼루션 모드 내에서 콘볼루션 출력들에 대해 임의적 풀링 연산(예컨대, 평균 풀링 연산, 최대 풀링 연산 등)을 수행한다. 예컨대, 콘볼루션 엔진(1308)은, 출력 버퍼(예컨대, 도 5의 출력 버퍼(514))에 대해 풀 영역(예컨대, 도 2의 풀 영역(212))의 평균 값, 최대 값 등을 풀 출력으로서 결정할 수 있다. 예시적인 콘볼루션 엔진(1308)은 출력 버퍼(514)가 가득 찼을 때(예컨대, 값들의 임계량이 DPE(520)마다 계산되었음), DPE들(520)의 풀 출력들 및/또는 더 일반적으로는 출력들은 출력 버퍼(514)로부터 메모리로 기입된다.
도 13의 예시된 예에서, CNN 가속기(1300)는, 하나 이상의 콘볼루션 출력에 대해 평균 풀링 연산 또는 최대 풀링 연산과 같은 풀링 연산을 수행하기 위한 풀링 엔진(1310)을 포함한다. 예시적인 풀링 엔진(1310)은 도 5의 예시적인 제어기(502)에 대응할 수 있다. 예컨대, 풀링 엔진(1310)은, 풀링 모드 내에서 풀링 연산을 수행할 것을 데이터 저장소(506), 계수 저장소(508), DPE들(520) 중 하나 이상 등에 지시하고/거나 다른 방식으로 명령하는 제어기(502)에 대응할 수 있다. 예시된 예에서, 풀링 엔진(1310)은, 콘볼루션 엔진(1308)에 의해 생성된 콘볼루션 출력들의 세트에 대해 풀링 연산을 수행하기 위한 수단을 구현한다.
일부 예들에서, 풀링 엔진(1310)은 풀 영역을 처리하여 풀 출력을 생성한다. 예컨대, 풀링 엔진(1310)은, 도 3의 풀 영역(212)의 평균 값, 최대 값 등에 기반하여 풀 영역(212)을 처리하여 도 3의 출력 위치(302)를 생성할 수 있다. 예컨대, 풀링 엔진(1310)은, 2 x 2 풀에 대해 매 4 클록 사이클마다, 3 x 3 풀에 대해 매 9 클록 사이클마다 등의 방식으로 데이터를 출력할 수 있다. 예시적인 풀링 엔진(1310)은, 풀 영역에서의 데이터의 합을 계산함으로써 평균 풀링 연산을 수행하고 그 합에 1/Av를 곱하며, 여기서, Av는, 풀 높이와 풀 폭을 곱한 것을 계산함으로써 결정된 풀 크기이다. 예시적인 풀링 엔진(1310)은, 풀 영역의 최대 값을 결정함으로써 최대 풀링 연산을 수행한다.
도 13의 예시된 예에서, CNN 가속기(1300)는, 콘볼루션 엔진(1308)으로부터의 출력들(예컨대, 콘볼루션 출력들) 및/또는 풀링 엔진(1310)으로부터의 출력들(예컨대, 풀 출력들)을 사용하여, 훈련 데이터세트에 기반하여 입력 이미지(예컨대, 도 1의 입력 이미지(106))를 다양한 부류들로 분류하기 위한 완전-연결 엔진(1312)을 포함한다. 도 13의 예시적인 완전-연결 엔진(1312)은 도 5의 예시적인 제어기(502)에 대응할 수 있다. 예컨대, 제어기(502)는, 완전-연결 연산을 수행(예컨대, 도 4의 출력 어레이(406)를 생성)할 것을 데이터 저장소(506), 계수 저장소(508), DPE 어레이(512) 등에 지시할 수 있다. 도 13의 예시된 예에서, 완전-연결 엔진(1312)은, 입력 이미지에 포함된 이미지 피쳐들을 검출하고/거나 다른 방식으로 식별하기 위해 콘볼루션 출력들 및/또는 풀 출력들에 기반하여 입력 이미지의 이미지 피쳐들을 분류하기 위한 수단을 구현한다.
일부 예들에서, CNN 가속기(1300)는, 하나 이상의 연결된 목록을 사용함으로써 도 5의 CNN 가속기(500)를 구현한다. 연결된 목록은 데이터 요소들의 선형 집합이며, 여기서, 선형 순서가 메모리에서 그들의 물리적 배치에 의해 주어지지는 않지만, 대신, 데이터 요소들 각각이 데이터 요소들의 다음 데이터 요소를 가리킨다. 일부 예들에서, 연결된 목록들은 시스템 메모리에 저장된다. 예컨대, 연결된 목록들은 도 5의 메인 메모리(516)에 저장되고 도 5의 제어기(502)에 의해 실행될 수 있다. 일부 예들에서, 연결된 목록들은 매크로 기능들을 형성하도록 연접되는 서브-기능들을 용이하게 한다. 일부 예들에서, 서브-기능들의 양에 대해 어떠한 제한도 존재하지 않는데, 그 이유는, 콘볼루션 엔진(1308), 풀링 엔진(1310), 완전-연결 엔진(1312) 등이, 매크로 기능의 끝을 표시하는 널(NULL) 연결에 도달할 때까지 각각의 연산을 순차적으로 진행할 수 있기 때문이다. 예컨대, 제어기(502)는, CNN 가속기(500)의 전체 CNN 기능을 명확하게 식별가능한 블록들로 분해하고, 널 연결에 도달할 때까지 블록들 각각을 실행할 수 있다.
일부 예들에서, 도 13의 CNN 가속기(1300)는 2개 이상의 별개의 연결된 목록을 유지한다. 도 13의 예시적인 CNN 가속기(1300)는, 2개 이상의 연결된 목록을 기본적으로 라운드 로빈 방식으로 또는 임의의 다른 방식으로 실행하고/거나 다른 방식으로 처리할 수 있다. 일부 예들에서, 도 13의 CNN 가속기(1300)는, 연결된 목록들 중 하나가, 연결된 목록들 중 제2 목록으로 핸드 오프하기 전에 완료되는 것을 보장하기 위해, 연결된 목록들 중 하나 이상을 잠그거나 동결시킬 수 있다.
예시적인 DPE 인벤토리 엔진 수단, 예시적인 DPE 구성 최적화기 수단, 예시적인 모드 선택기 수단, 예시적인 콘볼루션 엔진 수단, 예시적인 풀링 엔진 수단, 및/또는 예시적인 완전-연결 엔진 수단은 하드웨어 프로세서 상에서 실행되는 소프트웨어에 의해 구현된다. 부가적으로 또는 대안적으로, 예시적인 DPE 인벤토리 엔진 수단, 예시적인 DPE 구성 최적화기 수단, 예시적인 모드 선택기 수단, 예시적인 콘볼루션 엔진 수단, 예시적인 풀링 엔진 수단, 및/또는 예시적인 완전-연결 엔진 수단은 대신, 원하는 기능성을 달성하기 위한 논리 연산들을 수행하도록 구조화된 논리 회로, 이를테면 ASIC, FPGA 등에 의해, 그리고/또는 그러한 회로들과 소프트웨어 및/또는 펌웨어의 조합에 의해 구현될 수 있다.
CNN 가속기(500)를 구현하는 예시적인 방식이 도 5에 예시되지만, 도 5에 예시된 요소들, 프로세스들, 및/또는 디바이스들 중 하나 이상이 조합되고, 분할되고, 재배열되고, 생략되고, 제거되고/거나 임의의 다른 방식으로 구현될 수 있다. 추가로, 도 13의 예시적인 DPE 인벤토리 엔진(1302), 예시적인 DPE 구성 최적화기(1304), 예시적인 모드 선택기(1306), 예시적인 콘볼루션 엔진(1308), 예시적인 풀링 엔진(1310), 예시적인 완전-연결 엔진(1312), 및/또는 더 일반적으로는 예시적인 CNN 가속기(1300)는, 하드웨어, 소프트웨어, 펌웨어, 및/또는 하드웨어, 소프트웨어, 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예컨대, 도 13의 예시적인 DPE 인벤토리 엔진(1302), 예시적인 DPE 구성 최적화기(1304), 예시적인 모드 선택기(1306), 예시적인 콘볼루션 엔진(1308), 예시적인 풀링 엔진(1310), 예시적인 완전-연결 엔진(1312), 및/또는 더 일반적으로는 예시적인 CNN 가속기(1300) 중 임의의 것은, 하나 이상의 아날로그 또는 디지털 회로(들), 논리 회로, 프로그래밍가능 프로세서(들), 프로그래밍가능 제어기(들), 그래픽 처리 유닛(들)(GPU(들)), 디지털 신호 프로세서(들)(DSP(들)), 주문형 집적 회로(들)(ASIC(들)), 프로그래밍가능 논리 디바이스(들)(PLD(들)), 및/또는 필드 프로그래밍가능 논리 디바이스(들)(FPLD(들))에 의해 구현될 수 있다. 순전히 소프트웨어 및/또는 펌웨어 구현을 포괄하도록 본 특허의 장치 또는 시스템 청구항들 중 임의의 청구항을 읽을 때, 예시적인 DPE 인벤토리 엔진(1302), 예시적인 DPE 구성 최적화기(1304), 예시적인 모드 선택기(1306), 예시적인 콘볼루션 엔진(1308), 예시적인 풀링 엔진(1310), 및/또는 예시적인 완전-연결 엔진(1312) 중 적어도 하나는, 이로써, 소프트웨어 및/또는 펌웨어를 포함하는, 비-일시적인 컴퓨터 판독가능 저장 디바이스 또는 저장 디스크, 이를테면, 메모리, 디지털 다기능 디스크(DVD), 콤팩트 디스크(CD), 블루-레이 디스크 등을 포함하도록 명백히 정의된다. 더 추가로, 도 13의 예시적인 CNN 가속기(1300)는, 도 13에 예시된 것들에 더하여 또는 그 대신에, 하나 이상의 요소, 프로세스, 및/또는 디바이스를 포함할 수 있고/거나 예시된 요소들, 프로세스들, 및 디바이스들 중 임의의 것 또는 그 전부 중 하나 초과를 포함할 수 있다. 본원에서 사용되는 바와 같이, "통신한다"와 그 변형들을 포함하는 문구는, 직접적인 통신 및/또는 하나 이상의 중간 구성요소를 통한 간접적인 통신을 포괄하며, 직접적인 물리(예컨대, 유선) 통신 및/또는 일정한 통신을 요구하지 않으며, 오히려, 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들 및/또는 일회성 이벤트들로의 선택적 통신을 부가적으로 포함한다.
도 13의 CNN 가속기(1300)를 구현하기 위한 예시적인 하드웨어 논리, 기계 판독가능 명령어들, 하드웨어 구현 상태 기계들, 및/또는 이들의 임의의 조합을 나타내는 흐름도들이 도 14-18에 도시된다. 기계 판독가능 명령어들은, 컴퓨터 프로세서, 이를테면, 도 19와 관련하여 아래에 논의된 예시적인 프로세서 플랫폼(1900)에 도시된 프로세서(1912)에 의한 실행을 위한 실행가능 프로그램 또는 실행가능 프로그램의 부분일 수 있다. 프로그램은, CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루-레이 디스크, 또는 프로세서(1912)와 연관된 메모리와 같은 비-일시적인 컴퓨터 판독가능 저장 매체 상에 저장된 소프트웨어로 구현될 수 있지만, 전체 프로그램 및/또는 그 부분들은 대안적으로, 프로세서(1912) 이외의 디바이스에 의해 실행될 수 있고/거나 펌웨어 또는 전용 하드웨어로 구현될 수 있다. 추가로, 예시적인 프로그램이 도 14-18에 예시된 흐름도들을 참조하여 설명되지만, 예시적인 CNN 가속기(1300)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예컨대, 블록들의 실행의 순서가 변경될 수 있고/거나 설명된 블록들 중 일부가 변경, 제거, 또는 조합될 수 있다. 부가적으로 또는 대안적으로, 블록들 중 임의의 블록 또는 그 전부는, 소프트웨어 또는 펌웨어를 실행하지 않고도 대응하는 동작을 수행하도록 구조화된 하나 이상의 하드웨어 회로(예컨대, 이산 및/또는 통합 아날로그 및/또는 디지털 회로, FPGA, ASIC, 비교기, 연산 증폭기(op-amp), 논리 회로 등)에 의해 구현될 수 있다.
위에 언급된 바와 같이, 도 14-18의 예시적인 프로세스들은 정보가 임의의 지속기간 동안(예컨대, 연장된 시간 기간들 동안, 영구적으로, 짧은 인스턴스들 동안, 일시적으로 버퍼링하는 동안, 및/또는 정보의 캐싱 동안) 저장되는 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 콤팩트 디스크, 디지털 다기능 디스크, 캐시, 랜덤 액세스 메모리 및/또는 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비-일시적인 컴퓨터 및/또는 기계 판독가능 매체 상에 저장된 실행가능 명령어들(예컨대, 컴퓨터 및/또는 기계 판독가능 명령어들)을 사용하여 구현될 수 있다. 본원에서 사용되는 바와 같이, 비-일시적인 컴퓨터 판독가능 저장 매체라는 용어는 임의의 유형의 컴퓨터 판독가능 저장 디바이스 및/또는 저장 디스크를 포함하고 전파 신호들을 배제하고 송신 매체를 배제하도록 명백하게 정의된다.
"포함" 및 "구비"(및 이들의 모든 형태들 및 시제들)는 제한을 두지 않는 용어들이도록 본원에서 사용된다. 따라서, 청구항이 전제부로서 또는 임의의 종류의 청구항 인용 내에서 "포함" 또는 "구비"의 임의의 형태(예컨대, 포함한다, 구비한다, 포함하는, 구비하는, 갖는 등)를 이용할 때마다, 이는, 부가적인 요소들, 용어들 등이 대응하는 청구항 또는 인용의 범위 밖에 속하지 않으면서 존재할 수 있다는 것이 이해되어야 한다. 본원에서 사용되는 바와 같이, "적어도"라는 문구가 예컨대 청구항의 전제부에서 연결어로서 사용될 ?, 이는, "포함" 및 "구비"가 제한을 두지 않는 것과 동일한 방식으로 제한을 두지 않는다. "및/또는" 및 "그리고/또는" 및 "~고/거나"라는 용어는, 예컨대, A, B, 및/또는 C와 같은 형태로 사용될 때, (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, 및 (7) A와 B와 C와 같은 A, B, C의 임의의 조합 또는 서브-세트를 지칭한다.
도 14는, 입력 이미지와 연관된 이미지 데이터를 처리하도록 도 5의 CNN 가속기(500) 및/또는 도 13의 CNN 가속기(1300)를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들(1400)을 나타내는 흐름도이다. 도 14의 예시적인 기계 판독가능 명령어들(1400)은 블록(1402)에서 시작되며, 여기서, 예시적인 CNN 가속기(1300)는 이용가능한 데이터 처리 요소(DPE)들을 인벤토리화한다. 예컨대, DPE 인벤토리 엔진(1302)은, 처리에 대한 DPE들(520)의 이용가능성, DPE들(520) 중 하나 이상의 구성 및/또는 모드 등을 결정할 수 있다.
블록(1404)에서, 예시적인 CNN 가속기(1300)는, DPE 리소스 활용률을 최대화하고 전력 소모를 최소화하도록 DPE 구성을 선택한다. 예컨대, DPE 구성 최적화기(1304)는, DPE 리소스 활용률을 증가시키고 전력 소모를 감소시키기 위해, 필터 크기, 처리될 입력 채널들의 양, 원하는 생성될 출력 채널들의 양 등에 기반하여, 1 * 256 콘볼루션 배열, 2 * 128 콘볼루션 배열 등을 사용하기로 결정할 수 있다. 그러한 예들에서, DPE 구성 최적화기(1304)는, 실질적으로 높은 DPE 리소스 활용률(예컨대, 75 % 활용률, 100 % 활용률 등)을 유지하면서 데이터 이동을 감소시켜(예컨대, 최소화하여) 전력 소모를 감소시키기 위해서, 입력 채널들 및 대응하는 계수들과 연관된 이미지 데이터 전체가 도 5의 CNN 가속기(500)에 완전히 저장될 수 있음을 보장하기 위해 입력 채널들의 양을 제한할 수 있다.
DPE 구성을 선택하는 것에 대한 응답으로, 예시적인 CNN 가속기(1300)는, 블록(1406)에서, DPE 구성이 하나 이상의 미사용 DPE를 유발 또는 초래하는지 여부를 결정한다. 연산 요건들이 64개의 입력 채널 및 192개의 출력 채널을 포함하는 예에서, DPE 구성 최적화기(1304)는, 4 * 64 콘볼루션 배열이 다른 콘볼루션 배열들(예컨대, 1 * 256, 2 * 128, 4 * 32 등)과 비교하여 더 높은 DPE 활용률을 초래한다는 것에 기반하여, 모든 입력들에 대해 3회 사이클링되는 4 * 64 콘볼루션 배열을 사용하기로 결정한다.
블록(1406)에서, 예시적인 CNN 가속기(1300)가, 미사용 DPE가 존재한다고 결정하는 경우, 제어는 블록(1408)으로 진행하여, 대안적인 DPE 구성을 생성하기 위해 CNN 가속기(1300)의 연산을 중단한다. 예컨대, DPE 구성 최적화기(1304)는, 이용가능한 DPE들(520)의 임계량이 연산에 대해 배정, 지정 등이 이루어질 때까지 CNN 가속기(1300)의 연산의 진행을 방지하거나 보류하기로 결정할 수 있다. 예컨대, DPE 구성 최적화기(1304)는, DPE 활용 임계치를 초과하게 DPE 활용률을 증가시키기 위해, DPE들(520)의 대안적인 콘볼루션 배열을 생성하기로 결정할 수 있다. 예컨대, 블록(1404)에서, DPE 구성 최적화기(1304)가 1 * 256 콘볼루션 배열을 선택한 경우, 64개의 미사용 DPE(520)는 콘볼루션 연산 전체에 걸쳐 75 %의 DPE 활용률을 초래할 것이고, 따라서, 0개의 미사용 DPE(520) 및 대응하는 100 % DPE 활용률을 초래할 4 * 64 콘볼루션 배열과 같은 다른 콘볼루션 배열들과 비교하여 더 긴 콘볼루션 시간을 유발한다.
그러한 예들에서는, 블록(1408)에서, DPE 구성 최적화기(1304)는, 4 * 64 콘볼루션 배열을 생성하고/거나 다른 방식으로 결정할 수 있다. 예컨대, DPE 구성 최적화기(1304)는, 4 * 64 콘볼루션 배열의 DPE 활용률이, (1) 이전에 생성된 콘볼루션 배열(예컨대, 1 * 256 콘볼루션 배열)의 DPE 활용률, 및/또는 (2) DPE 활용 임계치(예컨대, 75 % DPE 활용률, 90 % DPE 활용률 등)보다 큰 것에 기반하여 4 * 64 콘볼루션 배열을 사용하기로 결정할 수 있다. 예컨대, DPE 구성 최적화기(1304)는, 대응하는 DPE 활용률이 DPE 활용 임계치를 충족시키는 것(예컨대, DPE 활용률이 DPE 활용 임계치보다 큰 것)에 기반하여, 4 * 64 콘볼루션 배열을 생성하고 사용하기로 결정할 수 있다. 블록(1408)에서, 대안적인 DPE 구성을 생성하는 것에 대한 응답으로, 제어는 블록(1404)으로 되돌아가 블록(1408)에서 생성된 DPE 구성을 선택한다. 대안적으로, 미사용 DPE들(520)이 없는 것을 초래하거나 DPE 활용 임계치를 충족시키는 대안적인 DPE 구성이 존재하지 않는 경우, 제어는, (예컨대, 타임아웃 기간 이후, 하나 이상의 콘볼루션 배열의 DPE 활용률을 평가한 이후 등의 시점에) 블록(1406)으로부터 블록(1410)으로 진행하여 현재 DPE 구성으로 진행하거나, 대안적인 DPE 구성이 존재하지 않음을 표시하는 경고를 생성하거나, 또는 CNN 가속기(1300)의 연산을 중단할 수 있다.
블록(1406)에서, 예시적인 CNN 가속기(1300)가, 미사용 DPE가 존재하지 않는다고 결정하는 경우, 블록(1410)에서, CNN 가속기(1300)는 제어기 모드를 선택한다. 예컨대, 모드 선택기(1306)는, 임의적 풀링의 콘볼루션 모드, 중첩 풀링 모드, 또는 완전-연결 모드에서 연산하기로 결정할 수 있다.
임의적 풀링의 콘볼루션 모드를 선택하는 것에 대한 응답으로, 제어는 블록(1412)으로 진행하여 임의적 풀링 모드로 콘볼루션에서 연산하기 시작한다. 블록(1412)을 구현하는 데 사용될 수 있는 예시적인 프로세스는 도 15와 관련하여 아래에 설명된다. 예컨대, 제어기(502)는, 콘볼루션 모드, 풀링이 있는 콘볼루션 모드 등에서 연산할 것을 DPE들(520)에 지시할 수 있다.
중첩 풀링 모드를 선택하는 것에 대한 응답으로, 제어는 블록(1414)으로 진행하여 중첩 풀링 모드에서 연산하기 시작한다. 블록(1414)을 구현하는 데 사용될 수 있는 예시적인 프로세스는 도 16과 관련하여 아래에 설명된다. 예컨대, 제어기(502)는, 중첩 풀링 모드에서 연산할 것을 DPE들(520)에 지시할 수 있다.
완전-연결 모드를 선택하는 것에 대한 응답으로, 제어는 블록(1416)으로 진행하여 완전-연결 모드에서 연산하기 시작한다. 블록(1416)을 구현하는 데 사용될 수 있는 예시적인 프로세스는 도 17과 관련하여 아래에 설명된다. 예컨대, 제어기(502)는, 완전-연결 모드에서 연산할 것을 DPE들(520)에 지시할 수 있다. 블록(1412)에서의 임의적 풀링의 콘볼루션 연산, 블록(1414)에서의 중첩 풀링 연산, 또는 블록(1416)에서의 완전-연결 연산을 종결하는 것 및/또는 다른 방식으로 수행하는 것에 대한 응답으로, 예시적인 기계 판독가능 명령어들(1400)이 종결된다.
도 15는, 임의적 풀링의 콘볼루션을 수행하도록 도 5의 CNN 가속기(500) 및/또는 도 13의 CNN 가속기(1300)를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들(1412)을 나타내는 흐름도이다. 예시적인 기계 판독가능 명령어들(1412)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)의 블록(1412)을 구현할 수 있다. 도 15의 예시적인 기계 판독가능 명령어들(1412)은 블록(1502)에서 시작되며, 여기서, 예시적인 CNN 가속기(1300)는 CNN 가속기(1300)의 모드를 임의적 풀링의 콘볼루션으로 설정한다. 예컨대, 모드 선택기(1306)는, CNN 가속기(1300)를 임의적 풀링의 콘볼루션 모드를 위해 구성할 수 있다.
블록(1504)에서, 예시적인 CNN 가속기(1300)는, 입력 채널에 대해 최소 라인 수가 존재하는지 여부를 결정한다. 예컨대, 콘볼루션 엔진(1308)은, 관심 입력 채널을 콘볼빙하기 위한 최소 라인 수가 저장소에 존재하는지 여부를 결정할 수 있다. 예컨대, 도 5의 DMA 제어기(504)는, 하나 이상의 입력 채널이 데이터 저장소(506)에 처리되기 위해 필요한 데이터 라인 수를 송신할 수 있다.
블록(1504)에서, 예시적인 CNN 가속기(1300)가, 입력 채널에 대해 최소 라인 수가 존재하지 않는다고 결정하는 경우, 제어는 최소 라인 수가 이용가능해질 때까지 블록(1504)에서 대기한다. 블록(1504)에서, 예시적인 CNN 가속기(1300)가, 입력 채널에 대해 최소 라인 수가 존재한다고 결정하는 경우, 제어는 블록(1506)으로 진행하여 입력 채널의 콘볼루션을 시작한다. 예컨대, 콘볼루션 엔진(1308)은, 콘볼루션 출력 값들을 생성하기 위해, 도 10의 필터들(1010) 중 하나로 도 10의 입력 채널들(1002) 중 하나를 콘볼빙할 수 있다.
입력 채널의 콘볼루션을 시작하는 것에 대한 응답으로, 제어는 블록(1508)으로 진행하여 콘볼루션이 완료된지 여부를 결정한다. 예컨대, 콘볼루션 엔진(1308)은, 도 10의 입력 위치(1008)에 대한 값들 전체가 처리될 때까지 필터들(1010) 중 하나로 입력 채널들(1002) 중 하나를 콘볼빙할 수 있다. 블록(1508)에서, 예시적인 CNN 가속기(1300)가, 콘볼루션이 완료되지 않았다고 결정하는 경우, 제어는 콘볼루션이 완료될 때까지 대기하며, 그렇지 않은 경우, 제어는 블록(1510)으로 진행하여 처리할 입력들이 더 존재하는지 여부를 결정한다. 예컨대, 콘볼루션 엔진(1308)은, 처리될 부가적인 활성화 값들, 픽셀 값들 등이 입력 위치(1008)에 포함되어 있다고 결정할 수 있다.
블록(1510)에서, 예시적인 CNN 가속기(1300)가, 처리할 입력들이 더 존재한다고 결정하는 경우, 제어는 블록(1504)으로 되돌아가 부가적인 입력들을 처리하기 위한 최소 라인 수 존재하는지 여부를 결정한다. 블록(1510)에서, 예시적인 CNN 가속기(1300)가, 처리할 어떠한 입력도 남아 있지 않다고 결정하는 경우, 블록(1512)에서, CNN 가속기(1300)는 소계들을 누산한다(예컨대, 도 10의 입력 위치(1008)에 대응하는 콘볼루션 출력 값들의 합을 계산함). 예컨대, 콘볼루션 엔진(1308)은 소계들을 누산할 수 있다.
블록(1514)에서, 예시적인 CNN 가속기(1300)는, 풀링이 인에이블링되는지 여부를 결정한다. 예컨대, 모드 선택기(1306)는, 평균 풀링, 최대 풀링 등을 인에이블링하기로 결정할 수 있다. 블록(1514)에서, 예시적인 CNN 가속기(1300)가, 풀링이 인에이블링되지 않는다고 결정하는 경우, 제어는 블록(1518)으로 진행하여 출력 버퍼들에 기입한다. 예컨대, 콘볼루션 엔진(1308)은, 도 10의 입력 위치(1008)에 대한 콘볼루션 출력들의 누산된 값을 출력 버퍼로 출력하여 도 10의 출력 위치(1004)를 생성할 수 있다. 출력 버퍼들에 기입하는 것에 대한 응답으로, 도 15의 예시적인 기계 판독가능 명령어들(1412)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)로 되돌아가 종결된다. 예컨대, 콘볼루션 엔진(1308)은, 필터들(1010)로 콘볼빙되는 입력 채널들(1002)의 입력 위치(1008)에 대응하는 출력 위치(1004)를 생성한다. 그러한 예들에서, 콘볼루션 엔진(1308)은, 입력 채널들(1002)의 나머지 입력 위치들을 콘볼빙(예컨대, 반복적으로 콘볼빙)하여 출력 채널(1006)을 생성할 수 있다.
블록(1514)에서, 예시적인 CNN 가속기(1300)가, 풀링이 인에이블링된다고 결정하는 경우, 제어는 블록(1516)으로 진행하여 풀링 및 콘볼루션 비교들을 수행한다. 예컨대, 풀링 엔진(1310)은, 출력 채널(1006)의 풀 영역의 평균 값 또는 최대 값을 계산할 수 있다. 풀링 및 콘볼루션 비교들을 수행하여 풀 출력 값을 생성하는 것에 대한 응답으로, 제어는 블록(1518)으로 진행하여 풀 출력 값을 출력 버퍼들에 기입한다.
도 16은, 중첩 풀링을 수행하도록 도 5의 CNN 가속기(500) 및/또는 도 13의 CNN 가속기(1300)를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들(1414)을 나타내는 흐름도이다. 도 14의 예시적인 기계 판독가능 명령어들(1414)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)의 블록(1414)을 구현하는 데 사용될 수 있다. 도 14의 예시적인 기계 판독가능 명령어들(1414)은 블록(1602)에서 시작되며, 여기서, 예시적인 CNN 가속기(1300)는 CNN 가속기(1300)의 모드를 중첩 풀링으로 설정한다. 예컨대, 모드 선택기(1306)는, CNN 가속기(1300)를 중첩 풀링 모드를 위해 구성할 수 있다.
모드를 중첩 풀링으로 설정하는 것에 대한 응답으로, 블록(1604)에서, 예시적인 CNN 가속기(1300)는, 풀 영역에 대해 최소 라인 수가 존재하는지 여부를 결정한다. 예컨대, 풀링 엔진(1310)은, 풀 영역을 처리하기 위한 최소 라인 수가 저장소에 존재하는지 여부를 결정할 수 있다. 예컨대, 도 5의 DMA 제어기(504)는, 도 2의 풀 영역(212)이 데이터 저장소(506)에 처리되기 위해 필요한 데이터 라인 수를 송신할 수 있다.
블록(1604)에서, 예시적인 CNN 가속기(1300)가, 풀 영역에 대해 최소 라인 수가 존재하지 않는다고 결정하는 경우, 제어는 최소 라인 수가 이용가능해질 때까지 블록(1604)에서 대기한다. 블록(1604)에서, 예시적인 CNN 가속기(1300)가, 풀 영역에 대해 최소 라인 수가 존재한다고 결정하는 경우, 제어는 블록(1606)으로 진행하여, 최대 풀링을 위해 현재 값들을 저장된 값들과 비교하거나 평균 풀링을 위해 누산할 수 있다. 예컨대, 풀링 엔진(1310)은, 최대 풀링을 위해 구성될 때, 풀 영역의 값들을 비교(예컨대, 반복적으로 비교)하여 풀 영역의 최대 값을 결정할 수 있다. 다른 예들에서, 풀링 엔진(1310)은, 풀 영역의 값들을 누산하고, 풀 영역의 크기 및 풀 영역의 누산된 값들에 기반하여 풀 영역의 평균 값을 계산할 수 있다. 최대 풀 값 또는 평균 풀 값을 계산하는 것에 대한 응답으로, 도 16의 예시적인 기계 판독가능 명령어들(1414)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)로 되돌아가 종결된다.
도 17은, 완전-연결 연산을 수행하도록 도 5의 CNN 가속기(500) 및/또는 도 13의 CNN 가속기(1300)를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들(1416)을 나타내는 흐름도이다. 도 17의 예시적인 기계 판독가능 명령어들(1416)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)의 블록(1416)을 구현하는 데 사용될 수 있다. 도 17의 예시적인 기계 판독가능 명령어들(1416)은 블록(1702)에서 시작되며, 여기서, 예시적인 CNN 가속기(1300)는 CNN 가속기(1300)의 모드를 완전-연결 모드로 설정한다. 예컨대, 모드 선택기(1306)는, CNN 가속기(1300)를 완전-연결 모드를 위해 구성할 수 있다.
모드를 완전-연결 모드로 설정하는 것에 대한 응답으로, 예시적인 CNN 가속기(1300)는, N개의 완비 벡터(complete vector)를 보유하도록 계수 저장소를 구성한다. 예컨대, 도 5의 제어기(502)는, 도 4의 계수 어레이(404)를 도 5의 계수 저장소(508)에 송신할 것을 DMA 제어기(504)에 지시할 수 있다.
블록(1706)에서, 예시적인 CNN 가속기(1300)는, 벡터들의 병렬 처리에 대해 모든 DPE들을 가능하게 하기 위해 RAM에 데이터 행렬을 분배한다. 예컨대, 도 5의 제어기(502)는, 도 5의 메인 메모리(516)로부터 데이터 저장소(506)로 데이터(예컨대, 콘볼루션 출력 값들, 풀 출력 값들 등)를 송신할 것을 DMA 제어기(504)에 지시할 수 있고, 데이터 저장소(506)는 차례로, 연결 다중화기(510)를 통해 DPE들(520)에 데이터를 송신하며, 여기서, DPE들(520) 각각은 다른 DPE들(520)과 실질적으로 병렬로 도 4의 출력 어레이(406)의 일부분을 생성하고/거나 다른 방식으로 계산한다. 벡터들을 처리하는 것에 대한 응답으로, 도 17의 예시적인 기계 판독가능 명령어들(1416)은, 도 14의 예시적인 기계 판독가능 명령어들(1400)로 되돌아가 종결된다.
도 18은, 누산기를 구성(예컨대, 동적으로 구성)하도록 도 5의 CNN 가속기(500) 및/또는 도 13의 CNN 가속기(1300)를 구현하기 위해 실행될 수 있는 예시적인 기계 판독가능 명령어들(1800)을 나타내는 흐름도이다. 예시적인 기계 판독가능 명령어들(1800)은 블록(1802)에서 시작되며, 여기서, 예시적인 CNN 가속기(1300)는, 입력에 의해 요구되는 정수 비트 수를 결정한다. 예컨대, DPE 구성 최적화기(1304)는, 누산기(604)에 대한 입력 값이 17개의 정수 비트를 요구하고, 누산기(604)의 구성이 누산기(604)가 16개의 정수 비트를 처리할 수 있게 한다고 결정할 수 있다.
블록(1804)에서, 예시적인 CNN 가속기(1300)는, 요구되는 정수 비트 수가 현재 정수 비트 수보다 큰지 여부를 결정한다. 예컨대, DPE 구성 최적화기(1304)는, 17개의 정수 비트의 입력 값이 누산기(604)의 구성의 16개의 정수 비트보다 더 많은 정수 비트를 요구한다고 결정할 수 있다.
블록(1804)에서, 예시적인 CNN 가속기(1300)가, 요구되는 정수 비트 수가 현재 정수 비트 수보다 크다고 결정하는 경우, 제어는 블록(1810)으로 진행하여 FP16을 고정 소수점 포맷으로 변환한다. 블록(1804)에서, 예시적인 CNN 가속기(1300)가, 요구되는 정수 비트 수가 현재 정수 비트 수보다 적다고 결정하는 경우, 블록(1806)에서, CNN 가속기(1300)는, 정수 비트 수를 요구되는 수로 증가시키고 그에 따라 분수 비트 수를 감소시킴으로써 고정 소수점 포맷을 조정한다. 예컨대, DPE 구성 최적화기(1304)는, 정수 비트 수를 16개 정수 비트로부터 17개 정수 비트로 증가시켜 누산기(604)의 범위를 증가시키고, 분수 비트 수를 감소시켜 누산기(604)의 정밀도를 감소시킬 수 있다.
고정 소수점 포맷을 조정하는 것에 대한 응답으로, 블록(1808)에서, 예시적인 CNN 가속기(1300)는, 누산기를 업데이트된 고정 소수점 소수점 포맷에 정렬한다. 예컨대, DPE 구성 최적화기(1304)는, 이러한 예에서, 누산기(604)를 17개 정수 비트의 업데이트된 고정 소수점 포맷에 정렬할 수 있다. 블록(1808)에서 누산기를 정렬하는 것에 대한 응답으로, 블록(1810)에서, 예시적인 CNN 가속기(1300)는, FP16 입력을 고정 소수점 포맷으로 변환한다. 예컨대, 콘볼루션 엔진(1308), 풀링 엔진(1310), 완전-연결 엔진(1312) 등은, 누산기(604)에 대한 입력을 FP16으로부터 고정 소수점 포맷으로 변환할 수 있다.
블록(1812)에서, 예시적인 CNN 가속기는 입력을 누산된 값에 더한다. 예컨대, 콘볼루션 엔진(1308), 풀링 엔진(1310), 완전-연결 엔진(1312) 등은, 누산기(604)에 대한 입력 값을 이전에 저장된 값 또는 이전에 누산된 값에 더할 수 있다.
입력을 누산된 값에 더하는 것에 대한 응답으로, 예시적인 CNN 가속기(1300)는, 덧셈 오버플로우가 존재하는지 여부를 결정한다. 예컨대, DPE 구성 최적화기(1304)는, 누산기(604)의 정수 비트 수가 오버플로우를 방지하기에 충분하지 않다고 결정할 수 있다.
블록(1814)에서, 예시적인 CNN 가속기(1300)가, 덧셈 오버플로우가 존재한다고 결정하는 경우, 제어는 블록(1822)으로 진행하여, 누산기의 고정 소수점 포맷을 1만큼 조정하고 분수 비트를 1만큼 감소시킨다. 블록(1814)에서, 예시적인 CNN 가속기(1300)가, 덧셈 오버플로우가 존재하지 않는다고 결정하는 경우, 블록(1816)에서, CNN 가속기(1300)는 덧셈 결과가 전체 정수 비트 범위를 사용하는지 여부를 결정한다. 예컨대, DPE 구성 최적화기(1304)는, 전체 정수 비트 범위가 사용되고 있지 않음으로 인해 필요하지 않은 범위를 감소시키도록 1만큼 정수 비트 수를 감소시키고, 정밀도를 증가시켜 도 6의 누산기(604)의 연산을 최적화하고/거나 다른 방식으로 개선할 수 있다.
블록(1816)에서, 예시적인 CNN 가속기(1300)가, 덧셈 결과가 전체 정수 비트 범위를 사용한다고 결정하는 경우, 제어는 블록(1824)으로 진행하여, 덧셈 결과를 고정 소수점 포맷에 정렬하고 누산기에 배정한다. 예컨대, DPE 구성 최적화기(1304)는, 덧셈 결과가 누산기(604)의 전체 정수 비트 범위를 사용하는 것에 기반하여, 누산기(604)가 최적화된다고 결정할 수 있다.
블록(1816)에서, 예시적인 CNN 가속기(1300)가, 덧셈 결과가 전체 정수 비트 범위를 사용하지 않는다고 결정하는 경우, 블록(1818)에서, CNN 가속기(1300)는, 정수 비트 수가 12보다 큰지 여부를 결정한다. 예컨대, DPE 구성 최적화기(1304)는, 누산기(604)의 정수 비트 수가 12개의 정수 비트인 최소 임계 값을 초과하는지 여부를 결정하고, 그렇지 않은 경우, 정수 비트 수를 적어도 최소 임계 값과 동일한 값으로 증가시키기로 결정한다. 대안적으로, 최소 임계 값은 임의의 다른 정수 비트 수일 수 있다.
블록(1818)에서, 예시적인 CNN 가속기(1300)가, 정수 비트 수가 12보다 크지 않다고 결정하는 경우, 제어는 블록(1822)으로 진행하여, 정수 비트 수를 1만큼 증가시키고 분수 비트를 1만큼 감소시킴으로써 누산기의 고정 소수점 포맷을 조정한다. 예컨대, DPE 구성 최적화기(1304)는, 정수 비트 수를 증가시킴으로써 누산기(604)의 범위를 증가시킬 수 있지만, 분수 비트 수를 감소시킴으로써 누산기(604)의 정밀도를 감소시킬 수 있다. 고정 소수점 포맷을 조정하는 것에 대한 응답으로, 제어는 블록(1824)으로 진행하여 덧셈 결과를 고정 소수점 포맷에 정렬하고 누산기에 배정한다.
블록(1818)에서, 예시적인 CNN 가속기(1300)가, 정수 비트 수가 12보다 크다고 결정하는 경우, 블록(1820)에서, CNN 가속기(1300)는 정수 비트 수를 1만큼 감소시키고 분수 비트를 1만큼 증가시킴으로써 고정 소수점 포맷을 조정한다. 예컨대, DPE 구성 최적화기(1304)는, 정수 비트 수를 감소시킴으로써 누산기(604)의 범위를 감소시킬 수 있지만, 분수 비트 수를 증가시킴으로써 누산기(604)의 정밀도를 증가시킬 수 있다.
블록(1820)에서 고정 소수점 포맷을 조정하는 것에 대한 응답으로, 제어는 블록(1824)으로 진행하여 덧셈 결과를 고정 소수점 포맷에 정렬하고 누산기에 배정한다. 예컨대, DPE 구성 최적화기(1304)는, 덧셈 결과를 업데이트된 고정 소수점 포맷에 정렬하고 업데이트된 고정 소수점 포맷을 누산기(604)에 배정할 수 있다. 덧셈 결과를 고정 소수점 포맷에 정렬하고 누산기에 배정하는 것에 대한 응답으로, 도 18의 예시적인 기계 판독가능 명령어들(1800)은 종결된다.
도 19는, 도 13의 CNN 가속기(1300)를 구현하도록 도 14-18의 명령어들을 실행하기 위해 구조화된 예시적인 프로세서 플랫폼(1900)의 블록도이다. 프로세서 플랫폼(1900)은, 예컨대, 서버, 개인용 컴퓨터, 워크스테이션, 자기 학습 기계(예컨대, 신경망), 모바일 디바이스(예컨대, 셀 폰, 스마트 폰, 태블릿, 이를테면 아이패드(iPad™), 개인 휴대 정보 단말기(PDA), 인터넷 기기, DVD 플레이어, CD 플레이어, 디지털 비디오 레코더, 블루-레이 플레이어, 게이밍 콘솔, 개인용 비디오 레코더, 셋톱 박스, 헤드셋 또는 다른 착용가능 디바이스, 또는 임의의 다른 유형의 컴퓨팅 디바이스일 수 있다.
예시된 예의 프로세서 플랫폼(1900)은 프로세서(1912)를 포함한다. 예시된 예의 프로세서(1912)는 하드웨어이다. 예컨대, 프로세서(1912)는, 하나 이상의 집적 회로, 논리 회로, 마이크로프로세서, GPU, DSP, 또는 임의의 원하는 부류 또는 제조자로부터의 제어기들에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예컨대, 규소 기반) 디바이스일 수 있다. 이러한 예에서, 프로세서(1912)는, 도 13의 예시적인 CNN 가속기(1300), 예시적인 DPE 인벤토리 엔진(1302), 예시적인 DPE 구성 최적화기(1304), 예시적인 모드 선택기(1306), 예시적인 콘볼루션 엔진(1308), 예시적인 풀링 엔진(1310), 및 예시적인 완전-연결 엔진(1312)을 구현한다.
예시된 예의 프로세서(1912)는 로컬 메모리(1913)(예컨대, 캐시)를 포함한다. 예시된 예의 프로세서(1912)는, 버스(1918)를 통해, 휘발성 메모리(1914) 및 비-휘발성 메모리(1916)를 포함하는 메인 메모리와 통신한다. 휘발성 메모리(1914)는, 동기식 동적 랜덤 액세스 메모리(SDRAM), 동적 랜덤 액세스 메모리(DRAM), 램버스(RAMBUS®) 동적 랜덤 액세스 메모리(RDRAM®), 및/또는 임의의 다른 유형의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비-휘발성 메모리(1916)는, 플래시 메모리 및/또는 임의의 다른 원하는 유형의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(1914, 1916)에 대한 액세스는 메모리 제어기에 의해 제어된다.
예시된 예의 프로세서 플랫폼(1900)은 또한 인터페이스 회로(1920)를 포함한다. 인터페이스 회로(1920)는, 임의의 유형의 인터페이스 표준, 이를테면, 이더넷 인터페이스, 범용 직렬 버스(USB), 블루투스(Bluetooth®) 인터페이스, 근접장 통신(NFC) 인터페이스, 및/또는 PCI 익스프레스 인터페이스에 의해 구현될 수 있다.
예시된 예에서, 하나 이상의 입력 디바이스(1922)가 인터페이스 회로(1920)에 연결된다. 입력 디바이스(들)(1922)는, 사용자가 프로세서(1912)에 데이터 및/또는 명령들을 입력하는 것을 허용한다. 입력 디바이스(들)(1922)는, 예컨대, 오디오 센서, 마이크로폰, 카메라(정지화상 또는 비디오), 키보드, 버튼, 마우스, 터치스크린, 트랙-패드, 트랙볼, 이소포인트(isopoint) 디바이스, 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(1924)가 또한 예시된 예의 인터페이스 회로(1920)에 연결된다. 출력 디바이스들(1924)은, 예컨대, 디스플레이 디바이스들(예컨대, 발광 다이오드(LED), 유기 발광 다이오드(OLED), 액정 디스플레이(LCD), 음극선관 디스플레이(CRT), 인-플레이스 스위칭(IPS; in-place switching) 디스플레이, 터치스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커에 의해 구현될 수 있다. 따라서, 예시된 예의 인터페이스 회로(1920)는 전형적으로, 그래픽 드라이버 카드, 그래픽 드라이버 칩, 및/또는 그래픽 드라이버 프로세서를 포함한다.
예시된 예의 인터페이스 회로(1920)는 또한, 송신기, 수신기, 송수신기, 모뎀, 가정용 게이트웨이, 무선 액세스 포인트, 및/또는 네트워크(1926)를 통한 외부 기계들(예컨대, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터의 교환을 용이하게 하기 위한 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은, 예컨대, 이더넷 연결, 디지털 가입자 회선(DSL) 연결, 전화선 연결, 동축 케이블 시스템, 위성 시스템, 가시거리(line-of-site) 무선 시스템, 셀룰러 전화 시스템 등을 통해 이루어질 수 있다.
예시된 예의 프로세서 플랫폼(1900)은 또한, 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(1928)를 포함한다. 그러한 대용량 저장 디바이스들(1928)의 예들은, 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 콤팩트 디스크 드라이브들, 블루-레이 디스크 드라이브들, 복수 배열 독립 디스크(RAID) 시스템들, 및 디지털 다기능 디스크(DVD) 드라이브들을 포함한다.
도 14-18의 기계 실행가능 명령어들(1932)은, 대용량 저장 디바이스(1928)에, 휘발성 메모리(1914)에, 비-휘발성 메모리(1916)에, 및/또는 착탈식 비-일시적인 컴퓨터 판독가능 저장 매체, 이를테면 CD 또는 DVD 상에 저장될 수 있다.
전술한 것으로부터, 콘볼루션 신경망들의 콘볼루션 효율을 개선하는 예시적인 시스템들, 방법들, 장치, 및 제조 물품들이 개시되었다는 것이 인식될 것이다. 본원에 개시된 예들은, 복수의 필터들로 복수의 입력 채널들을 콘볼빙하여 출력 채널들의 복수의 출력 위치들을 실질적으로 병렬로 그리고/또는 다른 방식으로 실질적으로 동시에 생성함으로써 콘볼루션 연산들을 가속시킨다. 본원에 개시된 예들은, 연산 모드 또는 콘볼루션 배열 중 적어도 하나에 기반하여 입력 이미지 데이터 및 필터 계수들에 대해 저장 인스턴스들을 구성함으로써 향상된 콘볼루션 효율들을 제공한다. 본원에 개시된 예들은, 콘볼루션 연산 동안 입력 채널들의 입력 위치들에 한 번만 액세스하여 CNN 가속기 내에서의 데이터 이동들을 최소화하고/거나 감소시킴으로써, 감소된 전력의 개선된 콘볼루션 연산들을 제공한다.
예 1은 콘볼루션 효율을 개선하기 위한 장치를 포함하며, 장치는, 플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하기 위한 DPE 인벤토리 엔진, DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하기 위한 모드 선택기, DPE들 중 식별된 DPE들에 기반하여 DPE 활용률을 결정하기 위한 DPE 구성 최적화기, 및 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 DPE들 중 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하기 위한 콘볼루션 엔진을 포함한다.
예 2는 예 1의 장치를 포함하며, 여기서, 콘볼루션 엔진은, 콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 입력 위치에 대응하는 필터 계수들을 곱하고, 출력 채널의 출력 위치를 생성하기 위해 콘볼루션 출력들의 합을 계산하기 위한 것이다.
예 3은 예 2의 장치를 포함하며, 여기서, 출력 위치는 제1 출력 위치이고, 콘볼루션 엔진은, 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하고, 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하기 위한 것이다.
예 4는 예 3의 장치를 포함하며, 여기서, 콘볼루션 엔진은, 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하기 위한 것이다.
예 5는 예 1의 장치를 포함하며, 여기서, 콘볼루션 배열은 제1 콘볼루션 배열이고, DPE 활용률은 제1 DPE 활용률이고, DPE 구성 최적화기는, 제1 DPE 활용률을 DPE 활용 임계치와 비교하고, 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않을 때 콘볼루션 연산의 조장(facilitation)을 방지하고, 제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 DPE 활용 임계치와 비교하기 위한 것이고, 콘볼루션 엔진은, 비교에 기반하여, 제2 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 제2 콘볼루션 배열을 사용하여 콘볼루션 연산을 용이하게 하기 위한 것이다.
예 6은 예 1의 장치를 포함하며, 여기서, DPE 어레이는 256개의 DPE를 포함한다.
예 7은 예 1의 장치를 포함하며, 여기서, 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나이다.
예 8은 예 1의 장치를 포함하며, 여기서, 콘볼루션 엔진은, DPE들 중 식별된 DPE들을 실질적으로 병렬로 사용하여 콘볼루션 연산을 용이하게 한다.
예 9는 예 1의 장치를 포함하며, 여기서, 콘볼루션 엔진은, 누산기의 범위를 수정하기 위해 누산기의 정수 비트 수를 조정하는 것, 또는 누산기의 정밀도를 수정하기 위해 누산기의 분수 비트 수를 조정하는 것 중 적어도 하나에 의해 콘볼루션 연산을 용이하게 한다.
예 10은 명령어들을 포함하는 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 명령어들은, 실행될 때, 기계로 하여금 적어도, 플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하게 하고, DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하게 하고, DPE들 중 식별된 DPE들에 기반하여 DPE 활용률을 결정하게 하고, DPE 활용률이 DPE 활용 임계치를 충족시킬 때 DPE들 중 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하도록 한다.
예 11은 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 실행될 때, 기계로 하여금 적어도, 콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 입력 위치에 대응하는 필터 계수들을 곱하게 하고, 출력 채널의 출력 위치를 생성하기 위해 콘볼루션 출력들의 합을 계산하게 하는 명령어들을 더 포함한다.
예 12는 예 11의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 여기서, 출력 위치는 제1 출력 위치이고, 비-일시적인 컴퓨터 판독가능 저장 매체는, 실행될 때, 기계로 하여금 적어도, 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하게 하고, 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하게 하는 명령어들을 더 포함한다.
예 13은 예 11의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 실행될 때, 기계로 하여금 적어도, 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하게 하는 명령어들을 더 포함한다.
예 14는 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 여기서, 콘볼루션 배열은 제1 콘볼루션 배열이고, DPE 활용률은 제1 DPE 활용률이고, 비-일시적인 컴퓨터 판독가능 저장 매체는, 실행될 때, 기계로 하여금 적어도, 제1 DPE 활용률을 DPE 활용 임계치와 비교하게 하고, 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않을 때 콘볼루션 연산의 조장을 방지하게 하고, 제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 DPE 활용 임계치와 비교하게 하고, 비교에 기반하여, 제2 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 제2 콘볼루션 배열을 사용하여 콘볼루션 연산을 용이하게 하도록 하는 명령어들을 더 포함한다.
예 15는 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 여기서, DPE 어레이는 256개의 DPE를 포함한다.
예 16은 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 여기서, 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나이다.
예 17은 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 여기서, DPE들 중 식별된 DPE들은 실질적으로 병렬로 콘볼루션을 용이하게 한다.
예 18은 예 10의 비-일시적인 컴퓨터 판독가능 저장 매체를 포함하며, 실행될 때, 기계로 하여금 적어도, 누산기의 범위를 수정하기 위해 누산기의 정수 비트 수를 조정하게 하거나 누산기의 정밀도를 수정하기 위해 누산기의 분수 비트 수를 조정하게 하는 명령어들을 더 포함한다.
예 19는 콘볼루션 효율을 개선하기 위한 방법을 포함하며, 방법은, 플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하는 단계, DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하는 단계, DPE들 중 식별된 DPE들에 기반하여 DPE 활용률을 결정하는 단계, 및 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 DPE들 중 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하는 단계를 포함한다.
예 20은 예 19의 방법을 포함하며, 콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 입력 위치에 대응하는 필터 계수들을 곱하는 단계, 및 출력 채널의 출력 위치를 생성하기 위해 콘볼루션 출력들의 합을 계산하는 단계를 더 포함한다.
예 21은 예 20의 방법을 포함하며, 출력 위치는 제1 출력 위치이고, 방법은, 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하는 단계, 및 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하는 단계를 더 포함한다.
예 22는 예 21의 방법을 포함하며, 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하는 단계를 더 포함한다.
예 23은 예 19의 방법을 포함하며, 여기서, 콘볼루션 배열은 제1 콘볼루션 배열이고, DPE 활용률은 제1 DPE 활용률이고, 방법은, 제1 DPE 활용률을 DPE 활용 임계치와 비교하는 단계, 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않을 때 콘볼루션 연산의 조장을 방지하는 단계, 제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 DPE 활용 임계치와 비교하는 단계, 및 비교에 기반하여, 제2 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 제2 콘볼루션 배열을 사용하여 콘볼루션 연산을 용이하게 하는 단계를 더 포함한다.
예 24는 예 19의 방법을 포함하며, 여기서, DPE 어레이는 256개의 DPE를 포함한다.
예 25는 예 19의 방법을 포함하며, 여기서, 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나이다.
예 26은 예 19의 방법을 포함하며, 여기서, DPE들 중 식별된 DPE들은 실질적으로 병렬로 콘볼루션을 용이하게 한다.
예 27은 예 19의 방법을 포함하며, 여기서, 콘볼루션 연산을 용이하게 하는 단계는, 누산기의 범위를 수정하기 위해 누산기의 정수 비트 수를 조정하는 단계, 또는 누산기의 정밀도를 수정하기 위해 누산기의 분수 비트 수를 조정하는 단계 중 적어도 하나를 포함한다.
예 28은 콘볼루션 효율을 개선하기 위한 장치를 포함하며, 장치는, 플랫폼이 이용가능한 DPE 어레이에 포함된 DPE들을 식별하기 위한 제1 수단, DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하기 위한 제2 수단, DPE들 중 식별된 DPE들에 기반하여 DPE 활용률을 결정하기 위한 제3 수단, 및 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 DPE들 중 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하기 위한 제4 수단을 포함한다.
예 29는 예 28의 장치를 포함하며, 여기서, 제4 수단은, 콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 입력 위치에 대응하는 필터 계수들을 곱하고, 출력 채널의 출력 위치를 생성하기 위해 콘볼루션 출력들의 합을 계산하기 위한 것이다.
예 30은 예 29의 장치를 포함하며, 여기서, 출력 위치는 제1 출력 위치이고, 제4 수단은, 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하고, 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하기 위한 것이다.
예 31은 예 30의 장치를 포함하며, 여기서, 제4 수단은, 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하기 위한 것이다.
예 32는 예 28의 장치를 포함하며, 여기서, 콘볼루션 배열은 제1 콘볼루션 배열이고, DPE 활용률은 제1 DPE 활용률이고, 제3 수단은, 제1 DPE 활용률을 DPE 활용 임계치와 비교하고, 제1 DPE 활용률이 DPE 활용 임계치를 충족시키지 않을 때 콘볼루션 연산의 조장(facilitation)을 방지하고, 제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 DPE 활용 임계치와 비교하기 위한 것이고, 제4 수단은, 비교에 기반하여, 제2 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 제2 콘볼루션 배열을 사용하여 콘볼루션 연산을 용이하게 하기 위한 것이다.
예 33은 예 28의 장치를 포함하며, 여기서, DPE 어레이는 256개의 DPE를 포함한다.
예 34는 예 28의 장치를 포함하며, 여기서, 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나이다.
예 35는 예 28의 장치를 포함하며, 여기서, 제4 수단은, DPE들 중 식별된 DPE들을 실질적으로 병렬로 사용하여 콘볼루션 연산을 용이하게 한다.
예 36은 예 28의 장치를 포함하며, 여기서, 제4 수단은, 누산기의 범위를 수정하기 위해 누산기의 정수 비트 수를 조정하는 것, 또는 누산기의 정밀도를 수정하기 위해 누산기의 분수 비트 수를 조정하는 것 중 적어도 하나에 의해 콘볼루션 연산을 용이하게 한다.
본원에 개시된 예들은, 개개의 게이트웨이들에 대한 링크들을 통해 결합된 사물 인터넷(IoT) 네트워크들에 적용될 수 있다. 사물 인터넷(IoT)은, 많은 수의 컴퓨팅 디바이스들이 서로 그리고 인터넷에 상호연결되어 매우 낮은 수준들에서 기능성 및 데이터 획득을 제공하는 개념이다. 따라서, 본원에서 사용되는 바와 같이, IoT 디바이스는, 다른 IoT 디바이스들 및 인터넷과 같은 더 넓은 네트워크와 통신하는, 다른 것들 중에서도 감지 또는 제어와 같은 기능을 수행하는 반자율 디바이스를 포함할 수 있다.
종종, IoT 디바이스들은 메모리, 크기, 또는 기능성이 제한되며, 이는, 더 적은 수의 더 큰 디바이스와 유사한 비용으로 더 많은 수가 배치될 수 있게 한다. 그러나, IoT 디바이스는 스마트 폰, 랩톱, 태블릿, 또는 PC 또는 다른 더 큰 디바이스일 수 있다. 추가로, IoT 디바이스는, 스마트 폰 또는 다른 컴퓨팅 디바이스 상의 애플리케이션과 같은 가상 디바이스일 수 있다. IoT 디바이스들은, 데이터 저장, 프로세스 제어 등을 위해 IoT 디바이스들을 다른 IoT 디바이스들에 그리고 클라우드 애플리케이션들에 결합시키는 데 사용되는 IoT 게이트웨이들을 포함할 수 있다.
IoT 디바이스들의 네트워크들은, 상업용 및 가정용 자동화 디바이스들, 이를테면, 배수 시스템들, 배전 시스템들, 파이프라인 제어 시스템들, 발전 제어 시스템들, 조명 스위치들, 온도조절기들, 잠금장치들, 카메라들, 알람들, 움직임 센서들 등을 포함할 수 있다. IoT 디바이스들은, 예컨대, 시스템들을 제어하거나 데이터에 액세스하기 위해, 원격 컴퓨터들, 서버들 및 다른 시스템들을 통해 액세스가능할 수 있다.
인터넷 및 유사한 네트워크들의 향후의 성장은 매우 많은 수의 IoT 디바이스들을 수반할 수 있다. 따라서, 본원에 논의된 기법들의 맥락에서, 그러한 향후의 네트워킹에 대한 여러 혁신들은 모든 이러한 계층들이 아무 방해를 받지 않으면서 성장하고, 연결된 리소스들을 발견하여 액세스가능하게 하고, 연결된 리소스들을 숨기고 구획화하는 능력을 지원할 필요성을 해결할 것이다. 임의의 수의 네트워크 프로토콜 및 통신 표준이 사용될 수 있으며, 여기서, 각각의 프로토콜 및 표준은 특정 목적들을 해결하도록 설계된다. 추가로, 프로토콜들은, 위치, 시간, 또는 공간과 관계없이 동작하는 인간 액세스가능 서비스들을 지원하는 구조의 일부이다. 혁신들은, 서비스 전달 및 연관된 기반구조, 이를테면, 하드웨어 및 소프트웨어; 보안 향상들; 및 서비스 수준 및 서비스 전달 계약에 특정된 서비스 품질(QoS) 관점에 기반한 서비스들의 제공을 포함한다.
백본 링크들은, 광학 네트워크들을 비롯하여 임의의 수의 유선 또는 무선 기술을 포함할 수 있으며, 근거리 네트워크(LAN), 광역 네트워크(WAN), 또는 인터넷의 일부일 수 있다. 부가적으로, 그러한 통신 링크들은, 다양한 디바이스들의 상호연결을 용이하게 하는 다중화/역다중화 구성요소들의 사용을 포함하는, IoT 디바이스들 및 게이트웨이들 둘 모두 간의 광학 신호 경로들을 용이하게 한다.
네트워크 토폴로지는 임의의 수의 유형의 IoT 네트워크들, 이를테면, 블루투스 저에너지(BLE) 링크들을 사용하여 네트워크가 제공되는 메쉬 네트워크를 포함할 수 있다. 존재할 수 있는 다른 유형들의 IoT 네트워크들은, IEEE 802.11(Wi-Fi®) 링크들을 통해 IoT 디바이스들과 통신하는 데 사용되는 무선 근거리 네트워크(WLAN) 네트워크, LTE/LTE-A(4G) 또는 5G 셀룰러 네트워크를 통해 IoT 디바이스들과 통신하는 데 사용되는 셀룰러 네트워크, 및 저전력 광역(LPWA) 네트워크, 예컨대, 로라(LoRa) 협의체에 의해 반포된 LoRaWan 규격과 호환가능한 LPWA 네트워크 또는 국제 인터넷 표준화 기구(IETF; Internet Engineering Task Force)에 의해 반포된 규격과 호환가능한 저전력 광역 네트워크(LPWAN)들을 통한 IPv6을 포함한다. 추가로, 개개의 IoT 네트워크들은, LTE 셀룰러 링크, LPWA 링크, 또는 IEEE 802.15.4 표준, 이를테면 Zigbee®에 기반한 링크와 같은 임의의 수의 통신 링크를 사용하여 외부 네트워크 제공자(예컨대, 계층 2 또는 계층 3 제공자)와 통신할 수 있다. 개개의 IoT 네트워크들은 또한, 다양한 네트워크 및 인터넷 애플리케이션 프로토콜들, 이를테면 제약된 애플리케이션 프로토콜(CoAP)의 사용과 함께 동작할 수 있다. 개개의 IoT 네트워크들은 또한, 링크된 디바이스들 및 네트워크들의 클러스터 트리를 형성하는 링크들의 망을 제공하는 조정기 디바이스들과 통합될 수 있다.
이러한 IoT 네트워크들 각각은, 본원에서 설명된 것들과 같은 새로운 기술적 특징들에 대한 기회들을 제공할 수 있다. 개선된 기술들 및 네트워크들은, 포그(fog) 디바이스들 또는 시스템들로서의 IoT 네트워크들의 사용을 포함하여, 디바이스들 및 네트워크들의 기하급수적인 성장을 가능하게 할 수 있다. 그러한 개선된 기술들의 사용이 성장함에 따라, 직접적인 인간 개입을 필요로 하지 않는 자체 관리, 기능 발전, 및 협업을 위한 IoT 네트워크들이 개발될 수 있다. 개선된 기술들은 심지어, IoT 네트워크들이 중앙집중형 제어 시스템들 없이도 기능할 수 있게 할 수 있다. 따라서, 본원에서 설명된 개선된 기술들은, 현재 구현들을 훨씬 넘어서서 네트워크 관리 및 동작 기능들을 자동화하고 향상시키는 데 사용될 수 있다.
예에서, 이를테면 백본 링크들을 통한 IoT 디바이스들 사이의 통신들은, 인증, 권한부여, 및 계정(AAA; authentication, authorization, and accounting)에 대해 분산형 시스템에 의해 보호될 수 있다. 분산형 AAA 시스템에서, 상호연결된 이종 네트워크 기반구조에 걸쳐, 분산된 결제, 신용거래, 감사, 권한부여, 및 인증 시스템들이 구현될 수 있다. 이는, 시스템들 및 네트워크들이 자율적 동작들을 지향할 수 있게 한다. 이러한 유형들의 자율적 동작들에서, 기계들은 심지어 인적 리소스들과 계약을 맺고 다른 기계 네트워크들과 파트너쉽들을 협상할 수 있다. 이는, 상호 목적들의 달성 및 개략적인 계획된 서비스 수준 계약들에 대한 균형잡힌 서비스 전달을 허용할 뿐만 아니라, 계량, 측정, 추종성, 및 추적가능성을 제공하는 해결책들을 달성할 수 있다. 새로운 공급망 구조들 및 방법들의 생성은, 인간의 어떠한 관여도 없이 다수의 서비스들이 생성되어 가치를 창출하고 와해될 수 있게 할 수 있다.
그러한 IoT 네트워크들은, 사운드, 광, 전자 트래픽, 안면 및 패턴 인식, 냄새, 진동과 같은 감지 기술들을 IoT 디바이스들 간의 자율적 구성들 내에 통합함으로써 추가로 향상될 수 있다. 감각 시스템들의 통합은, 계약 상의 서비스 목적들, 편성, 및 서비스 품질(QoS) 기반 스워밍(swarming) 및 리소스들의 융합을 위한 서비스 전달의 조정 및 체계적이고 자율적인 통신을 허용할 수 있다.
다른 IoT 디바이스들뿐만 아니라 클라우드 네트워크와 통신하기 위해 IoT 디바이스들의 클러스터들이 구비될 수 있다. 이는, IoT 디바이스들이 디바이스들 사이에 애드-혹 네트워크를 형성할 수 있게 할 수 있어서, 그들이 단일 디바이스로서 기능할 수 있게 하며, 이는 포그 디바이스로 지칭될 수 있다.
IoT 디바이스들의 메쉬 네트워크와 통신하는 클라우드 컴퓨팅 네트워크는, 클라우드 컴퓨팅 네트워크의 에지에서 포그 디바이스로서 동작할 수 있다. IoT 디바이스들의 메쉬 네트워크는, 클라우드의 에지에서 동작하는 포그로 지칭될 수 있다.
포그는, 다수의 IoT 디바이스들이 예컨대 무선 링크들에 의해 서로 통신하는 대규모로 상호연결된 네트워크인 것으로 간주될 수 있다. 예로서, 이러한 상호연결된 네트워크는, 오픈 커넥티비티 재단(OCF; Open Connectivity Foundation™)에 의해 릴리스된 상호연결 규격을 사용하여 가능해질 수 있다. 이러한 표준은, 디바이스들이 서로를 발견하고 상호연결들을 위한 통신들을 설정할 수 있게 한다. 다른 상호연결 프로토콜들이 또한 사용될 수 있는데, 예컨대, 다른 것들 중에서도, 최적화된 링크 상태 라우팅(OLSR) 프로토콜, 모바일 애드-혹 네트워킹에 대한 더 양호한 접근법(B.A.T.M.A.N.; the better approach to mobile ad-hoc networking)의 라우팅 프로토콜, 또는 OMA 경량 M2M(LWM2M) 프로토콜을 포함한다.
IoT 디바이스들의 3개의 유형은, 게이트웨이들, 데이터 집성기들, 및 센서들을 포함하지만, 임의의 조합들의 IoT 디바이스들 및 기능성이 사용될 수 있다. 게이트웨이들은 클라우드와 포그 사이의 통신들을 제공하는 에지 디바이스들일 수 있고, 또한, 센서들로부터 획득된 데이터, 이를테면, 움직임 데이터, 흐름 데이터, 온도 데이터 등에 대한 백엔드 처리 기능을 제공할 수 있다. 데이터 집성기들은, 임의의 수의 센서로부터 데이터를 수집하고, 분석을 위해 백엔드 처리 기능을 수행할 수 있다. 결과들, 미가공 데이터, 또는 둘 모두가 게이트웨이들을 통해 클라우드로 전달될 수 있다. 센서들은, 예컨대, 데이터를 수집하는 것 및 데이터를 처리하는 것 둘 모두를 할 수 있는 완전한 IoT 디바이스들일 수 있다. 일부 경우들에서, 센서들은 기능성이 더 제한될 수 있어서, 예컨대, 데이터를 수집하고, 데이터 집성기들 또는 게이트웨이들이 데이터를 처리할 수 있게 한다.
임의의 IoT 디바이스로부터의 통신들은, IoT 디바이스들 중 임의의 IoT 디바이스 사이의 편리한 경로(예컨대, 가장 편리한 경로)를 따라 전달되어 게이트웨이들에 도달할 수 있다. 이러한 네트워크들에서, 다수의 상호연결들이 실질적인 중복성을 제공하여, 다수의 IoT 디바이스들이 손실되더라도 통신들이 유지될 수 있게 한다. 추가로, 메쉬 네트워크의 사용은, 전력이 매우 낮거나 기반구조로부터 멀리에 위치된 IoT 디바이스들이 사용될 수 있게 할 수 있는데, 그 이유는, 다른 IoT 디바이스에 연결하기 위한 범위가 게이트웨이들에 연결하기 위한 범위보다 훨씬 작을 수 있기 때문이다.
이러한 IoT 디바이스들로부터 제공되는 포그는, 클라우드의 에지에 위치된 단일 디바이스, 예컨대 포그 디바이스로서, 서버와 같은 클라우드 내의 디바이스들에 제공될 수 있다. 이러한 예에서, 포그 디바이스들로부터 비롯된 경고들이 포그 내의 특정 IoT 디바이스로부터 비롯된 것으로 식별됨이 없이 전송될 수 있다. 이러한 방식으로, 포그는, 다른 것들 중에서도, 데이터 분석, 데이터 집성, 기계 학습과 같은 처리 또는 데이터 집약적 작업들을 수행하기 위한 컴퓨팅 및 저장 리소스들을 제공하는 분산형 플랫폼으로 간주될 수 있다.
일부 예들에서, IoT 디바이스들은, 명령적 프로그래밍 양식을 사용하여 구성될 수 있는데, 예컨대, 각각의 IoT 디바이스가 특정 기능 및 통신 파트너들을 갖는다. 그러나, 포그 디바이스를 형성하는 IoT 디바이스들은 선언적 프로그래밍 양식으로 구성될 수 있어서, IoT 디바이스들이 그들의 동작들 및 통신들을 재구성할 수 있게 하는데, 이를테면, 조건들, 질의들, 디바이스 장애들에 대한 응답으로 필요한 리소스들을 결정할 수 있게 한다. 예로서, IoT 디바이스들에 의해 모니터링되는 장비의 서브-세트의 동작들에 관한, 서버에 위치된 사용자로부터의 질의는, 포그 디바이스가, 질의에 응답하는 데 필요한 IoT 디바이스들, 이를테면 특정 센서들을 선택하는 것을 초래할 수 있다. 그런 다음, 이러한 센서들로부터의 데이터는, 질의에 응답하기 위해 포그 디바이스에 의해 서버로 전송되기 전에, 센서들, 데이터 집성기들, 또는 게이트웨이들의 임의의 조합에 의해 집성 및 분석될 수 있다. 이러한 예에서, 포그 내의 IoT 디바이스들은, 흐름 센서들 또는 온도 센서들로부터의 데이터를 부가하는 것과 같이, 질의에 기반하여, 사용되는 센서들을 선택할 수 있다. 추가로, IoT 디바이스들 중 일부가 동작가능하지 않은 경우, 이용가능한 경우에는 포그 디바이스 내의 다른 IoT 디바이스들이 유사한 데이터를 제공할 수 있다.
특정 예시적인 시스템들, 방법들, 장치, 및 제조 물품들이 본원에 개시되었지만, 본 특허의 유효적용의 범위는 그에 제한되지 않는다. 반대로, 본 특허는, 본 특허의 청구항들의 범위 내에 명백히 속하는 모든 시스템들, 방법들, 장치, 및 제조 물품들을 포괄한다.

Claims (36)

  1. 콘볼루션 효율을 개선하기 위한 장치로서,
    플랫폼이 이용가능한 데이터 처리 요소(DPE; data processing element) 어레이에 포함된 DPE들을 식별하기 위한 DPE 인벤토리 엔진;
    상기 DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하기 위한 모드 선택기;
    상기 DPE들 중 상기 식별된 DPE들에 기반하여 DPE 활용률을 결정하기 위한 DPE 구성 최적화기; 및
    상기 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 상기 DPE들 중 상기 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하기 위한 콘볼루션 엔진을 포함하는, 콘볼루션 효율을 개선하기 위한 장치.
  2. 제1항에 있어서,
    상기 콘볼루션 엔진은,
    콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 상기 입력 위치에 대응하는 필터 계수들을 곱하고,
    출력 채널의 출력 위치를 생성하기 위해 상기 콘볼루션 출력들의 합을 계산하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  3. 제2항에 있어서,
    상기 출력 위치는 제1 출력 위치이고,
    상기 콘볼루션 엔진은,
    상기 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀(pool) 영역을 계산하고;
    상기 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  4. 제3항에 있어서,
    상기 콘볼루션 엔진은, 상기 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  5. 제1항에 있어서,
    상기 콘볼루션 배열은 제1 콘볼루션 배열이고, 상기 DPE 활용률은 제1 DPE 활용률이고,
    상기 DPE 구성 최적화기는,
    상기 제1 DPE 활용률을 상기 DPE 활용 임계치와 비교하고.
    상기 제1 DPE 활용률이 상기 DPE 활용 임계치를 충족시키지 않을 때 상기 콘볼루션 연산의 조장(facilitation)을 방지하고,
    제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 상기 DPE 활용 임계치와 비교하기 위한 것이고,
    상기 콘볼루션 엔진은, 상기 비교에 기반하여, 상기 제2 DPE 활용률이 상기 DPE 활용 임계치를 충족시킬 때 상기 제2 콘볼루션 배열을 사용하여 상기 콘볼루션 연산을 용이하게 하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  6. 제1항에 있어서,
    상기 DPE 어레이는 256개의 DPE를 포함하는, 콘볼루션 효율을 개선하기 위한 장치.
  7. 제1항에 있어서,
    상기 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나인, 콘볼루션 효율을 개선하기 위한 장치.
  8. 제1항에 있어서,
    상기 콘볼루션 엔진은, 상기 DPE들 중 상기 식별된 DPE들을 실질적으로 병렬로 사용하여 상기 콘볼루션 연산을 용이하게 하는, 콘볼루션 효율을 개선하기 위한 장치.
  9. 제1항에 있어서,
    상기 콘볼루션 엔진은, 누산기의 범위를 수정하기 위해 상기 누산기의 정수 비트 수를 조정하는 것, 또는 상기 누산기의 정밀도를 수정하기 위해 상기 누산기의 분수 비트 수를 조정하는 것 중 적어도 하나에 의해 상기 콘볼루션 연산을 용이하게 하는, 콘볼루션 효율을 개선하기 위한 장치.
  10. 명령어들을 포함하는 비-일시적인 컴퓨터 판독가능 저장 매체로서,
    상기 명령어들은, 실행될 때, 기계로 하여금 적어도,
    플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하게 하고;
    상기 DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하게 하고;
    상기 DPE들 중 상기 식별된 DPE들에 기반하여 DPE 활용률을 결정하게 하고;
    상기 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 상기 DPE들 중 상기 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하도록 하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  11. 제10항에 있어서,
    실행될 때, 상기 기계로 하여금 적어도,
    콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 상기 입력 위치에 대응하는 필터 계수들을 곱하게 하고;
    출력 채널의 출력 위치를 생성하기 위해 상기 콘볼루션 출력들의 합을 계산하게 하는 명령어들을 더 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  12. 제11항에 있어서,
    상기 출력 위치는 제1 출력 위치이고,
    상기 비-일시적인 컴퓨터 판독가능 저장 매체는, 실행될 때, 상기 기계로 하여금 적어도,
    상기 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하게 하고;
    상기 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하게 하는 명령어들을 더 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  13. 제12항에 있어서,
    실행될 때, 상기 기계로 하여금 적어도, 상기 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하게 하는 명령어들을 더 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  14. 제10항에 있어서,
    상기 콘볼루션 배열은 제1 콘볼루션 배열이고, 상기 DPE 활용률은 제1 DPE 활용률이고,
    상기 비-일시적인 컴퓨터 판독가능 저장 매체는, 실행될 때, 상기 기계로 하여금 적어도,
    상기 제1 DPE 활용률을 상기 DPE 활용 임계치와 비교하게 하고;
    상기 제1 DPE 활용률이 상기 DPE 활용 임계치를 충족시키지 않을 때 상기 콘볼루션 연산의 조장을 방지하게 하고;
    제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 상기 DPE 활용 임계치와 비교하게 하고;
    상기 비교에 기반하여, 상기 제2 DPE 활용률이 상기 DPE 활용 임계치를 충족시킬 때 상기 제2 콘볼루션 배열을 사용하여 상기 콘볼루션 연산을 용이하게 하도록 하는 명령어들을 더 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  15. 제10항에 있어서,
    상기 DPE 어레이는 256개의 DPE를 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  16. 제10항에 있어서,
    상기 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나인, 비-일시적인 컴퓨터 판독가능 저장 매체.
  17. 제10항에 있어서,
    상기 DPE들 중 상기 식별된 DPE들은 실질적으로 병렬로 콘볼루션을 용이하게 하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  18. 제10항에 있어서,
    실행될 때, 상기 기계로 하여금 적어도, 누산기의 범위를 수정하기 위해 상기 누산기의 정수 비트 수를 조정하게 하거나 상기 누산기의 정밀도를 수정하기 위해 상기 누산기의 분수 비트 수를 조정하게 하는 명령어들을 더 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
  19. 콘볼루션 효율을 개선하기 위한 방법으로서,
    플랫폼이 이용가능한 데이터 처리 요소(DPE) 어레이에 포함된 DPE들을 식별하는 단계;
    상기 DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하는 단계;
    상기 DPE들 중 상기 식별된 DPE들에 기반하여 DPE 활용률을 결정하는 단계; 및
    상기 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 상기 DPE들 중 상기 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하는 단계를 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  20. 제19항에 있어서,
    콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 상기 입력 위치에 대응하는 필터 계수들을 곱하는 단계; 및
    출력 채널의 출력 위치를 생성하기 위해 상기 콘볼루션 출력들의 합을 계산하는 단계를 더 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  21. 제20항에 있어서,
    상기 출력 위치는 제1 출력 위치이고,
    상기 방법은,
    상기 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하는 단계; 및
    상기 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하는 단계를 더 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  22. 제21항에 있어서,
    상기 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하는 단계를 더 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  23. 제19항에 있어서,
    상기 콘볼루션 배열은 제1 콘볼루션 배열이고, 상기 DPE 활용률은 제1 DPE 활용률이고,
    상기 방법은,
    상기 제1 DPE 활용률을 상기 DPE 활용 임계치와 비교하는 단계;
    상기 제1 DPE 활용률이 상기 DPE 활용 임계치를 충족시키지 않을 때 상기 콘볼루션 연산의 조장을 방지하는 단계;
    제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 상기 DPE 활용 임계치와 비교하는 단계; 및
    상기 비교에 기반하여, 상기 제2 DPE 활용률이 상기 DPE 활용 임계치를 충족시킬 때 상기 제2 콘볼루션 배열을 사용하여 상기 콘볼루션 연산을 용이하게 하는 단계를 더 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  24. 제19항에 있어서,
    상기 DPE 어레이는 256개의 DPE를 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  25. 제19항에 있어서,
    상기 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나인, 콘볼루션 효율을 개선하기 위한 방법.
  26. 제19항에 있어서,
    상기 DPE들 중 상기 식별된 DPE들은 실질적으로 병렬로 콘볼루션을 용이하게 하는, 콘볼루션 효율을 개선하기 위한 방법.
  27. 제19항에 있어서,
    상기 콘볼루션 연산을 용이하게 하는 단계는, 누산기의 범위를 수정하기 위해 상기 누산기의 정수 비트 수를 조정하는 단계, 또는 상기 누산기의 정밀도를 수정하기 위해 상기 누산기의 분수 비트 수를 조정하는 단계 중 적어도 하나를 포함하는, 콘볼루션 효율을 개선하기 위한 방법.
  28. 콘볼루션 효율을 개선하기 위한 장치로서,
    플랫폼이 이용가능한 DPE 어레이에 포함된 DPE들을 식별하기 위한 제1 수단;
    상기 DPE들 중 식별된 DPE들의 콘볼루션 배열을 결정하기 위한 제2 수단;
    상기 DPE들 중 상기 식별된 DPE들에 기반하여 DPE 활용률을 결정하기 위한 제3 수단; 및
    상기 DPE 활용률이 DPE 활용 임계치를 충족시킬 때 상기 DPE들 중 상기 식별된 DPE들을 사용하여 콘볼루션 연산을 용이하게 하기 위한 제4 수단을 포함하는, 콘볼루션 효율을 개선하기 위한 장치.
  29. 제28항에 있어서,
    상기 제4 수단은,
    콘볼루션 출력들을 생성하기 위해, (a) 입력 채널의 입력 위치의 활성화 값들과 (b) 상기 입력 위치에 대응하는 필터 계수들을 곱하고;
    출력 채널의 출력 위치를 생성하기 위해 상기 콘볼루션 출력들의 합을 계산하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  30. 제29항에 있어서,
    상기 출력 위치는 제1 출력 위치이고,
    상기 제4 수단은,
    상기 제1 출력 위치를 포함하는 출력 위치들을 포함하는 풀 영역을 계산하고;
    상기 풀 영역의 평균 값 또는 최대 값 중 적어도 하나를 계산하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  31. 제30항에 있어서,
    상기 제4 수단은, 상기 풀 영역의 적어도 하나의 평균 값 또는 최대 값에 대해, 바이어스 연산, 규모조정 연산, 파라미터 정류기 선형 유닛 연산, 또는 정류기 선형 유닛 연산 중 적어도 하나를 수행하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  32. 제28항에 있어서,
    상기 콘볼루션 배열은 제1 콘볼루션 배열이고, 상기 DPE 활용률은 제1 DPE 활용률이고,
    상기 제3 수단은,
    상기 제1 DPE 활용률을 상기 DPE 활용 임계치와 비교하고;
    상기 제1 DPE 활용률이 상기 DPE 활용 임계치를 충족시키지 않을 때 상기 콘볼루션 연산의 조장을 방지하고;
    제2 콘볼루션 배열과 연관된 제2 DPE 활용률을 상기 DPE 활용 임계치와 비교하기 위한 것이고,
    상기 제4 수단은, 상기 비교에 기반하여, 상기 제2 DPE 활용률이 상기 DPE 활용 임계치를 충족시킬 때 상기 제2 콘볼루션 배열을 사용하여 상기 콘볼루션 연산을 용이하게 하기 위한 것인, 콘볼루션 효율을 개선하기 위한 장치.
  33. 제28항에 있어서,
    상기 DPE 어레이는 256개의 DPE를 포함하는, 콘볼루션 효율을 개선하기 위한 장치.
  34. 제28항에 있어서,
    상기 콘볼루션 배열은 1 * 256, 2 * 128, 4 * 64, 8 * 32, 또는 16 * 16 콘볼루션 배열 중 적어도 하나인, 콘볼루션 효율을 개선하기 위한 장치.
  35. 제28항에 있어서,
    상기 제4 수단은, 상기 DPE들 중 상기 식별된 DPE들을 실질적으로 병렬로 사용하여 상기 콘볼루션 연산을 용이하게 하는, 콘볼루션 효율을 개선하기 위한 장치.
  36. 제28항에 있어서,
    상기 제4 수단은, 누산기의 범위를 수정하기 위해 상기 누산기의 정수 비트 수를 조정하는 것, 또는 상기 누산기의 정밀도를 수정하기 위해 상기 누산기의 분수 비트 수를 조정하는 것 중 적어도 하나에 의해 상기 콘볼루션 연산을 용이하게 하는, 콘볼루션 효율을 개선하기 위한 장치.
KR1020197037032A 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치 KR102670479B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020247017492A KR20240093932A (ko) 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201762508896P 2017-05-19 2017-05-19
US62/508,896 2017-05-19
PCT/EP2018/063231 WO2018211129A1 (en) 2017-05-19 2018-05-18 Methods, systems and apparatus to improve convolution efficiency

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020247017492A Division KR20240093932A (ko) 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치

Publications (2)

Publication Number Publication Date
KR20200022384A true KR20200022384A (ko) 2020-03-03
KR102670479B1 KR102670479B1 (ko) 2024-05-31

Family

ID=62712943

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197037032A KR102670479B1 (ko) 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치
KR1020247017492A KR20240093932A (ko) 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020247017492A KR20240093932A (ko) 2017-05-19 2018-05-18 콘볼루션 효율을 개선하기 위한 방법들, 시스템들, 및 장치

Country Status (6)

Country Link
US (2) US11449345B2 (ko)
JP (2) JP7072640B2 (ko)
KR (2) KR102670479B1 (ko)
CN (1) CN111133452B (ko)
DE (1) DE112018002566T5 (ko)
WO (1) WO2018211129A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230137489A (ko) * 2021-04-01 2023-10-04 퀄컴 인코포레이티드 적응형 동적 클록 및 전압 스케일링
KR20240077672A (ko) * 2022-11-24 2024-06-03 인하대학교 산학협력단 Fpga를 활용한 cnn 가속기 하드웨어 설계

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111133452B (zh) 2017-05-19 2024-07-23 莫维迪乌斯有限公司 用于提高卷积效率的方法、系统和装置
CN107832842B (zh) * 2017-11-28 2020-05-22 南京地平线机器人技术有限公司 针对折叠特征数据执行卷积运算的方法和装置
US11265540B2 (en) * 2018-02-23 2022-03-01 Sk Telecom Co., Ltd. Apparatus and method for applying artificial neural network to image encoding or decoding
US11468302B2 (en) * 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US11468145B1 (en) * 2018-04-20 2022-10-11 Perceive Corporation Storage of input values within core of neural network inference circuit
US10977338B1 (en) 2018-04-20 2021-04-13 Perceive Corporation Reduced-area circuit for dot product computation
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11501138B1 (en) 2018-04-20 2022-11-15 Perceive Corporation Control circuits for neural network inference circuit
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
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
JP7070239B2 (ja) * 2018-08-23 2022-05-18 株式会社明電舎 ニューラルネットワークの入出力制御方式
US11521009B2 (en) 2018-09-04 2022-12-06 Luminar, Llc Automatically generating training data for a lidar using simulated vehicles in virtual space
US11625245B2 (en) * 2018-09-28 2023-04-11 Intel Corporation Compute-in-memory systems and methods
US11861484B2 (en) * 2018-09-28 2024-01-02 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) hardware pre-processing and post-processing
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
CN109857460B (zh) * 2019-02-20 2021-09-21 南京华捷艾米软件科技有限公司 基于risc-v架构的矩阵卷积计算方法、接口、协处理器及系统
US11941533B1 (en) 2019-05-21 2024-03-26 Perceive Corporation Compiler for performing zero-channel removal
TWI719512B (zh) * 2019-06-24 2021-02-21 瑞昱半導體股份有限公司 使用像素通道置亂的卷積神經網路的演算方法與系統
JP7062617B2 (ja) * 2019-06-26 2022-05-06 株式会社東芝 演算装置および演算方法
US11537860B2 (en) * 2020-03-23 2022-12-27 Arm Limited Neural net work processing
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
CN111985549B (zh) * 2020-08-12 2023-03-31 中国科学院光电技术研究所 针对给定刚体目标进行部件自动定位识别的深度学习方法
CN112183732A (zh) * 2020-10-22 2021-01-05 中国人民解放军国防科技大学 卷积神经网络加速方法、装置和计算机设备
US20210117197A1 (en) * 2020-12-23 2021-04-22 Intel Corporation Multi-buffered register files with shared access circuits
US11494627B1 (en) 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US11726746B1 (en) * 2022-09-14 2023-08-15 Moffett International Co., Limited Vector operation acceleration with convolution computation unit

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160143505A (ko) * 2015-06-04 2016-12-14 삼성전자주식회사 신경망의 연산량을 줄이는 방법 및 시스템
KR20160143548A (ko) * 2015-06-04 2016-12-14 삼성전자주식회사 인공 신경 네트워크를 자동으로 조정하는 방법 및 장치

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4432481A (en) * 1982-06-14 1984-02-21 Owens-Illinois, Inc. Splice-in-register control
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US5949920A (en) * 1996-08-13 1999-09-07 Hewlett-Packard Co. Reconfigurable convolver circuit
JP2000132539A (ja) * 1998-10-28 2000-05-12 Matsushita Electric Ind Co Ltd 演算装置
US10572824B2 (en) * 2003-05-23 2020-02-25 Ip Reservoir, Llc System and method for low latency multi-functional pipeline with correlation logic and selectively activated/deactivated pipelined data processing engines
JP2009245381A (ja) 2008-03-31 2009-10-22 Fujitsu Ltd 積和演算回路、その設計装置、プログラム
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9613001B2 (en) * 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
CN104809426B (zh) * 2014-01-27 2019-04-05 日本电气株式会社 卷积神经网络的训练方法、目标识别方法及装置
JP6314628B2 (ja) * 2014-04-28 2018-04-25 株式会社デンソー 演算処理装置
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US20160379109A1 (en) * 2015-06-29 2016-12-29 Microsoft Technology Licensing, Llc Convolutional neural networks on hardware accelerators
US10726328B2 (en) * 2015-10-09 2020-07-28 Altera Corporation Method and apparatus for designing and implementing a convolution neural net accelerator
US10614354B2 (en) * 2015-10-07 2020-04-07 Altera Corporation Method and apparatus for implementing layers on a convolutional neural network accelerator
US10228911B2 (en) * 2015-10-08 2019-03-12 Via Alliance Semiconductor Co., Ltd. Apparatus employing user-specified binary point fixed point arithmetic
WO2018075052A1 (en) * 2016-10-20 2018-04-26 Intel Corporation Systems, apparatuses, and methods for fused multiply add
KR102499396B1 (ko) * 2017-03-03 2023-02-13 삼성전자 주식회사 뉴럴 네트워크 장치 및 뉴럴 네트워크 장치의 동작 방법
CN111133452B (zh) 2017-05-19 2024-07-23 莫维迪乌斯有限公司 用于提高卷积效率的方法、系统和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160143505A (ko) * 2015-06-04 2016-12-14 삼성전자주식회사 신경망의 연산량을 줄이는 방법 및 시스템
KR20160143548A (ko) * 2015-06-04 2016-12-14 삼성전자주식회사 인공 신경 네트워크를 자동으로 조정하는 방법 및 장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230137489A (ko) * 2021-04-01 2023-10-04 퀄컴 인코포레이티드 적응형 동적 클록 및 전압 스케일링
KR20240077672A (ko) * 2022-11-24 2024-06-03 인하대학교 산학협력단 Fpga를 활용한 cnn 가속기 하드웨어 설계

Also Published As

Publication number Publication date
US11449345B2 (en) 2022-09-20
DE112018002566T5 (de) 2020-01-30
KR20240093932A (ko) 2024-06-24
JP7328379B2 (ja) 2023-08-16
JP7072640B2 (ja) 2022-05-20
KR102670479B1 (ko) 2024-05-31
JP2020521263A (ja) 2020-07-16
US20230082613A1 (en) 2023-03-16
WO2018211129A1 (en) 2018-11-22
JP2022052773A (ja) 2022-04-04
CN111133452A (zh) 2020-05-08
US20200089506A1 (en) 2020-03-19
CN111133452B (zh) 2024-07-23

Similar Documents

Publication Publication Date Title
JP7328379B2 (ja) 畳み込み効率を向上させる方法、システム、及び装置
US10664310B2 (en) Memory access optimisation using per-layer computational mapping and memory allocation for CNN application
CN107239829B (zh) 一种优化人工神经网络的方法
US11954879B2 (en) Methods, systems and apparatus to optimize pipeline execution
US20190362235A1 (en) Hybrid neural network pruning
EP4100887A1 (en) Method and system for splitting and bit-width assignment of deep learning models for inference on distributed systems
CN111931901A (zh) 一种神经网络构建方法以及装置
KR102210693B1 (ko) 경계 비트맵을 이용하는 이미지 분류 개선 기법
US20210241068A1 (en) Convolutional neural network
CN116012633A (zh) 算子优化方法及相关设备
CN117311958A (zh) 支持模型部署的分布式算力网络资源分配方法及相关设备
JP2015088112A (ja) 制御装置、処理装置及び情報処理方法
Ahn et al. Scissionlite: Accelerating distributed deep neural networks using transfer layer
CN114830143A (zh) 含噪声的中型量子时代计算机的变化感知量子位移动方案
KR102614966B1 (ko) 대규모 그래프 알고리즘 연산을 위한 서브그래프 및 함수 할당을 위한 컴퓨팅 시스템 및 그의 방법
CN112613594B (zh) 算法编排方法、装置、计算机设备及存储介质
US20220198257A1 (en) Architecture for running convolutional networks on memory and mips constrained embedded devices
Taranco Serna Architectural strategies to enhance the latency and energy efficiency of mobile continuous visual localization systems
Altunay et al. Using Metaheuristic OFA Algorithm for Service Placement in Fog Computing.
JP2024041325A (ja) 演算装置
CN118211613A (zh) 一种模型处理方法及相关装置

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right