KR20210090260A - 손실 희소 로드 simd 인스트럭션 제품군 - Google Patents

손실 희소 로드 simd 인스트럭션 제품군 Download PDF

Info

Publication number
KR20210090260A
KR20210090260A KR1020217018458A KR20217018458A KR20210090260A KR 20210090260 A KR20210090260 A KR 20210090260A KR 1020217018458 A KR1020217018458 A KR 1020217018458A KR 20217018458 A KR20217018458 A KR 20217018458A KR 20210090260 A KR20210090260 A KR 20210090260A
Authority
KR
South Korea
Prior art keywords
input vector
threshold
vector operands
neural network
processing
Prior art date
Application number
KR1020217018458A
Other languages
English (en)
Other versions
KR102598174B1 (ko
Inventor
산차리 센
데릭 알렌 아구렌
죠셉 리 그레이트하우스
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20210090260A publication Critical patent/KR20210090260A/ko
Application granted granted Critical
Publication of KR102598174B1 publication Critical patent/KR102598174B1/ko

Links

Images

Classifications

    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • G06N3/0445
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • 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/048Activation functions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

손실 희소 로드 단일 인스트럭션, 다중 데이터(SIMD) 인스트럭션들의 제품군을 구현하기 위한 시스템들, 장치들 및 방법들이 개시된다. 손실 희소 로드 유닛(LSLU)은 하나 이상의 입력 벡터 피연산자로부터 복수의 값들을 로드하고 주어진 인스트럭션의 하나 이상의 입력 벡터 피연산자들에 얼마나 많은 0이 아닌 값들의 수가 포함되는지를 결정한다. 하나 이상의 입력 벡터 피연산자들이 임계 개수 미만의 0이 아닌 값들을 갖는 경우, LSLU는 하나 이상의 입력 벡터 피연산자들을 처리하기 위해 인스트럭션이 스킵되도록 한다. 이 경우, 하나 이상의 입력 벡터 피연산자들의 인스트럭션의 처리는 중복되는 것으로 간주된다. 하나 이상의 입력 벡터 피연산자들이 임계 개수 이상의 0이 아닌 값들을 갖는 경우, LSLU는 입력 벡터 피연사자(들)을 처리하기 위한 인스트럭션이 실행되도록 한다.

Description

손실 희소 로드 SIMD 인스트럭션 제품군
신흥 기술 분야는 기계 학습이며 신경망은 기계 학습 모델의 한 유형이다. 신경망은 손으로 쓴 숫자 분류 및 안면 검출과 같은 작업들에서 뛰어난 성능을 보여주었다. 추가로, 신경망은 또한 다른 더 까다로운 시각적 분류 작업들에서도 잘 수행할 수 있는 가능성을 보여주었다. 신경망을 위한 다른 애플리케이션들은 음성 인식, 언어 모델링, 감정 분석, 텍스트 예측 등을 포함한다.
심층 신경망(DNN)은 서로 다른 데이터 구조들에서 희소성 또는 0 값들을 나타내는 것으로 알려져 있다. 예를 들어, ResNet-50 및 AlexNet의 활성화는 각각 58 % 및 55 %의 평균 희소성을 나타내는 반면, DeepCompression AlexNet의 가중치들은 추론 단계 동안 65 %의 희소성을 나타낸다. DNN 데이터 구조들의 값들이 0이면 다중 누적(multiply-accumulate; MAC) 연산들의 일부일 수 있는 결과적인 다중 추가(multiply-add; MAD) 연산들이 불필요하고 비효율적이다. 이는 일반적인 하드웨어 플랫폼들에서 DNN들을 비효율적으로 구현하는 결과들을 초래한다.
본원에 설명된 방법들 및 메커니즘들의 장점들은 첨부 도면들과 함께 다음의 설명을 참조함으로써 더 잘 이해될 수 있다:
도 1은 컴퓨팅 시스템의 일 구현예의 블록도이다.
도 2는 컴퓨팅 시스템의 다른 구현예의 블록도이다.
도 3은 컴퓨팅 유닛 로직의 한 구현예의 블록도이다.
도 4는 벡터 손실 결합 희소 로드 인스트럭션을 실행하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 5는 벡터 손실 단일 희소 로드 인스트럭션을 실행하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 6은 누적된 0이 아닌 카운트 어레이를 처리하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 7은 벡터 손실 희소 로드 및 스킵 인스트럭션을 실행하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 8은 손실 희소 로드 인스트럭션을 실행하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 9는 신경망을 구현하기 위한 방법의 한 구현예를 예시하는 일반화된 흐름도이다.
도 10은 한 구현예에 따라 내적 곱 및 외적 곱 행렬 곱셈 연산들을 구현하기 위한 의사 코드의 예들을 예시한다.
도 11은 한 구현예에 따른 벡터 손실 결합 희소 로드 인스트럭션를 구현하기 위한 의사 코드의 예를 예시한다.
도 12는 벡터 손실 결합 희소 로드 인스트럭션을 구현하기 위한 로직의 한 구현예의 블록도이다.
도 13은 한 구현예에 따른 벡터 손실 단일 희소 로드 인스트럭션을 구현하기 위한 의사 코드의 예를 예시한다.
도 14는 한 구현예에 따라 벡터 손실 희소 로드 및 스킵 인스트럭션을 구현하기 위한 의사 코드의 예를 예시한다.
다음의 설명에서, 많은 특정 세부사항들이 본원에 제시된 방법들 및 메커니즘들의 완전한 이해를 제공하기 위해 제시된다. 그러나, 본 기술분야에서 통상의 기술을 가진 자는 다양한 구현예들이 이러한 특정 세부 사항들 없이 실시될 수 있음을 인식해야 한다. 일부 예들에서, 주지의 구조들, 컴포넌트들, 신호들, 컴퓨터 프로그램 인스트럭션들 및 기술들은 본원에 설명된 접근 방식들을 모호하게 하지 않도록 상세하게 설명되지 않았다. 설명의 단순성 및 명료성을 위해, 도면들에 도시된 요소들은 반드시 비례하여 도시된 것은 아님이 이해될 것이다. 예를 들어, 요소들 중 일부의 치수들은 다른 요소들에 비해 과장될 수 있다.
손실 희소 로드 단일 인스트럭션, 다중 데이터(SIMD) 인스트럭션들의 제품군을 구현하기 위한 다양한 시스템들, 장치들 및 방법들이 본원에 개시된다. 심층 신경망(DNN) 데이터 구조들은 일반적으로 약간의 희소성(즉, 0 값들)을 포함한다. 다양한 구현예들에서, SIMD 손실 희소 로드 인스트럭션 제품군 및 관련 마이크로 아키텍처 확장이 시스템에 의해 이용된다. 이 인스트럭션 제품군은 DNN 훈련 및 추론 동안 발생되는 동적 희소성을 위해 프로세서 성능과 전력을 최적화한다. 한 구현예에서, 중복 곱셈 누적(multiply-accumulate; MAC) 또는 곱셈 추가(multiply-add; MAD) 연산들은 입력 벡터 피연산자들을 사용자 정의 마스크에 적용함으로써 식별 및 제거된다. 사용자 정의 마스크는 선택적으로 입력 데이터 구조에 추가 희소성을 부과하여 특정 DNN의 복원력을 활용하여 성능 및 전력 이득을 향상시킨다. 다양한 구현예들에서, 인스트럭션들은 SIMD 스케줄러에 의해 파면(wavefront)(즉, 워프)에서 블록으로 또는 선택적으로는 스킵 큐(skip queue)를 통해 스킵된다.
시스템은 하나 이상의 메모리들에 결합된 복수의 컴퓨팅 유닛들을 갖는 적어도 하나의 프로세서를 포함한다. 한 구현예에서, 각 컴퓨팅 유닛은 손실 희소 로드 유닛 및 복수의 처리 요소들을 포함한다. 한 구현예에서, 처리 요소들은 SIMD 유닛들이다. 한 구현예에서, 손실 희소 로드 유닛은 보류중인 인스트럭션의 하나 이상의 입력 벡터 피연산자들에 0이 아닌 값들이 얼마나 많이 있는지를 결정한다. 한 구현예에서, 손실 희소 로드 유닛은 하나 이상의 입력 벡터 피연산자들에서 0이 아닌 값들의 수가 임계값 이상이라는 결정에 응답하여 하나 이상의 입력 벡터 피연산자들이 복수의 처리 요소들에 의해 처리되게 한다. 그렇지 않고, 하나 이상의 입력 벡터 연산자들에서 0이 아닌 값들의 수가 임계값 미만이면, 손실 희소 로드 유닛은 복수의 처리 요소들에 의한 하나 이상의 입력 벡터 피연산자들의 처리가 스킵되도록 한다. 한 구현예에서, 임계값은 프로그램 가능하다.
한 구현예에서, 시스템은 프로그램 코드가 하나 이상의 제1 인스트럭션들 및 하나 이상의 제2 인스트럭션들을 포함하는 시스템의 처리 요소들에 의한 실행을 위해 신경망의 프로그램 코드를 수신한다. 시스템은 처리 요소들에 대한 제1 인스트럭션들을 실행하고 제1 및 제2 인스트럭션들의 입력 벡터 피연산자들에서 0이 아닌 값들의 수에 대한 제2 인스트럭션들의 실행을 스킵한다. 시스템은 제1 인스트럭션들을 실행하고 제2 인스트럭션들을 스킵함으로써 신경망을 구현한다. 한 구현예에서, 시스템은 신경만을 구현하여 제1 데이터 세트의 분류를 생성한다. 상기 특성화에서, 제1 인스트럭션들 및 제2 인스트럭션들은 사전에 식별될 수 없음에 유의한다. 오히려, 제1 인스트럭션들은 임계량 미만의 희소성을 갖는 피연산자들에 기초하여 런타임에 식별되는 반면, 제2 인스트럭션들은 임계량 이상의 희소성을 갖는 피연산자들에 기초하여 런타임에 식별된다. 다양한 구현예들에서, 희소성의 임계량은 신경망 구현 시 오류에 대한 허용 오차를 기반으로 사용자가 구성할 수 있다.
이제 도 1을 참조하면, 컴퓨팅 시스템(100)의 한 구현예의 블록도가 도시된다. 한 구현예에서, 컴퓨팅 시스템(100)은 적어도 신경망(105), 프로세서(들)(110), 입력/출력(I/O) 인터페이스들(120), 버스(125) 및 메모리 서브시스템(130)을 포함한다. 다른 구현예들에서, 컴퓨팅 시스템(100)는 다른 컴포넌트들을 포함할 수 있고/있거나 컴퓨팅 시스템(100)은 다르게 배열될 수 있다. 다양한 구현예들에서, 신경망(105)은 임의의 다양한 기계 학습 알고리즘들 또는 기계 학습 모델들을 구현하기 위한 로직을 포함한다. 한 구현예에서, 신경망(105)은 종래 신경망의 하나 이상의 계층들을 구현한다. 예를 들어, 이 구현예에서, 신경망(105)은 하나 이상의 종래 계층들 및/또는 하나 이상의 완전히 연결된 계층들을 구현한다. 다른 구현예에서, 신경망(105)은 신경망 (105)은 순환 신경망의 하나 이상의 계층들을 구현한다. 다양한 구현예들에서, 신경망(105)은 확률적 경사 하강법(SGD)을 통해 역방향 전파 알고리즘을 사용하여 훈련된다. 한 구현예에서, 신경망(105)의 로직은 복수의 곱셈 누적(MAC) 유닛들, 주변기기들 및 내부 메모리 스토리지를 포함한다. 구현예에 따라, 임의의 다양한 소프트웨어 딥 러닝 프레임워크(예를 들어, Caffe, TensorFlow, Torch)는 특정 처리 장치(예를 들어, 그래픽 처리 장치(GPU))에서 신경망(105)을 훈련하는 데 사용된다.
신경망(105)은 구현예에 따라 변하는 다양한 상이한 애플리케이션들에서 이용된다. 예를 들어, 한 구현예에서, 신경망(105)은 비디오 프레임을 분석하여 비디오 프레임에 대한 하나 이상의 라벨 확률을 생성한다. 예를 들어, 잠재적인 사용 사례들은 적어도 시선 추적, 물체 인식, 포인트 클라우드 추정, 광선 추적, 라이트 필드 모델링, 깊이 추적 등을 포함한다. 시선 추적 사용 사례의 경우, 신경망(105)에 의해 생성된 확률은 학습된 패턴, 드웰, 전환 각도, 깜박임 등을 기반으로 한다. 다른 구현예들에서, 신경망(105)은 다른 유형의 사용 사례들을 위해 훈련 및 커스텀화된다.
일반적으로 말하자면, 신경망 구현예들은 두 가지 넓은 유형의 희소성을 나타낸다. 첫 번째 희소성은 네트워크들을 푸루닝(pruning)함으로써 발생되는 가중치의 정적 희소성이다. 두 번째 희소성은 활성화에 있어서의 동적 희소성과 훈련에 있어서의 오류이다. 활성화에 있어서의 희소성은 음의 입력들을 제로화하는 함수인 정류된 선형 유닛(Rectified Linear Unit; ReLU)과 같은 활성화 함수의 존재로 인해 발생된다. 이와는 대조적으로, 오류에 있어서의 희소성은 ReLU와 같은 활성화 함수의 음의 입력들 및 최대 풀링 계층들(Max Pooling layers)의 비-최대 입력들에 대해 0이 다시 전파될 수 있으므로 활성화 함수와 최대 풀링 계층들 둘 다의 존재로 인해 발생한다. 신경망(105)에 의해 처리되는 데이터 구조들에 존재하는 정적 및 동적 희소성을 이용하기 위해, 인스트럭션 제품군 및 관련 마이크로 아키텍처 확장이 본 개시에 도입된다. 인스트럭션 제품군 및 관련 마이크로 아키텍처 확장은 신경망(105)에 대한 성능이 개선되도록 하고 전력 소모가 감소되도록 한다.
프로세서(들)(110)는 임의 개수 및 유형의 처리 장치들(예를 들어, 중앙 처리 장치(CPU), 그래픽 처리 장치(GPU), 디지털 신호 프로세서(DSP), 필드 프로그래밍 가능 게이트 어레이(FPGA), 애플리케이션별 집적 회로(ASIC))를 나타낸다. 한 구현예에서, 신경망(105)과 관련된 처리 중 일부는 프로세서(들)(110)에 의해 수행된다. 추가로, 신경망(105)은 임의의 이러한 유형의 처리 장치들 및/또는 다른 유형의 처리 요소들을 사용하여 구현된다. 메모리 서브시스템(130)은 임의 개수 및 유형의 메모리 장치들을 나타낸다. 예를 들어, 메모리 서브시스템(130)의 메모리 유형은 고대역 메모리(HBM), 비휘발성 메모리(NVM), 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), NAND 플래시 메모리, NOR 플래시 메모리, 강유전체 랜덤 액세스 메모리(FeRAM) 등을 포함할 수 있다. 메모리 서브시스템(130)은 신경망(105) 및 프로세서(들)(110)에 의해 액세스될 수 있다. I/O 인터페이스들(120)은 임의 개수 및 유형의 I/O 인터페이스들(예를 들어, 주변 컴포넌트 인터커넥트(PCI) 버스, 확장 PCI(PCI-X), PCIE(PCI Express) 버스, 기가바이트 이더넷(GBE) 버스, 범용 직렬 버스(USB))을 나타낸다. 다양한 유형의 주변 장치들은 I/O 인터페이스들(120)에 결합될 수 있다. 이러한 주변 장치들은 (이에 제한되는 것은 아니나) 디스플레이, 키보드, 마이크, 프린터, 스캐너, 조이스틱 또는 다른 유형의 게임 컨트롤러, 매체 기록 장치, 외부 저장 장치, 네트워크 인터페이스 카드 등을 포함한다.
다양한 실시예들에서, 컴퓨팅 시스템(100)은 컴퓨터, 랩탑, 모바일 장치, 게임 콘솔, 서버, 스트리밍 장치, 웨어러블 장치 또는 임의의 다양한 다른 유형의 컴퓨팅 시스템들 또는 장치들일 수 있다. 컴퓨팅 시스템(100)의 컴포넌트들의 개수는 구현예마다 다를 수 있다는 점에 유의한다. 예를 들어, 다른 구현예들에서는 도 1에 도시된 개수보다 더 많거나 더 적은 각 컴포넌트가 있다. 또한 다른 구현예들에서, 컴퓨팅 시스템(100)은 도 1에 도시되지 않은 다른 컴포넌트들을 포함한다는 점에 유의한다. 추가로, 다른 구현예들에서, 컴퓨팅 시스템(100)은 도 1에 도시된 것과 다른 방식들로 구조화될 수 있다.
이제 도 2를 참조하면, 컴퓨팅 시스템(200)의 또 다른 구현예의 블록도가 도시된다. 한 구현예에서, 시스템(200)은 GPU(205), 시스템 메모리(225) 및 로컬 메모리(230)를 포함한다. 한 구현예에서, (도 1의) 신경망(105)은 GPU(205)에서 실행된다. 시스템(200)은 또한 도면을 불명료하게 하는 것을 피하기 위해 도시되지 않은 다른 컴포넌트들을 포함한다. GPU(205)는 적어도 커맨드 프로세서(235), 제어 로직(240), 디스패치 유닛(250), 컴퓨팅 유닛들(255A-N), 메모리 컨트롤러(220), 글로벌 데이터 공유(270), 레벨 1(L1) 캐시(265) 및 레벨 2(L2) 캐시(260)를 포함한다. 다른 구현예들에서, GPU(205)는 다른 컴포넌트들을 포함하고, 예시된 컴포넌트들 중 하나 이상을 생략하고, 단지 하나의 인스턴스가 도 2에 도시되어 있더라도 컴포넌트의 다수의 인스턴스들을 가지고/가지거나, 다른 적절한 방식들로 구성된다.
다양한 구현예들에서, 컴퓨팅 시스템(200)은 임의의 다양한 유형의 소프트웨어 애플리케이션들을 실행한다. 주어진 소프트웨어 애플리케이션 실행의 일부로서, 컴퓨팅 시스템(200)의 호스트 CPU(도시되지 않음)는 GPU(205)에서 수행될 커널들을 런칭한다. 커맨드 프로세서(235)는 호스트 CPU로부터 커널들을 수신하고 컴퓨팅 유닛들(255A-N)로 커널들을 디스패치하기 위해 디스패치 유닛(250)을 사용한다. 제어 로직(240)은 GPU(205)의 다양한 리소스들을 모니터링하고 디스패치 유닛(250)이 파면들을 컴퓨팅 유닛들(255A-N)로 디스패치하는 방법을 결정하는 것을 돕는다. 컴퓨팅 유닛들(255A-N)에서 실행되는 커널 내의 스레드들은 GPU(205) 내의 글로벌 데이터 공유(270), L1 캐시(265) 및 L2 캐시(260)에 데이터를 판독 및 기입한다. 도 2에는 도시되지 않았지만, 한 구현예에서는, 컴퓨팅 유닛들(255A-N)이 또한 하나 이상의 캐시들 및/또는 각 컴퓨팅 유닛(255A-N) 내의 로컬 메모리들을 포함한다.
이제 도 3을 참조하며, 컴퓨팅 유닛 로직(300)의 한 구현예의 블록도가 도시된다. 한 구현예에서, 컴퓨팅 유닛 로직(300)은 (도 2의) 컴퓨팅 유닛들(255A-N) 각각에 포함된다. 한 구현예에서, 로직(300)은 손실 희소 로드 유닛(lossy sparse load unit; LSLU)(305), 메모리(310), 벡터 범용 레지스터(vector general purpose register; VGPR)(315), 단일 인스트럭션, 다중 데이터(SIMD) 유닛들(320) 및 스케줄러(325)를 포함한다. LSLU(305)는 본원에서 "로드 유닛"으로도 지칭될 수 있다는 점에 유의한다. SIMD 유닛들(320)은 또한 본원에서 "처리 요소들"로 지칭될 수 있다는 점에 유의한다. 한 구현예에서, 로직(300)은 그래픽 처리 장치(GPU) 내에 포함된다. 다른 구현예에서, 로직(300)은 필드 프로그램 가능 게이트 어레이(FPGA) 내에 포함된다. 추가 구현예에서, 로직(300)은 애플리케이션별 집적 회로(ASIC) 내에 포함된다. 다른 구현예들에서, 로직(300)은 다른 유형의 처리 장치들, 컴퓨팅 장치들 및/또는 컴퓨팅 시스템들 내에 포함된다. 로직(300)은 본원에서 "제어 로직"으로도 지칭될 수 있다는 점에 유의한다.
한 구현예에서, LSLU(305)는 메모리(310)에서 VGPR(315)로 피연산자들을 로드한 다음 입력 벡터 피연산자들에 0이 아닌 값이 얼마나 많이 있는지 결정한다. 다른 구현예에서, LSLU(305)는 입력 벡터 피연산자들을 메모리(310)에서 VGPR(315)로 로드하기 전에 입력 벡터 피연산자들에 0이 아닌 값이 얼마나 많이 있는지를 결정한다. 한 구현예에서, "0이 아닌 값(non-zero value)"이라는 용어는 0과 같이 않은 값으로 정의된다는 것에 유의한다. 다른 구현예에서, "0이 아닌 값"이라는 용어는 임계값보다 큰 값 또는 임계값보다 큰 절대값을 갖는 값으로 정의된다. 예를 들어, 한 구현예에서, 임계값은 프로그래밍 가능한 작은 양의 값(예를 들어, 0.1)이다. 일부 구현예들에서, LSLU(305)는 주어진 입력 벡터 피연산자에서 0이 아닌 값들의 수가 임계 개수 미만이면 메모리(310)에서 VGPR(315)로 주어진 벡터 피연산자를 로드하지 않을 것이다. 이 임계 개수는 LSLU(305)의 마스크/임계(306)로 도시된다. 0이 아닌 값의 수를 임계 개수와 비교하는 데 사용되는 비교 로직은 LSLU(305)의 비교기(307)로 도시된다. 다른 구현예들에서, LSLU(305)는 주어진 입력 벡터 피연산자에서 0이 아닌 값의 수가 임계 개수 미만이더라도 메모리(310)에서 VGPR(315) 또는 버퍼(308)로 주어진 입력 벡터 피연산자를 로드할 것이지만, LSLU(305)는 주어진 입력 벡터 피연산자에서 0이 아닌 값의 수가 임계 개수 미만이면 VGPR(315)에서 주어진 입력 벡터 피연산자를 폐기, 무효화 및/또는 덮어쓸 것이다.
또한 로직(300)에는 SIMD 유닛들(320)에서 실행을 위한 인스트럭션들을 발행하는 스케줄러(325)가 도시되어 있다. 한 구현예에서, SIMD 유닛들(320)은 스케줄러(325)에 의해 실행을 위해 발행된 인스트럭션들의 입력 벡터 피연산자들에 대해 행렬 곱셈을 수행한다. 행렬 곱셈은 실행되는 인스트럭션의 유형에 따라 내적 또는 외적 곱 행렬 곱셈이 될 수 있다. 다른 구현예들에서, SIMD 유닛들(320)은 스케줄러(325)에 의해 실행을 위해 발행된 인스트럭션들의 입력 벡터 피연산자들에 대해 다른 유형의 연산들을 수행한다. 한 구현예에서, LSLU(305)가 주어진 인스트럭션에 대한 입력 벡터 피연산자(들)이 임계 개수 미만의 0이 아닌 값들을 갖는다고 결정하면, 스케줄러(325)는 SIMD 유닛들(320)에서 주어진 인스트럭션을 스케줄링하지 않는다. 오히려, 스케줄러(325)는 다음 인스트럭션으로 이동할 것이다. 임계 개수 미만의 0이 아닌 값들을 갖는 인스트럭션들을 스킵함으로써, SIMD 유닛들(320)에 대한 신경망 구현의 효율성이 개선된다.
이제 도 4를 참조하면, 벡터 손실 결합 희소 로드 인스트럭션을 실행하기 위한 방법(400)의 한 구현예가 도시된다. 논의를 위해, 이 구현예의 단계들 및 도 5-9의 단계들이 순차적으로 도시된다. 그러나, 설명된 방법들의 다양한 구현예들에서, 설명된 요소들 중 하나 이상은 도시된 것과 다른 순서로 동시에 수행되거나 또는 완전히 생략된다는 점에 유의한다. 다른 추가 요소들이 또한 원하는 대로 수행된다. 본원에 설명된 다양한 시스템들 또는 장치들 중 어느 것도 방법(400)을 구현하도록 구성된다.
손실 희소 로드 유닛(LSLU)는 A 및 B 입력 벡터 피연산자들 둘 다는 물로 데이터 세트의 현재 인덱스 및 데이터 세트에 대한 최대 인덱스도 로드한다(블록(405)). 다음으로, LSLU는 A 및 B 입력 벡터 피연산자들 각각에서 0이 아닌 값들의 수를 결정한다(블록(410)). 그런 다음, 각 입력 벡터 피연산자의 0이 아닌 값들의 수가 임계값 미만이고 데이터 세트의 현재 인덱스가 최대 인덱스 미만이면(조건부 블록(415), "예" 분기), LSLU는 입력 벡터 피연산자의 어드레스에 대한 포인트를 스트라이드만큼 증가시키고 LSLU는 현재 데이터 세트 인덱스를 증가시킨다(블록(420)). 블록(420) 이후, 방법(400)은 블록(410)으로 돌아간다. 입력 벡터 피연산자의 0이 아닌 값들의 수가 임계값 이상이거나 데이터 세트의 현재 인덱스가 최대 인덱스와 같으면(조건부 블록(415), "아니오" 분기), LSLU는 값들을 벡터 레지스터 파일의 입력 벡터 피연산자 A 및 B 값들에 반환한다(블록(425)). 블록(425) 이후, 방법(400)은 종료된다. 한 구현예에서, 벡터 손실 결합 희소 로드 인스트럭션은 피연산자들에 대해 곱셈 누적(MAC) 연산을 수행하기 전에 A와 B에 대해 각각 하나의 피연산자를 반복적으로 로드하는 블록 크기가 1인 가장 단순한 내부 곱 및 외부 곱 구현을 대상으로 한다.
이제 도 5를 참조하면, 벡터 손실 단일 희소 로드 인스트럭션을 실행하기 위한 방법(500)의 한 구현예가 도시된다. LSLU는 지정된 어드레스에 대한 입력 벡터 피연산자, 피연산자 식별자(ID) 및 N 값에 대한 로드 인스트럭션을 수신하며, N 값은 입력 벡터 피연산자들의 총 수를 지정한다(블록(505)). 다음으로, LSLU는 "i" 변수를 0으로 설정하고(블록(510)), LSLU는 "i" 변수가 파면의 총 스레드 수 미만인지를 확인한다(조건부 블록(515)). "i" 변수가 총 스레드 수 미만이면(조건부 블록(515), "예" 분기), LSLU는 입력 벡터 피연산자를 메모리에서 벡터 레지스터 파일로 로드하고 LSLU는 입력 벡터 피연산자에서 0이 아닌 값들의 수를 카운팅하며 "accNZCount" 어레이에 그 개수를 저장한다(블록(520)). 다음으로, LSLU는 "i" 변수를 증가(블록(525))시킨 다음, 방법(500)은 조건부 블록(515)으로 돌아간다. "i" 변수가 스레드의 수와 같으면(조건부 블록(515), "아니오" 분기), LSLU는 벡터 "v"의 값을 반환한다(블록(530)). 블록(530) 이후, 방법(500)은 종료된다. "accNZCount” 어레이를 처리하기 위한 한 가지 구현예가 도 6과 관련된 논의에서 하기에 설명된다.
이제 도 6을 참조하면, 누적된 0이 아닌 카운트(즉, accNZCount) 어레이를 처리하기 위한 방법(600)의 한 구현예가 도시된다. 한 구현예에서, 방법(600)은 방법(500)에서 설명된 벡터 손실 단일 희소 로드 인스트럭션의 실행 후에 실행된다. LSLU는 accNZCount 어레이를 수신한다(블록(605)). 다음으로, "i" 변수는 0으로 초기화된다(블록(610)). 그런 다음, LSLU는 "i" 변수가 파면의 총 스레드 수 미만인지를 결정한다(조건부 블록(615)).
"i" 변수가 파면의 총 스레드 수 미만이면(조건부 블록(615), "예" 분기), LSLU는 두 입력 피연산자들 각각에서 0이 아닌 값들의 수가 임계값(즉, NZThres) 미만인지를 결정한다(조건부 블록(620)). 두 입력 피연산자들 각각에 대한 0이 아닌 개수가 임계값 미만이면(조건부 블록(620), "예" 분기), 스레드 중복 표시기가 현재 인덱스 "i"에 대해 1로 설정된다(블록(625)). 그렇지 않고, 두 입력 피연산자들 중 어느 하나에 대한 0이 아닌 개수가 임계값 이상이면(조건부 블록(620), "아니오" 분기), 스레드 중복 표시기가 현재 인덱스 "i"에 대해 0으로 설정된다(블록(630)). 블록(625 및 630) 이후, 현재 인덱스 "i"가 증가(블록(635))된 다음, 방법(600)은 조건부 블록(615)으로 돌아간다.
"i" 변수가 스레드의 총 수와 같으면(조건부 블록(615), "아니오" 분기), LSLU는 복수의 스레드 중복 표시기들에 대해 비트마다 AND 연산을 수행하여 전체 파면이 중복되는지 여부를 결정한다(블록(640)). 그런 다음, LSLU는 전체 파면이 중복되는지를 나타내는 중복 파면 값을 반환한다(블록(645)). 블록(645) 이후, 방법(600)은 종료된다.
이제 도 7을 참조하면, 벡터 손실 희소 로드 및 스킵 인스트럭션을 실행하기 위한 방법(700)의 한 구현예가 도시된다. LSLU는 프로그램 코드에서 벡터 손실 희소 로드 및 스킵 인스트럭션을 검출하고 인스트럭션의 서로 다른 인코딩된 필드들을 검색한다(블록(705)). 한 구현예에서, 인코딩된 필드들은 어드레스, N(입력 벡터 피연산자의 총 수), r_offset1, r_offset2 및 r_base를 포함하며, 이는 주어진 0 값에 대한 중복 인덱스들을 계산하는 데 사용된다. 다른 구현예들에서, 벡터 손실 희소 로드 및 스킵 인스트럭션은 다른 개수 및/또는 유형의 인코딩된 필드들을 포함한다.
다음으로, LSLU는 "i" 변수를 0과 동일하게 설정한다(블록(710)). 그런 다음, LSLU는 "i" 변수가 "N"의 값 미만인지를 결정한다(조건부 블록(715)). "i" 변수가 "N"의 값 미만이면(조건부 블록(715), "예" 분기), LSLU는 데이터 세트의 다음 값 그룹을 메모리에서 벡터 레지스터 파일로 로드한 다음, 로드된 값 그룹에서 0이 아닌 값들의 수의 카운트를 생성한다(블록(720)). 이 0이 아닌 값들의 수는 도 7에서 “NZCount[i]”로 표현된다.
0이 아닌 값들의 수가 임계값(즉, NZThres) 미만이면(조건부 블록(725), "예" 분기), LSLU는 중복된 곱셈 누적(MAC) 인덱스(즉, ridx)를 생성하고 스킵 큐에 대한 중복 MAC 인덱스들을 기입한다(블록(730)). 블록(730) 이후, LSLU는 "i" 변수를 증가(블록(735))시킨 다음, 방법(700)은 조건부 블록(715)으로 돌아간다. 0이 아닌 값들의 수가 임계값 이상이면(조건부 블록(725), "아니오" 분기), LSLU는 "i" 변수를 증가(블록(735))시킨 다음, 방법(700)은 조건부 블록(715)으로 돌아간다. "i" 변수가 "N"의 값과 같으면(조건부 블록(715), "아니오" 분기), LSLU는 값 "v"의 그룹을 반환한다(블록(740)). 블록(740) 이후, 방법(700)은 종료된다. 스케줄러는 SIMD 유닛들에 실행을 위한 인스트럭션을 발행하기 전에 스킵 큐를 쿼리하고, 인스트럭션에 대한 인덱스가 스킵 큐에 저장되면, 스케줄러는 다음 인스트럭션으로 이동한다는 점에 유의한다.
이제 도 8을 참조하면, 손실 희소 로드 인스트럭션을 실행하기 위한 방법(800)의 한 구현예가 도시된다. 손실 희소 로드 유닛은 실행을 위해 손실 희소 로드 인스트럭션을 수신한다(블록(805)). 손실 희소 로드 유닛은 수신된 손실 희소 로드 인스트럭션의 하나 이상의 입력 벡터 피연산자들에 0이 아닌 값들이 얼마나 많이 포함되는지를 결정한다(블록(810)). 0이 아닌 값들의 수가 임계값 미만이면(조건부 블록(815), "예" 분기), 손실 희소 로드 유닛은 하나 이상의 입력 벡터 피연산자들에 대한 인스트럭션이 실행을 위해 발행되는 것을 방지한다(블록(820)). 즉, 손실 희소 로드 유닛은 블록(820)에서 하나 이상의 입력 벡터 피연산자들의 처리가 스킵되도록 한다. 한 구현예에서, 임계값은 사용자 구성 가능하다. 한 구현예에서, 사용자는 기본 신경망의 오류에 대한 허용 오차를 기반으로 임계값을 설정한다. 0이 아닌 값들의 수가 임계값 이상이면(조건부 블록(815), "아니오" 분기), 손실 희소 로드 유닛은 하나 이상의 입력 벡터 피연산자들에 대한 인스트럭션이 실행을 위해 발행되도록 한다(블록(825)). 블록(820 및 825) 이후, 방법(800)은 종료된다. 손실 희소 로드 유닛에 의해 수신된 각 손실 희소 로드 인스트럭션에 대한 방법(800)이 반복된다는 점에 유의한다.
이제 도 9를 참조하면, 신경망을 구현하기 위한 방법(900)의 한 구현예가 도시된다. 컴퓨팅 시스템은 신경망을 구현하기 위한 프로그램 코드를 수신한다(블록(905)). 프로그램 코드는 신경망을 구현하기 위한 복수의 인스트럭션들을 포함한다. 한 구현예에서, 컴퓨팅 시스템은 복수의 컴퓨팅 유닛들을 포함하고, 각 컴퓨팅 유닛은 손실 희소로드 유닛을 포함한다.
시스템은 복수의 컴퓨팅 유닛들 상의 프로그램 코드로부터 하나 이상의 제1 인스트럭션들을 실행한다(블록(910)). 또한, 시스템은 복수의 컴퓨팅 유닛들 상의 프로그램 코드로부터 하나 이상의 제2 인스트럭션들의 실행을 스킵한다(블록(915)). 시스템은 하나 이상의 제1 인스트럭션들을 실행하고 하나 이상의 제2 인스트럭션들의 실행을 스킵함으로써 신경망을 구현한다(블록(920)).
그런 다음, 시스템은 신경망을 사용하여 제1 데이터 세트의 분류를 생성한다(블록(925)). 블록(925) 이후, 방법(900)은 종료된다. 한 구현예에서, 제1 데이터 세트는 이미지이고, 분류는 이미지가 속한 특정 카테고리를 식별한다. 다른 구현예에서, 제1 데이터 세트는 비디오이고, 분류는 비디오를 특정 카테고리에 할당한다. 다른 구현예들에서, 제1 데이터 세트는 다른 유형의 데이터를 포함한다. 방법(900)은 여러 번 구현되어 임의 개수의 데이터 세트들의 분류를 생성할 수 있다.
이제 도 10을 참조하면, 내적 및 외적 행렬 곱셈 연산들을 구현하기 위한 의사 코드의 예들이 도시된다. GPU 및 다른 유형의 처리 장치들에서 고밀도 행렬 곱셈을 실현하기 위한 다양한 일반 행렬 곱셈(General Matrix Multiplication; GEMM) 루틴들이 있다. 주어진 시나리오에서 최적의 루틴은 피연산자 행렬의 크기, 로컬 및 글로벌 메모리의 크기뿐만 아니라 계산 및 압축을 위해 이용 가능한 가속기 특징들에 의해 결정된다. GEMM 알고리즘들은 이들이 내적 곱을 사용하는지 외적 곱을 사용하는지에 따라 크게 구별될 수 있다. 내적 곱 행렬 곱셈 연산을 구현하기 위한 일 예로서 의사 코드(1005)가 도 10의 상단에 도시되어 있다. matrixMul 함수는 M x K 행렬 A와 K x P 행렬 B간에 고밀도 행렬 곱셈을 수행하여 M x P 행렬 C를 산출한다. 의사 코드(1005)의 목적을 위해 행렬 A는 행 우선 포맷(row major format)으로 저장되고 행렬 B는 열 우선 포맷(column major format)으로 저장된다고 가정한다. matrixMul 함수는 innerProd 함수를 반복적으로 호출하여 A의 i 번째 행과 B의 j 번째 열 사이에 내적 곱을 수행하여 각 요소 C[i][j]를 계산한다. DNN 구현예에서, 행렬 A는 이전 계층의 출력 활성화에 해당하고, 행렬 B는 현재 계층의 가중치에 해당하고, 행렬 C는 현재 계층의 출력 활성화에 해당한다.
외적 곱 행렬 곱셈 연산을 구현하기 위한 일 예로서 의사 코드(1010)가 도 10의 한단에 도시되어 있다. matrixMul 함수는 outerProd 함수를 반복적으로 호출하여 행렬 C의 NxN 값들 블록을 계산한다. outerProd 함수는 A[i:i+N][:]의 N개 크기 열과 B[:][j:j+N]의 N개 크기 행 사이의 외부 곱을 합산한다는 사실에서 그 이름이 유래된다. 행렬 A와 B의 희소성은 innerProd 및 outerProd 함수들에서 수행되는 곱셈 누적(MAC) 연산들이 중복되도록 한다. 이 두 함수들은 일반적으로 SIMD 유닛 당 GPU들에서 병렬화된다. SIMD 유닛에서 중복 MAC들을 사용하여 개별 스레드드을 마스킹하기만 하면 전력과 에너지를 절약할 수 있지만, 실행 시간을 절약하려면 전체 중복 파면이 스킵되어야 한다. 따라서, 한 구현예에서, 파면의 모든 스레드들이 A 또는 B로부터 피연산자 값들을 0으로 로드하면 전체 파편이 제거된다. 다른 구현예에서, DNN 애플리케이션들의 복원력은 스레드들에 의해 로드된 값들이 전부는 아니지만 대부분이 0인 경우 중복되는 파면을 식별하여 중복 파면들이 발생할 가능성을 높이도록 활용된다. 한 구현예에서, 파면이 중복으로 특성화되기 위해 0이 되어야 하는 값들의 수는 사용자가 구성할 수 있다. 이 구현예에서, 최종 애플리케이션은 결과에서 허용 가능한 저하로 지속될 수 있는 0이 아닌 수(즉, 손실의 양)를 지시한다.
이제 도 11을 참조하면, 벡터 손실 결합 희소 로드 인스트럭션을 구현하기 위한 의사 코드(1105)의 예가 도시된다. 의사 코드(1105)는 벡터 손실 결합 희소 로드(또는 V_LCSLD) 인스트럭션을 사용하여 내적 곱 행렬 곱셈을 구현하기 위한 하나의 예로서 도시된다. 다른 구현예들에서, 의사 코드(1105)는 다른 유형 및/또는 배열의 인스트럭션들을 포함할 수 있다. 한 구현예에서, V_LCSLD 인스트럭션은 주로 피연산자들에 대해 MAC 연산을 수행하기 전에 행렬 A와 B에 대해 각각 하나의 피연산자를 반복적으로 로드하는 블록 크기가 1인 가장 단순한 내부 곱 및 외부 곱 구현을 대상으로 한다. V_LCSLD 인스트럭션은 메모리에서 두 피연산자들을 결합된 형식으로 판독하고 피연산자들 각각에서 0이 아닌 수가 제공된 손실 임계값(thres)을 초과하는 경우에만 값들을 벡터 레지스터 파일(VGPR)로 반환함으로써 동작한다. V_LCSLD 인스트럭션은 현재 로드들이 대부분의 스레드에서 0 값들을 반환하는 경우 다음 MAC에 대한 피연산자 로드들로 자동으로 진행된다.
한 구현예에서, innerProd 함수는 vA 및 vB 값들에 대해 MAC 연산을 수행하기 전에 V_LCSLD 함수를 반복적으로 호출하여 vA 및 vB 값들을 로드한다. V_LCSLD 함수는 파면의 모든 스레드들에 대한 피연산자 A와 B를 각각 벡터 vA와 vB로 각각 로드한다. 다음으로, V_LCSLD 함수는 vA 및 vB에서 0이 아닌 값들의 수를 카운팅한다. 루프의 종료 조건이 충족되지 않으면(즉, 0이 아닌 수가 NZThres 내에 있고 현재 루프 인덱스가 maxIdx 미만이면), V_LCSLD 함수는 다음 피연산자 값들을 로드하고 인덱스(즉, idx)를 증가시킨다. 종료 시, vA 및 vB의 현재 값들이 현재 idx 값과 함께 반환되어 최종 innerProd 함수의 올바른 실행을 보장한다.
이제 도 12를 참조하면, 벡터 손실 결합된 희소 로드 인스트럭션을 구현하기 위한 로직(1200)의 한 구현예의 블록도. 한 구현예에서, 로직(1200)은 각각 적어도 캐시(1205), 제로 체크 로직(1210), 다음 어드레스 생성기(1215), 및 입력 벡터 피연산자들 A 및 B에 대한 0이 아닌 값 카운팅 로직(1220 및 1225)을 포함한다. 벡터 A 및 B 피연산자들에서 0이 아닌 값들의 수는 각각 로직(1220 및 1225)에 의해 카운팅된다. 0이 아닌 값들의 수는 A 및 B 피연산자들에 대한 임계값과 비교되며, 비교 출력은 OR 게이트로 공급된다. OR 게이트의 출력은 입력 벡터 피연산자들이 중복되는지 여부를 나타내는 "IsRedundant" 신호이다. 다른 구현예들에서, 로직(1200)은 다른 구성 요소들을 포함할 수 있고/있으며 다른 적절한 방식들로 구성될 수 있다.
이제 도 13을 참조하면, 벡터 손실 단일 희소 로드 인스트럭션을 구현하기 위한 의사 코드(1305)의 예가 도시된다. 의사 코드(1305)는 벡터 손실 단일 희소 로드(또는 V_LSSLD) 인스트럭션을 사용하여 외적 곱 행렬 곱셈을 구현하기 위한 하나의 예로서 도시된다. 다른 구현예들에서, 의사 코드(1305)는 다른 유형 및/또는 배열의 인스트럭션들을 포함할 수 있다. V_LSSLD 인스트럭션은 블록 크기가 N > 1인 외적 곱 구현을 대상으로 한다. V_LSSLD 인스트럭션은 다수의 피연산자 로드들의 블록 다음에 중복 MAC들의 블록을 성공적으로 스킵한다. V_LSSLD 인스트럭션은 VGPR에 로드된 값들 중 0의 개수를 카운팅하고 피연산자에 대한 전체 로드 블록들에 걸쳐 카운트를 누적한다. 로드들의 종료 시 S_Z_CHECK_BRANCH 인스트럭션은 누적된 값을 제공된 손실 임계값과 비교한다. 비교는 실행이 MAC들로 흘러가는지 또는 현재 MAC들의 블록이 중복된 경우 다음 로드들의 블록으로 이동하는지 여부를 결정한다. 어레이 accNZCount는 로드들의 블록에서 서로 다른 스레드들에 의해 로드된 피연산자들 각각에 대해 0이 아닌 수를 누적한다.
이제 도 14를 참조하면, 벡터 손실 희소 로드 및 스킵 인스트럭션을 구현하기 위한 의사 코드(1405)의 한 예가 도시된다. 의사 코드(1405)는 벡터 손실 단일 희소 로드 및 스킵(또는 V_LSLS) 인스트럭션을 사용하여 외적 곱 행렬 곱셈을 구현하기 위한 하나의 예로서 도시된다. 다른 구현예들에서, 의사 코드(1405)는 다른 유형 및/또는 배열의 인스트럭션들을 포함할 수 있다. V_LSLS 인스트럭션은 분산된 희소성이 있는 행렬들에서 동작되는 차단된 외부 곱 구현을 대상으로 한다. V_LSLS 인스트럭션은 GPU가 피연산자 로드들의 블록을 뒤따르는 MAC들의 블록에서 개별 중복 MAC들 (파면 레벨에서)을 스킵하도록 한다. V_LSLS 인스트럭션들은 중복 MAC 인덱스들의 목록이 있는 skipQueue에 기입된다. 현재 인스트럭션이 중복되는지 확인하기 위해 인스트럭션을 페시하거나 디스패치하기 전에 스케줄러에 의해 skipQueue의 헤드가 판독된다. 현재 인스트럭션이 중복되면, 스케줄러는 큐로부터 현재 인스트럭션을 제거한 후 다음 인스트럭션을 페치 및 디스패치하기 위해 이동된다. 그렇지 않으면, 현재 지시된 것은 정상적으로 실행된다.
한 구현예에서, V_LSLS 인스트럭션은 VGPR들에 로드된 값들에서 0이 아닌 수를 카운팅한다. V_LSLS 인스트럭션은 로드된 벡터에서 0이 아닌 수가 임계값 미만일 때마다 중복되는 인스트럭션들을 결정한다. 이 결정은 skipQueue로 전달된다. v_lsls 인스트럭션의 인수들 r_size, r_offset1, r_offset2 및 r_base은 V_LSLS 인스트럭션이 skipQueue에 저장할 중복 MAC들의 프로그램 카운터 오프셋들을 자동으로 생성하도록 한다. 한 구현예에서, 인수들 r_size, r_offset1, r_offset2 및 r_base은 GEMM 코드의 구조에 기초한 컴파일러에 의해 프로그래밍된다. 한 구현예에서, skipQueue는 LSLU의 버퍼들에서 구현된다. skipQueue의 크기는 스킵될 수 있는 최대 MAC들의 수를 결정한다. 따라서, 한 구현예에서, skipQueue는 외적 곱 구현에서 발생될 것으로 예상되는 최대 블록 크기를 수용하도록 사이징된다.
한 구현예에서, DNN은 낮은 정밀도 피연산자를 사용한다. 낮은 정밀도의 피연산자를 사용하면 파면의 스레드가 더 많은 피연산자 값들을 로드하고 단일 인스트럭션에서 더 많은 MAC들을 수행할 수 있다. 예를 들어, 정밀도를 32 비트에서 8 비트로 줄이면 스레드가 로드 인스트럭션 당 4배의 매트릭스 값들을 로드하고 MAC 인스트럭션 당 단일 값 대신 이러한 값들 중 4개에 대해 동작할 수 있다. 모든 값들이 0이어야 하는 경우, MAC은 동작되는 모든 낮은 정밀도 값들이 0일 때만 중복되지만 이러한 경우가 발생할 확률은 상당히 낮을 수 있다. 따라서, 한 구현예에서, 새로운 임계값 "intraMAC"이 도입되어 MAC 동작의 값이 중복으로 특성화되는지 여부를 결정한다. 새로운 임계값 "intraMAC"은 각 스레드의 단일 MAC 인스트럭션 내에 일부 손실이 있을 수 있으며, 0이 아닌 낮은 정밀도 값들의 수가 intraMAC 미만이면 MAC 인스트럭션은 스킵될 수 있다. 본원에 소개된 희소 로드 인스트럭션들의 제품군은 정밀도가 낮은 구현예들로 쉽게 확장될 수 있다.
다양한 구현예들에서, 소프트웨어 애플리케이션의 프로그램 인스트럭션들은 본원에 설명된 방법들 및/또는 메커니즘들을 구현하는 데 사용된다. 예를 들어, 범용 또는 특수 목적 프로세서에 의해 실행 가능한 프로그램 인스트럭션들이 고려된다. 다양한 구현예들에서, 이러한 프로그램 인스트럭션들은 하이 레벨 프로그래밍 언어에 의해 표현된다. 다른 구현예들에서, 프로그램 인스트럭션들은 하이 레벨 프로그래밍 언어에서 이진, 중간 또는 다른 형태로 컴파일된다. 대안으로, 하드웨어의 행동 또는 설계를 설명하는 프로그램 인스트럭션들이 작성된다. 이러한 프로그램 인스트럭션들은 C와 같은 하이 레벨 프로그래밍 언어에 의해 표현된다. 대안으로, 베릴로그(Verilog)와 같은 하드웨어 설계 언어(HDL)가 사용된다. 다양한 구현예들에서, 프로그램 인스트럭션들은 임의의 다양한 비일시적 컴퓨터 판독 가능 저장 매체에 저장된다. 저장 매체는 프로그램 실행을 위해 컴퓨팅 시스템에 프로그램 인스트럭션들을 제공하기 위해 사용하는 동안 컴퓨터 시스템에 의해 액세스 가능하다. 일반적으로 말하면, 이러한 컴퓨팅 시스템은 프로그램 인스트럭션들을 실행하도록 구성된 적어도 하나 이상의 메모리들 및 하나 이상의 프로세서들을 포함한다.
상기 설명된 실시예들은 단지 구현예들의 비제한적 예들에 불과하다는 점을 강조해야 한다. 상기 개시가 완전히 이해되면 많은 변형들 및 수정들이 본 기술분야에서 숙련된 자들에게 명백해질 것이다. 다음의 청구범위는 모든 이러한 변형들 및 수정들을 포함하는 것으로 해석되는 것으로 의도된다.

Claims (20)

  1. 시스템에 있어서,
    복수의 처리 요소들; 및
    제어 로직을 포함하며,
    상기 제어 로직은,
    하나 이상의 입력 벡터 피연산자들에 얼마나 많은 0이 아닌 값들이 포함되어 있는지를 결정하고;
    상기 하나 이상의 입력 벡터 피연산자들에서 0이 아닌 값들의 수가 제1 임계값 이상이라고 결정하는 것에 응답하여 상기 하나 이상의 입력 벡터 피연산자들이 상기 복수의 처리 요소들에 의해 처리되도록 하고;
    상기 0이 아닌 값들의 수가 상기 제1 임계값 미만이라고 결정하는 것에 응답하여 상기 하나 이상의 입력 벡터 피연산자들의 처리가 상기 복수의 처리 요소들에 의해 스킵되도록 구성되며,
    상기 시스템은 하나 이상의 제1 입력 벡터 피연산자들을 처리하고 하나 이상의 제2 입력 벡터 피연산자들의 처리를 스킵함으로써 주어진 애플리케이션을 실행하도록 구성되는, 시스템.
  2. 제1항에 있어서, 상기 주어진 애플리케이션은 제1 데이터 세트의 분류를 생성하기 위한 신경망 구현이고, 상기 시스템은 상기 신경망의 하나 이상의 계층들에 대해 상기 하나 이상의 제2 입력 벡터 피연산자들과 관련된 상기 처리를 스킵함으로써 신경망을 구현할 때 전력 소모 및 실행 시간 중 적어도 하나를 줄이도록 구성되는, 시스템.
  3. 제1항에 있어서, 0이 아닌 값은 제2 임계값보다 큰 절대값인, 시스템.
  4. 제3항에 있어서, 상기 제1 임계값 및 상기 제2 임계값은 상기 신경망의 오류 허용 오차에 기초하여 프로그램 가능한, 시스템.
  5. 제3항에 있어서, 상기 시스템은 상기 신경망의 오류 허용 오차에 기반한 값들로 상기 제1 임계값 및 상기 제2 임계값을 설정하도록 구성되는, 시스템.
  6. 제1항에 있어서, 상기 복수의 처리 요소들에 의해 수행된 상기 처리는 제1 입력 벡터 피연산자 세트에 제2 입력 벡터 피연산자 세트를 곱하는 행렬 곱셈 연산을 포함하는, 시스템.
  7. 제1항에 있어서, 상기 제어 로직은 상기 주어진 입력 벡터 피연산자에서 상기 0이 아닌 값들의 수가 상기 제1 임계값 미만이라고 결정하는 것에 응답하여 스킵 큐에서 주어진 입력 벡터 피연산자를 처리하는 인스트럭션의 프로그램 카운터 오프셋을 저장하도록 더 구성되는, 시스템.
  8. 방법에 있어서,
    복수의 처리 요소들에 결합된 제어 로직에 의해, 하나 이상의 입력 벡터 피연산자들에 얼마나 많은 0이 아닌 값들이 포함되는지를 결정하는 단계;
    상기 하나 이상의 입력 벡터 피연산자들에서 0이 아닌 값들의 수가 제1 임계값 이상이라고 결정하는 것에 응답하여 상기 하나 이상의 입력 벡터 피연산자들이 상기 복수의 처리 요소들에 의해 처리되도록 하는 단계;
    상기 0이 아닌 값들의 수가 상기 제1 임계값 미만이라고 결정하는 것에 응답하여 상기 하나 이상의 입력 벡터 피연산자들의 처리가 상기 복수의 처리 요소들에 의해 스킵되도록 하는 단계; 및
    하나 이상의 제1 입력 벡터 피연산자들을 처리하고 하나 이상의 제2 입력 벡터 피연산자들의 처리를 스킵함으로써 주어진 애플리케이션을 실행하는 단계를 포함하는, 방법.
  9. 제8항에 있어서, 상기 주어진 애플리케이션은 제1 데이터 세트의 분류를 생성하기 위한 신경망 구현이고, 상기 방법은 상기 신경망의 하나 이상의 계층들에 대해 상기 하나 이상의 제2 입력 벡터 피연산자들과 관련된 상기 처리를 스킵함으로써 신경망을 구현할 때 전력 소모 및 실행 시간 중 적어도 하나를 줄이는 단계를 더 포함하는, 방법.
  10. 제8항에 있어서, 0이 아닌 값은 제2 임계값보다 큰 절대값인, 방법.
  11. 제10항에 있어서, 상기 제1 임계값 및 상기 제2 임계값은 상기 신경망의 오류 허용 오차에 기초하여 프로그램 가능한, 방법.
  12. 제10항에 있어서, 상기 신경망의 오류 허용 오차에 기반한 값들로 상기 제1 임계값 및 상기 제2 임계값을 설정하는 단계를 더 포함하는, 방법.
  13. 제8항에 있어서, 상기 복수의 처리 요소들에 의해 수행된 상기 처리는 제1 입력 벡터 피연산자 세트에 제2 입력 벡터 피연산자 세트를 곱하는 행렬 곱셈 연산을 포함하는, 방법.
  14. 제8항에 있어서, 상기 주어진 입력 벡터 피연산자에서 상기 0이 아닌 값들의 수가 상기 제1 임계값 미만이라고 결정하는 것에 응답하여 스킵 큐에서 주어진 입력 벡터 피연산자를 처리하는 인스트럭션의 프로그램 카운터 오프셋을 저장하는 단계를 더 포함하는, 방법.
  15. 장치에 있어서,
    복수의 처리 요소들;
    스케줄러; 및
    손실 희소 로드 유닛을 포함하며,
    상기 손실 희소 로드 유닛은,
    하나 이상의 입력 벡터 피연산자들에 얼마나 많은 0이 아닌 값들이 포함되어 있는지를 결정하고;
    상기 하나 이상의 입력 벡터 피연산자들에서 0이 아닌 값들의 수가 제1 임계값 이상이라는 결정에 응답하여 상기 하나 이상의 입력 벡터 피연산자들이 상기 복수의 처리 요소들에 의해 처리되도록 하고;
    상기 0이 아닌 값들의 수가 상기 제1 임계값 미만이라는 결정이라고 결정하는 것에 응답하여 상기 하나 이상의 입력 벡터 피연산자들의 처리가 상기 복수의 처리 요소들에 의해 스킵되도록 구성되며,
    상기 장치는 하나 이상의 제1 입력 벡터 피연산자들을 처리하고 하나 이상의 제2 입력 벡터 피연산자들의 처리를 스킵함으로써 주어진 애플리케이션을 실행하도록 구성되는, 장치.
  16. 제15항에 있어서, 상기 주어진 애플리케이션은 제1 데이터 세트의 분류를 생성하기 위한 신경망 구현이고, 상기 장치는 상기 신경망의 하나 이상의 계층들에 대해 상기 하나 이상의 제2 입력 벡터 피연산자들과 관련된 상기 처리를 스킵함으로써 신경망을 구현할 때 전력 소모 및 실행 시간 중 적어도 하나를 줄이도록 구성되는, 장치.
  17. 제15항에 있어서, 0이 아닌 값은 제2 임계값보다 큰 절대값인, 장치.
  18. 제17항에 있어서, 상기 제1 임계값 및 상기 제2 임계값은 상기 신경망의 오류 허용 오차에 기초하여 프로그램 가능한, 장치.
  19. 제17항에 있어서, 상기 장치는 상기 신경망의 오류 허용 오차에 기반한 값들로 상기 제1 임계값 및 상기 제2 임계값을 설정하도록 구성되는, 장치.
  20. 제15항에 있어서, 상기 복수의 처리 요소들에 의해 수행된 상기 처리는 제1 입력 벡터 피연산자 세트에 제2 입력 벡터 피연산자 세트를 곱하는 행렬 곱셈 연산을 포함하는, 장치.
KR1020217018458A 2018-11-19 2019-06-26 손실 희소 로드 simd 인스트럭션 제품군 KR102598174B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/194,981 2018-11-19
US16/194,981 US11663001B2 (en) 2018-11-19 2018-11-19 Family of lossy sparse load SIMD instructions
PCT/US2019/039264 WO2020106321A1 (en) 2018-11-19 2019-06-26 Family of lossy sparse load simd instructions

Publications (2)

Publication Number Publication Date
KR20210090260A true KR20210090260A (ko) 2021-07-19
KR102598174B1 KR102598174B1 (ko) 2023-11-06

Family

ID=67297336

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217018458A KR102598174B1 (ko) 2018-11-19 2019-06-26 손실 희소 로드 simd 인스트럭션 제품군

Country Status (6)

Country Link
US (1) US11663001B2 (ko)
EP (1) EP3884379A1 (ko)
JP (1) JP7194824B2 (ko)
KR (1) KR102598174B1 (ko)
CN (1) CN113168324A (ko)
WO (1) WO2020106321A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10503507B2 (en) * 2017-08-31 2019-12-10 Nvidia Corporation Inline data inspection for workload simplification
JP7189000B2 (ja) * 2018-12-12 2022-12-13 日立Astemo株式会社 情報処理装置、車載制御装置、車両制御システム
US20230053294A1 (en) * 2021-08-13 2023-02-16 Taiwan Semiconductor Manufacturing Co., Ltd. Bitwise product-sum accumulations with skip logic
US20240004656A1 (en) * 2022-06-29 2024-01-04 Advanced Micro Devices, Inc. Accelerating predicated instruction execution in vector processors

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180300605A1 (en) * 2017-04-17 2018-10-18 Microsoft Technology Licensing, Llc Reducing power consumption in a neural network processor by skipping processing operations

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10240522A (ja) * 1997-02-26 1998-09-11 Matsushita Electric Works Ltd 演算装置
US7159099B2 (en) * 2002-06-28 2007-01-02 Motorola, Inc. Streaming vector processor with reconfigurable interconnection switch
US10528864B2 (en) * 2016-08-11 2020-01-07 Nvidia Corporation Sparse convolutional neural network accelerator
US10832135B2 (en) * 2017-02-10 2020-11-10 Samsung Electronics Co., Ltd. Automatic thresholds for neural network pruning and retraining
US10482156B2 (en) * 2017-12-29 2019-11-19 Facebook, Inc. Sparsity-aware hardware accelerators
US11636327B2 (en) * 2017-12-29 2023-04-25 Intel Corporation Machine learning sparse computation mechanism for arbitrary neural networks, arithmetic compute microarchitecture, and sparsity for training mechanism
US10572568B2 (en) * 2018-03-28 2020-02-25 Intel Corporation Accelerator for sparse-dense matrix multiplication
US10817260B1 (en) * 2018-06-13 2020-10-27 Amazon Technologies, Inc. Reducing dynamic power consumption in arrays

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180300605A1 (en) * 2017-04-17 2018-10-18 Microsoft Technology Licensing, Llc Reducing power consumption in a neural network processor by skipping processing operations

Also Published As

Publication number Publication date
JP2022505316A (ja) 2022-01-14
US11663001B2 (en) 2023-05-30
EP3884379A1 (en) 2021-09-29
WO2020106321A1 (en) 2020-05-28
JP7194824B2 (ja) 2022-12-22
CN113168324A (zh) 2021-07-23
KR102598174B1 (ko) 2023-11-06
US20200159529A1 (en) 2020-05-21

Similar Documents

Publication Publication Date Title
KR102598174B1 (ko) 손실 희소 로드 simd 인스트럭션 제품군
US11763156B2 (en) Neural network compression based on bank-balanced sparsity
US11948073B2 (en) Machine learning inference engine scalability
US20210065005A1 (en) Systems and methods for providing vector-wise sparsity in a neural network
US11983624B2 (en) Auto generation and tuning tool for convolution kernels
US11900253B2 (en) Tiling format for convolutional neural networks
US20180365558A1 (en) Real-time resource usage reduction in artificial neural networks
US20180314945A1 (en) Graph matching for optimized deep network processing
US11669473B2 (en) Allreduce enhanced direct memory access functionality
US11436486B2 (en) Neural network internal data fast access memory buffer
US20200089550A1 (en) Broadcast command and response
US20220092410A1 (en) Architected library interface for kernel fusion
US20210406690A1 (en) Efficient weight clipping for neural networks
KR102606207B1 (ko) 매트릭스 수학 명령어 세트에 대한 타일링 알고리즘
US11922306B2 (en) Tensor controller architecture
CN110969259B (zh) 具有数据关联自适应舍入的处理核心
Santoso et al. Understanding of gpu architectural vulnerability for deep learning workloads
US20220197878A1 (en) Compressed Read and Write Operations via Deduplication
US20200320395A1 (en) Methods and devices for optimizing machine learning model compactness and accuracy through hardware latency hysteresis effect
CN114385474A (zh) 针对gpu计算核进行性能统计分析的方法、装置及介质

Legal Events

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