KR20210092751A - 내적 계산기 및 그 연산 방법 - Google Patents

내적 계산기 및 그 연산 방법 Download PDF

Info

Publication number
KR20210092751A
KR20210092751A KR1020217015961A KR20217015961A KR20210092751A KR 20210092751 A KR20210092751 A KR 20210092751A KR 1020217015961 A KR1020217015961 A KR 1020217015961A KR 20217015961 A KR20217015961 A KR 20217015961A KR 20210092751 A KR20210092751 A KR 20210092751A
Authority
KR
South Korea
Prior art keywords
vector
value
mask
binary
product
Prior art date
Application number
KR1020217015961A
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 KR20210092751A publication Critical patent/KR20210092751A/ko

Links

Images

Classifications

    • 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
    • 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
    • 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
    • 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
    • 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/30018Bit or string instructions
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/48Indexing scheme relating to groups G06F7/48 - G06F7/575
    • G06F2207/4802Special implementations
    • G06F2207/4818Threshold devices
    • G06F2207/4824Neural networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)

Abstract

희소 벡터를 사용하여 내적 계산을 수행하는 방법, 장치, 시스템 및 제조품이 개시된다. 예시적인 내적 계산기는 제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 카운터를 포함한다. 예시적인 내적 계산기는 후행 이진 카운트에 근거하여 마스크 벡터를 생성하는 마스크 생성기를 더 포함한다. 예시적인 내적 계산기는 제 1 비트 맵와 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 제 1 희소 벡터의 제 1 값에 액세스하고 제 2 비트 맵과 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 제 2 희소 벡터의 제 2 값에 액세스하는 인터페이스를 더 포함한다. 예시적인 내적 계산기는 제 1 값과 제 2 값을 승산하여 곱을 생성하는 승산기를 더 포함한다.

Description

내적 계산기 및 그 연산 방법
본 특허는 2018년 11월 8일에 출원된 미국 특허 출원 번호 제16/184,985호의 이익을 주장하는 출원으로부터 기원한다. 미국 특허 출원 번호 제16/184,985호는 여기에 그 전체 내용이 참조로서 포함된다. 미국 특허 출원 번호 제16/184,985호에 대한 우선권이 여기에 주장된다.
본 개시는 일반적으로 프로세서에 관한 것으로, 특히 내적(dot product) 계산기 및 그 연산 방법에 관한 것이다.
최근 몇 년 동안, 이미지 프로세싱 능력에 대한 요구는 고전력 전용 데스크탑 하드웨어를 넘어 개인 및/또는 모바일 장치에 대해서도 기대되었다. 모바일 장치는 전형적으로 크기 제약, 온도 관리 제약 및/또는 전력 제약에 의해 제한되는 프로세싱 능력을 갖는다.
도 1은 컨볼루션 신경망 엔진의 예시적인 구현의 블록도이다.
도 2는 도 1의 예시적인 프로세서의 내적 계산기의 예시적인 구현의 블록도이다.
도 3은 도 1의 내적 계산기의 예시적인 구현의 하드웨어 구성도이다.
도 4는 도 1 및 도 2 및/또는 도 3의 예시적인 내적 계산기에 의해 수행되는 내적 프로토콜의 예이다.
도 5는 2개의 벡터의 비트 맵을 사용하여 2개의 벡터의 내적을 결정하는 도 1 및/또는 도 2의 예시적인 내적 계산기를 구현하기 위해 실행될 수 있는 예시적인 머신 판독 가능 명령어를 나타내는 흐름도이다.
도 6은 도 1 및 도 2의 예시적인 내적 계산기를 구현하기 위해 도 5의 명령어를 실행하도록 구성된 예시적인 프로세싱 플랫폼의 블록도이다.
도면은 축척에 맞지 않는다. 일반적으로, 같거나 또는 유사한 부분을 가리키기 위해 도면(들) 및 첨부된 설명 전체에서 같은 참조 번호가 사용될 것이다.
개인용 컴퓨터 및/또는 모바일 디바이스를 포함하는 전형적인 컴퓨팅 시스템은, 인간이 수행할 수 있는 작업을 자동화하기 위해 발전된 이미지 프로세싱 또는 컴퓨터 비전 알고리즘을 사용한다. 컴퓨터 비전 작업은 디지털 이미지의 획득, 프로세싱, 분석 및/또는 이해를 포함한다. 이러한 작업은, 부분적으로, 디지털 이미지로부터 차원(dimensional) 데이터를 추출하여 수치 및/또는 기호 정보를 생성하는 것을 용이하게 한다. 컴퓨터 비전 알고리즘은 숫자 및/또는 기호 정보를 사용하여 특히 3-D(three-dimensional) 포즈 예측, 이벤트 감지, 물체 인식, 비디오 추적 등과 관련된 연산을 결정 및/또는 수행할 수 있다. AR(augmented reality), VR(virtual reality), 로봇 공학 및/또는 다른 응용 분야를 지원하기 위해서는, 이러한 작업을 신속하고(예를 들어, 실시간으로 또는 거의 실시간으로) 효율적으로 수행하는 것이 중요하다.
발전된 이미지 프로세싱 또는 컴퓨터 비전 알고리즘은 때때로 CNN(또는 ConvNet, convolutional neural network)을 사용한다. CNN은 전형적으로 이미지를 분류하고, 유사성으로 이미지를 클러스터링하고(예를 들어, 사진 검색), 및/또는 컨볼루션을 사용하여 이미지 내에서 객체 인식을 수행하는 데 사용되는 심층 인공 신경망이다. 여기에 사용된 것과 같이, 컨볼루션은 2개의 주어진 함수 중 하나의 함수의 형태가 다른 함수의 형태에 의해 어떻게 수정되는지를 표현하는, 적분에 의해 2개의 함수로부터 도출되는 함수로 정의된다. 따라서, CNN은 입력 이미지 내의 이미지 피처와 매칭하는 것을 식별하기 위해 입력 이미지에 걸쳐 이미지 피처(예를 들어, 수평선, 2-D(two-dimensional) 형태 등)에 대응하는 하나 이상의 필터의 출력을 전달함으로써 입력 이미지에 포함된 얼굴, 개인, 도로 표지판, 동물 등을 식별하는 데 사용될 수 있다.
CNN은 하나 이상의 함수를 수행하기 위해 계산에 저장되거나 또는 사용될 필요가 있는(예를 들어, 다차원 어레이로부터 분해된) 벡터를 획득한다. 따라서, CNN은 하나 이상의 이미지에 대응하는 데이터를 포함하는 다차원 배열(예를 들어, 텐서(tensor) 또는 벡터의 행)을 수신할 수 있다. 다차원 배열은 벡터로 분해된다. 이러한 벡터는 수천 개의 요소를 포함할 수 있다. 이러한 각각의 요소는 많은 수의 비트를 포함할 수 있다. 10,000개의 16비트 요소를 갖는 벡터는 160,000비트의 정보에 대응한다. 이러한 벡터를 저장하려면 많은 메모리를 필요로 한다. 그러나, 이러한 벡터는 0의 값을 갖는 많은 수의 요소를 포함할 수 있다. 따라서, 일부 CNN 또는 다른 프로세싱 엔진은 이러한 벡터를 희소 벡터(sparse vector) 및 희소성 맵 벡터(sparsity map vector)(예를 들어, 비트맵 벡터)로 분해할 수 있다.
여기에 정의된 것과 같이, 희소 벡터는 밀집 벡터(dense vector)와 같은 차수(order)로 벡터의 0이 아닌 모든 요소를 포함하지만, 모든 0 요소를 제외하는 벡터이다. 여기에 정의된 것과 같이, 밀집 벡터는 0과 0이 아닌 요소를 모두 포함하는 입력 벡터이다. 이와 같이, 밀집 벡터 [0, 0, 5, 0, 18, 0, 4, 0]은 희소 벡터가 [5, 18, 4]인 것에 대응한다. 여기에 정의된 것과 같이, 희소성 맵은 밀집 벡터의 각각의 요소가 0인지 0이 아닌지를 식별하는 1-비트 요소를 포함하는 벡터이다. 따라서, 희소성 맵은 밀집 벡터의 0이 아닌 값을 '1'로 매핑하고 밀집 벡터의 0 값을 '0'으로 매핑할 수 있다. 위의 밀집 벡터 [0, 0, 5, 0, 18, 0, 4, 0]의 경우, (예를 들어, 밀집 벡터의 3번째, 5번째 및 7번째 요소가 0이 아니기 때문에) 희소성 맵은 [0, 0, 1, 0, 1, 0, 1, 0]일 수 있다. 희소 벡터와 희소성 맵의 조합은 밀집 벡터를 표현한다(예를 들어, 밀집 벡터는 대응하는 희소 벡터 및 희소성 맵에 근거하여 생성/재구성될 수 있음). 따라서, CNN 엔진은 밀집 벡터를 메모리에 저장하지 않고도 대응하는 희소 벡터 및 희소성 맵에 근거하여 밀집 벡터를 생성/결정할 수 있다.
메모리에 밀집 벡터 대신 희소 벡터 및 희소성 맵을 저장하는 것은 (예를 들어, 밀집 벡터(들)에 충분한 0이 있는 경우) 메모리 및 프로세싱 리소스를 절약한다. 예를 들어, 위의 밀집 벡터의 각각의 요소(예를 들어, [0, 0, 5, 0, 18, 0, 4, 0])가 16비트 정보인 경우, 밀집 벡터를 저장하는 데 필요한 메모리 양은 128비트(예를 들어, 요소 8개 X 16비트)이다. 그러나, 대응하는 희소 벡터(예를 들어, [5, 18, 4])와 희소성 맵(예를 들어, [0, 0, 1, 0, 1, 0, 1, 0])을 저장하는 데 필요한 메모리 양은 64비트(예를 들어, 희소 벡터의 요소 3개 X 16비트) + (희소성 맵의 요소 8개 X 1비트))이다. 따라서, 대응하는 밀집 벡터 대신 희소 벡터 및 희소성 맵을 저장하는 것은 이러한 벡터를 저장하는 데 필요한 메모리 양을 줄인다. 또한 희소 벡터 및 희소성 맵을 활용하는 것은 컴퓨팅 엔진으로 전달되는 데이터의 양을 줄이고 컴퓨팅 엔진으로의 전달 속도를 높이기 때문에 대역폭 요구 사항을 개선한다.
일부 프로그램 또는 애플리케이션은 2개의 입력 벡터(예를 들어, 밀집 벡터) 사이에 내적/스칼라 곱을 요구할 수 있다. 일부 상황에서, 입력 벡터는 입력 벡터에 대응하는 희소 벡터 및 희소성 맵으로 메모리에 이미 저장될 수 있다. 일반적으로, 내적/스칼라 곱이 호출될 때, 프로세서는 메모리로부터 대응하는 희소 벡터 및 희소성 맵에 액세스하여 대응하는 밀집 벡터를 재생성한다. 이후, 밀집 벡터는 로컬 메모리에 기록된다. 따라서, 종래 기술은 내적을 계산하기 이전에 밀집 벡터를 입력 벡터로서 로컬 메모리에 저장한다. 액세스되면, 프로세스는 하나의 밀집 벡터의 각각의 요소에 다른 밀집 벡터의 대응하는 요소를 곱하고 곱이 함께 가산되는 종래의 내적 계산을 수행한다. 예를 들어, 제 1 밀집 벡터가 [5, 412, 0, 0, 0, 4, 192]이고 제 2 밀집 벡터가 [2, 0, 0, 432, 52, 4, 0]인 경우, 종래의 내적 기법 7번의 승산 계산을 수행하고 7개의 곱을 가산한다(예를 들어,(5·2) + (412·0) + (0·0) + (0·432) + (0·52) + (4·4) + (192·0)). 그러나, 이러한 종래 기술은 X번의 승산 계산이 필요하고, X는 입력 벡터의 요소의 개수에 대응한다. 승산 계산은 복잡하고, 실행 속도가 느리며, 수행하는 데 많은 양의 리소스를 필요로 한다. 배경에 대비하여 이하에서 설명된 것과 같이, 여기에 개시된 예는 메모리를 절약하고, 내적 계산 속도를 증가시키며, 종래의 내적 기술보다 적은 프로세싱 리소스를 필요로 한다.
여기에 개시된 예는 (예를 들어, 임의의 수와 0의 곱은 0이기 때문에) 0인 임의의 요소의 어떤 곱셈 계산도 수행하지 않고 내적/스칼라 곱 계산을 수행한다. 대신, 여기에 개시된 예는 희소성 맵에 근거하여 더 간단하고, 계산적으로 가벼운 계산을 수행한다. 이러한 방식으로, 복잡하고, 계산이 무거운 승산 계산의 회수가 줄어든다. 그 결과, 내적 계산을 수행하는 데 필요한 시간이 줄어든다. 예를 들어, 전술된 것과 같이, 제 1 밀집 벡터가 [5, 412, 0, 0, 0, 4, 192]이고 제 2 밀집 벡터가 [2, 0, 0, 432, 52, 3, 0]인 경우, 여기에 개시된 예에 대한 복잡한 승산 계산의 회수는 종래 기술에 의해 요구되는 7번의 승산 계산과는 달리 2번(예를 들어, (5·2) 및 (4·3))으로 줄어든다. 여기에 개시된 예는 어떤 요소가 승산되어야 하는지 식별하기 위한 간단한 계산(예를 들어, 논리 AND, 1을 감산, 벡터의 이진 카운트 등)을 수행하므로, 내적을 결정하는 데 필요한 프로세싱 리소스를 줄이고 이러한 내적 계산을 수행하는 데 걸리는 속도를 높인다. 또한, 여기에 공개된 예는 희소성 맵에 근거하여 내적/스칼라 곱 계산을 수행하기 때문에, (예를 들어, 0을 승산하는 것과 관련된 사소한 계산을 제거함으로써) 2개의 벡터 사이의 내적을 계산하는 데 필요한 로컬 메모리의 양이 줄어들고 이러한 계산 속도가 증가된다.
도 1은 예시적인 CNN 엔진(100)(예를 들어, 컨볼루션 신경망 엔진)의 블록도이다. CNN 엔진(100)은 희소성 벡터 변환기(102), 예시적인 메모리 인터페이스(104), 예시적인 메모리(105) 및 예시적인 내적 계산기(106)를 포함한다. 예시적인 CNN 엔진(100)은 밀집 벡터 또는 입력을 수신하고 예시적인 내적 결과(108)를 출력한다.
도 1의 예시적인 희소성 벡터 변환기(102)는 밀집 벡터(들)를 수신하고 밀집 벡터(들)를 희소 벡터(들)(예를 들어, 수신된 벡터의 0이 아닌 값만을 포함하는 벡터) 및 희소성 맵(예를 들어, 밀집 벡터의 어떤 요소가 0이고 벡터의 어떤 요소가 0이 아닌지 식별하는 비트 맵)으로 변환한다. 예를 들어, 희소성 벡터 변환기(102)가 8x1 밀집 벡터 [0;0;532;0;1432;4;0;0;1]를 수신한 경우, 희소성 벡터 변환기(102)는 8x1 차원 밀집 벡터를 밀집 벡터의 0이 아닌 값을 포함하고 밀집 벡터의 0 값을 제거한 4x1 차원 희소 벡터(예를 들어, [532;1432;4;1])로 변환한다. 희소성 벡터 변환기(102)는 또한 수신된 밀집 벡터의 각각의 요소를 대응하는 요소가 0인지 또는 0이 아닌지를 식별하는 단일 비트(예를 들어, 벡터의 대응하는 요소가 '0'일 때 '0'이고 벡터의 대응하는 요소가 0이 아닐 때 '1')로 표현하는 8x1 차원 희소성 맵(예를 들어, [0;0;1;0;1;1;0;0;1])을 생성한다. 밀집 벡터(예를 들어, 0 값과 0이 아닌 값을 모두 갖는 벡터)는 희소성 맵(예를 들어, 밀집 벡터의 비트맵 벡터)을 사용하여 희소 벡터(예를 들어, 밀집 벡터의 0이 아닌 값만을 갖는 벡터)로부터 재구성될 수 있다. 그러나, 밀집 벡터가 값이 0인 요소를 충분히 포함할 때, 희소 벡터 및 희소성 맵을 저장하는 것은 밀집 벡터를 저장하는 것보다 적은 메모리를 필요로 한다. 예를 들어, 위의 밀집 벡터의 각각의 요소가 16비트에 대응하는 경우, 밀집 벡터를 저장하는 데 필요한 비트 수는 72비트(예를 들어, 요소 9개 X 8비트 = 72비트)이다. 그러나, 대응하는 희소 벡터는 4개의 요소만을 포함하고 대응하는 희소성 맵은 요소 당 1비트만을 필요로 하므로, 대응하는 희소 벡터 및 희소성 맵을 저장하는 것은 41비트(예를 들어, (요소 4개 X 8비트) + (요소 9개 X 1비트) = 41비트)를 필요로 한다. 일부 예에서, 밀집 벡터(들)는 또 다른 프로세서로부터 획득된다. 일부 예에서, 밀집 벡터(들)는 사용자 인터페이스를 통해 사용자로부터 획득된다. 예시적인 희소성 벡터 변환기(102)는 밀집 벡터(들)에 대응하는 생성된 희소 벡터(들) 및 희소성 맵(들)을 예시적인 메모리 인터페이스(104)로 전송한다.
도 1의 예시적인 메모리 인터페이스(104)는 예시적인 메모리(105)와 인터페이스하여 생성된 희소 벡터(들)와 희소성 맵(들) 및 액세스 정보를 예시적인 메모리(105)에 저장한다. 예를 들어, 메모리 인터페이스(104)가 밀집 벡터에 대응하는 희소 벡터 및 희소성 맵을 수신할 때, 메모리 인터페이스(104)는 희소 벡터 및 희소성 맵을 예시적인 메모리(105)에 저장한다. 내적/스칼라 곱 함수가 호출될 때, 내적 계산기(106)는 메모리 인터페이스(104)에 내적/스칼라 곱 계산에 활용될 희소 벡터의 요소의 값에 대응하는 하나 이상의 희소성 맵 및/또는 하나 이상의 메모리 주소에 액세스하도록 명령한다. 메모리 인터페이스(104)는 예시적인 메모리(105)로부터 정보에 액세스하여 요청된 정보(예를 들어, 희소 벡터 값)를 예시적인 내적 계산기(106)로 반환한다.
도 1의 예시적인 메모리(105)는 희소 벡터 및 대응하는 희소성 맵을 저장한다. 예를 들어, 메모리(105)는 메모리(105)의 하나 이상의 주소에 희소 벡터의 각각의 요소를 저장한다. 이러한 방식으로, 희소 벡터의 각각의 요소는 하나 이상의 메모리 주소에 대응한다. 따라서, 메모리 인터페이스(104)가 희소 벡터 내의 위치에 대응하는 희소 벡터의 요소에 액세스하도록 하는 명령어를 수신할 때, 메모리 인터페이스(104)는 요소가 저장되어 있는 주소에 근거하여 희소 벡터 내의 요청된 위치에 있는 요소에 액세스할 수 있다.
도 1의 예시적인 내적 계산기(106)는 희소 벡터와 2개의 희소 벡터에 대응하는 희소성 맵을 사용하여 2개의 벡터 사이의 내적/스칼라 곱을 계산한다. 예를 들어, 밀집 벡터 전체를 로컬 메모리에 저장하고 요소 별로 승산 계산을 수행해야 할 필요가 있는 종래 기술을 사용하여 2개의 벡터 사이의 내적을 계산하는 대신, 예시적인 내적 계산기(106)는 승산을 위해 희소 벡터의 요소를 식별하는 희소성 맵에 근거하여 내적을 계산한다. 이 접근 방식은 메모리의 공간을 덜 차지하고 종래의 기술보다 더 적은 승산 계산을 필요로 한다. 예시적인 내적 계산기(106)가 덜 복잡한 계산으로 내적 계산을 수행하기 때문에, 내적 계산기(106)는 종래의 내적 기술보다 더 적은 메모리, 더 적은 프로세싱 리소스를 사용하고 더 빠른 속도로 내적을 결정할 수 있다. 계산되면, 예시적인 내적 계산기(106)는 예시적인 내적 결과(108)를 출력한다. 예시적인 내적 결과(108)는 사용자에게 출력될 수 있고 및/또는 또 다른 프로세서, 애플리케이션으로 출력될 수 있고 및/또는 CNN 엔진(100) 내의 후속 프로세스에서 사용되거나 또는 CNN 엔진(100)에 입력될 수 있다. 예시적인 내적 계산기(106)의 예시적인 구현은 도 2 및 도 3과 관련하여 아래에서 더 설명된다.
도 2는 도 1의 내적 계산기(106)의 예시적인 구현의 블록도이다. 도 2의 예시적인 내적 계산기(106)는 예시적인 인터페이스(200), 예시적인 반복 제어 벡터 생성기(202), 예시적인 논리 게이트(204), 예시적인 감산기(206), 예시적인 후행(trailing) 이진 카운터(208), 예시적인 마스크 생성기(210), 예시적인 요소 위치 결정기(212), 예시적인 승산기(214), 예시적인 합산기(216) 및 예시적인 결과 저장소(218)를 포함한다.
도 2의 예시적인 인터페이스(200)는 내적 명령어를 수신한다. 예를 들어, 사용자, 애플리케이션 및/또는 프로그램은 2개의 벡터(예를 들어, 벡터(A) 및 벡터(B))에 대한 내적을 수행하도록 하는 명령어를 전송할 수 있다. 추가적으로, 인터페이스(200)는 도 1의 메모리 인터페이스(104)와 통신하여 입력 벡터(A 및 B)의 희소성 비트 맵 및/또는 값에 액세스한다. 추가적으로, 예시적인 인터페이스(200)는 결과가 계산되면(예를 들어, 결정되면) 예시적인 내적 결과(108)를 출력한다.
도 2의 예시적인 반복 제어 벡터 생성기(202)는 제어 벡터(예를 들어, 벡터(C))를 생성하고 내적 프로토콜의 반복시 마다 제어 벡터를 업데이트한다. 초기에, 반복 제어 벡터 생성기(202)는 입력 벡터(A 및 B)의 희소성 맵(예를 들어, 희소성 맵(AM 및 BM))에 근거하여 제어 벡터를 생성한다. 예를 들어, 반복 제어 벡터 생성기(202)의 예시적인 논리 게이트(204)는 희소성 맵(AM 및 BM)의 논리 AND 함수/연산을 수행하여 초기 제어 벡터(C)를 생성한다. 반복 제어 벡터 생성기(202)는 함께 승산할 필요가 있는 밀집 벡터의 0이 아닌 요소를 분리하기 위해 (예를 들어, AM AND BM에 근거하여) 제어 벡터(C)를 생성한다. 내적 프로토콜의 후속 반복 동안, 예시적인 반복 제어 벡터 생성기(202)는 제어 벡터(C) 및 (예를 들어, 제어 벡터(C)의 값에서 1을 뺀 것에 대응하는) 차이 벡터(C-1)에 근거하여 논리 AND 함수를 수행하여 제어 벡터(C)를 업데이트함으로써 후속 반복에 대한 후행 1을 제거한다. 이러한 방식으로, 후속 반복은 더 이상 분리할 후행 1이 없을 때까지 밀집 벡터로부터 다른 요소를 분리한다. 반복 제어 벡터 생성기(202)의 감산기(206)는 제어 벡터(C)의 각각의 값에서 1의 비트 값을 감산하여 차이 벡터(예를 들어, C-1)를 계산한다. 예를 들어, 제어 벡터(C)가 [1, 0, 0, 0](예를 들어, 십진수로 8)인 경우, 감산기(206)는 [0, 1, 1, 1](예를 들어, 십진수로 7)인 벡터(C-1)를 생성한다. 감산기(206)가 차이 벡터(예를 들어, C-1)를 계산하면, 예시적인 논리 게이트(204)는 벡터(C)와 벡터(C-1)의 논리 AND 함수를 수행하여 새로운/업데이트된 제어 벡터를 생성한다. 예시적인 반복 제어 벡터 생성기(202)는 제어 벡터(C)를 새로운 제어 벡터(예를 들어, C = C AND (C-1))로 대체하여 후속 반복을 위한 제어 벡터를 업데이트한다. 예시적인 반복 제어 벡터 생성기(202)는 새로운 제어 벡터의 요소가 모두 같은 이진 값(예를 들어, 모든 요소가 0)일 때, 내적 프로토콜이 완료(예를 들어, 더 이상 실행할 반복이 없음)되었다고 결정한다.
도 2의 예시적인 후행 이진 카운터(208)는 벡터의 후행 0의 개수(예를 들어, 벡터에서 0이 아닌 값이 나타나기 전에 0에 대응하는 최하위 비트의 개수)를 카운트한다. 예를 들어, 벡터 [0, 1, 0, 1, 0, 0, 0]의 경우, 후행 이진 카운터(208)는, 벡터에서 0이 아닌 요소의 값이 나타나기 전에 벡터의 3개의 최하위 비트(예를 들어, 벡터의 오른쪽으로 가장 먼 비트)가 0이므로, 후행 0의 개수를 3으로 결정한다. 또 다른 예에서, 벡터 [0, 0, 0, 1]의 경우, 후행 이진 카운터(208)는, 벡터에 후행 0이 없기 때문에(예를 들어, 최하위 비트는 1), 후행 0의 개수를 0으로 결정한다. 후행 0 카운트는 밀집 벡터의 요소의 위치에 대응하는 제어 벡터에 대응한다. 희소 벡터에서 이들 요소의 위치를 찾기 위해, 희소성 맵으로부터 비트를 분리하고 결과에 1 카운트를 사용하여 마스크 벡터가 생성된다. 내적 프로토콜에서, 반복 제어 벡터 생성기(202)가 제어 벡터를 생성하거나 또는 업데이트한 이후, 후행 이진 카운터(208)는 제어 벡터의 후행 0의 개수를 결정한다. 다른 예에서, (예를 들어, 벡터가 반전된 경우) 후행 이진 카운터(208)는 벡터의 1 값의 개수를 카운트할 수 있다. 추가적으로 또는 이와 달리, 예시적인 논리 게이트(204)는 내적 프로토콜의 다른 부분에 대한 논리 함수를 수행할 수 있다. 예를 들어, 논리 게이트(204)는 희소성 맵(AM/BM)과 (예를 들어, 마스크 생성기(210)에 의해 생성된) 마스크의 논리 AND 함수를 수행할 수 있다. 이러한 방식으로, 이 예의 요소 위치 결정기(212)는, 후술되는 것과 같이, 내적 프로토콜에 필요한 메모리(105)에 저장된 희소 벡터의 값의 요소 위치를 결정한다.
도 2의 예시적인 마스크 생성기(210)는 후행 이진 카운트와 입력 벡터의 요소의 개수에 근거하여 마스크 벡터를 생성한다. 예를 들어, 후행 0 카운트가 4이고 각각의 입력 벡터의 값의 개수가 7인 경우, 마스크 생성기(210)는 4개의 최하위 비트가 '1'이고 나머지 비트가 '0'이고, 입력 벡터와 동일한 차원을 가진 마스크 벡터(예를 들어, [0, 0, 0, 1, 1, 1, 1])를 생성할 것이다. 또 다른 예에서, 후행 0 카운트가 0이고 각각의 입력 벡터의 값의 개수가 4인 경우, 마스크 생성기(210)는 (예를 들어, 후행 0 카운트가 0이기 때문에) 모든 비트가 '1'이 아니고 나머지 비트는 '0'이고, 입력 벡터와 동일한 차원을 가진 마스크 벡터(예를 들어, [0, 0, 0, 0])를 생성할 것이다. 마스크는 스킵하기를 원하는 요소를 분리하고 관심 있는 요소 이외의 요소는 0으로 한다. 예시적인 마스크 생성기(210)가 마스크 벡터를 생성하면, 예시적인 논리 게이트(204)는 희소성 맵(AM)과 마스크 벡터에 대해 논리 AND 함수를 수행하여 제 1 결과를 생성하고, 또한 논리 게이트(204)는 희소성 맵(BM)과 마스크 벡터에 대해 논리 AND 함수를 수행하여 제 2 결과를 생성한다. 마스크 벡터는 관심 요소를 분리하기 위해 생성되지만, 관심 요소(예를 들어, 승산될 요소)를 분리하는 다른 방법이 있을 수 있다. 예를 들어, 예시적인 마스크 생성기(210)는 제어 벡터에서 1을 감산하고(예를 들어, C-1), 제어 벡터(C)의 역을 열거하여 마스크 벡터를 생성할 수 있고, 예시적인 논리 게이트(204)는 제어 벡터에서 1을 감산한 것과 제어 벡터(C)의 역에 대한 논리 AND 함수를 수행할 수 있다.
도 2의 예시적인 요소 위치 결정기(212)는 제 1 결과의 1 카운트에 근거하여 희소 벡터(AS)의 요소의 제 1 위치 및 제 2 결과의 1 카운트에 근거하여 희소 벡터(BS)의 요소의 제 2 위치를 결정한다. 예를 들어, 제 1 결과(예를 들어, AM AND 마스크)가 5개의 '1'을 갖는 벡터이면, 요소 위치 결정기(212)는 내적 프로토콜에 필요한 값이 희소 벡터(AS)의 5번째 위치라고 결정한다. 이러한 예에서, 제 2 결과(예를 들어, BM AND 마스크)가 0개의 '1'을 가진 벡터이면, 요소 위치 결정기(212)는 내적 프로토콜에 필요한 값이 희소 벡터(BS)의 0번째 위치라고 결정한다. 또한, 요소 위치 결정기(212)는 인터페이스(200)에 예시적인 메모리(105)에 저장된 각각의 희소 벡터로부터 결정된 위치에 저장된 값에 액세스하도록 명령한다.
도 2의 예시적인 승산기(214)는 예시적인 인터페이스(200)에 의해 액세스되는 (예를 들어, 요소 위치 결정기(212)에 의해 결정된 위치에 대응하는) 값을 승산한다. 승산되면, 예시적인 가산기(216)는 곱과 결과 저장소(218)에 저장된 이전 결과을 가산한다. 초기에 결과 저장소(218)에 저장된 값은 0이고 내적 프로토콜의 각각의 반복 이후에 업데이트된다. 이러한 방식으로, 초기 반복 동안, 승산기(214)는 인터페이스(200)에 의해 액세스된 값을 승산하고 결과 저장소(218)에 곱을 저장한다. 후속 반복 동안, 승산기(214)는 인터페이스(200)에 의해 액세스된 값을 승산하고 가산기(216)는 곱을 이전에 저장된 결과(예를 들어, 이전 반복(들)의 곱(들)의 합)에 가산한다. 예시적인 반복 제어 벡터 생성기(202)가 내적 프로토콜이 완료되었다고 결정하면(예를 들어, 새로운 제어 벡터가 0 값만을 포함하기 때문에 수행할 반복이 더 이상 없음), 인터페이스(200)는 결과 저장소(218)의 결과에 액세스하고 결과를 내적 결과(108)로서 출력한다. 2개의 예시적인 벡터에 대한 내적 프로토콜의 예는 도 4와 관련하여 아래에서 더 설명된다.
도 2의 예시적인 CNN 엔진(100)은 명령어를 실행하는 프로세서에 의해 부분적으로 구현될 수 있다. 도 3은 도 1의 내적 계산기(106)의 또 다른 예시적인 구현의 도면이다. 도 3의 예에서, 내적 계산기(106)는 하드웨어(예를 들어, 전용 회로)에 의해 구현된다. 일부 예에서, 도 3의 하드웨어는 프로세서(예를 들어, 프로세서 패키지, 칩 상의 시스템 일부 등) 내에 통합된다. 도 3의 예시적인 내적 계산기(106)는 예시적인 AND 논리 게이트(300, 306, 314, 316, 322), 예시적인 MUX(multiplexer)(302, 332), 예시적인 감산기(304), 예시적인 레지스터(308, 328, 334), 예시적인 비교기(310), 예시적인 NOT 게이트(312), 예시적인 1 카운터(318, 324) 및 예시적인 가산기(320, 326, 330)를 포함한다. 일부 예에서, 예시적인 컴포넌트(300, 302, 304, 306, 308, 310)는 예시적인 반복 제어 벡터 생성기(202)를 구현하는 데 사용될 수 있고, 예시적인 논리 AND 게이트(316, 322)는 논리 게이트(204)를 구현하는 데 사용될 수 있고, 예시적인 컴포넌트(304)는 감산기(206)를 구현하는 데 사용될 수 있고, 예시적인 1 카운터(318, 324)는 후속 이진 카운터(208)를 구현하는 데 사용될 수 있고, 예시적인 컴포넌트(312, 314)는 예시적인 마스크 생성기(210)를 구현하는 데 사용될 수 있고, 예시적인 가산기(320, 326)는 예시적인 요소 위치 결정기(212)를 구현하는 데 사용될 수 있고, 예시적인 승산기(328)는 예시적인 승산기(214)를 구현하는 데 사용될 수 있고, 예시적인 가산기(330)는 예시적인 가산기(216)를 구현하는 데 사용될 수 있고, 예시적인 레지스터(334)는 도 2의 예시적인 결과 저장소(218)를 구현하는 데 사용될 수 있다.
사용자, 애플리케이션 및/또는 디바이스(예를 들어, 또 다른 프로세서)가 2개의 희소 벡터(예를 들어, As 및 Bs)에 근거하여 내적/스칼라 곱을 결정하도록 하는 명령어를 전송할 때, 2개의 대응하는 희소성 맵(예를 들어, Am 및 Bm)은 예시적인 예시적인 메모리 인터페이스(104)를 통해 예시적인 메모리(105)로부터 AND 논리 게이트(300)에 의해 획득된다. 예시적인 AND 논리 게이트(300)는 AND 논리 함수를 수행하여 제어 벡터(C)를 생성한다. AND 논리 게이트(300)는 제어 벡터(C)를 예시적인 MUX(302)에 출력한다. 예시적인 MUX(302)는 시작 신호를 수신하여 내적/스칼라 곱 계산이 시작된 때를 식별한다. 아래에서 더 설명되는 것과 같이, 도 4의 예와 관련하여, 희소성 맵(Am, Bm)은 초기에 제어 벡터를 결정하기 위해 활용된다. 그러나, 후속 반복은 희소성 맵(Am 및 Bm)을 활용하지 않고 제어 벡터를 업데이트한다. 따라서, 예시적인 AND 논리 게이트(300)가 제 1 제어 벡터(C)를 결정한 이후, 예시적인 MUX(302)는 추가 계산을 위해 초기 제어 벡터를 더 이상 전달하지 않는다. 오히려, MUX(302)는 (예를 들어, 아래에서 더 설명되는 것과 같이 예시적인 컴포넌트(304, 306, 308)에 의해 생성되는) 후속 제어 벡터를 출력한다.
도 3의 예시적인 MUX(302)는, 시작 신호에 의해 활성화될 때, 예시적인 AND 논리 게이트(300)의 출력(예를 들어, 초기 제어 벡터)을 예시적인 감산기(304)에 출력한다. 예시적인 MUX(302)는, 시작 신호에 의해 활성화되지 않을 때, 예시적인 레지스터(308)의 출력(예를 들어, 후속 제어 벡터)을 출력한다. 예시적인 감산기(304)는 제어 벡터로부터 1의 값을 감산하고(예를 들어, C-1) 예시적인 AND 논리 게이트(306)는 제어 벡터(C)와 제어 벡터에서 1을 뺀 것(C-1)의 논리 AND 함수를 수행하여 예시적인 레지스터(308)에 저장되는 후속 반복을 위한 후속 제어 벡터를 생성한다. 예시적인 비교기(310)는 후속 제어 벡터가 0과 동일한지 결정한다. 후속 제어 벡터가 0과 동일하면, 내적 프로세스가 완료되고 비교기(310)는 프로세스의 종료를 나타내는 트리거 전압을 출력한다. 후속 제어 벡터가 0이 아닌 경우, 프로세스는 후속 제어 벡터로 계속된다.
도 3의 예시적인 컴포넌트(306, 308)는 후속 반복에 대한 후속 제어 벡터를 계산하고, 예시적인 컴포넌트(304, 312, 314)는 현재 반복에 대한 마스킹 벡터를 생성한다. 도 3의 예에서, 마스킹 벡터(예를 들어, 제어 벡터의 후행 0 카운트에 대응하는 벡터)는 제어 벡터에서 1을 뺀 것(C-1)과 제어 벡터의 역의 논리 AND 함수에 근거하여 생성된다. 따라서, 예시적인 감산기(304)는 제어 벡터에서 1을 뺀 것을 생성하고, 예시적인 논리 NOT 게이트(312)(예를 들어, 인버터)는 제어 벡터의 역을 계산한다. 예시적인 논리 AND 게이트(314)는 제어 벡터의 역과 제어 벡터에서 1을 뺀 것의 논리 AND 함수를 수행하여 마스크 벡터를 생성한다. 추가적으로 또는 이와 달리, 마스크 벡터를 생성하기 위한 다른 하드웨어 컴포넌트가 있을 수 있다.
마스크 벡터가 계산되면, 도 3의 예시적인 논리 AND 게이트(316)는 제 1 희소성 맵(Am)과의 논리 AND 함수를 수행하고, 예시적인 논리 AND 게이트(322)는 제 2 희소성 맵(Bm)과의 논리 AND 함수를 수행한다. 예시적인 1 카운터(318)는 예시적인 논리 AND 게이트(316)의 출력의 1의 총 개수를 계산하고(예를 들어, ones_count(Am AND mask)) 예시적인 1 카운터(324)는 예시적인 논리 AND 게이트(322)의 출력의 1의 총 개수를 계산한다(예를 들어, ones_count(Bm AND mask)). 예시적인 가산기(320)는 희소 벡터의 기본 주소(base address)에 예시적인 1 카운터(318)의 1 카운트를 가산한다. 가산기(326)는 희소 벡터(Bs)의 기본 주소에 예시적인 1 카운터(324)의 1 카운트를 가산한다. 따라서, 가산기(320)의 출력은 현재 반복 중에 승산되어야 하는 희소 벡터(As)의 요소의 주소에 대응하고, 가산기(326)의 출력은 현재 반복 중에 승산되어야 하는 희소 벡터(Bs)의 요소의 주소에 대응한다.
희소 벡터(As, Bs)의 주소(예를 들어, A_addr 및 B_addr)는 도 1의 예시적인 메모리(105)로부터 주소에 저장된 값을 획득하기 위해 예시적인 메모리 인터페이스(104)에 전송된다. 획득되면, 예시적인 메모리 인터페이스(104)는 대응하는 값(예를 들어, A 및 B)을 예시적인 승산기(328)에 전송하여 값을 승산한다. 예시적인 승산기(328)는 곱을 예시적인 가산기(330)에 출력하여 곱을 이전 반복의 곱에 가산한다. 이전 반복이 없는 경우, 예시적인 가산기(330)는, 아래에서 더 설명되는 것과 같이, 곱에 0을 가산한다. 예시적인 가산기(330)의 출력은 예시적인 레지스터(334)에 저장된다. 레지스터(334)는 이전 반복의 곱의 합을 저장한다. 내적/스칼라 곱 계산이 완료될 때(예를 들어, 모든 반복이 완료될 때), 레지스터(334)는 내적을 저장하고 출력한다. 예를 들어, 레지스터(334)는 계산 완료(예를 들어, 완료 신호)에 대응하는 예시적인 비교기(310)의 출력을 수신한 이후 최종 내적/스칼라 곱을 출력한다.
도 3의 예시적인 레지스터(334)는 현재 저장된 값을 예시적인 MUX(332)의 제 1 입력으로 출력한다. 예시적인 MUX(332)는 0에 대응하는 제 2 입력 및 시작 신호에 대응하는 선택 입력을 더 포함한다. 이러한 방식으로, 내적 계산이 시작될 때, MUX(332)는 0을 출력할 것이다. 0 값은 가산기(330)에 제공되어 초기 반복의 곱에 가산된다. 그러나, 제 1 반복 이후에, 시작 신호가 변경되고 MUX(332)는 예시적인 레지스터(334)의 출력을 출력할 것이다. 전술된 것과 같이, 예시적인 레지스터(334)의 출력은 모든 이전 반복의 곱의 합을 포함한다. 따라서, 가산기(330)는 현재 반복의 곱을 이전 반복의 곱의 합에 가산하므로 모든 반복이 완료되었을 때의 내적에 대응한다.
도 4는 도 2 및/또는 도 3의 예시적인 내적 계산기(106)에 의한 내적 프로토콜 연산의 예를 도시한다. 도 4는 예시적인 밀집 벡터(400, 402), 예시적인 위치 식별자(404), 예시적인 희소 벡터(406, 408), 희소 벡터의 예시적인 요소 위치(410), 예시적인 희소성 맵(412, 414), 예시적인 제어 벡터(416), 예시적인 후행 0 카운트(418, 430), 예시적인 마스크(420, 432), 예시적인 희소 벡터 값(422, 424, 434, 436), 예시적인 곱(426, 438), 예시적인 차이 벡터(427, 442), 예시적인 업데이트된 제어 벡터(428) 및 예시적인 내적 결과(440)를 포함한다.
도 4의 예시적인 밀집 벡터(400, 402)는 내적 연산에 사용하기 위해 식별될 수 있는 벡터에 대응한다. 예시적인 위치 식별자(404)는 밀집 벡터(400, 402) 내의 요소의 위치에 대응한다. 전술된 것과 같이, 희소성 벡터 변환기(102)는 밀집 벡터(400, 402)를 예시적인 희소 벡터(406, 408) 및 예시적인 희소성 맵(412, 414)으로 변환한다. 희소 벡터(406)는 밀집 벡터(400)에서와 같은 차수로 나열된 예시적인 밀집 벡터(400)의 0이 아닌 값에 대응한다. 희소 벡터(408)는 밀집 벡터(400)에서와 같은 차수로 나열된 밀집 벡터(402)의 0이 아닌 값에 대응한다. 희소 벡터(406, 408)의 값은 예시적인 요소 위치(410(0-4))에 의해 인덱싱된다. 희소성 맵(412)은 각각의 위치 식별자(404)의 밀집 벡터(400)의 요소가 0 값 또는 0이 아닌 값에 대응하는지에 대응하는 비트 맵 벡터이다. 예를 들어, 밀집 벡터(400)의 2, 3, 5, 6번째 위치는 0이 아닌 값에 대응하기 때문에, 희소성 맵(412)은 2, 3, 5, 6번째 위치에 '1'을 포함한다. 희소성 맵(414)은 마찬가지로 밀집 벡터(402)의 비트 맵 벡터에 대응한다.
인터페이스(200)가 밀집 벡터(400 및 402)에 대한 내적을 수행하도록 하는 명령어를 수신할 때, 내적 계산기(106)는 희소성 맵(412, 414)에 액세스하고 반복 제어 벡터 생성기(202)는 예시적인 희소성 맵(412)과 예시적인 희소성 맵(414)의 논리 AND 함수를 수행하여 예시적인 제어 벡터(416)를 생성한다. 제 1 반복(예를 들어, 반복 0) 동안, 후행 이진 카운터(208)는 제어 벡터에 2개의 후행 0이 있기 때문에(예를 들어, 제어 벡터에 1이 있기 전에 제어 벡터의 2개의 최하위 비트가 0임) 예시적인 후행 0 카운트(418)를 2로 결정한다. 따라서, 예시적인 마스크 생성기(210)는 후행 0 카운트(418)에 근거하여 예시적인 마스크 벡터(420)를 생성한다. 예를 들어, 마스크 생성기(210)는 2개의 최하위 비트(예를 들어, 2개의 비트가 후행 0 카운트의 2와 동일함)는 '1'이고 나머지 비트는 '0'인 마스크 벡터(420)를 생성한다. 예시적인 마스크 벡터(420)가 관심 요소를 분리하기 위해 생성되지만, 관심 요소(예를 들어, 승산되는 요소)를 분리하는 다른 방법이 있을 수 있다. 예를 들어, 예시적인 마스크 생성기(210)는 제어 벡터에서 1을 감산하고(예를 들어, C-1), 제어 벡터(C)의 역을 나열하여 예시적인 마스크 벡터(420)를 생성할 수 있고, 예시적인 논리 게이트(204)는 제어 벡터에서 1을 뺀 것과 제어 벡터(C)의 역 자체에 대한 논리 AND 함수를 수행할 수 있다.
마스크 생성기(210)가 마스크 벡터(420)를 생성하면, 논리 게이트(204)는 마스크(420)와 제 1 희소성 맵(412)의 논리 AND 함수를 수행한다. 요소 위치 결정기(212)는 논리 게이트(204)로부터 결과의 1 카운트에 근거하여 위치를 결정한다. 예를 들어, 도 4에 도시된 것과 같이, 요소 위치 결정기(212)는 AM AND 마스크의 결과에 1이 없기 때문에 위치를 0으로 결정한다. 인터페이스(200)는 메모리(105)로부터 0번째 위치에 있는 희소 벡터(406)의 값에 액세스하여 8의 값(422)(예를 들어, 희소 벡터(406)의 0번째 값)을 반환한다. 마찬가지로, 마스크 생성기(210)는 마스크 벡터(420)를 생성하고, 논리 게이트(204)는 마스크와 제 2 희소성 맵(414)의 논리 AND 함수를 수행한다. 요소 위치 결정기(212)는 논리 게이트(204)로부터 결과의 1 카운트에 근거하여 요소 위치를 결정한다. 예를 들어, 도 4에 도시된 것과 같이, 요소 위치 결정기(212)는 BM AND 마스크의 결과에 1이 2개 있기 때문에 위치를 2로 결정한다. 인터페이스(200)는 메모리(105)로부터 희소 벡터(408)의 2번째 위치에 있는 요소/값에 액세스하여 61의 값(424)(예를 들어, 희소 벡터(408)의 2번째 값)을 반환한다.
인터페이스(200)가 대응하는 값(422, 424(예를 들어, 8 및 61))에 액세스하면, 예시적인 승산기(214)는 대응하는 값(422, 424)을 승산하여 제 1 예시적인 곱(426)(예를 들어, 8 x 61 = 488)을 생성한다. 제 1 예시적인 곱(426)은 예시적인 결과 저장소(218)에 저장된다. 제 1 반복이 완료된 이후, 예시적인 반복 제어 벡터 생성기(202)는 제어 벡터(416)에서 1을 감산하여(예를 들어, C-1) 예시적인 차이 벡터(427)를 생성한다. 제어 벡터 생성기(202)는 제어 벡터(416)와 차이 벡터(427)의 논리 AND 연산을 수행한다. 결과가 0이 아닌 값을 포함하기 때문에(예를 들어, [0, 0, 1, 0, 0, 0, 0, 0]), 반복 제어 벡터 생성기(202)는 후속 반복이 필요하다고 결정하고 제어 벡터(416)를 예시적인 새로운 제어 벡터(428)로 대체한다.
제 2 반복(예를 들어, 반복 1) 동안, 후행 이진 카운터(208)는 제어 벡터(428)에 5개의 후행 0이 있기 때문에(예를 들어, 제어 벡터에 1이 있기 이전에 제어 벡터의 5개의 최하위 비트가 0임) 예시적인 후행 0 카운트(430)를 5로 결정한다. 따라서, 예시적인 마스크 생성기(210)는 후행 0 카운트(430)에 근거하여 예시적인 마스크 벡터(432)를 생성한다. 예를 들어, 마스크 생성기(210)는 5개의 최하위 비트가 '1'이고 나머지 비트가 '0'인 마스크 벡터(432)를 생성한다.
마스크 생성기(210)가 마스크 벡터(432)를 생성하면, 논리 게이트(204)는 마스크와 제 1 희소성 맵(412)의 논리 AND 함수를 수행한다. 요소 위치 결정기(212)는 논리 게이트(204)로부터의 결과의 1 카운트에 근거하여 요소 위치를 결정한다. 예를 들어, 도 4에서, 요소 위치 결정기(212)는 AM AND 마스크의 결과에 1이 2개 있기 때문에 위치를 2로 결정한다. 인터페이스(200)는 메모리(105)로부터 희소 벡터(406)의 2번째 위치에 저장된 요소/값에 액세스하여 3의 값(434)(예를 들어, 희소 벡터(406)의 2번째 값)을 반환한다. 마찬가지로, 논리 게이트(204)는 마스크(432)와 희소성 맵(414)의 논리 AND 함수를 수행한다. 요소 위치 결정기(212)는 논리 게이트(204)로부터의 결과의 1 카운트에 근거하여 요소 위치를 결정한다. 예를 들어, 도 4에서, 요소 위치 결정기(212)는 BM AND 마스크의 결과에 1이 3개 있기 때문에 요소 위치를 3으로 결정한다. 인터페이스(200)는 희소 벡터(408)의 3번째 위치에 대응하는 주소에서 메모리(105)에 저장된 요소/값에 액세스하여 6의 값(436)(예를 들어, 희소 벡터(408)의 3번째 값)을 반환한다.
인터페이스(200)가 대응하는 값(434, 436(예를 들어, 3 및 6))에 액세스하면, 예시적인 승산기(214)는 대응하는 값(434, 436)을 승산하여 제 1 예시적인 곱(438)(예를 들어, 18)을 생성한다. 이것은 제 1 반복이 아니기 때문에, 예시적인 가산기(216)는 이전에 저장된 곱(426)과 현재의 곱(438)을 가산하여(예를 들어, 488 + 18 = 506) 현재 결과(440)를 생성한다. 예시적인 결과 저장소(218)는 현재 결과를 저장한다. 제 2 반복이 완료된 이후, 예시적인 반복 제어 벡터 생성기(202)는, 제어 벡터(428)에서 1을 감산하여(예를 들어, C-1), 도 4의 맥락에서 도시된, 예시적인 차이 벡터(442)를 생성하고 제어 벡터(428)와 차이 벡터(442)의 논리 AND 함수를 수행한다. 결과가 0 값만을 포함하기 때문에, 도 4의 맥락에서 도시된, 반복 제어 벡터 생성기(202)는 후속 반복이 필요하지 않고 내적 프로토콜이 완료되었다고 결정한다. 따라서, 예시적인 인터페이스(200)는 예시적인 결과 저장소(218)에 저장된 결과에 액세스하여 이를 내적 결과(108)로서 출력한다.
도 1의 예시적인 내적 계산기(106)를 구현하는 예시적인 방식이 도 2에 도시되었지만, 도 2에 도시된 하나 이상의 요소, 프로세스 및/또는 디바이스는 임의의 다른 방식으로 결합, 분할, 재배열, 생략, 제거 및/또는 구현될 수 있다. 또한, 예시적인 인터페이스(200), 예시적인 반복 제어 벡터 생성기(202), 예시적인 논리 게이트(204), 예시적인 감산기(206), 예시적인 후행 이진 카운터(208), 예시적인 마스크 생성기(210), 예시적인 요소 위치 결정기(212), 예시적인 승산기(214), 예시적인 가산기(216), 예시적인 결과 저장소(218), 및/또는 보다 일반적으로, 도 2의 예시적인 내적 계산기(106)는 하드웨어, 소프트웨어, 펌웨어 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합으로 구현될 수 있다. 따라서, 예를 들어 예시적인 인터페이스(200), 예시적인 반복 제어 벡터 생성기(202), 예시적인 논리 게이트(204), 예시적인 감산기(206), 예시적인 후행 이진 카운터(208), 예시적인 마스크 생성기(210), 예시적인 요소 위치 결정기(212), 예시적인 승산기(214), 예시적인 가산기(216), 예시적인 결과 저장소(218), 및/또는 더 일반적으로, 도 2의 예시적인 내적 계산기(106)는 하나 이상의 아날로그 또는 디지털 회로(들), 논리 회로, 프로그래밍 가능 프로세서(들), 프로그래밍 가능 컨트롤러(들), GPU(s)(graphic processing unit(s)), DSP(s)(digital signal processor(s)), ASIC(s)(application specific integrated circuit(s)), PLD(s)(programmable logic device(s)) 및/또는 FPLD(s)(field programmable logic device(s))에 의해 구현될 수 있다. 순전히 소프트웨어 및/또는 펌웨어 구현예를 포함하는 본 특허의 장치 또는 시스템 청구항 중 어느 하나를 읽을 때, 예시적인 인터페이스(200), 예시적인 반복 제어 벡터 생성기(202), 예시적인 논리 게이트(204), 예시적인 감산기(206), 예시적인 후행 이진 카운터(208), 예시적인 마스크 생성기(210), 예시적인 요소 위치 결정기(212), 예시적인 승산기(214), 예시적인 가산기(216), 예시적인 결과 저장소(218), 및/또는 더 일반적으로 도 2의 예시적인 내적 계산기(106) 중 적어도 하나는 소프트웨어 및/또는 펌웨어를 포함하는 메모리, DVD(digital versatile disk), CD(compact disk), 블루레이 디스크 등과 같은 비일시적 컴퓨터 판독 가능 저장 디바이스 또는 저장 디스크를 포함하도록 여기에 명시적으로 정의된다. 또한, 도 2의 예시적인 내적 계산기(106)는 도 2에 도시된 것들에 추가하거나 또는 그 대신에 하나 이상의 요소, 프로세스 및/또는 디바이스를 포함할 수 있고, 및/또는 도시된 요소, 프로세스 및 디바이스 중 임의의 하나 이상 또는 모두를 포함할 수 있다. 여기에 사용된 것과 같이, "통신 중"이라는 문구는, 그 변형을 포함하여, 하나 이상의 중간 컴포넌트를 통한 직접적인 통신 및/또는 간접적인 통신을 포함하고, 직접적인 물리적(예를 들어, 유선) 통신 및/또는 지속적인 통신을 필요로 하지 않고, 오히려 주기적 간격, 계획된 간격, 비주기적 간격 및/또는 일회성 이벤트로 선택적인 통신을 추가적으로 포함한다.
도 1 및/또는 도 2의 예시적인 내적 계산기(106)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독 가능 명령어, 하드웨어 구현 상태 머신, 및/또는 이들의 임의의 조합을 나타내는 흐름도가 도 5에 도시된다. 머신 판독 가능 명령어는 아래에서 도 6과 관련하여 논의되는 예시적인 프로세서 플랫폼(600)에 도시된 프로세서(612)와 같은 컴퓨터 프로세서에 의해 실행되는 실행 가능한 프로그램 또는 실행 가능한 프로그램의 일부일 수 있다. 프로그램은 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루레이 디스크 또는 프로세서와 관련된 메모리와 같은 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 소프트웨어로 구현될 수 있지만, 이와는 달리 전체 프로그램 및/또는 그 일부는 프로세서(612) 이외의 디바이스에 의해 실행되고, 및/또는 펌웨어 또는 전용 하드웨어로 구현될 수 있다. 또한, 예시적인 프로그램은 도 5에 도시된 흐름도를 참조하여 설명되지만, 도 2의 예시적인 내적 계산기(106)를 구현하는 많은 다른 방법이 이와는 달리 사용될 수 있다. 예를 들어, 블록의 실행 순서가 변경될 수 있고, 및/또는 도시된 블록의 일부가 변경, 제거 또는 결합될 수 있다. 추가적으로 또는 이와는 달리, 블록의 임의의 것 또는 전부는 소프트웨어 또는 펌웨어를 실행하지 않고 대응하는 연산을 수행하도록 구성된 하나 이상의 하드웨어 회로(예를 들어, 개별 및/또는 통합된 아날로그 및/또는 디지털 회로, FPGA, ASIC, 비교기, op-amp(operational-amplifier), 논리 회로 등)에 의해 구현될 수 있다.
전술된 것과 같이, 도 5의 예시적인 프로세스는 하드 디스크 드라이브, 플래시 메모리, 읽기 전용 메모리, CD, DVD, 캐시, 랜덤 액세스 메모리 및/또는 정보가 임의의 기간 동안(예를 들어, 연장된 기간 동안, 영구적으로, 일시적으로, 일시적인 버퍼링 동안, 및/또는 정보를 캐싱하는 동안) 임의의 다른 저장 디바이스 또는 저장 디스크와 같은 비일시적 컴퓨터 및/또는 머신 판독 가능 매체에 저장된 실행 가능 명령어(예를 들어, 컴퓨터 및/또는 머신 판독 가능 명령어)를 사용하여 구현될 수 있다. 여기에 사용된 것과 같이, 비일시적 컴퓨터 판독 가능 매체라는 용어는 임의의 타입의 컴퓨터 판독 가능 저장 디바이스 및/또는 저장 디스크를 포함하고 전파 신호를 배제하고 전송 매체를 배제하는 것으로 명시적으로 정의된다.
"갖는" 및 "포함하는"(및 그 모든 형태 및 시제)은 여기에서 개방형 용어로 사용된다. 따라서, 청구항이 "갖는다" 또는 "포함한다"의 임의의 형태(예를 들어, 포함한다, 갖는다, 포함하는, 갖는, 가진 등)를 전제부 또는 임의의 타입의 청구항 인용에 사용할 때마다, 추가적인 요소, 용어 등이 대응하는 청구항 또는 인용의 범위를 벗어나지 않고 존재할 수 있다는 것이 이해되어야 한다. 여기에 사용되는 것과 같이, "적어도"라는 문구가, 예를 들어 청구항의 전제부에서 접속 용어로 사용될 때, "포함하는" 및 "갖는"이라는 용어가 개방형인 것과 같은 방식으로 이것은 개방형이다. 예를 들어, 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의 임의의 조합 또는 부분집합을 가리킨다.
도 5는 대응하는 희소 벡터 및 희소성 맵을 사용하여 2개의 밀집 벡터의 내적 계산을 수행하는 도 2 및/또는 도 3의 내적 계산기(106)의 예시적인 구현에 의해 실행될 수 있는 예시적인 머신 판독 가능 명령어를 나타내는 예시적인 흐름도(500)이다. 도 5의 흐름도(500)는 도 2 및/또는 도 3의 예시적인 내적 계산기(106)와 관련하여 설명되지만, 다른 타입(들)의 내적 계산기(들) 및/또는 다른 타입의 프로세서(들)가 대신 사용될 수 있다.
블록(502)에서, 예시적인 내적 계산기(106)는 인터페이스(200)에 2개의 벡터의 내적을 수행하도록 하는 명령어가 수신되었는지(예를 들어, 획득되었는지) 결정한다. 내적을 수행하도록 하는 명령어가 수신되지 않은 경우(블록(502)에서 아니오), 프로세스는 명령어가 수신될 때까지 블록(502)으로 복귀한다. 2개의 벡터(A 및 B)의 내적을 수행하도록 하는 명령어가 인터페이스(200)에 수신된 경우(블록(502)에서 예), 예시적인 내적 계산기(106)는 예시적인 메모리(105)로부터 2개의 벡터(A 및 B)에 대응하는 희소성 맵(AM 및 BM)에 액세스한다(블록(504)). 예를 들어, 인터페이스(200)는 도 1의 메모리 인터페이스(104)와 통신하여 예시적인 메모리(105)로부터 2개의 벡터에 대응하는 희소성 맵에 액세스한다.
블록(506)에서, 예시적인 반복 제어 벡터 생성기(202)는 2개의 희소성 맵(AM 및 BM)으로 논리 AND 함수를 수행하여 제어 벡터(C)를 생성한다. 예를 들어, 논리 게이트(204)는 논리 AND 함수를 수행하여 제어 벡터를 생성한다(예를 들어, C = AM AND BM). 일부 예에서, 제어 벡터(C)가 모두 0을 포함하면, 내적은 완료되고 인터페이스(200)는 내적 결과(108)로서 (예를 들어, 결과 저장소(218)에 미리 저장된) 0을 출력한다. 제어 벡터가 0이 아닌 값을 포함하지 않는 경우(블록(507)에서 아니오), 내적의 결과는 0이고(예를 들어, 2개의 밀집 벡터 사이에 0이 아닌 공통 요소가 없음) 프로세스는 블록(534)로 진행하여 결과를 예시적인 결과 저장소(218)(예를 들어, 0으로 초기화되어 있음)에 출력한다. 제어 벡터가 0이 아닌 값을 포함하는 경우(블록(507)에서 예), 예시적인 후행 이진 카운터(208)는 제어 벡터(C)의 후행 이진 카운트(예를 들어, 후행 0 카운트 또는 후행 1 카운트)를 결정한다(블록(508)). 예를 들어, 도 2의 후행 이진 카운터(208)는 제어 벡터에서 1이 나타나기 이전에 몇 개의 최하위 비트가 0인지 결정한다. (다른 예에서, 후행 비트 카운터(208)는 제어 벡터에서 0이 나타나기 이전에 몇 개의 최하위 비트가 1인지 결정한다)
블록(510)에서, 예시적인 마스크 생성기(210)는 후행 0/이진 카운트에 근거하여 마스크 벡터를 생성한다. 예를 들어, 마스크 생성기(210)는 입력 벡터(A 및 B)와 같은 차원의 벡터를 생성할 수 있고, 마스크 벡터의 처음 X개(예를 들어, X는 후행 0 카운트)의 최하위 비트는 '1'이고 마스크 벡터의 나머지 비트는 '0'이다. (다른 예에서, 마스크 생성기(210)는 입력 벡터와 같은 차원의 벡터를 생성할 수 있고, 마스크 벡터의 처음 X개의 최하위 비트는 '0'이고 마스크 벡터의 나머지 비트는 '1'이다) 블록(512)에서, 예시적인 논리 게이트(204)는 마스크와 제 1 희소성 맵(AM)의 논리 AND 함수를 수행하여(예를 들어, 마스크 AND AM) 제 1 결과를 생성하고 마스크와 제 2 희소성 맵(BM)의 논리 AND 함수를 수행하여(예를 들어, 마스크 AND BM) 제 2 결과를 생성한다.
블록(514)에서, 예시적인 요소 위치 결정기(212)는 제 1 결과의 1 카운트에 근거하여 제 1 벡터(A)에 대응하는 제 1 희소 벡터(AS)의 제 1 메모리 위치를 결정한다. 예를 들어, 요소 위치 결정기(212)는 제 1 결과에서 1의 개수(예를 들어, 이진 값)를 카운트하고 1의 개수(예를 들어, 이진 값)에 근거하여 희소 벡터의 위치를 결정한다. 블록(516)에서, 예시적인 요소 위치 결정기(212)는 제 2 결과의 1 카운트에 근거하여 제 2 벡터(B)에 대응하는 제 2 희소 벡터(BS)의 제 2 메모리 위치를 결정한다. 예를 들어, 요소 위치 결정기(212)는 제 2 결과에서 1의 개수를 카운트하고 1의 개수에 근거하여 희소 벡터의 위치를 결정한다.
블록(518)에서, 예시적인 인터페이스(200)는 희소 벡터(AS 및 BS)의 제 1 및 제 2 위치에 저장된 값에 액세스한다. 예를 들어, 제 1 희소 벡터(AS)가 [5; 316; 935; 17]이고 제 1 메모리 위치가 2인 경우, 인터페이스(200)는 예시적인 메모리(105)에 저장된 희소 벡터로부터 935의 값에 액세스한다(예를 들어, AS의 2번째에 대응하고, 5는 0번째 위치에 있고, 316은 1번째 위치에 있고, 935는 2번째에 있고, 17은 3번째 위치에 있음). 블록(520)에서, 예시적인 승산기(214)는 대응하는 희소 벡터로부터 액세스된 값을 승산하여 곱을 획득한다. 예를 들어, 제 1 희소 벡터(AS)로부터 액세스된 값이 935이고 제 2 희소 벡터(BS)로부터 액세스된 값이 5인 경우, 승산기(214)는 935와 5 값을 승산하여 4,675의 곱을 생성한다.
블록(522)에서, 가산기(216)는 곱을 결과 저장소(218)에 저장된 값(예를 들어, 저장된 결과)에 가산한다. 블록(524)에서, 결과 저장소(218)는 합에 근거하여 저장된 결과를 업데이트한다. 제 1 반복 동안, 결과 저장소(218)에 저장된 값은 0이다. 따라서, 일부 예에서, 제 1 프로토콜 동안, 블록(522)은 스킵될 수 있고 결과 저장소(218)는 결과 저장소(218)의 저장된 결과로서 곱을 저장할 수 있다. 블록(526)에서, 예시적인 감산기(206)는 제어 벡터(C)의 값에 대응하는 것으로부터 1을 감산하여 C-1 벡터(예를 들어, 차이 벡터)를 생성한다. 예를 들어, 제어 벡터(C)가 [1, 0, 0, 0](예를 들어, 십진수 8)인 경우, 감산기(206)는 [0, 1, 1, 1](예를 들어, 십진수 7)인 벡터(C-1)를 생성한다.
블록(528)에서, 예시적인 반복 제어 벡터 생성기(202)는 논리 게이트(204)를 사용하여 제어 벡터(C)와 차이 벡터(C-1)의 논리 AND 함수를 수행함으로써 업데이트된 제어 벡터를 생성한다. 블록(530)에서, 예시적인 반복 제어 벡터 생성기(202)는 업데이트된 제어 벡터의 요소가 모두 같은 이진 값에 대응하는지 결정한다(예를 들어, 업데이트된 제어 벡터의 각각의 요소가 0인지 결정). 예시적인 반복 제어 벡터 생성기(202)가 업데이트된 제어 벡터 요소가 모두 같은 이진 값에 대응하지는 않는다고 결정하는 경우(블록(530)에서 아니오), 반복 제어 벡터 생성기(202)는 제어 벡터를 업데이트된 제어 벡터로 대체하고(블록(532)), 프로세스는 후속 반복을 수행하기 위해 블록(508)으로 복귀한다. 예시적인 반복 제어 벡터 생성기(202)가 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응한다고 결정하는 경우(예를 들어, 모두 0)(블록(530)에서 예), 예시적인 인터페이스(200)는 결과 저장소(218)에 저장된 결과에 액세스하여 저장된 결과를 내적 결과(108)로서 출력한다(블록(534)).
도 6은 도 2의 예시적인 내적 계산기(106)를 구현하기 위해 도 5의 명령어를 실행하도록 구성된 예시적인 프로세서 플랫폼(600)의 블록도이다. 프로세서 플랫폼(600)은, 예를 들어 서버, 개인용 컴퓨터, 워크스테이션, 자율 학습 머신(예를 들어, 신경망), 모바일 디바이스(예를 들어, 휴대 전화, 스마트 폰, iPadTM와 같은 태블릿) 또는 임의의 다른 타입의 컴퓨팅 디바이스일 수 있다.
도시된 예의 프로세서 플랫폼(600)은 프로세서(612)를 포함한다. 도시된 예의 프로세서(612)는 하드웨어이다. 예를 들어, 프로세서(612)는 임의의 원하는 제품군 또는 제조사의 하나 이상의 집적 회로, 논리 회로, 마이크로프로세서, GPU, DSP 또는 컨트롤러에 의해 구현될 수 있다. 하드웨어 프로세서는 반도체 기반(예를 들어, 실리콘 기반) 디바이스일 수 있다. 이 예에서, 프로세서는 예시적인 인터페이스(200), 예시적인 반복 제어 벡터 생성기(202), 예시적인 논리 게이트(204), 예시적인 감산기(206), 예시적인 후행 이진 카운터(208), 예시적인 마스크 생성기(210), 예시적인 요소 위치 결정기(212), 예시적인 승산기(214) 및 예시적인 가산기(216)를 구현한다.
도시된 예의 프로세서(612)는 로컬 메모리(613)(예를 들어, 캐시)를 포함한다. 일부 예에서, 로컬 메모리(613)는 예시적인 결과 저장소(218)를 구현한다. 도시된 예의 프로세서(612)는 버스(618)를 통해 휘발성 메모리(614) 및 비휘발성 메모리(616)를 포함하는 메인 메모리와 통신한다. 일부 예에서, 메인 메모리는 예시적인 메모리(105)를 구현한다. 휘발성 메모리(614)는 SDRAM(Synchronous Dynamic Random Access Memory), DRAM(Dynamic Random Access Memory), RDRAM®(RAMBUS® Dynamic Random Access Memory) 및/또는 임의의 다른 타입의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비휘발성 메모리(616)는 플래시 메모리 및/또는 임의의 다른 원하는 타입의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(614, 616)에 대한 액세스는 메모리 컨트롤러에 의해 제어된다.
도시된 예의 프로세서 플랫폼(600)은 또한 인터페이스 회로(620)를 포함한다. 인터페이스 회로(620)는 Ethernet 인터페이스, USB(universal serial bus), Bluetooth® 인터페이스, NFC(near field communication) 인터페이스 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 타입의 인터페이스 표준에 의해 구현될 수 있다.
도시된 예에서, 하나 이상의 입력 디바이스(622)가 인터페이스 회로(620)에 접속된다. 입력 디바이스(들)(622)는 사용자가 데이터 및/또는 명령어를 프로세서(612)에 입력하도록 한다. 입력 디바이스(들)는, 예를 들어 오디오 센서, 마이크, (스틸 또는 비디오) 카메라, 키보드, 버튼, 마우스, 터치스크린, 트랙-패드, 트랙볼, 아이소포인트(isopoint) 및/또는 음성 인식 시스템에 의해 구현될 수 있다.
하나 이상의 출력 디바이스(624)가 또한 도시된 예의 인터페이스 회로(620)에 접속된다. 출력 디바이스(624)는, 예를 들어 디스플레이 디바이스(예를 들어, LED(light emitting diode), OLED(organic light emitting diode), LCD(liquid crystal display), CRT(cathode ray tube display), IPS(in-place switching) 디스플레이, 터치스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커 의해 구현될 수 있다. 따라서, 도시된 예의 인터페이스 회로(620)는 전형적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
도시된 예의 인터페이스 회로(620)는 또한 네트워크(626)를 통해 외부 머신과 데이터 교환을 용이하게 하는 송신기, 수신기, 트랜시버, 모뎀, 주거용 게이트웨이, 무선 액세스 포인트 및/또는 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은, 예를 들어 Ethernet 접속, DSL(digital subscriber line) 접속, 전화선 접속, 동축 케이블 시스템, 위성 시스템, 현장 무선 시스템, 휴대 전화 시스템 등을 통해 이루어질 수 있다.
도시된 예의 프로세서 플랫폼(600)은 또한 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스(628)를 포함한다. 이러한 대용량 저장 디바이스(628)의 예는 플로피 디스크 드라이브, 하드 드라이브 디스크, 컴팩트 디스크 드라이브, 블루레이 디스크 드라이브, RAID(redundant array of independent disks) 시스템 및 DVD(digital versatile disk) 드라이브를 포함한다.
도 5의 머신 실행 가능 명령어(632)는 대용량 저장 디바이스(628), 휘발성 메모리(614), 비휘발성 메모리(616) 및/또는 CD 또는 DVD와 같은 탈착 가능한 비일시적 컴퓨터 판독 가능 저장 매체에 저장될 수 있다.
전술한 내용으로부터, 희소 벡터를 사용하여 내적 계산을 수행하는 예시적인 방법, 장치 및 제조품이 개시되었음을 알 수 있을 것이다. 개시된 방법, 장치 및 제조품은 큰 밀집 벡터(예를 들어, 0 및 0이 아닌 값을 모두 포함하는 벡터)에 대응하는 더 작은 희소 벡터(0이 아닌 값만을 포함하는 벡터) 및 희소성 맵/벡터(예를 들어, 밀집 벡터의 비트 맵)를 저장하여 큰 밀집 벡터를 저장하는 데 필요한 메모리의 양을 줄임으로써 컴퓨팅 디바이스의 효율성을 개선한다. 또한, 여기에 개시된 예는 희소성 맵을 사용하여 내적을 수행하여 내적을 수행하는 데 필요한 로컬 메모리의 양을 줄이고 이전 기술과 관련된 내적을 수행하는 데 필요한 복잡한 승산 연산의 양을 줄인다. 따라서, 여기에 개시된 예는 내적 계산을 수행하는 데 필요한 프로세서 리소스의 양을 줄임으로써(예를 들어, 같은 계산을 수행하는 데 더 적은 프로세서 사이클이 필요함) 컴퓨팅 디바이스의 효율성을 개선하여 내적 계산을 컴퓨팅하는 속도를 높인다. 따라서, 개시된 방법, 장치 및 제조품은 컴퓨터의 기능에서 하나 이상의 개선(들)에 관한 것이다.
예 1은 제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 카운터와, 후행 이진 카운트에 근거하여 마스크 벡터를 생성하는 마스크 생성기와, 제 1 비트 맵과 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 제 1 희소 벡터의 제 1 값에 액세스하고, 제 2 비트 맵 및 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 제 2 희소 벡터의 제 2 값에 액세스하는 인터페이스와, 제 1 값과 제 2 값을 승산하여 곱을 생성하는 승산기를 포함하는 내적 계산기를 포함한다.
예 2는 예 1의 내적 계산기를 포함하고, 제 1 비트 맵은 제 1 벡터의 제 1 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 제 2 비트 맵은 제 2 벡터의 제 2 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고, 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응한다.
예 3은 예 1의 내적 계산기를 포함하고, 제 1 비트 맵과 제 2 비트 맵을 입력으로 하는 제 1 논리 AND 연산에 근거하여 제어 벡터를 생성하는 논리 게이트를 더 포함한다.
예 4는 예 1의 내적 계산기를 포함하고, 마스크 생성기는 최하위 비트의 제 1 이진 값의 개수를 포함하는 마스크 벡터를 생성하고, 개수는 후행 이진 카운트에 대응하고, 마스크 생성기는 제 1 벡터와 같은 차원을 갖는 마스크 벡터를 생성한다.
예 5는 예 1의 내적 계산기를 포함하고, 제 2 결과의 이진 값의 제 1 개수를 결정하고, 제 3 결과의 이진 값의 제 2 개수를 결정하는 요소 위치 결정기를 더 포함하고, 인터페이스는 이진 값의 제 1 개수에 대응하는 제 1 주소에 근거하여 제 1 값에 액세스하고, 인터페이스는 이진 값의 제 2 개수에 대응하는 제 2 주소에 근거하여 제 2 값에 액세스한다.
예 6은 예 1의 내적 계산기를 포함하고, 곱을 저장하는 저장소를 더 포함한다.
예 7은 예 1의 내적 계산기를 포함하고, 제어 벡터의 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 감산기와, 제어 벡터와 차이 벡터의 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 반복 제어 벡터 생성기를 더 포함한다.
예 8은 예 7의 내적 계산기를 포함하고, 인터페이스는, 반복 제어 벡터 생성기가 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응한다고 결정할 때 곱을 내적 결과로서 출력한다.
예 9는 예 7의 내적 계산기를 포함하고, 후행 이진 카운트는 제 1 후행 이진 카운트이고, 마스크 벡터는 제 1 마스크 벡터이고, 곱은 제 1 곱이고, 반복 제어 벡터 생성기가 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하지 않는다고 결정할 때 카운터는 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하고, 마스크 생성기는 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하고, 인터페이스는 제 1 비트 맵과 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 제 1 희소 벡터의 제 3 값에 액세스하고, 제 2 비트 맵과 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 제 2 희소 벡터의 제 4 값에 액세스하고, 승산기는 제 3 값과 제 4 값을 승산하여 제 2 곱을 생성하고, 제 1 곱과 제 2 곱을 가산하는 가산기를 더 포함한다.
예 10은 예 9의 내적 계산기를 포함하고, 차이 벡터는 제 1 차이 벡터이고, 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 요소는 제 1 요소이고, 감산기는 업데이트된 제어 벡터의 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하고, 반복 제어 벡터 생성기는 업데이트된 제어 벡터와 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하고, 인터페이스는 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 같은 이진 값에 대응할 때, 제 1 곱과 제 2 곱의 합을 내적 결과로서 출력한다.
예 11은 실행될 때, 머신으로 하여금 적어도, 제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하고, 후행 이진 카운트에 근거하여 마스크 벡터를 생성하고, (a) 제 1 비트 맵과 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거한 제 1 희소 벡터의 제 1 값과 (b) 제 2 비트 맵과 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거한 제 2 희소 벡터의 제 2 값을 승산하도록 하는 명령어를 포함하는 적어도 하나의 비일시적 컴퓨터 판독 가능 저장 매체를 포함한다.
예 12는 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 제 1 비트 맵은 제 1 벡터의 0 값 또는 0이 아닌 값을 각각 식별하고, 제 2 비트 맵은 제 2 벡터의 0 값 또는 0이 아닌 값을 각각 식별하고, 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응한다.
예 13은 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 제 1 비트 맵과 제 2 비트 맵을 입력으로 하는 제 1 논리 AND 연산에 근거하여 제어 벡터를 생성하도록 한다.
예 14는 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 최하위 비트의 제 1 이진 값의 개수를 포함하는 마스크 벡터를 생성하도록 하고, 개수는 후행 이진 카운트에 대응하고, 마스크 벡터는 제 1 벡터와 같은 차원을 갖는다.
예 15는 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 제 2 결과의 이진 값의 제 1 개수를 결정하고, 이진 값의 제 1 개수에 대응하는 제 1 주소에 근거하여 제 1 값에 액세스하고, 제 3 결과의 이진 값의 제 2 개수를 결정하고, 이진 값의 제 2 개수에 대응하는 제 2 주소에 근거하여 제 2 값에 액세스하도록 한다.
예 16은 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 제 1 값과 제 2 값의 곱을 로컬 메모리에 저장하도록 한다.
예 17은 예 11의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 제어 벡터의 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하고, 제어 벡터와 차이 벡터의 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하도록 한다.
예 18은 예 17의 컴퓨터 판독 가능 저장 매체를 포함하고, 명령어는 머신으로 하여금 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응할 때 제 1 값과 제 2 값의 곱을 내적 결과로서 출력하도록 한다.
예 19는 예 17의 컴퓨터 판독 가능 저장 매체를 포함하고, 후행 이진 카운트는 제 1 후행 이진 카운트이고, 마스크 벡터는 제 1 마스크 벡터이고, 곱은 제 1 곱이고, 명령어는 머신으로 하여금, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하지 않을 때, 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하고, 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하고, 제 1 비트 맵과 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 제 1 희소 벡터의 제 3 값에 액세스하고, 제 2 비트 맵과 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 제 2 희소 벡터의 제 4 값에 액세스하고, 제 3 값과 제 4 값을 승산하여 제 2 곱을 생성하고, 제 1 곱과 제 2 곱을 가산하도록 한다.
예 20은 예 19의 컴퓨터 판독 가능 저장 매체를 포함하고, 차이 벡터는 제 1 차이 벡터이고, 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 요소는 제 1 요소이고, 명령어는 머신으로 하여금, 업데이트된 제어 벡터의 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하고, 업데이트된 제어 벡터와 제 2 차이 벡터 사이의 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하고, 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 같은 이진 값에 대응할 때, 제 1 곱과 제 2 곱의 합을 내적 결과로서 출력하도록 한다.
예 21은 2개의 벡터 사이의 내적을 결정하는 방법을 포함하고, 방법은, 적어도 하나의 논리 회로를 사용하여, 제 1 벡터의 제 1 비트 맵과 제 2 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 것과, 적어도 하나의 논리 회로를 사용하여, 후행 이진 카운트에 대응하는 마스크 벡터를 생성하는 것과, 제 1 비트 맵과 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 제 1 벡터에 대응하는 제 1 희소 벡터의 제 1 값에 액세스하는 것과, 제 2 비트 맵과 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 제 2 벡터에 대응하는 제 2 희소 벡터의 제 2 값에 액세스하는 것과, 적어도 하나의 논리 회로를 사용하여, 제 1 값과 제 2 값을 승산하여 곱을 생성하는 것을 포함한다.
예 22는 예 21의 방법을 포함하고, 제 1 비트 맵은 제 1 벡터의 제 1 요소가 0 값 또는 0이 아닌 값에 대응하는지에 대응하고, 제 2 비트 맵은 제 2 벡터의 제 2 요소가 0 값 또는 0이 아닌 값에 대응하는지에 대응하고, 제 1 희소 벡터는 제 1 벡터의 0이 아닌 값에 대응하고, 제 2 희소 벡터는 제 2 벡터의 0이 아닌 값에 대응한다.
예 23은 예 21의 방법을 포함하고, 제 1 비트 맵과 제 2 비트 맵을 입력으로 하는 제 1 논리 AND 연산에 근거하여 제어 벡터를 생성하는 것을 더 포함한다.
예 24는 예 21의 방법을 포함하고, 최하위 비트의 제 1 이진 값의 개수를 포함하는 마스크 벡터를 생성하는 것을 더 포함하고, 개수는 후행 이진 카운트에 대응하고, 마스크 벡터는 제 1 벡터와 같은 차원을 갖는다.
예 25는 예 21의 방법을 포함하고, 제 2 결과의 이진 값의 제 1 개수를 결정하는 것과, 이진 값의 제 1 개수에 대응하는 제 1 주소에 근거하여 제 1 값에 액세스하는 것과, 제 3 결과의 이진 값의 제 2 개수를 결정하는 것과, 이진 값의 제 2 개수에 대응하는 제 2 주소에 근거하여 제 2 값에 액세스하는 것을 더 포함한다.
예 26은 예 21의 방법을 포함하고, 제 1 값과 제 2 값의 곱을 로컬 메모리에 저장하는 것을 더 포함한다.
예 27은 예 21의 방법을 포함하고, 제어 벡터의 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 것과, 제어 벡터와 차이 벡터에 대한 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하는 것과, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 것을 더 포함한다.
예 28은 예 27의 방법을 포함하고, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응한다고 결정할 때 제 1 값과 제 2 값의 곱을 내적 결과로서 출력하는 것을 더 포함한다.
예 29는 예 27의 방법을 포함하고, 후행 이진 카운트는 제 1 후행 이진 카운트이고, 마스크 벡터는 제 1 마스크 벡터이고, 곱은 제 1 곱이고, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하지 않는다고 결정할 때 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하는 것과, 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하는 것과, 제 1 비트 맵과 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 제 1 희소 벡터의 제 3 값에 액세스하는 것과, 제 2 비트 맵과 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 제 2 희소 벡터의 제 4 값에 액세스하는 것과, 제 3 값과 제 4 값을 승산하여 제 2 곱을 생성하는 것과, 제 1 곱과 제 2 곱을 가산하는 것을 더 포함한다.
예 30은 예 29의 방법을 포함하고, 차이 벡터는 제 1 차이 벡터이고, 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 요소는 제 1 요소이고, 업데이트된 제어 벡터의 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하는 것과, 업데이트된 제어 벡터와 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하는 것과, 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 같은 이진 값에 대응할 때, 제 1 곱과 제 2 곱의 합을 내적 결과로서 출력하는 것을 더 포함한다.
예 31은 제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 제 1 수단과, 후행 이진 카운트에 근거하여 마스크 벡터를 생성하는 제 2 수단과, 제 1 비트 맵과 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 제 1 희소 벡터의 제 1 값에 액세스하고, 제 2 비트 맵과 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 제 2 희소 벡터의 제 2 값에 액세스하는 제 3 수단과, 제 1 값과 제 2 값을 승산하여 곱을 생성하는 제 4 수단을 포함하는 내적 계산기를 포함한다.
예 32는 예 31의 내적 계산기를 포함하고, 제 1 비트 맵은 제 1 벡터의 제 1 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 제 2 비트 맵은 제 2 벡터의 제 2 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고, 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응한다.
예 33은 예 31의 내적 계산기를 포함하고, 제 1 비트 맵과 제 2 비트 맵을 입력으로 하는 제 1 논리 AND 연산에 근거하여 제어 벡터를 생성하는 제 5 수단을 더 포함한다.
예 34는 예 31의 내적 계산기를 포함하고, 제 2 수단은 최하위 비트의 이진 값의 제 1 개수를 포함하는 마스크 벡터를 생성하는 수단을 포함하고, 개수는 후행 이진 카운트에 대응하고, 제 2 수단은 제 1 벡터와 같은 차원을 가진 마스크 벡터를 생성하는 수단을 포함한다.
예 35는 예 31의 내적 계산기를 포함하고, 제 2 결과의 이진 값의 제 1 개수를 결정하고, 제 3 결과의 이진 값의 제 2 개수를 결정하는 제 6 수단을 더 포함하고, 제 3 수단은 이진 값의 제 1 개수에 대응하는 제 1 주소에 근거하여 제 1 값에 액세스하는 수단을 포함하고, 제 3 수단은 이진 값의 제 2 개수에 대응하는 제 2 주소에 근거하여 제 2 값에 액세스하는 수단을 포함한다.
예 36은 예 31의 내적 계산기를 포함하고, 곱을 저장하기 위한 제 7 수단을 더 포함한다.
예 37은 예 31의 내적 계산기를 포함하고, 제어 벡터의 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 제 8 수단과, 제어 벡터와 차이 벡터의 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고, 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 제 9 수단을 더 포함한다.
예 38은 예 37의 내적 계산기를 포함하고, 제 3 수단은, 제 9 수단이 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응한다고 결정할 때 곱을 내적 결과로서 출력하는 수단을 포함한다.
예 39는 예 37의 내적 계산기를 포함하고, 후행 이진 카운트는 제 1 후행 이진 카운트이고, 마스크 벡터는 제 1 마스크 벡터이고, 곱은 제 1 곱이고, 제 9 수단이 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하지 않는다고 결정할 때 제 1 수단은 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하는 수단을 포함하고, 제 2 수단은 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하는 수단을 포함하고, 제 3 수단은 제 1 비트 맵과 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 제 1 희소 벡터의 제 3 값에 액세스하고, 제 2 비트 맵과 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 제 2 희소 벡터의 제 4 값에 액세스하는 수단을 포함하고, 제 4 수단은 제 3 값과 제 4 값을 승산하여 제 2 곱을 생성하는 수단을 포함하고, 제 1 곱과 제 2 곱을 가산하는 가산기를 더 포함한다.
예 40은 예 39의 내적 계산기를 포함하고, 차이 벡터는 제 1 차이 벡터이고, 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 요소는 제 1 요소이고, 제 8 수단은 업데이트된 제어 벡터의 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하는 수단을 포함하고, 제 9 수단은 업데이트된 제어 벡터와 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하는 수단을 포함하고, 제 3 수단은 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 같은 이진 값에 대응할 때, 제 1 곱과 제 2 곱의 합을 내적 결과로서 출력하는 수단을 포함한다.
여기에 특정의 예시적인 방법, 장치 및 제조품이 개시되었지만, 본 특허의 보호 범위는 이에 한정되지는 않는다. 반대로, 본 특허는 본 특허의 청구 범위에 속하는 모든 방법, 장치 및 제조품을 포함한다.

Claims (40)

  1. 내적 계산기로서,
    제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 카운터와,
    상기 후행 이진 카운트에 근거하여 마스크 벡터를 생성하는 마스크 생성기와,
    상기 제 1 비트 맵과 상기 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 상기 제 1 희소 벡터의 제 1 값에 액세스하고, 상기 제 2 비트 맵과 상기 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 상기 제 2 희소 벡터의 제 2 값에 액세스하는 인터페이스와,
    상기 제 1 값과 상기 제 2 값을 승산하여 곱을 생성하는 승산기를 포함하는,
    내적 계산기.
  2. 제 1 항에 있어서,
    상기 제 1 비트 맵은 상기 제 1 벡터의 제 1 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 상기 제 2 비트 맵은 상기 제 2 벡터의 제 2 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고,
    상기 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고, 상기 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응하는,
    내적 계산기.
  3. 제 1 항에 있어서,
    상기 제 1 비트 맵과 상기 제 2 비트 맵을 입력으로 하는 상기 제 1 논리 AND 연산에 근거하여 상기 제어 벡터를 생성하는 논리 게이트를 더 포함하는,
    내적 계산기.
  4. 제 1 항에 있어서,
    상기 마스크 생성기는 최하위 비트의 제 1 이진 값의 개수를 포함하는 상기 마스크 벡터를 생성하고, 상기 개수는 상기 후행 이진 카운트에 대응하고, 상기 마스크 생성기는 상기 제 1 벡터와 같은 차원을 갖는 상기 마스크 벡터를 생성하는,
    내적 계산기.
  5. 제 1 항에 있어서,
    상기 제 2 결과의 이진 값의 제 1 개수를 결정하고, 상기 제 3 결과의 이진 값의 제 2 개수를 결정하는 요소 위치 결정기를 더 포함하고,
    상기 인터페이스는 이진 값의 상기 제 1 개수에 대응하는 제 1 주소에 근거하여 상기 제 1 값에 액세스하고, 상기 인터페이스는 이진 값의 상기 제 2 개수에 대응하는 제 2 주소에 근거하여 제 2 값에 액세스하는,
    내적 계산기.
  6. 제 1 항에 있어서,
    상기 곱을 저장하는 저장소를 더 포함하는,
    내적 계산기.
  7. 제 1 항에 있어서,
    상기 제어 벡터의 상기 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 감산기와,
    상기 제어 벡터와 상기 차이 벡터의 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고, 상기 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 반복 제어 벡터 생성기를 더 포함하는,
    내적 계산기.
  8. 제 7 항에 있어서,
    상기 인터페이스는, 상기 반복 제어 벡터 생성기가 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응한다고 결정할 때 상기 곱을 내적 결과로서 출력하는,
    내적 계산기.
  9. 제 7 항에 있어서,
    상기 후행 이진 카운트는 제 1 후행 이진 카운트이고, 상기 마스크 벡터는 제 1 마스크 벡터이고, 상기 곱은 제 1 곱이고, 상기 반복 제어 벡터 생성기가 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응하지 않는다고 결정할 때,
    상기 카운터는 상기 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하고,
    상기 마스크 생성기는 상기 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하고,
    상기 인터페이스는 상기 제 1 비트 맵과 상기 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 상기 제 1 희소 벡터의 제 3 값에 액세스하고, 상기 제 2 비트 맵과 상기 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 상기 제 2 희소 벡터의 제 4 값에 액세스하고,
    상기 승산기는 상기 제 3 값과 상기 제 4 값을 승산하여 제 2 곱을 생성하고,
    상기 제 1 곱과 제 2 곱을 가산하는 가산기를 더 포함하는,
    내적 계산기.
  10. 제 9 항에 있어서,
    상기 차이 벡터는 제 1 차이 벡터이고, 상기 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 상기 요소는 제 1 요소이고,
    상기 감산기는 상기 업데이트된 제어 벡터의 상기 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하고,
    상기 반복 제어 벡터 생성기는 상기 업데이트된 제어 벡터와 상기 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하고,
    상기 인터페이스는, 상기 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 상기 같은 이진 값에 대응할 때, 상기 제 1 곱과 상기 제 2 곱의 합을 내적 결과로서 출력하는,
    내적 계산기.

  11. 적어도 하나의 비일시적 컴퓨터 판독 가능 저장 매체로서, 실행될 때, 머신으로 하여금 적어도, 제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하고,
    상기 후행 이진 카운트에 근거하여 마스크 벡터를 생성하고,
    (a) 상기 제 1 비트 맵과 상기 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거한 상기 제 1 희소 벡터의 제 1 값과 (b) 상기 제 2 비트 맵과 상기 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거한 상기 제 2 희소 벡터의 제 2 값을 승산하도록 하는 명령어를 포함하는,
    컴퓨터 판독 가능 저장 매체.
  12. 제 11 항에 있어서,
    상기 제 1 비트 맵은 상기 제 1 벡터의 0 값 또는 0이 아닌 값을 각각 식별하고, 상기 제 2 비트 맵은 각각 상기 제 2 벡터의 0 값 또는 0이 아닌 값을 각각 식별하고,
    상기 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고 상기 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응하는,
    컴퓨터 판독 가능 저장 매체.
  13. 제 11 항에 있어서,
    상기 명령어는 상기 머신으로 하여금 상기 제 1 비트 맵과 상기 제 2 비트 맵을 입력으로 하는 상기 제 1 논리 AND 연산에 근거하여 상기 제어 벡터를 생성하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  14. 제 11 항에 있어서,
    상기 명령어는 상기 머신으로 하여금 최하위 비트의 제 1 이진 값의 개수를 포함하는 상기 마스크 벡터를 생성하도록 하고, 상기 개수는 상기 후행 이진 카운트에 대응하고, 상기 마스크 벡터는 상기 제 1 벡터와 같은 차원을 갖는,
    컴퓨터 판독 가능 저장 매체.
  15. 제 11 항에 있어서,
    상기 명령어는 상기 머신으로 하여금,
    상기 제 2 결과의 이진 값의 제 1 개수를 결정하고,
    이진 값의 상기 제 1 개수에 대응하는 제 1 주소에 근거하여 상기 제 1 값에 액세스하고,
    상기 제 3 결과의 이진 값의 제 2 개수를 결정하고,
    이진 값의 상기 제 2 개수에 대응하는 제 2 주소에 근거하여 상기 제 2 값에 액세스하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  16. 제 11 항에 있어서,
    상기 명령어는 상기 머신으로 하여금 상기 제 1 값과 상기 제 2 값의 곱을 로컬 메모리에 저장하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  17. 제 11 항에 있어서,
    상기 명령어는 상기 머신으로 하여금,
    상기 제어 벡터의 상기 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하고,
    상기 제어 벡터와 상기 차이 벡터의 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고,
    상기 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  18. 제 17 항에 있어서,
    상기 명령어는 상기 머신으로 하여금,
    상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응할 때 상기 제 1 값과 상기 제 2 값의 곱을 내적 결과로서 출력하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  19. 제 17 항에 있어서,
    상기 후행 이진 카운트는 제 1 후행 이진 카운트이고, 상기 마스크 벡터는 제 1 마스크 벡터이고, 상기 곱은 제 1 곱이고, 상기 명령어는 상기 머신으로 하여금, 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응하지 않을 때,
    상기 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하고,
    상기 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하고,
    상기 제 1 비트 맵과 상기 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 상기 제 1 희소 벡터의 제 3 값에 액세스하고,
    상기 제 2 비트 맵과 상기 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 상기 제 2 희소 벡터의 제 4 값에 액세스하고,
    상기 제 3 값과 상기 제 4 값을 승산하여 제 2 곱을 생성하고,
    상기 제 1 곱과 제 2 곱을 가산하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  20. 제 19 항에 있어서,
    상기 차이 벡터는 제 1 차이 벡터이고, 상기 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 상기 요소는 제 1 요소이고, 상기 명령어는 상기 머신으로 하여금,
    상기 업데이트된 제어 벡터의 상기 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하고,
    상기 업데이트된 제어 벡터와 상기 제 2 차이 벡터 사이의 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하고,
    상기 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 상기 같은 이진 값에 대응할 때, 상기 제 1 곱과 상기 제 2 곱의 합을 내적 결과로서 출력하도록 하는,
    컴퓨터 판독 가능 저장 매체.
  21. 2개의 벡터 사이의 내적을 결정하는 방법으로서,
    상기 방법은,
    적어도 하나의 논리 회로를 사용하여, 제 1 벡터의 제 1 비트 맵과 제 2 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 것과,
    적어도 하나의 논리 회로를 사용하여, 상기 후행 이진 카운트에 대응하는 마스크 벡터를 생성하는 것과,
    상기 제 1 비트 맵과 상기 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 상기 제 1 벡터에 대응하는 제 1 희소 벡터의 제 1 값에 액세스하는 것과,
    상기 제 2 비트 맵과 상기 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 상기 제 2 벡터에 대응하는 제 2 희소 벡터의 제 2 값에 액세스하는 것과,
    적어도 하나의 논리 회로를 사용하여, 상기 제 1 값과 상기 제 2 값을 승산하여 곱을 생성하는 것을 포함하는,
    방법.
  22. 제 21 항에 있어서,
    상기 제 1 비트 맵은 상기 제 1 벡터의 제 1 요소가 0 값 또는 0이 아닌 값에 대응하는지에 대응하고, 상기 제 2 비트 맵은 상기 제 2 벡터의 제 2 요소가 0 값 또는 0이 아닌 값에 대응하는지에 대응하고,
    상기 제 1 희소 벡터는 상기 제 1 벡터의 0이 아닌 값에 대응하고 상기 제 2 희소 벡터는 상기 제 2 벡터의 0이 아닌 값에 대응하는,
    방법.
  23. 제 21 항에 있어서,
    상기제 1 비트 맵과 상기 제 2 비트 맵을 입력으로 하는 상기 제 1 논리 AND 연산에 근거하여 상기 제어 벡터를 생성하는 것을 더 포함하는,
    방법.
  24. 제 21 항에 있어서,
    최하위 비트의 제 1 이진 값의 개수를 포함하는 상기 마스크 벡터를 생성하는 것을 더 포함하고, 상기 개수는 상기 후행 이진 카운트에 대응하고, 상기 마스크 벡터는 상기 제 1 벡터와 같은 차원을 갖는,
    방법.
  25. 제 21 항에 있어서,
    상기 제 2 결과의 이진 값의 제 1 개수를 결정하는 것과,
    이진 값의 상기 제 1 개수에 대응하는 제 1 주소에 근거하여 상기 제 1 값에 액세스하는 것과,
    상기 제 3 결과의 이진 값의 제 2 개수를 결정하는 것과,
    이진 값의 상기 제 2 개수에 대응하는 제 2 주소에 근거하여 상기 제 2 값에 액세스하는 것을 더 포함하는,
    방법.
  26. 제 21 항에 있어서,
    상기 제 1 값과 상기 제 2 값의 곱을 로컬 메모리에 저장하는 것을 더 포함하는,
    방법.
  27. 제 21 항에 있어서,
    상기 제어 벡터의 상기 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 것과,
    상기 제어 벡터와 상기 차이 벡터에 대한 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하는 것과,
    상기 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 것을 더 포함하는,
    방법.
  28. 제 27 항에 있어서,
    상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응한다고 결정할 때 상기 제 1 값과 상기 제 2 값의 곱을 내적 결과로서 출력하는 것을 더 포함하는,
    방법.
  29. 제 27 항에 있어서,
    상기 후행 이진 카운트는 제 1 후행 이진 카운트이고, 상기 마스크 벡터는 제 1 마스크 벡터이고, 상기 곱은 제 1 곱이고, 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응하지 않는다고 결정할 때,
    상기 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하는 것과,
    상기 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하는 것과,
    상기 제 1 비트 맵과 상기 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 상기 제 1 희소 벡터의 제 3 값에 액세스하는 것과,
    상기 제 2 비트 맵과 상기 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 상기 제 2 희소 벡터의 제 4 값에 액세스하는 것과,
    상기 제 3 값과 상기 제 4 값을 승산하여 제 2 곱을 생성하는 것과,
    상기 제 1 곱과 상기 제 2 곱에 가산하는 것을 더 포함하는,
    방법.
  30. 제 29 항에 있어서,
    상기 차이 벡터는 제 1 차이 벡터이고, 상기 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 상기 요소는 제 1 요소이고,
    상기 업데이트된 제어 벡터의 상기 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하는 것과,
    상기 업데이트된 제어 벡터와 상기 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하는 것과,
    상기 제 2 업데이트된 제어 벡터의 모든 제 2 요소가 상기 같은 이진 값에 대응할 때, 상기 제 1 곱과 상기 제 2 곱의 합을 내적 결과로서 출력하는 것을 더 포함하는,
    방법.
  31. 내적 계산기로서,
    제 1 희소 벡터의 제 1 비트 맵과 제 2 희소 벡터의 제 2 비트 맵에 대한 제 1 논리 AND 연산의 제 1 결과에 대응하는 제어 벡터의 후행 이진 카운트를 결정하는 제 1 수단과,
    상기 후행 이진 카운트에 근거하여 마스크 벡터를 생성하는 제 2 수단과,
    상기 제 1 비트 맵과 상기 마스크 벡터에 대한 제 2 논리 AND 연산의 제 2 결과에 근거하여 상기 제 1 희소 벡터의 제 1 값에 액세스하고, 상기 제 2 비트 맵과 상기 마스크 벡터에 대한 제 3 논리 AND 연산의 제 3 결과에 근거하여 상기 제 2 희소 벡터의 제 2 값에 액세스하는 제 3 수단과,
    상기 제 1 값과 상기 제 2 값을 승산하여 곱을 생성하는 제 4 수단을 포함하는,
    내적 계산기.
  32. 제 31 항에 있어서,
    상기 제 1 비트 맵은 상기 제 1 벡터의 제 1 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고, 상기 제 2 비트 맵은 상기 제 2 벡터의 제 2 요소가 각각 0 값 또는 0이 아닌 값에 대응하는지 식별하고,
    상기 제 1 희소 벡터는 제 1 밀집 벡터의 0이 아닌 값에 대응하고, 상기 제 2 희소 벡터는 제 2 밀집 벡터의 0이 아닌 값에 대응하는,
    내적 계산기.
  33. 제 31 항에 있어서,
    상기 제 1 비트 맵과 상기 제 2 비트 맵을 입력으로 하는 상기 제 1 논리 AND 연산에 근거하여 상기 제어 벡터를 생성하는 제 5 수단을 더 포함하는,
    내적 계산기.
  34. 제 31 항에 있어서,
    상기 제 2 수단은 최하위 비트의 제 1 이진 값의 개수를 포함하는 마스크 벡터를 생성하는 수단을 포함하고, 상기 개수는 상기 후행 이진 카운트에 대응하고, 상기 제 2 수단은 상기 제 1 벡터와 같은 차원을 갖는 상기 마스크 벡터를 생성하는 수단을 포함하는,
    내적 계산기.
  35. 제 31 항에 있어서,
    상기 제 2 결과의 이진 값의 제 1 개수를 결정하고, 제 3 결과의 이진 값의 제 2 개수를 결정하는 제 6 수단을 더 포함하고, 상기 제 3 수단은 이진 값의 상기 제 1 개수에 대응하는 제 1 주소에 근거하여 상기 제 1 값에 액세스하는 수단을 포함하고, 상기 제 3 수단은 이진 값의 상기 제 2 개수에 대응하는 제 2 주소에 근거하여 상기 제 2 값에 액세스하는 수단을 포함하는,
    내적 계산기.
  36. 제 31 항에 있어서,
    상기 곱을 저장하기 위한 제 7 수단을 더 포함하는,
    내적 계산기.
  37. 제 31 항에 있어서,
    상기 제어 벡터의 상기 이진 비트에 대응하는 값으로부터 1을 감산하여 차이 벡터를 생성하는 제 8 수단과,
    상기 제어 벡터와 상기 차이 벡터에 대한 논리 AND 연산에 대응하는 업데이트된 제어 벡터를 생성하고, 상기 업데이트된 제어 벡터의 모든 요소가 같은 이진 값에 대응하는지 결정하는 제 9 수단을 더 포함하는,
    내적 계산기.
  38. 제 37 항에 있어서,
    상기 제 3 수단은, 상기 제 9 수단이 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응한다고 결정할 때 상기 곱을 내적 결과로서 출력하는 수단을 포함하는,
    내적 계산기.
  39. 제 37 항에 있어서,
    상기 후행 이진 카운트는 제 1 후행 이진 카운트이고, 상기 마스크 벡터는 제 1 마스크 벡터이고, 상기 곱은 제 1 곱이고, 상기 제 9 수단이 상기 업데이트된 제어 벡터의 상기 모든 요소가 상기 같은 이진 값에 대응하지 않는다고 결정할 때,
    상기 제 1 수단은 상기 업데이트된 제어 벡터의 제 2 후행 이진 카운트를 결정하는 수단을 포함하고,
    상기 제 2 수단은 상기 제 2 후행 이진 카운트에 대응하는 제 2 마스크 벡터를 생성하는 수단을 포함하고,
    상기 제 3 수단은 상기 제 1 비트 맵과 상기 제 2 마스크 벡터에 대한 제 4 논리 AND 연산의 제 4 결과에 근거하여 상기 제 1 희소 벡터의 제 3 값에 액세스하고, 상기 제 2 비트 맵과 상기 제 2 마스크 벡터에 대한 제 5 논리 AND 연산의 제 5 결과에 근거하여 상기 제 2 희소 벡터의 제 4 값에 액세스하는 수단을 포함하고,
    상기 제 4 수단은 상기 제 3 값과 상기 제 4 값을 승산하여 제 2 곱을 생성하는 수단을 포함하고,
    상기 제 1 곱과 상기 제 2 곱을 가산하는 가산기를 더 포함하는,
    내적 계산기.
  40. 제 39 항에 있어서, 상기 차이 벡터는 제 1 차이 벡터이고, 상기 업데이트된 제어 벡터는 제 1 업데이트된 제어 벡터이고, 상기 요소는 제 1 요소이고,
    상기 제 8 수단은 상기 업데이트된 제어 벡터의 상기 이진 값의 값 변환으로부터 1을 감산하여 제 2 차이 벡터를 생성하는 수단을 포함하고,
    상기 제 9 수단은 상기 업데이트된 제어 벡터와 상기 제 2 차이 벡터에 대한 논리 AND 연산에 대응하는 제 2 업데이트된 제어 벡터를 생성하는 수단을 포함하고,
    상기 제 3 수단은 상기 제 2 업데이트된 제어 벡터의 상기 모든 제 2 요소가 상기 같은 이진 값에 대응할 때, 상기 제 1 곱과 상기 제 2 곱의 합을 내적 결과로서 출력하는 수단을 포함하는,
    내적 계산기.
KR1020217015961A 2018-11-08 2019-11-04 내적 계산기 및 그 연산 방법 KR20210092751A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/184,985 2018-11-08
US16/184,985 US10768895B2 (en) 2018-11-08 2018-11-08 Dot product calculators and methods of operating the same
PCT/EP2019/080136 WO2020094586A1 (en) 2018-11-08 2019-11-04 Dot product calculators and methods of operating the same

Publications (1)

Publication Number Publication Date
KR20210092751A true KR20210092751A (ko) 2021-07-26

Family

ID=68461801

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217015961A KR20210092751A (ko) 2018-11-08 2019-11-04 내적 계산기 및 그 연산 방법

Country Status (7)

Country Link
US (3) US10768895B2 (ko)
EP (1) EP3877839A1 (ko)
JP (1) JP2022506345A (ko)
KR (1) KR20210092751A (ko)
CN (1) CN113330421B (ko)
DE (1) DE112019005586T5 (ko)
WO (1) WO2020094586A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018182445A1 (en) * 2017-03-31 2018-10-04 Intel Corporation Method and apparatus for converting scatter control elements to gather control elements used to sort vector data elements
WO2019000300A1 (zh) * 2017-06-29 2019-01-03 北京清影机器视觉技术有限公司 二维数据匹配方法、装置和逻辑电路
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
EP3938888A1 (en) * 2019-03-15 2022-01-19 INTEL Corporation Systolic disaggregation within a matrix accelerator architecture
WO2020190802A1 (en) 2019-03-15 2020-09-24 Intel Corporation Compression techniques
US20200302282A1 (en) * 2019-03-19 2020-09-24 Cirrus Logic International Semiconductor Ltd. Neurons for artificial neural networks
US11741349B2 (en) * 2019-10-31 2023-08-29 Arm Limited Performing matrix-vector multiply operations for neural networks on electronic devices
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
US11789646B2 (en) 2021-09-24 2023-10-17 Intel Corporation Methods, apparatus, and articles of manufacture to increase data reuse for multiply and accumulate (MAC) operations
US11669489B2 (en) * 2021-09-30 2023-06-06 International Business Machines Corporation Sparse systolic array design

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
US20080071851A1 (en) * 2006-09-20 2008-03-20 Ronen Zohar Instruction and logic for performing a dot-product operation
GB2457303A (en) * 2008-02-11 2009-08-12 Linear Algebra Technologies Randomly accessing elements of compressed matrix data by calculating offsets from non-zero values of a bitmap
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US10223359B2 (en) * 2016-10-10 2019-03-05 The Directv Group, Inc. Determining recommended media programming from sparse consumption data
US10360163B2 (en) * 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US20180189675A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering
US10146738B2 (en) * 2016-12-31 2018-12-04 Intel Corporation Hardware accelerator architecture for processing very-sparse and hyper-sparse matrix data
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
US10171084B2 (en) * 2017-04-24 2019-01-01 The Regents Of The University Of Michigan Sparse coding with Memristor networks
US20180330235A1 (en) * 2017-05-15 2018-11-15 National Taiwan University Apparatus and Method of Using Dual Indexing in Input Neurons and Corresponding Weights of Sparse Neural Network
TWI684141B (zh) 2017-10-12 2020-02-01 英屬開曼群島商意騰科技股份有限公司 人工神經元中以非零封包加速乘法運算的裝置及方法
KR20190106010A (ko) * 2018-03-07 2019-09-18 삼성전자주식회사 전자 장치 및 머신 러닝 수행 방법
US10768895B2 (en) 2018-11-08 2020-09-08 Movidius Limited Dot product calculators and methods of operating the same

Also Published As

Publication number Publication date
US11023206B2 (en) 2021-06-01
US20210247961A1 (en) 2021-08-12
US20200387350A1 (en) 2020-12-10
WO2020094586A1 (en) 2020-05-14
US20200150926A1 (en) 2020-05-14
CN113330421B (zh) 2024-01-16
CN113330421A (zh) 2021-08-31
US11656845B2 (en) 2023-05-23
DE112019005586T5 (de) 2021-12-16
EP3877839A1 (en) 2021-09-15
US10768895B2 (en) 2020-09-08
JP2022506345A (ja) 2022-01-17

Similar Documents

Publication Publication Date Title
KR20210092751A (ko) 내적 계산기 및 그 연산 방법
US10255547B2 (en) Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
EP3686816A1 (en) Techniques for removing masks from pruned neural networks
JP5973590B2 (ja) キャッシュのプレローディングにgpuコントローラを使用するための機構
CN106855952B (zh) 基于神经网络的计算方法及装置
CN111708511A (zh) 用于神经网络的数据压缩
CN111506520B (zh) 一种地址生成的方法、相关装置以及存储介质
CN111625476A (zh) 用于存储和访问多维数据的方法和装置
US8681166B1 (en) System and method for efficient resource management of a signal flow programmed digital signal processor code
WO2024027039A1 (zh) 数据处理方法、装置、设备和可读存储介质
JP2023541350A (ja) 表畳み込みおよびアクセラレーション
CN112825199B (zh) 碰撞检测方法、装置、设备及存储介质
US20190278574A1 (en) Techniques for transforming serial program code into kernels for execution on a parallel processor
US11409840B2 (en) Dynamically adaptable arrays for vector and matrix operations
JPWO2020094586A5 (ko)
US20220374496A1 (en) Techniques for accelerating matrix multiplication computations using hierarchical representations of sparse matrices
CN111860824A (zh) 一种数据处理方法及相关产品
CN118043821A (zh) 混合稀疏压缩
US20200402202A1 (en) Methods and apparatus for efficient interpolation
US11709812B2 (en) Techniques for generating and processing hierarchical representations of sparse matrices
CN111860825A (zh) 一种数据处理方法及相关产品
US20220374961A1 (en) Techniques for performing matrix computations using hierarchical representations of sparse matrices
CN117058668B (zh) 一种三维模型减面评估方法及装置
WO2023165290A1 (zh) 数据处理方法及装置、电子设备和存储介质
Lee et al. A Real-Time object detection processor with XNOR-Based Variable-Precision computing unit