KR102326586B1 - 큰 규모 분산 행렬 곱 처리 방법 및 그 장치 - Google Patents
큰 규모 분산 행렬 곱 처리 방법 및 그 장치 Download PDFInfo
- Publication number
- KR102326586B1 KR102326586B1 KR1020190148945A KR20190148945A KR102326586B1 KR 102326586 B1 KR102326586 B1 KR 102326586B1 KR 1020190148945 A KR1020190148945 A KR 1020190148945A KR 20190148945 A KR20190148945 A KR 20190148945A KR 102326586 B1 KR102326586 B1 KR 102326586B1
- Authority
- KR
- South Korea
- Prior art keywords
- matrix
- cuboids
- cuboid
- size
- input
- Prior art date
Links
- 229940050561 matrix product Drugs 0.000 title claims abstract description 26
- 238000000034 method Methods 0.000 title claims description 53
- 238000012545 processing Methods 0.000 title description 65
- 239000011159 matrix material Substances 0.000 claims abstract description 254
- 238000004364 calculation method Methods 0.000 claims abstract description 27
- 238000009825 accumulation Methods 0.000 claims abstract description 9
- 238000004891 communication Methods 0.000 claims description 26
- 238000000638 solvent extraction Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 6
- 238000010586 diagram Methods 0.000 description 17
- 230000001186 cumulative effect Effects 0.000 description 16
- 230000014509 gene expression Effects 0.000 description 7
- 239000006185 dispersion Substances 0.000 description 4
- 230000008569 process Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- BQCADISMDOOEFD-UHFFFAOYSA-N Silver Chemical compound [Ag] BQCADISMDOOEFD-UHFFFAOYSA-N 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 229910052709 silver Inorganic materials 0.000 description 1
- 239000004332 silver Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Abstract
본 발명의 행렬 곱 연산 장치는 제1 입력 행렬 및 제2 입력 행렬을 저장하는 보조 기억 장치, 상기 제1 입력 행렬, 상기 제2 입력 행렬, CPU 메모리 크기 및 GPU 메모리 크기를 기초로 복수의 큐보이드 후보군 및 복수의 하위 큐보이드 후보군을 생성하는 큐보이드 후보군 결정 모듈, 상기 복수의 큐보이드 후보군 중 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드의 크기를 결정하고, 상기 복수의 하위 큐보이드 후보군 중 상기 GPU 메모리 크기를 기초로 상기 복수의 하위 큐보이드의 크기를 결정하는 큐보이드 크기 결정 모듈, 상기 큐보이드 크기 결정 모듈에서 결정한 복수의 큐보이드의 크기를 기초로 상기 제1 입력 행렬 및 상기 제2 입력 행렬을 상기 복수의 큐보이드로 분할하는 행렬 분할 모듈, 상기 큐보이드 크기 결정 모듈에서 결정한 복수의 하위 큐보이드의 크기를 기초로 획득된 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 수행하는 행렬 곱 계산 모듈 및 상기 행렬 곱 계산 모듈에서 획득한 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 누적하는 행렬 블록 누적 모듈을 포함할 수 있다.
Description
본 발명은 그래픽 처리 장치를 이용하여 큰 규모의 분산 행렬 곱을 처리하는 방법 및 그 장치에 관한 것이다. 보다 상세하게 그래픽 처리 장치를 이용하여 통신 비용이 낮은 행렬 곱 연산을 수행하는 방법 및 그 장치에 관한 것이다.
행렬 곱은 현대 추천시스템과 기계학습부터 전통적인 선형 시스템과 그래픽 렌더링까지 컴퓨터 과학 분야의 대부분 알고리즘들에서 근간이 되는 기본적인 연산자로써 널리 사용되어 왔다.
특히, 최근 추천 시스템과 기계학습에서 사용되는 행렬 데이터의 크기가 증가함에 따라 하나의 노드에서 행렬 곱 연산을 수행 하기 어렵게 되자, 네트워크로 계산 노드가 연결되어 있는 병렬 및 분산 행렬 시스템을 활용하여 행렬을 계산 노드들에게 분산하여 행렬 곱 연산 처리가 가능한 장점 때문에 최근 분산 행렬 곱 방법의 중요성이 더욱 강조되고 있다.
다만, 분산 행렬 곱을 수행하기 위하여는 방대한 양의 메모리 비용 및 네트워크 비용이 소요된다는 한계가 존재한다. 이에 따라, 많은 양의 메모리 비용 및 네트워크 비용이 소요되지 않는 행렬 곱 연산을 수행할 수 있는 기술의 제공이 요구된다.
본 발명은 행렬의 크기 및 하드웨어의 성능에 관계 없이 효율적으로 행렬 곱 연산을 수행할 수 있는 방법 및 그 장치를 제공하는 것을 일 목적으로 한다.
본 발명은 시스템 자원을 최대한 활용하면서 큰 규모의 행렬 곱 연산을 수행할 수 있는 방법 및 그 장치를 제공하는 것을 일 목적으로 한다.
그러나 이러한 과제는 예시적인 것으로, 이에 의해 본 발명의 범위가 한정되는 것은 아니다.
본 발명의 일 실시예에 따른 행렬 곱 연산 장치는 제1 입력 행렬 및 제2 입력 행렬을 저장하는 보조 기억 장치, 상기 제1 입력 행렬, 상기 제2 입력 행렬, CPU 메모리 크기 및 GPU 메모리 크기를 기초로 복수의 큐보이드 후보군 및 복수의 하위 큐보이드 후보군을 생성하는 큐보이드 후보군 결정 모듈, 상기 복수의 큐보이드 후보군 중 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드의 크기를 결정하고, 상기 복수의 하위 큐보이드 후보군 중 상기 GPU 메모리 크기를 기초로 상기 복수의 하위 큐보이드의 크기를 결정하는 큐보이드 크기 결정 모듈, 상기 큐보이드 크기 결정 모듈에서 결정한 복수의 큐보이드의 크기를 기초로 상기 제1 입력 행렬 및 상기 제2 입력 행렬을 상기 복수의 큐보이드로 분할하는 행렬 분할 모듈, 상기 큐보이드 크기 결정 모듈에서 결정한 복수의 하위 큐보이드의 크기를 기초로 획득된 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 수행하는 행렬 곱 계산 모듈, 및 상기 행렬 곱 계산 모듈에서 획득한 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 누적하는 행렬 블록 누적 모듈을 포함할 수 있다.
일 실시예에서 상기 보조 기억 장치는, 상기 행렬 곱 계산 모듈에서 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산 결과로 생성된 복수의 중간 결과 행렬 및 상기 행렬 블록 누적 모듈에서 상기 복수의 중간 결과 행렬을 누적하여 생성된 결과 행렬을 더 저장할 수 있다.
일 실시예에서 상기 큐보이드 크기 결정 모듈은, 주 기억 장치와 보조 기억 장치간 통신 비용 및 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드 크기를 결정하고, CPU 와 GPU간 통신 비용 및 상기 GPU 메모리 크기를 기초로 상기 복수의 하위 큐보이드 크기를 결정할 수 있다.
일 실시예에서 상기 행렬 분할 모듈은, 상기 제1 입력 행렬의 차원(dimension) 및 상기 제2 입력 행렬의 차원(dimension)를 기초로 3차원 공간을 생성하고, 상기 3차원 공간에 상기 제1 입력 행렬 및 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성하고, 상기 3차원 모델을 분할하여 상기 복수의 큐보이드를 생성할 수 있다.
일 실시예에서 상기 행렬 곱 계산 모듈은, GPU의 스트림을 이용하여 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 병렬적으로 수행할 수 있다.
본 발명의 다른 실시예에 따른 행렬 곱 계산 방법은 제1 입력 행렬 및 제2 입력 행렬을 수신하는 단계, 상기 제1 입력 행렬의 행 차원(row dimension)에 대응되는 제1 축, 상기 제1 입력 행렬의 열 차원(column dimension)에 대응되는 제2 축 및 제2 입력 행렬의 열 차원(column dimension)에 대응되는 제3 축을 기초로 3차원 공간을 생성하고, 상기 3차원 공간 상에 상기 제1 입력 행렬과 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성하는 단계, 상기 3차원 모델을 CPU 메모리 크기를 기초로 복수의 큐보이드로 분할하는 단계, 상기 복수의 큐보이드 각각을 GPU 메모리 크기를 기초로 복수의 하위 큐보이드로 분할하는 단계, GPU를 이용하여 상기 복수의 하위 큐보이드 각각에 대응되는 행렬 원소들 간 곱 연산 결과를 획득하고, 상기 획득된 행렬 원소들 간 곱 연산 결과를 이용하여 중간 결과 행렬을 생성하는 단계 및 CPU를 이용하여 상기 중간 결과 행렬을 누적하여 결과 행렬을 생성하는 단계를 포함할 수 있다.
일 실시예에서 상기 제2 입력 행렬의 행 차원은, 상기 제1 입력 행렬의 열 차원과 동일하다.
일 실시예에서 상기 큐보이드는, 복수의 복셀로 구성되며, 복셀 vi,j,k 는 상기 제1 입력 행렬의 행렬 원소 (i, k)와 상기 제2 입력 행렬의 행렬 원소 (k, j) 간 곱 연산과 대응될 수 있다.
일 실시예에서 상기 결과 행렬은, 복수의 복셀의 합과 대응되는 행렬 원소 (i,j)로 구성될 수 있다.
일 실시예에서 상기 복수의 큐보이드로 분할하는 단계는, 상기 CPU의 주 기억 장치와 상기 CPU의 보조 기억 장치 간 통신 비용 및 상기 CPU 메모리 크기를 기초로 상기 3차원 모델을 상기 복수의 큐보이드로 분할하는 단계를 포함할 수 있다.
일 실시예에서 상기 복수의 하위 큐보이드로 분할하는 단계는, 상기 CPU와 상기 GPU 간 통신 비용 및 상기 GPU 메모리 크기를 기초로 상기 복수의 큐보이드 각각을 상기 복수의 하위 큐보이드로 분할하는 단계를 포함할 수 있다.
본 발명의 또 다른 실시예에 따른 컴퓨터 프로그램은 컴퓨터를 이용하여 제1항 내지 제5항 중 어느 한 항의 방법을 실행시키기 위하여 기록 매체에 저장될 수 있다.
이에 한정되지 않고 본 발명의 또 다른 실시예에 따른 분산 행렬 곱 방법은 각각 IХK의 블록들과 KХJ의 블록들을 가지는 두 개의 행렬들을 입력 행렬들을 가지며 그 결과는 IХJ의 블록들을 가지는 행렬을 생성하는 것으로 기초로, 입력 행렬들을 큐보이드 기반 분할하는 단계, 상기 큐보이드들을 기초하여 그래픽 처리 장치 기반 행렬 곱 단계, 상기 큐보이드의 결과인 중간 결과 블록들을 정확한 결과 행렬 블록들로 생성하기 위한 행렬 누적 합 단계를 포함할 수 있다.
일 실시예에 따르면, 상기 분산 행렬 곱 방법이 적용되는 행렬 계산 시스템은 병렬 처리 머신에서 구동이 되고 각 단계들을 제어하는 복수의 중앙 처리 장치, 입력 행렬들의 일부 블록들을 임시로 저장하는 주 기억 장치, 행렬 곱을 계산하는 그래픽 처리 장치, 입력 행렬들과 결과 행렬 모두를 저장하는 보조 기억장치를 포함할 수 있다.
일 실시예에서 상기 행렬 계산 시스템은 컨트롤 그룹을 통해 관리된다. 상기 컨트롤 그룹은 병렬 처리 머신의 경우 중앙 처리 장치의 하나의 쓰래드(thread)이고, 다수의 머신들로 구성된 소규모 클러스터의 경우 분산 처리 시스템을 위한 마스터-슬레이브 구조의 마스터 노드에 해당하는 머신일 수 있다.
일 실시예에서 상기 컨트롤 그룹은 상기 큐보이드 기반 분할 단계를 수행하는 큐보이드 기반 행렬 분할기, 상기 그래픽 처리 장치 기반 행렬 곱 단계를 수행하기 위해 각 큐보이드를 그래픽 처리 장치에서 다수의 스트림을 이용하여 계산하는 그래픽 처리 장치 실행기, 상기 행렬 누적 합 단계를 수행하기 위한 행렬 누적 합 실행기를 포함할 수 있다.
일 실시예에서 상기 큐보이드 기반 행렬 분할기는 사용자 혹은 시스템으로부터 입력 행렬들의 메타 정보인 차원의 크기, 희소성, 크기 등과 시스템 정보인 전체 코어들의 수, 노드의 수, 코어가 사용 가능한 주 기억 장치의 크기와 코어가 사용 가능한 그래픽 처리 장치의 크기 등을 기초로, 큐보이드 후보군 결정 모듈, 상기 후보군에서 최적의 큐보이드 분할 방법의 파라미터 선택하는 큐보이드 크기 결정 모듈, 상기 파라미터를 활용한 입력 행렬들에 대한 행렬 분할 모듈을 포함할 수 있다.
일 실시예에서 상기 큐보이드 후보군 결정 모듈은 입력 인자가 행렬 일 경우 행렬 곱을 3차원 모델로 표현하여 3차원 모델을 다수의 큐보이드 형태로 분할 할 수 있는 모든 경우에 대한 큐보이드 후보군을 결정하고, 입력 인자가 큐보이드 일 경우 해당 큐보이드를 다수의 하위 큐보이드들로 분할 할 수 있는 모든 경우에 대한 하위 큐보이드 후보군을 결정할 수 있다.
일 실시예에서 상기 큐보이드 크기 결정 모듈은 상기 큐보이드 후보군 결정 모듈에서 큐보이드 후보군을 전달 받을 경우 해당 후보군을 탐색하면서 코어 별 사용 가능한 주 기억 장치 크기에 알맞은 큐보이드 크기를 결정하는 후보군들 중 최소의 통신 비용을 발생하는 후보군을 선택하여 큐보이드 크기를 결정하고, 하위 큐보이드 후보군을 전달 받을 경우 해당 후보군 중 사용 가능한 그래픽 주 기억 장치의 크기에 알맞으면서 주 기억 장치와 그래픽 처리 장치 간의 통신 비용이 최소화하는 후보군을 선택하여 하위 큐보이드 크기를 결정할 수 있다.
일 실시예에서 상기 행렬 분할 모듈은 상기 큐보이드 크기 결정 모듈에서 결정된 파라미터를 기반으로 입력 행렬들을 다수의 큐보이드로 구성하며, 각 큐보이드를 해쉬 기반 혹은 임의의 방법으로 담당하게 될 코어들 혹은 노드들에게 할당할 수 있다.
일 실시예에서 상기 그래픽 처리 장치 실행기는 그래픽 처리 장치의 스트림들을 관리하는 스트림 모듈, 그래픽 처리 장치에서 하위 큐보이드를 계산하는 행렬 곱 계산 모듈을 포함할 수 있다.
일 실시예에서 상기 스트림 모듈은 그래픽 처리 장치의 실행을 비동기적으로 수행 할 수 있도록 해주는 다수의 스트림들을 관리할 수 있다.
일 실시예에서 상기 행렬 곱 계산 모듈은 상기 큐보이드 기반 행렬 분할기에서 하위 큐보이드 분할을 위해 결정된 파라미터를 기반으로 큐보이드를 다수의 하위 큐보이드로 구성하여 스트림 모듈에서 관리되는 스트림들 중 일부를 활용하여 하위 큐보이드에 대한 행렬 곱을 계산할 수 있다.
일 실시예에서 상기 행렬 누적 합 실행기는 상기 그래픽 처리 장치 실행기에 의해서 계산된 큐보이드들의 중간 결과 행렬 블록들을 결과 행렬 블록들로 생성하기 위해서 코어들 혹은 노드들간 셔플(shuffle)하여 누적 합계를 계산하는 행렬 블록 누적 모듈을 이용하여 상기 분산 행렬 곱의 마지막 단계인 행렬 누적 합 단계를 수행할 수 있다.
일 실시예에서 상기 행렬 계산 시스템은 복수의 중앙 처리 장치, 주 기억 장치와 PCI_E 및 SATA 인터페이스로 연결된 복수의 그래픽 처리 장치와 보조 기억 장치로 구성되어 있다. 행렬 계산 시스템의 중앙 처리 장치가 가진 계산 자원인 코어 (Core)와 그래픽 처리 장치가 가진 스트림(Stream)을 이용하여 그래픽 처리 장치의 코어와 기억 장치들 (주 기억 장치와 그래픽 주 기억 장치)를 가용 메모리 크기를 전부 사용할 수 있다. 주 기억 장치는 다수의 큐보이드들이 적재되며, 그래픽 주 기억 장치에는 다수의 하위 큐보이드들이 적재될 수 있다.
일 실시예에서 상기 각 계산 자원인 주 기억 장치와 코어는 큐보이드를 할당 받아 해당 큐보이드를 해당 코어가 사용 가능한 그래픽 주 기억 장치의 크기에 따라서 최적의 파라미터를 선택하여 하위 큐보이드로 구성하는 것을 수행하며, 생성된 하위 큐보이드들은 데이터 전송을 최소화한 순서로 그래픽 처리 장치의 스트림들에 의해서 그래픽 처리 장치의 코어들에서 행렬 곱 계산되며, 하위 큐보이드들이 계산이 끝난 이후에 각 스트림들은 중간 결과 블록들을 그래픽 주 기억 장치에서 주 기억 장치로 전송 할 수 있다.
일 실시예에서 상기 중앙 처리 장치의 코어는 중간 결과 블록들을 셔플하여 누적 합 계산을 수행한 이후, 결과 행렬 블록들을 보조 기억 장치로 저장할 수 있다.
상기한 바와 같이 이루어진 본 발명의 일 실시예에 따르면, 병렬 처리 머신에서 사용 가능한 기억 장치들의 크기보다 큰 행렬들에 대한 행렬 곱 연산을 수행할 수 있다.
본 발명의 일 실시예에 따른 행렬 곱 수행 방법은 입력 행렬들에 대한 정보를 기초로 정해진 비용 기반 모델을 이용하여 효율적인 통신 비용으로 행렬 곱 연산을 수행할 수 있다.
본 발명은 기존의 시스템에서 분산 행렬 곱을 수행 할 때 이용하지 못하는 그래픽 처리 장치를 이용하기 위해 이론적으로 동일한 큐보이드 기반 분할 방법을 통해 그래픽 주 기억 장치의 크기보다 큰 행렬에 대한 행렬 곱이 가능하나, 이러한 효과에 의해 본 발명의 범위가 한정되는 것은 아니다.
도 1은 일 실시예에 따른 행렬 곱 연산 장치를 포함하는 행렬 계산 시스템을 설명하기 위한 도면이다
도 2는 본 발명의 도면에 사용된 기호 및 그 의미를 설명하기 위한 표이다.
도 3은 일 실시예에 따른 행렬 곱 연산 방법을 설명하기 위한 순서도이다.
도 4는 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드 기반 행렬 분할 방법을 설명하기 위한 순서도이다.
도 5는 도 4의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드 기반 행렬 분할을 위한 최적의 파라미터를 선택하는 방법을 설명하기 위한 순서도이다.
도 6은 도 4의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따라 선택된 파라미터를 이용하여 입력 행렬을 분할 하는 방법을 설명하기 위한 도면이다.
도 7은 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따라 그래픽 처리 장치 기반 행렬 곱 방법을 설명하기 위한 순서도이다..
도 8은 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 하위 큐보이드를 결정하기 위한 최적의 파라미터를 선택하는 방법을 나타낸 흐름도.
도 9는 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드를 다수의 하위 큐보이드로 분할 하는 방법을 설명하기 위한 순서도이다.
도 10은 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 그래픽 처리 장치에서 하위 큐보이드에 속하는 블록들에 대한 행렬 곱 계산하는 방법을 설명하기 위한 순서도이다.
도 11은 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 분산 행렬 곱 방법에서 행렬 누적 합 방법을 설명하기 위한 도면이다.
도 12는 일 실시예에 따른 큐보이드 기반 행렬 분할 방법을 설명하기 위한 예시도이다.
도 2는 본 발명의 도면에 사용된 기호 및 그 의미를 설명하기 위한 표이다.
도 3은 일 실시예에 따른 행렬 곱 연산 방법을 설명하기 위한 순서도이다.
도 4는 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드 기반 행렬 분할 방법을 설명하기 위한 순서도이다.
도 5는 도 4의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드 기반 행렬 분할을 위한 최적의 파라미터를 선택하는 방법을 설명하기 위한 순서도이다.
도 6은 도 4의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따라 선택된 파라미터를 이용하여 입력 행렬을 분할 하는 방법을 설명하기 위한 도면이다.
도 7은 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따라 그래픽 처리 장치 기반 행렬 곱 방법을 설명하기 위한 순서도이다..
도 8은 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 하위 큐보이드를 결정하기 위한 최적의 파라미터를 선택하는 방법을 나타낸 흐름도.
도 9는 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 큐보이드를 다수의 하위 큐보이드로 분할 하는 방법을 설명하기 위한 순서도이다.
도 10은 도 7의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 그래픽 처리 장치에서 하위 큐보이드에 속하는 블록들에 대한 행렬 곱 계산하는 방법을 설명하기 위한 순서도이다.
도 11은 도 3의 일부 동작을 상세히 설명하기 위한 도면으로, 일 실시예에 따른 분산 행렬 곱 방법에서 행렬 누적 합 방법을 설명하기 위한 도면이다.
도 12는 일 실시예에 따른 큐보이드 기반 행렬 분할 방법을 설명하기 위한 예시도이다.
이하, 본 개시의 다양한 실시예가 첨부된 도면과 연관되어 기재된다. 본 개시의 다양한 실시예는 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들이 도면에 예시되고 관련된 상세한 설명이 기재되어 있다. 그러나, 이는 본 개시의 다양한 실시예를 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 개시의 다양한 실시예의 사상 및 기술 범위에 포함되는 모든 변경 및/또는 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용되었다.
본 개시의 다양한 실시예에서 사용될 수 있는 "포함한다" 또는 "포함할 수 있다" 등의 표현은 개시(disclosure)된 해당 기능, 동작 또는 구성요소 등의 존재를 가리키며, 추가적인 하나 이상의 기능, 동작 또는 구성요소 등을 제한하지 않는다. 또한, 본 개시의 다양한 실시예에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
본 개시의 다양한 실시예에서 "또는" 등의 표현은 함께 나열된 단어들의 어떠한, 그리고 모든 조합을 포함한다. 예를 들어, "A 또는 B"는, A를 포함할 수도, B를 포함할 수도, 또는 A 와 B 모두를 포함할 수도 있다.
본 개시의 다양한 실시예에서 사용된 "제1", "제2", "첫째", 또는 "둘째" 등의 표현들은 다양한 실시예들의 다양한 구성요소들을 수식할 수 있지만, 해당 구성요소들을 한정하지 않는다. 예를 들어, 상기 표현들은 해당 구성요소들의 순서 및/또는 중요도 등을 한정하지 않는다. 상기 표현들은 한 구성요소를 다른 구성요소와 구분하기 위해 사용될 수 있다. 예를 들어, 제1 사용자 기기와 제2 사용자 기기는 모두 사용자 기기이며, 서로 다른 사용자 기기를 나타낸다. 예를 들어, 본 개시의 다양한 실시예의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 새로운 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 새로운 다른 구성요소가 존재하지 않는 것으로 이해될 수 있어야 할 것이다.
본 개시의 다양한 실시예에서 사용한 용어는 단지 특정일 실시예를 설명하기 위해 사용된 것으로, 본 개시의 다양한 실시예를 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 개시의 다양한 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다.
일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 개시의 다양한 실시예에서 명백하게 정의되지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
도 1은 일 실시예에 따른 행렬 계산 시스템의 구조를 나타낸 도면이다. 도 1을 참조하면, 일 실시예에 따른 행렬 곱 연산을 수행하는 행렬 계산 시스템(100)은 컨트롤 그룹(110)과 하드웨어 장치(160, 170)를 포함할 수 있다. 또한, 다른 실시예에서 행렬 곱 연산을 수행하는 행렬 곱 연산 장치는 컨트롤 그룹(110)을 포함할 수 있다. 일 실시예에서 컨트롤 그룹(110)은 제1 입력 행렬 및 제2 입력 행렬을 수신하고, 상기 제1 입력 행렬의 행 차원(row dimension)에 대응되는 제1 축, 상기 제1 입력 행렬의 열 차원(column dimension)에 대응되는 제2 축 및 제2 입력 행렬의 열차원(column dimension)에 대응되는 제3 축을 기초로 3차원 공간을 생성하고, 상기 3차원 공간 상에 상기 제1 입력 행렬과 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성하고, 상기 3차원 모델을 CPU 메모리 크기를 기초로 복수의 큐보이드로 분할하며, 상기 복수의 큐보이드 각각을 GPU 메모리 크기를 기초로 복수의 하위 큐보이드로 분할하고, GPU를 이용하여 상기 복수의 하위 큐보이드 각각에 대응되는 행렬 원소들 간 곱 연산 결과를 획득하고, 상기 획득된 행렬 원소들 간 곱 연산 결과를 이용하여 중간 결과 행렬을 생성하고, CPU를 이용하여 상기 중간 결과 행렬을 누적하여 결과 행렬을 생성할 수 있다.
보다 상세하게 일 실시예에서 컨트롤 그룹(110)은 큐보이드 기반 분할 단계를 수행하는 큐보이드 기반 행렬 분할기(120), 그래픽 처리 장치 기반 행렬 곱 단계를 수행하기 위해 각 큐보이드를 그래픽 처리 장치에서 다수의 스트림을 이용하여 계산하는 그래픽 처리 장치 실행기(130), 행렬 누적 합 단계를 수행하는 행렬 누적 합 실행기(140)를 포함할 수 있다.
일 실시예에서 큐보이드 기반 행렬 분할기(120)는 사용자 혹은 시스템으로부터 입력 행렬들의 차원(dimension)의 크기, 희소성, 행렬의 크기를 포함하는 입력 행렬의 메타 정보 컴퓨팅 장치의 코어들의 수, 노드의 수, 코어가 사용 가능한 주 기억 장치의 크기와 그래픽 처리 장치의 사용 가능한 그래픽 기억 장치의 크기를 포함하는 시스템 정보를 기초로 큐보이드를 결정하는 큐보이드 후보군 결정 모듈(121), 큐보이드 후보군 결정 모듈(121)에서 획득된 큐보이드 후보군을 기초로 큐보이드 분할 방법의 파라미터를 결정하는 큐보이드 크기 결정 모듈(122) 및 큐보이드 크기 결정 모듈(122)에서 결정된 파라미터를 이용하여 입력 행렬들을 각 코어에게 분할하는 행렬 분할 모듈(123)을 포함할 수 있다.
일 실시예에서 큐보이드 후보군 결정 모듈(121)은 제1 입력 행렬, 제2 입력 행렬, CPU 메모리 크기 및 GPU 메모리 크기를 기초로 복수의 큐보이드 후보군 및 복수의 하위 큐보이드 후보군을 생성할 수 있다.
먼저, 큐보이드 후보군 결정 모듈(121)은 복수의 입력 행렬을 이용하여 입력 행렬 간 행렬 곱을 3차원 모델로 표현할 수 있다. 보다 상세하게 큐보이드 후보군 결정 모듈(121)은 복수의 입력 행렬에 포함된 제1 입력 행렬 및 제2 입력 행렬에 대하여, 상기 제1 입력 행렬의 행 차원(row dimension)에 대응되는 제1 축, 상기 제1 입력 행렬의 열 차원(column dimension)에 대응되는 제2 축 및 제2 입력 행렬의 열 차원(column dimension)에 대응되는 제3 축을 기초로 3차원 공간을 정의할 수 있다. 이후, 큐보이드 후보군 결정 모듈(121)은 상기 3차원 공간 상에 상기 제1 입력 행렬과 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성할 수 있다.
일 실시예에서 큐보이드 후보군 결정 모듈(121)은 3차원 모델을 다수의 큐보이드 형태로 분할 할 수 있는 모든 경우에 대한 큐보이드 후보군을 획득할 수 있다.다른 실시예에서 큐보이드 후보군 결정 모듈(121)은 큐보이드를 다수의 하위 큐보이드들로 분할 할 수 있는 모든 경우에 대한 하위 큐보이드 후보군을 획득할 수 있다.
일 실시예에서 큐보이드 크기 결정 모듈(122)은 복수의 큐보이드 후보군 중 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드의 크기를 결정하고, 상기 복수의 하위 큐보이드 후보군 중 상기 GPU 메모리 크기를 기초로 상기 복수의 하위 큐보이드의 크기를 결정할 수 있다.
일 실시예에서 큐보이드 크기 결정 모듈(122)은 큐보이드 후보군 결정 모듈(121)로부터 복수의 큐보이드 후보군을 수신할 수 있다. 본 실시예에서 큐보이드 크기 결정 모듈(122)은 코어 별 사용 가능한 주 기억 장치 크기 및 통신 비용을 기초로 큐보이드의 크기를 결정할 수 있다. 예를 들어, 큐보이드 크기 결정 모듈(122)은 코어 별 사용 가능한 주 기억 장치 크기에 알맞은 파라미터 후보들 중 최소의 통신 비용을 발생하는 파라미터를 선택하여 큐보이드 크기를 결정할 수 있다.
다른 실시예에서 큐보이드 크기 결정 모듈(122)은 큐보이드 후보군 결정 모듈(121)로부터 복수의 하위 큐보이드 후보군을 수신할 수 있다. 본 실시예에서 큐보이드 크기 결정 모듈(122)은 사용 가능한 그래픽 주 기억 장치의 크기 및 주 기억 장치와 그래픽 처리 장치 간의 통신 비용을 기초로 하위 큐보이드의 크기를 결정할 수 있다. 예를 들어, 큐보이드 크기 결정 모듈(122)은 사용 가능한 그래픽 주 기억 장치의 크기에 알맞은 파라미터중 주 기억 장치와 그래픽 처리 장치 간의 통신 비용이 최소화하는 파라미터를 이용하여 하위 큐보이드의 크기를 결정할 수 있다.
일 실시예에서 행렬 분할 모듈(123)은 상기 큐보이드 크기 결정 모듈에서 결정된 파라미터를 기반으로 보조 기억 장치(163)에서 입력 행렬(166)들을 다수의 큐보이드(165)로 분할할 수 있다. 이후, 행렬 분할 모듈(123)은 전술한 다수의 큐보이드에 대한 연산을 수행할 컴퓨팅 장치의 코어들(또는 노드들)을 지정할 수 있다.
그래픽 처리 장치 실행기(130)는 그래픽 처리 장치의 스트림(171)들을 관리하는 스트림 모듈(131) 및 그래픽 처리 장치에서 하위 큐보이드에 대한 연산을 수행하는 행렬 곱 계산 모듈(132)을 포함할 수 있다.
일 실시예에서 스트림 모듈(131)은 복수의 스트림(171)들을 이용하여 그래픽 처리 장치(170)의 실행을 비동기적으로 수행하도록 할 수 있다.
행렬 곱 계산 모듈(132)은 스트림 모듈(131)에서 관리되는 스트림(171)을 이용하여 하위 큐보이드에 대한 행렬 곱 연산을 수행할 수 있다.
행렬 누적 합 실행기(140)는 상기 그래픽 처리 장치 실행기(130)에 의해서 계산된 큐보이드들의 중간 결과 행렬들을 결과 행렬들로 생성하기 위해서 코어들 혹은 노드들 간 셔플(shuffle)을 수행하여 누적 합계를 계산하는 행렬 블록 누적 모듈(141)을 포함할 수 있다.
일 실시예에서 행렬 블록 누적 모듈(141)은 중간 결과 행렬의 블록을 누적하여 결과 행렬의 블록을 생성할 수 있고, 이를 통해 행렬 곱 연산의 최종 결과 행렬을 획득할 수 있다.
일 실시예에서 행렬 곱 연산 장치는 컴퓨팅 장치(160)와 그래픽 처리 장치(170)를 포함할 수 있다. 컴퓨팅 장치(160)와 그래픽 처리 장치(170)는 PCI-E인터페이스(174)으로 연결될 수 있다.
일 실시예에서 컴퓨팅 장치(160)는 복수의 중앙 처리 장치(161), 주 기억 장치(162), 그리고 적어도 하나의 보조 기억 장치(163)를 포함할 수 있다. 중앙 처리 장치(161)는 행렬 곱 연산에서 수행되는 복수의 작업(164)들을 각 코어들에게 할당할 수 있다. 예를 들어 중앙 처리 장치(161)는 큐보이드 크기 결정 모듈(122)에서 결정된 파라미터를 이용하여 입력 행렬(166)을 각 코어들에게 할당할 수 있다.
전술한 작업(164)의 수는 병렬화 수준 및 중앙 처리 장치(161)가 가진 코어의 개수에 따라 결정될 수 있다. 주 기억 장치(162)는 큐보이드 기반 행렬 분할기(120)로부터 생성된 복수의 큐보이드(165)들을 저장할 수 있다. 중앙 처리 장치(161)와 주 기억 장치(162)는 메모리 컨트롤러(168)를 통행 연결될 수 있다. 또한, 주 기억 장치(162)와 보조 기억 장치(163)는 PCI-E 혹은 SATA 인터페이스(169)으로 연결될 수 있다. 다만 본 발명의 몇몇 실시예에 따른 행렬 곱 연산을 수행하는 컴퓨팅 장치(160)의 구성 및 구성 간 연결 관계가 이에 한정되는 것은 아니며, 각 구성은 통상의 기술자가 용이하게 설계 및 변경할 수 있는 다양한 인터페이스로 연결되어 있을 수 있음에 유의한다. 다만, 이 경우에도 적어도 모든 계산 노드들에 연결된 보조 기억 장치(163)는 최종 결과 행렬(167)의 크기보다 큰 용량이어야 함은 물론이다.
그래픽 처리 장치(170)는 그래픽 처리 장치의 코어들을 실행하기 위한 스트림(171)들과 그래픽 주 기억 장치(172)를 포함할 수 있다. 그래픽 주 기억 장치(172)는 큐보이드 기반 행렬 분할기(120)로부터 획득한 하위 큐보이드(173)들을 저장할 수 있다.
이하의 도 3 내지 도 12를 통해 본 발명의 몇몇 실시예에 따른 행렬 곱 연산 방법을 설명하기 위해 이용되는 기호의 의미는 도 2에 도시된 표에 따른 의미임을 가정한다.
도 3은 본 발명의 일 실시예에 따른 행렬 곱 연산 방법의 순서도이다.
일 실시예에 따른 행렬 곱 연산 방법은 입력 행렬들을 큐보이드로 분할(S100)하고, 획득된 복수의 큐보이드에 대하여 그래픽 처리 장치를 이용하여 행렬 곱 연산을 수행한 후(S200), 각 큐보이드를 통해 획득한 중간 결과 행렬에 대한 누적 합을 통해 결과 행렬을 획득할 수 있다(S300). 이하, 각 단계에서 수행되는 세부 단계에 대하여 상세히 설명한다.
단계 S100에서 큐보이드 기반 행렬 분할기(120)는 보조 기억 장치(163)의 입력 행렬(166)을 분할하여 주 기억 장치(162)에 복수의 큐보이드(165)로 저장할 수 있다.
보다 상세하게, 큐보이드 기반 행렬 분할기(120)는 제1 입력 행렬 및 제2 입력 행렬을 수신하고, 상기 제1 입력 행렬의 행 차원(row dimension)에 대응되는 제1 축, 상기 제1 입력 행렬의 열 차원(column dimension)에 대응되는 제2 축 및 제2 입력 행렬의 열 차원(column dimension)에 대응되는 제3 축을 기초로 3차원 공간을 생성하고, 상기 3차원 공간 상에 상기 제1 입력 행렬과 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성할 수 있다.
그리고, 큐보이드 기반 행렬 분할기(120)는 상기 3차원 모델을 CPU 메모리 크기를 기초로 복수의 큐보이드로 분할 할 수 있다. 큐보이드를 분할하는 방법에 대해서 도 4를 참조하여 설명한다.
이후, 단계 S200에서 상기 복수의 큐보이드 각각이 GPU 메모리 크기를 기초로 복수의 하위 큐보이드로 분할될 수 있고, GPU를 이용하여 상기 복수의 하위 큐보이드 각각에 대응되는 행렬 원소들 간 곱 연산 결과가 획득되고, 상기 획득된 행렬 원소들 간 곱 연산 결과를 이용하여 중간 결과 행렬이 생성될 수 있다.
보다 상세하게 전술한 복수의 큐보이드(165)들은 그래픽 처리 장치(170)의 자원 정보를 기초로 하위 큐보이드들로 분할 될 수 있다. 이후, 그래픽 처리 장치 실행기(130)는 스트림(171)들을 이용하여 하위 큐보이드(173)들을 그래픽 주 기억 장치(172)에 저장할 수 있다. 또한, 그래픽 처리 장치 실행기(130)는 하위 큐보이드(173) 각각에 대하여 행렬 곱 연산을 수행할 수 있다. 그래픽 처리 장치를 이용하여 행렬 곱 연산을 수행하는 방법에 대하여는, 도 7를 참조하여 상세히 설명한다.
단계 S300에서 행렬 누적 합 실행기(140)는 그래픽 처리 장치(170)에서 얻은 중간 결과 행렬들을 누적하여 결과 행렬을 생성할 수 있다. 중간 겨로가 행렬들의 누적 합을 계산을 하는 방법에 대해서 도 11을 참조하여 설명한다.
이하, 도 4를 참조하여 일 실시예에 따른 입력 행렬들을 큐보이드들로 분할하는 과정에 대하여 상세히 설명한다. 본 발명의 몇몇 실시예에서 입력 행렬을 복수의 큐보이드로 분할하는 방법은 입력 행렬의 메타 정보와 시스템 자원 정보를 기반으로 큐보이드의 크기는 최대한 사용 가능한 주 기억 장치의 크기와 같으면서 통신 비용을 최소화하도록 결정될 수 있다.
단계 S120에서 시스템 자원인 각 코어에서 사용 가능한 주 기억 장치 메모리의 크기(), 전체 노드의 수(), 노드 당 동시에 실행될 수 있는 코어들의 수()에 대한 정보를 획득할 수 있다.
단계 S130에서 각 차원의 크기들에 대한 정보를 이용하여 큐보이드의 크기를 결정할 파라미터 에 대한 후보군을 생성한다. 각 후보군은 3개의 integer ()로 구성되며, 각 integer들은 의 범위를 가질 수 있다.
단계 S140에서 전술한 파라미터 에 대한 후보군들 중에서 사용 가능한 메모리 크기에 맞으면서 통신 비용이 최소화하는 최적의 큐보이드 크기를 결정하는 ()을 선택할 수 있다. 최적의 파라미터를 선택하는 방법에 대하여는 도 5를 참조하여 상세히 설명한다.
단계 S150에서 최적의 파라미터를 이용하여 입력 행렬들을 복수의 큐보이드로 분할할 수 있다. 입력 행렬들을 분할하는 방법에 대하여는 도 6을 참조하여 상세히 설명한다.
도 5는 일 실시예에 따른 입력 행렬들과 시스템 자원들의 상황에 따라서 최적의 큐보이드 크기를 결정하는 방법을 설명하기 위한 순서도이다. 일 실시예에 따라 결정된 큐보이드 크기는 사용 가능한 주 기억 장치의 크기()보다 작거나 같으면서 통신 비용을 최소화하는 크기일 수 있다.
일 실시예에서 큐보이드의 전체 수는 시스템 병렬 수준()을 최대한 이용하기 위해 시스템에서 사용 가능한 코어들의 수보다 크도록 결정될 수 있다(S143). 이 경우, 큐보이드의 크기는 입력과 결과 행렬들에서 큐보이드 당 값들의 평균 수로써 계산될 수 있다(S144), 또한 일 실시예에서 통신 비용은 입력과 결과 행렬들이 각 큐보이드에 복제되는 수에 의해 결정될 수 있다(S146).
보다 상세하게 단계 S141에서 선택된 후보군의 통신 비용을 비교하기 위한 변수 가 초기화 될 수 있다. 또한, 단계 S142에서 단계S130에서 생성된 파라미터 에 대한 후보군들 중 하나가 선택될 수 있다.
단계 S143에서 선택된 후보군 이 생성할 큐보이드의 수가 전체 병렬 수준()보다 크거나 같은지 확인될 수 있다. 일 실시예에서 해당 후보군이 전체 병렬 수준보다 크다면 단계 S144이 수행될 수 있고, 다른 실시예에서 해당 후보군이 전체 병렬 수준보다 작다면 다음 후보군이 선택될 수 있다(S145).
단계 S144에서 선택된 후보군()이 생성할 큐보이드의 크기가 코어에서 사용 가능한 주 기억 장치의 크기()보다 작은지 확인될 수 있다. 일 실시예에서 선택된 후보군이 사용 가능한 주 기억 장치의 크기보다 크다면 다음 후보군을 선택할 수 있다(S145).
단계 S146에서 선택된 후보군()이 발생 할 통신 비용이 보다 작은지 확인될 수 있다. 일 실시예에서 선택된 후보군()이 발생 할 통신 비용이 보다 크다면 다음 후보군이 선택될 수 있다(S145).
단계 S148에서 모든 후보군들을 탐색했는지 여부가 확인될 수 있고, 모든 후보군이 탐색되지 않은 경우 다음 후보군을 선택할 수 있다(S145).
도 6은 일 실시예에 따라 선택된 최적의 파라미터 ()를 이용하여 입력 행렬들을 복수의 큐보이드로 분할하고, 분할된 각각의 큐보이드를 복수의 코어들에게 각각 분배하는 과정을 설명하기 위한 순서도이다.
단계 S156에서 모든 블록이 큐보이드에 할당 되었는지 여부가 확인될 수 있다. 일 실시예에서 모든 블록이 큐보이드에 할당되지 않은 경우 다음 블록들을 선택할 수 있고(S157), 모든 블록이 큐보이드에 할당된 경우 복수의 블록이 할당된 복수의 큐보이드를 복수의 코어들 각각에 분배할 수 있다(S158).
도 7은 일 실시예에 따라 획득된 복수의 큐보이드를 큐보이드 기반 행렬 분할기(120)를 이용하여 복수의 하위 큐보이드로 분할하는 방법을 설명하기 위한 도면이다.
일 실시예에서 하위 큐보이드의 크기는 사용 가능한 그래픽 처리 장치의 그래픽 주 기억 장치의 크기()보다 작거나 같으면서 주 기억 장치와 그래픽 처리 장치 사이의 통신 비용을 최소화하는 하위 큐보이드의 크기를 결정할 최적의 파라미터 ()를 선택할 수 있다.
그 다음, 단계 S230에서 하위 큐보이드의 크기를 결정할 파라미터 에 대한 후보군을 생성할 수 있다. 하위 큐보이드의 크기를 결정할 파라미터 후보는 3개의 integer ()로 구성되며, 각 integer들은 의 범위에서 정해질 수 있다.
단계 S240에서 파라미터 의 후보군들 중 사용 가능한 그래픽 기억 장치 크기에 맞으면서 통신 비용이 최소화하는 하위 큐보이드 크기를 결정하는 최적의 파라미터()가 선택될 수 있다. 전술한 최적의 파라미터()를 선택하는 방법에 대하여는 이하 도 8를 참조하여 상세히 설명한다.
단계 S250에서 단계 S240에서 획득한 파라미터를 이용하여 복수의 큐보이드를 복수의 하위 큐보이드로 분할할 수 있다. 상세한 설명은 도 9을 참조하여 후술한다.
단계 S260에서 그래픽 처리 장치의 스트림들을 이용하여 하위 큐보이드에 대한 행렬 곱 연산이 수행될 수 있다. 상세한 설명은 도 10을 참조하여 후술한다.
단계 S270은 모든 큐보이드들에 대한 행렬 곱 연산이 수행되었는지 확인될 수 있다. 일 실시예에서 모든 큐보이드들에 대한 행렬 곱 연산이 완료되지 않은 경우 다음 큐보이드를 선택할 수 있다(S280).
도 8은 일 실시예에 따른 큐보이드들과 그래픽 처리 장치의 상황에 따라서 최적의 하위 큐보이드 크기를 결정하는 방법을 설명하기 위한 도면이다.
일 실시예에서 하위 큐보이드의 크기는 큐보이드 내의 입력과 결과 행렬들에서 하위 큐보이드 당 값들의 평균 수로써 계산될 수 있고, 통신 비용은 큐보이드 내의 입력 행렬들이 각 하위 큐보이드에 복제되는 수에 의해서 결정될 수 있다. 또한, 결과 행렬에 대한 복제 수는 그래픽 처리 장치에서 하위 큐보이드들에 대한 계산 순서에 의해서 한 번만 복제될 수 있다.
단계 S247에서 모든 후보군들을 탐색 하였는지 여부를 확인할 수 있다. 일 실시예에서 모든 후보군들을 탐색 하지 않았다면 다음 후보군을 선택할 수 있다 (S245).
단계 S254에서 일 실시예에 따라 선택된 블록 이 행렬 의 블록이면 할당될 개의 하위 큐보이드의 인덱스()를 계산하여 하위 큐보이드에 할당하고, 단계 S255에서 다른 실시예에 따라 선택된 블록 이 행렬 의 블록이면 할당될 개의 하위 큐보이드의 인덱스()를 계산하여 하위 큐보이드에 할당할 수 있다.
단계 S256에서 모든 블록을 각각 하위 큐보이드에 할당 하였는지 여부를 확인할 수 있다. 일 실시예에서 모든 블록을 각각 하위 큐보이드에 할당하지 않은 경우 다음 블록들을 선택할 수 있다(S257).
도 10은 일 실시예에 따른 행렬 곱 계산 모듈(132)을 통해서 하위 큐보이드(173)들을 그래픽 주 기억 장치(172)에 적재하고 스트림(171)들을 이용하여 행렬 곱 연산을 수행하는 방법을 설명하기 위한 도면이다.
일 실시예에서 하위 큐보이드 내 입력 행렬들의 블록들을 그래픽 기억 장치로 적재 할 때, 먼저 입력 행렬들 중 크기가 작은 행렬의 블록들을 그래픽 기억 장치로 저장할 수 있다. 도 10은 본 발명의 일 예로 입력 행렬들 중 행렬 의 크기가 작은 경우를 도시한다.
먼저, 단계 S264 내지 S2694 및 S2695를 포함하는 제1 반복문은 하위 큐보이드 의 -축 인덱스 를 이용하고, 단계 S265 내지 S2692 및 S2693을 포함하는 제2 반복문은 -축 인덱스 를 이용하여 단계 S266을 수행할 수 있다.
또한, 단계 S267 내지 S269 및 S2691를 포함하는 제3 반복문은 -축 인덱스 를 이용하여 단계 S268을 수행할 수 있고, 단계 S268에서 행렬 곱 이 스트림 을 통하여 비동기 실행될 수 있다.
일 실시예에서 더 이상 다른 하위 큐보이드들의 결과들에 대해서 누적 합 연산을 수행할 필요가 없는 경우 단계 S2698에서 모든 스트림들을 동기화하여, 단계 S2699를 통해 하위 큐보이드 의 결과가 주 기억 장치로 저장될 수 있다.
단계 S26991는 모든 하위 큐보이드들이 계산되었는지 여부가 확인될 수 있다.
일 실시예에서 모든 하위 큐보이드들이 계산된 경우 다음 하위 큐보이드를 선택할 수 있다(S2697).
이후 단계 S340에서 모든 중간 결과 블록들이 계산되었는지 여부가 확인 될 수 있다. 일 실시예에서 모든 중간 결과 블록들이 계산된 경우 단계 S360에서 모든 결과 블록 들을 보조 기억 장치(163)에 저장할 수 있다. 다른 실시예에서 모든 중간 결과 블록들이 계산되지 않은 경우 다음 중간 결과 를 획득할 수 있다(S350).
도 12는 본 발명의 일 실시예에 따른 행렬 곱 연산 방법의 일 예를 설명하기 위한 도면이다.
(a)의 하나의 정육면체는 복셀로써 표현되며, 각 복셀은 3차원 상의 인덱스 ()를 가질 수 있다. 검은색 복셀은 3차원 상 원점에 해당되는 복셀이며 으로 표기 된다고 가정하자. 복셀 의 의미는 를 의미할 수 있다.
(b)는 도 (a)에 도시된 3차원 모델을 파라미터 ()를 이용하여 큐보이드 기반 분할 방법을 적용 했을 때 생성되는 큐보이드이다. 파라미터의 값들의 의미는 3차원 모델의 각 축에서 파티션의 개수를 의미할 수 있다.
(b)에 도시된 바와 같이 파라미터 ()를 사용하여 도 (a)에 도시된 큐보이드를 분할하는 경우, 각 축에서 2개의 큐보이드들이 존재하며 총 8개의 큐보이드들이 생성된다. 각 큐보이드는 3차원 인덱스 ()를 가지며 각 인덱스의 범위는 을 가진다. (b)의 회색 복셀들로 이뤄진 큐보이드는 원점 인덱스를 가지며 로 표기될 수 있다.
이상 설명된 본 발명에 따른 실시예는 컴퓨터 상에서 다양한 구성요소를 통하여 실행될 수 있는 컴퓨터 프로그램의 형태로 구현될 수 있으며, 이와 같은 컴퓨터 프로그램은 컴퓨터로 판독 가능한 매체에 기록될 수 있다. 이때, 매체는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM 및 DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical medium), 및 ROM, RAM, 플래시 메모리 등과 같은, 프로그램 명령어를 저장하고 실행하도록 특별히 구성된 하드웨어 장치를 포함할 수 있다.
한편, 상기 컴퓨터 프로그램은 본 발명을 위하여 특별히 설계되고 구성된 것이나 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수 있다. 컴퓨터 프로그램의 예에는, 컴파일러에 의하여 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용하여 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함될 수 있다.
본 발명에서 설명하는 특정 실행들은 일 실시예들로서, 어떠한 방법으로도 본 발명의 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다. 또한, "필수적인", "중요하게" 등과 같이 구체적인 언급이 없다면 본 발명의 적용을 위하여 반드시 필요한 구성 요소가 아닐 수 있다.
이와 같이 본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 당해 기술분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 다른 실시예가 가능하다는 점을 이해할 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 청구범위의 기술적 사상에 의하여 정해져야 할 것이다.
Claims (12)
- 제1 입력 행렬 및 제2 입력 행렬을 저장하는 보조 기억 장치;
상기 제1 입력 행렬, 상기 제2 입력 행렬, CPU 메모리 크기 및 GPU 메모리 크기를 기초로 복수의 큐보이드 후보군 및 복수의 하위 큐보이드 후보군을 생성하는 큐보이드 후보군 결정 모듈;
상기 복수의 큐보이드 후보군 중 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드의 크기를 결정하고, 상기 복수의 하위 큐보이드 후보군 중 CPU와 GPU간 통신 비용 및 상기 GPU 메모리 크기를 기초로 상기 복수의 하위 큐보이드의 크기를 결정하는 큐보이드 크기 결정 모듈;
상기 큐보이드 크기 결정 모듈에서 결정한 복수의 큐보이드의 크기를 기초로 상기 제1 입력 행렬 및 상기 제2 입력 행렬을 상기 복수의 큐보이드로 분할하는 행렬 분할 모듈;
상기 큐보이드 크기 결정 모듈에서 결정한 복수의 하위 큐보이드의 크기를 기초로 획득된 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 수행하는 행렬 곱 계산 모듈; 및
상기 행렬 곱 계산 모듈에서 획득한 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 누적하는 행렬 블록 누적 모듈;을 포함하는,
행렬 곱 연산 장치. - 제1 항에 있어서,
상기 보조 기억 장치는,
상기 행렬 곱 계산 모듈에서 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산 결과로 생성된 복수의 중간 결과 행렬 및 상기 행렬 블록 누적 모듈에서 상기 복수의 중간 결과 행렬을 누적하여 생성된 결과 행렬을 더 저장하는,
행렬 곱 연산 장치. - 제1 항에 있어서,
상기 큐보이드 크기 결정 모듈은,
주 기억 장치와 보조 기억 장치간 통신 비용 및 상기 CPU 메모리 크기를 기초로 상기 복수의 큐보이드의 크기를 결정하는, 행렬 곱 연산 장치. - 제1 항에 있어서,
상기 행렬 분할 모듈은,
상기 제1 입력 행렬의 차원(dimension) 및 상기 제2 입력 행렬의 차원(dimension)을 기초로 3차원 공간을 생성하고, 상기 3차원 공간에 상기 제1 입력 행렬 및 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성하고, 상기 3차원 모델을 분할하여 상기 복수의 큐보이드를 생성하는,
행렬 곱 연산 장치. - 제1 항에 있어서,
상기 행렬 곱 계산 모듈은,
GPU의 스트림을 이용하여 상기 복수의 하위 큐보이드에 대한 행렬 곱 연산을 병렬적으로 수행하는,
행렬 곱 연산 장치. - 행렬 곱 연산 장치에서의 행렬 곱 연산 방법에 있어서,
제1 입력 행렬 및 제2 입력 행렬을 수신하는 단계;
상기 제1 입력 행렬의 행 차원(row dimension)에 대응되는 제1 축, 상기 제1 입력 행렬의 열차원(column dimension)에 대응되는 제2 축 및 제2 입력 행렬의 열차원(column dimension)에 대응되는 제3 축을 기초로 3차원 공간을 생성하고, 상기 3차원 공간 상에 상기 제1 입력 행렬과 상기 제2 입력 행렬 간 곱 연산에 대응되는 3차원 모델을 생성하는 단계;
상기 3차원 모델을 CPU 메모리 크기를 기초로 복수의 큐보이드로 분할하는 단계;
CPU와 GPU간 통신 비용 및 GPU 메모리 크기를 기초로 상기 복수의 큐보이드 각각을 복수의 하위 큐보이드로 분할하는 단계;
GPU를 이용하여 상기 복수의 하위 큐보이드 각각에 대응되는 행렬 원소간 곱 연산 결과를 획득하고, 상기 획득된 행렬 원소간 곱 연산 결과를 이용하여 중간 결과 행렬을 생성하는 단계; 및
CPU를 이용하여 상기 중간 결과 행렬을 누적하여 결과 행렬을 생성하는 단계를 포함하는,
행렬 곱 연산 방법. - 제6 항에 있어서,
상기 제2 입력 행렬의 행 차원은, 상기 제1 입력 행렬의 열차원과 동일한,
행렬 곱 연산 방법. - 제6 항에 있어서,
상기 큐보이드는,
복수의 복셀로 구성되며,
복셀 vi,j,k 는 상기 제1 입력 행렬의 행렬 원소 (i, k)와 상기 제2 입력 행렬의 행렬 원소 (k, j) 간 곱 연산과 대응되는,
행렬 곱 연산 방법. - 제8 항에 있어서, 상기 결과 행렬은,
복수의 복셀의 합과 대응되는 행렬 원소 (i,j)로 구성된,
행렬 곱 연산 방법. - 제6 항에 있어서,
상기 복수의 큐보이드로 분할하는 단계는,
상기 CPU의 주 기억 장치와 상기 CPU의 보조 기억 장치 간 통신 비용 및 상기 CPU 메모리 크기를 기초로 상기 3차원 모델을 상기 복수의 큐보이드로 분할하는 단계를 포함하는,
행렬 곱 연산 방법. - 삭제
- 컴퓨터를 이용하여 제6항 내지 제10항 중 어느 한 항의 방법을 실행시키기 위하여 기록매체에 저장된 컴퓨터 프로그램.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190148945A KR102326586B1 (ko) | 2019-11-19 | 2019-11-19 | 큰 규모 분산 행렬 곱 처리 방법 및 그 장치 |
US17/093,718 US20210149985A1 (en) | 2019-11-19 | 2020-11-10 | Method and apparatus for processing large-scale distributed matrix product |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190148945A KR102326586B1 (ko) | 2019-11-19 | 2019-11-19 | 큰 규모 분산 행렬 곱 처리 방법 및 그 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210061119A KR20210061119A (ko) | 2021-05-27 |
KR102326586B1 true KR102326586B1 (ko) | 2021-11-16 |
Family
ID=75909502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190148945A KR102326586B1 (ko) | 2019-11-19 | 2019-11-19 | 큰 규모 분산 행렬 곱 처리 방법 및 그 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20210149985A1 (ko) |
KR (1) | KR102326586B1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7389244B2 (ja) | 2020-05-12 | 2023-11-29 | エルジー エナジー ソリューション リミテッド | リチウム二次電池用電解液及びこれを含むリチウム二次電池 |
KR102621139B1 (ko) * | 2021-11-18 | 2024-01-04 | 서울대학교산학협력단 | 프레임 양자화에 기반한 분산 행렬 곱 연산 방법 및 장치 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7236998B2 (en) * | 2003-09-25 | 2007-06-26 | International Business Machines Corporation | System and method for solving a large system of dense linear equations |
US8250130B2 (en) * | 2008-05-30 | 2012-08-21 | International Business Machines Corporation | Reducing bandwidth requirements for matrix multiplication |
KR102505279B1 (ko) * | 2015-07-24 | 2023-03-02 | 삼성전자주식회사 | 복수의 cpu 및 복수의 gpu를 지원하는 컴퓨팅 환경에서의 연산 방법 |
KR102011671B1 (ko) * | 2016-12-06 | 2019-08-19 | 한국전자통신연구원 | 이종 계산 장치 기반의 질의 처리 방법 및 장치 |
JP7091930B2 (ja) * | 2018-08-16 | 2022-06-28 | 日本電信電話株式会社 | テンソルデータ計算装置、テンソルデータ計算方法及びプログラム |
-
2019
- 2019-11-19 KR KR1020190148945A patent/KR102326586B1/ko active IP Right Grant
-
2020
- 2020-11-10 US US17/093,718 patent/US20210149985A1/en active Pending
Non-Patent Citations (1)
Title |
---|
이기용 외 4명, 맵리듀스를 사용한 데이터 큐브의 효율적인 계산 기법, 정보처리학회논문지/소프트웨어 및 데이터공학 제3권 제11호(2014.11.)* |
Also Published As
Publication number | Publication date |
---|---|
US20210149985A1 (en) | 2021-05-20 |
KR20210061119A (ko) | 2021-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10374792B1 (en) | Layout-independent cryptographic stamp of a distributed dataset | |
JP5425541B2 (ja) | マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置 | |
KR102326586B1 (ko) | 큰 규모 분산 행렬 곱 처리 방법 및 그 장치 | |
CN105302536A (zh) | MapReduce应用的相关参数的配置方法和装置 | |
US10171574B2 (en) | Computer system, processing method, and computer-readable recording medium having job processing program | |
US11914648B2 (en) | Graph refactorization method and graph refactorization apparatus | |
KR101573112B1 (ko) | 데이터 분배 방법 및 장치 | |
CN116862019B (zh) | 基于数据并行范式的模型训练方法及装置 | |
TWI758223B (zh) | 具有動態最小批次尺寸之運算方法,以及用於執行該方法之運算系統及電腦可讀儲存媒體 | |
KR102209526B1 (ko) | 병렬 연산을 통한 단백질-리간드 상호 작용 분석 방법 및 장치 | |
CN112948087A (zh) | 一种基于拓扑排序的任务调度方法及系统 | |
JP2973973B2 (ja) | 並列計算における動的負荷分散方法、動的負荷分散装置及び動的負荷分散プログラムを記録した記録媒体 | |
WO2011131248A1 (en) | Method and apparatus for losslessly compressing/decompressing data | |
KR101969219B1 (ko) | 빈발 패턴 마이닝 방법 및 장치 | |
CN114625474A (zh) | 容器迁移方法、装置、电子设备及存储介质 | |
JP7084894B2 (ja) | リソース管理システム、リソース割当方法 | |
KR20240051715A (ko) | 행렬 융합 연산을 지원하는 분산 행렬 계산 제어 방법 및 장치 | |
CN110955380A (zh) | 访存数据生成方法、存储介质、计算机设备和装置 | |
KR102488614B1 (ko) | 가상화된 리소스를 관리하는 방법, 장치 및 컴퓨터 프로그램 | |
KR102488615B1 (ko) | 리소스 크기 추전 방법, 장치 및 컴퓨터 프로그램 | |
WO2020217965A1 (ja) | 情報処理装置、情報処理方法及び情報処理プログラム | |
US11709812B2 (en) | Techniques for generating and processing hierarchical representations of sparse matrices | |
US20240134932A1 (en) | Distributed matrix computation control method and apparatus supporting matrix fused operation | |
CN112100446B (zh) | 搜索方法、可读存储介质和电子设备 | |
US20220374961A1 (en) | Techniques for performing matrix computations using hierarchical representations of sparse matrices |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |