KR20210002495A - 다중 포트 메모리를 포함하는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기 - Google Patents

다중 포트 메모리를 포함하는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기 Download PDF

Info

Publication number
KR20210002495A
KR20210002495A KR1020207030178A KR20207030178A KR20210002495A KR 20210002495 A KR20210002495 A KR 20210002495A KR 1020207030178 A KR1020207030178 A KR 1020207030178A KR 20207030178 A KR20207030178 A KR 20207030178A KR 20210002495 A KR20210002495 A KR 20210002495A
Authority
KR
South Korea
Prior art keywords
data elements
vector
interface circuits
port memory
dual port
Prior art date
Application number
KR1020207030178A
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 KR20210002495A publication Critical patent/KR20210002495A/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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1078Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/04Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/12Group selection circuits, e.g. for memory block selection, chip selection, array selection
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/16Multiple access memory array, e.g. addressing one storage element via at least two independent addressing line groups
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C8/00Arrangements for selecting an address in a digital store
    • G11C8/18Address timing or clocking circuits; Address control signal generation or management, e.g. for row address strobe [RAS] or column address strobe [CAS] signals

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Memory System (AREA)

Abstract

다중 포트 메모리를 갖는 벡터 레지스터 파일(VRF)을 포함하는 신경망 프로세서 및 관련 방법이 제공된다. 프로세서는 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하기 위한 타일을 포함할 수 있다. VRF는 기록 명령어에 응답하여 다중 포트 메모리에 N개의 데이터 요소를 저장할 수 있으며, P개의 클럭 사이클의 각각 동안 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하는 다중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공할 수 있다. 각각의 P 클럭 사이클 동안, 다중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 적어도 하나를 통해 N개의 데이터 요소를 수신하도록 구성될 수 있다. VRF는 판독 명령어에 응답하여 N개의 데이터 요소를 제공하기 위한 출력 인터페이스 회로를 포함할 수 있다.

Description

다중 포트 메모리를 포함하는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기
신경망 기술은 독해, 언어 번역, 이미지 인식 또는 음성 인식과 같은 복잡한 작업을 수행하는 데 사용된다. 순환 신경망(Recurrent Neural Network: RNN), 콘볼루션 신경망(Convolution Neural Network: CNN), LSTM(Long Short Term Memory) 신경망 또는 게이트 순환 유닛(Gated Recurrent Unit: GRU)을 기반으로 하는 것과 같은 머신 학습 서비스는 이러한 복잡한 작업을 수행하는데 사용되어 왔다. 이러한 유형의 신경망이 이용되었지만, 이러한 복잡한 작업을 수행하려면 기본 아키텍처와 대응하는 명령어를 지속적으로 개선해야 할 필요가 있다.
일 예에서, 본 개시는 다중 포트 메모리(예를 들어, 이중 포트 메모리)를 포함하는 벡터 레지스터 파일을 포함하는 프로세서에 관한 것이다. 프로세서는 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성된 복수의 타일을 더 포함할 수 있으며, 여기서 N은 8 이상인 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다. 벡터 레지스터 파일은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 다중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클 중 각각 동안 다중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하도록 구성될 수 있는데, P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상인 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클 중 각각 동안 다중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 적어도 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
벡터 레지스터 파일은 또한 판독 명령어에 응답하여 단일 클럭 사이클 동안 다중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클 중 각각 동안 다중 포트 메모리의 Q개의 출력 인터페이스 회로 각각으로부터 L개의 데이터 요소를 제공하도록 구성될 수 있으며, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, 여기서 Q개의 클럭 사이클의 각각 동안 다중 포트 메모리는 N개의 데이터 요소를 Q개의 출력 인터페이스 회로 중 선택된 적어도 하나에 제공하도록 구성된다.
다른 예에서, 본 개시는 복수의 타일 및 이중 포트 메모리를 포함하는 벡터 레지스터 파일을 포함하는 시스템에서의 방법에 관한 것으로, 복수의 타일의 각각은 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성되며, 여기서 N은 8 이상의 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다.
이 방법은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클의 각각 동안, 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하는 단계를 포함할 수 있는데, 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
방법은 판독 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클 각각 동안, 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하는 단계를 더 포함할 수 있되, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, Q개의 클럭 사이클의 각각 동안 이중 포트 메모리는 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성된다.
또 다른 예에서, 본 개시는 단일 판독 포트 및 단일 기록 포트를 포함하는 이중 포트 메모리를 포함하는 벡터 레지스터 파일을 포함하는 프로세서에 관한 것이다. 프로세서는 N x N 행렬 및 N x 1 벡터를 처리하도록 구성된 복수의 타일을 더 포함할 수 있으며, 여기서 N은 8 이상의 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다.
벡터 레지스터 파일은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 단일 기록 포트를 통해 이중 포트 메모리에 N개의 데이터 요소를 저장하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하도록 구성될 수 있는데. 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
벡터 레지스터 파일은 또한 판독 명령어에 응답하여, 단일 클럭 사이클 동안 단일 판독 포트를 통해 이중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클의 각각 동안 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하도록 구성될 수 있되, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하고, Q개의 클럭 사이클의 각각 동안 이중 포트 메모리는 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성된다.
이 요약은 아래의 상세한 설명에서 더 설명되는 선택된 개념을 단순화된 형태로 소개하기 위해 제공된다. 이 요약은 청구된 주제의 주요 특징이나 필수 특징을 식별하기 위한 것이 아니며 청구된 주제의 범위를 제한하는 데 사용되려 하지도 않는다.
본 개시는 예시를 들어 설명되고, 유사한 참조번호가 유사한 요소를 나타내는 첨부 도면에 의해 제한되지 않는다. 도면에서의 요소들은 단순함과 명확성을 위해 설명되었으며 반드시 축척대로 그려지지는 않는다.
도 1은 일 예에 따른 프로세서의 블록도이다.
도 2는 일 예에 따른 행렬-벡터 곱셈기 유닛의 블록도이다.
도 3은 일 예에 따른 벡터 레지스터 파일의 블록도이다.
도 4는 다른 예에 따른 벡터 레지스터 파일의 블록도이다.
도 5는 일 예에 따라 도 1의 프로세서 및 벡터 레지스터 파일를 사용하여 벡터 데이터 요소를 처리하는 방법의 흐름도를 도시한다.
본 예에 개시된 예는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기를 포함하는 프로세서에 관한 것이다. 벡터 레지스터 파일은 행렬 벡터 곱셈기로부터/행렬 벡터 곱셈기로 벡터 데이터를 판독/기록하는 데 사용될 수 있다. 특정 예는 단일 기록 포트 및 단일 판독 포트를 구비할 수 있는 이중 포트 메모리가 신경망 계산을 수행하는 데 빠르고 효율적인 방식으로 사용될 수 있도록 해주는 입력 인터페이스 회로 및 출력 인터페이스 회로를 구비한 다중 포트 메모리, 예를 들어 이중 포트 메모리를 사용하는 것과 관련된다.
컨볼루션 신경망(CNN) 및 순환 신경망(RNN)은 모두 주류의 머신 학습에서 널리 사용되는 계산 커널이다. CNN 및 RNN은 행렬-벡터 곱셈의 항들로 효율적으로 표현될 수 있지만, 각각에 고유한 병렬성과 데이터 구조는 크게 다르다. 따라서, CNN과 RNN을 모두 효율적으로 계산하는 단일 테라 플롭 규모의 컴퓨터 아키텍처(single tera-flop scale computer architecture)를 생성하는 것이 해결해야 할 문제이다. 이 문제는 설계에 실시간 레이턴시 요구사항이 설계에 적용될 때 더욱 복잡해진다. 결과적으로, 이전 솔루션은 두 가지 모두에서 강력한 성능을 우선시하지 않고 CNN 또는 RNN에 특화되었다. 본 개시에서 설명된 특정 예는 CNN 및 RNN 모두에 대한 효율적인 계산을 제공하는 시스템, 방법 및 컴포넌트를 사용하는 것과 관련된다.
예로서, 본 개시는 개별 CNN 평가에서 제한된 형태의 행렬-행렬 곱셈을 수행하기 위해 CNN에서 개별 출력 활성화 사이에서 병렬성을 활용하는 프로세서를 설명한다. 이 병렬성은 동일한 행렬 데이터 및 상이한 벡터 데이터를 수신하는 준 독립 행렬-벡터 곱셈 타일 엔진들의 어레이의 형태를 갖는 회로에 매핑된다. 이 접근 방식은 CNN 입력에 대해 배치(batch) = l에서 높은 사용률을 허용하여, 낮은 레이턴시로 높은 처리량을 제공한다. 이 접근 방식을 가능하게 하는 방법들 중 하나는 공유 메모리 공간에 대한 많은 동시 벡터화된 판독 및 기록을 허용하는 다중 포트 벡터 레지스터 파일(VRF)을 사용하는 것이다. 이 접근 방식은 RNN을 표현하는 데 사용될 수 있는 동일한 어셈블리 레벨 코드에서 CNN의 정보 집약적 표현을 제공하는 CNN 인식 ISA(Instruction Set Architecture)에 의해 가능해진다.
본 개시에 설명된 프로세서는 FPGA(Field Programmable Gate Array), ASIC(Application Specific Integrated Circuit), 소거가능 및/또는 복합 프로그래밍가능 로직 장치(PLD), PAL(Programmable Array Logic) 장치 및 GAL(Generic Array Logic) 장치의 부분들 또는 이들의 조합을 사용하여 구현될 수 있다. FPGA와 같은 프로세서를 구성하거나 재구성하는 데 이미지 파일이 사용될 수 있다. 이미지 파일 또는 유사한 파일 또는 프로그램은 호스트 CPU로부터 네트워크 링크 또는 로컬 링크(예컨대, PCIe)를 통해 전달될 수 있다. 이미지 파일에 포함된 정보는 프로세서의 하드웨어 블록(예컨대, FPGA의 로직 블록 및 재구성가능한 상호연결)을 프로그래밍하여 원하는 기능을 구현하는 데 사용될 수 있다. 원하는 기능은컴퓨팅, 네트워킹 및 스토리지 리소스의 조합을 통해, 예컨대 서비스를 제공하기 위한 데이터 센터 또는 기타 인프라를 통해 제공될 수 있는 임의의 서비스를 지원하도록 구현될 수 있다.
일 예에서, 프로세서(예를 들어, FPGA) 또는 이러한 프로세서의 그룹은 레이턴시가 낮은 네트워크를 통해 서로 결합될 수 있다. 수 백에서 수 천 개의 이러한 프로세서(예컨대, FPGA)를 활용하는 수렴형 플랫폼(converged platform)은 다음과 같은 이점을 제공할 수 있다. (1) 수 십만 개의 노드에 걸쳐 병렬처리를 활용하여 트레이닝 시간을 크게 단축하고, (2) 인-시투(in-situ) 라이브 데이터에 대한 온라인 학습과 같은 새로운 트레이닝 시나리오를 가능하게 하고, (3) 수 십만 대의 서버에 걸쳐 있는 하이퍼 스케일 데이터 센터에서 유연하고 대체 가능한 동종의 FPGA 리소스를 활용하면서 전례없는 규모의 트레이닝 모델이 가능하다. 일례에서, 이러한 이점은 FPGA와 같은 프로세서의 아키텍처를 활용할 수 있는 비 전통적인 데이터 표현을 활용함으로써 얻어질 수 있다.
설명된 측면은 클라우드 컴퓨팅 환경에서도 구현될 수 있다. 클라우드 컴퓨팅은 구성가능한 컴퓨팅 리소스의 공유 풀에 대한 온디맨드 네트워크 액세스를 가능하게 하는 모델을 지칭할 수 있다. 예를 들어, 클라우드 컴퓨팅은 구성가능한 컴퓨팅 리소스의 공유 풀에 대한 유비쿼터스적이고 편리한 온디맨드 액세스를 제공하기 위해 시장에서 채용될 수 있다. 구성가능한 컴퓨팅 리소스의 공유 풀은 가상화를 통해 신속하게 프로비저닝될 수 있으며 적은 관리 노력이나 서비스 제공 업체 상호작용으로 방출된 다음 그에 따라 확장될 수 있다. 클라우드 컴퓨팅 모델은 온디맨드 셀프 서비스, 광범위한 네트워크 액세스, 리소스 풀링, 빠른 탄력성, 측정된 서비스 등과 같은 다양한 특성으로 구성될 수 있다. 클라우드 컴퓨팅 모델은 서비스로서의 하드웨어("HaaS"), 서비스로서의 소프트웨어("SaaS"), 서비스로서의 플랫폼("PaaS") 및 서비스로서의 인프라("IaaS")과 같은 다양한 서비스 모델을 노출하는 데 사용될 수 있다. 클라우드 컴퓨팅 모델은 또한 개인 클라우드, 커뮤니티 클라우드, 퍼블릭 클라우드, 하이브리드 클라우드 등과 같은 다양한 배포 모델을 사용하여 배포될 수 있다.
RNN(Recurrent Neural Network), CNN(Convolution Neural Network), LSTM(Long Short Term Memory) 신경망 또는 GRU(Gated Recurrent Unit)에 기반한 것과 같은 머신 학습 서비스는 본 개시에서 설명된 프로세서를 사용하여 구현될 수 있다. 일 예에서, 서비스 관련 콘텐츠 또는 기타 정보, 예컨대, 단어, 문장, 이미지, 비디오, 또는 다른 그러한 콘텐츠/정보는 벡터 표현으로 변환될 수 있다. 벡터 표현은 RNN, CNN, LSTM 또는 GRU와 같은 기술에 대응할 수 있다. 딥 러닝 모델은 서비스 초기화 전에 오프라인으로 트레이닝된 다음 본 명세서에 설명된 시스템 및 프로세서를 사용하여 배포될 수 있다.
일 예에서, 신경망 모델은 많은 계층으로 구성될 수 있고, 각 계층은 신경망의 오프라인 트레이닝을 통해 획득된 계수 또는 상수의 형태로 표현되는 가중치의 행렬 또는 벡터로 인코딩될 수 있다. 노드에서의 프로그래밍가능한 하드웨어 로직 블록은 행렬 또는 벡터를 처리하여, 서비스에 관련된 인코딩된 정보를 나타내는 입력 벡터에 대해 곱셈, 덧셈 및 기타 연산을 포함하는 다양한 연산을 수행할 수 있다. 일례에서, 가중치의 행렬 또는 벡터는 그래프 분할과 같은 기법을 사용하여 여러 노드에 걸쳐 분할 및 고정될 수 있다. 이 프로세스의 일부로서, 큰 신경망은 중간 표현(예컨대, 그래프)으로 변환될 수 있으며, 그런 다음 중간 표현은 더 작은 표현(예컨대, 서브 그래프)으로 나뉘어질 수 있고 각각의 서브 그래프에 대응하는 가중치의 행렬의 각각은 노드의 온칩 메모리에 고정될 수 있다. 일례로, 모델은 고정 크기의 행렬과 벡터로 변환될 수 있다. 이렇게 하면 노드의 리소스는 고정 크기의 행렬과 벡터에 대해 병렬로 작동할 수 있다.
LSTM를 예시로 들면, LSTM 네트워크는 반복되는 RNN 계층 또는 다른 유형의 계층의 시퀀스를 포함할 수 있다. LSTM 네트워크의 각 계층은 주어진 시구간에서의 입력(예컨대, 이전 시구간에서의 계층의 상태)을 소비할 수 있으며 새로운 출력 또는 상태 세트를 생성할 수 있다. LSTM을 사용하는 경우, 단일 콘텐츠 청크가 단일 벡터 또는 다중 벡터로 인코딩될 수 있다. 예를 들어, 단어 또는 단어들의 조합(예컨대, 구, 문장 또는 단락)은 단일 벡터로 인코딩될 수 있다. 각 청크는 LSTM 네트워크의 개별 계층(예컨대, 특정 시구간)으로 인코딩될 수 있다. LSTM 계층은 다음과 같은 일련의 수학식을 사용하여 설명될 수 있다.
Figure pct00001
이 예에서, 각 LSTM 계층 내부에서 입력 및 은닉 상태는 벡터 연산(예컨대, 점곱(dot-product), 내적(inner product) 또는 벡터 덧셈)과 비선형 함수(예컨대, 시그모이드, 쌍곡선 및 탄젠트)의 조합을 사용하여 처리될 수 있다. 어떤 경우에는, 가장 계산 집약적인 연산이 점곱에서 발생할 수 있으며, 이는 고밀도 행렬-벡터 및 행렬-행렬 곱셈 루틴을 사용하여 구현될 수 있다. 일 예에서, 벡터 연산 및 비선형 함수의 처리는 병렬로 수행될 수 있다.
일 예에서, 개별 프로세서는 패킷을 포함하는 메시지를 서로에게 직접 전송할 수 있으며, 따라서 이것은 수용불가능한 레이턴시를 발생시키지 않고 다중 프로세서에 걸쳐 단일 신경망의 분할을 허용할 수 있다. 통신을 위해, 프로세서는 예를 들어 RDMA를 포함하는 경량 프로토콜을 사용할 수 있다. 병렬화는 여러 프로세서에 걸쳐 신경 가중치를 분할함으로써 신경망 계층 내에서 수행될 수도 있다. 예를 들어, 단일 CNN 또는 RNN 모델(예컨대, LSTM 가중치 행렬을 포함함)은 프로세서를 사용하여 분할 및 처리될 수 있다.
도 1은 일 예에 따른 프로세서(100)의 블록도이다. 각 프로세서(100)는 다른 프로세서로부터 메시지를 수신하기 위한 입력 메시지 프로세서(IMP)(104) 및 다른 프로세서 또는 컴포넌트로 출력되는 메시지를 처리하기 위한 출력 메시지 프로세서(OMP)(106)를 포함할 수 있다. 이러한 메시지는 네트워크(102)를 통해 수신 및 전송될 수 있다. 각각의 프로세서(100)는 행렬 벡터 곱셈기(MVM)(110), 둘 이상의 다기능 유닛(MFU)(예를 들어, MFU[0](140) 및 MFU[1](160))을 더 포함할 수 있다. 각 프로세서(100)는 행렬 메모리 관리자(170), 벡터 메모리 관리자(180), 벡터 DRAM(182) 및 행렬 DRAM(184)을 더 포함할 수 있다. 이 예에서, 프로세서는 제어 및 스칼라 데이터 및 페이로드 데이터(예컨대, 벡터, 행렬 또는 기타 텐서 데이터 구조)와 같은 보조 정보를 포함하는 오프 칩 메시지를 수용할 수 있다. 이 예에서, 입력 메시지는 벡터를 벡터 메모리 관리자(180)로 전송하는 경량 입력 메시지 프로세서(IMP)(104)에 의해 처리될 수 있다. IMP(104)는 행렬을 행렬 메모리 관리자(170)로 전송할 수 있다.
계속해서 도 1을 참조하면, 각각의 행렬은 N x N 크기를 가질 수 있고 각각의 벡터는 N x 1 크기를 가질 수 있다. 이 예에서, 프로세서(100)에 대응하는 모든 명령어는 고유 크기의 데이터에서 동작할 수 있다. 프로세서(100)에 의해 처리되는 애플리케이션에 대응하는 로직 벡터 및 행렬은 종종 고유 크기보다 클 수 있으며, 이 경우 벡터와 행렬은 기본 크기의 타일로 나뉘어진다. 일례로, 행렬 벡터 곱셈을 위해, 행렬 데이터와 벡터 데이터는 블록 부동 소수점(BFP) 포맷으로 표현 될 수 있다. 이 예에서 BFP 포맷 데이터의 블록 크기는 고유 치수와 같을 수 있다. 따라서, 각각의 고유 N x 1 벡터는 공유 지수(shared exponent)를 가질 수 있고, N x N 행렬의 각 행은 공유 지수를 가질 수 있다. 공유 지수는 5 비트일 수 있다. 벡터 데이터와 행렬 데이터의 각각은 2의 보수 가수 부분(two's complement mantissa portion)을 가질 수 있으며, 벡터 데이터와 행렬 데이터의 가수 크기는 다를 수 있다.
MVM(110)은 벡터 레지스터 파일(VRF)(112), 행렬 레지스터 파일(MRF)(120), 및 타일 엔진(예를 들어, 타일 엔진(114, 116 및 118))을 포함할 수 있다. 타일 엔진은 VRF(112)로부터 입력 행렬 및 입력 벡터 데이터를 수신할 수 있다. MVM(110)은 필요에 따라 블록 부동 소수점(BFP) 대 부동 소수점(FP) 변환기를 포함하는 포맷 변환기를 더 포함할 수 있다. 일 예에서, 2개의 내부 BFP 포맷이 MVM(110)에 의해 그의 입력 및 출력을 표현하는데 사용될 수 있는데, BFP short는 벡터 및 행렬 저장용으로 사용될 수 있고, BFP long은 누적용으로 사용될 수 있다. MVM(110)의 일 예에서, BFP short는 공유 5 비트 지수를 갖는 ql.15 고정 소수점 값을 사용할 수 있고, BFP long은 공유 5 비트 지수를 갖는 q34.40 고정 소수점 값을 사용할 수 있다. 이 예에서, 행렬-벡터 곱셈으로 인해 BFP long이 생성될 수 있으며, 이는 최종 출력 단계로서 부동 소수점 포맷으로 다시 변환될 수 있다. 따라서, 도 1에 도시된 예시적인 MVM(110)은 그 출력 단계에서 BFP-FP16 변환기(122, 124 및 126)를 포함할 수 있다. 타일 엔진(114, 116 및 118)은 병렬로, 도 1의 예에 도시된 바와 같이 각각의 변환기에 출력을 제공할 수 있다. MVM(110)에 관한 추가 세부 사항은 도 2에 제공되고, VRF(112)의 추가 세부 사항은 도 3 및 4에 제공된다.
행렬 데이터는 M개의 채널을 사용하여 행렬 DRAM(184)과 행렬 메모리 관리자(170) 사이에서 통신될 수 있다. 벡터 메모리 관리자는 벡터 데이터를 C개보다 많은 수의 채널로 이동시킬 수 있다.
도 1을 계속 참조하면, 각각의 MFU(예를 들어, MFU[0](140) 및 MFU[1](160))는 크로스바(예를 들어, xbar로 표기된 크로스바)를 포함할 수 있다. MFU[0](140)은 벡터-벡터 곱셈 및 덧셈, 시그모이드 함수, TanH 함수, 소프트맥스 연산, ReLU(Rectified Linear Unit) 연산 및/또는 활성화 블록 연산과 같은 벡터 연산을 지원할 수 있다. 따라서, 도 1에 도시된 같이, MFU[0](140)은 파이프라인된 동작 시퀀스를 통해 자신의 입력 버스로부터 벡터를 스트리밍할 수 있는 크로스바(예를 들어, xbar(146, 148 및 150))를 포함할 수 있다. 따라서, 벡터는 Mulrf(142)로 표기된 레지스터 파일 또는 AsVrf[0](144) 표시된 또 다른 레지스터 파일을 통해 수신될 수 있고, 이러한 벡터는 곱셈 연산, 덧셈 연산 또는 일부 다른 연산의 대상이 될 수 있다. MFU[0](140)은 덧셈을 수행하기 위한 몇몇 하드웨어 블록(예컨대, 153, 157 및 161)을 포함할 수 있다. MFU[0](140)은 또한 곱셈을 수행하기 위한 몇몇 하드웨어 블록(예를 들어, 152, 156 및 159)을 포함할 수 있다. MFU[0](140)은 또한 활성화를 수행하기 위한 몇몇 하드웨어 블록(예를 들어, 151, 154 및 158)을 포함할 수 있다.
여전히 도 1을 참조하면, MFU[l](160)은 MFU[1](160)이 MFU[0](140)으로부터 출력을 수신하고 이들 출력에 대해 그리고 ADD/SUB VRF(168)을 통해 수신된 임의의 추가 입력에 대해 추가 작업을 수행할 수 있게 해주는 크로스바(예컨대, xbar(162, 163 및 164))를 포함할 수 있다. MFU[1](160)은 덧셈을 수행하기 위한 몇몇 하드웨어 블록(예를 들어, 169, 171 및 172)을 포함할 수 있다. MFU[1](160)은 또한 활성화를 수행하기 위한 몇몇 하드웨어 블록을 포함할 수 있다. C개의 채널을 통해 수신된 MFU[1](160)로부터의 출력은 멀티플렉싱 회로(174)를 통해 벡터 메모리 관리자(180)에 연결될 수 있다. 도 1은 특정 방식으로 배열된 프로세서(100)의 특정 개수의 컴포넌트를 도시하고 있지만, 다르게 배열된 더 많거나 더 적은 수의 컴포넌트가 있을 수 있다.
프로세서(100)는 적은 수의 명령어를 사용하여 수 백만 개의 동작을 트리거할 수 있는 명령어의 발행을 가능하게 하는 데 사용될 수 있다. 예를 들어, 아래 표 1은 다음과 같은 완전히 파라미터화된 LSTM에 대응하는 명령어를 보여준다.
Figure pct00002
표 1은 특정 포맷을 갖는 특정 개수의 명령어를 나타내지만, 프로세서(100)는 동일한 목적을 달성하기 위해 상이한 포맷을 갖는 더 많거나 더 적은 명령어를 실행할 수 있다.
아래의 표 2는 CNN 평가의 일부로서 1 X 1 컨볼루션을 계산하는 방법을 보여준다.
Figure pct00003
위의 표에 나타난 바와 같이, 계산을 위한 명령어 체인에 대한 반복 횟수가 지정될 수 있다. 다음으로, 필요에 따라 각 명령어 체인의 고유 치수가 열 배율 인수(column scaling factor)로 확장될 수 있다. 그리고, 벡터 레지스터 파일로부터 벡터 데이터를 판독한 후, 이 벡터 데이터는 행렬 레지스터 파일로부터 검색된 가중치와 곱해질 수 있다. CNN 평가에 필요한 추가 작업을 수행한 후, 출력이 제공될 수 있다. 예를 들어, 벡터 데이터의 각 요소에 대해 포인트 단위(pointwise) ReLU(Rectified Linear Unit) 연산이 수행될 수 있다.
아래의 표 3은 CNN 평가의 일부로서 N X N 컨볼루션을 계산하는 방법을 보여준다. 1 X 1 컨볼루션과 유사한 아래 명령어는 다시 설명하지 않는다. Set2dWindows 명령어가 사용되어 전체 윈도우 크기를 설정하고 그런 다음 Setlterations 명령어가 사용되어 그 윈도우를 입력 볼륨에 걸쳐 슬라이딩할 수 있다. *_inc 명령어(예컨대, v_rd_inc 및 v_add_inc)는 스트라이드(stride)에 기초하여 명령어의 주소를 증가시키는 데 사용될 수 있다. 예를 들어, 스트라이드가 2이면 덧셈과 같은 연산을 위해 벡터 데이터를 저장하는 데 사용되는 벡터 레지스터 파일 내의 다른 모든 벡터를 건너뛸 수 있다.
Figure pct00004
도 2는 일 예에 따른 행렬-벡터 곱셈기(MVM)(200)의 블록도이다. 이 예에서, MVM(200)은 도 1의 MVM(110)을 구현하기 위해 사용될 수 있다. MVM(200)은 벡터 레지스터 파일(VRF)(210), 행렬 레지스터 파일(MRF)(220) 및 MVM 프로세서(230)를 포함할 수 있다. VRF(210)는 주소 디코더(212) 및 위험 검출기(214)를 더 포함 할 수 있다. VRF(210)는 텐서와 같은 벡터 데이터 및 커맨드 모두를 수신할 수 있다. MRF(220)는 주소 디코더(222) 및 위험 검출기(224)를 포함할 수 있다. MRF(220)는 커맨드 및 행렬 데이터 모두를 수신할 수 있다. MVM 프로세서(230)는 타일 엔진(232, 234 및 236)을 포함할 수 있다. MVM 프로세서(230)는 또한 텐서를 수신하고 제공하기 위한 버퍼(예를 들어, 텐서 버퍼(242, 244 및 246))를 포함할 수 있다. MVM 프로세서(230)는 MVM 제어기(250)를 더 포함할 수 있다. 이 예에서, MVM(200)은 일련의 타일 엔진을 인스턴스화할 수 있으며, 이들 각각은 고유 크기의 MVM을 가속화하도록 설계될 수 있다. 이 예에서, 각 타일 엔진은 일련의 점곱 유닛(dot product units: DPU)로 구성되어 각각의 점곱 유닛은 행렬 타일의 하나의 고유 행에 대응하는 점곱 계산을 담당할 수 있다. 일 예에서, 프로세서(100)가 FPGA를 사용하여 구현될 때, 작은 세트의 BRAM 및 DSP가 타일 엔진을 생성하도록 구성될 수 있다. 예로서, 각각은 블록 랜덤 액세스 메모리(BRAM) 및 프로세싱 로직 블록(예를 들어, 디지털 신호 프로세서(DSP))을 포함할 수 있다. 처리 로직 블록은 입력 벡터에 가중치 행을 곱하는 데 사용될 수 있다. 처리 로직 블록의 출력은 가산기를 사용하여 더해질 수 있다. 따라서, 이 예에서, 각 타일은 점 단위의 점곱 연산을 수행할 수 있다. 점곱 유닛은 누적 트리로 공급될 수 있는 병렬 곱셈기의 레인으로 구성될 수 있다. 이들 레인은 행렬 타일의 한 행의 열들 내에서 병렬성을 제공할 수 있다. 이러한 방식으로, MVM(200)은 병렬성의 적어도 4개의 치수를 활용할 수 있는데, 타일의 행들에 걸쳐, 그리고 행의 열들 내에서의 인터-MVM, MVM 타일링을 이용할 수 있다. 이 예에서, MVM의 총 처리량은 다음과 같이 표현될 수 있다. 사이클 당 FLOP = 2 * # 타일 유닛 * # DPU * # 레인.
MRF(220)는 행렬 데이터 또는 요소를 각 타일 내의 점곱 유닛에 공급하도록 구성될 수 있는 여러 행렬 레지스터 파일을 포함할 수 있다. 각 곱셈기는 사이클 당 VRF(210)로부터 하나의 벡터 요소를 수신하고 사이클 당 행렬 레지스터 파일 중 하나로부터 하나의 행렬 요소를 수신할 수 있다. 행렬 요소는 그 곱셈기에 인접하게 위치한 행렬 레지스터 파일의 전용 포트에 의해 전달될 수 있다. MRF(220)는 다음과 같이 구성될 수 있는데, 즉 저장된 행렬은 고유 크기의 타일로 분할될 수 있고 각 타일은 단일 타일 엔진에만 저장될 수 있다. 주어진 타일 엔진에 저장된 행렬은 MRF 뱅크로 보여질 수 있다. 각 점곱 유닛은 그 MRF 뱅크에서의 각 행렬 타일의 한 행을 보유하는 MRF의 서브 뱅크와 연관될 수 있다. 행은 점곱 유닛에 정적으로 할당되되, 제1 점곱 유닛은 MRF 뱅크의 모든 행렬 타일의 첫 번째 행을 포함할 수 있다. 끝으로, 행의 요소들은 SRAM에서 인터리빙되어 SRAM 판독 포트가 배선을 통해서만 곱셈기 레인에 직접 연결될 수 있다. 행렬 레지스터 파일에 대한 기록은 MRF(220)에 기록하기 위한 행렬 데이터가 DRAM과 같은 오프 칩 메모리에서 나올 수 있기 때문에 다르게 처리될 수 있다. 도 2는 특정 방식으로 배열된 MVM(200)의 특정 개수의 컴포넌트를 도시하고 있지만, 다르게 배열된 더 많거나 더 적은 개수의 컴포넌트가 있을 수 있다.
도 3은 일 예에 따른 벡터 레지스터 파일(VRF)(300)의 블록도이다. VRF(300)는 도 1의 VRF(112)의 적어도 일부를 구현하는 데 사용될 수 있다. VRF(300)는 또한 도 2의 VRF(210)의 적어도 일부를 구현하는데 사용될 수 있다. 이 예에서, VRF(300)에 대한 판독/기록 데이터 인터페이스는 ITensorRead 및 ITensorWrite 인터페이스의 세트로 구성될 수 있으며, 이들 각각은 사이클 당 데이터 요소의 LANES를 판독/기록할 수 있다. 각 인터페이스는 텐서 프로토콜을 따를 수 있으며 독립적으로 역압(back-pressured)될 수 있다. VRF(300)의 판독/기록 인터페이스는 입력 버퍼(302, 304 및 306) 및 출력 버퍼(352, 354 및 356)를 포함할 수 있다. 기록 동작에 응답하여, 입력 버퍼는 텐서(예를 들어, 신경망의 한 계층에 대응하는 입력 벡터 데이터)를 수신하는 데 사용될 수 있다. 이 예에서 VRF(300)는 벡터 데이터를 블록 부동 소수점(BFP) 포맷으로 처리한다. 지수(예컨대, 공유 지수)는 지수 레지스터(예컨대, EXP REG(314, 316 및 318))에 저장될 수 있고 가수는 시프트 레지스터(예컨대, SHIFT REG(308, 310 및 312)에 저장될 수 있다. 지수 레지스터의 출력은 멀티플렉서(322)에 연결될 수 있고 시프트 레지스터의 출력은 메모리(예를 들어, 블록 RAM(BRAM))에 기록될 수 있도록 멀티플렉서(320)에 연결될 수 있다. 따라서, 지수는 EXP BRAM(352)에 기록될 수 있고 가수는 MANTISAA BRAM(330)에 기록될 수 있다. 판독에 응답하여, 메모리로부터의 데이터는 출력 인터페이스에 출력될 수 있다. 따라서, 지수는 지수 레지스터(예컨대, EXP REG(344, 346, 348))로 출력될 수 있고 가수는 시프트 레지스터(예컨대, SHIFT REG(338, 340 및 342))로 출력될 수 있다. 이들 레지스터로부터 BFP 벡터 데이터는 출력 버퍼(예컨대, 버퍼(352, 354 및 356))에 제공될 수 있다. 제어 로직(370)은 예를 들어 멀티플렉서(320 및 322)를 포함하는 VRF(300)의 다양한 컴포넌트를 통해 벡터 데이터의 이동을 제어할 수 있다. 제어 로직(370)은 (예를 들어, ADDRESS DECODE(372)를 통한) 주소 디코딩, (예를 들어, COMMAND DECODE(374)를 통한) 커맨드 디코딩 및 (예컨대, READ FSM(378) 및 WRITE FSM(376)을 통한) 판독/기록 제어를 포함할 수 있다. 따라서, INfuCmd 버스를 통해 커맨드 및 주소를 수신하면, 커맨드 및 주소를 디코딩하여 주소 액세스 패턴 및 포트 선택을 결정할 수 있다. 아래의 표 4는 제어 로직(370)에 의해 디코딩될 수 있는 커맨드 필드 또는 파라미터를 보여준다.
Figure pct00005
일 예에서, 프로세서(100)와 연관된 제어 로직은 표 2에 명시된 파라미터를 디코딩하여 고유 벡터 주소 및 판독하거나 기록하기 위한 인터페이스를 모두 결정할 수 있다. VRF(300)에 연결된 모듈은 이러한 모듈이 적절한 인터페이스에서 적절한 순서로 VRF(300)에 대해 올바른 데이터를 판독/기록할 수 있도록 커맨드 및 이들 파라미터를 동일한 방식으로 디코딩해야 할 수 있다.
일 예에서, 이것은 계층적 디코딩 및 디스패치 아키텍처를 사용하여 달성될 수 있다. 따라서, 프로세서(100)가 FPGA를 기반으로 구현되는 경우, 맞춤형 코드와 쌍을 이루는 규격형 Nios Ⅱ/f 프로세서를 사용하여 제어 프로세서를 구현할 수 있다. 제어 프로세서와 관련된 최상위 스케줄러는 체인으로 그룹화될 수 있는 명령어 스트림을 수신할 수 있다. 명령어를 디코딩한 후, 최상위 레벨 스케줄러는 분산형 제어 신호를 제2 레벨 스케줄러 세트 및 다른 제2 레벨 디코더 세트로 디스패치할 수 있다. 이들 제2 레벨 스케줄러 및 디코더는 추가의 분산형 제어 신호를 최하위 레벨 디코더로 디스패치할 수 있다. Nios 프로세서를 사용하는 예시적인 구현에서, Nios 프로세서는 N 명령어의 T 반복을 최상위 스케줄러로 스트리밍할 수 있다. 다음으로, 최상위 스케줄러는 MVM에 특정한 명령어 부분을 제2 레벨 스케줄러로 디스패치할 수 있으며, 이 스케줄러는 대상 행렬의 N개 행과 N개 열을 따라 연산을 확장할 수 있다. 이들 MVM 스케줄은 E개의 행렬-벡터 타일 엔진에 매핑될 수 있고 연산은 각각이 타일 엔진 및 관련 벡터 레지스터 파일 및 누적 유닛을 위한 E개의 디코더의 세트로 디스패치될 수 있다. E개의 디코더의 세트는 데이터 평면으로 팬아웃되는 제어 신호를 생성할 수 있으며, 각 타일 엔진 디스패처는 벡터 레지스터 파일로부터 벡터 데이터를 판독하고 그 벡터 데이터를 다시 벡터 레지스터 파일에 기록할 수 있는 수 백 개의 점곱 유닛으로 팬아웃된다.
판독/기록 동작과 관련하여, 이 예에서, VRF(300)는 데이터 폭 NATIVE_DIM * BFP_WIDTH + EXP_WIDTH의 다중 포트 메모리(예를 들어, 이중 포트 BRAM)를 내부적으로 사용할 수 있다. 일 예에서, 이중 포트 메모리(예를 들어, BRAM)는 매 사이클마다 다른 인터페이스 회로에서 데이터를 제공하기 위해 회전할 수 있다. 따라서, 이 예에서, 정상 상태에서, VRF(300)는 포트 충돌없이 전체 판독/기록 대역폭을 달성할 수 있다. 도 3은 특정 방식으로 배열된 VRF(300)의 특정 개수의 컴포넌트를 도시하지만, 다르게 배열된 더 많거나 더 적은 개수의 컴포넌트가 있을 수 있다. 예를 들어, 이중 포트 메모리는 BRAM으로 설명되지만 다른 유형의 프로세서에 있는 다른 유형의 메모리도 사용될 수 있다. 예를 들어, GPU, CPU 또는 다른 유형의 프로세서에 있는 SRAM 또는 다른 유형의 이중 포트 메모리도 사용될 수 있다. 또한, 도 3은 이중 포트 메모리(판독용 포트 1개, 기록용 포트 1개)를 설명하지만, 추가 포트가 있는 메모리도 사용될 수 있는데, 예를 들어, 2개의 판독 포트와 2개의 기록 포트가 있는 메모리가 사용될 수 있다.
도 4는 다른 예에 따른 벡터 레지스터 파일(400)의 블록도이다. 이 예는 이중 포트 메모리(430)를 포함하는 벡터 레지스터 파일(예를 들어, 도 3의 VRF(300))의 동작을 설명하기 위해 단순화되었다. 이 예는 벡터 또는 행렬의 고유 치수(N)가 128 워드라고 가정한다. 따라서, 행렬 벡터 곱셈기는 신경망 처리의 일부로서 N X N 행렬에 N X 1 벡터를 곱할 수 있다. 이 예는 각 요소가 W 비트의 너비를 갖는 워드라고 더 가정한다. 이 예는 각 점곱 유닛이 부분적인 점곱을 생성할 벡터 및 행렬 데이터의 L-워드(또는 L-요소)를 처리할 수 있다고 더 가정한다. MVM은 부분적인 점곱을 축적하기 위해 추가-감소 트리를 포함할 수 있다. 추가-감소 출력은 행렬의 전체 행에 대한 최종 점곱을 제공하도록 모든 부분 합을 합산하는 누산기에 제공될 수 있다. VRF(400)는 8개의 인터페이스를 통해 벡터 데이터를 수신할 수 있으며, 각 인터페이스는 L개의 레인을 갖는다. VRF(400)의 기록 인터페이스는 예를 들어 입력 인터페이스 회로(401), 입력 인터페이스 회로(403) 및 입력 인터페이스 회로(405)를 포함하는 입력 인터페이스 회로를 가질 수 있다. VRF(400)의 판독 인터페이스는 예를 들어 출력 인터페이스 회로(451), 출력 인터페이스 회로(453) 및 출력 인터페이스 회로(455)를 포함하는 출력 인터페이스 회로를 가질 수 있다. 각각의 입력 인터페이스 회로는 입력 버퍼(예를 들어, 입력 버퍼(402, 404 및 406))를 포함할 수 있고 각각의 출력 인터페이스 회로는 출력 버퍼(예를 들어, 출력 버퍼(462, 464, 및 466))를 포함할 수 있다. 입력 버퍼는 추가 인터페이스 요소(예를 들어, 인터페이스 요소(412, 414 및 416))에 더 결합될 수 있다. 출력 버퍼는 추가 출력 인터페이스 요소(예를 들어, 출력 인터페이스 요소(452, 454 및 456))에 더 결합될 수 있다. 기록 인터페이스는 멀티플렉서(420)를 더 포함할 수 있으며, 이는 입력 인터페이스 회로의 각각으로부터 출력을 수신하도록 결합될 수 있다. 멀티플렉서(420)의 출력은 이중 포트 메모리(430)의 판독 포트에 결합될 수 있다. 판독 인터페이스는 이중 포트 메모리로부터 출력을 수신하도록 결합될 수 있는 디멀티플렉서(440)를 더 포함할 수 있다. 디멀티플렉서로부터의 출력은 출력 인터페이스 회로에 결합될 수 있다.
기록 동작에 응답하여, 입력 인터페이스 회로는 텐서를 수신하기 위해 사용될 수 있고, 판독 동작에 응답하여, 출력 인터페이스 회로는 벡터 데이터를 제공할 수 있다. 이 예에서, 기록 명령어에 응답하여, 단일 클럭 사이클 동안 N개의 데이터 요소가 와이드 인터페이스(도 4에서 V로 표시됨)를 통해 이중 포트 메모리에 저장될 수 있다. P(N/L)개의 클럭 사이클의 각각 동안, VRF(400)는 각각의 입력 인터페이스를 통해 텐서 중 하나(예를 들어, 하나의 N x 1 벡터)를 수신할 수 있다. 도 4에 도시된 예에서, P = 8, N = 128 및 L = 16이다. 각 데이터 요소가 W 비트를 갖는 워드라고 가정하면, 각 입력 인터페이스 회로는 8 클럭 사이클마다 N에 W 비트를 곱한 값(V 비트)을 수신할 수 있다. 이 예에서 N은 128이고 워드 크기가 4 비트라고 가정하면 클럭 사이클마다 VRF(400)는 512 비트를 저장할 수 있다. 모든 클럭 사이클 동안 입력 인터페이스 회로의 일부인 L(예컨대, 이 경우 16)개의 입력 레인은 L개의 데이터 요소(예컨대, L개의 워드)를 병렬로 전달할 수 있다. 입력 인터페이스 회로의 일부인 시프트 레지스터(예를 들어, 시프트 레지스터(412, 414 및 416))는 멀티플렉서(420)에 클럭 사이클마다 512 비트를 제공할 수 있다.
유사하게, 판독 명령어에 응답하여, 8 클럭 사이클마다 VRF(400)는 멀티플렉서(440)를 통해 출력 인터페이스 회로 중 적어도 하나에 V 비트(512 비트)를 V-비트 폭의 판독 포트를 통해 제공할 수 있다. 시프트 레지스터(예를 들어, 시프트 레지스터(452, 454 및 456))는 클럭 사이클 당 L개의 데이터 요소를 각각의 출력 버퍼에 제공할 수 있다. 판독 및 기록 명령어는 동시에 실행되도록 스케줄링될 수 있다. 따라서, 인터페이스에서 인터페이스로 이중 포트 메모리(430)를 "회전"함으로써, 클럭 사이클마다 N의 고유 치수를 갖는 전체 벡터가 VRF(400)으로부터 판독 및 VRF(400)로 기록될 수 있다. 이것은 유리하게 프로세서(100)가 FPGA 또는 FPGA에서의 제한된 양의 BRAM과 같은 제한된 양의 SRAM을 가진 다른 유형의 하드웨어 노드에 기초하게 할 수 있다. 이것이 유리할 수 있는 이유는 행렬 벡터 곱셈이 전용 멀티 포트 BRAM을 제공하는 데 FPGA의 리소스를 낭비하는 일 없이 대부분의 FPGA의 리소스까지 확장되도록 설계될 수 있기 때문이다. 제어 로직(425)은 INPUT CONTROL 및 OUTPUT 제어와 같은 제어 신호를 제공할 수 있다. VRF(400)의 제어 측면에 관한 더 자세한 사항은 도 3 및 기타 설명과 관련하여 제공된다. 도 4는 N X N 크기의 2D 행렬 및 N-길이 1D 벡터를 사용하는 VRF(400)의 동작을 설명하고 있지만, VRF(400)는 다른 크기를 사용하여 동작할 수도 있다. 벡터 크기의 선택은 모델의 대상 세트에 따라 달라질 수 있는데, 벡터를 너무 크게 선택하면 차선의 패딩이 발생할 수 있는 반면, 너무 작은 벡터를 선택하면 프로세서의 제어 오버헤드가 증가할 수 있다. 도 4는 이중 포트 메모리를 사용하는 VRF(400)의 동작을 설명하고 있지만, 메모리는 추가의 판독/기록 포트를 가질 수 있다.
도 5는 일 예에 따라 프로세서 및 벡터 레지스터 파일을 사용하여 벡터 데이터 요소를 처리하는 방법의 흐름도를 도시한다. 이 예에서, 단계(510)는 벡터 레지스터 파일(VRF) 커맨드를 디코딩하여 주소 액세스 패턴 및 포트 선택을 결정하는 것을 포함할 수 있다. 커맨드 디코딩(374)이 이 단계를 수행할 수 있다. 앞서 설명한 바와 같이, 하나의 예에서 이것은 계층적 디코딩 및 디스패치 아키텍처를 사용하여 달성될 수 있다. 따라서, 프로세서(100)가 FPGA를 기반으로 구현되는 경우, 맞춤형 코드와 쌍을 이루는 규격형 Nios Ⅱ/f 프로세서를 사용하여 제어 프로세서를 구현할 수 있다. 제어 프로세서와 관련된 최상위 스케줄러는 체인으로 그룹화될 수 있는 명령어 스트림을 수신할 수 있다. 명령어를 디코딩한 후, 최상위 레벨 스케줄러는 분산형 제어 신호를 제2 레벨 스케줄러 세트와 다른 세트의 제2 레벨 디코더로 디스패치할 수 있다. 이들 제2 레벨 스케줄러 및 디코더는 추가의 분산형 제어 신호를 최하위 레벨 디코더로 디스패치할 수 있다. Nios 프로세서를 사용하는 예시적인 구현에서, Nios 프로세서는 N 명령어의 T 반복을 최상위 스케줄러로 스트리밍할 수 있다. 다음으로, 최상위 스케줄러는 MVM에 특정한 명령어 부분을 제2 레벨 스케줄러로 디스패치할 수 있는데, 이 제2 레벨 스케줄러는 대상 행렬의 N개 행과 N개 열을 따라 연산을 확장할 수 있다. 이들 MVM 스케줄은 E개의 행렬-벡터 타일 엔진에 매핑될 수 있고 연산은 각각이 타일 엔진 및 이들의 관련 벡터 레지스터 파일 및 축적 유닛을 위한 E개의 디코더의 세트로 디스패치될 수 있다. E개의 디코더의 세트는 데이터 평면으로 팬아웃되는 제어 신호를 생성할 수 있으며, 각 타일 엔진 디스패처는 벡터 레지스터 파일로부터 벡터 데이터를 판독하고 이 벡터 데이터를 다시 벡터 레지스터 파일에 기록할 수 있는 수 백 개의 점곱 유닛으로 팬아웃된다.
또한, 벡터 레지스터 파일에 RAW(Read-After-Write) 또는 WAR(Write-After-Read) 위험을 가질 수 있으므로 위험 검출이 사용될 수 있다. 따라서, 하나의 예에서, 위험 검출기(예를 들어, 도 2의 214)는 판독 또는 기록 명령어에 의해 액세스된 주소를 추적할 수 있으며, 판독 명령어가 도착하고 기록이 진행 중일 때, 위험 검출기는 수신 판독 명령어에 의해 액세스된 주소가 현재의 기록 명령어에 의해 액세스되는 주소와 겹치는지 여부를 확인할 수 있다. 하나의 예에서, 위험 검출기는 이들 명령어에 의해 액세스되는 특정 수의 주소를 추적하기 위해 한 쌍의 레지스터를 유지함으로써 달성될 수 있다.
단계(520)는 적어도 하나의 디코딩된 VRF 주소를 큐에 배치하는 것을 포함할 수 있다. 이 예에서, 주소 디코딩(372)이 이 단계를 수행할 수 있다.
단계(530)는 N의 고유 치수를 갖는 벡터 데이터의 도착시 큐를 디큐잉하는 것을 포함할 수 있다. VRF(370)와 연관된 제어 로직(370)이 이 단계를 수행할 수 있다.
단계(540)는 기록 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클의 각각 동안, 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하는 것을 포함할 수 있는데, 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다. 이 예에서, 유한 상태 머신(예를 들어, WRITE FSM(376))이 이 단계를 수행할 수 있다. 이 단계에 관한 추가 세부 사항은 도 4와 관련하여 제공된다.
단계(550)는 판독 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리로부터 N개의 데이터 요소를 검색하고 P개의 클럭 사이클의 각각 동안, 이중 포트 메모리의 P개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하는 것을 더 포함할 수 있되, 여기서 P개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성된다. 이 예에서 유한 상태 머신(예컨대, READ FSM(378))이 이 단계를 수행할 수 있다. 이 단계에 관한 추가 세부 사항은 도 4와 관련하여 제공된다. 도 5는 특정 순서로 수행되는 특정 수의 단계를 설명하고 있지만, 다른 순서의 더 많은 또는 더 적은 단계가 수행될 수 있다. 또한, 도 5는 이중 포트 메모리에 대한 방법을 설명하지만, 추가 포트를 구비한 메모리가 사용될 수 있다. 예를 들어, 2개의 판독 포트와 2개의 기록 포트가 있는 메모리가 사용될 수 있다.
결론적으로, 본 개시는 다중 포트 메모리(예를 들어, 이중 포트 메모리)를 포함하는 벡터 레지스터 파일을 포함하는 프로세서에 관한 것이다. 프로세서는 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성된 복수의 타일을 더 포함할 수 있으며, 여기서 N은 8 이상의 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다. 벡터 레지스터 파일은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 다중 포트 메모리에 N개의 데이터 요소를 저장하고, P개 클럭 사이클의 각각 동안 다중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하도록 구성될 수 있는데. 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 다중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
벡터 레지스터 파일은 또한 판독 명령어에 응답하여 단일 클럭 사이클 동안 다중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클의 각각 동안 다중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하도록 구성될 수 있는데, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하고, Q개의 클럭 사이클의 각각 동안 다중 포트 메모리는 N개의 데이터 요소를 Q개의 출력 인터페이스 회로 중 선택된 적어도 하나에 제공하도록 구성된다.
일 예에서, 다중 포트 메모리는 이중 포트 메모리로 구성될 수 있고, 이중 포트 메모리는 단일 판독 포트 및 단일 기록 포트를 포함할 수 있다. 이 예에서, 판독 명령어는 기록 명령어와 실질적으로 동시에 처리될 수 있다.
일 예에서, P개의 입력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 입력 버퍼를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 출력 버퍼를 포함한다. 이 예에서, 각각의 P 입력 인터페이스 회로는 입력 버퍼로부터 N x 1 벡터를 수신하도록 결합된 적어도 하나의 시프트 레지스터를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 출력 버퍼에 제공하도록 결합된 적어도 하나의 시프트 레지스터를 포함한다.
다른 예에서, 본 개시는 복수의 타일 및 이중 포트 메모리를 포함하는 벡터 레지스터 파일을 포함하는 시스템에서의 방법에 관한 것으로, 복수의 타일의 각각은 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성되는데, 여기서 N은 8 이상의 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다.
이 방법은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클의 각각 동안, 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하는 단계를 포함할 수 있는데, 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
방법은 판독 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클 각각 동안, 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하는 단계를 더 포함할 수 있되, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, Q개의 클럭 사이클의 각각 동안 이중 포트 메모리는 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성된다.
일 예에서, 이중 포트 메모리는 단일 판독 포트 및 단일 기록 포트를 포함할 수 있다. 이 예에서, 판독 명령어는 기록 명령어와 실질적으로 동시에 처리될 수 있다.
일 예에서, P개의 입력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 입력 버퍼를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 출력 버퍼를 포함한다. 이 예에서, 각각의 P 입력 인터페이스 회로는 입력 버퍼로부터 N x 1 벡터를 수신하도록 결합된 적어도 하나의 시프트 레지스터를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 출력 버퍼에 제공하도록 결합된 적어도 하나의 시프트 레지스터를 포함한다.
또 다른 예에서, 본 개시는 단일 판독 포트 및 단일 기록 포트를 포함하는 이중 포트 메모리를 포함하는 벡터 레지스터 파일을 포함하는 프로세서에 관한 것이다. 프로세서는 N x N 행렬 및 Nx1 벡터를 처리하도록 구성된 복수의 타일을 더 포함할 수 있으며, 여기서 N은 8 이상의 정수이고, 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성된다.
벡터 레지스터 파일은 기록 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리에 N개의 데이터 요소를 단일 기록 포트를 통해 저장하고, P개의 클럭 사이클의 각각 동안, 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하도록 구성될 수 있되, 여기서 P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, P개의 클럭 사이클의 각각 동안 이중 포트 메모리는 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성된다.
벡터 레지스터 파일은 판독 명령어에 응답하여, 단일 클럭 사이클 동안 이중 포트 메모리로부터 단일 판독 포트를 통해 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클 각각 동안, 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하도록 더 구성될 수 있되, 여기서 Q는 N을 L로 나눈 값과 동일한 정수이고, Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, Q개의 클럭 사이클의 각각 동안 이중 포트 메모리는 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성된다.
일 예에서, P개의 입력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 입력 버퍼를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 출력 버퍼를 포함한다. 이 예에서, 각각의 P 입력 인터페이스 회로는 입력 버퍼로부터 Nx1 벡터를 수신하도록 결합된 적어도 하나의 시프트 레지스터를 포함하고 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 출력 버퍼에 제공하도록 결합된 적어도 하나의 시프트 레지스터를 포함한다. 이 예에서, 판독 명령어는 기록 명령어와 실질적으로 동시에 처리될 수 있다.
본 명세서에서 설명된 방법, 모듈 및 컴포넌트는 단지 예시적이라는 것을 이해해야 한다. 대안적으로 또는 추가적으로, 본 명세서에 설명된 기능은 적어도 부분적으로 하나 이상의 하드웨어 로직 컴포넌트에 의해 수행될 수 있다. 예를 들어 제한없이, 사용될 수 있는 예시적인 유형의 하드웨어 로직 컴포넌트는 FPGA(Field-Programmable Gate Array), 주문형 집적 회로(ASIC), 주문형 표준 제품(Application-Specific Standard Products: ASSP), 시스템 온 칩(SOC), 복합 프로그램가능 로직 장치(CPLD) 등을 포함한다. 추상적이지만 확실한 의미에서, 동일한 기능을 달성하기 위한 컴포넌트의 모든 배열은 원하는 기능이 달성되도록 효과적으로 "연관된다(associated)". 따라서, 특정 기능을 달성하기 위해 본 명세서에서 결합된 임의의 두 컴포넌트는 아키텍처 또는 중간 컴포넌트에 관계없이 원하는 기능이 달성되도록 서로 "연관된" 것으로 보일 수 있다. 마찬가지로, 이와 같이 연관된 임의의 두 컴포넌트는 원하는 기능을 달성하기 위해 서로 "작동 가능하게 연결"또는 "결합"된 것으로 볼 수도 있다.
본 개시에 설명된 일부 예와 관련된 기능은 또한 비 일시적 매체에 저장된 명령어를 포함할 수 있다. 본 명세서에서 사용되는 용어 "비 일시적 매체"는 머신이 특정 방식으로 작동하게 하는 데이터 및/또는 명령어를 저장하는 임의의 매체를 지칭한다. 예시적인 비 일시적 매체는 비 휘발성 매체 및/또는 휘발성 매체를 포함한다. 비 휘발성 매체에는 예를 들어 하드디스크, 솔리드 스테이트 드라이브, 자기 디스크 또는 테이프, 광 디스크 또는 테이프, 플래시 메모리, EPROM, NVRAM, PRAM 또는 기타 이러한 매체, 또는 이러한 매체의 네트워크 버전이 포함된다. 휘발성 매체는 예를 들어 DRAM, SRAM, 캐시 또는 기타 그러한 매체와 같은 동적 메모리를 포함한다. 비 일시적 매체는 전송 매체와는 다르지만 이 전송 매체와 함께 사용될 수 있다. 전송 매체는 머신으로 또는 그 머신으로부터 데이터 및/또는 명령어를 전송하는 데 사용된다. 예시적인 전송 매체는 동축 케이블, 광섬유 케이블, 구리선 및 무선 전파와 같은 무선 매체를 포함한다.
또한, 당업자라면 전술한 동작들의 기능 사이의 경계는 단지 예시적이라는 것을 알 것이다. 여러 작업들의 기능은 단일 작업으로 결합될 수 있고 및/또는 단일 작업의 기능은 추가 작업에 분산될 수 있다. 더욱이, 대안적인 실시예는 특정 동작의 다중 인스턴스를 포함할 수 있고, 동작의 순서는 다양한 다른 실시예에서 변경될 수 있다.
본 개시는 특정 예를 제공하지만, 하기 청구 범위에 기재된 본 개시의 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있다. 따라서, 명세서 및 도면은 제한적인 의미가 아닌 예시적인 의미로 간주되어야 하며, 이러한 모든 수정은 본 개시의 범위 내에 포함되도록 의도된다. 특정 예와 관련하여 본 명세서에 설명된 문제에 대한 모든 이점, 장점 또는 해결책은 임의의 또는 모든 청구항의 중요한, 필요한 또는 필수적인 특징 또는 요소로 해석되도록 의도되지 않는다.
또한, 본 명세서에서 사용된 부정관사 표현("a" 또는 "an")은 하나 또는 하나 이상으로 정의된다. 또한, 청구 범위에서 "적어도 하나(at least one)" 및 "하나 이상(one or more)"과 같은 소개 문구의 사용은, 동일한 청구항이 "하나 이상" 또는 "적어도 하나" 및 부정관사 표현(예컨대, "a" 또는 "an")을 포함하더라도, 부정관사 표현("a" 또는 "an")에 의한 다른 청구 요소의 도입이 그러한 도입된 청구 요소를 포함하는 임의의 특정 청구항을 그러한 요소를 하나만을 포함하는 발명으로 제한하는 것으로 해석되어서는 안된다. 정관사의 사용도 마찬가지이다.
달리 언급되지 않는 한, "제 1" 및 "제 2"와 같은 용어는 이러한 용어가 설명하는 요소들 간을 임의로 구별하는 데 사용된다. 따라서, 이들 용어는 그러한 요소의 시간적 또는 기타 우선순위를 나타내기 위해 반드시 의도된 것은 아니다.

Claims (15)

  1. 프로세서로서,
    다중 포트 메모리를 포함하는 벡터 레지스터 파일과,
    데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성된 복수의 타일을 포함하되,
    N은 8 이상인 정수이고, 상기 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성되고, 상기 벡터 레지스터 파일은,
    기록 명령어에 응답하여, 단일 클럭 사이클 동안 상기 다중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클의 각각 동안 상기 다중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하고― P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상인 정수이며, 상기 P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, 상기 P개의 클럭 사이클의 각각 동안 상기 다중 포트 메모리는 상기 P개의 입력 인터페이스 회로 중 선택된 적어도 하나를 통해 N개의 데이터 요소를 수신하도록 구성됨 ―,
    판독 명령어에 응답하여, 단일 클럭 사이클 동안 상기 다중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클의 각각 동안 상기 다중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공― Q는 N을 L로 나눈 값과 동일한 정수이고, 상기 Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, 상기 Q개의 클럭 사이클의 각각 동안 상기 다중 포트 메모리는 N개의 데이터 요소를 상기 Q개의 출력 인터페이스 회로 중 선택된 적어도 하나에 제공하도록 구성됨 ―하도록 구성된
    프로세서.
  2. 제1항에 있어서,
    상기 다중 포트 메모리는 이중 포트 메모리이고, 상기 이중 포트 메모리는 단일 판독 포트 및 단일 기록 포트를 포함하는
    프로세서.
  3. 제1항에 있어서,
    상기 판독 명령어는 상기 기록 명령어와 실질적으로 동시에 처리되는
    프로세서.
  4. 제1항에 있어서,
    상기 P개의 입력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 입력 버퍼를 포함하는
    프로세서.
  5. 제1항에 있어서,
    상기 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 출력 버퍼를 포함하는
    프로세서.
  6. 제4항에 있어서,
    상기 P개의 입력 인터페이스 회로의 각각은 상기 입력 버퍼로부터 상기 N x 1 벡터를 수신하도록 결합된 적어도 하나의 시프트 레지스터를 포함하는
    프로세서.
  7. 제5항에 있어서,
    상기 Q개의 출력 인터페이스 회로의 각각은 상기 N x 1 벡터를 상기 출력 버퍼로 제공하도록 결합된 적어도 하나의 시프트 레지스터를 포함하는
    프로세서.
  8. 복수의 타일 및 이중 포트 메모리를 포함하는 벡터 레지스터 파일을 포함하는 시스템에서의 방법으로서,
    상기 복수의 타일의 각각은 데이터 요소의 N x N 행렬 및 데이터 요소의 N x 1 벡터를 처리하도록 구성되며, N은 8 이상의 정수이고, 상기 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성되고,
    상기 방법은
    기록 명령어에 응답하여, 단일 클럭 사이클 동안 상기 이중 포트 메모리에 N개의 데이터 요소를 저장하고 P개의 클럭 사이클의 각각 동안, 상기 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하는 단계― P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, 상기 P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, 상기 P개의 클럭 사이클의 각각 동안 상기 이중 포트 메모리는 상기 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성됨 ―와,
    판독 명령어에 응답하여, 단일 클럭 사이클 동안 상기 이중 포트 메모리로부터 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클의 각각 동안, 상기 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하는 단계― Q는 N을 L로 나눈 값과 동일한 정수이고, 상기 Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하며, 상기 Q개의 클럭 사이클의 각각 동안 상기 이중 포트 메모리는 상기 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성됨 ―를 포함하는
    방법.
  9. 제8항에 있어서,
    상기 이중 포트 메모리는 단일 판독 포트 및 단일 기록 포트를 포함하는
    방법.
  10. 제8항에 있어서,
    상기 판독 명령어는 상기 기록 명령어와 실질적으로 동시에 처리되는
    방법.
  11. 제8항에 있어서,
    상기 P개의 입력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 입력 버퍼를 포함하는
    방법.
  12. 제8항에 있어서,
    상기 Q개의 출력 인터페이스 회로의 각각은 N x 1 벡터를 저장하도록 구성된 출력 버퍼를 포함하는
    방법.
  13. 제11항에 있어서,
    상기 P개의 입력 인터페이스 회로의 각각은 상기 입력 버퍼로부터 상기 N x 1 벡터를 수신하도록 결합된 적어도 하나의 시프트 레지스터를 포함하는
    방법.
  14. 제12항에 있어서,
    상기 Q개의 출력 인터페이스 회로의 각각은 상기 N x 1 벡터를 상기 출력 버퍼로 제공하도록 결합된 적어도 하나의 시프트 레지스터를 포함하는
    방법.
  15. 프로세서로서,
    단일 판독 포트 및 단일 기록 포트를 포함하는 이중 포트 메모리를 포함하는 벡터 레지스터 파일과,
    N x N 행렬 및 N x 1 벡터를 처리하도록 구성된 복수의 타일을 포함하되, N은 8 이상의 정수이고, 상기 복수의 타일의 각각은 N개의 데이터 요소를 처리하도록 구성되고,
    상기 벡터 레지스터 파일은
    기록 명령어에 응답하여, 단일 클럭 사이클 동안 단일 기록 포트를 통해 상기 이중 포트 메모리에 N개의 데이터 요소를 저장하고, P개 클럭 사이클의 각각 동안 상기 이중 포트 메모리의 P개의 입력 인터페이스 회로의 각각에 N개의 데이터 요소를 제공하고― P는 N을 L로 나눈 값과 동일한 정수이고, L은 2 이상의 정수이며, 상기 P개의 입력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 입력 레인을 포함하고, 상기 P개의 클럭 사이클의 각각 동안 상기 이중 포트 메모리는 상기 P개의 입력 인터페이스 회로 중 선택된 하나를 통해 N개의 데이터 요소를 수신하도록 구성됨 ―,
    판독 명령어에 응답하여, 단일 클럭 사이클 동안 상기 단일 판독 포트를 통해 상기 이중 포트 메모리에서 N개의 데이터 요소를 검색하고 Q개의 클럭 사이클의 각각 동안 상기 이중 포트 메모리의 Q개의 출력 인터페이스 회로의 각각으로부터 L개의 데이터 요소를 제공하도록― Q는 N을 L로 나눈 값과 동일한 정수이고, 상기 Q개의 출력 인터페이스 회로의 각각은 L개의 데이터 요소를 병렬로 전달하도록 구성된 출력 레인을 포함하고, 상기 Q개의 클럭 사이클의 각각 동안 상기 이중 포트 메모리는 상기 Q개의 출력 인터페이스 회로 중 선택된 하나에 N개의 데이터 요소를 제공하도록 구성됨 ―구성된
    프로세서.
KR1020207030178A 2018-04-21 2019-04-06 다중 포트 메모리를 포함하는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기 KR20210002495A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/959,209 US10795678B2 (en) 2018-04-21 2018-04-21 Matrix vector multiplier with a vector register file comprising a multi-port memory
US15/959,209 2018-04-21
PCT/US2019/026205 WO2019204068A1 (en) 2018-04-21 2019-04-06 Matrix vector multiplier with a vector register file comprising a multi-port memory

Publications (1)

Publication Number Publication Date
KR20210002495A true KR20210002495A (ko) 2021-01-08

Family

ID=66248741

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207030178A KR20210002495A (ko) 2018-04-21 2019-04-06 다중 포트 메모리를 포함하는 벡터 레지스터 파일을 갖는 행렬 벡터 곱셈기

Country Status (13)

Country Link
US (1) US10795678B2 (ko)
EP (1) EP3785112B1 (ko)
JP (1) JP7262569B2 (ko)
KR (1) KR20210002495A (ko)
CN (1) CN112005214B (ko)
AU (1) AU2019257260B2 (ko)
BR (1) BR112020019457A2 (ko)
CA (1) CA3096443A1 (ko)
IL (1) IL278050B2 (ko)
MX (1) MX2020010916A (ko)
PH (1) PH12020551746A1 (ko)
SG (1) SG11202009936XA (ko)
WO (1) WO2019204068A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102371451B1 (ko) 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11574659B2 (en) * 2018-09-11 2023-02-07 Micron Technology, Inc. Parallel access to volatile memory by a processing device for machine learning
US11579883B2 (en) * 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
EP3623984A1 (en) * 2018-09-17 2020-03-18 Secure-IC SAS Circuit configured to monitor a sensitive payload
US11983616B2 (en) * 2018-10-01 2024-05-14 Expedera, Inc. Methods and apparatus for constructing digital circuits for performing matrix operations
US11586883B2 (en) * 2018-12-14 2023-02-21 Microsoft Technology Licensing, Llc Residual quantization for neural networks
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
US20220413852A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Processor embedded streaming buffer

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4036455C1 (ko) * 1990-11-15 1992-04-02 Siemens Ag, 8000 Muenchen, De
JP3297925B2 (ja) * 1991-09-12 2002-07-02 ソニー株式会社 信号処理用プロセッサ
EP1311945A1 (en) 2000-08-22 2003-05-21 Jean-Paul Theis A configurable register file with multi-range shift register support
IL145245A0 (en) * 2001-09-03 2002-06-30 Jtc 2000 Dev Delaware Inc System and method including vector-matrix multiplication
US7284113B2 (en) * 2003-01-29 2007-10-16 Via Technologies, Inc. Synchronous periodical orthogonal data converter
GB2399900B (en) * 2003-03-27 2005-10-05 Micron Technology Inc Data reording processor and method for use in an active memory device
US7635987B1 (en) 2004-12-13 2009-12-22 Massachusetts Institute Of Technology Configuring circuitry in a parallel processing environment
JP2007280297A (ja) 2006-04-11 2007-10-25 Seiko Epson Corp プロセッサ、レジスタファイル回路、集積回路装置、マイクロコンピュータ及び電子機器
US8984043B2 (en) * 2009-12-23 2015-03-17 Intel Corporation Multiplying and adding matrices
WO2014123766A1 (en) 2013-02-05 2014-08-14 3M Innovative Properties Company Graphic article
US9384168B2 (en) * 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
JP6253514B2 (ja) 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
GB2540940B (en) * 2015-07-31 2018-01-03 Advanced Risc Mach Ltd An apparatus and method for transferring a plurality of data structures between memory and one or more vectors of data elements stored in a register bank
US20170371657A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Scatter to gather operation
US11144820B2 (en) * 2017-02-28 2021-10-12 Microsoft Technology Licensing, Llc Hardware node with position-dependent memories for neural network processing

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102371451B1 (ko) 2021-05-27 2022-03-07 충남대학교 산학협력단 멀티포트 메모리를 이용한 병렬 곱셈장치

Also Published As

Publication number Publication date
CN112005214B (zh) 2024-02-20
IL278050A (en) 2020-11-30
SG11202009936XA (en) 2020-11-27
EP3785112B1 (en) 2022-03-16
IL278050B2 (en) 2023-11-01
JP2021522630A (ja) 2021-08-30
PH12020551746A1 (en) 2021-07-26
AU2019257260B2 (en) 2023-09-28
EP3785112A1 (en) 2021-03-03
BR112020019457A2 (pt) 2021-01-05
JP7262569B2 (ja) 2023-04-21
AU2019257260A1 (en) 2020-10-01
US20190324748A1 (en) 2019-10-24
CN112005214A (zh) 2020-11-27
IL278050B1 (en) 2023-07-01
WO2019204068A1 (en) 2019-10-24
CA3096443A1 (en) 2019-10-24
MX2020010916A (es) 2020-11-09
US10795678B2 (en) 2020-10-06

Similar Documents

Publication Publication Date Title
CN112005214B (zh) 具有包括多端口存储器的向量寄存器文件的矩阵向量乘法器
CN110998570B (zh) 具有带有块浮点处理的矩阵矢量单元的硬件节点
US11151445B2 (en) Neural network processor with a window expander circuit
CN110352433B (zh) 用于神经网络处理的具有矩阵-向量相乘区块的硬件节点
WO2019204067A1 (en) Neural network processor based on application specific synthesis specialization parameters
US11763156B2 (en) Neural network compression based on bank-balanced sparsity
CN115398395A (zh) 具有用于同时处理不同类运算的独立数据路径的深度神经网络加速器
Hurkat et al. VIP: A versatile inference processor
CN115860066A (zh) 一种基于批处理的神经网络推理流水线复用的方法
JP2023534068A (ja) スパース性を使用して深層学習ネットワークを加速するためのシステム及び方法
RU2795887C2 (ru) Матрично-векторный умножитель с набором регистров для хранения векторов, содержащим многопортовую память
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
CN113159302A (zh) 一种用于可重构神经网络处理器的路由结构
US20230342152A1 (en) Parallel processing architecture with split control word caches
WO2024006401A1 (en) Parallel processing architecture with split control word caches
Xie Hardware Accelerator for LSTM Neural Networks using High-Level Synthesis
CN117539546A (zh) 基于非空列存储的稀疏矩阵向量乘加速方法及装置
CN116997909A (zh) 稀疏机器学习加速