KR101400577B1 - Gpu를 이용한 희소행렬 곱셈 방법 - Google Patents

Gpu를 이용한 희소행렬 곱셈 방법 Download PDF

Info

Publication number
KR101400577B1
KR101400577B1 KR1020130025481A KR20130025481A KR101400577B1 KR 101400577 B1 KR101400577 B1 KR 101400577B1 KR 1020130025481 A KR1020130025481 A KR 1020130025481A KR 20130025481 A KR20130025481 A KR 20130025481A KR 101400577 B1 KR101400577 B1 KR 101400577B1
Authority
KR
South Korea
Prior art keywords
matrix
sparse
multiplication
sparse matrix
gpu
Prior art date
Application number
KR1020130025481A
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 한양대학교 산학협력단
Priority to KR1020130025481A priority Critical patent/KR101400577B1/ko
Application granted granted Critical
Publication of KR101400577B1 publication Critical patent/KR101400577B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

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

Abstract

GPU를 이용한 희소행렬 곱셈 방법이 개시된다. 희소행렬 간의 곱셈을 수행하는 방법은 CPU(Central Processor Unit)가 제1 희소행렬과 제2 희소행렬을 각각 부분행렬로 분할하는 단계, 스레드의 작업량과 스레드 블록의 작업량이 각각 균등하게 분배되도록 상기 제1 희소행렬과 제2 희소행렬의 각 부분행렬에 대한 워크로드 테이블을 생성하는 단계 및 상기 제1 희소행렬의 부분행렬, 상기 제2 희소행렬의 부분행렬 및 상기 워크로드 테이블을 기초로 GPU(Graphic Processor Unit)를 이용하여 상기 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행하는 단계를 포함할 수 있다.

Description

GPU를 이용한 희소행렬 곱셈 방법{METHOD FOR MULTIPLICATION OF SPARSE MATRIX ON THE GPU}
본 발명의 실시예들은 GPU에서 최적화된 두 희소행렬 간의 곱을 수행하기 위한 방법에 관한 것이다.
GPU(graphic Processor Unit)는 고유한 프로세서 구조와 다양한 계층의 메모리 구조를 갖는다. GPU는 스트리밍 멀티프로세서(SM: Streaming Multiprocessor)의 집합으로 이루어져 있으며, 각 SM은 스트리밍 프로세서(SP: Streaming Processor)의 집합으로 이루어져 있다. 또한, 글로벌 메모리, 공유 메모리, 레지스터 등 다양한 계층의 메모리들이 존재한다. 이러한 메모리들은 크기, 접근 지연 시간, 프로세서의 접근성 등에 따라 다양하게 구성되어 있다.
GPU에서 응용프로그램을 수행 시, 하나의 응용프로그램은 여러 개의 스레드 블록으로 구성되고, 하나의 스레드 블록은 여러 개의 스레드로 구성된다. 그리고, 하나의 스레드 블록은 하나의 SM에 할당된다. 이 때, 하나의 스레드 블록 내의 여러 스레드는 해당 스레드 블록이 할당된 SM에 속하는 SP들에 의해 동시에 처리된다. 여기서, 스레드의 처리 성능은 응용프로그램에서 사용되는 데이터의 패턴에 적합한 메모리를 활용함으로써 향상될 수 있다.
한편, 최근에는 다양한 SNS(Social Network Service)의 등장으로 인해 사회연결망(Social Network)을 분석하여 유용한 정보를 도출하고자 하는 시도들이 활발하게 진행되고 있다. 대부분의 사회연결망 분석 방법들은 사회연결망을 인접 행렬로 표현하고, 이를 분석한다. 분석을 위해, 두 행렬 간의 곱, 행렬과 벡터 간의 곱 등의 행렬 관련 연산이 많이 사용된다.
행렬 관련 연산은 여러 스레드로 나누어 병렬적으로 수행할 수 있으며, 나누는 단위에 따라 스레드는 독립적으로 수행될 수 있다. 또한, 곱셈과 덧셈 같은 간단한 연산들을 반복적으로 수행하여 결과를 산출한다. 이와 같이 병렬 산술 연산으로 이루어진 방법들은 병렬 처리 시스템에 매우 적합하다. 따라서, GPU를 이용하여 행렬 관련 연산을 빠르게 처리하고자 하는 연구들이 많이 시도되고 있다.
그러나, 기존의 GPU를 이용한 두 행렬 간의 곱에 관한 대부분의 연구들은 두 조밀행렬(Dense Matrix) 간의 곱 또는 하나의 희소행렬(Sparse Matrix)과 하나의 조밀행렬 간의 곱에 관한 문제만을 다루거나, 하나의 희소행렬과 벡터 간의 곱에 관한 문제를 다루었다.
일 예로, 하나의 희소행렬과 벡터를 곱셈하는 방법으로 한국공개특허공보 제10-2012-0113777호(공개일: 2012년 10월 15일) "산술 연산들을 수행하기 위한 하드웨어"에는 메모리에 저장된 압축된 행렬 포맷 상에서 산술 연산들을 수행하기 위한 하드웨어가 상기 행렬 내 엔트리가 0 인가 아닌가의 여부를 표시하는 비트맵으로부터 명령어(instruction)들의 스케줄을 생성할 수 있는 스케줄러와 상기 생성된 스케줄에 따라 넌-제로(non-zero) 값들을 사용하여 상기 행렬 상에서 산술 연산들을 수행하도록 구성된 산술 회로를 포함하는 것이 개시되어 있다.
그러나, 대부분의 실제 사회연결망의 인접 행렬은 밀도가 매우 낮다. 따라서, 사회연결망 분석을 위해서는 실질적으로 두 희소행렬 간의 곱을 수행하여야 한다.
따라서, 보다 효과적인 사회연결망 분석을 위해 GPU를 이용하여 두 희소행렬 간의 곱을 수행할 수 있는 방법이 요구되고 있다.
효과적인 사회연결망 분석을 위해 GPU(Graphic Processor Unit)를 이용하여 두 희소행렬 간의 곱을 빠르게 수행할 수 있는 GPU를 이용한 희소행렬 곱셈 방법이 제공된다.
희소행렬 간의 곱셈을 수행하는 방법은 CPU(Central Processor Unit)가 제1 희소행렬과 제2 희소행렬을 각각 부분행렬로 분할하는 단계, 스레드의 작업량과 스레드 블록의 작업량이 각각 균등하게 분배되도록 상기 제1 희소행렬과 제2 희소행렬의 각 부분행렬에 대한 워크로드 테이블을 생성하는 단계 및 상기 제1 희소행렬의 부분행렬, 상기 제2 희소행렬의 부분행렬 및 상기 워크로드 테이블을 기초로 GPU(Graphic Processor Unit)를 이용하여 상기 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행하는 단계를 포함할 수 있다.
일측에 따르면, 상기 분할하는 단계 이전 또는 이후에 상기 제1 희소행렬의 0 이 아닌 원소들이 실제 곱셈을 수행하는 작업량을 파악하는 단계를 더 포함할 수 있다.
다른 측면에 따르면, 상기 워크로드 테이블에는 상기 스레드 블록의 작업량을 기초로 상기 스레드 블록이 내림차순으로 정렬될 수 있다.
또 다른 측면에 따르면, 상기 수행하는 단계는 상기 제1 희소행렬의 부분행렬, 상기 제2 희소행렬의 부분행렬 및 상기 워크로드 테이블을 상기 GPU로 전송하는 단계, 상기 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행하기 위한 커널을 호출하는 단계 및 상기 GPU로부터 상기 제1 희소행렬의 부분행렬과 상기 제2 희소행렬의 부분행렬이 외적을 통해 곱셈된 부분 행렬을 수신하는 단계를 포함할 수 있다.
또 다른 측면에 따르면, 상기 제2 희소행렬의 부분행렬은 공유 메모리에 할당됨으로써 각 부분행렬 간의 곱셈 시 재사용될 수 있다.
GPU(Graphic Processor Unit)를 이용하여 두 희소행렬 간의 곱을 빠르게 수행할 수 있기 때문에 보다 효과적으로 사회연결망을 분석할 수 있다.
도 1은 본 발명의 일실시예에 있어서, GPU를 이용하여 두 희소행렬 간의 곱셈을 수행하는 방법을 나타내는 흐름도이다.
도 2는 본 발명의 일실시예에 있어서, GPU를 이용한 외적 계산 방법을 나타내는 도면이다.
도 3은 본 발명의 일실시예에 있어서, 스레드 블록을 정렬하기 전/후의 GPU의 처리과정을 나타내는 도면이다.
도 4는 본 발명의 일실시예에 있어서, 워크로드 테이블의 자료 구조를 나타내는 예시도이다.
도 5는 본 발명의 일실시예에 있어서, 두 희소행렬 간의 곱셈을 위한 알고리즘을 나타내는 도면이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 있어서, GPU를 이용하여 두 희소행렬 간의 곱셈을 수행하는 방법을 나타내는 흐름도이다.
도 1을 참조하면, 본 발명에 따른 GPU를 이용한 희소행렬 간의 곱셈을 수행하기 위해서 먼저 CPU(Central Processor Unit)는 제1 희소행렬과 제2 희소행렬을 각각 부분행렬로 분할한다(110). 이후, CPU는 스레드의 작업량과 스레드 블록의 작업량이 각각 균등하게 분배되도록 제1 희소행렬과 제2 희소행렬의 각 부분행렬에 대한 워크로드 테이블(WLT: Workload Table)을 생성한다(120). 이 때, WLT에는 스레드 블록이 스레드 블록의 작업량을 기초로 내림차순으로 정렬될 수 있다. 이를 위해서 CPU는 제1 희소행렬의 "0"이 아닌 원소들이 실제 곱셈을 수행하는 작업량을 파악할 수 있다.
CPU는 제1 희소행렬 및 제2 희소행렬이 각각 부분행렬로 분할되고 WLT가 생성되면, 제1 희소행렬의 부분행렬, 제2 희소행렬의 부분행렬 및 WLT를 기초로 GPU(Graphic Processor Unit)를 이용하여 제1 희소행렬과 제2 희소행렬 간의 곱을 수행한다.
상술하면, GPU는 제1 희소행렬의 부분행렬, 제2 희소행렬의 부분행렬 및 워크로드 테이블을 GPU로 전송한다(130). 그리고, 제1 희소행렬과 제2 희소행렬 간의 곱을 수행하기 위한 커널을 호출하며, GPU로부터 외적을 통해 곱셈된 결과를 수신함으로써(140) 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행한다. 이 때, 제2 희소행렬의 부분행렬은 공유 메모리에 할당됨으로써 각 부분행렬 간의 곱셈 시 재사용될 수 있다.
도 2는 본 발명의 일실시예에 있어서 GPU를 이용한 외적 계산 방법을 나타내는 도면이고, 도 3은 스레드 불록을 정렬하기 전/후의 GPU의 처리과정을 나타내는 도면이다. 또한, 도 4는 본 발명의 일실시예에 있어서 워크로드 테이블의 자료 구조를 나타내는 예시도이고, 도 5는 두 희소행렬 간의 곱셈을 위한 알고리즘을 나타내는 도면이다. 이하, 도 2 내지 도 5를 참조하여 본 발명에 따른 GPU를 이용하여 두 희소행렬 간의 곱셈을 수행하는 방법에 대해 보다 상세히 설명한다.
GPU를 이용하여 두 희소행렬 간의 곱을 빠르게 처리하기 위해서는 먼저, GPU의 특징을 파악해야 한다. GPU는 고유한 프로세서 구조를 갖는다. GPU는 스트리밍 멀티프로세서(SM: Streaming Multiprocessor)의 집합으로 이루어져 있으며, 각 SM은 스트리밍 프로세서(SP: Streaming Processor)의 집합으로 이루어져 있다. 동일한 SM에 속하는 SP들은 동시에 같은 작업을 수행한다. 또한, GPU에는 (1) 글로벌 메모리, (2) 공유 메모리, (3) 레지스터 등 다양한 계층의 메모리들이 존재한다. 이러한 메모리들은 크기, 접근 지연 시간, 프로세서의 접근성 등에 따라 다양하게 구성되어 있다.
GPU의 특성을 효율적으로 사용하기 위해서는 스레드 블록과 스레드의 작업량을 균등하게 분배해야 한다. 만약, 작업량이 균등하게 분배되지 않으면, 스레드 블록들을 처리하는 프로세서들 간의 대기시간이 발생하여 성능이 저하될 수 있다. 또한, 메모리의 계층과 메모리 접근 패턴 등을 고려해야 GPU에서 수행되는 응용프로그램의 속도를 향상시킬 수 있다.
따라서, 본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 GPU의 이와 같은 특성을 고려하여 (1) 스레드와 스레드 블록의 작업량 균등 분배, (2) 메모리 활용에 중점을 둔다.
정확한 작업량 파악
균등한 작업량 분배를 위해서는 실제 곱셈이 발생되는 작업량 파악이 선행되어야 한다. 이를 통해, 각 스레드 및 스레드 블록에 균등한 작업량을 분배할 수 있게 된다. 그러나, 곱셈 방식에 따라 작업량을 측정하는 방법은 달라질 수 있다.
두 행렬 간의 곱을 수행하는 방법은 크게 내적과 외적이 있다. 내적은 행렬 A의 하나의 행과 행렬 B의 하나의 열과 곱을 수행하여 하나의 원소를 산출하는 방식이다. 내적을 이용한 두 행렬 간의 곱은 행렬 A의 각 행마다 행렬 B의 모든 열의 곱을 수행하여 하나의 행렬을 산출한다.
한편, 외적은 행렬 A의 하나의 열과 행렬 B의 하나의 행과 곱을 수행하여 행렬 A의 열의 길이와 행렬 B의 행의 길이의 행렬을 산출하는 방식이다. 외적을 이용한 두 행렬 간의 곱은 행렬 A의 각 행의 행 번호와 동일한 번호를 가진 행렬 B의 각 열과 곱을 수행하여 나온 행렬들을 합하여 최종 결과의 행렬을 산출한다.
내적으로 수행할 경우, 행렬 A의 하나의 행(Ai *)의 작업량은 행렬 A의 행의 "0" 이 아닌 원소들(nnz(Ai *))의 열 번호와 대응되는 행렬 B의 행(Bj *)의 "0" 이 아닌 원소의 수(nnz(Bj *))의 합이다. 하나의 행 Ai * 의 작업량을 계산하기 위해서는 Ai * 의 i번째 행의 nnz(Ai*) 만큼의 Bj * 을 스캔해야 한다. 따라서 모든 행에 대한 작업량을 계산하기 위해서 행렬 A의 모든 0이 아닌 원소의 수(nnz(Aij))만큼의 스캔이 필요하다. 이 때, Bj * 는 nnz(A*j) 만큼의 행렬 B의 중복 스캔이 발생된다.
그러나, 반대로 외적으로 수행할 경우, ?A* j 의 작업량은 nnz(A*j)×nnz(Bj *) 이다. 따라서, A* j 의 작업량을 계산하기 위해서 Bj * 를 한번만 스캔하면 된다. 그러므로, 모든 열에 대한 작업량을 계산하기 위해서 행렬 A의 열의 길이만큼의 행렬 B를 스캔한다. 즉, 행렬 B를 중복 스캔 없이 계산 가능하다.
스레드 간의 작업량 균등 분배
본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 스레드의 작업량을 균등하게 분배하기 위해, 내적을 사용하는 기존 방법들과 달리 외적으로 곱셈 방법을 변경한다.
하나의 스레드 블록은 행렬 도 2에 도시된 것과 같이, A의 A*j 과 행렬 B의 Bj * 에 대해서 곱을 수행하고, 하나의 스레드는 행렬 A의 Aij 와 행렬 B의 Bj * 에 대해서 곱을 수행한다.
외적을 통해 곱셈을 수행할 때 얻을 수 있는 장점은 다음과 같다.
첫째, 하나의 스레드 블록 내의 스레드들은 동일한 작업량(행렬 B의 대응되는 행의 0이 아닌 원소의 수)을 갖는다. 내적의 경우, 행렬 A에 하나의 원소는 행렬 B의 어느 원소와도 계산되지 않을 수 있기 때문에, 각 스레드 마다 동일한 작업량을 분배하는 것이 어렵다.
둘째, 외적을 이용하면 공유 메모리의 재사용률도 높아진다. 하나의 스레드 블록에서 수행되는 행렬 A의 nnz(A*j) 는 행렬 B의 nnz(Bj *) 에 모두 접근한다. 이로 인해, 해당 스레드 블록을 수행하는 SM의 공유 메모리에 적재하여 스레드 블록 내의 모든 스레드들이 빠르게 접근할 수 있도록 할 수 있다.
스레드 블록 간의 작업량 균등 분배
하나의 스레드 블록의 작업량은 nnz(A*j)×nnz(Bj *) 이다. 그러나, 희소행렬에 따라 분포가 다르기 때문에 행렬 A의 nnz(A*j)와 행렬 B의 nnz(Bj *) 는 서로 다르다. 따라서 스레드 블록마다 동일한 작업량을 분배하는 것은 어렵다. 그러므로, 본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 각 SM이 작업량이 많은 스레드 블록을 먼저 처리할 수 있도록 하는 전략을 이용한다.
SM은 독립적으로 스레드 블록을 병렬 처리한다. GPU에는 스레드 블록을 SM에 할당하는 스케줄링 알고리즘이 존재한다. 스케줄링 알고리즘은 스레드 블록의 id에 따라 순차적으로 SM에 할당한다. 이 때, 스레드 블록 간의 작업량에는 격차가 발생할 수 있다. 따라서, 하나의 SM이 작업량이 많은 스레드 블록을 처리하는 동안, 다른 SM은 작업량이 적은 여러 개의 스레드 블록을 처리할 수 있다.
구체적으로, 사회연결망 분석에 주로 사용되는 행렬은 희소행렬이다. 희소행렬은 power-law 분포를 따르기 때문에, 각 행 또는 열마다의 0이 아닌 원소의 수의 격차가 매우 클 수 있다. 따라서, 각 스레드 블록의 작업량의 격차도 매우 클 수 있다. 그러므로, 가장 작업량이 많은 스레드 블록이 마지막에 처리될 경우, 해당 스레드 블록을 처리하는 SM을 제외한 모든 SM은 가장 많은 작업량을 처리 중인 SM이 처리를 완료할 때까지 대기해야 한다. 이렇게 작업량을 균등하게 분배하지 못함으로써, 프로세서 낭비와 수행시간이 지연될 수 있다.
이를 해결하기 위해, 본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 작업량을 기준으로 내림차순 스레드 블록의 순서를 정렬하여 하나의 SM이 가장 많은 작업량의 스레드 블록을 처리하는 동안 다른 SM이 다른 스레드 블록을 처리할 수 있도록 하여 대기시간 발생을 최소화할 수 있다.
일 예로, 본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 도 3과 같이 스레드 블록을 작업량으로 정렬하여 SM 간의 대기시간을 최소화함으로써 전체 수행시간을 단축할 수 있다. 이를 위하여 본 발명에 따른 GPU를 이용한 희소행렬 곱셈 방법은 정렬을 통해 SM이 작업량이 많은 스레드 블록들을 먼저 처리할 수 있도록 워크로드 테이블(WLT)을 생성한다.
WLT는 도 4에 도시된 것과 같이, 각 스레드 블록이 수행할 작업량에 대한 정보를 가지고 있다. 도 4에서 Index는 각 행렬의 열 또는 동일한 행의 번호를 의미하고, Workload는 작업량을 의미한다. SizeA(SizeB)는 행렬 A(행렬 B)의 nnz(A*j)(nnz(Bj *))를 의미한다. StartA(StartB)는 행렬A(행렬 B)를 표현하는 CSC(CSR) 자료구조의 열(행)포인터를 의미한다.
WLT는 행렬 A의 하나의 열과 대응되는 행렬 B의 하나의 행에 대해 하나의 엔트리를 유지한다. WLT의 엔트리의 수는 n×n 크기의 행렬에 n보다 작을 수 있다. 실제로 행렬 A의 열이나 행렬 B의 행의 어느 한쪽이라도 "0" 이 아닌 원소를 가지고 있지 않을 경우 곱은 수행되지 않는다. 이로 인해, 실제 데이터에서 엔트리의 수는 n보다 매우 작은 경우가 많다.
WLT를 구성하기 위해서 두 행렬 A와 행렬 B를 모두 스캔한다. 행렬 A의 열과 행렬 B의 행에 모두 "0"이 아닌 원소를 가지고 있을 경우, 각 Index에 행렬 A의 nnz(A* index)와 행렬 B의 nnz(Bindex *)의 곱을 Workload에 저장한다.
WLT는 Index와 Workload 정보 이외에도 각 행렬에 대한 정보를 저장하고 있다. 희소 행렬의 분포에 따라 스레드 블록이 처리하는 작업량은 매우 불규칙적이다. 이로 인해 스레드 블록은 곱을 수행하기 전에 자신이 처리해야 될 양과 스레드의 수를 인덱스 정보로 파악해야 한다. 이러한 정보는 WLT를 생성하면서 한 번에 파악할 수 있기 때문에 WLT를 생성하면서 저장할 수 있다. 이 경우, WLT에 저장되는 정보는 늘어나지만, WLT의 엔트리의 수는 적기 때문에 크게 영향을 미치지 않는다.
수행 방법
본 발명에 따른 희소행렬 간의 곱셈을 수행하는 방법은 도 5에 도시된 것과 같이, 크게 CPU 부분과 GPU 부분으로 나누어진다.
CPU는 GPU에서 수용 가능한 크기의 행렬 A와 행렬 B를 부분행렬로 분할하고, 부분행렬 A와 B에 대한 WLT를 생성한다. 그리고, 두 부분행렬과 WLT를 GPU로 전송한다. 한편, CPU는 두 희소행렬 간의 곱을 수행하기 위해서 GPU에 커널을 호출한다. 이후, CPU는 계산이 완료된 결과를 GPU로부터 전달 받아 저장한다. 이러한 과정을 행렬 A와 B의 모든 부분행렬에 대해 반복해서 수행한다.
GPU는 CPU로부터 부분행렬 A와 B 그리고 WLT를 전달받는다. 이 때, 스레드 블록은 스레드 블록 id와 동일한 WLT의 id번째를 참조한다. 공유 메모리에는 StartB부터 SizeB 만큼 할당된다. 이를 통해 스레드 블록 내의 스레드들을 빠르게 접근할 수 있도록 한다. SizeA 만큼의 스레드는 해당 인덱스의 StartA부터 자신의 id번째의 원소를 할당 받고, 공유 메모리에 할당된 데이터를 SizeB 만큼 곱을 수행한다.
이와 같이 본 발명에 따른 GPU를 이용한 희소행렬 간 곱셈 방법은 스레드와 스레드 블록의 작업량을 균등하게 분배하고 공유 메모리를 재활용함으로써 GPU를 이용하여 두 희소행렬 간의 곱을 빠르게 수행할 수 있다. 따라서, 본 발명에 따른 GPU를 이용한 희소행렬 간 곱셈 방법을 통해 보다 효과적으로 사회연결망을 분석할 수 있다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다.  예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (5)

  1. 희소행렬 간의 곱셈을 수행하는 방법에 있어서,
    CPU(Central Processor Unit)가 제1 희소행렬과 제2 희소행렬을 각각 부분행렬로 분할하는 단계;
    스레드의 작업량과 스레드 블록의 작업량이 각각 균등하게 분배되도록 상기 제1 희소행렬과 제2 희소행렬의 각 부분행렬에 대한 워크로드 테이블을 생성하는 단계; 및
    상기 제1 희소행렬의 부분행렬, 상기 제2 희소행렬의 부분행렬 및 상기 워크로드 테이블을 기초로 GPU(Graphic Processor Unit)를 이용하여 상기 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행하는 단계
    를 포함하는 희소행렬 곱셈 방법.
  2. 제1항에 있어서,
    상기 분할하는 단계 이전 또는 이후에,
    상기 제1 희소행렬의 0 이 아닌 원소들이 실제 곱셈을 수행하는 작업량을 파악하는 단계를 더 포함하는 것을 특징으로 하는 희소행렬 곱셈 방법.
  3. 제1항에 있어서,
    상기 워크로드 테이블에는,
    상기 스레드 블록의 작업량을 기초로 상기 스레드 블록이 내림차순으로 정렬되는 것을 특징으로 하는 희소행렬 곱셈 방법.
  4. 제1항에 있어서,
    상기 수행하는 단계는,
    상기 제1 희소행렬의 부분행렬, 상기 제2 희소행렬의 부분행렬 및 상기 워크로드 테이블을 상기 GPU로 전송하는 단계;
    상기 제1 희소행렬과 상기 제2 희소행렬 간의 곱을 수행하기 위한 커널을 호출하는 단계; 및
    상기 GPU로부터 상기 제1 희소행렬의 부분행렬과 상기 제2 희소행렬의 부분행렬이 외적을 통해 곱셈된 부분 행렬을 수신하는 단계
    를 포함하는 것을 특징으로 하는 희소행렬 곱셈 방법.
  5. 제1항에 있어서,
    상기 제2 희소행렬의 부분행렬은,
    공유 메모리에 할당됨으로써 각 부분행렬 간의 곱셈 시 재사용되는 것을 특징으로 하는 희소행렬 곱셈 방법.
KR1020130025481A 2013-03-11 2013-03-11 Gpu를 이용한 희소행렬 곱셈 방법 KR101400577B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130025481A KR101400577B1 (ko) 2013-03-11 2013-03-11 Gpu를 이용한 희소행렬 곱셈 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130025481A KR101400577B1 (ko) 2013-03-11 2013-03-11 Gpu를 이용한 희소행렬 곱셈 방법

Publications (1)

Publication Number Publication Date
KR101400577B1 true KR101400577B1 (ko) 2014-06-19

Family

ID=51131287

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130025481A KR101400577B1 (ko) 2013-03-11 2013-03-11 Gpu를 이용한 희소행렬 곱셈 방법

Country Status (1)

Country Link
KR (1) KR101400577B1 (ko)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170012019A (ko) * 2015-07-24 2017-02-02 삼성전자주식회사 복수의 cpu 및 복수의 gpu를 지원하는 컴퓨팅 환경에서의 연산 방법
CN106681694A (zh) * 2016-12-30 2017-05-17 中国科学院计算技术研究所 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统
KR20180082666A (ko) * 2017-01-09 2018-07-19 경희대학교 산학협력단 유사이미지 검색을 위한 해시코드 생성장치 및 방법
KR20190104223A (ko) * 2017-01-22 2019-09-06 쥐에스아이 테크놀로지 인코포레이티드 연관 메모리 디바이스의 희소 행렬 곱셈
KR20190128795A (ko) * 2018-05-09 2019-11-19 에스케이하이닉스 주식회사 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
US10726096B2 (en) 2018-10-12 2020-07-28 Hewlett Packard Enterprise Development Lp Sparse matrix vector multiplication with a matrix vector multiplication unit
KR20200095617A (ko) * 2019-01-31 2020-08-11 한국기술교육대학교 산학협력단 행렬 연산 장치
KR20200140395A (ko) * 2016-12-31 2020-12-15 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
KR102224446B1 (ko) * 2019-10-14 2021-03-09 이화여자대학교 산학협력단 Gpgpu 스레드 블록 스케줄링 확장 방법 및 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20120113777A (ko) * 2010-01-07 2012-10-15 리니어 알제브라 테크놀로지스 리미티드 산술 연산들을 수행하기 위한 하드웨어
US8364739B2 (en) 2009-09-30 2013-01-29 International Business Machines Corporation Sparse matrix-vector multiplication on graphics processor units

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8364739B2 (en) 2009-09-30 2013-01-29 International Business Machines Corporation Sparse matrix-vector multiplication on graphics processor units
KR20120113777A (ko) * 2010-01-07 2012-10-15 리니어 알제브라 테크놀로지스 리미티드 산술 연산들을 수행하기 위한 하드웨어

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170012019A (ko) * 2015-07-24 2017-02-02 삼성전자주식회사 복수의 cpu 및 복수의 gpu를 지원하는 컴퓨팅 환경에서의 연산 방법
KR102505279B1 (ko) 2015-07-24 2023-03-02 삼성전자주식회사 복수의 cpu 및 복수의 gpu를 지원하는 컴퓨팅 환경에서의 연산 방법
CN106681694A (zh) * 2016-12-30 2017-05-17 中国科学院计算技术研究所 基于NVIDIA Kepler GPU汇编指令的单精度矩阵乘优化方法与系统
KR20200140395A (ko) * 2016-12-31 2020-12-15 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
KR102520017B1 (ko) 2016-12-31 2023-04-11 인텔 코포레이션 이종 컴퓨팅을 위한 시스템들, 방법들, 및 장치들
KR20180082666A (ko) * 2017-01-09 2018-07-19 경희대학교 산학협력단 유사이미지 검색을 위한 해시코드 생성장치 및 방법
KR101902213B1 (ko) * 2017-01-09 2018-11-08 경희대학교 산학협력단 유사이미지 검색을 위한 해시코드 생성장치 및 방법
KR102333638B1 (ko) * 2017-01-22 2021-12-01 쥐에스아이 테크놀로지 인코포레이티드 연관 메모리 디바이스의 희소 행렬 곱셈
KR20190104223A (ko) * 2017-01-22 2019-09-06 쥐에스아이 테크놀로지 인코포레이티드 연관 메모리 디바이스의 희소 행렬 곱셈
KR20190128795A (ko) * 2018-05-09 2019-11-19 에스케이하이닉스 주식회사 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
KR102555057B1 (ko) 2018-05-09 2023-07-12 에스케이하이닉스 주식회사 웨이트 매트릭스를 포맷하는 방법, 포맷된 데이터를 사용하는 가속기 및 이를 포함하는 시스템
US10726096B2 (en) 2018-10-12 2020-07-28 Hewlett Packard Enterprise Development Lp Sparse matrix vector multiplication with a matrix vector multiplication unit
KR102215449B1 (ko) * 2019-01-31 2021-02-15 한국기술교육대학교 산학협력단 행렬 연산 장치
KR20200095617A (ko) * 2019-01-31 2020-08-11 한국기술교육대학교 산학협력단 행렬 연산 장치
KR102224446B1 (ko) * 2019-10-14 2021-03-09 이화여자대학교 산학협력단 Gpgpu 스레드 블록 스케줄링 확장 방법 및 장치

Similar Documents

Publication Publication Date Title
KR101400577B1 (ko) Gpu를 이용한 희소행렬 곱셈 방법
WO2016173351A1 (zh) 一种数据处理方法及装置
US9311157B2 (en) Method and apparatus for dynamic resource allocation of processing units on a resource allocation plane having a time axis and a processing unit axis
Wunderlich et al. Network coding in heterogeneous multicore IoT nodes with DAG scheduling of parallel matrix block operations
Kurzak et al. LU factorization with partial pivoting for a multicore system with accelerators
KR102635453B1 (ko) Gpu를 위한 피드백 기반 분할 작업 그룹 디스패치
KR20110075296A (ko) 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치
JP6446125B2 (ja) リソースリーク検出の方法、装置及びシステム
JP6659724B2 (ja) 並列プロセッサカーネルのディスパッチサイズのコンカレンシーファクタを決定するシステム及び方法
JP7245833B2 (ja) 構成可能なハードウェアの実行時の最適化
Koo et al. Revealing critical loads and hidden data locality in GPGPU applications
Cojean et al. Resource aggregation for task-based cholesky factorization on top of modern architectures
Kang et al. Hi-fft: Heterogeneous parallel in-place algorithm for large-scale 2D-fft
Maggioni et al. An architecture-aware technique for optimizing sparse matrix-vector multiplication on GPUs
Ni et al. Scalable asynchronous contact mechanics using Charm++
Markthub et al. Using rcuda to reduce gpu resource-assignment fragmentation caused by job scheduler
CN113407333B (zh) Warp级别调度的任务调度方法、系统、GPU及设备
CN114003359A (zh) 基于弹性持久的线程块的任务调度方法、系统及gpu
US10521432B2 (en) Efficient execution of data stream processing systems on multi-core processors
Kim et al. Tiled QR decomposition and its optimization on CPU and GPU computing system
CN101937422B (zh) 基于gpu众核平台的fft并行方法
RU2708794C2 (ru) Вычислительный модуль для многопотоковой обработки цифровых данных и способ обработки с использованием данного модуля
CN104111868A (zh) 一种推测多线程调度方法及装置
Akhtar et al. Efficient Memory Access Patterns for Solving 3D Laplace Equation on GPU
Agarwal et al. Parallel Implementation of Scheduling Algorithms on GPU using CUDA

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170403

Year of fee payment: 4

LAPS Lapse due to unpaid annual fee