KR20220118948A - 하드웨어 가속 명령어들의 사용 - Google Patents

하드웨어 가속 명령어들의 사용 Download PDF

Info

Publication number
KR20220118948A
KR20220118948A KR1020220021476A KR20220021476A KR20220118948A KR 20220118948 A KR20220118948 A KR 20220118948A KR 1020220021476 A KR1020220021476 A KR 1020220021476A KR 20220021476 A KR20220021476 A KR 20220021476A KR 20220118948 A KR20220118948 A KR 20220118948A
Authority
KR
South Korea
Prior art keywords
instruction
nodes
computation
hardware accelerated
data flow
Prior art date
Application number
KR1020220021476A
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 KR20220118948A publication Critical patent/KR20220118948A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • 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
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of 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
    • 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/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • G06F9/4451User profiles; Roaming
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • 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/0464Convolutional networks [CNN, ConvNet]
    • 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)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

발명은 제약 만족 문제를 해결함으로써 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하는 컴퓨터에 의해 구현되는 방법(600)에 관한 것이다. 제약 만족 문제에 대한 솔루션은 계산에서 하드웨어 가속 명령어의 가능한 호출을 표현한다. 제약 만족 문제는 계산의 데이터 흐름 그래프의 노드들을 명령어의 데이터 흐름 그래프의 노드들에 할당한다. 제약 만족 문제는 계산 데이터 흐름 그래프의 할당된 노드들이 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행하는 제약들, 및 계산 데이터 흐름 그래프의 어느 노드들이 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 제약들을 포함하며, 제한들은 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과된다.

Description

하드웨어 가속 명령어들의 사용{USING HARDWARE-ACCELERATED INSTRUCTIONS}
본 발명은 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하는 컴퓨터에 의해 구현되는 방법, 및 대응하는 시스템에 관한 것이다. 본 발명은 또한 상기 방법을 수행하는 명령어들 및/또는 하드웨어 가속 명령어를 사용하여 계산을 구현하는 명령어들을 포함하는 컴퓨터 판독가능 매체에 관한 것이다.
점점 증가하는 양의 데이터가 수집되고 처리됨에 따라, 큰 계산들을 효율적으로 구현하는 것이 더욱 더 중요해지고 있다. 다량의 데이터를 처리할 필요성이 특히 만연한 하나의 분야는 머신 러닝이다. 예를 들어, 심층 신경망들(deep neural networks)(DNN)과 같은, 신경망들의 평가뿐만 아니라 특히 트레이닝은 다수의 행렬 곱셈, 컨볼루션, 내적, 및 유사한 연산의 평가를 수반한다. 특정 응용들에 맞추어진 크고 연속적으로 진화하는 다양한 DNN 아키텍처들이 있다.
그러한 계산들을 가속하기 위해, 더욱 더 전문화된 하드웨어가 이용가능해지고 있다. 그러한 하드웨어는 행렬 곱셈들 또는 컨볼루션들과 같은, 특정 명령어들을 효율적으로 수행하도록 최적화되는 하드웨어 가속기들을 수반한다. 따라서, 그러한 하드웨어 가속 명령어들의 사용은 계산들이 특히 자원 제약 세팅들에서 더 효율적으로 구현되는 것을 허용한다.
하드웨어 가속 명령어들을 이용하기 위해, 고급 수준 프로그래밍 언어들의 코드를 하드웨어 가속 명령어를 호출하는 머신 실행가능 명령어들로 변환하는 컴파일러 기술들을 제공하는 것이 중요하다. 이것은 수행될 계산들 및 그들을 수행할 하드웨어 아키텍처들 둘 다가 연속적으로 진화하고 있기 때문에 특히 중요하다. 그러나, 신경망 계층들의 평가들에 관련된 것들과 같은 계산들을 구현하는 법을 자동으로 결정하는 것은 복잡한 작업이어서, 그들은 하드웨어 가속 명령어들을 가장 효율적으로 이용한다. 이 작업이 그렇게 복잡한 이유들 중 하나는 하드웨어 가속 명령어들이 다차원 입력 및 출력 어레이들을 통해 수백 또는 수천의 병렬 순차 연산들을 수반할 수 있는 복잡한 데이터흐름들을 가질 수 있다는 것이다.
논문 "ISA Mapper: A Compute and Hardware Agnostic Deep Learning Compiler" by M. Sotoudeh et al.(https://arxiv.org/abs/1810.09958에서 입수가능하고 본원에 참조로 포함됨)에서, 기술들은 행렬 곱셈 명령어를 포함하는 명령어 세트 위에 코드 발생을 수행하기 위해 제시된다. 딥 러닝 계산 커널 및 하드웨어 능력들은 연산자들의 루프 레벨 표현에 착수하는 중간 표현에 의해 설명된다. 명령어 매핑은 계산이 하드웨어 시스템 상에 수행될 수 있는 가능한 방식들을 결정하기 위해 적용된다. 이 명령어 매핑에서, 다수의 "IR 변환"은 계산에 적용되며, 그 후에 "결정적 매퍼"는 루프 레벨에서, 변환된 계산을 하드웨어 명령어들에 매핑하려고 시도한다. 스케줄러는 특정 매핑을 선택한다. 매핑들 및 스케줄들의 큰 검색 공간을 관리하기 위해, 휴리스틱스(heuristics), 비용 모델들, 및 잠재적으로 머신 러닝이 사용된다.
하드웨어 가속 명령어들을 사용하여 계산들을 구현하는 기존 기술들의 하나의 단점은 연산자들의 루프 레벨 표현의 사용이 루프 및 텐서 순서화 또는 액세스 함수 표기법과 같은 암시적 구현 결정들을 도입한다는 것이다. 예를 들어, 연산자에서의 스텐실에 대한 텐서 액세스 함수는 x*stride+w일 수 있는 반면, 가속기는 액세스 함수(i+k)를 갖는 명령어를 제공할 수 있다. stride=1에 대해, 매치가 가능하지만, 그러한 매치들을 일반적으로, 예를 들어, 패턴 매칭에 의해 자동으로 설정하는 것은 어렵다. 따라서, 가능한 구현들이 손실될 수 있다.
또한 IR 변환들의 명시적으로 지정된 세트에 기존 기술들의 의존은 불리하다. 임베딩을 초래하는 변환들의 특정 시퀀스를 직접 검출하는 것은 어렵다. 궁극적으로, 이것은 많은 상이한 구현 후보들이 발생될 필요가 있는 비결정적 검색 프로세스를 초래할 수 있다. 또한, 변환들이 더 많이 추가될수록, 검색 공간이 더 많이 증가되며, 숫자 솔루션들에 관한 수익이 감소된다. 따라서, 최적 구현을 발견할 필요가 있는 탐구와, 합리적인 시간량에서 솔루션을 발견할 필요가 있는 검색 공간 제한들 사이에 긴장이 있다. 더욱이, 변환들의 큰 세트가 사용될지라도, 구현들의 서브클래스가 이용불가능 변환 뒤에 숨겨지는 것이 가능하다.
이들 단점들로 인해, 기존 기술들은 하드웨어 가속 명령어를 가장 효과적으로 이용하는 계산의 일 구현을 발견하지 못할 수 있다. 일부 경우들에서, 기존 기술들은 하드웨어 가속 명령어가 적어도 계산에서 어떻게 사용될 수 있는지를 심지어 발견하지 못할 수 있다. 따라서, 하드웨어 가속 명령어를 사용하여 계산의 더 많은 가능한 구현들을 발견할 수 있는 기술들을 갖는 것이 바람직하다. 또한 그러한 구현들을 더 효율적으로 발견할 수 있는 기술들을 갖는 것이 바람직하다.
발명의 제1 양태에 따라, 컴퓨터에 의해 구현되는 방법 및 대응하는 시스템은 청구항 1 및 청구항 14에 의해 정의된 바와 같이, 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하기 위해 각각 제공된다. 발명의 다른 양태에 따라, 컴퓨터 판독가능 매체는 청구항 15에 의해 정의된 바와 같이 제공된다.
다양한 조치들은 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하는 것에 관한 것이다. 하드웨어 가속 명령어를 사용하여 계산을 구현함으로써, 계산에서의 명령어의 가능한 호출이 발견되는 것, 다시 말해, 명령어를 호출함으로써 수행될 수 있는 계산의 일부가 발견되는 것이 의미된다. 결정된 호출은 계산을 구현하고 결정된 가능한 호출에 따라 하드웨어 가속 명령어를 호출하는 머신 실행가능 명령어들을 자동으로 발생시키기 위해, 예를 들어, 계산을 실행가능 코드로 컴파일하기 위해 사용될 수 있지만, 이것은 요구되지 않는다. 가능한 호출을 저절로 발견하는 것은 예를 들어, 계산을 수동으로 구현할 시의 사용을 위해; 그러한 일 구현이 모두에서 가능한지를 결정하기 위해; 또는 실제 컴파일화를 수행하는 다른 시스템에 의한 사용을 위해 이미 유용하다.
계산 및 하드웨어 가속 명령어는 각각의 데이터 흐름 그래프들에 의해 표현될 수 있다. 데이터 흐름 그래프들의 노드들은 계산 또는 명령어의 입력들 및 연산들을 표현할 수 있으며, 에지들은 노드들 사이의 데이터 흐름 관계들을 표현하고, 예를 들어, 연산의 착신 에지들(incoming edges)은 연산이 작용하는 값들을 표현하기 위해 사용될 수 있다. 하드웨어 가속 명령어는 전형적으로 고정된 데이터흐름으로 미리 정의된 연산을 수행하며, 예를 들어, 명령어 데이터 흐름 그래프는 고정될 수 있다. 연산들은 전형적으로 스칼라 연산들, 예를 들어, 개별 수치 또는 비수치 요소들에 적용되는 연산들이다.
흥미롭게도, 발명자들은 계산에서 하드웨어 가속 명령어의 가능한 호출을 결정하는 문제가 계산 데이터 흐름 그래프의 노드들을 명령어 데이터 흐름 그래프의 노드들에 할당하는 제약 만족 문제로서 표현될 수 있는 것을 실현하였다. 따라서, 제약 만족 문제의 솔루션은 계산 데이터 흐름 그래프의 노드들, 예를 들어, 계산의 연산들 또는 입력들을 명령어 데이터 흐름 그래프의 노드들, 예를 들어, 하드웨어 가속 명령어의 연산들 또는 입력들에 할당할 수 있다. 그러한 할당은 또한 본원에서 계산 데이터 흐름 그래프에 명령어 데이터 흐름 그래프의 "매핑"으로 지칭된다. 효과적으로, 계산을 변환하고 그 다음 계산을 하드웨어 명령어에 매핑함으로써 가능한 호출을 하향식 접근법으로 발견하는 대신에, 제약 만족 문제에 대한 솔루션을 발견함으로써, 명령어로부터 계산으로의 매핑이 점진적으로 구성될 수 있는 상향식 접근법이 제안된다.
제약 만족 문제는 제약 만족 문제에 대한 솔루션이 계산에서 하드웨어 가속 명령어의 가능한 호출을 표현하도록 정의될 수 있다. 이를 위하여, 제약 만족 문제는 데이터 흐름 제약들 및 입력 제약들로 지칭된 적어도 2개의 유형의 제약을 포함할 수 있다.
데이터 흐름 제약들은 명령어 데이터 흐름 그래프의 노드들에 할당되는 계산 데이터 흐름 그래프의 노드들이 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행할 수 있다. 예를 들어, 하드웨어 가속 명령어는 하드웨어 가속 명령어의 기능성에 대응하는 계산의 일부에 매핑된다. 특히, 명령어 데이터 흐름 그래프에 의해 표시되는 데이터 흐름 관계들에 따라, 명령어 데이터 흐름 그래프의 입력들이 매핑되는 계산의 값들 상에 명령어 데이터 흐름 그래프의 연산들을 수행하는 것은 이들 연산들이 매핑되는 계산 데이터 흐름의 연산들을 수행하는 것과 동일한 계산 결과를 초래할 수 있다. 이것을 집행하는 하나의 방식은 명령어 데이터 흐름 그래프가 매핑되는 계산 데이터 흐름 그래프의 서브그래프가 명령어 데이터 흐름 그래프 자체와 동형인 것을 집행하는 것이지만, 이 요건의 완화들이 가능하다.
그러나, 발명자들이 실현한 바와 같이, 명령어 데이터 흐름 그래프로부터 계산 데이터 흐름 그래프로의 매핑이 하드웨어 가속 명령어의 가능한 호출을 표현하기 위해, 많은 경우들에서 데이터 흐름 제약들만을 사용하는 것은 충분하지 않다. 이것은 명령어가 적용될 수 있는 계산의 값들에 관한 추가적인 제한들을 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스가 통상적으로 부과하기 때문이다. 예를 들어, 하드웨어 가속 명령어는 그의 입력들이 특정 메모리 레이아웃에 따라 조직되는 것, 및/또는 특정 액세스 패턴에 따라 액세스되는 것을 필요로 할 수 있다. 그러한 요건들을 표현하기 위해, 제약 만족 문제는 또한 계산 데이터 흐름 그래프의 노드들이 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 하나 이상의 입력 제약을 포함할 수 있다. 따라서, 가능한 호출은 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과되는 제한들과 호환가능한 호출일 수 있다.
흥미롭게도, 제약 만족 문제의 점에서 가능한 호출들을 정의함으로써, 제약 만족 문제를 해결하여 가능한 호출을 결정하는 것이 가능하게 된다. 이것에 대한 기술들은 그 자체로 공지되어 있다. 데이터 흐름 및 입력 제약들은 호출이 가능한 것을 보장할 수 있다. 우선 변환을 전체 계산에 적용하고 그 다음 비효율적일 수 있는 하드웨어 가속 명령어를 사용하여 변환된 계산이 구현될 수 있는지를 시도해 보는 것이 필요하지 않다. 대신에, 하드웨어 가속 명령어의 호출을 표현하는 매핑은 제약 솔버에 의해 점진적으로 구성될 수 있으며, 제약들은 솔루션이 가능한 호출인 것을 보장한다. 또한 코드 변환들의 명시적 세트를 정의하는 것이 필요하지 않으며, 이는 완료하기 매우 어렵되거나 불가능할 수 있다.
매핑이 예를 들어 루프 레벨과 대조적으로, 연산 레벨 상에 수행되기 때문에, 및 제약들을 만족하는 임의의 매핑이 제약 솔버에 의해 발견될 수 있기 때문에, 루프 순서화, 메모리 레이아웃 및 메모리 액세스 기능들과 같은 암시적 구현 결정들이 회피될 수 있다. 특히, 호출들은 변환들의 미리 정의된 세트에 기초하여 공지된 접근법들에 의해 제공되는 것보다 더 유연한 메모리 레이아웃으로 결정될 수 있다. 벤치마크들에 관한 실험들은 이러한 증가된 유연성이 실제로 공지된 기술들보다 더 양호한 수행 호출들을 발견하는 것 허용하는 점을 나타낸다. 따라서, 하드웨어 가속 명령어의 광범위한 가능한 호출들이 발견될 수 있고, 이것은 더 효율적인, 예를 들어, 계산적으로 덜 비싼 방식으로 행해질 수 있다. 하드웨어 가속 명령어의 더 효과적인 호출들이 발견될 수 있거나, 호출들은 이것이 이전에 실행가능하지 않았던 계산들을 위해 심지어 발견될 수 있다.
가능한 호출들을 발견하기 위해 제약 솔버를 사용하는 추가 장점은 유익한 것으로 고려되는 선호도들로부터, 가능한 호출이 만족할 필요가 있는 요건들을 분리하는 것이 가능하다는 것이다. 특히, 제약 솔버에 의해 적용되는 변수 선택 전략 및/또는 값 선택 전략을 적응시킴으로써, 제약 해결 동안 솔루션 공간을 제어하는 것이 가능하지만, 솔루션이 유효하다는 의미에 영향을 미치지 않는다. 제약 솔버를 제어함으로써, 특정 솔루션들을 우선 발견하기 위해 제약 솔버를 가이드하는 것이 가능하다. 따라서, 결정된 가능한 호출들의 품질이 개선될 수 있고, 시도해 보는 잠재적인 솔루션들의 부분들을 효과적으로 제안하지만, 솔루션 공간의 부분들을 폐기하지 않음으로써 제약 솔버의 효율을 추가로 개선하는 것이 가능하다: 제안들이 솔루션을 초래하지 않으면, 제약 솔버는 다른 가능한 솔루션들을 계속 고려할 수 있다.
임의로, 머신 실행가능 명령어들은 계산을 구현하여 발생될 수 있다. 이들 명령어들은 결정된 가능한 호출에 따라 하드웨어 가속 명령어를 호출할 수 있다. 이와 같이, 하드웨어 가속 명령어를 이용하는 계산의 효율적인 구현이 획득될 수 있다. 따라서, 계산을 머신 실행가능 명령어들로 컴파일하는 방법이 제공될 수 있다.
임의로, 계산 및 명령어 데이터 흐름 그래프는 스칼라 연산들을 표현하는 노드들을 포함할 수 있다. 예를 들어, 스칼라 연산은 고정된 수의 하나 이상의 분리 값(통상적으로, 1 또는 2)에 작용할 수 있고 고정된 수의 하나 이상의 분리 값(통상적으로, 1)을 출력한다. 따라서, 제약 만족 문제는 루프 레벨에서 작용하는 것과 대조적으로, 스칼라 연산들을 스칼라 연산들에 매핑할 수 있다. 일부 실시예들에서, 그래프들의 각각의 노드는 다른 곳에서 설명되는 바와 같이 가환 감소 연산(commutative reduction operation)들의 가능한 예외로, 스칼라 연산을 표현할 수 있다. 또한 다른 곳에서 설명된 바와 같이, 스칼라 레벨에서 매핑을 수행함으로써, 어느 호출들이 발견될 수 있는지를 달리 제한할 수 있는 암시적 모델링 가정들이 최소화되어, 더 양호한 수행 호출들이 식별되는 것을 허용한다.
임의로, 하드웨어 가속 명령어는 행렬 곱셈, 컨볼루션, 내적, 행렬 벡터 곱, 누적 합, 풀링, 및 하다마드 곱(Hadamard product) 중 하나 이상을 구현할 수 있다. 이들은 큰 계산들에서 반복적으로 수행되는 공통 연산들이고, 이에 대해 하드웨어 가속이 이용가능해지므로, 그들을 최적화하는 것이 특히 적절하다.
일반적으로, 계산은 하드웨어 가속 명령어에 의해 구현가능한 것으로 예상되는 연산들을 포함하는 계산이다. 예를 들어, 계산은 신경망 평가에서의 컨볼루션 연산자의 적용과 같은, 더 큰 계산의 하위계산일 수 있으며, 그것은 하드웨어 가속 명령어의 적용에 잠재적으로 처리할 수 있는 바와 같이 수동으로 선택된다. 데이터 흐름의 점에서, 명령어가 계산에서 호출될 수 있는 많은 상이한 방식들이 있을 수 있지만, 이들 방식들의 일부만이 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과되는 제한들을 고수할 수 있고, 그들 가능한 호출들은 성능의 점에서 크게 상이할 수 있다. 따라서, 가능한 호출들을 자동으로 발견하고/하거나 열거할 수 있는 것이 중요하다.
임의로, 명령어 데이터 흐름 그래프는 하드웨어 가속 명령어의 출력들의 서브세트에 대해서만 노드들을 포함할 수 있다. 하드웨어 가속 명령어의 다른 출력들뿐만 아니라, 그들 다른 출력들을 계산하기 위해 사용되는 연산들은 배제될 수 있어, 제약 만족 문제를 해결하는데 더 효율적이게 한다. 그 다음, 결정된 가능한 호출은 결정된 가능한 호출에 기초하여 명령어에 의해 수행되는 전체 계산에 일반화될 수 있다. 예를 들어, 행렬 곱셈 명령어에 대해, 단일 출력 요소의 계산의 데이터 흐름 그래프는 전체 행렬 곱셈의 입력들 및 출력들을 외삽하기에 충분할 수 있다. 하드웨어 가속 명령어의 모든 입력들을 사용하는 출력들의 서브세트가 선택될 수 있어, 가능한 호출은 모든 입력들을 매핑하여, 외삽을 더 용이하게 하거나; 또한 계산에 명령어 입력들의 매핑은 외삽될 수 있다.
임의로, 계산은 신경망 평가에서 적용되는 계산일 수 있다. 예를 들어, 계산은 예를 들어 신경망 계층 입력에 적용되는 컨볼루션, 행렬 곱셈, 및/또는 풀링 연산을 포함할 수 있다. 계산은 신경망 계층 입력의 각각의 노드를 터치할 수 있다. 신경망 평가는 트레이닝 동안 및 신경망의 사용 동안 둘 다 발생하는 연산이고, 행렬 곱셈과 같은, 하드웨어 가속에 처리할 수 있는 연산들을 반복적으로 적용하는 것을 수반하므로, 특히 적절한 최적화 타겟이다. 더욱이, 데이터 흐름의 점에서, 이들 연산들이 적용될 수 있는 많은 방식들이 있다. 특히, 신경망 트레이닝이 효과적이도록, 전형적으로 큰 데이터세트들에 신경망을 트레이닝하는 것이 필요한 반면; 신경망들의 평가는 자원 제약 환경들에서 종종 발생한다. 양 경우들에서, 최적화는 특히 중요하다. 더욱이, 신경망 계층들 및 가속 하드웨어의 큰 다양성 및 일정한 개발을 고려하면, 새로운 유형들의 신경망 계층 및/또는 새로운 하드웨어 타겟들의 구현들을 획득할 수 있는 것이 특히 중요하다.
임의로, 계산의 적어도 일부는 다면체 표현에 의해 지정될 수 있다. 다면체 표현은 계산 데이터 흐름 그래프의 노드들의 세트를 상징적으로 정의할 수 있다. 제약 만족 문제를 해결할 때, 다면체 표현은 이 노드들의 세트의 구체적인 노트를 획득하기 위해 인스턴스화될 수 있고, 그 다음 명령어 데이터 흐름 그래프의 노드는 이러한 획득된 노드에 매핑될 수 있다.
다면체 표현들은 그 자체로 루프 기반 프로그램들을 간편하게 표현하는 방식으로서 공지되어 있다. 흥미롭게도, 발명자들은 루프 기반 프로그램의 루프들을 모델링하는 것에 더하여, 다면체 표현이 또한 데이터 흐름을 모델링하기 위해 사용될 수 있는 것을 실현하였다. 다면체 표현들을 서로 직접 변환함으로써 호출을 결정하는 것은 예를 들어, 표현이 루프 또는 텐서 차원 순서화와 같은 모델링 가정들을 표현하기 때문에, 및 그렇게 행하는 것이 표현들의 명시적 변환들을 정의하는 것을 필요로 할 수 있기 때문에, 바람직하지 않으며, 연관된 단점들은 다른 곳에서 설명된다. 흥미롭게도, 명령어 데이터 흐름 그래프가 매핑되어야 하는 계산 데이터 흐름 그래프의 다면체 표현을 사용함으로써, 이들 단점들이 회피된다.
본 기술들과 조합하여, 다면체 표현은 계산 데이터 흐름 그래프의 다면체의 세트들을 상징적으로 정의하기 위해 사용될 수 있다. 그러나, 흥미롭게도, 명령어 데이터 흐름 그래프와 계산 데이터 흐름 그래프 사이의 매핑은 여전히 노드들의 세트들, 예를 들어, 연산들의 세트들의 점에서 수행되는 것이 아니라, 개별 노드들, 예를 들어, 개별 연산들의 점에서 수행될 수 있다. 다면체 표기법은 전체 계산 데이터 흐름 그래프가 저장될 필요가 있는 것을 회피할 수 있으며; 명령어 데이터 흐름 그래프로부터 매핑되는 그들 개별 요소들만이 인스턴스화될 필요가 있다. 많은 경우들에서, 이것은 계산 및 메모리 복잡성을 크게 감소시킨다.
다면체 표현은 전형적으로 계산 데이터 흐름 그래프를 표현하기 위해 사용되지 않거나, 적어도 그의 다면체 표현은 제약 해결 동안 사용되지 않는다. 계산 데이터 흐름 그래프의 다면체 노드들은 전형적으로 제약 만족 문제의 변수들로서 개별적으로 저장된다.
임의로, 하나 이상의 입력 제약은 하드웨어 가속 명령어의 입력들이 허용된 메모리 레이아웃 및/또는 메모리 액세스 패턴을 갖는 것을 집행하기 위해 정의될 수 있다. 일반적으로, 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스는 명령어가 적용되는 입력들이 특정 배열에 따라 메모리에 저장되는 것, 예를 들어, 입력들이 메모리의 연속 블록을 형성하는 것, 메모리 어드레스들이 특정 방식으로 정렬되는 것 등을 집행할 수 있다. 이들은 하드웨어 가속 명령어가 적용될 수 있는 입력들에 제한하는 메모리 레이아웃 요건들의 예들이다. 이들 요건들은 고수되는 것을 확인하기 위해 입력 제약들로서 표현될 수 있다. 유사하게, 하드웨어 가속 명령어는 액세스 패턴들의 주어진 세트를 지원할 수 있으며 이에 따라 명령어는 예를 들어, 입력들이 주어진 스트라이드, 주어진 스텐실 패턴 등에 따라 액세스되든지 적용될 수 있다. 이와 같이, 그것은 하드웨어 가속 명령어가 적용될 수 있는 입력들에 추가로 제한될 수 있다.
예를 들어 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과되는 명령어들을 표현하기 위해 제약들의 세트에 하드웨어 가속 명령어의 중간 결과들 및 출력들에 관련된 메모리 레이아웃 및/또는 메모리 액세스 패턴 제한들을 포함하는 것이 또한 가능하다.
임의로, 하나 이상의 제약은 하드웨어 가속 명령어의 상호 병렬가능 연산들의 쌍들이 계산의 상호 병렬가능 연산들의 쌍들에 매핑되는 것을 집행하여 정의될 수 있다. 쌍들은 예를 들어, 데이터 흐름 그래프들에 병렬화가능성을 표시하는 특별한 유형의 에지를 포함함으로써, 상호 병렬가능한 것으로 마킹될 수 있다. 상호 병렬가능한 것으로 연산들의 쌍들을 명시적으로 마킹하고 매핑에서 이것을 집행하는 것이 필요하지 않지만, 그렇게 행하는 것은 상호 병렬가능 연산들이 상호 병렬가능 연산들에 매핑되지 않는 잠재적인 할당들을 해결 프로세스가 직접 제거하는 것을 허용하기 때문에, 제약 해결의 성능에 유익하다.
흥미롭게도, 발명자들은 모든 상호 병렬가능한 명령어 데이터 흐름 그래프의 연산들의 세트에 대해, 각각의 분리 쌍에 대한 병렬화가능성 제약들을 포함하는 것이 필요하지 않은 것을 실현하였다. 쌍들의 서브세트에 대해서만 제약을 포함하는 것은 솔버의 효율이 일반적으로 제약들의 수에 비례하기 때문에, 솔버의 성능을 개선하고; 또한 서브세트는 솔버가 할당을 제거하는 것을 돕는다. 더욱이, 이행성에서, 명령어 데이터 흐름 그래프의 쌍들의 세트에 대한 병렬화가능성 제약들을 집행하는 것은 이행적 패쇄에서의 각각의 쌍에 대한 병렬화가능성 제약들이 또한 만족되는 것을 암시할 수 있다. 계산 데이터 흐름 그래프에서, 병렬화가능성은 어느 할당들이 이루어질 수 있는 불필요하게 제한하지 않도록, 상호 병렬가능 연산들의 세트 내의 연산들의 각각의 쌍에 대해 표시될 수 있다. 계산 데이터 흐름 그래프에 대해, 이것은 특히 이 그래프가 예를 들어 다면체 표현의 사용으로 인해 해결 동안 완전히 인스턴스화되지 않으면, 더 적은 성능 페널티를 부과할 수 있다.
임의로, 명령어 데이터 흐름 그래프의 노드는 가환 감소 연산을 표현할 수 있다. 예를 들어, 가환 감소 연산, 예를 들어, 합 또는 곱을 위한 노드는 노드의 모든 착신 에지들에 적용되는 이 연산을 표현할 수 있다. 그러한 노드들의 사용은 계산 또는 명령어의 표현들로 데이터 흐름 그래프들의 정확도에 영향을 미치지 않고, 행렬 곱셈 또는 컨볼루션과 같은, 공통 하드웨어 가속 연산들을 지정하는데 필요한 노드들 및 에지들의 수를 크게 감소시킬 수 있다. 그것은 또한 요소들이 감소될 필요가 있는 특정 순서를 그래프가 지정하지 않기 때문에, 더 유연한 매핑을 허용한다. 가환 감소 연산들이 예를 들어, 2개보다 많은 착신 에지를 갖는 노드에 의해 암시적으로 정의될 수 있지만, 가환 감소 연산을 표현하는 것으로 노드들을 명시적으로 마킹하는 것이 바람직하다. 예를 들어, 이것은 그래프에 셀프 에지를 포함함으로써 행해질 수 있다. 그러한 명시적 마킹은 제약 솔버가 가환 감소 연산들에 대한 매핑들을 결정하는 것을 더 효율적이게 할 수 있다.
데이터 흐름 제약들은 명령어 데이터 흐름 그래프의 가환 감소 연산들을 표현하는 노드들이 계산 데이터 흐름 그래프의 대응하는 노드들에 매핑되는 것을 집행할 수 있다. 대응하는 노드들은 계산의 가환 감소 연산을 표현하는 노드, 예를 들어, 가환 감소 연산이 작용하는 각각의 요소에 대한 착신 에지들을 갖는 노드일 수 있다. 그러나, 이것은 요구되지 않는다. 또한 명령어 데이터 흐름 그래프에서 별도로 전체 감소 연산의 개별 감소들을 표현하는 것이 가능하다. 그러한 경우들에서, 명령어 데이터 흐름 그래프의 노드는 개별 감소를 표현하는 노드에 매핑될 수 있다. 이것은 가환 감소 연산들에 대한 어떠한 분리 모델링 노력도 필요하지 않기 때문에 계산들을 모델링하는 것을 더 용이하게 할 수 있다.
임의로, 제약 만족 문제를 해결할 시에, 명령어 데이터 흐름 그래프를 통해 역전파하는 변수 선택 전략이 사용될 수 있다. 데이터 흐름 및 입력 제약들에 의해 정의되는 제약 만족 문제의 유형에 대해, 이 변수 선택 전략을 사용하는 것이 가장 많은 전파 가능성을 갖고 따라서 일반적으로 솔루션을 발견할 시에 가장 효율적인 것이 실제로 관찰되었다. 이것은 특히 신경망 계층 평가들의 계산들에 대한 경우인 것으로 발견되었다.
임의로, 제약 만족 문제는 계산에 영향을 미치지 않는, 예를 들어, 동일한 계산 결과를 초래하는 더미 연산들에 하드웨어 가속 명령어의 연산들의 매핑을 허용하기 위해 정의될 수 있다. 제약 만족 문제를 해결하는 것은 노드를 더미 연산에 매칭하는 것을 포함할 수 있으며, 예를 들어, 노드는 계산 데이터 흐름 그래프에 포함되지 않는 연산에 매핑될 수 있거나, 다수의 노드는 계산 데이터 흐름 그래프의 동일한 노드에 매핑될 수 있다. 더미 연산들을 허용함으로써, 가능한 호출들을 발견할 시에 유연성이 증가된다. 특히, 그것은 명령어에 의해 달리 실행가능하지 않은 워크로드들 상에 하드웨어 가속 명령어를 적용하는 것을 허용할 수 있다. 예를 들어, 계산의 관련 부분은 하드웨어 가속 명령어보다 더 작을 수 있으며, 예를 들어, 명령어 데이터 흐름 그래프의 노드들의 서브세트만이 계산 데이터 흐름 그래프의 노드들에 매핑될 수 있다. 예를 들어, 명령어는 4개의 요소의 합을 계산할 수 있는 반면 계산은 3개의 요소만의 합을 필요로 한다. 계산에 영향을 미치지 않는 더미 연산들을 포함함으로써, 예를 들어, 덧셈에 대한 0 또는 곱셈에 대한 1과 같은 명령어에 의해 수행되는 연산들에 대한 중립 요소들을 추가함으로써, 계산의 관련 부분은 여전히 하드웨어 가속 명령어에 의해 실행될 수 있다.
임의로, 하나 이상의 제약은 초사각형(hyper-rectangle)을 형성하기 위해 하드웨어 가속 명령어의 입력들을 집행하는 제약 만족 문제에 포함될 수 있다. 이 제약은 예를 들어, 명령어 데이터 흐름 노드들에 수개의 할당들만이 이미 이루어진 후에, 제약 솔버가 검색 공간의 큰 부분이 빠르게 배제하는 것을 허용한다. 이것은 검색의 효율을 크게 개선하고, 더욱이 계산의 나머지에 대한 호출들을 획득하기 위해 더 용이하게 일반화될 수 있는 규칙적인 솔루션들이 제공되는 것을 보장한다. 많은 실제 적용들에서, 하드웨어 가속 명령어의 전형적인 호출들이 초사각형 형상 입력들을 갖지 때문에, 이들 제한들은 그러한 경우들에서 좋은 수행 가능한 호출들이 손실되는 것을 야기하지 않는다.
임의로, 제약 만족 문제에 대한 다수의 솔루션이 결정될 수 있다. 그 다음, 그들의 성능이 평가될 수 있고, 이 성능 평가에 기초하여, 다수의 솔루션으로부터의 솔루션이 선택될 수 있다. 제약 솔버는 제약들을 만족하는 가능한 호출들을 발견할 수 있지만, 전형적으로 성능의 점에서 발견된 솔루션들을 최적화하지 않는다(그러나, 제약 솔버는 또한 본원에서 설명된 바와 같이, 특정 솔루션들을 우선순위화하도록 구성될 수 있음). 그러나, 제약 솔버는 제약 만족 문제에 대한 다수의 솔루션을 출력하거나, 심지어 모든 가능한 솔루션들을 열거하도록 구성될 수 있다. 이들 다수의 솔루션의 성능을 평가함으로써, 원하는 성능을 갖는 솔루션을 선택하는 것이 가능하다. 다양한 전략들이 이용될 수 있으며, 예를 들어, 고정된 수의 솔루션들이 결정될 수 있거나 고정된 시간량은 솔루션들을 발견하기 위해 사용될 수 있고, 발견된 솔루션들은 이때 평가될 수 있거나; 솔루션들은 바람직한 성능을 갖는 솔루션이 발견될 때까지 또는 어떠한 추가 개선도 특정 기간에 발견되지 않을 때 등등까지 반복적으로 결정되고 평가될 수 있다.
발명의 위에 언급된 실시예들, 구현들, 및/또는 임의적 양태들 중 2개 이상이 유용한 것으로 간주되는 임의의 방식으로 조합될 수 있다는 점이 본 기술분야의 통상의 기술자들에 의해 이해될 것이다.
대응하는 컴퓨터에 의해 구현되는 방법의 설명된 수정들 및 변화들에 대응하는, 임의의 시스템 및/또는 임의의 컴퓨터 판독가능 매체의 수정들 및 변화들은 본 설명에 기초하여 본 기술분야의 통상의 기술자에 의해 수행될 수 있다.
발명의 이들 및 다른 양태들은 이하의 설명에 예로서 설명되는 실시예들을 참조하여 그리고 첨부 도면들을 참조하여 추가로 설명되고 이들로부터 분명할 것이다.
도 1은 계산을 구현하기 위한 시스템을 도시한다.
도 2는 하드웨어 가속 명령어를 사용하여 계산을 수행하기 위한 시스템을 도시한다.
도 3은 계산을 구현하는 법의 상세한 예를 도시한다.
도 4a는 데이터 흐름 그래프의 상세한 예를 도시한다.
도 4b는 데이터 흐름 그래프를 정의하는 다면체 표현의 상세한 예를 도시한다.
도 5a 내지 도 5d는 초사각형 제약을 적용하는 상세한 예를 도시한다.
도 6은 계산을 구현하는 컴퓨터에 의해 구현되는 방법을 도시한다.
도 7은 데이터를 포함하는 컴퓨터 판독가능 매체를 도시한다.
도면들은 순전히 도식적이고 축척에 따라 도시되지 않는다는 점이 주목되어야 한다. 도면들에서, 이미 설명된 요소들에 대응하는 요소들은 동일한 참조 번호들을 가질 수 있다.
도 1은 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하기 위한 시스템(100)을 도시한다. 예를 들어, 계산은 도 2의 시스템(200)의 프로세서 시스템(240)을 사용하여 구현될 수 있으며, 예를 들어, 시스템(100)은 프로세서 시스템(240)에 의해 실행가능한 명령어들을 생성하거나 프로세서 시스템(240) 상에 계산을 수행하기 위해 사용될 수 있는 프로세서 시스템(240)에 의해 지원되는 하드웨어 가속 명령어의 호출을 적어도 결정할 수 있다. 시스템들(100 및 200)이 조합될 수 있으며, 예를 들어, 시스템(100)의 프로세서 시스템(140)(아래에 추가로 논의됨)은 하드웨어 가속 명령어를 지원할 수 있다.
시스템(100)은 계산 데이터(030) 및 명령어 데이터(040)에 액세스하기 위한 데이터 인터페이스를 포함할 수 있다. 계산 데이터(030)는 계산을 표현하는 계산 데이터 흐름 그래프를 정의할 수 있다. 계산 데이터 흐름 그래프의 노드는 계산의 입력 또는 연산을 표현할 수 있다. 명령어 데이터(040)는 하드웨어 가속 명령어를 표현하는 명령어 데이터 흐름 그래프를 정의할 수 있다. 명령어 데이터 흐름 그래프의 노드는 하드웨어 가속 명령어의 입력 또는 연산을 표현할 수 있다.
명령어 데이터 흐름 그래프는 적어도 16개, 적어도 32개, 또는 적어도 128개의 노드를 가질 수 있다. 노드들의 수는 최대 2048 또는 최대 4096일 수 있다. 계산 데이터 흐름 그래프는 전형적으로 예를 들어, 인자 2^6=64, 2^10=1024, 또는 2^12=4096만큼, 명령어 데이터 흐름 그래프보다 더 큰 수의 노드들을 갖는다. 명령어 데이터 흐름 그래프의 노드들의 수는 예를 들어, 적어도 2^16=65536, 2^32=4294967296, 또는 2^48일 수 있다.
예를 들어, 또한 도 1에 예시된 바와 같이, 데이터 인터페이스는 데이터 스토리지(021)로부터의 데이터(030, 040)에 액세스할 수 있는 데이터 저장 인터페이스(120)에 의해 구성될 수 있다. 예를 들어, 데이터 저장 인터페이스(120)는 메모리 인터페이스 또는 영구 저장 인터페이스, 예를 들어, 하드 디스크 또는 SSD 인터페이스이지만, 또한 개인, 근거리 또는 광대역 네트워크 인터페이스 예컨대 블루투스, 지그비 또는 Wi-Fi 인터페이스 또는 이더넷 또는 광섬유 인터페이스일 수 있다. 데이터 스토리지(021)는 시스템(100)의 내부 데이터 스토리지, 예컨대 하드 드라이브 또는 SSD이지만, 또한 외부 데이터 스토리지, 예를 들어, 네트워크 액세스가능 데이터 스토리지일 수 있다. 일부 실시예들에서, 데이터(030, 040)는 예를 들어, 데이터 저장 인터페이스(120)의 상이한 서브시스템을 통해, 상이한 데이터 스토리지로부터 각각 액세스될 수 있다. 각각의 서브시스템은 데이터 저장 인터페이스(120)에 대해 위에 설명된 바와 같은 유형일 수 있다.
데이터 인터페이스, 예를 들어, 데이터 저장 인터페이스(120)는 또한 하드웨어 가속 명령어의 결정된 가능한 호출, 또는, 도면에 도시된 바와 같이, 결정된 가능한 호출에 따라 하드웨어 가속 명령어를 호출함으로써 계산을 구현하는 머신 실행가능 명령어들(050)에 액세스하기 위한 것일 수 있다. 이들 명령어들(050)은 계산을 수행하는 프로세서 시스템, 예를 들어, 도 2의 프로세서 시스템(240)에 의해 사용하기 위한 것일 수 있다.
시스템(100)은 시스템(100)의 동작 동안, 계산 데이터(030) 및 명령어 데이터(040)을 획득하도록 구성될 수 있는 프로세서 서브시스템(140)을 추가로 포함할 수 있다.
프로세서 서브시스템(140)은 계산 데이터 및 명령어 데이터에 기초하여, 제약 만족 문제를 정의하도록 추가로 구성될 수 있다. 제약 만족 문제는 변수들의 세트, 도메인들의 세트, 및 제약들의 세트에 의해 정의될 수 있다. 제약 만족 문제를 "정의"함으로써, 제약 만족 문제에 관한 정보는 제약 만족 문제가 제약 솔버에 의해 해결되는 것을 허용하는 형태로 이용가능해지는 것으로 의미된다. 예를 들어 변수들, 도메인들, 및/또는 제약들의 세트들이 명시적으로 그리고 개별적으로 저장되는 것, 예를 들어, 그들이 그 자체로 공지된 바와 같이 암시적으로 정의되고/되거나 느긋하게 평가될 수 있는 것이 필요하지 않다. 더욱이, 제약 만족 문제의 일부 또는 전부는 계산 데이터(030) 및/또는 명령어 데이터(040)의 형태로 이용가능해질 수 있으며, 예를 들어, 명령어 데이터(040)는 명령어 데이터 흐름 그래프의 노드들 중 노드들의 세트 및 그것에 의해 제약 만족 문제의 변수들의 세트를 포함하거나 그렇지 않으면 정의할 수 있다.
제약 만족 문제에 대한 솔루션은 계산에서 하드웨어 가속 명령어의 가능한 호출을 표현할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 노드들을 명령어 데이터 흐름 그래프의 노드들에 할당할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 할당된 노드들이 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행하는 하나 이상의 데이터 흐름 제약을 포함할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 어느 노드들이 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 하나 이상의 입력 제약을 추가로 포함할 수 있다. 이들 후자 제한들은 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과될 수 있다. 제약들은 예를 들어, 계산 데이터(030) 및/또는 명령어 데이터(040)에 기초하여 그들을 자동으로 정의함으로써, 제약들의 매뉴얼 정의들을 수신함으로써, 또는 둘의 조합에 의해 정의될 수 있다.
프로세서 서브시스템(140)은 계산에서 하드웨어 가속 명령어의 가능한 호출을 결정하기 위해 제약 만족 문제를 해결하도록 추가로 구성될 수 있다. 프로세서 서브시스템은 가능한 호출을 정의하는 데이터를 출력하도록 추가로 구성될 수 있다.
시스템(100)은 가능한 호출, 예를 들어, 제약 만족 문제에 대한 솔루션 또는 솔루션으로부터 유도된 머신 실행가능 명령어들(050)을 정의하는 데이터를 출력하기 위한 출력 인터페이스를 추가로 포함할 수 있다. 예를 들어, 또한 도 1에 예시된 바와 같이, 출력 인터페이스는 데이터 인터페이스(120)에 의해 구성될 수 있으며, 상기 인터페이스는 이들 실시예들에서 입력/출력('IO') 인터페이스이고, 이를 통해 데이터는 데이터 스토리지(021)에 저장될 수 있다. 일부 실시예들에서, 출력 인터페이스는 데이터 저장 인터페이스(120)로부터 분리될 수 있지만, 일반적으로 데이터 저장 인터페이스(120)에 대해 위에 설명된 바와 같은 유형일 수 있다. 출력 인터페이스는 또한 임의의 다른 유형의 출력 인터페이스, 예를 들어, 네트워크 인터페이스일 수 있다.
도 2는 하드웨어 가속 명령어를 사용하여 계산을 수행하기 위한 시스템(200)을 도시한다.
시스템(200)은 계산을 수행하기 위해 명령어들(050)에 액세스하기 위한 데이터 인터페이스(220)를 포함할 수 있다. 예를 들어, 명령어들(050)은 도 1의 시스템(100)에 의해, 또는 시스템(100)에 의해 결정되는 가능한 호출에 기초하여 발생될 수 있다. 예를 들어, 또한 도 2에 예시된 바와 같이, 데이터 인터페이스는 데이터 스토리지(022)로부터의 명령어들(050)에 액세스할 수 있는 데이터 저장 인터페이스(220)에 의해 구성될 수 있다. 일반적으로, 데이터 인터페이스(220) 및 데이터 스토리지(022)는 데이터 인터페이스(120) 및 데이터 스토리지(021)에 대해 도 1을 참조하여 설명된 바와 같은 동일한 유형일 수 있다.
시스템(200)은 프로세서 서브시스템(240)을 추가로 포함할 수 있다. 프로세서 서브시스템(240)은 하드웨어 가속 명령어를 지원할 수 있다. 일반적으로, 하드웨어 가속 명령어는 전용 작업을 수행하는 프로세서 서브시스템(240)에 의해 지원되는 명령어이다. 전용 작업은 스칼라 덧셈, 스칼라 곱셈, 비트단위(bitwise) 등등과 같은 기본 CPU 명령어가 아니다. 대신에, 하드웨어 가속 명령어에 대한 단일 호출은 이들 기본 명령어들 중 수개를 수행하는 것에 대응할 수 있지만; 하드웨어 가속 명령어를 실행하는 것은 전형적으로 더 빠르다. 하드웨어 가속 명령어를 실행하는 것은 계산의 성능을 개선할 수 있으며, 예를 들어, 감소된 레이턴시 및/또는 증가된 처리량을 야기한다.
하드웨어 가속 명령어는 전형적으로 다수의 스칼라 입력(예를 들어, ints 또는 floats와 같은 수치 값들), 예를 들어, 적어도 4, 적어도 16, 또는 적어도 64를 갖는다. 하드웨어 가속 명령어는 단일 출력(예를 들어, int 또는 float와 같은 수치 값)을 가질 수 있지만, 또한 다수의 그러한 출력들, 예를 들어, 적어도 4, 적어도 16, 또는 적어도 64를 가질 수 있다. 하드웨어 가속 명령어는 특정 수(N)의 기본 CPU 명령어들에 대응할 수 이다. 예를 들어, 기본 CPU 명령어는 명령어 데이터 흐름 그래프의 노드에 대응할 수 있다. 따라서, N은 명령어 데이터 흐름 그래프의 노드들의 수와 동일할 수 있거나, 명령어 데이터 흐름 그래프가 명령어의 일부만을 모델링하면, N은 더 클 수 있다. 예를 들어, N은 적어도 2^12=4096, 적어도 2^16=65536, 또는 적어도 2^24=16777216일 수 있다.
일반적으로, 프로세서 서브시스템(240)은 단일 중앙 처리 유닛(Central Processing Unit)(CPU)에 의해 구체화되지만, 또한 그러한 CPU들 및/또는 다른 유형들의 처리 유닛들의 조합 또는 시스템에 의해 구체화될 수 있다. 하드웨어 가속 명령어는 다양한 방식들로 프로세서 시스템(240)에 의해 지원될 수 있다. 일부 실시예들에서, 하드웨어 가속 명령어는 프로세서 서브시스템(240)의 CPU의 명령어이며, 예를 들어, 하드웨어 가속 명령어는 온-칩으로 구현될 수 있다. 일부 실시예들에서, 도면에 예시된 바와 같이, 하드웨어 가속 명령어는 CPU, 예를 들어, 전문 처리 유닛으로부터 분리된 하드웨어 가속기(241)에 의해 실행될 수 있다. 하드웨어 가속기(241)는 예를 들어 코프로세서; 주문형 명령어 집합 프로세서(application-specific instruction set processor)(ASIP); 필드 프로그램가능 게이트 어레이(field-programmable gate array)(FPGA); 주문형 집적 회로(application-specific integrated circuit)(ASIC); 복합 프로그램가능 로직 디바이스(complex programmable logic device)(CPLD); 또는 임의의 다른 유형의 프로그램가능 로직일 수 있다. 예를 들어, 하드웨어 가속기(241)는 T. Moreau et al., "A Hardware-Software Blueprint for Flexible Deep Learning Specialization"(available at https://arxiv.org/abs/1807.04188 및 incorporated herein by reference)에서 논의된 바와 같은 VTA 가속기일 수 있다.
명령어들(050)은 하드웨어 가속 명령어를 호출할 수 있다. 프로세서 서브시스템(240)은 예를 들어, 하드웨어 가속기(241)를 호출함으로써, 명령어들(050)에 따라 하드웨어 가속 명령어를 호출하는 것을 포함하여, 계산을 수행하도록 구성될 수 있다. 결정된 가능한 호출이 사용되기 때문에, 계산의 효율이 개선될 수 있다.
임의로, 계산은 트레이닝된 머신 러닝 모델, 예를 들어, 심층 신경망의 적용의 일부일 수 있다. 프로세서 서브시스템(240)은 센서로부터 센서 인터페이스, 예를 들어, 이미지 센서, 라이더 센서, 레이더 센서, 압력 센서, 컨테인 온도 센서 등을 통해 머신 러닝 모델에 대한 입력을 획득하도록 구성될 수 있다. 프로세서 서브시스템(240)은 출력을 획득하기 위해 머신 러닝 모델을 입력에 적용하도록 구성될 수 있다. 출력에 기초하여, 제어 데이터는 액추에이터 인터페이스를 통해 액추에이터, 예를 들어, 전기, 유압, 공압, 열, 자기 및/또는 기계 액추에이터에 유도되고 제공될 수 있다. 예를 들어, 시스템(200)은 로봇, 자율주행 차량 등을 제어하기 위해 사용될 수 있다.
일반적으로, 도 1의 시스템(100) 및 도 2의 시스템(200)을 포함하지만 이들에 제한되지 않는, 본 명세서에 설명된 각각의 시스템은 워크스테이션 또는 서버와 같은, 단일 디바이스 또는 장치로서 구체화되거나 이에 구체화될 수 있다. 디바이스는 내장 디바이스일 수 있다. 디바이스 또는 장치는 적절한 소프트웨어를 실행하는 하나 이상의 마이크로프로세서를 포함할 수 있다. 이 점에 있어서 도 2의 프로세서 시스템(240)에 대해 주어진 예들은 또한 도 1의 프로세서 시스템(140)에 적용된다. 프로세서 시스템들에 의해 실행되는 소프트웨어는 대응하는 메모리, 예를 들어, 휘발성 메모리 예컨대 RAM 또는 비휘발성 메모리 예컨대 플래시에 다운로드 및/또는 저장될 수 있었다. 일반적으로, 각각의 시스템들(100, 200)의 각각의 기능 유닛은 회로의 형태로 구현될 수 있다. 동일한 고려사항들 및 구현 옵션들은 달리 지시되지 않는 한, 일반적으로 도 1의 시스템(100)에 대해서와 같이 시스템(200)에 적용될 수 있다는 점이 이해될 것이다.
도 4a는 데이터 흐름 그래프의 상세하지만, 비제한적인 예를 도시한다. 데이터 흐름은 계산이 세분화될 수 있는 연산들, 및 이들 연산들 사이의 데이터 흐름 관계들의 점에서 계산의 표현이다. 구체적으로, 그래프는 노드들 및 에지들을 포함할 수 있다. 노드들은 계산의 입력들 및 연산들을 표현할 수 있다. 에지들은 노드들 사이의 데이터 흐름 관계들을 표현할 수 있다. 이것은 입력/출력 관계들(본원에서 순차 유형 에지들로 지칭됨)을 포함하지만, 임의로 또한 다른 유형들의 관계들을 포함할 수 있다. 이들 노드들 및 에지들 외에, 또한 다른 노드들 및 에지들이 그래프에 존재할 수 있다. 데이터 흐름 그래프들이 전형적으로 유도되며, 예를 들어, 적어도 하나의 유도된 에지를 포함한다. 데이터 흐름 그래프는 연결된 그래프일 수 있지만, 이것은 엄격히 요구되지 않는다.
예시 목적들을 위해, 도면은 계산(
Figure pat00001
)의 데이터 흐름 그래프를 도시한다. 예를 들어, 이 계산은 4x4 행렬 곱셈의 하나의 출력 요소의 계산으로서 발생하다. 이 예는 예를 들어, 계산 데이터 흐름 그래프 또는 명령어 데이터 흐름 그래프로서 사용되거나, 이의 일부로서 사용될 수 있다. 원들은 그래프의 노드들을 표현한다. 화살표들은 그래프의 에지들을 나타낸다.
데이터 흐름 그래프의 하나 이상의 노드는 계산의 입력들을 표현할 수 있다. 이들 노드들은 또한 본원에서 데이터 노드들로 지칭된다. 전형적으로, 데이터 노드들은 발신 순차 유형 에지들만을 가지며, 예를 들어, 임의의 유형의 착신 에지들 또는 다른 유형들의 발신 에지들을 갖지 않는다. 도면은 그래프에 의해 표현되는 계산의 각각의 입력들(x1, x2, x3, 및 x4)에 대응하는 데이터 노드들(411, 412, 413, 및 414); 및 각각의 입력들(y1, y2, y3, y4)에 대응하는 데이터 노드들(421, 422, 423, 및 424)을 도시한다. 도면은 상수 값 0에 대응하는 다른 입력 노드(461)를 도시한다.
데이터 흐름 그래프의 하나 이상의 노드는 계산의 연산들을 표현할 수 있다. 이들 노드들은 또한 본원에서 연산 노드들로 지칭된다. 연산 노드는 어느 연산을 수행하는지에 따라 라벨링될 수 있다. 데이터 흐름 그래프들 자체가 임의의 유형의 연산을 표현하기 위해 사용될 수 있지만, 전형적으로, 본원에서의 연산들은 전형적으로 스칼라 연산들, 예를 들어, 고정된 수의 수치 값들(예를 들어, 스칼라 덧셈, 스칼라 곱셈, 스칼라 나눗셈, 부정) 또는 비수치 값들(예를 들어, 비트 AND, 비트 XOR, 비트 NOT 등) 상에 수행되는 연산이다. 예를 들어, 스칼라 값은 예를 들어, 최대 256, 최대 128, 최대 64, 또는 최대 32 비트의 메모리에서 고정 크기 표현을 갖는 값일 수 있다.
전형적으로, 연산 노드들은 연산에 의해 소비되는 데이터에 대응하는 하나 이상의 착신 순차 에지를 갖는다. 예를 들어, 도면은 입력들(x1, 411 및 y1, 421)의 스칼라 곱셈을 표현하는 연산 노드(431); 입력들(x2, 412, 및 y2, 422)의 스칼라 곱셈을 표현하는 연산 노드(432); 입력들(x3, 413, 및 y3, 423)의 스칼라 곱셈을 표현하는 연산 노드(433); 및 입력들(x4, 414, 및 y4, 424)의 스칼라 곱셈을 표현하는 연산 노드(434)를 도시한다. 이 예에서와 같이, 연산은 가환 연산일 수 있으며, 이 경우에 연산의 입력들의 순서는 전형적으로 명시적으로 표현되지 않지만; 또한 예를 들어, 착신 순차 에지들을 라벨링함으로써, 예를 들어, 비가환 연산들에 대한 입력들의 순서를 표현하는 것이 가능하다.
흥미롭게도, 연산 노드는 덧셈 또는 곱셈과 같은, 가환 감소 연산을 표현하기 위해 사용될 수 있다. 예를 들어, 노드(441)는 그의 착신 노드들, 연산 노드들(431 내지 434) 및 연산의 초기화 값을 표현하는 노드(461)의 추가를 표현한다. 초기화 값에 대한 노드를 추가하는 것은 임의적이며, 예를 들어, 초기화 값은 연산의 중립 요소, 예를 들어, 0 또는 1과 동일하게 명시적으로 주어지지 않는 한 가정될 수 있다. 연산의 초기화 값은 계산의 동일한 초기화 값에 매핑될 수 있다. 이 연산을 표현하기 위해 단일 노드(441)를 사용하는 것은 수개의 장점들을 갖는다. 그것은 연산의 분리 쌍별 적용들, 예를 들어, 값들(431, 432)을 추가하는 것; 값(433)을 결과에 추가하는 것 및 값(434)을 그 결과에 추가하는 것을 위한 분리 노드들을 포함할 필요성을 경감한다. 이것은 효율을 증가시키고, 또한 예를 들어, 우선 값들(433 및 434)을 추가하고; 그 다음 값(432)을 추가하고; 이어서 값(431)을 추가하여 합을 결정하는 것을 불허함으로써, 데이터 흐름 그래프가 특정 순서로 수행될 덧셈을 집행하는 것을 방지한다. 가환 감소 연산들을 표현하는 노드들은 명령어 데이터 흐름 그래프에서, 계산 데이터 흐름 그래프에서, 또는 둘 다에서 사용될 수 있다.
이 예에 도시된 바와 같이, 노드는 가환 감소 연산을 표현하는 것으로서 그래프에 명시적으로 마킹될 수 있다. 이 예에서, 이것은 셀프 에지(451)를 노드(441)에 추가함으로써 행해진다. 다른 마킹 방식들은 또한 예를 들어, 가환 감소 연산을 표현하는 것으로서 노드를 라벨링함으로써 가능하다. 이 마킹은 제약 솔버가 가환 감소 연산들에 대한 매핑들을 결정하는 것을 더 효율적이게 하는 장점을 가지며, 예를 들어, 어느 노드에 가환 감소 연산을 매핑하는지를 선택할 때, 제약 솔버는 예를 들어 연산의 입력들을 매핑하려고 시도하는 것보다 더 용이하게 셀프 에지를 갖지 않는 노드들을 폐기가능할 수 있다.
가환 감소 연산들을 마킹하는 셀프 에지들의 사용은 가환 감소 노드들이 명령어 데이터 흐름 그래프에 사용되지만 계산 데이터 흐름 그래프에 사용되지 않는 경우에 특히 편리하다. 예를 들어, 명령어 데이터 흐름 그래프의 가환 감소 노드 A를 계산 데이터 흐름 그래프의 대응하는 노드 B에 매핑할 때, 셀프 에지는 감소 연산의 후속 적용들 사이의 계산 데이터 흐름 그래프의 대응하는 에지에 매핑될 수 있다. 그러한 대응하는 에지의 존재를 집행하는 것은 2개의 그래프 사이의 매핑을 검출하는 것을 더 용이하게 할 수 있다.
연산 노드는 연산의 결과를 사용하는 다른 연산들에 하나 이상의 발신 순차 에지를 생성할 수 있다. 다른 연산들에 발신 순차 에지들을 갖지 않는(그러나 자체에 가능한 발신 셀프 에지들을 갖는) 노드들은 그래프에 의해 표현되는 계산의 출력을 표현할 수 있다. 예를 들어, 노드(441)는 출력을 표현할 수 있다. 따라서, 데이터 흐름 그래프에서, 출력은 그것을 야기하는 연산과 동등하게 될 수 있다. 또한 출력들을 명시적으로, 예를 들어, 라벨링에 의해 마킹하는 것이 가능하다. 출력 노드들은 예를 들어, 출력의 형상 및/또는 데이터 유형을 표현하는 추가적인 정보로 라벨링될 수 있으며, 그것은 계산들과 명령어들을 매칭시키기 위해 사용될 수 있다.
임의로, 데이터 흐름 그래프의 연산들의 쌍들은 상호 병렬가능한 것으로 마킹될 수 있다. 이것은 예를 들어, 노드들의 쌍 사이에 에지를 추가함으로써 행해질 수 있다(이 도면에 도시되지 않음). 그러한 에지들은 본원에서 공간 에지들로 지칭된다. 특히, 공간 에지들은 동일한 연산을 수행하는 노드들 사이에 추가되지만 계산의 상이한 부분에, 예를 들어, 상이한 출력 요소에 대해 추가될 수 있다. 공간 에지들은 본원에서 설명된 바와 같이, 제약 솔버가 상호 병렬가능 연산들을 상호 병렬가능 연산들에 매핑하는 것을 돕기 위해 다시 사용될 수 있다.
공간 에지들의 수의 감소, 및 따라서 효율의 개선은 에지들의 세트의 서브세트만을 포함함으로써 상호 병렬가능 연산들의 세트에 대해 달성될 수 있다. 예를 들어, 공간 에지들에 의해 완전히 연결된 k개의 노드의 세트를 갖는 대신에, 에지들의 수는 동일한 연결된 구성요소를 유지하면서 연결들을 프루닝함으로써 감소될 수 있다. 예를 들어, 성형 구성(star configuration)은 하나의 내부 노드가 공간 에지들에 k-1 리프(leaf)에 연결된 경우 선택될 수 있다. 이행성에 의해, 병렬화가능성 정보가 유지될 수 있다.
수학적으로, 본원에서 사용되는 바와 같은 데이터 흐름 그래프는 can 예를 들어 G=(N,E,l)로서 정의되는 라벨링된 유도 그래프로 공식화될 수 있으며, 여기서 N은 노드들의 세트이고, 유도된 에지들의 세트는 E ⊆ NxN이고
Figure pat00002
는 세트(LN ∪ LE)로부터의 함수 할당 라벨들이다. LN = {{Operation},{Data}}는 예를 들어, 텐서 형상들, 데이터 유형들 및/또는 산술 연산들을 유지하는, 노드 라벨 클래스들의 세트이다. LE = {Spatial,Sequential}은 에지 라벨들의 세트이다.
다양한 양태들에서, 계산 데이터 흐름 그래프로 지칭되는 데이터 흐름 그래프는 계산을 표현하기 위해 사용될 수 있다. 명령어 데이터 흐름 그래프로 지칭되는 데이터 흐름 그래프는 명령어를 표현하기 위해 사용될 수 있다. 이들 데이터 흐름 그래프들은 예를 들어, 계산 또는 명령어의 모든 입력들 및 출력들, 및 출력들이 입력들로부터 어떻게 뒤따르는지를 모델링하는 노드들을 포함하여, 계산 또는 명령어의 전체 입력/출력 작용을 표현할 수 있다. 일부 경우들에서, 또한 계산 및/또는 명령어의 서브세트만을 모델링하는 것이 가능하다. 예를 들어, 명령어 데이터 흐름 그래프는 그의 출력들의 서브세트의 계산에 사용되는 연산들 및/또는 입력들만을 표현할 수 있으며,입력들, 연산들, 및/또는 출력들의 나머지는 또한 다른 곳에서 설명된 바와 같이, 외삽에 의해 결정된다.
또한 그래프들의 연산들이 계산 또는 하드웨어 가속 명령어에 의해 명시적으로 수행되며, 예를 들어, 덧셈 및 곱셈이 명령어 데이터 흐름 그래프에서 별도로 모델링될 수 있는 반면 그들이 조합된 곱셈-덧셈에 의한 하드웨어에 의해 수행되는 것이 필요하지 않다. 따라서, 명령어 또는 계산의 중간 결과들을 표현하는 노드들은 명령어 또는 계산 동안 일부 지점에서 명시적으로 계산되거나 저장되는 값들에 반드시 대응하는 것은 아니다. 그러나, 입력들 및 출력들은 전형적으로 일 구현에서 명시적으로 계산된다.
다양한 양태들에서, 데이터 흐름 그래프, 예를 들어, 계산 데이터 흐름 그래프 또는 명령어 데이터 흐름 그래프를 정의하는 데이터가 사용된다. 데이터 흐름 그래프를 "정의"함으로써, 노드들 및 에지들의 세트들은 데이터로부터 유도가능한 것, 또는 적어도 노드 또는 에지를 고려하면, 노드 또는 에지가 그래프에 속하는지가 결정될 수 있는 것으로 의미된다. 특히, 데이터 자체가 개별 노드들 및 에지들에 대응하는 명시적 데이터 아이템들을 포함하는 것이 필요하지 않다. 예를 들어, 또한 도 4b에 대해 논의된 바와 같이, 또한 노드들 및 에지들의 세트들을 상징적으로 정의하는 것이 가능하거나, 에지들은 암시적으로 정의될 수 있으며, 예를 들어, 특정 유형의 에지의 존재는 에지를 갖지 않는 노드들의 쌍들을 제공함으로써 데이터 등에 의해 정의될 수 있다. 다양한 대안들이 가능하다.
도 3은 하드웨어 가속 명령어를 사용하여 계산을 구현하는 법의 상세하지만, 비제한적인 예를 도시한다.
하드웨어 가속 명령어, 다시 말해 하드웨어 가속 명령어가 수행하는 기능성 또는 계산을 표현하는 명령어 데이터 흐름 그래프(data flow graph)(DFG)(IDG, 330)가 도면에 도시된다. 예를 들어, 명령어 DFG(IDG)는 도 4a에 대해 설명된 바와 같은 것일 수 있다. 특히, 그래프(IDG)의 노드들은 하드웨어 가속 명령어의 입력들 및 연산들을 표현할 수 있다.
또한 예를 들어, 도 4a에서와 같이, 하드웨어 가속 명령어를 사용하여 구현될 계산을 표현하는 계산 DFG(CDG, 340)가 도면에 도시된다. 그래프(CDG)의 노드들은 계산의 입력들 및 연산들을 표현할 수 있다. 명령어 데이터 흐름 그래프(IDG) 및 계산 데이터 흐름(CDG) 그래프들은 상이하며, 예를 들어, 어떠한 공통 노드들 또는 에지들을 갖지 않는다.
명령어 및 계산 DFG들은 각각의 계산 및 명령어 데이터(도시되지 않음)에 의해 각각 표현될 수 있는 2개의 별개의 그래프이다. 논의된 바와 같이, 이 데이터는 그래프의 노드들 및 에지들을 암시적으로 또는 명시적으로 정의하며, 예를 들어, 노드들 및 에지들이 열거되거나 적어도 노드들 및 에지들의 세트들의 멤버십이 테스트되는 것을 허용할 수 있다. 그래프들(IDG, CDG)은 일반적으로 연산들의 동일한 세트를 통해 정의되며, 예를 들어, 동일한 입도를 갖는다. 이것은 2개의 그래프의 연산들을 서로에 매핑하는 것을 더 용이하게 하고 따라 더 효율적이게 한다.
정의 연산(Def, 355)에서, 명령어 및 계산 DFG들(IDG, CDG)은 제약 만족 문제(constraint satisfaction problem)(CSP, 360)를 정의하기 위해 사용될 수 있다. 이 문제(CSP)에 대한 솔루션은 계산에서 하드웨어 가속 명령어의 가능한 호출을 표현할 수 있다.
그 자체로 공지된 바와 같이, 제약 만족 문제(CSP)는 전형적으로 변수들(VAR, 361)의 세트; 각각의 변수들에 대한 각각의 도메인들(DOMS, 362)의 세트; 및 제약들(CONS, 363)의 세트에 의해 정의된다. 수학적으로, 제약 만족 문제(CSP)는 트리플(X,D,C)에 의해 표현될 수 있으며, 여기서:
Figure pat00003
X={xj|0≤j≤n}은 변수들의 세트이며, 이에 대해 문제는 값을 발견하는 것이다.
Figure pat00004
D={dj|0≤j≤n}은 값 도메인들의 세트이며, 이로부터 값들은 각각의 변수들에 할당될 수 있다. 할당(Asn(dj,xj):xj=v)은 xj가 취하기 위한 값(v∈dj)을 선택할 수 있다. 따라서, 변수(xj)는 도메인(dj)으로부터만 값들을 취하기 위해 제한될 수 있다.
Figure pat00005
C={ci|0≤i≤m}은 제약들의 세트이다. 제약(ci)은 변수들(gx⊂X)의 서브세트를 통해 형성될 수 있고 모든 할당들(gd⊂D를 갖는 Asn(gd,gx))이 유효인지를 평가한다.
제약 만족 문제(CSP)에 대한 솔루션은 값들을 모든 변수들에 할당하는 할당일 수 있고, 어떠한 할당도 제약들(C)의 결합을 위반하지 않는다.
제약 만족 문제(CSP)는 계산 데이터 흐름 그래프(CDG)의 노드들을 명령어 데이터 흐름 그래프(IDG)의 노드들에 매핑함으로써 계산에서 하드웨어 가속 명령어의 가능한 호출들을 발견하는 문제를 표현할 수 있다. 변수들(VAR)의 세트는 명령어 데이터 흐름 그래프의 각각의 노드에 대한 변수를 포함할 수 있다. 계산 데이터 흐름 그래프의 각각의 노드는 변수들 중 적어도 하나에 대한 도메인(DOM)에 포함될 수 있다. 제약들(CONS)의 세트는 데이터 흐름 및 입력 제약들을 포함할 수 있다. 제약들의 수는 예를 들어, 명령어 데이터 흐름 그래프의 노드들의 수의 적어도 10, 적어도 100, 또는 적어도 1, 2 또는 5배일 수 있다.
따라서, 계산으로 명령어의 임베딩은 스칼라 레벨에서 효과적으로 설명될 수 있다. 흥미롭게도, 명령어에서의 노드들과 계산에서의 노드들 사이의 모든 잠재 할당은 그래프의 노드들 사이의 매핑으로서 표현될 수 있으므로, 공식화는 임베딩 문제에 대한 모든 가능한 솔루션을 캡처하기 위해 사용될 수 있다. 매칭 문제 자체는 텐서들 또는 액세스 기능들의 루프 순서화 또는 메모리 레이아웃과 같은 암시적 구현 결정들에 구속되지 않는다. 이것은 이들 결정들을 설명하기 위해 검색에서 변환들에 대한 필요를 제거한다. 대신에, 그러한 변환들은 임베딩의 결과로부터의 것들에서 유도될 수 있다.
특히, 변수는 명령어 DFG(IDG)의 모든 노드에 대한 변수들(VARS)의 세트, 예를 들어, X={x|∀x∈Ni}에 포함될 수 있다. 따라서, 하드웨어 가속 명령어에서의 모든 스칼라 연산 및 데이터 요소는 변수에 의해 표현될 수 있다. 도메인들(DOMS)의 세트는 D={d|d⊆Sd}로서 정의될 수 있다. 여기서, Sd는 계산 DFG(CDG)의 모든 노드들을 포함하거나 모든 노드들의 세트의 서브세트, 예를 들어, 노드 d와 동일한 연산을 갖는 모든 노드들의 서브세트 등을 포함할 수 있다. 그러나, 또한 제약에 의해 이러한 후자 제한을 부과하는 것이 가능하다. 도메인들은 예를 들어, 더미 연산들 또는 입력들에 대응하는 추가적인 값들을 포함할 수 있다.
변수들(VARS) 및 도메인들(DOMS)을 고려하면, 제약들(CONS)의 세트는 하드웨어 가속 명령어의 가능한 호출을 표현하기 위해 할당이 만족시킬 수 있는 조건들을 표현하는데 사용될 수 있다.
제약들(CONS)에 의해 집행될 수 있는 중요한 양태는 명령어 데이터 흐름 그래프(IDG)의 노드들의 데이터 흐름이 그들이 할당되는 계산 데이터 흐름 그래프(CDG)의 노드들의 데이터 흐름에 동등하다는 것이다. 예를 들어, 할당된 노드들에 의해 주어진 계산 흐름 그래프의 부분을 취하고 그것을 명령어 데이터 흐름 그래프의 노드들로 대체하는 것은 동일한 출력들을 갖는 계산의 데이터 흐름 그래프를 야기할 수 있다. 이러한 동등을 집행하는 제약들은 데이터 흐름 제약들로 지칭될 수 있다.
특히, 데이터 흐름 제약들은 명령어 데이터 흐름 그래프(IDG)가 제약 만족 문제(CSP)에 대한 솔루션에 의해 유도된 계산 데이터 흐름 그래프(CDG)의 서브그래프와 동형인 것을 집행할 수 있다. 이 경우에, 계산 데이터 흐름 그래프의 매핑된 서브그래프를 명령어 데이터 흐름 그래프로 대체하는 것은 노드들 사이의 연결들, 및 노드들의 라벨링의 점에서 동일한 그래프를 야기할 수 있다. 그러나, 엄격한 동형화는 본원에서 설명된 수개의 방식들로 완화될 수 있다.
동등을 집행하도록, 명령어 데이터 흐름 그래프의 에지를 위해, 그의 데이터흐름을 표현하는 하나 이상의 제약은 데이터 흐름 제약들에 포함될 수 있다. 수학적 표기법에서, 명령어 DFG Gi=(Ni,Ei,li) 및 계산 DFG Go=(No,Eo,lo)를 고려하면, 데이터 흐름 제약들은 제약 만족 문제(CSP)에 대한 솔루션이 Gi와 매칭하는 Go에서 노드들 및 에지들의 별개의 서브세트, 예를 들어,: ∀(s,t)∈Ei⇒(f(s),f(t))∈Eo을 설명하고, 라벨링, 예를 들어, ∀s∈Ni:li(s)≡lo(f(s))를 유지하는 단사 함수 f:Gi→Go을 표현하는 것을 필요로 할 수 있다. 단사성은 계산 데이터 흐름 그래프의 모든 노드가 솔루션에서 한 번만 존재하는 것을 필요로 함으로써 집행될 수 있다. 이것을 집행하는 글로벌 "AllDiff" 제약은 데이터 흐름 제약들에 포함될 수 있다.
예를 들어, 이하의 의사코드는 데이터흐름을 모델링하기 위해 사용될 수 있다:
Figure pat00006
데이터 흐름 제약들은 하드웨어 가속 명령어의 상호 병렬가능 연산들의 쌍들이 계산의 상호 병렬가능 연산들의 쌍들에 매핑되는 것을 집행할 수 있다. 이 예에서, 이것은 각각의 데이터 흐름 그래프들(IDG , CDG)에 공간 유형 에지들을 포함함으로써, 그리고 명령어 데이터 흐름의 공간 에지들이 계산 데이터 흐름 그래프의 공간 에지들에 매핑되는 것을 집행함으로써 행해진다. 논의된 바와 같이, 상호 병렬가능 연산들의 세트에 각각의 쌍에 대한 제약을 포함하는 것은 다수의 제약을 야기할 수 있다. 쌍별 제약들의 이행적 성질은 이것을 회피하기 위해 강화될 수 있다. 세트에 각각의 쌍에 대한 상호 병렬화가능성을 집행하는 대신에, 그것은 쌍들의 서브세트에 대해서만 집행될 수 있다. 특히, 서브세트가 전체 세트를 이행적 패쇄로서 여전히 가지면, 병렬화가능성은 전체 세트에 대해 암시될 수 있다. 예를 들어, 명령어 DFG에서의 임의적인 제1 노드가 선택될 수 있고, 제약은 그것이 갖는 모든 병렬 노드에 추가될 수 있다. 제1 노드에 병렬인 임의의 노드가 값을 할당받으면, 제1 노드의 도메인은 어사이니(assignee)에 병렬인 노드들을 포함하기 위해서만 프루닝될 수 있다. 이것은 제1 노드에 병렬인 모든 다른 노드에 전파될 수 있다. 따라서, 동일한 수의 값들이 효율적으로 프루닝될 수 있다.
제약 만족 문제(CSP)를 해결할 시에, 변수들(VARS)은 그들 각각의 도메인들(DOMS)로부터의 값들을 할당받을 수 있다. 해결 동안, 계산 데이터 흐름 그래프(CDG)의 노드는 명령어 데이터 흐름 그래프(IDG)의 노드에 대한 가능한 값으로서 선택될 수 있다. 제약 솔버는 값을 변수에 할당하려고 시도하고 이 할당이 제약들(CONS)에 의해 허용되는지 및/또는 이 할당이 제약들에 따라 할당들을 다른 변수들(VARS)에 강제하는지를 체크하는 소위 전파 알고리즘을 적용할 수 있다. 이하는 데이터 흐름 제약들을 집행하기 위한 일 예시적인 전파 알고리즘이다. 값이 할당되고 다른 노드(t)에 에지를 갖는 노드(s)를 고려하면, 이 예시적인 알고리즘은 s에 할당이 정확한지, 및 어떤 정확한 값들이 다른 노드(t)에 할당될 수 있는지를 체크한다:
Figure pat00007
이 예에서, 전파기는 T에서의 노드들 사이의 관계들에 직접 기초하여 값들을 필터링한다. 그것은 관계("evaluate_relation")를 평가하고 어떠한 연결도 존재하지 않는 파트너 노드의 도메인("t.intersect")으로부터 값들을 제거한다. 쌍 사이의 관계가 기능적이면, 그것은 솔루션("if t.size==1")을 직접 할당할 수 있다. 이것은 그 경우가 아니지만, 도시된 전파는 도메인을 포괄하기에 충분히 강력하여, 이 제약에 대한 유효 솔루션들만이 도메인들에 남아 있고 어떠한 추가 전파도 필요하지 않은 것을 의미한다. 나머지 도메인 값들은 그들의 변수에 대한 다른 제약들에 관하여 평가된다. 전파가 빈 도메인을 초래하면, 할당은 실패하였다.
값들이 명령어 데이터 흐름 그래프(IDG)의 노드들(s 및 t) 둘 다에 할당될 때, 제약은 쌍, 예를 들어, Asn((s,t),(d_s,d_t))∈Eo을 연결하는 계산 데이터 흐름 그래프(CDG)에 에지가 있는 것을 검증함으로써 정확도를 체크할 수 있다. 특히, 이것은 가환 감소 연산을 표현하는 명령어 데이터 흐름 그래프(IDG)의 셀프 에지가 계산 데이터 흐름 그래프(CDG)의 셀프 에지에 매핑되는 것을 집행하는 것을 수반할 수 있다.
데이터 흐름 제약들이 엄격한 동형화를 집행하는 것이 필요하지 않다. 다양한 완화들이 이용될 수 있다. 예를 들어, 명령어 데이터 흐름 그래프(IDG)의 소스 연산이 계산 데이터 흐름 그래프(CDG)의 동일한 타겟 연산에 매핑되는 것을 필요로 하는 대신에, 그것은 소스 연산이 타겟 연산, 예를 들어, 적어도 타겟 연산에 의해 요구되는 정확도를 갖는 연산, 또는 소스 연산에 의해 인스턴스화될 수 있는 연산의 일반화인 것을 필요로 하는데 충분할 수 있다. 또한 다른 곳에서 논의된 바와 같이, 완화들은 명령어 데이터 흐름 그래프의 가환 감소 연산을 가환 감소 연산의 단일 감소를 표현하는 계산 데이터 흐름 그래프의 노드에 매핑하는 것을 가능하게 하기 위해 이용될 수 있다. 엄격한 동형화를 집행하지 않는 다른 예는 또한 다른 곳에서 논의된 바와 같이, 더미 연산들의 사용이다.
발명자들이 실현한 바와 같이, 계산에서 하드웨어 가속 명령어의 가능한 호출을 구성하는 것을 정의하기 위해, 그것은 많은 경우들에서 데이터 흐름 제약들에 의해 데이터 흐름의 동등을 정의하는데 충분하지 않다. 즉, 도면에 도시된 바와 같이, 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스는 가능한 호출들에, 하드웨어 제한들(HWR, 320)의 세트를 부과할 수 있다. 제약 만족 문제(CSP)를 정의(Def)하는 것은 이들 하드웨어 제한들을 표현하는 하나 이상의 제약(CONS)을 정의하는 것을 포함할 수 있다. 하드웨어 제한들(HWR)은 다양한 방식들로, 예를 들어, 제약들로서, 제약 만족 문제를 정의할 때 제약들이 인스턴스화되는 템플릿들로서, 명령어 및/또는 계산 데이터 흐름 그래프들에 기초하여 제약들을 암시적으로 정의하는 코드 등으로서 표현될 수 있다.
특히, 하드웨어 제한들은 계산 데이터 흐름 그래프(CDG)의 노드들이 하드웨어 가속 명령어들의 입력들에 할당될 수 있는지, 예를 들어, 명령어 데이터 흐름 그래프(IDG)의 입력 노드들에 할당될 수 있는지를 제한하는 하나 이상의 입력 제약을 부과할 수 있다. 그러한 제약들은 예를 들어, 입력들이 허용된 메모리 레이아웃 및/또는 허용된 액세스 패턴을 갖는 것을 집행할 수 있다. 유사한 제약들은 또한 예를 들어, 출력들이 특정 메모리 레이아웃을 필요로 하는 다른 계산 또는 현재 계산의 다른 부분에 사용되면, 하드웨어 가속 명령어의 출력들에 가해질 수 있다. 명령어에 의해 부과되는 제한들 외에, 또한 다른 원하는 특성들을 갖는 호출, 예를 들어, 입력 어레이의 제1 요소를 사용하는 호출 등을 획득하기 위해 제한들을 포함하는 것이 가능하다. 이것은 발견된 호출을 일반화하여 전체 계산을 위한 코드를 발생시키는 것을 더 용이하게 할 수 있다. 일반적으로, 제약들(CONS)의 적절한 세트는 하드웨어 타겟 및 이용가능 코드 발생 방법들에 적어도 의존할 수 있다.
예를 들어, 제약들(CONS)은 이하 중 하나 이상을 포함할 수 있다:
- 입력들을 허용된 메모리 액세스 패턴들에 제한하는 것; 예를 들어, 입력 액세스 패턴은 스텐실 계산, 또는 규칙적인 스트라이드 및/또는 오프셋을 갖는 액세스 패턴들에 제한될 수 있고; 전파는 그러한 차원들에서의 값들을 0에 구속할 수 있으며, 이는 이들 액세스 패턴들이 존재하는 계산들에서 검색 공간의 큰 부분을 제거할 수 있다;
- 매핑 명령어 입력들을 계산에서의 특정 축들에 제한하는 것;
- 적용될 명령어를 계산에서의 특정 값들에 제한하는 것; 예를 들어, 명령어에서의 제1 출력을 계산에서의 제1 출력 요소에 제한함으로써 검색은 검색을 이들 지점들 주위의 값들에 고정할 수 있다.
흥미롭게도, 추가적인 많은 제약들을 포함하는 것은 솔루션 공간을 더 특정하게 할 수 있는 한편, 제약들을 완화하는 것은 구현 전략 탐구를 위한 도구의 역할을 할 수 있다. 제약 해결은 프로그램 공식화에서 표현성을 제공하고 맞춤가능 전파 및 검색 알고리즘들을 갖기 때문에 유익하다.
제약 만족 문제(CSP)는 하드웨어 가속 명령어의 연산들이 계산에 영향을 미치지 않는 더미 연산들에 매핑될 수 있는 방식으로 정의될 수 있다. 효과적으로, 계산으로 명령어의 "불완전한"(예를 들어, 비동형적) 임베딩이 획득될 수 있다. 이것은 다른 방법으로 불가능한 호출들을 발견하는 것을 허용할 수 있다. 예를 들어, 계산을 명령어에 의해 계산되는 더 작은 하부문제들로 균등하게 분할하는 것이 가능하지 않을 수 있다. 더미 연산들을 허용하는 것은 또한 그러한 상황들에서 하드웨어 가속 명령어를 사용할 수 있게 한다. 예를 들어, 8x8 행렬 곱셈은 16x16 행렬 곱셈을 위한 하드웨어 가속 명령어로 수행될 수 있다. 이 명령어는 입력 및 출력 텐서들을 패딩함으로써 사용될 수 있다: 그 다음, 형상은 명령어를 매칭시킬 수 있고 명령어가 사용될 수 있다. 더미 연산들은 중첩/중복 계산들을 허용 또는 제약하고; 중첩/중복 메모리 액세스들을 허용 또는 제약하고; 계산으로 더미 값들의 삽입을 허용 또는 제약하는 임의의 조합에 의해 제약 만족 문제에서 허용될 수 있다. 전형적으로, 더미 값으로서, 연산의 신경 요소는 계산의 결과, 예를 들어, 0(예를 들어, 덧셈에 대한) 또는 1(예를 들어, 곱셈에 대한)이 영향을 받지 않도록 포함된다. 이들 값들은 각각의 변수들의 도메인들(DOM)에 추가될 수 있다.
제약 만족 문제(CSP)를 해결하는데 더 용이하게 하고 그것에 의해 더 효율적이게 하기 위해 제약들을 제약들(CONS)의 세트에 포함하는 것이 또한 가능하다. 예를 들어, 변수들의 그룹의 도메인 크기는 프루닝 제약을 동일한 도메인을 갖는 명령어 데이터 흐름 그래프(IDG)의 변수들의 그룹, 예를 들어, 명령어의 출력 연산을 설명하는 모든 변수들에 적용함으로써 감소될 수 있다. 예를 들어, 도메인(dm)의 정도는 벡터(e0,...,em)에 의해 설명될 수 있으며, 예를 들어, dm=(4,4,4)는 에지-길이 4의 정육면체를 나타낼 수 있다. 따라서, 정육면체의 좌표는 0≤i<4,0≤j<4,0≤k<4를 갖는 (i,j.k)로서 설명될 수 있다. 따라서, 상계들(e*)을 설정함으로써, 예를 들어, ei=2를 설정함으로써, 도메인의 정도가 제어될 수 있다. 예를 들어, 이하의 단항 프루닝 제약은 이하에 의해 g의 모든 변수들에 대한 m-차원 도메인(dm=(e0,...,em)⊂S)의 모든 차원들의 크기를 임계치화하기 위해 사용될 수 있다:
Figure pat00008
여기서, #g는 이 그룹에 할당된 변수들의 수이고 ei는 1차원의 크기이다. 또한 변수들의 그룹에 대한 도메인의 좌표를 임의의 다른 임계 값, 예를 들어, 명령어의 차원의 길이 등에 제한하는 것이 가능하다. 프루닝 제약은 검색 공간을 감소시키는 낮은 오버헤드 제약이다.
따라서, 제약 만족 문제(CSP)는 계산 데이터 흐름 그래프의 노드들을 명령어 데이터 흐름 그래프의 노드들에 할당할 수 있다. 일부 실시예들에서, 계산 DFG의 노드는 명령어 DFG의 각각의 노드에 할당된다. 일부 실시예들에서, 명령어 데이터 흐름 그래프의 각각의 노드에, 계산 데이터 흐름 그래프의 노드 또는 더미 입력 또는 연산을 표현하는 노드가 할당된다. 일부 실시예들에서, 명령어 DFG의 각각의 노드에, 상이한 값이 할당되며, 예를 들어, 계산 DFG의 각각의 노드는 최대 한 번 할당될 수 있다.
또한 제약 만족 문제(CSP)를 취하고 그것을 해결하여 계산에서 하드웨어 가속 명령어의 가능한 호출(INV, 370)을 존재하는 경우 결정하는 연산(Solve, 365)이 도면에 도시된다. 호출(INV)은 명령어 데이터 흐름 그래프(IDG)의 노드들(b, c, d)로부터 계산 데이터 흐름 그래프(CDG)의 노드들(B, C, D)로 들어가는 파선 화살표들에 의해 도면에 예시된 바와 같이, 명령어 데이터 흐름 그래프(IDG)의 노드들을 계산 데이터 흐름 그래프(CDG)의 노드들에 매핑할 수 있다. 호출(INV)의 수개의 바람직한 성질들은 이 예에 의해 예시된다. 예시된 바와 같이, 명령어 데이터 흐름 그래프(IDG)의 각각의 노드는 계산 데이터 흐름 그래프(CDG)의 노드에 매핑될 수 있지만; 계산 데이터 흐름 그래프는 전형적으로 추가적인 노드들: 즉 노드 A 및 노드 E를 이 예에서 갖는다. 명령어 데이터 흐름 그래프(IDG)의 각각의 노드들 사이의 에지의 존재는 그들이 매핑되는 계산 데이터 흐름 그래프(CDG)의 각각의 노드들 사이의 에지의 존재를 암시할 수 있지만; 추가적인 에지들, 예를 들어 이 예에서 노드 A와 노드 C 사이의 에지 및 노드 D와 노드 E 사이의 에지가 있을 수 있다. 그러나, 명령어 데이터 흐름 그래프의 비입력 노드, 예를 들어, 노드 d는 전형적으로 동일한 수 및/또는 유형의 착신 에지들에 의해 계산 데이터 흐름 그래프의 노드, 예를 들어, 노드 D에 매핑된다.
해결 연산(Solve)을 실행하기 위해, 다양한 제약 프로그래밍 기술들은 그 자체로 문헌에 공지되어 있고 본원에서 적용될 수 있다. 흥미롭게도, 문제에 대한 솔루션들을 발견하기 위해 제약 솔버에 의해 사용되는 알고리즘은 많은 경우들에서 맞춤화될 수 있다. 이것은 솔루션이 유효하거나 유효하지 않다는 의미를 변경하지 않고, 솔루션 공간을 통한 제어, 예를 들어 특정 솔루션들의 우선순위화를 허용한다. 특히, 많은 기존 제약 솔버들(Solve)은 전파 알고리즘, 변수 선택 전략, 및/또는 값 선택 전략의 맞춤화를 허용한다.
전파기는 유효 솔루션의 일부가 아닐 수 있는 도메인들(DOMS)로부터 값들을 제거하기 위해 사용될 수 있다. 전파기는 도메인으로부터 값들을 추가하는 것이 아닌 제거한다는 의미에서, 단조 필터링 알고리즘일 수 있다. 전파기는 전형적으로 각각의 제약(CONS)에 특정한다. 전파기는 동일한 제약 하에 다른 변수들의 도메인들(DOMS) 및 할당들에 기초하여 도메인으로부터 어느 값들을 제거할지를 추론할 수 있다. 솔루션을 발견하기 위해, 솔버(Solve)는 검색 알고리즘을 사용하여 할당들을 체계적으로 수행하고 도메인들(DOMS)을 통해 할당들을 전파할 수 있다. 데이터 흐름 제약들을 집행하기 위한 일 예시적인 전파 알고리즘은 본 명세서의 다른 곳에서 주어진다.
솔버(Solve)는 주어진 문제에서 모든 가능한 솔루션들을 발견하기 위해 역추적 기반 검색 알고리즘을 많은 경우들에 사용한다. 이것은 변수들(VARS)의 세트로부터의 변수 x∈X가 다음에 값을 할당받는지를 결정하는 변수 선택 전략을 수반할 수 있다. 값 선택 전략은 변수의 도메인을 검색할 순서를 결정할 수 있으며, 예를 들어, 그것은 Asn(d,x)의 특정 구현으로 간주될 수 있다. 변수 및 값 선택은 헤결 시간에 영향을 주고, 또한 솔루션들이 출력되는 순서에 영향을 미친다. 따라서, 값 및 변수 선택 전략들을 최적화함으로써, 해결의 효율 및 결정된 솔루션들의 품질 둘 다가 영향을 받을 수 있다.
변수 선택 전략에 대해, 명령어 데이터 흐름 그래프를 통해 역전파하는 전략을 사용하는 것이 바람직하다. 출력들은 우선 선택될 수 있고, 그 다음 해결은 그래프를 통해 되돌아가는 것으로 진행할 수 있다. 이 전략은 예를 들어 신경망 계층 평가들의 관련 계산들에 대해 가장 많은 전파 가능성을 갖는 것으로 발견되었다.
값 전략에 대해, 일 예는 사전식 검색을 사용하는 것이다. 많은 경우들에서, 값 선택 전략은 하드웨어 가속 명령어의 입력 데이터의 구조에 관한 추가적인 정보에 기초하여 최적화될 수 있다. 예를 들어, 많은 경우들에서, 하드웨어 가속 명령어는 다차원 입력을 가질 수 있고, 명령어들이 적용될 수 있는 값들은 또한 다수의 차원을 가질 수 있다. 그러한 경우들에서, 값 선택 전략으로서, 포트폴리오 검색 전략이 사용될 수 있다. 그러한 검색에서, 값들이 변수에 할당되는 순서를 각각 제공하는 다수의 소위 애셋은 병렬로 검색된다. 상이한 애셋들은 하드웨어 가속 명령어의 차원들과 가능한 입력 값들의 차원들 사이의 상이한 매핑들에 대응할 수 있다. 애셋은 그 각각의 차원 매핑에 따라 할당들을 우선순위화할 수 있다. 이들 상이한 애셋들은 병렬로 검색될 수 있어, 광범위한 계산들을 통해 검색 지속의 안정화를 야기한다.
흥미롭게도, 포트폴리오 검색 전략을 사용할 때, 가능한 애셋들의 수는 명령어의 어느 차원들이 계산의 어느 차원들에 매핑될 수 있는지를 제한함으로써 제한될 수 있다. 이것은 예를 들어, 당면한 명령어 및 계산에 의존하고 매뉴얼 주석에 의해 수행될 수 있다. 예를 들어, 명령어 및 연산의 차원들은 예를 들어 행렬 곱셈들을 위해, 감소 차원들 및 비감소 차원들로 파티션될 수 있다. 포트폴리오 검색 전략에서, 연산의 감소 차원들은 이때 계산의 감소 차원들, 및 유사하게 비감소 차원들에만 매핑될 수 있다. 이와 같이, 애셋들의 수는 상당히 제한될 수 있어, 성능을 개선한다. 예를 들어, (I,J,K)를 통한 행렬 곱셈은 2개의 공간 차원(I,J) 및 1개의 감소 차원(K)을 갖는다. 값 선택 전략은 계산들에서의 차원들과 행렬 곱의 차원들 사이에 직접 임베딩하려고 시도할 수 있다. 애셋에서, 검색은 3개의 선택된 차원을 우선순위화할 수 있다. ns가 공간 차원들의 수이고 nk가 계산에서의 감소들의 수이면, 애셋들의 수는
Figure pat00009
일 수 있다. 이것은 달리 가능할 수 있는 도메인의 (ns + nk + 1)! 가능한 순열들과 비교하여 상당한 감소이다. 애셋 내에서, 사전식 검색은 예를 들어 값 선택 전략으로서 적용될 수 있다.
솔버(Solve)가 이들 초기 포트폴리오들에서 솔루션을 발견하지 못하면, 검색 공간에 관한 제약들은 완화될 수 있고 검색은 더 넓은 솔루션 공간에서 반복될 수 있다.
일반적으로(그리고 위에 논의된 바와 같이 포트폴리오 검색을 사용할 때 검색을 반복하는 대신에 또는 이에 더하여), 솔버(Solve)가 제약 만족 문제(CSP)에 대한 솔루션을 발견하지 못하면, 제약 만족 문제(CSP)는 완화될 수 있고 해결(Solve)은 예를 들어, 솔루션이 발견되었거나 적절한 완화들이 더 이상 이용가능하지 않을 때까지 반복될 수 있다. 예를 들어, 제약 만족 문제는 더미 연산들을 허용하기 위해 완화될 수 있고, 사용될 특정 입력들을 집행하는 제약들이 완화될 수 있는 등등이다. 그러한 완화들은 더 적은 최적 솔루션들을 야기할 수 있으며, 예를 들어, 연산들 중 더 적은 연산들이 최적화되거나, 하드웨어 가속 명령어에 의해 처리가능한 올바른 형태의 데이터를 얻기 위해 더 많은 전처리가 필요하지만, 이들 완화들을 수행함으로써 하드웨어 가속 명령어가 또한 결코 이상적이 아닌 상황들에서 적용될 수 있는 것이 가능하게 될 수 있다.
또한 계산을 구현하여, 머신 실행가능 명령어들(INSTR, 350)을 발생시키기 위해 결정된 호출(INV)을 사용할 수 있는 임의적 컴파일화 연산(Comp, 345)이 도면에 도시된다. 명령어들(INSTR)은 결정된 가능한 호출(INV)에 따라 하드웨어 가속 명령어를 호출할 수 있다. 예를 들어, 호출(INV)은 컴파일가능 코드를 발생시키기 위해 사용될 수 있으며, 그 다음 코드는 명령어들(INSTR)을 획득하기 위해 컴파일된다. 특정 하드웨어 가속 명령어에 대한 호출 컴파일화(INV)로부터 코드를 발생시키기 위해 사용되는 규칙들은 전형적으로 제의되는 코드 발생 인터페이스에 의존한다. 일반적으로, 프로그래밍 인터페이스는 하드웨어 가속 명령어가 호출되는 것을 어떻게 허용하는지에 따라 제약 만족 문제(CSP)에 대한 충분한 입력 제약을 포함함으로써, 호출(INV)을 명령어들(INSTR)로 변환하는 것은 상대적으로 간단하게 행해질 수 있다.
일부 실시예들에서, 명령어 데이터 흐름 그래프는 하드웨어 가속 명령어의 출력들의 서브세트에 대해서만 노드들을 포함할 수 있다. 머신 실행가능 명령어들(INSTR)을 발생시키기 위해, 호출(INV)은 계산의 연산들에 하드웨어 가속 명령어의 일부 또는 모든 나머지 출력들의 매핑을 추론하기 위해 사용될 수 있다. 따라서, 하드웨어 가속 명령어는 가능한 호출(INV)의 매핑에 의해 표시되는 것보다 계산의 더 큰 부분에 적용될 수 있다. 예를 들어, 행렬 곱셈에서, 출력 요소의 계산은 입력 노드들의 세트를 그의 이웃들과 공유하지만 어떠한 중간 결과들도 공유하지 않는다. 따라서, 호출(INV)은 하나의 출력 요소만을 위한 매핑을 제공할 수 있고, 그 다음 이 매핑은 계산의 전체 행렬 곱셈을 구현하기 위해 그것을 사용함으로써 일반화될 수 있다.
흥미롭게도, 명령어들(INSTR)을 발생시키는 것은 또한 하드웨어 가속 명령어의 추가 호출들을 획득하기 위해 결정된 호출(INV)을 일반화하는 것을 수반할 수 있다. 컨볼루션들과 같은 신경망 워크로드들을 포함하는 많은 실제 계산들을 위해, 단일 결정된 호출(INV)로부터 다수의 호출로 계산의 일 구현을 외삽하는 것이 가능하다. 이를 위하여, 하나 이상의 특징은 결정된 가능한 호출(INV)로부터 추출될 수 있으며, 이에 기초하여, 결정된 호출(INV)이 일반화될 수 있다. 예를 들어, 계산(Comp)은 이러한 방식으로 하드웨어 가속 명령어의 호출들에 의해 완전히 구현될 수 있다.
예를 들어, 컨볼루션을 위해, 명령어 데이터 흐름 그래프(IDG)의 입력 및 출력 값들과 연관된 계산 데이터 흐름 그래프(CDG)의 변수들은 명령어의 어느 치수가 워크로드에서의 어느 치수에 매칭되는지, 및 타일링 인자들이 어떤 것인지를 계산하기 위해 평가될 수 있다. 이것으로부터, 전체 컨볼루션을 구현하는 명령어들(INSTR)이 구현될 수 있다. 예를 들어, 매칭된 차원들은 발견된 인자들에 의해 타일링되고 이동되어 최내 차원들일 수 있다. 이들 타일링 및 재순서화들은 임베딩을 위해 고정될 수 있다. 다른 루프들 및 텐서 차원들은 여전히 추가 성능 최적화들을 위해 변환가능할 수 있으며, 예를 들어, 루프 타일링, 재순서화, 융합 등이 적용될 수 있다. 그러한 추가 성능 최적화들은 AutoTVM 또는 유사한 도구들을 사용하여 자동으로 결정될 수 있다. 하드웨어 가속 명령어의 임베딩된 호출들에 의한 명령어들(INSTR)은 예를 들어, TVM의 VTA 프로그래밍 도구 흐름에 의해 발생될 수 있다.
또한 임의적 평가 연산(Eval, 355)이 도시된다. 많은 경우들에서, 제약 솔버(Solve)는 제약 만족 문제(CSP)를 해결하는 다수의 호출(INV)을 결정하며, 예를 들어, 제약 만족 문제(CSP)에 대한 모든 가능한 솔루션들을 열거할 수 있다. 평가 연산(Eval)에서, 다수의 그러한 호출의 성능은 평가될 수 있고, 솔루션은 이 성능 평가에 기초하여 다수의 솔루션으로부터 선택될 수 있다. 평가는 결정된 머신 실행가능 명령어들(INSTR)에 기초하여, 예를 들어, 명령어들을 실행 또는 시뮬레이션하고 성능을 측정함으로써; 또는 명령어들(INSTR)을 우선 결정하지 않고 호출(INV)에 직접 (전형적으로 하드웨어 특정) 비용 함수를 계산함으로써 수행될 수 있다.
일반적으로, 본원에서 설명된 기술들은 다양한 유형들의 계산들 및 하드웨어 가속 명령어들에 적용될 수 있다. 하드웨어 가속 명령어는 행렬 곱셈, 컨볼루션, 내적, 행렬 벡터 곱, 누적 합, 풀링, 및 하다마드 곱 중 하나 이상을 구현할 수 있다. 계산은 예를 들어, 신경망 계층의 컨볼루션 연산자, 곱셈, 또는 풀링 연산의 평가를 포함할 수 있다.
전형적으로, 적어도 하드웨어 제한들(HWR)은 타겟 하드웨어에 의존하는 반면, 계산 데이터 흐름 그래프(CDG)는 수행될 계산에 의존한다. 따라서, 예를 들어 동일한 명령어 데이터 흐름 그래프(IDG) 및 하드웨어 제한들(HWR)을 사용하여 제시된 접근법을 다수의 상이한 계산 데이터 흐름 그래프(CDG)에 적용함으로써 다수의 계산을 위한 구현들을 결정하고; 동일한 계산 데이터 흐름 그래프(CDG) 및 다수의 상이한 하드웨어 제한(HWR) 및/또는 명령어 데이터 흐름 그래프(IDG)를 사용하여 제시된 접근법을 적용함으로써 동일한 계산의 다수의 구현을 결정하는 것이 가능하다.
도 4b는 데이터 흐름 그래프를 정의하는 다면체 표현의 상세하지만, 비제한적인 예를 도시한다. 다양한 실시예들에서, 계산 데이터 흐름 그래프 또는 그것의 일부는 다면체 표현에 의해 표현될 수 있다.
예를 들어 도 3에 대해 논의된 바와 같이, 계산에서의 하드웨어 가속 명령어의 가능한 호출은 계산 데이터 흐름 그래프의 노드들이 명령어 데이터 흐름 그래프의 노드들에 할당되는 제약 만족 문제를 해결함으로써 결정될 수 있다. 많은 실제 경우들에서, 계산 데이터 흐름 그래프의 노드들의 수는 상당히 큰, 예를 들어, 적어도 1024개, 적어도 4096개, 또는 적어도 104876개의 노드일 수 있다. 흥미롭게도, 그러나, 발명자들은 계산 데이터 흐름 그래프, 또는 그것의 적어도 부분들을 저장하기 위해 다면체 표현을 사용함으로써, 그것이 계산 데이터 흐름 그래프의 모든 노드들 및/또는 에지들의 리스트를 명시적으로 결정하고 저장하기 위해 회피될 수 있는 것을 실현하였다. 이것은 제약 솔버의 성능을 개선한다.
일반적으로, 다면체 표현에서, 데이터 흐름 그래프의 노드들의 세트는 상징적으로 표현되며, 예를 들어, 어느 노드들이 그들을 명시적으로 열거하지 않고 세트에 있는지를 설명하는 표현이 사용된다. 또한 에지들의 세트들, 예를 들어, 노드들의 세트의 착신 및/또는 발신 에지들은 상징적으로 표현될 수 있다. 제약 만족 문제를 해결할 때, 노드들의 세트로부터의 특정 노드는 다면체 표현을 인스턴스화함으로써, 예를 들어, 본원에서 설명된 바와 같은 값 선택 전략에 따라 노드를 선택함으로써 획득될 수 있다. 그 다음, 명령어 데이터 흐름 그래프의 노드는 이 인스턴스화된 노드에 매핑될 수 있다.
일 예로서, 도면은 다면체 표현들을 사용하여 데이터 흐름 그래프를 도표로 표현한다. 도 4a에서와 같이, 4x4 행렬 곱셈은 예를 들어, 텐서 식(
Figure pat00010
)으로 표현된다. 이 계산은 루프 네스트로서 표현될 수 있다: for i in I: for j in J: for k in K: A[i][j] += X[i][k] * Y[k][j].
입력 텐서들은 그들의 형상의 세트에 의해 설명될 수 있다. 예를 들어, 데이터 흐름 그래프의 입력 노드들의 세트의 다면체 표현(x, 410)이 도면에 도시된다. 이 세트는 예를 들어, 도 4a의 노드들(411 내지 414)을 포함하는 세트에 대응하고, 세트에 의해 설명될 수 있다
X={(i,k)|0≤i<I,0≤k<K}.
또한 도 4a의 노드들(421 내지 424)을 포함하는, 데이터 흐름 그래프의 입력 노드들의 다른 세트의 다면체 표현(y, 420)이 도시된다. 이 세트는 이하와 같이 설명될 수 있다:
Y={(k,j)|0≤k<K,0≤j<J}
행렬 곱셈 계산의 스칼라 곱셈 연산들은 예를 들어, 도 4a의 곱셈들(431 내지 434)을 포함하는, 다면체 표현(*, 430)에 의해 표현될 수 있다. 행렬 곱셈 계산의 스칼라 덧셈 연산들은 예를 들어, 도 4a의 덧셈(441)을 포함하는, 다면체 표현(+, 440)에 의해 표현될 수 있다. 스칼라 곱셈들 및 덧셈들은 세트에 의해 함께 표현될 수 있다:
S={(i,j,k,n)│0≤i<I,0≤j<J,0≤k<K,0≤n<#T},
I,J,K는 도메인 경계들이다. S는 또한 원래 텐서 식(T)의 어느 요소가 선택되는지, 예를 들어, 이 경우에, 노드가 덧셈 또는 곱셈을 표현하는지를 설명하는 추가적인 차원을 포함한다.
데이터 흐름 그래프의 노드들의 세트는 다면체 표현들에 의해 정의되는 세트들의 합집합, 예를 들어, No≡S∪X∪Y로서 형성될 수 있다.
또한 데이터 흐름 그래프의 노드들 사이의 에지들의 세트들은 다면체 표현들에 의해 정의될 수 있다. 다면체 표현은 2개의 도메인 사이의 이진 관계에 대응할 수 있다.
Figure pat00011
인 관계가 존재하면 2개의 인스턴스((s1,s2)∈S) 사이에 에지, 예를 들어, 데이터 흐름이 있다.
예를 들어, 도 4b에서, 노드들(410, 420, 430, 440)의 각각의 세트들 사이의 에지들은 이하의 관계들에 의해 정의될 수 있다:
Figure pat00012
Figure pat00013
Figure pat00014
Figure pat00015
위의 예에서, 관계(R1)는 곱셈 및 덧셈이 동일한 루프 반복에서 발생하지만, 그들의 위치에 의해 텐서 식(T)에서 순서화되는 것을 지정한다. R2는 반복 차원(k)에서 순차적으로 발생하는 2개의 가산 연산(add operation)으로서 해석될 수 있다. AX 및 AY는 액세스 함수 자체 및 이에 의해 액세스가 수행되는 노드, 이 경우에 T에서의 곱셈을 인코딩한다. 모든 관계들의 합집합은 데이터 흐름 그래프(Go)의 에지들, 및 구체적으로 예를 들어, Eo≡R1∪R2∪AX∪AY를 설명할 수 있다.
이 예에서, 노드들(440)의 세트 및 대응하는 관계(R2)는 가환 감소 연산, 이 예에서, 덧셈을 표현하기 위해 사용된다. 도 4a에 대해 논의된 바와 같이, 명령어 데이터 흐름 그래프에서, 그러한 가환 감소 연산은 단일 노드, 예를 들어, 도 4a의 노드(441)에 의해 표현될 수 있다. 그러한 경우들에서, 명령어 데이터 흐름 그래프의 노드(441)는 계산 데이터 흐름 그래프의 노드들(440)의 세트에 효과적으로 대응할 수 있다. 효과적으로, 관계(R1)는 노드(441)의 착신 비셀프 에지들에 대응할 수 있는 반면 관계(R2)는 셀프 에지에 대응할 수 있다. 이 경우에, 제약 만족 문제는 노드(441)가 노드들(440)의 세트 내의 노드들 중 어느 것에 매핑되는 것을 허용하도록 구성될 수 있다. 가환 감소 연산들을 노드들(440)의 세트의 노드에 매핑하는 것을 수용하기 위해, 감소 순서를 제어하는 항은 완화될 수 있고, 예를 들어, R1 및 R2 내의 k'에 대한 항은 감소의 임의의 순서화를 결정하지 않도록 완화될 수 있다. 이 완화에 의해, 세트(440)의 각각의 노드는 가환 감소 노드로서 효과적으로 간주될 수 있다. 흥미롭게도, 이 완화가 그래프에서 에지들의 수를 크게 증가시키지만, 그것은 계산 데이터 흐름 그래프를 완전히 인스턴스화할 필요가 없기 때문에 다면체 표현을 사용하여 효율적으로 구현될 수 있다. 대안적으로, 가환 감소 연산은 다면체 표현을 사용할 때도 단일 노드로서 표현될 수 있다.
데이터 흐름 그래프의 노드들 및/또는 에지들의 라벨들은 예를 들어, 세트를 위한 공통 라벨, 또는 상징적으로 정의된 분리 라벨들로서 제공될 수 있다. 라벨들은 입력들 또는 출력들의 유형들; 연산의 유형 등을 표시할 수 있다. 예를 들어, 노드들(410)은 "OutType: int8"로서 라벨링되고; 노드들(420)은 "OutType: int8"로서 라벨링되고; 노드들(430)은 "InType: int8; OutType: f32; Op: mul"로서 라벨링되고; 노드들(440)은 "InType: f32; OutType: f32; Op: add"로서 라벨링될 수 있다.
또한 상호 병렬가능 연산들의 쌍들은 다면체 표기법으로 표시될 수 있다. 예를 들어, 또한 도 4a에 대해 논의된 바와 같이, 상호 병렬가능 연산들의 쌍들은 공간 에지들에 의해 표시될 수 있다. 그러한 에지들의 세트는 또한 다면체 표현으로 표현될 수 있다.
에지들의 세트를 설명하는 관계들에 대해, 수개의 경우들이 발생할 수 있다. 관계들의 일부 또는 전부는 대칭이 아닐 수 있다. 이 예에서 관계 *→X와 같은 하나 이상의 관계는 단사 및 함수일 수 있으며, 예를 들어, 곱셈은 그것이 소비하는 X에서 정확히 하나의 텐서 요소에 매핑될 수 있다. 관계 X→*와 같은 하나 이상의 역 관계는 함수가 아닐 수 있으며, 예를 들어, X에서의 입력 요소는 다수의 곱셈에 의해 사용될 수 있지만, 그들 모두가 사용되는 것은 아니다. 이것은 i' 또는 j' 각각에 대한 성질들을 갖는 항을 포함하지 않으므로, AX 및 AY의 관계에 의해 관찰될 수 있다. X에서의 하나의 특정 입력 값에 대해, 관계는 이 값을 사용하여 모든 곱셈들의 서브세트를 설명할 수 있다.
일반적으로, 다면체 표현들에 의해 정의되는 데이터 흐름 그래프의 연산들의 세트(S)는 인스턴스 세트로 지칭될 수 있으며, 요소들은 동적 실행 인스턴스들로 지칭된다. 세트(S)는 정수 투플들의 세트에 의해 설명될 수 있으며, 여기서 정수 투플은 동적 실행 인스턴스, 예를 들어, 노드를 설명한다. 정수 투플들의 세트들을 설명하기 위해, 예를 들어, 이하의 표기법이 사용될 수 있다:
{(e0,...,en)|τ0,...,τn}
예를 들어, 각각의 항(τj)은 각각의 투플 멤버(ej)의 고정 하계 및/또는 상계를 제공할 수 있다. 따라서, 모든 τ 항들의 결합은 전체 세트를 정의할 수 있다. 제약 만족 문제의 도메인은 정수 투플들의 세트의 서브세트로서 정의되며, 예를 들어, 노드 유형에 의해 정의될 수 있다. 입력 노드들을 위해, 도메인은 각각의 텐서들의 형상의 투플들의 세트에 의해 설명될 수 있다. 연산 노드들에 대해, 도메인은 연산들을 표현하는 투플들의 세트, 또는 그의 서브세트일 수 있다.
인스턴스들의 쌍들, 예를 들어, 그래프의 순차 에지들 사이의 이진 관계들의 합집합은 또한 때때로 데이터 의존 관계(D)로 지칭된다. 소스 세트로부터 타겟 세트로의 요소들 사이의 관계는 이하로서 표시될 수 있다:
ssource→starget={(e0,...,en)→(e'0,...,e'n)|Φ0,...,Φm}
여기서, 항(Φk)은 관계의 조건을 설명한다. 타겟 투플의 요소들은 e'로 표시될 수 있다. 관계 조건(Φk)은 타겟 세트 내의 요소(e')에 매핑되는 소스 요소(e)를 설명하기 위해 사용될 수 있다. 모든 Φ 항들의 결합은 전체 관계 도메인을 설명할 수 있다.
다면체 표현들의 사용은 컨볼루션, 행렬 곱셈, 또는 풀링 연산과 같은, 신경망 계층 평가의 일부인 계산들에 특히 유익하다. 그러한 계산들은 전형적으로 컴파일 시간에 공지된 경계들을 갖는 텐서들, 예를 들어, n차원 어레이들을 통해 동작된다. 전형적으로, 상이한 출력 요소들은 동일한 방식으로 계산되지만 입력 값들의 상이한 슬라이스로 계산된다. 계산들은 전형적으로 또한 조건문들을 갖지 않고 딥 루프 네스트들을 수반하고 고도로 구조화된다. 이것은 다면체 표현들을 사용하여 그들을 표현하는 것을 특히 효율적이게 한다.
흥미롭게도, 본원에서 설명된 바와 같은 제약 만족 문제에서의 다면체 표현들의 사용은 일반성의 손실을 초래하지 않는다. 명령어를 계산에 매핑하는 것은 여전히 개별 노드들의 레벨에서, 예를 들어, 스칼라 레벨에서 행해진다. 제약 솔버는 세트가 어떻게 설명되는지에 관계없이, 예를 들어, 차원들의 순서에 관계없이, 임의의 계산 데이터 흐름 그래프 노드를 설명된 노드들의 세트로부터 명령어 데이터 흐름 그래프 노드로 할당할 수 있다. 이것은 명시적 변환들이 다면체 표현들에 적용되는 다른 접근법들과 다르며, 그 경우에 세트가 설명되는 방식은 극복하기 어려운 모델링 가정들을 포함한다.
도 5a 내지 도 5d는 초사각형 제약들을 적용하는 상세하지만, 비제한적인 예를 도시한다. 다양한 세팅들에서, 규칙적인 형상을 형성하기 위해 하드웨어 가속 명령어의 입력들을 제한하는 것이 유익하다. 이것은 더 효율적인 메모리 액세스를 갖는 구현들을 초래할 수 있고/있거나, 이를 위해 효율적인 메모리 레이아웃 변환들은 하드웨어 가속 명령어가 입력들에 호출되는 것을 허용하기 위해 이용가능하다. 특히, 이 예는 입력들이 초사각형을 형성하는 것을 집행하기 위해 초사각형 제약들의 세트가 어떻게 사용될 수 있는지를 도시한다.
용어 초사각형은 일반적으로 임의의 수의 차원들(n>0, 예를 들어, n=1, n=2, n=3, 또는 n≥4)을 갖는 직사각형을 지칭하기 위해 본원에서 사용된다. 지점들은 예를 들어, 지점들(0≤δi≤Δi에 대해 (x1+ㆍㆍㆍ+xn)+δ1ㆍ(s1,0,...,0)+δ2ㆍ(0,s2,0,...,0)+ㆍㆍㆍ)의 세트를 형성하는 정사각형 격자로서 초사각형 상에 배열될 수 있으며, 여기서 si들은 고정되며, 예를 들어, 1로 설정되거나, 동적으로 각각 별도로 결정될 수 있는 스트라이드들이다.
초사각형의 사용은 예를 들어, 그러한 계산들이 전형적으로 (종종 큰) 텐서들, 예를 들어, n차원 어레이들을 수반하기 때문에, 신경망 평가들에서 발생하는 계산들에 적절하다. 초사각형 형상은 효율적인 메모리 액세스에 특히 유익하고 하드웨어 가속 명령어가 메모리 레이아웃 변환들, 예를 들어, 텐서 차원들의 전치 또는 타일링을 사용함으로써 효율적으로 호출될 수 있게 하는 것이다. 제약들은 솔루션의 입력 값들에 할당된 변수들이 초사각형, 예를 들어, 텐서 공간의 벡터 베이스와 정렬된 초사각형을 형성하는 것을 확인하기 위해 사용될 수 있다. 다른 장점은 초사각형들을 형성하는 것에 입력들을 제약하여 제약 솔버가 명령어 데이터 흐름 그래프의 입력 노드들에 잠재적인 할당들을 상대적으로 용이하게 제거하는 것을 허용할 수 있다는 것이며, 이는 제약 해결의 효율을 크게 개선할 수 있다.
초사각형 제약들은 예를 들어, 하드웨어 가속 명령어의 입력들에 대응하는 지점들(V=(v0,...,vn))의 순서화된 투플로부터의 다수의 차원(n>0)과 초사각형의 형상을 매칭시키고 전파하도록 구성될 수 있다. 제약은 계산의 값들이 지금까지 할당된 입력 지점들의 세트로부터, 그리고 V 내의 지점들의 총 수로부터 경계 박스를 추론하도록 구성될 수 있다. 경계 박스 밖에 있는 값들은 하드웨어 가속 명령어의 나머지 입력 지점들에 대한 가능한 값들로서 제거될 수 있다. 따라서, 이미 수개의 할당들 후에, 전형적으로 도메인의 큰 부분을 제거하는 것이 가능하다. 예를 들어, 텐서의 하나의 축을 따라 2개의 지점만을 선택한 후에, 이러한 차원은 bound=#Vㆍ|v0-v1|의 크기에 구속될 수 있다.
직사각형은 지점들이 임의의 수의 임의적인 차원들을 갖는 직사각형을 생성하는지를 추론하려고 반복적으로 시도하는 것을 포함하여, 지점들(V)의 세트의 선형 반복을 수행함으로써 계산될 수 있다. 특히, 지점들이 격자를 사전식 순서로 설명하면, 반복은 이하의 단계들 중 하나를 수행하는 것을 수반할 수 있다. 베이스 단계는 최내 차원 내의 하나의 요소로부터 다음 요소로의 이동을 표현할 수 있다. 차원 점프는 최내 차원의 다음 라인으로 이동하는 것, 예를 들어, 공간을 통해 대각선으로 이동하는 것을 표현할 수 있다. 격자 구조를 집행하기 위해, 베이스 단계들은 차원 점프가 발생하기 전에 동일하고 고정된 횟수들로 반복되도록 요구될 수 있다. 차원 점프는 새로운 차원을 직사각형에 추가할 수 있다. 차원들([n0,...,nm]∈Rec)에 대해, 차원 점프(nk)(여기서 0≤k≤m임)는
Figure pat00016
배 발생하도록 요구될 수 있다. 차원 점프는 벡터(jmp=va-va+1)에 의해 정의되는 형상을 가질 수 있으며, 이는 vo=(v0-va)+vb와 동일하도록 요구될 수 있으며, 여기서 v0은 V 내의 제1 지점이고 vb는 정수 인자에 의해 스케일링되는 텐서의 베이스 벡터들 중 하나이다. vb를 벡터 베이스의 요소에 제한함으로써, 코너들에 직각들이 있는 것, 및 직사각형이 축 정렬되는 것이 확인될 수 있다.
도 5a 내지 도 5d는 지점들의 세트 상에 격자 구조를 집행하는 초사각형 제약들을 집행하는 일 예를 도시한다. 도면은 제약이 어떻게 집행되고 전파될 수 있는지의 일 예를 도시한다. 도면들에서, 채워진 점들(512, 522, 532)은 도메인 값들을 표현하고; 크로스들(511, 521, 531, 541)은 16개의 변수 중 하나에 대한 선택을 표현하고; 빈 점들(533, 543)은 전파에 의해 제거되는 값들을 표현하다.
이 예에서, 처음 4개의 단계에서, 어떠한 전파도 x 축을 따르는 차원의 크기(8)가 변수들의 총 수(16)보다 더 작기 때문에, 아직 가능하지 않을 수 있다(도 5a 내지 도 5b). 그러나, 제5 값이 선택되면, 값들은 도메인으로부터 제거될 수 있다. 이 예에서, x>3을 갖는 값들(y,x)은 이것이 최내 차원의 크기이고 이것이 모든 외부 차원에 대해 동일해야 하기 때문에, 제거될 수 있다. 제5 변수를 위해 선택된 값(1,0)으로부터, 전파기는 y 차원으로의 확장이 이하보다 더 클 수 없는 것을 추론할 수 있다:
Figure pat00017
이 예에서, 이것은
Figure pat00018
이다. 따라서, 지점들(533)이 제거될 수 있다(도 5c). 나머지 지점들은 도 5d에 도시된 바와 같이 매핑된다.
흥미롭게도, 지점들(V)의 세트를 통해 반복하여 초사각형 제약을 구현함으로써, 획득된 제약은 명령어와 워크로드 사이의 상대적인 차원 순서화에 투명할 수 있다. 그 결과, 워크로드에서의 임의의 차원은 예를 들어 전치 연산을 수행해야 하는 것 없이 명령어에서의 임의의 차원에 매핑될 수 있다. 흥미롭게도, 매핑은 하드웨어 가속 명령어를 호출하는 코드를 발생시킬 시에 어느 메모리 변환들, 예를 들어, 전치들, 타일링, 융합 등을 사용할지를 유도하기 위해 사용될 수 있다.
초사각형 제약의 일 구현의 상세한 예가 다음에 제공된다. 알고리즘은 또한 부분적으로 할당된 직사각형들에 착수한다. 추론 동안 발견된 정보는 경계 박스를 계산함으로써 나머지 값들의 도메인들을 직접 전파하기 위해 사용될 수 있으며, 이는 뛰어난 할당들에 의해 형성될 수 있는 최대 가능한 직사각형이다.
알고리즘은 제1 단계를 고려함으로써 시작하고, 그것이 축 정렬되지 않으면, 그것은 실패를 반환한다. 이어서, 그것은 벡터 베이스로부터 수행된 단계를 제거하여, 각각의 텐서 차원이 한 번 사용된다. 그 다음, 지점들의 나머지가 반복되고, 모든 단계가 표로 작성된다. live_tbl은 취해지는 단계들을 기록한다. dk로의 차원 점프가 발생하면, dk-1에 대해 수행된 단계들의 수는 dim_table에 기록된다. 모든 단계 발생은 이미 기록되었거나 기록되어 있지 않으면 체크된다. 그것이 이미 발생했으면, counters_valid는 단계가 정확한 시간에 발생했고 모든 카운터들을 내부 차원들로 리셋하는지를 체크한다. 도 5의 예에서, y 차원에서의 모든 단계에 대해 x 차원에 4개의 단계가 필요하다. y 단계가 발생했으면, x에 대한 카운터가 리셋된다.
Figure pat00019
상세들은 이제 논의된 기술들이 VTA 하드웨어 가속기에 대한 코드를 발생시키기 위해 적용되는 실험들로 제공되며, 이는 하드웨어 가속 행렬 곱(hardware-accelerated matrix-multiply)(GEMM) 명령어를 제공한다. 하드웨어는 256kb 가중 버퍼, 128kb 데이터 버퍼 및 GEMM 코어를 갖는 ZynqUltrascale+ FPGA에 인스턴스화되어 int8 입력들을 소비하고 float32 결과들을 생성한다. GEMM 유닛은 (x,y,z)=(1,16,16)로
Figure pat00020
를 계산한다. 그의 결과들은 예를 들어 활성화 및 양자화 연산들을 위한 벡터-스칼라 유닛에 의해 처리될 수 있다. 행렬 피연산자 B가 전치된다는 점을 주목한다. 하드웨어는 행렬 피연산자들의 독립 메모리 액세스들을 위한 로드/저장 유닛을 갖는다. 그것은 메모리에 연속적으로 저장된 전체 2D 피연산자 행렬들을 로딩하고 저장할 수 있다. 실험들은 바이두 딥벤치 추론 벤치마크(Baidu DeepBench Inference Benchmark)로부터의 계산들을 사용한다.
제시된 기술에 따라 발생된 코드는 TVM의 conv2d 참조 구현과 비교되며, 이는 컨볼루션에서 GEMM 유닛의 3개의 축(x,y,z)을 배치(n=x), 출력 채널(oc=y), 및 입력 채널(ic=z) 차원들에 정적으로 매핑한다. TVM 컨볼루션 구현은 NCHW(N=batch size, C=channel, H=height, W=width) 메모리 레이아웃을 예상한다.
실험들에서, 머신 실행가능 발생들은 TVM 머신 러닝 컴파일러 프레임워크를 사용하여 발생되었다. TMV가 하드웨어에 의해 가속될 수 있는 연산자에 직면할 때, 구현은 지정된 전개 전략에 의해 취급된다. 전략은 하드웨어 타겟에 대해 최적화되는, TVM의 IR에서의 연산자를 구현한다. VTA에 대한 TVM의 코드 발생 도구 흐름은 접근법을 VTA의 전략에 통합함으로써 사용될 수 있다. 명령어 DFG(Gi)는 하드웨어 구성에 기초하여 발생된다. 이것에 기초하여, 제약 만족 문제는 설명된 바와 같이 정의된다. Gi의 노드들은 변수들이며, 연산자의 동적 인스턴스 세트는 도메인을 형성한다.
하나의 실험들에서, 제약 솔버는 참조 구현과 유사한 가능한 호출들을 결정하기 위해 사용되었다. 이를 위하여, 이하의 제약들이 사용되었다:
- GEMM 명령어의 데이터흐름을 매칭시키기 위한 데이터 흐름 제약들;
- 입력 및 출력 요소들이 축 정렬된 형상으로 매핑되는 것을 보장하여, 전치 및 리쉐이프(reshape) 연산들에 기초한 더 간단한 메모리 변환들을 허용하는 초사각형 제약들;
- 동일한 동적 실행 인스턴스가 동일한 명령어 호출에서 여러 번 나타나는 것을 방지하는 allDiff 제약;
- 모든 입력 및 출력 텐서들의 제1 매치가 각각의 도메인의 원점에 고정되는 것을 집행하는 고정 원점 제약;
- 입력 및 출력 텐서들에 대한 임의의 차원에서 스트라이드들을 불허하는 밀집 제약;
- 워크로드 차원들에서 명령어를 매칭시키는 액세스 패턴들, 예를 들어, 스트라이드들 또는 스텐실이 없는 패턴들과의 매치들만을 허용하는 메모리 액세스 제약.
계산을 고려하면, 제약 솔버는 명령어(Gi)의 각각의 연산 및 데이터 요소가 계산(Go)의 노드에 어떻게 매핑되는지를 설명하는 가능한 호출을 획득하기 위해 사용될 수 있다. 컨볼루션들과 같은 DNN 워크로드들의 규칙성으로 인해, 하드웨어 가속 명령어를 반복적으로 호출하는 일 구현에 발견된 호출을 외삽하는 것이 실행가능하다. 솔루션에서, 입력 및 출력 값들과 연관된 변수들은 명령어의 어느 치수가 워크로드에서의 어느 치수에 매칭되는지, 및 타일링 인자들이 어떤 것인지를 계산하기 위해 평가된다. 이 정보는 코드가 발생되는 것을 허용한다. 매칭된 차원들은 발견된 인자들에 의해 타일링되고 이동되어 최내 차원들이다. 이들 타일링 및 재순서화들음 임베딩을 위해 고정된다. 다른 루프들 및 텐서 차원들은 추가 성능 최적화를 위해 자유롭게 변환된다. 이들 최적화들은 루프 타일링, 재순서화 또는 융합을 포함한다. AutoTVM은 모든 conv2d 계층에 대한 최상의 최적화 파라미터들을 자동으로 결정하기 위해 사용되었다. 임베딩된 명령어들을 갖는 코드는 TVM의 VTA 프로그래밍 도구 흐름에 의해 발생되었다.
실험들은 전문가 제조 참조 구현과 유사한 구조 및 성능을 갖는 구현들을 자동으로 발생시키는 것이 가능했던 점을 입증하였다. 흥미롭게도, 벤치마크 계산들의 일부에 대해, 결정된 가능한 호출들에 기초하여 발생된 코드는 참조 구현과 비교하여 상당한 속력증가를 달성하였다. 즉, 일부 벤치마크 계산들에 대해, 참조 구현은 그의 정적 임베딩 전략으로 인해 매우 낮은 하드웨어를 이용을 달성한다. 이들 계산들을 위해, ×2.49까지의 인자에 의한 속력증가가 달성되었고, 개별 연산자들에 대해, ×238만큼 높은 개선들이 관찰되었다. 따라서, 이들 시나리오들에서, 결정된 호출들에 따라 자동으로 발생된 코드는 상당한 성능 개선을 제공하였다.
다른 실험에서, 제공된 기술들은 DNN의 계산들 텐서 레이아웃을 동적으로 변경하기 위해 사용되었다. 제약 만족 문제에 대한 솔루션은 어느 차원들이 필요한지, 및 따라서 어느 차원들이 자유로운지를 표시하여, 자유 차원들의 메모리 레이아웃이 코드 발생 동안 변경되는 것을 허용한다. 이 실험에서, 제약 솔버는 NHWC(N=batch size, H=height, W=width, C=channel) 레이아웃에 따라 가능한 호출들을 발생시키기 위해 사용되었다. 많은 경우들에서, 이것은 참조 구현에 의해 사용되는 NCHW 레이아웃과 비교하여 성능을 개선하는 것으로 발견되었다.
추가 실험에서, 메모리 액세스 제약들은 이전 실험들과 비교하여 완화되었다. 이것은 제약 만족 문제에 대한 솔루션들의 수를 증가시킨다. 논의된 바와 같이, 상기 실험들에서, 제약들은 참조 구현과 유사한 솔루션들을 획득하기 위해 포함되었다. 벤치마크 계산들의 일부를 위해, 이들 제약들은 ic/z<1이기 때문에, ic 차원에서 제로 패딩을 수행할 필요를 야기하여, 더 낮은 이용 및 더 큰 텐서들을 야기한다. 흥미롭게도, 이들 제약들을 완화함으로써, 더 적은 패닝을 요구하거나 어떠한 패딩도 요구하지 않는 가능한 호출들을 결정하고, 따라서 개선된 성능을 제공하는 것이 가능한 것으로 발견되었다. 특히, 필터 스텐실을 포함하여, 컨볼루션의 다수의 차원에서 매핑들을 허용하는 완화가 적용되었다. 제약들을 완화하는 것은 더 많은 상이한 경우들이 계산을 구현하기 위해 코드를 발생시킬 때 취급될 필요가 있지만, 여전히 실행가능한 것을 의미한다. 특히, 코드 발생은 다수의 텐서 차원을 하나의 차원으로의 융합, 및 스텐실 계산들의 데이터 액세스의 선형화를 지원하도록 적응되었다. 후자는 명시적으로 메모리에서, W[h+kh]와 같은, 스텐실에 의해 생성되는 액세스 패턴들을 복제하는 것을 수반한다. 언롤링된 차원의 새로운 풋프린트가 h'=h/stride*kh이지만, 결과를 계산하는 연산들의 총 수는 동일하게 유지된다. 생성된 오버헤드를 최소화하기 위해, 임베딩에 필요한 스텐실 차원들만이 언롤링되었다. VTA에 대한 코드를 발생시키기 위해, 원래 차원의 짝수 제수들인 텐서 분할 인자들이 사용되었다. 임의의 패딩을 갖지 않는 일 구현이 가능하지 않은 경우, 감소 차원들은 필요하면, 명령어 크기의 다음 짝수 제수에 자동으로 추가되었다.
특히, 메모리 레이아웃 변환들은 Relay 함수들로 구현되었다. 스텐실을 언롤링하는 연산자는 'relay.take()'를 사용하며, 수집 함수는 어떠한 직접적인 im2col 연산자도 Relay에 이용가능하지 않으므로, 어떤 값들을 카피할지를 결정하는 인덱스 리스트를 취한다.
기술들에 따라 발생된 구현들의 성능은 추론 및 메모리 변환 성능뿐만 아니라, 데이터 풋프린트의 점에서 평가되었다. 패딩을 갖는 TVM 참조 구현과 비교하여, 많은 경우들에서 메모리 풋프린트, 연산자 성능, 및/또는 전체 성능을 개선하는 것이 가능하다. 일부 경우들에서, 이것은 트레이드오프들을 수반하고, 성능 파라미터가 최적화되는지에 따라, 상이한 최적 구현들이 발견될 수 있다. 특히, 많은 경우들에서, 패딩에 의해 제어되는 유효 하드웨어 이용은 특히, ic=1을 갖는 계층들에서, 성능을 개선하는 중요한 인자이었다: ic<z이면, 이때 입력 이미지의 ic/zㆍ(hㆍw) 요소들만이 결과에 의미있게 기여하여, 유효 하드웨어 이용을 억제하고 제시된 기술을 특히 유리하게 한다. 발생된 호출들이 특히 잘 수행한 다른 상황들은 패딩이 가속기의 가중 버퍼의 용량을 초과하는 가중 텐서들을 생성하는 경우이다. 제공된 기술들로 발생된 구현들은 이것을 회피할 수 있으며, 이는 가속기가 온칩 버퍼에서 전체 가중 텐서를 유지할 수 있다는 효과를 가질 수 있다. 그러한 경우들에서, 특히 큰 성능의 속력증가들이 발견되었다.
도 6은 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하는 컴퓨터에 의해 구현되는 방법(600)의 블록도를 도시한다. 방법(600)은 도 1의 시스템(100)의 동작에 대응할 수 있다. 그러나, 이것은 방법(600)이 또한 다른 시스템, 장치 또는 디바이스를 사용하여 수행될 수 있다는 점에서, 제한이 아니다.
방법(600)은 제목이 "OBTAIN COMPUTATION DATA"인 동작에서, 계산 데이터를 획득하는 단계(610)를 포함할 수 있다. 계산 데이터는 계산을 표현한은 계산 데이터 흐름 그래프를 정의할 수 있다. 계산 데이터 흐름 그래프의 노드는 계산의 입력 또는 연산을 표현한다.
방법(600)은 제목이 "OBTAIN INSTRUCTION DATA"인 동작에서, 명령어 데이터를 획득하는 단계(620)를 포함할 수 있다. 명령어 데이터는 하드웨어 가속 명령어를 표현하는 명령어 데이터 흐름 그래프를 정의할 수 있다. 명령어 데이터 흐름 그래프의 노드는 하드웨어 가속 명령어의 입력 또는 연산을 표현할 수 있다.
방법(600)은 제목이 "DEFINE INSTRUCTION->COMPUTATION CSP"인 동작에서, 계산 데이터 및 명령어 데이터에 기초하여, 제약 만족 문제를 정의하는 단계(630)를 포함할 수 있다. 제약 만족 문제에 대한 솔루션은 계산에서 하드웨어 가속 명령어의 가능한 호출을 표현할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 노드들을 명령어 데이터 흐름 그래프의 노드들에 할당할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 할당된 노드들이 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행하는 하나 이상의 데이터 흐름 제약을 포함할 수 있다. 제약 만족 문제는 계산 데이터 흐름 그래프의 어느 노드들이 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 하나 이상의 입력 제약을 추가로 포함할 수 있다. 이들 제한들은 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과될 수 있다. 제약 만족 문제는 추가적인 제약들을 포함할 수 있다.
방법(600)은 제목이 "SOLVE CSP TO DETERMINE INVOCATION"인 동작에서, 계산에서 하드웨어 가속 명령어의 가능한 호출을 결정하기 위해 제약 만족 문제를 해결하는 단계(640)를 포함할 수 있다. 방법(600)은 제목이 "OUTPUT INVOCATION"인 동작에서, 가능한 호출을 정의하는 데이터를 출력하는 단계(650)를 포함할 수 있다.
일반적으로, 도 6의 방법(600)의 동작들이 임의의 적절한 순서로, 예를 들어, 연속적으로, 동시에, 또는 그의 조합으로, 적절한 경우에, 예를 들어, 입력/출력 관계들에 의해 필요하게 되는 특정 순서의 조건으로서 수행될 수 있다는 점이 이해될 것이다.
방법(들)은 컴퓨터 상에 컴퓨터에 의해 구현되는 방법으로서, 전용 하드웨어로서, 또는 둘 다의 조합으로서 구현될 수 있다. 또한 도 7에 예시된 바와 같이, 컴퓨터에 대한 명령어들, 예를 들어, 실행가능 코드는 컴퓨터 판독가능 매체(700) 상에, 예를 들어, 머신 판독가능 물리적 마크들의 시리즈(710)의 형태로 그리고/또는 상이한 전기, 예를 들어, 자기, 또는 광학 성질들 또는 값들을 갖는 일련의 요소들로서 저장될 수 있다. 실행가능 코드는 일시적 또는 비일시적 방식으로 저장될 수 있다. 컴퓨터 판독가능 매체들의 예들은 메모리 디바이스들, 광 저장 디바이스들, 집적 회로들, 서버들, 온라인 소프트웨어 등을 포함한다. 도 7은 광 디스크(700)를 도시한다.
대안적으로, 컴퓨터 판독가능 매체(700)는 하드웨어 가속 명령어를 지원하는 프로세서 시스템, 예를 들어, 도 2의 시스템(200)에 의해 실행될 때, 프로세서 시스템이 계산을 수행하게 하는 명령어들을 표현하는 일시적 또는 비일시적 데이터(710)를 포함할 수 있으며, 상기 명령어들은 본원에서 설명된 바와 같이 결정되는 가능한 호출에 따라 하드웨어 가속 명령어를 호출한다.
더욱이, 하드웨어 가속 명령어를 지원하는 프로세서 시스템에 의해, 결정된 가능한 호출에 따라 하드웨어 가속 명령어를 호출하는 명령어들을 실행하는 단계를 포함하는 컴퓨터에 의해 구현되는 방법이 예상된다.
예들, 실시예들 또는 임의적 특징들은 비제한적인 것으로서 표시되든 안되든, 청구된 바와 같이 발명을 제한으로서 이해되지 않아야 한다.
위에 언급된 실시예들이 발명을 제한하기보다는 오히려 예시한다는 점, 및 본 기술분야의 통상의 기술자들이 첨부된 청구항들의 범위로부터 벗어나지 않고 많은 대안적인 실시예들을 디자인할 수 있다는 점이 주목되어야 한다. 청구항들에서, 괄호들 사이에 배치된 임의의 참조 부호들은 청구항을 제한하는 것으로 해석되지 않을 것이다. 동사 "포함한다" 및 그의 활용들의 사용은 청구항에 명시된 것들과 다른 요소들 또는 스테이지들의 존재를 배제하지 않는다. 요소에 선행하는 관사(하나의("a" 또는 "an"))는 복수의 그러한 요소의 존재를 배제하지 않는다. 요소들의 리스트 또는 그룹에 선행할 때 "중 적어도 하나"와 같은 표현들은 리스트 또는 그룹으로부터 요소들의 전부 또는 임의의 서브세트의 선택을 표현한다. 예를 들어, 표현, "A, B, 및 C 중 적어도 하나"는 A만, B만, C만, A 및 B 둘 다, A 및 C 둘 다, B 및 C 둘 다, 또는 A, B, 및 C의 전부를 포함하는 것으로 이해되어야 한다. 발명은 수개의 별개의 요소들을 포함하는 하드웨어에 의해 구현되고, 적절히 프로그래밍된 컴퓨터에 의해 구현될 수 있다. 수개의 수단을 열거하는 디바이스 청구항에에서, 이들 수단 중 수개는 하드웨어의 하나 및 동일한 아이템에 의해 구체화될 수 있다. 특정 조치들이 상호 상이한 종속항들에 나열된다는 단순한 사실은 이들 조치들의 조합이 유리하게 사용될 수 없는 것을 표시하지 않는다.

Claims (15)

  1. 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하는 컴퓨터에 의해 구현되는 방법(600)으로서,
    계산 데이터를 획득하는 단계(610) - 상기 계산 데이터는 상기 계산을 표현하는 계산 데이터 흐름 그래프를 정의하며, 상기 계산 데이터 흐름 그래프의 노드는 상기 계산의 입력 또는 연산을 표현함 -;
    명령어 데이터를 획득하는 단계(620) - 상기 명령어 데이터는 상기 하드웨어 가속 명령어를 표현하는 명령어 데이터 흐름 그래프를 정의하며, 상기 명령어 데이터 흐름 그래프의 노드는 상기 하드웨어 가속 명령어의 입력 또는 연산을 표현함 -;
    상기 계산 데이터 및 상기 명령어 데이터에 기초하여, 제약 만족 문제를 정의하는 단계(630) - 상기 제약 만족 문제에 대한 솔루션은 상기 계산에서 상기 하드웨어 가속 명령어의 가능한 호출을 표현하고, 상기 제약 만족 문제는 상기 계산 데이터 흐름 그래프의 노드들을 상기 명령어 데이터 흐름 그래프의 노드들에 할당하고, 상기 제약 만족 문제는 적어도,
    상기 계산 데이터 흐름 그래프의 할당된 노드들이 상기 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행하는 하나 이상의 제약;
    상기 계산 데이터 흐름 그래프의 어느 노드들이 상기 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 하나 이상의 제약을 포함하며, 상기 제한들은 상기 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과됨 -;
    상기 계산에서 상기 하드웨어 가속 명령어의 가능한 호출을 결정하기 위해 상기 제약 만족 문제를 해결하는 단계(640), 및 상기 가능한 호출을 정의하는 데이터를 출력하는 단계(650)
    를 포함하는, 방법(600).
  2. 제1항에 있어서, 상기 계산을 구현하는 머신 실행가능 명령어들을 발생시키는 단계를 추가로 포함하며, 상기 명령어들은 상기 결정된 가능한 호출에 따라 상기 하드웨어 가속 명령어를 호출하는, 방법(600).
  3. 제1항 또는 제2항에 있어서, 상기 계산의 연산 및/또는 상기 하드웨어 가속 명령어의 연산은 스칼라 연산인, 방법(600).
  4. 제3항에 있어서, 상기 하드웨어 가속 명령어는 행렬 곱셈, 컨볼루션, 내적, 행렬 벡터 곱, 누적 합, 풀링, 및 하다마드 곱 중 하나 이상을 구현하는, 방법(600).
  5. 제4항에 있어서, 상기 계산은 신경망 계층의 컨볼루션, 행렬 곱셈, 및 풀링 연산 중 하나 이상을 적용하는 단계를 포함하는, 방법(600).
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 명령어 데이터 흐름 그래프는 상기 하드웨어 가속 명령어의 출력들의 서브세트에 대해서만 노드들을 포함하며, 상기 방법은 상기 가능한 호출로부터 상기 계산의 연산들에 상기 하드웨어 가속 명령어의 추가 출력들의 매핑을 추론하는 단계를 추가로 포함하는, 방법(600).
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 계산 데이터는 상기 계산 데이터 흐름 그래프의 노드들의 세트를 상징적으로 정의하는 다면체 표현을 포함하고, 상기 제약 만족 문제를 해결하는 단계는 상기 노드들의 세트의 노드를 획득하기 위해 상기 다면체 표현을 인스턴스화하는 단계 및 상기 명령어 데이터 흐름 그래프의 노드를 상기 획득된 노드에 매핑하는 단계를 포함하는, 방법(600).
  8. 제1항 내지 제7항 중 어느 한 항에 있어서, 상기 방법은 상기 하드웨어 가속 명령어의 입력들이 허용된 메모리 레이아웃 및/또는 메모리 액세스 패턴을 갖는 것을 집행하기 위해 하나 이상의 제약을 정의하는 단계를 포함하는, 방법(600).
  9. 제1항 내지 제8항 중 어느 한 항에 있어서, 상기 방법은 상기 하드웨어 가속 명령어의 상호 병렬가능 연산들의 쌍들이 상기 계산의 상호 병렬가능 연산들의 쌍들에 매핑되는 것을 집행하기 위해 하나 이상의 제약을 정의하는 단계를 포함하는, 방법(600).
  10. 제1항 내지 제9항 중 어느 한 항에 있어서, 상기 명령어 데이터 흐름 그래프의 노드는 가환 감소 연산을 표현하고, 상기 방법은 상기 노드가 상기 계산 데이터 흐름 그래프의 대응하는 노드에 매핑되는 것을 집행하기 위해 하나 이상의 제약을 정의하는 단계를 포함하는, 방법(600).
  11. 제1항 내지 제10항 중 어느 한 항에 있어서, 상기 방법은 상기 계산에 영향을 미치지 않는 더미 연산들에 상기 하드웨어 가속 명령어의 연산들의 매핑을 허용하기 위해 상기 제약 만족 문제를 정의하는 단계를 포함하는, 방법(600).
  12. 제1항 내지 제11항 중 어느 한 항에 있어서, 상기 방법은 초사각형을 형성하기 위해 상기 하드웨어 가속 명령어의 입력들을 집행하는 하나 이상의 제약을 상기 제약 만족 문제에 포함시키는 단계를 포함하는, 방법(600).
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 상기 제약 만족 문제에 대한 다수의 솔루션을 결정하는 단계; 상기 다수의 솔루션의 성능을 평가하는 단계; 및 상기 성능 평가에 기초하여 상기 다수의 솔루션으로부터 솔루션을 선택하는 단계를 포함하는, 방법(600).
  14. 프로세서 시스템의 하드웨어 가속 명령어를 사용하여 계산을 구현하기 위한 시스템(100)으로서,
    계산 데이터(030) 및 명령어 데이터(040)에 액세스하기 위한 데이터 인터페이스(120) - 상기 계산 데이터는 상기 계산을 표현하는 계산 데이터 흐름 그래프를 정의하며, 상기 계산 데이터 흐름 그래프의 노드는 상기 계산의 입력 또는 연산을 표현하고; 상기 명령어 데이터는 상기 하드웨어 가속 명령어를 표현하는 명령어 데이터 흐름 그래프를 정의하고, 상기 명령어 데이터 흐름 그래프의 노드는 상기 하드웨어 가속 명령어의 입력 또는 연산을 표현함 -;
    프로세서 서브시스템(140)
    을 포함하며, 상기 프로세서 서브시스템은,
    상기 계산 데이터 및 상기 명령어 데이터를 획득하고;
    상기 계산 데이터 및 상기 명령어 데이터에 기초하여, 제약 만족 문제를 정의하며 - 상기 제약 만족 문제에 대한 솔루션은 상기 계산에서 상기 하드웨어 가속 명령어의 가능한 호출을 표현하고, 상기 제약 만족 문제는 상기 계산 데이터 흐름 그래프의 노드들을 상기 명령어 데이터 흐름 그래프의 노드들에 할당하고, 상기 제약 만족 문제는 적어도,
    상기 계산 데이터 흐름 그래프의 할당된 노드들이 상기 명령어 데이터 흐름 그래프와 동등한 데이터 흐름을 갖는 것을 집행하는 하나 이상의 제약;
    상기 계산 데이터 흐름 그래프의 어느 노드들이 상기 하드웨어 가속 명령어의 입력들에 할당될 수 있는지를 제한하는 하나 이상의 제약을 포함하며, 상기 제한들은 상기 하드웨어 가속 명령어 및/또는 그의 프로그래밍 인터페이스에 의해 부과됨 -;
    상기 계산에서 상기 하드웨어 가속 명령어의 가능한 호출을 결정하기 위해 상기 제약 만족 문제를 해결하고, 상기 가능한 호출을 정의하는 데이터를 출력하도록
    구성되는, 시스템(100).
  15. 일시적 또는 비일시적 데이터(710)를 포함하는 컴퓨터 판독가능 매체(700)로서, 상기 데이터는,
    프로세서 시스템에 의해 실행될 때, 상기 프로세서 시스템으로 하여금 제1항 내지 제13항 중 어느 한 항에 따라 컴퓨터에 의해 구현되는 방법을 수행하게 하는 명령어들; 및/또는
    하드웨어 가속 명령어를 지원하는 프로세서 시스템에 의해 실행될 때, 상기 프로세서 시스템으로 하여금 계산을 수행하게 하는 명령어들
    을 표현하며, 상기 명령어들은 제1항 내지 제13항 중 어느 한 항의 컴퓨터에 의해 구현되는 방법을 사용하여 결정되는 가능한 호출에 따라 상기 하드웨어 가속 명령어를 호출하는, 컴퓨터 판독가능 매체(700).
KR1020220021476A 2021-02-19 2022-02-18 하드웨어 가속 명령어들의 사용 KR20220118948A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
DE102021201597.2A DE102021201597A1 (de) 2021-02-19 2021-02-19 Verwenden von hardware-beschleunigten befehlen
DE102021201597.2 2021-02-19

Publications (1)

Publication Number Publication Date
KR20220118948A true KR20220118948A (ko) 2022-08-26

Family

ID=82702180

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220021476A KR20220118948A (ko) 2021-02-19 2022-02-18 하드웨어 가속 명령어들의 사용

Country Status (5)

Country Link
US (1) US20220276865A1 (ko)
JP (1) JP2022127619A (ko)
KR (1) KR20220118948A (ko)
CN (1) CN114968249A (ko)
DE (1) DE102021201597A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11656854B2 (en) * 2021-08-30 2023-05-23 Huawei Technologies Co., Ltd. Methods and devices for computing a memory size for software optimization

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7299458B2 (en) * 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US7523445B1 (en) * 2007-12-12 2009-04-21 International Business Machines Corporation Method for generating an explanation of a CSP solution
US20150074652A1 (en) * 2013-09-10 2015-03-12 International Business Machines Corporation Avoiding similar counter-examples in model checking
KR102204282B1 (ko) * 2013-11-25 2021-01-18 삼성전자주식회사 다수의 기능 유닛을 가지는 프로세서를 위한 루프 스케쥴링 방법
US20190278593A1 (en) * 2018-03-09 2019-09-12 Nvidia Corporation Accelerating linear algebra kernels for any processor architecture
US11669060B2 (en) * 2019-08-19 2023-06-06 Invenia Labs Limited Hybrid machine learning and simulation based system for forecasting in electricity systems
US11693636B2 (en) * 2021-01-15 2023-07-04 Reservoir Labs Inc. Static versioning in the polyhedral model

Also Published As

Publication number Publication date
DE102021201597A1 (de) 2022-08-25
JP2022127619A (ja) 2022-08-31
CN114968249A (zh) 2022-08-30
US20220276865A1 (en) 2022-09-01

Similar Documents

Publication Publication Date Title
Kidder et al. SpECTRE: a task-based discontinuous Galerkin code for relativistic astrophysics
CN107145344B (zh) 在基于图的程序中指定组件
CN103403700A (zh) 用于在mapreduce环境中处理机器学习算法的系统和方法
JP2020518881A (ja) コンピュータに実装する方法、コンピュータ可読媒体および異種計算システム
WO2021000971A1 (zh) 操作数据的生成方法、装置及相关产品
Ballard Avoiding communication in dense linear algebra
Huchant et al. Automatic OpenCL task adaptation for heterogeneous architectures
Etter Parallel ALS algorithm for solving linear systems in the hierarchical Tucker representation
KR20220118948A (ko) 하드웨어 가속 명령어들의 사용
Heene A massively parallel combination technique for the solution of high-dimensional PDEs
Schuchart et al. Global task data-dependencies in pgas applications
Larsen Simple optimizations for an applicative array language for graphics processors
Baden Run-time partitioning of scientific continuum calculations running on multiprocessors
Incardona et al. Distributed sparse block grids on GPUs
Odemuyiwa et al. The EDGE language: Extended general einsums for graph algorithms
Köppe et al. New computer-based search strategies for extreme functions of the Gomory–Johnson infinite group problem
Schanen et al. Transparent Checkpointing for Automatic Differentiation of Program Loops Through Expression Transformations
Claus Jensen et al. Symbolic model checking of weighted PCTL using dependency graphs
Thoman et al. Command Horizons: Coalescing Data Dependencies While Maintaining Asynchronicity
Jeannot Process mapping on any topology with TopoMatch
Mishra et al. OpenMP Advisor: A Compiler Tool for Heterogeneous Architectures
Böhl et al. Tunas-fishing for diverse answer sets: A multi-shot trade up strategy
Chatterjee et al. Porting DMRG++ scientific application to openpower
Mishra et al. A Multi-threaded Algorithm for Capacity Constrained Assignment over Road Networks
Mór An evolutionary approach for the task mapping problem