KR20230025325A - 스킵 논리를 사용한 비트 단위 곱 합 누산 - Google Patents

스킵 논리를 사용한 비트 단위 곱 합 누산 Download PDF

Info

Publication number
KR20230025325A
KR20230025325A KR1020220048056A KR20220048056A KR20230025325A KR 20230025325 A KR20230025325 A KR 20230025325A KR 1020220048056 A KR1020220048056 A KR 1020220048056A KR 20220048056 A KR20220048056 A KR 20220048056A KR 20230025325 A KR20230025325 A KR 20230025325A
Authority
KR
South Korea
Prior art keywords
value
sum
input
skip
bit
Prior art date
Application number
KR1020220048056A
Other languages
English (en)
Inventor
윈-산 콰
옌-쳉 치우
제 민 훙
멩-판 창
Original Assignee
타이완 세미콘덕터 매뉴팩쳐링 컴퍼니 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 타이완 세미콘덕터 매뉴팩쳐링 컴퍼니 리미티드 filed Critical 타이완 세미콘덕터 매뉴팩쳐링 컴퍼니 리미티드
Publication of KR20230025325A publication Critical patent/KR20230025325A/ko

Links

Images

Classifications

    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • 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/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Neurology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Complex Calculations (AREA)
  • Hardware Redundancy (AREA)
  • Communication Control (AREA)

Abstract

워드 단위 입력 및 비트 단위 가중치 방식으로 입력 벡터와 가중치 벡터의 곱의 부분 합 누산을 수행하기 위한 방법, 디바이스 및 시스템은 부분 누산 곱 합을 생성한다. 부분 누산 곱 합은 각 가중치 비트 이후에 문턱 조건과 비교되고, 부분 누산 곱 합이 문턱 조건을 충족할 때 합 누산의 잔여 계산이 스킵되는 것을 나타내기 위해 스킵 표시자가 표명(assert)된다.

Description

스킵 논리를 사용한 비트 단위 곱 합 누산{BITWISE PRODUCT-SUM ACCUMULATIONS WITH SKIP LOGIC}
[우선권 주장 및 교차 참조]
본 출원은 2021년 8월 13일에 출원된 미국 가출원 제63/232,915호 및 2021년 10월 12일에 출원된 미국 가출원 제63/254,574호의 이익을 주장하며, 이 가출원들은 여기에 참조로 포함된다.
승산 누산기는 워드 단위 비트 단위 방식(word-wise bit-wise manner)으로 각각의 가중화 데이터와 입력 데이터를 곱하는 데 사용될 수 있다. 이러한 연산의 출력은 인공 지능망에서 노드 간 접속을 형성하는 데 사용할 수 있다. 이러한 경우, 승산 누산의 출력은 활성화 함수에 제공될 수 있다. 그러한 활성화 함수 중 하나는 정류 선형 유닛(rectified linear unit), 즉, ReLU 활성화 함수이다. 함수로의 입력이 0보다 작으면 0이 반환되고, 그렇지 않으면 그 값이 반환된다.
본 개시의 양상은 첨부한 도면들과 함께 읽을 때 하기의 상세한 설명으로부터 가장 잘 이해된다. 업계의 표준적 관행에 따라, 다양한 피처(features)는 실제 크기대로 도시되지 않는 것이 주목된다. 실제로, 다양한 피처의 치수는 논의의 명료화를 위해 임의로 증가되거나 감소될 수 있다.
도 1은 일부 실시예에 따라 머신 러닝에서 이미지 데이터를 처리하는 데 자주 사용되는 3x3 컨볼루션의 예를 도시한다.
도 2는 일부 실시예에 따른 보다 일반적인 방식으로 도 1에 도시된 개념을 도시한다.
도 3은 일부 실시예에 따른 ReLU 활성화 함수를 도시한다.
도 4는 일부 실시예에 따라 하드웨어에서 MAC을 알고리즘적으로 구현하기 위한 입력 데이터, 가중치 벡터, 및 MAC의 이진 표현을 도시한다.
도 5는 일부 실시예에 따라 비트 단위 방식으로 입력 값 및 가중치 벡터를 처리하기 위한 수학 공식을 도시한다.
도 6은 일부 실시예에 따른 입력 I 및 가중치 벡터 W의 샘플 계산을 도시한다.
도 7 내지 도 12는 일부 실시예에 따른 스킵 평가(skip evaluation) 및 활성화 피처를 도시한다.
도 13은 일부 실시예에 따른 스킵 평가 및 활성화 피처에 대한 프로세스 흐름도(100)를 도시한다.
도 14 내지 도 17은 일부 실시예에 따른 MAC 스킵 회로의 회로 블록도의 다양한 뷰를 도시한다.
도 18 내지 도 22는 일부 실시예에 따른 MAC 스킵 회로의 동작의 다양한 뷰를 도시한다.
도 23a 및 23b는 일부 실시예에 따른 스킵 모듈에 문턱값을 제공하기 위한 흐름도를 도시한다.
도 24a, 24b 및 25는 일부 실시예에 따른 상태 머신 모델 및 신호 값을 도시한다.
도 26은 일부 실시예에 따른 MAC 스킵 회로를 포함하는 시스템도를 도시한다.
도 27은 일부 실시예에 따라 에너지 소비를 감소시키기 위해 MAC 스킵 회로를 사용하는 테스트 데이터로부터의 결과를 도시한다.
하기의 개시는 본 발명의 상이한 피처들을 구현하기 위한 다수의 상이한 실시예들 또는 예시들을 제공한다. 컴포넌트들 및 배열들의 특정 예시는 본 개시를 단순화시키기 위해 이하에서 설명된다. 물론, 이것들은 단지 예이고, 제한하는 것으로 의도되지 않는다. 예를 들어, 이하의 설명에서 제2 피처 위에 또는 제2 피처 상에 제1 피처의 형성은, 제1 피처와 제2 피처가 직접 접촉해서 형성되는 실시예를 포함할 수 있고, 추가적인 피처가 제1 피처와 제2 피처 사이에 형성될 수 있어서 제1 피처와 제2 피처가 직접 접촉될 수 없는 실시예를 또한 포함할 수 있다. 또한, 본 개시는 다양한 예들에서 참조 번호들 및/또는 문자들을 반복할 수 있다. 이 반복은 간략함과 명료함을 위한 것이고, 논의되는 다양한 실시예들 및/또는 구성들 간의 관계를 본질적으로 지시하지는 않는다. 신호는 하이 1 또는 로우 0으로 표명(assert)될 수 있으며, 여기서 사용된 '1'은 문맥 또는 관례에 의해 달리 언급되지 않는 한 '표명됨'을 의미하는 것으로 이해되어야 하며, 여기서 사용된 '0'은 문맥 또는 관례에 의해 달리 언급되지 않는 한 '표명되지 않음'을 의미하는 것으로 이해되어야 한다. 당업자는 디바이스 및 설계에 따라 필요에 따라 이러한 신호를 쉽게 반전시킬 수 있다.
인공 신경망 영역에서, 머신 러닝은 입력 데이터를 가져와 입력 데이터에 대해 어떤 계산을 수행한 다음 활성화 함수를 적용하여 데이터를 처리한다. 활성화 함수의 출력은 본질적으로 입력 데이터의 일부 단순화된 표현이다. 입력 데이터는 노드 계층의 데이터 노드일 수 있다. 도 1은 머신 러닝에서 이미지 데이터를 처리하는 데 자주 사용되는 3x3 컨볼루션의 예를 도시한다. 이미지(10)는 개별 픽셀(11)로 이루어진다. 이미지는 예를 들어, RGB(red-green-blue) 또는 HSL(hue-saturation-luminescence)과 같은 색상 공간으로 표현될 수 있으며 색상 공간 변수들 각각에 대해 하나의 값이 각 픽셀에 대해 할당된다. 이미지의 노드(12)는 3x3 픽셀 블록이며, 노드(12)의 각 픽셀(11)은 노드(12)의 픽셀(11)의 색상 공간 변수 각각에 대해 입력 값 I 1-9 를 가진다. 3x3 컨볼루션에서 한 가지 가능한 계산은 곱 합 계산(product-sum calculation)을 사용하며, 여기서 각 입력 값 I 1-9 는 가중화 행렬(14)의 가중화 값 W 1-9 와 각각 곱해진다. 각 곱셈이 수행되면 각 곱에 대해 임시 총계가 유지될 수 있다. 그러한 곱 합 계산은 승산 누산 컴퓨팅/계산(multiply accumulate computation/calculation; MAC)(16)으로 지칭될 수 있다. MAC(16)의 출력은 활성화 함수(18)에 제공된다. 3x3 컨볼루션에서, 사용되는 활성화 함수는 종종 정류 선형 활성화 함수(정류 선형 유닛, 즉, ReLU)이다. ReLU는 y = max(0, x)를 출력하는 조각 함수(piecewise function)이며, 여기서 x는 MAC(16)의 결과이다. 따라서 모든 음수 값은 0으로 설정되고 영이 아닌(non-zero) 값은 입력의 선형 항등원이다.
도 2는 도 1에 도시된 개념을 보다 일반적인 방식으로, 즉 임의의 길이 입력 노드에 대해 도시한다. 입력 I 0 - I N-1 각각에 가중치 벡터 W 0 - W N-1 이 각각 곱해진다. 그런 다음 이러한 값은 곱-합 계산(MAC)에서 합산되고 ReLU 활성화 함수가 적용된다. 출력 O는 ReLU 활성화 함수의 출력이다.
도 3은 ReLU 활성화 함수의 그래프와 ReLU 활성화 함수의 조각 함수 표현을 도시한다. 도 3의 그래프에서 볼 수 있듯이, x ≤ 0인 모든 x 값에 대해 값 y = 0이고 x > 0인 모든 x 값에 대해 값 y = x의 값이다. 특히 이 경우, x의 값이 0이면 함수의 어떤 구간이 사용되든 출력은 '0'이다(따라서 함수가 대신 y = {x, x ≥ 0 | 0, x < 0}으로서 정의되면 출력은 동일한다). ReLU 활성화 함수에 대해 몇 가지 수정이 이루어질 수 있다.
지금까지 이러한 계산은 일반적인 의미에서 논의되었다. 예를 들어, 다음 논리에서와 같이 입력(INPUT) 배열과 가중치(WEIGHT) 배열에 대해 MAC를 수행한 다음 MAC의 출력을 ReLU로 전달하는 간단한 for 루프를 포함하는 범용 프로세서에서 실행될 컴퓨터 프로그램을 작성할 수 있다.
카운터 정수를 0으로 초기화한다.
저장 변수(예컨대, MAC)를 0으로 초기화한다.
길이 n을 갖는 INPUT 배열에 입력 값을 제공한다.
길이 n을 갖는 WEIGHT 배열에 유부호(signed) 가중치 값을 제공한다.
For counter = 0, counter < n, counter++ {
MAC = MAC + (INPUT[counter] * WEIGHT[counter]).
}
Output = (0, MAC) 중의 최댓값.
출력 값을 제공한다.
대형 데이터 세트의 경우 범용 프로세서에서 실행하는 것은 비효율적이다. 효율성을 향상시키기 위해 이 알고리즘은 전용 하드웨어, 예를 들어, ASIC(application specific integrated circuit) 또는 FPGA(field programmable gate array)에서 구현될 수 있다. 그러나 예를 들어, ASIC와 같은 전용 하드웨어에서 이 논리를 구현하려면 디지털 논리 블록에서 이진 수학을 사용해야 한다. 이제 하드웨어에서 MAC(및 ReLU)를 구현하는 맥락에서 설명이 제공될 것이다. 하드웨어 구현은 MAC을 계산하고 ReLU를 이진 형식으로 구현하는 것을 포함한다.
도 4는 하드웨어에서 MAC을 알고리즘적으로 구현하기 위한, 입력 데이터, 가중치 벡터, 및 MAC의 이진 표현을 도시한다. 하드웨어 구현은 스킵 모듈과 관련하여 아래에서 더 자세히 논의된다. 입력 데이터는 노드의 데이터 포인트에 대한 무부호 값(예컨대, 크기)의 노드로서 표시된다. 입력 데이터는 N 비트의 길이를 갖는다. N은 예를 들어, 4비트, 8비트, 16비트 등일 수 있다. 예를 들어, N이 8이면 각 입력 값은 0과 255 사이이다. 가중치 벡터는 2의 보수 형식의 유부호 가중화 값이다. 따라서 음수는 최상위 비트(most significant bit; MSB)에서 1로 시작한다. 각 가중치 벡터의 길이는 K 비트이다. N은 K와 같거나 다른 값일 수 있다. 예를 들어, K가 8비트인 경우 각 가중화 값은 -128과 127 사이일 수 있다. 표기법에서 입력 값의 경우 i번째 입력은 노드의 입력 데이터 포인트의 입력 인덱스에 대응한다. 각 가중치는 가중치 벡터의 대응 i번째 가중치 인덱스를 가질 것이다. 다시 말해서, i번째 입력과 i번째 가중치 벡터의 일대일 상관관계가 존재한다. 대조적으로, 각 입력 또는 각 가중치 벡터의 j번째 비트는 좌측에서 우측으로이며 그래서 MSB는 0번째 비트이고 최하위 비트(least significant bit; LSB)는 입력의 (N-1)번째 비트와 가중치 벡터의 (K-1)번째 비트이다. N과 K는 상이한 값들을 가질 수 있으므로 입력 데이터의 j번째 위치의 총수는 가중치 벡터의 j번째 위치와 다를 수 있다. 표기법의 일례로, i=2이고 j=5인 Ii,j 비트는 제3 입력 데이터의 제6 비트에 대응한다. 유사하게, i=3이고 j=4인 Wi,j 비트는 제4 가중치 벡터의 제5 비트에 대응한다. 도 4에서 알 수 있듯이 MAC에서 발생하는 총 비트 수는 N + K + log2M과 같으며 가장 가까운 정수로 올림된다. 예를 들어, 노드의 입력 수가 9이고(예컨대, 9 포인트 컨볼루션에 대응함), N과 K가 각각 8이면, MAC 출력의 비트 수는 8 + 8 + Roundup(log29) = 20이다. 이 값은 Roundup(N + K + log2M)으로서 동일하게 표현될 수 있다.
도 5는 비트 단위 방식으로 입력 값 및 가중치 벡터를 처리하기 위한 수학 공식을 도시한다. 특히, 각 입력 값은 가중치 벡터의 각 비트와 곱해지고 각 반복 후에 합산된다. 방정식의 좌측에는 i개의 입력 및 대응하는 i개의 가중치 벡터의 합 곱에 대한 일반 공식이 있다. 수행될 수학은 이진 수학이므로, 이 방정식은 가중치 벡터의 부호 비트를 처리하기 위한 제1 항과 잔여 비트를 처리하기 위한 제2 항을 포함하는 방정식의 우측으로 나누어질 수 있다.
제1 항은 N-비트 무부호 입력과 각 유부호 K-비트 가중치 벡터의 부호 비트의 합산된 곱을 나타낸다. 도 4에서 알 수 있듯이 가중치 벡터의 MSB는 부호 비트를 보유하고 비트 j=0에 대해 가중치 벡터의 0번째 비트로서 표기된다. 제1 항은 입력에 가중치 벡터의 0번째 비트(부호 비트를 나타냄)를 곱하고 그 결과에 2K-1과 같은, 0번째 비트의 자릿값을 곱한다. 그런 다음, 이 결과는 음수 값으로서 기록된다. 기본적으로 입력과 부호 비트 간의 곱셈은 가중치 벡터의 최대 음수성(maximal negativity)을 설정한다. 예를 들어, 가중치 벡터가 8비트이고 음수이면 부호 비트는 27의 자릿값에서 '1'을 나타낸다. 이것은 입력의 2의 보수를 취하고 좌측으로 7번 시프트하는 것과 같다. 이것은 각 입력 Ii에 대해 반복적으로 수행되며 제1 항은 이들 모든 곱의 합산 결과를 나타낸다. 대응 가중치 벡터가 음수가 아닌 경우 0이 더해질 것이다.
제2 항은 두 개의 중첩된(nested) 합산 연산을 포함한다. 내부 합산은 가중치 벡터 W i 의 잔여 j 비트 각각에 입력 I i 를 곱하고 가중치 벡터 W i 의 대응 j번째 비트에 대한 자릿값을 곱한 합계를 나타낸다. 외부 합산은 각 입력 I i 및 가중치 벡터 W i 에 대해 내부 합산을 반복하고 이러한 합산 모두를 함께 더한다.
도 6은 M=1, N=8, K=8인 입력 I 및 가중치 벡터 W의 샘플 계산을 도시한다. I 0 = 77 (0100 1101)이고 W 0 = -116 (1000 1100)이다. 합산
Figure pat00001
에서, 제1 항은 -1·(0100 1101)·(1·27) = 1011 0011·27 = 1101 1001 1000 0000으로 조정될 수 있다(부호 비트가 추가 선행 '1'로 채워져 있음에 유의함). 제2 항은 77·(0·26)+77·(0·25)+77·(0·24)+ 77·(1·23)+77·(1·22)+77·(0·21)+77·(0·20)=77·23+77·22 = 616 (0010 0110 1000) + 308 (0001 0011 0100) = 924 (0011 1001 1100)으로서 조정될 수 있다. 제1 항은 제2 항에 더해져 합 -8932 (1101 1101 0001 1100)가 된다.
이 예에서 볼 수 있듯이 가중치 벡터가 음수일 때 비트 단위 계산이 가중치 벡터를 입력의 -128배로 설정하면, 최종 결과에 도달할 때까지 후속 비트는 양수 부분을 음수에 다시 더한다(이 음수가 덜 음수성(less negative)이 되게 함).
가중치 벡터가 양수인 경우 제1 항은 '0'이 되고 제2 항은 음수 가중치 벡터와 관련하여 보여진 것과 유사하게, 가중치 벡터의 잔여 비트의 비트 단위 합산이 될 것이다.
도 7 내지 12와 관련하여, 호환 가능한 활성화 함수(예컨대, ReLU 활성화 함수)와 함께 사용될 때, 입력 노드 및 대응하는 가중치 벡터의 MAC 합 곱 누산기의 계산 복잡도를 단순화하는 스킵 평가 및 활성화 피처(스킵 모듈이라고도 함)가 논의된다. 위에서 언급되었듯이, ReLU 활성화 함수는 예를 들어, MAX(0, 입력)의 출력을 제공하며, 여기서 입력은 MAC 곱 합과 같다. MAC 곱 합은 가중치 벡터의 비트가 반복적으로 처리됨에 따라 일련의 부분 누산을 통해 결정된다. 이와 같이 특정 반복 후 부분 누산 곱 합(partially accumulated product sum)이 결코 양수가 될 수 없는 것이라면(또는 활성화 함수의 조건을 결코 충족할 수 없다면) 잔여 계산이 스킵될 수 있다고 결정될 수 있다.
가중치 벡터 W가 반복적으로 비트 단위로 처리되는 경우, 각 반복 후에, 부분 곱 합 누산의 출력은 가중치 벡터 W의 잔여 비트 각각에 대해 가정된 "최악의 경우" 시나리오와 비교될 수 있다. "최악의 경우"는 가장 많은 계산 주기를 생성하는 경우, 즉 스킵 조건을 생성하지 않는 경우이다. 여기서 최악의 경우는 가중치 벡터 W의 잔여 비트 모두가 1과 동일한 것으로 추정되는 경우이다. 이것은 예를 들어, 8비트 가중치 벡터 W i 가 음수(즉, W i,0 = 1로 시작함)인 경우 0보다 작은 최소 음수가 -1(이진수로 모두 1)임을 의미한다. 그리고 W i 가 양수이면(즉, W i,0 = 0으로 시작함), 최댓수는 127이다(잔여 비트는 2진수로 1임).
도 7은 임의의 주어진 반복 n에 대한 가중치 벡터의 "미지의" 부분을 설명하는 합산 공식(30)을 도시한다. 도 7의 공식은 도 5의 공식과 유사한 공식을 도시한다. 이것은 부호 비트 합산 항(32)과 가중치 벡터의 잔여 비트에 대한 중첩 합산으로 분해되는 일반 곱 합 누산 공식(31)을 포함한다. 잔여 비트에 대한 중첩 합산은 첫 번째 n-비트(n>0)에 대한 제1 중첩 합 항(34)과 가중치 벡터의 잔여 K-1 비트에 대한 제2 중첩 합 항(36)으로 분해된다. 반복 n의 경우, 제1 중첩 합 항(34)은 n번째 비트를 처리한 후 가중치 벡터의 알려진 n비트의 합산된 곱이고 제2 중첩 합 항(36)은 n+1 비트에서 잔여 K-1 비트까지 가중치 벡터 W로부터의 잔여 비트를 포함한다. 위에서 언급한 바와 같이, 일부 실시예에서, 미지의 가중치 벡터 비트는 모든 비트가 1인 "최악의 경우"인 것으로 가정될 수 있다. 가중치 벡터가 MSB에서 LSB로 비트 단위로 처리됨에 따라 실제 가중치 벡터가 더 많이 알려지고 미지의 가정된 가중치 벡터의 비트 중요성이 각 반복마다 감소된다.
도 8 내지 도 12는 일부 실시예에 따른 스킵 모듈의 적용을 도시한다. 특히, 도 8 내지 12는 도 7의 합산 공식이 도 13의 흐름도(아래에서 논의됨)에 따라 어떻게 구현되는지를 보여준다. 도 8 내지 도 12 각각은, 각각 N=8 비트를 갖는 M=9 입력 벡터 I i 및 각각 K=8 비트를 갖는 M=9 가중치 벡터 W i 의 세트(set)를 도시한다. 각 입력 벡터의 값은 설명을 위해 무작위로 생성되었으며 77, 138, 179, 76, 175, 159, 153, 212, 128이다. 각 가중치 벡터의 값은 설명을 위해 무작위로 생성되었으며 -116, 76, 90, -83, 33, -8, -60, -98, -22이다. 이러한 숫자 각각에 대한 이진 표현은 도 8 내지 12에 또한 도시된다.
도 8 및 9는 반복 n=0인 합산 공식(30)의 계산을 도시한다. 반복 n=0인 경우 합산 공식은 첫 번째 가중치 비트 j=0에서 조정된다. 도 8은 각각의 입력 벡터에 각각의 가중치 벡터의 부호 비트를 곱하고 부호 비트의 자릿값(27)을 더 곱한 것을 도시한다. 가중치 벡터가 양수이면 부호 비트에 대한 비트 값은 '0'이고 '0'이 생성될 것이다. 가중치 벡터가 음수이면 부호 비트에 대한 비트 값은 '1'이고 누산 값은 입력 벡터의 음수에 27을 곱한 값과 같을 것이다. 이들 곱은 합산된다. 도 8에 도시된 바와 같이 이들 곱의 합은 -103,040이다. 이 값은 가능한 가장 음수성인 누산 값이다. 가중치 벡터의 모든 다른 비트가 '0'이면 출력 값은 -103,040이 될 것이다. 가중치 벡터의 임의의 잔여 비트가 '1'이면 해당 값으로 인해 누산 값이 덜 음수성이 되게 할 것이다. 따라서 모든 다른 연산은 누산 값에 영향을 미치지 않거나 긍정적인 영향만 미칠 것이다.
도 9는 잔여 두 항의 처리를 도시한다. 제1 중첩 합 항(34)(도 7 참조)은 합이 j=1에서 시작하기 때문에 그에 대한 연산이 발생하지 않는다. 이 경우 n=1, j=0이므로 제1 항에서 값이 생성되지 않는다. 제2 중첩된 합 항(36)은 "최악의 경우"로 가정되며, 이는 위에서 설명된 바와 같이 가장 많은 계산 주기를 야기하는 경우이다. 여기서 최종 누산 합이 0보다 큰 경우 가장 많은 계산 주기가 발생할 것이다. 이와 같이 잔여 가중치 벡터의 모든 비트가 '1'로 가정되는 최악의 경우가 취해질 수 있다. 이 값은 10진수로 127이므로 각 입력 값에 각각의 가정된 가중치 벡터에 대한 값 127을 곱한 다음 합산하여 숫자 164,719가 된다. 이 최악의 경우 합을 누산 값 -103,040과 비교하면 최종 값이 -103,040 + 164,719 = 61,679만큼 높을 수 있음을 알 수 있다. 이 값은 음수가 아니므로, 즉, 활성화 함수 후에 영이 아닌 값이 생성되므로 더 많은 비트가 처리될 필요가 있다.
도 10은 n=1, 즉 j=0,1인 합산을 도시한다. 여기서 j=0은 이미 -103,040으로 계산되었다. 여기서 j=1인 경우, 제1 중첩 합 항(34)(도 7 참조)에서, 각각의 입력 벡터(I i )는 대응하는 가중치 벡터(즉, W i,1 )에서 j=1 비트와 곱해지고, 그 값은 1 비트의 자릿값과 곱해진다(2K-j-1 -> 28-1-1 -> 26). 따라서 W i,1 = 0일 때 누산 값은 0이 될 것이고, W i,1 = 1일 때 누산 값은 각각의 입력에 26을 곱한 값이 될 것이다. 이들은 계산된 다음, 제1 중첩 합 항(34)의 외부 합산에 따라 합산된다. 이 예에서 합은 48,448이다. 이 값을 j=0 값에 더하면 총계는 -54,592이다.
도 10의 제2 중첩된 합 항(36)은 "최악의 경우"로 가정되며, 이는 위에서 설명한 바와 같이 가중치 벡터의 잔여 미지의 각 비트가 '1'로 가정되는, 가장 많은 계산 주기를 야기하는 경우이다. n=1인 경우, 이 값은 10진수로 63이므로 각 입력 값에 각각의 가정된 가중치 벡터에 대한 값 63을 곱한 다음 합산하여 숫자 81,711이 된다. 이 최악의 경우 합을 누산 값 -54,592와 비교하면 최종 값이 -54,592 + 81,711 = 27,119만큼 높을 수 있음을 알 수 있다. 이 값은 음수가 아니므로, 즉, 활성화 함수 후에 영이 아닌 값이 생성되므로 더 많은 비트가 처리될 필요가 있다. 가중치 벡터의 제2 비트(j=1)는 실제로 최악의 경우가 아니었기 때문에, 누산된 값과 최악의 경우 값 사이의 제2 비트를 처리한 후의 차이(27,119)는 위의 제1 비트만 처리한 후의 차이(61,679)보다 덜 양수성(less positive)이다.
도 11은 n=2, 즉, j=0,1,2인 합산을 도시한다. 여기서 j=0,1은 이미 -54,592으로 계산되었다. 여기서 j=2인 경우, 제1 중첩 합 항(34)(도 7 참조)에서, 각각의 입력 벡터(I i )는 대응하는 가중치 벡터(즉, W i,2 )에서 j=2 비트와 곱해지고, 해당 값은 2 비트의 자릿값과 곱해진다(2K-j-1 -> 28-2-1 -> 25). 따라서 W i,2 = 0일 때 누산 값은 0이 될 것이고, W i,2 = 1일 때 누산 값은 각각의 입력에 25을 곱한 값이 될 것이다. 이들은 계산된 다음, 제1 중첩 합 항(34)의 외부 합산에 따라 합산된다. 이 예에서 합은 17,216이다. 이 값을 j=0,1 값에 더하면 총계는 -37,376이다.
도 11의 제2 중첩된 합 항(36)은 "최악의 경우"로 가정되며, 이는 위에서 설명한 바와 같이 가중치 벡터의 잔여 미지의 각 비트가 '1'로 가정되는, 가장 많은 계산 주기를 야기하는 경우이다. n=2인 경우, 이 값은 10진수로 31이므로 각 입력 값에 각각의 가정된 가중치 벡터에 대한 값 31을 곱한 다음 합산하여 숫자 40,207가 된다. 이 최악의 경우 합을 누산 값 -37,376과 비교하면 최종 값이 -37,376 + 40,207 = 2,831만큼 높을 수 있음을 알 수 있다. 이 값은 음수가 아니므로, 즉, 활성화 함수 후에 영이 아닌 값이 생성되므로 더 많은 비트가 처리될 필요가 있다.
도 12는 n=3, 즉 j=0,1,2,3인 합산을 도시한다. 여기서 j=0,1,2는 이미 -37,376으로 계산되었다. 여기서 j=3인 경우, 제1 중첩 합 항(34)(도 7 참조)에서, 입력 벡터(I i ) 각각은 대응하는 가중치 벡터들(즉, W i,3 )에서 j=3 비트와 곱해지고, 그 값은 3 비트의 자릿값과 곱해진다(2K-j-1 -> 28-3-1 -> 24). 따라서 W i,3 = 0일 때 누산 값은 0이 될 것이고, W i,3 = 1일 때 누산 값은 각각의 입력에 24을 곱한 값이 될 것이다. 이들은 계산된 다음, 제1 중첩 합 항(34)의 외부 합산에 따라 합산된다. 이 예에서 합은 8,800이다. 이 값을 j=0,1,2 값에 더하면 총계는 -28,576이다.
도 12의 제2 중첩된 합 항(36)은 "최악의 경우"로 가정되며, 이는 위에서 설명된 바와 같이 가중치 벡터의 잔여 미지의 각 비트가 '1'로 가정되는 가장 많은 계산 주기를 야기하는 경우이다. n=3인 경우, 이 값은 10진수로 15이므로 각 입력 값에 각각의 가정된 가중치 벡터에 대한 값 15을 곱한 다음 합산하여 숫자 19,455가 된다. 이 최악의 경우 합을 누산 값 -28,576과 비교하면 최종 값이 -28,576 + 19,455 = -9121만큼 높을 수 있음을 알 수 있다. 이 값은 "최악의 경우" 시나리오에 대해 음수이므로 가중치 벡터에 대한 잔여 값이 음수가 아닌 값이 될 수 없다고 결정될 수 있다. 즉, 음수가 아닌 곱 합 누산을 초래할, n=4,5,6,7인 가중치 벡터의 잔여 비트에 대한 값은 없다. 누산 값은 가중치 벡터의 임의의 잔여 미처리 비트에 대해 항상 음수이므로 ReLU 활성화 함수에 전달될 때 결과는 항상 0이 될 것이다. 따라서 임의의 추가 비트를 처리하는 것은 자원 낭비이다. 이러한 상황에서 스킵 모듈은 스킵 신호를 활성화하고 다음 입력 블록이 처리될 것이다.
도 13은 스킵 평가 및 활성화 피처에 대한 프로세스 흐름도(100)를 도시한다. 110에서, MAC 합 곱 누산의 일부로서 워드 단위 입력 및 비트 단위 가중치 방식으로 부분 합 누산이 수행된다. 이러한 방식은 위에서 설명된 바와 같으며, 여기서 (임의 비트 길이의) 전체 무부호 입력 값에 유부호 가중치 벡터가 비트 단위 방식으로 곱해진다. 부분 합 누산 양상은 가중치 벡터가 비트 단위로 처리되는 반복 프로세스를 반영한다. 따라서, 110에서 가중치 벡터의 1비트가 처리된다. 120에서, 부분 누산 곱 합이 스킵 조건에 대해 평가된다. 스킵 조건은 대응 활성화 함수에 기초할 수 있다. 예를 들어, 일부 실시예에서 활성화 함수는 ReLU 활성화 함수일 수 있으므로 MAC 합 곱 누산의 출력이 음수이면 활성화 함수의 출력은 0이 된다. 따라서, 스킵 조건은 부분 누산 곱 합을 평가하여 MAC 합 곱이 양수 또는 음수일 가능성이 있는지 예측할 수 있다. 일부 실시예에서, 스킵 조건은 미리 정의된 문턱값에 기초할 수 있다(예컨대, 도 23a 및 23b 및 이들에 수반되는 설명 참조). 다른 실시예에서, 스킵 조건은 잔여 미처리 가중화 비트의 예측에 기초하여 동적으로 계산될 수 있다.
130에서, 부분 누산 곱 합이 스킵 조건을 충족하는 것으로 결정되면, 140에서 후속 동작이 스킵될 수 있음을 나타내는 신호가 표명된다. 후속 동작은 예를 들어, 메모리 액세스 판독 동작(예컨대, 입력 또는 가중치 값 로딩 등) 또는 계산 동작(예컨대, 후속 반복)을 포함할 수 있다. 130에서 부분 누산 곱 합이 스킵 조건을 충족하지 않는 것으로 결정되면, 150에서 모든 가중치 비트가 처리되었는지 여부가 결정될 것이다. 모든 가중치 비트가 처리되었으면 프로세스가 완료되고 부분 누산 곱 합이 누산되어 160에서 MAC 합 곱 출력이 된다. 160에서 출력이 결정된 후, 170에서 활성화 함수가 출력에 적용될 것이다. 150에서 모든 가중치 비트가 처리되지 않은 경우, 180에서 다음 가중치 비트가 진행(advance)될 것이고 프로세스가 110에서 반복될 것이다. 140 이후에 스킵 조건이 충족되고 신호가 후속 동작을 스킵하도록 표명되면 출력은 선택적으로 누산 곱 합으로서 취해질 수 있으며 170의 활성화 함수는 출력에 대해 수행될 수 있다.
도 14는 MAC 스킵 회로(200)의 하드웨어 구현의 고수준 회로 블록도를 도시한다. 일부 실시예에서, MAC 스킵 회로(200)는 단일 반도체 기판 상에 구현될 수 있다. 다른 실시예에서, MAC 스킵 회로(200)는 다수의 반도체 기판 상에 구현될 수 있고 필요에 따라 상호접속될 수 있다. 입력 블록(210)은 무부호 입력 벡터(205)로부터 입력 값을 취한다. 가중치 블록(220)은 유부호 가중치 벡터(215)로부터 입력을 취한다. 입력 벡터(205)는 가중치 벡터(215)의 다음 비트와 곱해진다(225). 다음 비트가 첫 번째 비트인 경우 결과는 2의 보수 형식으로 변환되고 가산 블록(230)에 의해 좌측으로 시프트된 부분 합(255)('0'으로 초기화되었을 것임)에 더해진 다음 새로운 부분 합(235)으로서 저장되며, 그렇지 않은 경우, 결과는 가산 블록(230)에 의해 좌측으로 시프트된 부분 합(255)에 더해진다. 가중치 벡터(215)의 모든 비트가 처리되면 부분 합(235)이 출력(240)으로서 취해진다. 그렇지 않으면, 각 반복 후에, 부분 합(235)은 스킵 조건이 존재하는지 여부를 결정하기 위해 스킵 모듈(245)에 의해 평가된다. 존재하면, 스킵 신호가 표명된다. 그렇지 않은 경우, 스킵 신호가 표명될 때까지 또는 K 비트의 잔여 부분이 처리될 때까지 가중치 벡터의 K 비트의 각 비트에 대해 프로세스가 다시 반복된다. 스킵 신호가 표명되면, 부분 합(235)이 출력(240)으로서 취해질 수 있고, 수정되어 출력(240)으로서 취해질 수 있거나, 또는 0이 출력(240)으로서 취해질 수 있다.
도 15는 일부 실시예에 따른 MAC 스킵 회로(200)의 보다 상세한 블록도를 도시한다. 유사한 참조는 도 14과 관련하여 위에서 논의된 MAC 스킵 회로(200)와 유사한 요소를 지칭하기 위해 사용된다. 동일한 레이블을 가진 핀(pins)은 모두 함께 결합되어 있음을 이해해야 한다(예컨대, 'x'로 레이블링된 출력 핀은 'x'로 레이블링된 입력 핀에 결합됨). 입력 벡터(205)는 M개의 N-비트 벡터의 세트를 포함한다. 입력 벡터(205)에서 입력 플립플롭(Flip Flop; FF)(210)으로 이어지는 화살표 라인의 슬래시는 하나의 라인이 다수의 라인을 도시하는 데 사용됨을 나타낸다. 일부 실시예에서, 입력 벡터(205) 각각에 대해 하나의 라인인, 입력 FF(210)로 이어지는 M개의 라인이 있을 수 있다. 일부 실시예에서 M개의 벡터 각각에 대해 N개의 라인이 있을 수 있거나 입력 FF(210)로 이어지는 N x M개의 라인이 있을 수 있다. 그러한 실시예에서, M개의 벡터의 각 비트는 병렬로 처리될 수 있다. 입력 벡터(205)는 한 번에 1비트씩 래치될 수 있거나 워드 단위 방식으로, 예를 들어, 한 번에 8비트씩 래치될 수 있다.
입력 FF(210)는 입력 벡터(205)를 MAC 스킵 회로(200)에 래치하는데 사용되는 플립플롭 회로 블록이다. IN_LAT 핀은 활성화될 때 입력 FF(210)가 입력 벡터(205)를 입력 FF(210) 플립플롭으로 래치하게 하는 입력 FF(210)에 대한 래치 신호 입력을 제공한다. RST 핀은 MAC 스킵 회로(200)(입력 FF(210) 플립플롭을 포함함)의 상태가 초기 리셋 상태로 복귀하게 할 수 있는 다양한 블록에 제공될 수 있는 범용 리셋 신호를 수용하기 위한 입력 FF(210) 플립플롭에 대한 리셋 신호 입력이다. 일부 실시예에서, 입력 FF(210)는 각각의 입력 벡터(205)의 각 비트, 즉 MxN개의 플립플롭 상태를 수용하기에 충분한 플립플롭 상태를 포함한다. 플립플롭은 일련의 레지스터, 예를 들어, M개의 입력 벡터(205) 각각에 대한 하나의 N 비트 레지스터에 배열될 수 있다.
가중치 FF(220)는 가중치 벡터(215)를 MAC 스킵 회로(200)에 래치하는데 사용되는 플립플롭 회로 블록이다. W_LAT 핀은 가중치 FF(220)에 대한 래치 신호 입력을 제공하며, 이는 활성화될 때 가중치 FF(220)가 가중치 벡터(215)를 가중치 FF(220) 플립플롭에 래치하게 한다. RST 핀은 MAC 스킵 회로(200)(가중치 FF(220) 플립플롭을 포함함)의 상태가 초기/리셋 상태로 복귀하게 할 수 있는 다양한 블록에 제공될 수 있는 범용 리셋 신호를 수용하기 위한 가중치 FF(220) 플립플롭에 대한 리셋 신호 입력이다. 일부 실시예에서, 가중치 FF(220)는 모든 가중치 벡터(215)를 래치하고 M개의 K 비트 가중치 벡터(215)를 수용하기에 충분한 플립플롭 상태, 즉, M x K개의 플립플롭 상태를 갖는다. 다른 실시예에서, 가중치 FF(220)는 MSB, 즉, K 플립플롭 상태로 시작하여 가중치 벡터(215) 각각으로부터 한 번에 한 비트만을 래치한다. 가중치 FF(220)의 출력은 가중치 벡터(215) 각각에 대해 동일한 자릿값에 대한 각 가중치 비트의 병렬 출력을 포함할 수 있다.
승산기(225)는 입력 FF(210)에 래치된 입력 벡터(205) 각각을 가중치 FF(220)에 래치된 각각의 개별 가중치 벡터(215)와 비트 단위 방식으로 곱하는 데 사용되는 승산기 회로 블록이다. 다시 말해서, 가중치 벡터(215) 각각으로부터 한 비트만이 각각의 입력 벡터(205)에 대해 한 번에 곱해진다. 승산기(225)는 또한 Flow_Thru 핀을 포함하며, 이 핀은 활성화되면 승산기(225)가 가중치 FF(220)로부터의 비트 값에 관계없이 입력 벡터(205)를 통과하게 한다.
도 14의 가산 블록(230)은 가산기(230a)와 누산기(230b)로 분해된다. 가산기(230a)는 비트 가중화된 입력 벡터(205) 각각을 합산하기 사용되는 가산기 회로 블록이다. 도시된 바와 같이 가산기 트리 회로 블록이 사용되지만, 다른 유형의 가산기가 사용될 수 있다. 가산기 전략은 전달된(carried) 비트를 유지한다. 가산기(230a)의 출력 비트 수는 각 입력 벡터의 비트 수(N) 및 입력 벡터의 수(M)와 관련이 있다. 가산기는 N + Roundup(log2M) 비트를 출력할 것이다. 따라서 9개의 8비트 입력 벡터의 예시 컨볼루션의 경우 가산기는 8 + 4 = 12 비트를 출력할 것이다. 가산기(230a)의 출력 핀은 누산기(230b)를 위한 입력 핀에 결합된다.
누산기(230b)는 기본적으로 입력되는 합 곱을 비트 시프트된 이전 합 곱에 더하는 2x1 가산기 회로 블록이며, 이는 누산기(230b)인 경우 또는 다른 입력 핀으로 누산기(230b)로 피드백된다. 누산기(230b)는 활성화될 때 누산기(230b)가 두 입력을 빼기보다는 두 입력을 합산하도록 지시하는 ADD 핀을 포함한다. 누산기(230b)의 출력은 시프트 레지스터(235)의 입력 핀에 그리고 스킵 모듈(245)의 입력 핀에 제공된다.
시프트 레지스터(235)는 시프트 능력을 갖는 레지스터에 배열된 다수의 플립플롭을 포함한다. 시프트 레지스터(235)는 활성화될 때 시프트 레지스터(235)가 시프트 레지스터(235)의 내용을 좌측으로 시프트하게 하는 시프트(255) 입력 핀을 포함한다. 시프트 레지스터(235)는 또한 누산기(230b)의 출력을 시프트 레지스터(235)에 래치하기 위한 래치 신호 입력을 제공하는 ACC_LAT 핀을 포함한다. RST 핀은 시프트 레지스터(235)가, MAC 스킵 회로(200)(시프트 레지스터(235)를 포함함)의 상태가 초기/리셋 상태로 복귀하게 할 수 있는, 다양한 블록들에 제공될 수 있는 범용 리셋 신호를 수용하기 위한 리셋 신호 입력이다.
스킵 모듈(245)은 스킵 조건이 발생하는지 여부를 결정하는 회로 블록이다. 스킵 모듈에 대한 세부사항은 도 17과 관련하여 아래에서 더 자세히 논의된다. 스킵 모듈(245)은 누산기(230b)의 출력을 수신하기 위한 입력 핀 및 스킵 신호를 제어기(260)에 제공할 수 있는 출력 핀(SKIP(250))을 포함한다. RST 핀은 스킵 모듈(245)이, MAC 스킵 회로(200)(스킵 모듈(245)을 포함함)의 상태가 초기/리셋 상태로 복귀하게 할 수 있는, 다양한 블록들에 제공될 수 있는 범용 리셋 신호를 수용하기 위한 리셋 신호 입력이다.
제어기(260)는 상태 머신을 포함하고 위에서 설명한 도 15의 다양한 회로 블록들 사이의 상호 작용을 제어하는 데 필요한 신호를 구동하는 회로 블록이다. 제어기(260)는 다음에 더 상세히 논의된다.
도 16은 제어기(260) 회로 블록의 블록도를 도시한다. 제어기(260)는 유한 상태 머신(finite state machine; FSM)(305) 회로 블록, 상태 논리(310) 회로 블록, 카운터(counter; CNT)(315) 회로 블록, 카운터 논리(CNT 논리)(320) 회로 블록, 디코딩된 상태 플립플롭(state flip flop; SFF)(325) 회로 블록, 제어 신호용 논리(330) 회로 블록, 및 점프(JMP) 논리(335) 회로 블록을 포함한, 여러 서브회로 블록(sub-circuit blocks)을 포함한다. 제어기(260)는 SKIP(스킵)(250) 신호 입력, 시작(START) 신호 입력, 다음(NEXT) 신호 입력, 및 RST 신호 입력을 수신하기 위한 핀을 가지며, 각각은 동일한 이름의 핀 상에서 수신된다. 제어기(260)는 IN_LAT 신호, W_LAT 신호, ACC_LAT 신호, ADD 신호, 시프트(255) 신호, SKIPFF_LAT 신호, SKIPSR_LAT 신호, SkipSHIFT 신호, Flow_Thru 신호, 및 OUT_RDY 신호를 포함하는 제어 신호를 제공하기 위한 핀을 가지며, 이들 각각은 동일한 이름의 핀 상에서 제공된다. 이러한 제어 신호는 제어 신호를 위한 논리부(330)에 의해 제공된다.
SKIP(250) 핀은 아래에서 더 자세히 논의되는 스킵 모듈(245)로부터 신호를 수신한다. NEXT 핀은 제어기(260)가 상태 머신에서 다음 상태로 진행해야 하는지 여부를 나타내는 신호를 수신한다. NEXT 핀에 의해 수신된 신호는 상태 머신이 다음 단계로 진행해야 함을 나타내기 위해 토글될 수 있다. NEXT 핀에 의해 수신된 신호는 시스템 외부에서 올 수 있으며 시스템 제어에 도움이 된다. START 핀은 상태 머신이 첫 번째 상태에서 두 번째 상태로 이동해야 함을 나타내는 신호를 수신한다. 논리부는 START 핀 신호를 NEXT 토글과 결합하여 START=1이고 NEXT가 토글될 때 상태 머신이 다음 상태로 진행되도록 할 수 있다. START 핀에 의해 수신된 신호는 시스템 외부에서 올 수 있으며 시스템 제어에 도움이 된다. RST 핀은 제어기(260)가 모든 래치 및 상태를 초기 상태로 재설정해야 하는지 여부를 나타내는 신호를 수신한다. RST 핀에 의해 수신된 신호는 시스템 외부에서 올 수 있으며 시스템 제어에 도움이 된다.
IN_LAT 핀, W_LAT 핀, ACC_LAT 핀, ADD 핀, 시프트(255) 핀, SKIPFF_LAT 핀, SKIPSR_LAT 핀, SkipSHIFT 핀, 및 Flow_Thru 핀은 위에서 논의된 다양한 회로 블록에 대한 대응 핀과 관련하여 위에서 논의되었다. OUT_RDY 핀은 활성화될 때 MAC 스킵 회로(200)의 출력이 예를 들어, ReLU 활성화 함수와 같은 활성화 함수를 구현하는 회로에 의해 취해지거나 제공될 준비가 되었음을 나타내는 신호를 제공한다.
FSM(305)은 현재 상태 및 다음 상태를 결정하는 회로 블록이며, 현재 상태는 도 24a 및 도 24b에 대해 후술하는 상태도에 따라 8개의 가능한 상태들 중 하나를 나타내는 3개의 핀 <0:2>을 포함할 수 있는 ST 핀들 상에 출력된다. 다음 상태는 현재 상태, START 핀에서의 값, RST 핀에서의 값, JMP0 핀에서의 값, JMP1 핀에서의 값, 및 NEXT 핀에서의 값의 토글링에 기초하여 ST 핀 상에 생성되고 배치된다.
ST 핀은 상태 논리(310) 회로 블록에서 동일한 이름의 핀에 결합된다. 상태 논리(310) 블록은 8개의 핀을 포함하는 하나의 핫 방식(hot fashion)을 사용하여 핀 ST_d에 배치된 디코딩된 출력을 결정하기 위해 ST 핀 및 NEXT 핀을 사용한다. 하나의 핫 방식 디코딩은 8개의 가능한 상태 각각을, 출력 핀 중 하나만 한 번에 높고 다른 핀은 낮게 유지하여 하나의 핀이 각 가능한 상태에 효과적으로 할당되는 출력 조건으로 변환한다. NEXT 핀이 활성화되면 상태 논리부(310)에 시그널링하여 새로운 입력을 찾는다.
카운터(CNT)(315) 회로 블록은 비트 단위 방식으로 가중치 값을 처리하기 위해 가중치 벡터의 비트 위치를 추적하는 데 사용되는 카운터를 생성하는 회로 블록이다. CNT(315)의 CNT 핀은 <0:K'>개의 핀을 포함하며, 여기서 K'는 Roundup(log2K)과 같다. CNT(315) 블록의 출력에 존재하는 값은 CNTplus 핀에 기초해 변경된다. CNTplus 핀이 활성화되면 CNT 핀이 변경되어 이전 출력보다 하나 더 많은 값을 출력한다. RST 핀은 활성화될 때 CNT 핀의 값이 0으로 조정되도록 CNT(315)를 재설정하는 핀이다.
CNT 논리(320) 회로 블록은 상태 논리(310) 회로 블록과 유사한 회로 블록이다. CNT 논리(320) 회로 블록은 CNT(315) 회로 블록의 동일한 이름의 핀에 결합되고 핀 CNT_d 상에서 하나의 핫 방식으로 디코딩된 출력을 제공하는 핀을 갖는다. CNT_d를 위한 핀의 수는 <0:K>이며, 여기서 K는 위에서 설명한 대로 가중치 벡터(215)의 비트 수이다. NEXT 핀이 활성화되면 CNT 논리(320)에 시그널링하여 CNT 상에서 새로운 입력을 찾도록 한다.
상태 플립플롭(SFF)(325) 회로 블록은 상태 논리(310) 회로 블록으로부터 디코딩된 상태 핀 상에 존재하는 각 값을 저장하기 위한 플립플롭을 포함하는 회로 블록이다. 예를 들어, SFF(325)는 디코딩된 상태 핀 각각에 대한 D형 플립플롭을 포함할 수 있다. 다른 플립플롭 유형이 대신 사용될 수 있다. ST_dlat 핀은 제어 신호에 대한 래치 신호를 논리부(330)로 전송할 수 있다.
제어 신호 회로 블록을 위한 논리부(330)는 ST_dlat를 위한 핀, CNT_d를 위한 핀, NEXT를 위한 핀, RST를 위한 핀, CNTplus를 위한 핀, 그리고 IN_LAT, W_LAT, ACC_LAT, ADD, SHIFT(255), SkipFF_LAT, SkipR_LAT, SkipSHIFT, Flow_Thru, 및OUT_RDY를 위한 핀을 갖는 회로 블록이다. 동일한 이름의 이러한 핀에 대한 신호는 아래에 설명된 상태 다이어그램 및 상태 테이블에 따라 논리 게이트를 사용하여 생성된다.
점프(JMP) 논리(335) 회로 블록은 CNT 또는 CNT_d 핀에 결합된 핀, ST 또는 ST_d 핀에 결합된 핀, RST 핀에 결합된 핀, NEXT 핀에 결합된 핀, 스킵(250) 핀에 결합된 핀을 갖는 회로 블록이다. JMP 논리부(335)는 또한 FSM(305)의 JMP0 핀에 결합된 JMP0 핀 및 FSM(305)의 JMP4 핀에 결합된 JMP4 핀을 갖는다. JMP 논리부(335)는 두 조건 중 하나가 참일 때 JMP0 핀을 활성화하는 논리를 사용한다. 조건들은, 첫째로, RST=0 AND (NEXT가 토글됨) AND CNT=1일 때, 또는 둘째로, SKIP=1이다. JMP 논리부(335)는 RST=0 AND (NEXT가 토글됨) AND CNT!=7일때 JMP4 핀을 활성화하는 논리를 사용한다. 선택적으로 JMP0 또는 JMP4 핀의 활성화는 현재 상태가 7인 조건으로 제한될 수 있다. 이것은 ST 또는 ST_d 핀으로부터 또는 핫 핀 디코딩된 특정 ST_d 핀, 예를 들어, ST_d<7> 핀으로부터 취해질 수 있다. JMP 논리(335) 회로 블록은 이 논리를 구현하는 한 가지 방식일 뿐이라는 것을 이해해야 한다. 이 논리부는 또한 논리부(330)에 또는 추가 상태로서 유한 상태 머신에 통합될 수 있다.
도 17은 일부 실시예에 따른 스킵 모듈(245) 회로 블록의 블록도를 도시한다. 스킵 모듈(245) 회로 블록은 도 7의 수학 공식, 도 8 내지 12의 예, 또는 도 13의 흐름도에 따른 다른 논리/회로 블록을 사용하여 구현될 수 있다. 스킵 모듈(245)은 입력 합 플립플롭(input sum flip flop; IS_FF)(350), 시프트 레지스터(355), 감산기(360), 비교기(365), 절댓값(absolute value; Abs)(370) 회로 블록 및 스킵 플립플롭(skip flip flop; SkipFF)(375) 회로 블록을 포함하는 여러 서브회로 블록을 포함한다. 스킵 모듈(245)은 SkipSHIFT 핀, SkipSR_LAT 핀, SkipFF_LAT 핀, RST 핀, 입력 합 핀 핀 세트, 누산 곱 핀 세트, 및 스킵(250) 핀을 포함한다. 이들 핀은 동일한 이름의 신호를 제공하거나 수신하고 위에서 설명된 것과 같은 동일한 이름의 MAC 스킵 회로(200)의 핀에 결합된다.
IS_FF(350) 회로 블록은 플립플롭을 사용하여 IS 핀으로부터의 입력 합을 저장할 수 있는 회로 블록이다. SkipFF_LAT 핀은 입력 합을 IS_FF(350)에 래치하는 신호를 제공할 수 있다. RST 핀은 IS_FF(350)를 초기화된 상태로 리셋하기 위한 신호를 제공할 수 있다. IS_FF(350)의 비트 수는 입력 벡터(205)의 비트 수 N에 입력 벡터 수 M의 로그(밑 2)(RoundUP(log2M)를 더한 것과 같을 수 있다. IS_FF(350)의 출력 핀은 시프트 레지스터(355)에 그리고 감산기(360)에 감수(subtrahend)로서 결합될 수 있다.
시프트 레지스터(355) 회로 블록은 좌측 시프트를 수행할 수 있는 레지스터를 활용하는 회로 블록이다. SkipSHIFT 핀이 활성화되면 좌측 시프트를 트리거한다. SkipSR_LAT 핀이 활성화되면 IS_FF(350)로부터의 입력 합(Input Sum; IS)이 시프트 레지스터(355)에 래치된다. RST 핀은 시프트 레지스터(355)를 초기화된 상태로 리셋하기 위한 신호를 제공할 수 있다. 시프트 레지스터(355)의 비트 수는 입력 벡터(205)의 비트 수(N) 더하기 가중치 벡터(215)의 비트 수(K) 더하기 입력 벡터의 수(M)의 로그(밑 2)(RoundUP(log2M)와 같을 수 있다. 시프트 레지스터(355)의 출력 핀은 피감수로서 감산기(360)에 결합될 수 있다.
감산기(360)는 IS_FF(350)의 값을 취하고 그것을 시프트 레지스터(355)의 값에서 빼서 출력 B를 계산한다. 감산기(360)는 출력 핀을 통해 출력 B를 비교기(365)에 제공한다.
절댓값(Abs)(370) 회로 블록은 누산 곱 합(accumulated product sum; APS)을 취하여 절댓값을 계산하고 이를 비교기(365)에 출력 A로서 제공하도록 구성된 회로 블록이다. Abs(370) 회로 블록은 이러한 기능을 위한 대응하는 핀을 포함한다. Abs(370)는 스킵 조건이 발견될 가능성을 증가 또는 감소시키기 위해 문턱값 오프셋으로서 APS의 절댓값에 더해질 수 있는 TH 핀 세트를 통해 문턱값 TH 값을 취하도록 선택적으로 구성될 수 있다. 그러한 실시예에서, Ab(370)는 비교기(365)에 출력 A를 제공하기 전에 출력 A로부터 문턱값 TH를 더하거나 빼기 위한 가산기를 포함할 수 있다. 문턱값(TH)은 도 23a 및 23b와 관련하여 아래에서 더 자세히 논의된다.
비교기(365) 회로 블록은 출력 A와 출력 B를 비교하는 회로 블록이다. 출력 A가 출력 B보다 크면 스킵 조건이 발견된다. 비교기는 이러한 값을 위한 대응하는 핀을 포함한다. SkipFF(375) 회로 블록에 결합된 Skip_LAT 핀 상에 스킵 조건이 제공된다. SkipFF(375) 회로 블록은 Skip_LAT 핀 상의 신호에 의해 활성화될 때 SKIP(250) 출력 핀을 래치하는 플립플롭을 포함하는 회로 블록이다.
도 15의 MAC 스킵 회로(200)의 동작은 도 15, 16 및 17의 회로 블록도를 참조하여 도 18 내지 도 22의 예시적인 경우를 살펴봄으로써 입증될 수 있다. 도 18은 도 8과 관련하여 위에서 사용된 것과 동일한 입력 벡터 및 가중치 벡터를 도시한다. 입력 벡터는 입력 FF(210)에 래치된다. 가중치 벡터의 첫 번째 MSB 비트는 가중치 FF(220)에 래치된다. 도 18에서 Flow_Thru 핀은 승산기(225)에서 활성화되고 입력 벡터는 가중치 값에 관계없이 승산기(225)를 통해 흐르도록(flow through) 허용된다. 이는 각 입력 벡터에 '1'을 곱하는 것과 같다. 그런 다음, 입력 벡터는 가산기(230a)에 의해 더해지고 입력 합 0101 0001 0001 (1297)은 스킵 모듈(245)에 제공된다. 입력 합은 IS_FF(350)에 래치된다. 위에서 언급했듯이 IS_FF(350)에서의 비트 수 NIS = K + Roundup(log2M)이다. 입력 합의 상위 NIS - K + 1 비트는 시프트 레지스터(355)에 래치된다. 이는 입력 합을 2N IS -K+1로 나누는 것과 동일하며 이 경우 27이다. 이렇게 하는 이유는 입력 벡터와 가중치 벡터의 MSB의 곱에 대한 계산이 아직 완전히 가중화되지 않았기 때문이다. 각 주기는 부분 누산 곱 합을 한 자리씩 시프트할 것이다. 유사하게, 각 사이클은 시프트 레지스터를 한 자리씩 시프트할 것이다. 따라서 입력 합의 상위 NIS - K + 1 비트를 활용하는 것은 비교가 동일한 승산기에서 이루어지는 것을 보장한다.
예를 들어, 가중치 비트의 MSB에 대한 부분 누산 곱 합은 27의 자릿값을 곱하기 전에
Figure pat00002
와 같다. 잔여 미처리 가중치는
Figure pat00003
로서 조정될 수 있다. 최악의 시나리오에서, 각 가중치 비트는 1이다. 따라서 위의 공식은
Figure pat00004
로서 다시 작성할 수 있으며, 여기서 IS는 모든 가중치 비트가 1인 경우와 같다. IS를 제외하면(factor out) 이것은 IS · 127과 같다. 부분 누산 곱 합의 자릿값이 아직 시프트되지 않았기 때문에, IS·127가 128에 의해 나누어지는데, 이는 IS-IS/128을 계산함으로써, 예를 들어,
Figure pat00005
에 의해 얻어질 수 있다.
따라서, 스킵 문턱값 STH는 입력 합의 최상위 NIS - K + 1 비트를 위에서 설명된 바와 같이 시프트 레지스터(355) 내로 취함으로써 계산될 수 있는데, 이는 입력 합을 128로 나누는 것과 같다. 그 다음, 시프트 레지스터(355)는 STH를 획득하기 위해 입력 합으로부터 빼질 수 있다.
도 19에서 첫 번째 가중치 비트가 처리된다. 다양한 입력에 가중치 벡터의 MSB 각각이 곱해진다. 그런 다음, 이들 곱이 합산되어 0011 0010 0101(-805)이 된다. 첫 번째 비트가 부호 비트이기 때문에 초기화된 누산 곱 합(즉, 0)에서 이 값을 빼서(ADD=0) 누산 곱 합을 2의 보수 형식으로 넣는다. 스킵 문턱값(STH)은 피감수인 IS_FF 0101 0001 0001 (1297)에서 감수인 시프트 레지스터 1010 (10)을 빼서 계산된다. 스킵 조건이 발생하는지 결정하기 위해 STH 0101 0000 0111 (1287)이 누산 곱 합의 절댓값 0011 0010 0101 (805)과 비교된다. 조건 A > B가 충족되지 않기 때문에 다음 가중치 비트는 후속 사이클에서 처리된다.
도 20에서, 누산 곱 합은 좌측 시프트되고 두 번째 가중치 비트가 처리된다. 다양한 입력에 가중치 벡터의 다음 비트 각각이 곱해진다. 그런 다음, 이들 곱이 합산되어 0010 1111 0101 (757)이 된다. 이 값은 시프트된 누산 곱 합에 더해져 1111 1111 1100 1010 1011 (-853)이 된다. 따라서 누산 곱 합은
Figure pat00006
와 같다. 시프트 레지스터(355)는 또한 스킵 문턱값 STH 0000 0000 0100 1111 1101 (1277)을 찾기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS·63과 동일한
Figure pat00007
인 경우이기 때문에 수행된다. 시프트 레지스터(355)는 이전에 128로 나누어진 IS였지만, 누산 곱 합이 한 번 시프트되었기 때문에, 이것도 한 번 시프트되어 대신 64로 나누어진다. 값 IS·63/64는 계산 IS-IS/64에 의해 발견될 수 있다. 대안적으로, 입력 합의 상위 NIS - K 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 64로 나누는 것과 동일할 것이다. 스킵 조건이 발생하는지 여부를 결정하기 위해 STH 0000 0000 0100 1111 1101 (1277)은 누산 곱 합의 절댓값 0011 0101 0101 (853)과 비교된다. 조건 A > B가 충족되지 않기 때문에 다음 가중치 비트는 후속 사이클에서 처리된다.
도 21에서, 누산 곱 합은 좌측 시프트되고 두 번째 가중치 비트가 처리된다. 다양한 입력에 가중치 벡터의 다음 비트 각각이 곱해진다. 그런 다음, 이들 곱이 합산되어 0010 0001 1010 (538)이 된다. 이 값은 시프트된 누산 곱 합에 더해져 1111 1111 1011 0111 0000 (-1168)이 된다. 따라서 누산 곱 합은
Figure pat00008
와 같다. 시프트 레지스터(355)는 또한, 스킵 문턱값 STH 0000 0000 0100 1110 1001 (1257)을 찾기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS·31과 동일한
Figure pat00009
인 경우이기 때문에 수행된다. 시프트 레지스터(355)는 이전에 IS를 64로 나누었지만, 누산 곱 합이 한 번 시프트되었기 때문에 시프트 레지스터도 한 번 시프트되어 대신 32로 나누어진다. 값 IS·31/32는 계산 IS-IS/32에 의해 찾아질 수 있다. 대안적으로, 입력 합의 상위 NIS-K-1 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 32로 나누는 것과 동일할 것이다. 스킵 조건이 발생하는지 여부를 결정하기 위해 STH 0000 0000 0100 1110 1001 (1257)이 누산 곱 합의 절댓값 0100 1001 0000 (1168)과 비교된다. 조건 A > B가 충족되지 않기 때문에 다음 가중치 비트는 후속 사이클에서 처리된다.
도 22에서 누산 곱 합은 좌측으로 시프트되고 세 번째 가중치 비트가 처리된다. 다양한 입력에 가중치 벡터의 다음 비트 각각이 곱해진다. 그런 다음, 이들 곱이 합산되어 0010 0010 0110 (550)이 된다. 이 값은 시프트된 누산 곱 합에 더해져 1111 1111 1001 0000 0110 (-1786)이 된다. 따라서 누산 곱 합은
Figure pat00010
와 같다. 시프트 레지스터(355)는 또한 스킵 문턱값 STH 0000 0000 0100 1100 0001 (1217)을 찾기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS·15와 동일한
Figure pat00011
인 경우이기 때문에 수행된다. 시프트 레지스터(355)는 이전에 IS를 32로 나누었지만, 누산 곱 합이 한 번 시프트되었기 때문에 시프트 레지스터도 한 번 시프트되어 대신 16으로 나누어진다. 값 IS · 15 / 16은 계산 IS - IS/16에 의해 발견될 수 있다. 대안적으로, 입력 합의 상위 NIS - K - 2 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 16으로 나누는 것과 동일한다. 스킵 조건이 발생하는지 여부를 결정하기 위해 STH 0000 0000 0100 1110 1001(10000 0000 0100 1100 0001 (1217)이 누산 곱 합의 절댓값 0110 1111 1010 (1786)과 비교된다. 조건 A > B가 충족되기 때문에, 가중치 비트의 잔여 처리는 중단되고 출력은 예를 들어, ReLU 활성화 함수와 같은 활성화 함수를 구현하는 회로에 제공될 수 있다.
문턱값이 충족되지 않았다고 가정하면, 처리는 다음 주기에 대해 거의 동일한 방식으로 계속될 것이다. 다양한 입력에 가중치 벡터의 다음 비트가 곱해질 것이다. 그런 다음, 이러한 곱들이 합산되어 가산기(230A) 출력을 생성한다. 그런 다음, 이 값이 시프트된 곱 합에 더해져
Figure pat00012
를 생성한다. 시프트 레지스터(355)는 또한 스킵 문턱값을 발견하기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS·7과 동일한
Figure pat00013
인 경우이기 때문에 수행된다. 시프트 레지스터는 이전에 16으로 나누어진 IS였지만, 누산 곱 합이 한 번 시프트되었기 때문에, 시프트 레지스터도 한 번 시프트되어 대신 8로 나누어진다. 값 IS · 7 / 8은 계산 IS - IS/8에 의해 발견될 수 있다. 대안적으로, 입력 합의 상위 NIS - K - 3 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 8로 나누는 것과 동일한다. 스킵 조건이 발생하는지 여부를 결정하기 위해, STH는 누산 곱 합의 절댓값과 비교된다.
문턱값이 충족되지 않았다고 가정하면, 처리는 다음 주기에 대해 동일한 방식으로 계속된다. 다양한 입력에 가중치 벡터의 다음 비트가 곱해질 것이다. 그런 다음, 이러한 곱들이 합산되어 가산기(230A) 출력을 생성한다. 그런 다음, 이 값이 시프트된 곱 합에 더해져
Figure pat00014
를 생성한다. 시프트 레지스터(355)는 또한 스킵 문턱값을 발견하기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS·3과 동일한
Figure pat00015
인 경우이기 때문에 수행된다. 시프트 레지스터는 이전에 8로 나누어진 IS였지만, 누산 곱 합이 한 번 시프트되었기 때문에, 시프트 레지스터도 한 번 시프트되어 대신 4로 나누어진다. 값 IS · 3 / 4는 계산 IS - IS/4에 의해 발견될 수 있다. 대안적으로, 입력 합의 상위 NIS - K - 4 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 4로 나누는 것과 동일한다. 스킵 조건이 발생하는지 여부를 결정하기 위해, STH는 누산 곱 합의 절댓값과 비교된다.
문턱값이 충족되지 않았다고 가정하면, 처리는 다음 주기에 대해 동일한 방식으로 계속된다. 다양한 입력에 가중치 벡터의 다음 비트가 곱해질 것이다. 그런 다음, 이러한 곱들이 합산되어 가산기(230A) 출력을 생성한다. 그런 다음, 이 값이 시프트된 곱 합에 더해져
Figure pat00016
를 생성한다. 시프트 레지스터(355)는 또한 스킵 문턱값을 발견하기 위해 시프트되고 IS_FF(350)로부터 다시 빼진다. 이것은 최악의 시나리오가 IS와 동일한
Figure pat00017
인 경우이기 때문에 수행된다. 시프트 레지스터는 이전에 4로 나누어진 IS였지만, 누산 곱 합이 한 번 시프트되었기 때문에, 시프트 레지스터도 한 번 시프트되어 대신 2로 나누어진다. 값 IS · 1 / 2는 계산 IS - IS/2에 의해 발견될 수 있다. 대안적으로, 입력 합의 상위 NIS - K - 5 비트는 시프트 레지스터(355)에 래치될 수 있으며, 이는 IS를 2로 나누는 것과 동일한다. 스킵 조건이 발생하는지 여부를 결정하기 위해, STH는 누산 곱 합의 절댓값과 비교된다.
문턱값이 충족되지 않았다고 가정하면, 처리는 다음 주기에 대해 동일한 방식으로 계속될 것이다. 이 예에서와 같이 가중치 비트의 수 K가 8이면, 미지의 가중치 값이 더 이상 없기 때문에 이것은 마지막 주기이다. 다양한 입력에 가중치 벡터의 다음 비트가 곱해질 것이다. 그런 다음, 이러한 곱들이 합산되어 가산기(230A) 출력을 생성한다. 그런 다음, 이 값이 시프트된 누산 곱 합에 더해져
Figure pat00018
를 생성한다. 모든 가중치 비트가 처리되었기 때문에, 출력은 예를 들어, ReLU 활성화 함수와 같은 활성화 함수를 구현하는 회로에 제공된다.
도 23a 및 23b를 참조하면, 도 17에 언급된 바와 같이 문턱값(TH)의 사용을 예시하는 흐름도가 도시되어 있다. 위에서 언급된 것처럼, Abs(누산 곱 합) > STH일 때 스킵 조건이 검출된다. 문턱값(TH)은 스킵 조건을 트립(trip)하는데 필요한 조건을 완화하기 위해 사용될 수 있는, 더해지는 값일 수 있다. 위에서 언급된 바와 같이, 예를 들어, STH의 계산은 가중치 벡터에 대한 최악의 시나리오의 가정에 기초한다. 가중치 벡터의 모든 비트가 '1'일 가능성은 낮으므로 문턱값(TH)을 더하여 요건을 완화하면 허용할 수 없는 양의 오류를 도입하지 않고 계산 에너지가 줄어들 수 있다(허용할 수 없는 양의 오류를 도입하는 것은 예를 들어, 문턱값(TH)을 더하는 것이 스킵되어서는 안 되었을 값을 스킵하는 것을 초래하면 발생할 수 있음).
도 23a에서, 일부 실시예에서, 문턱값(TH)은 가중치 벡터 및 허용 오차의 일부 공지된 통계적 특성에 기초하여 미리 정의된 값일 수 있다. 예를 들어, 허용 오차가 최악의 경우의 완화를 허용하는 것으로 알려진 경우, 문턱값(TH)은 입력 합의 나누어진 부분과 같을 수 있다. 예를 들어, 문턱값은 입력 합을 4, 8 또는 16으로 나눈 값과 같을 수 있다. 다른 실시예에서, 문턱값(TH)은 누산 곱 합(APS)에 기초하여 미리 정의된 값일 수 있다. 예를 들어, 문턱값(TH)은 예를 들어, Abs(APS) + Abs(APS)/8과 같이 자신에 다시 더해진 Abs(APS)의 일부와 동일할 수 있다. 또 다른 실시예에서, 문턱값(TH)은 예를 들어, 값(128) 또는 일부 다른 값과 같은 상수일 수 있다. 요소(405)에서, 문턱값(TH)은 위에 언급된 것과 같은 미리 결정된 조건에 기초하여 계산된다. 그러한 실시예에서, 문턱값(TH)은 상수이거나 예를 들어, 입력 합 또는 APS와 같은 사용 가능한 수치 값 중 하나에 기초하여 계산된다. 요소(410)에서 TH는 비교기(365)로 들어가기 전에 Abs(APS)에 더해진다. 효과적으로, 비교기(365)는 A+TH>B? 또는 A>B-TH?를 결정한다. TH가 Abs(APS)에 더해지는 것으로 도시되어 있지만, TH는 감산기(360)로 들어가기 전에 피감수(IS_FF)로부터 빼지거나 (시프트 레지스터(355)로부터) 감수에 더해질 수 있다.
도 23b에서, 일부 실시예에서, 문턱값(TH)은 일부 외부 요인에 기초하여 계산되는 동적 값일 수 있거나, 전술한 바와 같은 미리 결정된 성분과 여기에 논의된 바와 같은 동적 성분을 사용할 수 있는 동적 값일 수 있다. 예를 들어, 계산 디바이스에 대한 자원(배터리, 전력, 메모리, 처리 가용성 등)이 낮은 경우, 문턱값이 증가될 수 있다. 요소(455)에서 예를 들어, 낮은 계산 자원, 높은 온도, 실패한 냉각 조건, 모션 등과 같은 일부 외부 요인을 포함하는 조건이 검출된다. 260에서, TH는 계산 에너지를 감소시키기 위해 증가된다. TH가 증가되면 스킵 조건이 트리거될 가능성도 증가된다. 일부 실시예에서, TH는 위에서 설명된 바와 같이 미리 결정된 TH에 기초할 수 있지만, 계산 에너지를 더 감소시키도록 조정될 수 있다. TH를 증가시키면 오류를 증가시키는 잠재적인 부정적인 영향을 갖는다. 다른 실시예에서, TH는 0과 동일할 수 있다. 465에서, 더 많은 계산 자원이 활용될 수 있도록 조건이 복구되었거나 변경되었음이 검출된다. 470에서, TH는 계산 에너지를 증가시키고 오류를 감소시키기 위해 감소된다.
도 24a, 24b 및 25에서는 상태에 관한 정보가 제공된다. 이 정보는 사용되는 실제 부품(parts)의 동작 파라미터 및 특성에 따라 변경될 수 있음을 이해해야 한다. 예를 들어, 시프트 레지스터는 래치 신호가 특정 방식으로 시프트 신호와 상호 작용하도록 조합 논리를 사용할 수 있다. 또 다른 예로서, 일부 하드웨어에서 승산기(225) 및 가산기(230a) 회로 블록은 별도의 상태 없이 즉시 계산을 시작할 수 있다. 도면 24a는 상태도를 제공하고 도 24b는 각 상태 동안 달성되는 기본 프로세스를 설명한다. 이 설명에서 CNT는 편의상 0에서 7 사이의 값을 갖는다. 여기서 7은, 각각의 가중치 벡터의 비트 수에 대해 K=8인, 값 K-1임을 이해해야 한다. K가 다른 숫자인 경우 값 '7'은 적절하게 대체될 수 있다.
상태 0에서 MAC은 유휴 상태이고, 스킵은 유휴 상태이며, 메모리는 유휴 상태이다. 상태 0은 준비 상태이다. 상태 0은 다른 상태와 연관된 계산이 완료되었을 때 복귀 상태이기도 한다. 상태 0은, RST 신호가 임의의 다른 상태에서 표명될 때 복귀 상태이기도 한다. 도 25에서 언급된 바와 같이, 상태 0에서 OUT_RDY 신호는 높고 누산 곱 합은 활성화 함수에 의한 의한 사용을 위해 사용 가능할 수 있다. RST=0 && (NEXT가 트리거됨) && START=1이면, 상태 1에 진입된다.
상태 1에서, 메모리는 입력 벡터(205)를 판독하고 MAC 스킵 회로(200)의 핀 상에 이러한 값을 제공한다. 입력 벡터(205)는 입력 FF(210)에 래치된다. 이와 같이, INPUT_FF(210)의 출력은 즉시 그 출력이 승산기(225) 회로 블록에 사용 가능하다. Flow_Thru 핀이 활성화되어 입력 벡터(205)가 승산기(225) 회로 블록을 통해 가산기(230a)로 흐를 수 있다. 가산기(230a)는 입력 벡터(205)를 합산하고 스킵 모듈(245)로의 입력 합(IS)을 생성할 것이다. 도 25에서 언급된 바와 같이, 상태 1에서 IN_LAT 핀은 활성이고 Flow_Thru 핀은 활성이다. RST=0 && (NEXT가 트리거됨)이면 상태 2에 진입된다.
상태 2에서 입력 합(IS)은 스킵 모듈(245)의 IS_FF(350)에 래치된다. 도 25에서 언급된 바와 같이, 상태 2에서 Flow_Thru 핀은 활성이고 SkipFF_LAT 핀은 활성이다. RST=0 && (NEXT가 트리거됨)이면 상태 3에 진입된다.
상태 3에서, 메모리는 가중치 FF(220)에 래치된 가중치 벡터(215)의 MSB를 판독한다. 스킵 모듈(245)에서, IS의 상위 NIS - K + 1 비트는 시프트 레지스터(355)에 래치된다. 도 25에서 언급된 바와 같이, 상태 3에서, W_LAT 핀은 활성이고 SkipSR_LAT 핀은 활성이다. RST=0 && (NEXT가 트리거됨)이면 상태 4에 진입된다.
상태 4에서, 입력 벡터(205)는 입력 FF(210)에 의해 제공되고 현재 가중치 비트는 가중치_FF(220)에 의해 승산기(225) 회로 블록에 제공되며, 이는 입력 벡터(205)에 현재 가중치 비트를 곱하고 출력을 가산기(230a)에 제공한다. 곱 합은 누산기(230b)에 제공된다. 일부 실시예에서, 곱 합은 이전 상태에서 제공될 수 있다(예컨대, 래치 동작이 승산기(225)에 입력을 즉시 제공하는 경우). CNT = 0이면 ADD 신호는 비활성화이고 곱 합은 빼질 것인데, 그 이유는 곱 합은 가중치 벡터(215)의 부호 비트의 곱 합을 나타내기 때문에 음수이어야 하기 때문이다. CNT=0이면 부분 누산 곱 합은 0이다. CNT!=0이면 부분 곱 합이 이전 상태 7의 실행으로부터 시프트되었다. 누산기가 시프트 레지스터(235)로부터의 부분 누산 곱 합(APS)을 현재 곱 합과 합산한 후, 그 결과가 누산기(230b)의 출력 핀에서 준비된다. 그런 다음, 카운터가 증가되어 현재 비트가 처리되었음을 나타낸다. 도 25에서 알 수 있듯이 상태 4에서 CNT_plus 핀은 활성이다. RST=0 && (NEXT가 트리거됨)이면 상태 5에 진입된다.
상태 5에서, 새로운 누산 곱 합(APS)은 시프트 레지스터(235)에 래치되고, 스킵 모듈(245)에 제공되며, 여기서 스킵 모듈(245)은 비교기(365) 회로 블록을 통해 abs(APS)를 STH와 비교한다. 도 25에서 알 수 있듯이 상태 5에서 ACC_LAT 핀은 활성화되어, 누산 곱 합(APS)을 래치하는 것을 나타낸다. RST=0 && (NEXT가 트리거됨)이면 상태 6에 진입된다.
상태 6에서 스킵 비교 결과는 SkipFF(375)에 래치된다. 도 25에서 알 수 있듯이 상태 6에서 SKIP_LAT 핀은 활성 상태이다(CNT=7이 아닌 경우 모든 비트가 이미 처리되었기 때문에). RST=0 && (NEXT가 트리거됨)이면 상태 7에 진입된다.
상태 7에서 CNT != 7이면 시프트 레지스터(235)는 다음 가중치 비트 처리를 준비하기 위해 좌측 시프트되고 메모리는 가중치 벡터의 다음 비트를 판독하고 가중치 벡터의 다음 비트는 가중치 FF(220)에서 래치된다. RST=0 && (NEXT가 트리거됨) && CNT !=7이면 상태 4에 진입된다. 이것은 처리할 다른 가중치 비트가 있고 스킵이 표명되지 않았음을 나타낸다. RST=0 && (NEXT가 트리거됨) && CNT=7이면 상태 0이 진입되며, 이는 모든 가중치 비트가 처리되었음을 나타낸다. 상태 0은 CNT 값에 관계 없이 SKIP=1이면 또한 진입되고, 잔여 가중치 비트의 추가 처리를 중단한다. 도 25에서 언급된 바와 같이, 상태 7(CNT != 7인 경우), W_LAT, ACC_SHIFT 핀은 시프트 레지스터(235)를 시프트하는 것을 나타내기 위해 활성이고, SkipSHIFT 핀은 활성이다.
도 26은 MAC 스킵 회로를 사용하는 시스템(500)의 시스템도이다. 메모리(505)는 MAC 스킵 회로(200)에 결합되어 MAC 스킵 회로(200)에 입력 데이터 및 가중치를 제공한다. 메모리(505)는 비일시적 컴퓨터 판독 가능 데이터를 저장하기 위한 임의의 적절한 메모리 디바이스 및 매체일 수 있다. 예를 들어, 컨볼루션 제어기(510)와 같은 제어기(510)는 MAC 스킵 회로(200) 및 메모리(505)에 결합된다. 제어기(510)는 예를 들어, START 신호 및 NEXT 제어 신호와 같이 MAC 스킵 회로(200)가 동작하도록 지시하는 제어 신호 및 논리를 제공한다. MAC 스킵 회로(200)는 또한 예를 들어, OUT_READY 신호와 같은 제어기(510) 상태 신호를 제공한다. 제어기(510)는 또한 MAC 스킵 회로에 어느 입력 및 가중치를 제공할지를 메모리(505)에게 지시한다. 활성화 함수(515)는 MAC 스킵 회로(200)의 출력을 취하고, 예를 들어, ReLU 활성화 함수와 같은 활성화 함수를 출력에 적용한다. 그 다음, 결과는 메모리(505)에 다시 저장되고 제어기(510)에 제공될 수 있다.
도 27은 샘플 테스트의 실행의 결과를 도시한다. 그래프는 누산된 부분합의 각 데이터 포인트를 실행하는 데 필요한 에너지를 도시한다. 점선 타원은 스킵 모듈 없이 처리한 결과 누산된 부분 합을 둘러싼다. 그래프에서 알 수 있듯이, 누산 부분 합이 0보다 클 때, 누산 부분 합을 계산하는 데 사용되는 에너지는 스킵 모듈이 없는 경우보다 스킵 모듈을 사용하여 더 크다. 그러나 누산된 부분 합이 0보다 적당히 작으면 스킵 모듈을 사용할 때 에너지 요건이 훨씬 적다. 이 예에서 스킵 모듈을 사용하면 평균 에너지 절약이 약 12.2%이다. 10%와 40% 사이의 에너지 절약이 실현될 수 있다.
위에서 설명된 MAC 프로세스의 계산 복잡도는 입력 및 가중치 벡터의 수 M이 더 클수록 증가한다. ReLU 활성화 함수는, MAC의 출력 값이 양수인 경우에만 MAC의 출력 값을 저장하고 MAC의 출력 값이 음수인 경우에는 0을 저장한다는 것을 알고, 실시예는 계산 전력을 절약하기 위해 선택적으로 입력 데이터의 처리의 잔여 부분을 스킵할 수 있는 처리 방법, 회로, 및 시스템을 제공한다. 실시예는 곱 합을 반복적으로 계산한다. 각 반복 후에 스킵 함수 블록은 부분적 누산 곱 합을 평가한다. 부분적 누산 곱 합이 너무 음수성(so negative)이어서 잔여 연산으로 결과를 양수로 만들 수 없는 경우 잔여 계산은 스킵된다. 잔여 계산을 스킵하는 것은 감소된 계산 주기 및 감소된 메모리 호출을 제공한다.
일 실시예는 입력 벡터와 가중치 벡터의 곱의 부분 합 누산을 워드 단위 입력 및 비트 단위 가중치 방식으로 수행하여 부분 누산 곱 합을 생성하는 단계를 포함하는 방법이다. 방법은 또한 부분 누산 곱 합을 문턱 조건과 비교하는 단계를 포함한다. 방법은 또한 부분 누산 곱 합이 문턱 조건을 충족할 때 합 누산의 잔여 계산이 스킵됨을 나타내기 위해 스킵 표시자를 표명하는 단계를 포함한다.
실시예에서, 방법은 입력 벡터와 가중치 벡터의 적어도 하나의 비트 위치의 곱의 부분 합 누산을 스킵하는 단계를 더 포함한다. 실시예에서, 문턱 조건은 동적으로 계산된 문턱 조건이다. 실시예에서, 부분 누산 곱 합이 음수이고 미지의 가중치 비트의 잔여 세트가 부분 누산 곱 합을 양수가 되게 할 수 없을 때 스킵 표시자가 표명된다. 실시예에서, 미지의 가중치 비트의 잔여 세트는 각각 1인 것으로 가정된다. 실시예에서, 방법은 부분 누산 곱 합에 대해 활성화 함수를 수행하는 단계, 및 활성화 함수의 출력을 0 또는 부분 누산 곱 합 중 더 큰 값과 같은 값으로 기록하는 단계를 더 포함한다. 실시예에서, 방법은 부분 누산 곱 합이 문턱 조건보다 작은 경우, 입력 벡터와 가중치 벡터의 잔여 부분의 곱의 제2 부분 합 누산을 워드 단위 입력 및 비트 단위 가중치 방식으로 수행하여 제2 부분 누산 곱 합을 생성하는 단계를 더 포함한다.
또 다른 실시예는, m개의 입력 벡터의 세트에 m개의 가중치 벡터의 세트의 제1 가중치 비트를 각각 곱하여 m개의 곱의 제1 세트를 계산하고, 제1 세트의 m개의 곱을 합산하여 제1 곱 합을 계산하며, 제1 곱 합을 곱 합 출력 핀 세트 상에 제공하도록 구성된 승산 누산 회로 블록을 포함하는 디바이스이다. 이 디바이스는 또한 곱 합 출력 핀 세트에 결합된 누산기 입력 핀 세트를 포함하는 누산기 회로 블록을 포함하고, 누산기 회로 블록은 제1 값을 누산기 입력 핀 세트 상에서 수신하고, 제1 값을 누산기 회로 블록의 누산된 값에 더함으로써 제1 값을 누산하여 누산된 값을 대체하며, 누산된 값을 누산 값 출력 핀 세트 상에 제공하도록 구성된다. 이 디바이스는 또한, 누산 값 출력 핀 세트에 결합된 누산 값 입력 핀 세트를 포함하는 스킵 회로 블록 - 스킵 회로 블록은 누산 값을 문턱값과 비교하고, 문턱값이 충족될 때, 스킵 핀 상에 스킵 신호를 표명하도록 구성됨 -; 및 제어 회로 블록을 포함하고, 제어 회로 블록은, 스킵 신호에 대해 스킵 핀을 검사하고 스킵 신호가 표명되지 않은 경우, 승산 누산 회로 블록이 m개의 가중치 벡터의 세트의 다음 가중치 비트를 처리하게 하고, 스킵 신호가 표명되는 경우, m개의 가중치 벡터의 세트의 잔여 부분의 처리를 종료하고, 출력 준비 신호를 표명하며, 누산 값을 활성화 회로에 제공하도록 구성된다.
실시예에서, 스킵 회로 블록은, 문턱값을 계산하기 위해 입력 합에서 시프트된 입력 합을 빼고 - 시프트된 입력은 처리 중인 M개의 가중치 벡터의 세트의 가중치 비트 위치에 기초해 복수 회 시프트됨 -, 문턱값을 누산 값과 비교하도록 구성된 감산 회로 블록을 포함한다. 실시예에서, 문턱값은 제1 문턱값이고, 감산 회로 블록은 또한, 제1 문턱값을 누산된 값과 비교하기 전에 제2 문턱값을 누산된 값에 더함으로써 누산된 값을 변경하도록 구성된다. 실시예에서, 제2 문턱값은 상수 값, 입력 합 또는 누산된 값에 기초한 파생 값, 또는 환경 변수에 기초한 동적 값이고, 환경 변수는 전력 상태, 배터리 상태, 하드웨어 상태, 또는 자원 상태를 포함한다. 실시예에서, 누산기 회로 블록은 add 핀을 포함하고, 누산기 회로 블록은 add 핀에 의해 제어될 때 누산된 값에서 제1 값을 빼도록 구성되고, 제어 회로 블록은 또한, 제1 가중치 비트가 m개의 가중치 벡터의 세트의 최상위 비트에 대응할 때 제1 값을 빼도록 add 핀을 통해 누산기 회로 블록을 제어하도록 구성된다. 실시예에서, 이 디바이스는 m개의 입력 벡터의 세트를 저장하도록 구성된 입력 래치 회로 블록; m개의 가중치 비트의 세트를 저장하도록 구성된 가중치 비트 래치 회로 블록; 및 제1 곱 합을 계산하기 위해 승산 블록과 가산기 트리를 포함하는 승산 누산 회로 블록을 더 포함한다.
또 다른 실시예는, 입력의 가중치 벡터와 입력 노드의 곱을 비트 단위 가중치 방식에 의해 각각 계산하고, 곱 각각을 합산하여 각 비트에 대한 곱 합을 계산하고, 각 비트에 대한 비트 값 위치에 따라 곱 합을 가중화하며, 곱 합을 누산 곱 합으로서 누산하도록 구성된 승산 누산 디바이스를 포함하는 시스템이다. 이 시스템은 또한 곱 합을 문턱값과 비교하고 문턱값이 충족될 때 스킵 신호를 표명하도록 구성된 스킵 모듈을 포함한다. 이 시스템은 또한, 스킵 신호가 표명되지 않을 때, 승산 누산 디바이스가 가중치 벡터의 다음 비트를 처리하게 하고, 스킵 신호가 표명될 때, 승산 누산 디바이스가 가중치 벡터의 잔여 부분을 처리하는 것을 중단하게 하도록 구성된 제어 논리 디바이스를 포함한다. 시스템은 또한 활성화 디바이스를 포함하며, 활성화 디바이스는 누산 곱 합의 값에 기초하여 입력 노드의 컨볼루션 값을 결정한다.
실시예에서, 스킵 모듈은 각각의 가중치 비트가 처리된 후에 곱 합을 평가하도록 구성된다. 실시예에서, 스킵 모듈의 문턱값은 입력 노드의 모든 입력의 입력 합에 기초하여 계산된다. 실시예에서, 스킵 모듈의 문턱값은 입력 합에서 비트 시프트된 입력 합을 빼서 계산되고, 비트 시프트된 입력 합은 현재 평가된 가중치 비트의 비트 위치에 대응하는 비트 수만큼 시프트된다. 실시예에서, 문턱값은 제1 문턱값이고, 스킵 모듈은 또한, 곱 합의 절댓값에 제2 문턱값을 더하고, 이를 제1 문턱값과 비교하며, 제1 문턱값보다 크면, 스킵 신호를 표명하도록 구성된다. 실시예에서, 제2 문턱값은 곱 합의 현재 값, 입력 노드의 모든 입력의 입력 합, 또는 상수 값에 기초한 미리 결정된 문턱값이다. 실시예에서, 제2 문턱값은 환경 인자에 기초한 동적 문턱값이고, 환경 인자는 전력 상태, 배터리 레벨, 계산 자원 가용성, 또는 하드웨어 고장 중 하나 이상을 포함한다.
전술한 설명은, 당업자가 본 개시의 양상을 더 잘 이해할 수 있도록 여러 실시예의 피처를 서술한다. 당업자는, 자신이 본 명세서에서 소개된 실시예의 동일한 목적을 수행하고 그리고/또는 동일한 이점을 달성하기 위한 다른 프로세스와 구조물을 설계 또는 수정하기 위한 기초로서 본 개시를 쉽게 사용할 수 있다는 것을 인식해야 한다. 또한, 당업자는 이러한 등가의 구성이 본 개시의 취지 및 범위를 벗어나지 않으며, 본 개시의 취지 및 범위를 벗어나지 않으면서 다양한 변화, 대체 및 변경을 이룰 수 있음을 알아야 한다.
[부기]
1. 방법에 있어서,
입력 벡터와 가중치 벡터의 곱의 부분 합 누산을 워드 단위 입력 및 비트 단위 가중치 방식으로 수행하여 부분 누산 곱 합(partial accumulated product sum)을 생성하는 단계;
상기 부분 누산 곱 합을 문턱 조건과 비교하는 단계; 및
상기 부분 누산 곱 합이 상기 문턱 조건을 충족할 때, 합 누산의 잔여 계산이 스킵(skip)되는 것을 나타내기 위해 스킵 표시자를 표명(assert)하는 단계
를 포함하는, 방법.
2. 제1항에 있어서,
상기 입력 벡터와 상기 가중치 벡터의 적어도 하나의 비트 위치의 곱의 부분 합 누산을 스킵하는 단계를 더 포함하는, 방법.
3. 제1항에 있어서,
상기 문턱 조건은 동적으로 계산된 문턱 조건인 것인, 방법.
4. 제1항에 있어서,
상기 부분 누산 곱 합이 음수이고 미지의 가중치 비트의 잔여 세트가 상기 부분 누산 곱 합을 양수가 되게 할 수 없을 때 상기 스킵 표시자가 표명되는 것인, 방법.
5. 제4항에 있어서,
상기 미지의 가중치 비트의 잔여 세트는 각각 '1'로 가정되는 것인, 방법.
6. 제1항에 있어서,
상기 부분 누산 곱 합에 대해 활성화 함수를 수행하고 상기 활성화 함수의 출력을 0 또는 상기 부분 누산 곱 합 중 더 큰 값과 같은 값으로 기록하는 단계를 더 포함하는, 방법.
7. 제1항에 있어서,
상기 부분 누산 곱 합이 상기 문턱 조건보다 작을 때, 상기 입력 벡터와 상기 가중치 벡터의 잔여 부분의 곱의 제2 부분 합 누산을 워드 단위 입력 및 비트 단위 가중치 방식으로 수행하여 제2 부분 누산 곱 합을 생성하는 단계를 더 포함하는, 방법.
8. 디바이스에 있어서,
M개의 입력 벡터의 세트에 M개의 가중치 벡터의 세트의 제1 가중치 비트를 각각 곱하여 M개의 곱의 제1 세트를 계산하고, 상기 제1 세트의 M개의 곱을 합산하여 제1 곱 합을 계산하며, 상기 제1 곱 합을 곱 합 출력 핀 세트 상에 제공하도록 구성된 승산 누산 회로 블록;
상기 곱 합 출력 핀 세트에 결합된 누산기 입력 핀 세트를 포함하는 누산기 회로 블록 - 상기 누산기 회로 블록은, 제1 값을 상기 누산기 입력 핀 세트 상에서 수신하고 상기 누산기 회로 블록의 누산된 값에 상기 제1 값을 더함으로써 상기 제1 값을 누산하여 상기 누산된 값을 대체하며, 상기 누산된 값을 누산 값 출력 핀 세트 상에 제공하도록 구성됨 -;
상기 누산 값 출력 핀 세트에 결합된 누산 값 입력 핀 세트를 포함하는 스킵 회로 블록 - 상기 스킵 회로 블록은 상기 누산된 값을 문턱값과 비교하고, 상기 문턱값이 충족될 때, 스킵 핀 상에 스킵 신호를 표명하도록 구성됨 -; 및
제어 회로 블록
를 포함하고,
상기 제어 회로 블록은, 상기 스킵 신호에 대해 상기 스킵 핀을 검사하고 상기 스킵 신호가 표명되지 않은 경우: 상기 승산 누산 회로 블록으로 하여금 상기 M개의 가중치 벡터의 세트의 다음 가중치 비트를 처리하게 하고, 상기 스킵 신호가 표명되는 경우: 상기 M개의 가중치 벡터의 세트의 잔여 부분의 처리를 종료하며, 출력 준비 신호를 표명하고, 상기 누산된 값을 활성화 회로에 제공하도록 구성되는 것인, 디바이스.
9. 제8항에 있어서, 상기 스킵 회로 블록은,
상기 문턱값을 계산하기 위해 입력 합에서 시프트된 입력 합을 빼고 - 상기 시프트된 입력은 처리 중인 상기 M개의 가중치 벡터의 세트의 가중치 비트 위치에 기초해 복수 회 시프트됨 -, 상기 문턱값을 상기 누산된 값과 비교하도록 구성된 감산 회로 블록을 포함하는 것인, 디바이스.
10. 제9항에 있어서,
상기 문턱값은 제1 문턱값이고, 상기 감산 회로 블록은 또한, 상기 제1 문턱값을 상기 누산된 값과 비교하기 전에 제2 문턱값을 상기 누산된 값에 더함으로써 상기 누산된 값을 변경하도록 구성되는 것인, 디바이스.
11. 제10항에 있어서,
상기 제2 문턱값은 상수 값, 상기 입력 합 또는 상기 누산된 값에 기초한 파생 값, 또는 환경 변수에 기초한 동적 값이고, 상기 환경 변수는 전력 상태, 배터리 상태, 하드웨어 상태, 또는 자원 상태를 포함하는 것인, 디바이스.
12. 제8항에 있어서,
상기 누산기 회로 블록은 ADD 핀을 포함하고, 상기 누산기 회로 블록은 상기 ADD 핀에 의해 제어될 때 상기 누산된 값에서 상기 제1 값을 빼도록 구성되고, 상기 제어 회로 블록은 또한, 상기 제1 가중치 비트가 상기 M개의 가중치 벡터의 세트의 최상위 비트에 대응할 때 상기 제1 값을 빼도록 상기 ADD 핀을 통해 상기 누산기 회로 블록을 제어하도록 구성되는 것인, 디바이스.
13. 제8항에 있어서,
상기 M개의 입력 벡터의 세트를 저장하도록 구성된 입력 래치 회로 블록; 및
상기 M개의 가중치 비트의 세트를 저장하도록 구성된 가중치 비트 래치 회로 블록을 더 포함하고,
상기 승산 누산 회로 블록은 상기 제1 곱 합을 계산하기 위한 승산 블록과 가산기 트리를 포함하는 것인, 디바이스.
14. 시스템에 있어서,
입력의 가중치 벡터와 입력 노드의 곱을 비트 단위 가중치 방식에 의해 각각 계산하고, 상기 곱 각각을 합산하여 각 비트에 대한 곱 합을 계산하고, 각 비트에 대한 비트 값 위치에 따라 상기 곱 합을 가중화하며, 상기 곱 합을 누산 곱 합으로서 누산하도록 구성된 승산 누산 디바이스;
상기 곱 합을 문턱값과 비교하고 상기 문턱값이 충족되는 경우 스킵 신호를 표명하도록 구성된 스킵 모듈;
상기 스킵 신호가 표명되지 않는 경우, 상기 승산 누산 디바이스로 하여금 상기 가중치 벡터의 다음 비트를 처리하게 하고, 상기 스킵 신호가 표명되는 경우, 상기 승산 누산 디바이스로 하여금 상기 가중치 벡터의 잔여 부분을 처리하는 것을 중단하게 하도록 구성된 제어 논리 디바이스; 및
상기 누산 곱 합의 값에 기초해 상기 입력 노드의 컨볼루션 값을 결정하는 활성화 디바이스
를 포함하는, 시스템.
15. 제14항에 있어서,
상기 스킵 모듈은 각 가중치 비트가 처리된 후 상기 곱 합을 평가하도록 구성되는 것인, 시스템.
16. 제14항에 있어서,
상기 스킵 모듈의 문턱값은 상기 입력 노드의 모든 입력의 입력 합에 기초하여 계산되는 것인, 시스템.
17. 제16항에 있어서,
상기 스킵 모듈의 문턱값은 상기 입력 합에서 비트 시프트된 입력 합을 빼서 계산되고, 상기 비트 시프트된 입력 합은 현재 평가된 가중치 비트의 비트 위치에 대응하는 비트 수만큼 시프트되는 것인, 시스템.
18. 제14항에 있어서,
상기 문턱값은 제1 문턱값이고, 상기 스킵 모듈은 또한, 상기 곱 합의 절댓값에 제2 문턱값을 더하고, 이를 상기 제1 문턱값과 비교하며, 상기 제1 문턱값보다 크면, 상기 스킵 신호를 표명하도록 구성되는 것인, 시스템.
19. 제18항에 있어서,
상기 제2 문턱값은 상기 곱 합의 현재 값, 상기 입력 노드의 모든 입력의 입력 합, 또는 상수 값에 기초한 미리 결정된 문턱값인 것인, 시스템.
20. 제18항에 있어서,
상기 제2 문턱값은 환경 인자에 기초한 동적 문턱값이고, 상기 환경 인자는 전력 상태, 배터리 레벨, 계산 자원 가용성, 또는 하드웨어 고장 중 하나 이상을 포함하는 것인, 시스템.

Claims (10)

  1. 방법에 있어서,
    입력 벡터와 가중치 벡터의 곱의 부분 합 누산을 워드 단위 입력 및 비트 단위 가중치 방식으로 수행하여 부분 누산 곱 합(partial accumulated product sum)을 생성하는 단계;
    상기 부분 누산 곱 합을 문턱 조건과 비교하는 단계; 및
    상기 부분 누산 곱 합이 상기 문턱 조건을 충족할 때, 합 누산의 잔여 계산이 스킵(skip)되는 것을 나타내기 위해 스킵 표시자를 표명(assert)하는 단계
    를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 입력 벡터와 상기 가중치 벡터의 적어도 하나의 비트 위치의 곱의 부분 합 누산을 스킵하는 단계를 더 포함하는, 방법.
  3. 제1항에 있어서,
    상기 부분 누산 곱 합에 대해 활성화 함수를 수행하고 상기 활성화 함수의 출력을 0 또는 상기 부분 누산 곱 합 중 더 큰 값과 같은 값으로 기록하는 단계를 더 포함하는, 방법.
  4. 디바이스에 있어서,
    M개의 입력 벡터의 세트에 M개의 가중치 벡터의 세트의 제1 가중치 비트를 각각 곱하여 M개의 곱의 제1 세트를 계산하고, 상기 제1 세트의 M개의 곱을 합산하여 제1 곱 합을 계산하며, 상기 제1 곱 합을 곱 합 출력 핀 세트 상에 제공하도록 구성된 승산 누산 회로 블록;
    상기 곱 합 출력 핀 세트에 결합된 누산기 입력 핀 세트를 포함하는 누산기 회로 블록 - 상기 누산기 회로 블록은, 제1 값을 상기 누산기 입력 핀 세트 상에서 수신하고 상기 누산기 회로 블록의 누산된 값에 상기 제1 값을 더함으로써 상기 제1 값을 누산하여 상기 누산된 값을 대체하며, 상기 누산된 값을 누산 값 출력 핀 세트 상에 제공하도록 구성됨 -;
    상기 누산 값 출력 핀 세트에 결합된 누산 값 입력 핀 세트를 포함하는 스킵 회로 블록 - 상기 스킵 회로 블록은 상기 누산된 값을 문턱값과 비교하고, 상기 문턱값이 충족될 때, 스킵 핀 상에 스킵 신호를 표명하도록 구성됨 -; 및
    제어 회로 블록
    을 포함하고,
    상기 제어 회로 블록은, 상기 스킵 신호에 대해 상기 스킵 핀을 검사하고 상기 스킵 신호가 표명되지 않은 경우: 상기 승산 누산 회로 블록으로 하여금 상기 M개의 가중치 벡터의 세트의 다음 가중치 비트를 처리하게 하고, 상기 스킵 신호가 표명되는 경우: 상기 M개의 가중치 벡터의 세트의 잔여 부분의 처리를 종료하며, 출력 준비 신호를 표명하고, 상기 누산된 값을 활성화 회로에 제공하도록 구성되는 것인, 디바이스.
  5. 제4항에 있어서, 상기 스킵 회로 블록은,
    상기 문턱값을 계산하기 위해 입력 합에서 시프트된 입력 합을 빼고 - 상기 시프트된 입력은 처리 중인 상기 M개의 가중치 벡터의 세트의 가중치 비트 위치에 기초해 복수 회 시프트됨 -, 상기 문턱값을 상기 누산된 값과 비교하도록 구성된 감산 회로 블록을 포함하는 것인, 디바이스.
  6. 제5항에 있어서,
    상기 문턱값은 제1 문턱값이고, 상기 감산 회로 블록은 또한, 상기 제1 문턱값을 상기 누산된 값과 비교하기 전에 제2 문턱값을 상기 누산된 값에 더함으로써 상기 누산된 값을 변경하도록 구성되는 것인, 디바이스.
  7. 제6항에 있어서,
    상기 제2 문턱값은 상수 값, 상기 입력 합 또는 상기 누산된 값에 기초한 파생 값, 또는 환경 변수에 기초한 동적 값이고, 상기 환경 변수는 전력 상태, 배터리 상태, 하드웨어 상태, 또는 자원 상태를 포함하는 것인, 디바이스.
  8. 제4항에 있어서,
    상기 누산기 회로 블록은 ADD 핀을 포함하고, 상기 누산기 회로 블록은 상기 ADD 핀에 의해 제어될 때 상기 누산된 값에서 상기 제1 값을 빼도록 구성되고, 상기 제어 회로 블록은 또한, 상기 제1 가중치 비트가 상기 M개의 가중치 벡터의 세트의 최상위 비트에 대응할 때 상기 제1 값을 빼도록 상기 ADD 핀을 통해 상기 누산기 회로 블록을 제어하도록 구성되는 것인, 디바이스.
  9. 제4항에 있어서,
    상기 M개의 입력 벡터의 세트를 저장하도록 구성된 입력 래치 회로 블록; 및
    상기 M개의 가중치 비트의 세트를 저장하도록 구성된 가중치 비트 래치 회로 블록을 더 포함하고,
    상기 승산 누산 회로 블록은 상기 제1 곱 합을 계산하기 위한 승산 블록과 가산기 트리를 포함하는 것인, 디바이스.
  10. 시스템에 있어서,
    입력의 가중치 벡터와 입력 노드의 곱을 비트 단위 가중치 방식에 의해 각각 계산하고, 상기 곱 각각을 합산하여 각 비트에 대한 곱 합을 계산하고, 각 비트에 대한 비트 값 위치에 따라 상기 곱 합을 가중화하며, 상기 곱 합을 누산 곱 합으로서 누산하도록 구성된 승산 누산 디바이스;
    상기 곱 합을 문턱값과 비교하고 상기 문턱값이 충족되는 경우 스킵 신호를 표명하도록 구성된 스킵 모듈;
    상기 스킵 신호가 표명되지 않는 경우, 상기 승산 누산 디바이스로 하여금 상기 가중치 벡터의 다음 비트를 처리하게 하고, 상기 스킵 신호가 표명되는 경우, 상기 승산 누산 디바이스로 하여금 상기 가중치 벡터의 잔여 부분을 처리하는 것을 중단하게 하도록 구성된 제어 논리 디바이스; 및
    상기 누산 곱 합의 값에 기초해 상기 입력 노드의 컨볼루션 값을 결정하는 활성화 디바이스
    를 포함하는, 시스템.
KR1020220048056A 2021-08-13 2022-04-19 스킵 논리를 사용한 비트 단위 곱 합 누산 KR20230025325A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US202163232915P 2021-08-13 2021-08-13
US63/232,915 2021-08-13
US202163254574P 2021-10-12 2021-10-12
US63/254,574 2021-10-12
US17/679,260 2022-02-24
US17/679,260 US20230053294A1 (en) 2021-08-13 2022-02-24 Bitwise product-sum accumulations with skip logic

Publications (1)

Publication Number Publication Date
KR20230025325A true KR20230025325A (ko) 2023-02-21

Family

ID=84368016

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220048056A KR20230025325A (ko) 2021-08-13 2022-04-19 스킵 논리를 사용한 비트 단위 곱 합 누산

Country Status (6)

Country Link
US (1) US20230053294A1 (ko)
JP (1) JP7420880B2 (ko)
KR (1) KR20230025325A (ko)
CN (1) CN115469825A (ko)
DE (1) DE102022105152A1 (ko)
TW (1) TWI815404B (ko)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SG90099A1 (en) * 1999-02-25 2002-07-23 Texas Instruments Inc A system and method for optimizing signal processing via a unique truncating and rounding operation
JP6898359B2 (ja) 2016-06-14 2021-07-07 タータン エーアイ リミテッド ディープニューラルネットワーク用のアクセラレータ
US11663001B2 (en) * 2018-11-19 2023-05-30 Advanced Micro Devices, Inc. Family of lossy sparse load SIMD instructions
US11562212B2 (en) 2019-09-09 2023-01-24 Qualcomm Incorporated Performing XNOR equivalent operations by adjusting column thresholds of a compute-in-memory array

Also Published As

Publication number Publication date
DE102022105152A1 (de) 2023-02-16
US20230053294A1 (en) 2023-02-16
JP7420880B2 (ja) 2024-01-23
CN115469825A (zh) 2022-12-13
JP2023026404A (ja) 2023-02-24
TW202307646A (zh) 2023-02-16
TWI815404B (zh) 2023-09-11

Similar Documents

Publication Publication Date Title
US10762415B2 (en) Information processing apparatus, Ising unit, and information processing apparatus control method
US5506797A (en) Nonlinear function generator having efficient nonlinear conversion table and format converter
CN112085188A (zh) 一种神经网络的量化参数确定方法及相关产品
GB2568083A (en) Histogram-based per-layer data format selection for hardware implementation of deep neutral network
CN109308520B (zh) 实现softmax函数计算的FPGA电路及方法
US20190220732A1 (en) Optimization apparatus and control method thereof
US10628124B2 (en) Stochastic rounding logic
JP2021530761A (ja) 補償命令により可能にされる低精度ディープニューラルネットワーク
US20220291901A1 (en) Data processing method for processing unit, electronic device and computer readable storage medium
Seidel et al. Efficient floating point arithmetic for quantum computers
JP2005018759A (ja) 2の浮動小数点数乗の概算を実施するための方法および装置
KR20210103552A (ko) 수들을 변환하기 위한 하드웨어 모듈
JP4273071B2 (ja) 除算・開平演算器
JP7420880B2 (ja) スキップロジックを有するビット単位の積和累積
CN114816335B (zh) 一种忆阻器阵列符号数乘法实现方法、装置及设备
US11435981B2 (en) Arithmetic circuit, and neural processing unit and electronic apparatus including the same
Isobe et al. Low-bit Quantized CNN Acceleration based on Bit-serial Dot Product Unit with Zero-bit Skip
Wang et al. A multiplier structure based on a novel real-time CSD recoding
Zadiraka et al. Calculating the Sum of Multidigit Values in a Parallel Computational Model
US20240086152A1 (en) Calculation unit for multiplication and accumulation operations
US20240134606A1 (en) Device and method with in-memory computing
US11811416B2 (en) Energy-efficient analog-to-digital conversion in mixed signal circuitry
Christiani et al. Towards a scalable neuromorphic hardware for classification and prediction with stochastic no-prop algorithms
KR20240057754A (ko) 인메모리 컴퓨팅을 위한 메모리 장치 및 그 동작 방법
Fathi et al. Improving Accuracy, Area and Speed of Approximate Floating-Point Multiplication Using Carry Prediction