KR101858593B1 - 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법 - Google Patents

단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법 Download PDF

Info

Publication number
KR101858593B1
KR101858593B1 KR1020160090956A KR20160090956A KR101858593B1 KR 101858593 B1 KR101858593 B1 KR 101858593B1 KR 1020160090956 A KR1020160090956 A KR 1020160090956A KR 20160090956 A KR20160090956 A KR 20160090956A KR 101858593 B1 KR101858593 B1 KR 101858593B1
Authority
KR
South Korea
Prior art keywords
area
matrix
memory
sparse
sparse matrix
Prior art date
Application number
KR1020160090956A
Other languages
English (en)
Other versions
KR20170089389A (ko
Inventor
김상욱
조용연
이규환
장명환
Original Assignee
한양대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한양대학교 산학협력단 filed Critical 한양대학교 산학협력단
Publication of KR20170089389A publication Critical patent/KR20170089389A/ko
Application granted granted Critical
Publication of KR101858593B1 publication Critical patent/KR101858593B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • 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
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM

Landscapes

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

Abstract

단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법을 개시한다. 메모리 할당 방법은 메모리의 전체 영역을 식별하는 단계; 두 희소행렬 중 제1 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 두 희소행렬에 대한 곱셈 결과를 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하는 단계; 및 상기 식별된 메모리의 전체 영역과 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합에 기초하여 상기 두 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 할당하는 단계를 포함할 수 있다.

Description

단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법{MEMORY ALLOCATION APPARATUS AND METHOD FOR LARGE-SCALE SPARSE MATRIX MULTIPLICATION ON A SINGLE MACHINE}
본 발명은 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법에 관한 것으로 보다 구체적으로는 단일 머신으로 두 희소행렬의 곱셈을 효과적으로 수행하기 위해 필요한 메모리 영역을 할당하는 메모리 할당 장치 및 방법에 관한 것이다.
오늘날 사회연결망, 웹 등의 그래프 크기가 급격히 증가하면서 이를 효과적으로 분석하기 위한 방법이 필요하게 되었다. 현재 분산 처리 시스템을 기반으로 대용량 그래프를 분석하는 방법들이 제안되어 왔다. 두 희소행렬의 곱셈은 그래프 연산에서 핵심이 되는 연산이다.
그러나 두 희소행렬의 곱셈은 분산 처리 시스템에서 더욱 비효율적이다. 이유는 다음과 같다. 첫째, 각 분산 처리 시스템의 노드 마다 처리할 데이터를 저장해야 한다. 두 희소행렬 곱셈은 두 개의 행렬에 대한 데이터를 노드 마다 중복적으로 가지고 있어야 하는 경우가 발생한다. 대용량의 데이터의 경우에는 많은 저장 공간을 요구할 수 있다.
둘째, 최종 결과를 생성하기 위해서 노드 간의 communication이 필요하다. 각 노드마다 불완전한 결과들을 생성할 수 있다. 따라서 이것들을 병합하는 과정이 필요하고, 이를 위해 노드 간의 communication이 발생한다. 또한 두 희소행렬 곱셈은 매우 많은 결과를 생성할 수 있기 때문에 communication 비용은 더욱 증가할 수 있다.
셋째, 그래프 연산에서 사용되는 사회연결망 또는 웹과 같은 그래프를 표현한 희소행렬의 원소의 분포는 power-law degree distribution을 따른다. 이러한 분포로 인해 각 노드에 작업량을 균등하게 분배하는 것이 어렵워 분산처리 시스템을 충분히 활용하기 어렵다.
따라서, 이러한 문제를 해결하기 위한 단일 머신 기반의 두 희소행렬의 곱셈에 대한 필요성이 대두되었다.
본 발명은 두 희소행렬의 곱셈 방식에 따라 서로 다른 메모리 영역을 할당함으로써 각각의 곱셈 방식에 대해 효과적으로 두 희소행렬의 곱셈을 수행할 수 있는 장치 및 방법을 제공한다.
본 발명의 일실시예에 따른 메모리 할당 방법은 메모리의 전체 영역을 식별하는 단계; 두 희소행렬 중 제1 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 두 희소행렬에 대한 곱셈 결과를 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하는 단계; 및 상기 식별된 메모리의 전체 영역과 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합에 기초하여 상기 두 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 할당하는 단계를 포함할 수 있다.
상기 할당하는 단계는 상기 두 희소행렬을 inner product 에 기초하여 곱셈을 하는 경우, 상기 메모리의 제2 영역 및 제3 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제1 영역에 할당할 수 있다.
상기 할당하는 단계는 상기 제2 영역 및 제3 영역은 동일한 크기의 영역을 할당할 수 있다.
상기 할당하는 단계는 상기 두 희소행렬을 row-row product에 기초하여 곱셈을 하는 경우, 상기 메모리의 제1 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제2 영역 및 제3 영역에 나누어 할당할 수 있다.
상기 할당하는 단계는 상기 제2 영역 및 제3 영역은 동일한 크기의 영역을 할당할 수 있다.
상기 할당하는 단계는 상기 두 희소행렬을 outer product에 기초하여 곱셈을 하는 경우, 상기 메모리의 제3 영역에 상기 메모리의 절반에 해당하는 영역을 할당하고, 할당하고 남은 영역을 제1 영역 및 제2 영역에 나누어 할당할 수 있다.
상기 할당하는 단계는 상기 제1 영역 및 제2 영역은 동일한 크기의 영역을 할당할 수 있다.
상기 할당된 제1 영역에 제1 희소행렬의 부분 행렬을 로드하고, 상기 할당된 제2 영역에 제2 희소행렬의 부분 행렬을 로드하는 단계; 상기 로드된 두 희소행렬의 부분 행렬에 대한 곱셈을 수행하는 단계; 및 상기 두 희소행렬의 부분 행렬에 대한 곱셈을 수행한 결과를 상기 할당된 제3 영역에 기록하여 처리하는 단계를 더 포함할 수 있다.
상기 로드하는 단계는 상기 제1 희소행렬의 부분 행렬 및 상기 제2 희소행렬의 부분 행렬 중 로드되지 않고 남아있는 부분 행렬을 확인하는 단계; 및 상기 남아 있는 부분 행렬을 각각 제1 영역 및 제2 영역에 로드하는 단계를 더 포함할 수 있다.
본 발명의 일실시예에 따른 메모리 할당 장치는 두 희소행렬을 곱하기 위하여 상기 두 희소행렬의 부분 행렬을 로드하기 위한 메모리; 상기 메모리의 전체 영역을 식별하고, 상기 두 희소행렬 중 제1 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 두 희소행렬에 대한 곱셈 결과를 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하며, 상기 식별된 메모리의 전체 영역과 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합에 기초하여 상기 두 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 할당하는 프로세서를 포함할 수 있다.
상기 프로세서는 상기 두 희소행렬을 inner product 에 기초하여 곱셈을 하는 경우, 상기 메모리의 제2 영역 및 제3 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제1 영역에 할당할 수 있다.
상기 프로세서는 상기 두 희소행렬을 row-row product에 기초하여 곱셈을 하는 경우, 상기 메모리의 제1 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제2 영역 및 제3 영역에 나누어 할당할 수 있다.
상기 프로세서는 상기 두 희소행렬을 outer product에 기초하여 곱셈을 하는 경우, 상기 메모리의 제3 영역에 상기 메모리의 절반에 해당하는 영역을 할당하고, 할당하고 남은 영역을 제1 영역 및 제2 영역에 나누어 할당할 수 있다.
상기 프로세서는 상기 할당된 제1 영역에 제1 희소행렬의 부분 행렬을 로드하고, 상기 할당된 제2 영역에 제2 희소행렬의 부분 행렬을 로드하며, 상기 로드된 두 희소행렬의 부분 행렬에 대한 곱셈을 수행한 후 상기 두 희소행렬의 부분 행렬에 대한 곱셈을 수행한 결과를 상기 할당된 제3 영역에 기록하여 처리할 수 있다.
상기 프로세서는 상기 할당된 제3 영역이 가득찬 경우, 상기 제3 영역에 기록된 결과를 저장장치에 저장하고, 상기 제3 영역에 기록된 결과가 row-row product 또는 outer prodect에 의해 생성된 경우, 상기 저장장치에 저장된 결과를 통합할 수 있다.
본 발명의 일실시예에 따르면, 두 희소행렬의 곱셈 방식에 따라 서로 다른 메모리 영역을 할당함으로써 각각의 곱셈 방식에 대해 효과적으로 두 희소행렬의 곱셈을 수행할 수 있다.
도 1은 본 발명의 일실시예에 따른 메모리 할당 장치를 도시한 도면이다.
도 2는 본 발명의 일실시예에 따른 서로 다른 3가지의 두 희소행렬 곱셈 방식을 도시한 도면이다.
도 3은 본 발명의 일실시예에 따른 서로 다른 3가지의 두 희소행렬 곱셈 방식에 따른 메모리 할당 방법의 예를 도시한 도면이다.
도 4는 본 발명의 일실시예에 따른 메모리 할당 장치가 두 희소행렬에 대해 곱셈 연산하는 방법을 플로우챠트로 도시한 도면이다.
이하, 본 발명의 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 메모리 할당 장치를 도시한 도면이다.
메모리 할당 장치(100)는 프로세서(110), 메모리(120) 및 저장 장치(130)로 구성될 수 있다. 프로세서(110)는 두 희소행렬의 곱셈을 수행하기 위하여 두 희소행렬의 곱셈 방식에 따라 상기 메모리(120) 내에 서로 다른 메모리 영역을 할당함으로써 각각의 곱셈 방식에 대해 효과적으로 두 희소행렬의 곱셈을 수행할 수 있다. 이때, 메모리 할당 장치(100)는 단일 머신으로 구성될 수 있으며, 두 희소행렬의 곱셈 방식은 inner product, row-row product 및 outer product 중 적어도 하나를 포함할 수 있다.
구체적으로 본 발명의 메모리 할당 장치(100)는 두 희소행렬이 메모리(120)에 한 번에 로드되는 것이 불가능한 상황을 가정한다. 이러한 경우에 메모리 할당 장치(100)는 먼저 메모리(120)의 전체 영역에 대한 크기를 고려하여 두 희소행렬을 부분행렬로 분해할 수 있다.
이후 메모리 할당 장치(100)는 메모리(120) 내에 두 희소행렬의 부분행렬을 각각 로드하기 위한 영역 및 두 희소행렬의 부분행렬을 곱하여 생성되는 결과를 기록하기 위한 영역을 두 희소행렬의 곱셈 방식에 따라 나누어 할당할 수 있다.
메모리 할당 장치(100)는 두 희소행렬의 부분행렬을 각각 로드하기 위해 할당된 영역에 상기 두 희소행렬의 부분행렬을 로드하고, 각각의 두 희소행렬의 곱셈 방식에 따라 곱셈을 실시할 수 있다. 이후, 메모리 할당 장치(100)는 곱셈을 실시한 결과를 두 희소행렬의 부분행렬을 곱하여 생성되는 결과를 기록하기 위해 할당된 영역에 기록하고, 해당 영역이 가득 찬 경우, 기록된 결과를 저장 장치(130)에 저장할 수 있다.
도 2는 본 발명의 일실시예에 따른 서로 다른 3가지의 두 희소행렬 곱셈 방식을 도시한 도면이다.
두 희소행렬의 곱셈은 하기의 식 1과 같이 두 개의 희소 행렬(제1 희소행렬과 제2 희소행렬)을 곱하여 새로운 제3 결과행렬을 생성하는 연산이다. 이 연산은 행렬 내 원소간의 반복적인 곱셈과 덧셈을 수행된다. 원소간의 곱셈 및 덧셈을 수행하는 순서와 두 희소행렬 내의 원소에 접근하는 순서에 따라 두 희소행렬의 곱셈 방법을 (1) inner product, (2) row-row product 및 (3) outer product로 분류할 수 있다.
[식 1]
제3 결과행렬 = 제1 희소행렬
Figure 112016069533692-pat00001
제2 희소행렬
보다 구체적으로 두 희소행렬의 곱셈 방법 중 (1)inner product를 이용하여 두 희소행렬을 곱하는 방법은 하기의 식 2와 같다.
[식 2]
Figure 112016069533692-pat00002
이때, C[i][k]는 제3 결과행렬을 나타내고, A[i][j]와 B[j][k]는 각각 제1 희소행렬 및 제2 희소행렬을 나타낼 수 있다. 제1 희소행렬 A에 포함된 행 벡터(A[i][])의 각 원소는 상기 각 원소와 대응되는 제2 희소행렬 B에 포함된 열 벡터(B[][k])의 원소 하나와 곱해질 수 있다. 이때, 제1 희소행렬 A에 포함된 행 벡터(A[i][])의 각 원소 및 상기 각 원소와 대응되는 제2 희소행렬 B에 포함된 열 벡터(B[][k])의 원소간의 곱셈으로 생성된 결과들을 합하여 제3 결과행렬 C에 포함되는 1개의 결과 원소(C[i][k])를 생성할 수 있다.
이 때, 두 원소간의 곱셈이 가능하기 위해서는 제1 희소행렬 A 내 원소(A[i][j])의 열 인덱스(index)와 제2 희소행렬 B 내 원소(B[j][k])의 행 인덱스가 같아야 한다. 그 결과 도 2의 (a)와 같이 제1 희소행렬 A에 포함된 행 벡터 1개와 희소행렬 B에 포함된 열 벡터 n개를 연산하여 제3 결과행렬 C에 포함되는 행 벡터 1개를 생성되고, 이를 제1 희소행렬 A에 포함된 n개의 행 벡터에 대해 반복함으로써 최종 제3 결과행렬 C를 생성할 수 있다.
Inner product 기반의 대용량 희소 행렬의 곱셈을 수행하기 위해서 제1 희소행렬 A는 행 벡터에 순차적으로 접근할 수 있도록 메모리에 저장되고, 제2 희소행렬 B는 열 벡터에 순차적으로 접근할 수 있도록 메모리에 저장되어야 한다. 이는 제1 희소행렬 A는 행 벡터 단위의 접근이 요구되고, 희소행렬 B는 열 벡터 단위의 접근이 요구되기 때문이다.
다음으로 두 희소행렬의 곱셈 방법 중 (2)row-row product를 이용하여 두 희소행렬을 곱하는 방법은 하기의 식 3와 같다.
[식 3]
Figure 112016069533692-pat00003
이때, C[i][]는 제3 결과행렬을 나타내고, A[i][j]와 B[j][]는 각각 제1 희소행렬 및 제2 희소행렬을 나타낼 수 있다. 제1 희소행렬 A에 포함된 하나의 행 벡터(A[i][])와 제2 희소행렬 B에 포함된 복수의 행 벡터(B[][k], B[][l], …)를 곱하여 제3 결과행렬 C에 포함되는 하나의 행 벡터(C[i][])를 생성할 수 있다. 이 때, 제1 희소행렬 A에 포함된 행 벡터의 각 원소(A[i][j])는 상기 각 원소(A[i][j])와 대응되는 제2 희소행렬 B에 포함된 하나의 행 벡터(B[j][]) 내에 존재하는 모든 원소와 계산되어 불완전한 제3 결과행렬 C에 포함되는 하나의 행 벡터(C[i][])를 생성할 수 있다.
그 결과 제1 희소행렬 A에 포함된 하나의 행 벡터와 제2 희소행렬 B에 포함된 복수의 행 벡터와의 연산으로 생성된 불완전한 제3 결과행렬 C에 포함되는 복수의 행 벡터들을 합침으로써 완전한 제3 결과행렬 C에 포함되는 하나의 행 벡터를 생성할 수 있다. 이를 제1 희소행렬 A에 포함된 n개의 행 벡터에 대해 반복하여 최종 제3 결과행렬 C를 생성할 수 있다.
Row-row product 기반의 대용량 희소 행렬의 곱셈을 수행하기 위해서 제1 희소행렬 A 및 제2 희소행렬 B 모두 행 벡터에 순차적으로 접근할 수 있도록 메모리에 저장되어야 한다. 이는 제1 희소행렬 A 및 제2 희소행렬 B 모두 행 벡터 단위의 접근이 요구되기 때문이다.
마지막으로 두 희소행렬의 곱셈 방법 중 (3)outer product를 이용하여 두 희소행렬을 곱하는 방법은 하기의 식 4와 같다.
[식 4]
Figure 112016069533692-pat00004
이때, C[][]는 제3 결과행렬을 나타내고, A[][j]와 B[j][]는 각각 제1 희소행렬 및 제2 희소행렬을 나타낼 수 있다. 제1 희소행렬 A에 포함된 하나의 열 벡터(A[][j])와 제2 희소행렬 B에 포함된 하나의 행 벡터(B[j][])를 곱하여 불완전한 전체 제3 결과행렬 C를 생성할 수 있다. 이 때, 제1 희소행렬 A에 포함된 하나의 열 벡터의 각 원소(A[i][j])는 제2 희소행렬 B에 포함된 행 벡터(B[j][]) 내에 존재하는 모든 원소와 계산되어 불완전한 전체 제3 결과행렬 C에 포함되는 불완전한 하나의 행 벡터(C[i][])를 생성할 수 있다.
그 결과 제1 희소행렬 A에 포함된 하나의 열 벡터에 존재하는 모든 원소와 제2 희소행렬 B에 포함된 하나의 행 벡터 (B[j][])와의 연산으로 생성된 불완전한 전체 제3 결과행렬 C에 포함되는 불완전한 복수 개의 행 벡터를 생성할 수 있다. 이와 같이, 제1 희소행렬 A에 포함된 모든 열 벡터와 제2 희소행렬 B에 포함된 모든 행 벡터가 동일한 인덱스 쌍에 따라 연산되어 불완전한 전체 제3 결과행렬 C에 포함되는 불완전한 복수의 행 벡터들을 생성할 수 있고, 생성된 불완전한 복수의 행 벡터들을 통합함으로써 최종 제3 결과행렬 C를 생성할 수 있다.
도 3은 본 발명의 일실시예에 따른 서로 다른 3가지의 두 희소행렬 곱셈 방식에 따른 메모리 할당 방법의 예를 도시한 도면이다.
두 희소행렬의 곱셈을 위해 할당되는 두 희소행렬의 부분행렬을 각각 로드하기 위한 영역의 크기 및 두 희소행렬의 부분행렬을 곱하여 생성되는 결과를 기록하기 위한 영역의 크기에 따라 두 희소행렬의 곱셈에 대한 성능이 변하기 때문에 각 두 희소행렬의 곱셈 방법에 대한 특징을 파악하고 그에 맞는 메모리 할당 방법이 필요하다.
(1) Inner product 기반의 대용량 희소 행렬의 곱셈 방법은 데이터베이스 분야에서 잘 알려진 block nested loop join을 이용한 두 relation의 join과 유사하게 동작한다. 우선, 메모리 할당 장치(100)는 제1 희소행렬 A를 복수의 행 벡터로 이루어진 부분 행렬 단위로 분해하여 메모리(120)로 로드할 수 있다. 이후 메모리 할당 장치(100)는 제2 희소행렬 B의 전체를 부분 행렬 단위로 분해하여 메모리(120)로 로드하면서 곱셈 가능한 원소들에 대해 곱셈 연산을 수행할 수 있다. 이 과정 역시 제1 희소행렬 A의 모든 부분 행렬을 처리할 때까지 반복되므로, 제2 희소행렬 B의 전체를 제1 희소행렬 A의 부분 행렬 수만큼 로드하게 된다. 메모리 할당 장치(100)는 연산된 결과를 메모리(120) 담아두었다가 결과를 위한 메모리 영역이 가득 찼을 때 저장 장치(130)로 옮겨 저장할 수 있다.
이때, 제1 희소행렬 A 및 제2 희소행렬 B와 제3 결과행렬 C에 할당하는 메모리 영역의 크기에 따라 (1)두 희소행렬의 부분 행렬을 메모리에 적재하는 과정, (2) 두 희소행렬의 부분 행렬에 대한 곱셈 결과 생성된 제3 결과행렬 C를 저장장치(130)에 저장하는 과정의 성능이 달라진다. 상기 두 과정의 성능 최적화를 위해 메모리 할당 장치(100)는 block nested loop join에서 IO 비용을 최소화시키는 메모리 할당 방법을 적용한다.
즉, 메모리 할당 장치(100)는 제2 희소행렬을 로드하기 위해 필요한 메모리(120) 내의 제2 영역 및 두 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬 C를 기록하기 위해 필요한 메모리(120) 내의 제3 영역에 대해서는 최소 영역을 할당할 수 있다. 그리고 메모리 할당 장치(100)는 제1 희소행렬을 로드하기 위해 필요한 메모리(120) 내의 제1 영역에 대해서는 제2 영역 및 제3 영역에 할당하고 남은 모든 영역을 할당할 수 있다
이를 통해, 메모리 할당 장치(100)는 제1 희소행렬을 나누어 로드하는 횟수를 줄여 제2 희소행렬의 전체를 로드하는 횟수를 줄일 수 있다. 이때, 두 희소행렬을 곱한 결과 생성된 제3 결과행렬 C의 양은 메모리 영역의 크기와 상관없이 일정하기 때문에, 할당하는 영역의 크기를 최소화해도 기록되는 양은 변하지 않는다. 따라서 메모리 할당 장치(100)는 inner product를 수행하여 두 희소행렬을 곱하는 경우, 제2 희소행렬 B를 로드할 수 있는 제2 영역과 두 희소행렬의 곱셈 결과 생성된 제3 결과행렬 C를 담을 수 있는 제3 영역을 최소화하고, 제1 희소행렬 A를 로드할 수 있는 제1 영역에 나머지 메모리 영역을 모두 할당함으로써 IO 비용을 최소화할 수 있다.
(2) Row-row product 기반의 대용량 희소 행렬의 곱셈 방법도 inner product 기반의 대용량 희소 행렬의 곱셈 방법과 같이 block nested loop join을 이용한 두 relation의 join과 유사하게 동작한다. Row-row product를 이용해서 대용량 희소 행렬의 곱셈을 수행할 때, 두 희소행렬을 로드하는 방식은 inner product와 동일하다. 즉, 두 희소행렬을 부분 행렬로 나누어 메모리로 적재하고 곱셈 연산을 수행할 수 있다. 그러나 inner product와는 다르게 두 희소행렬의 부분 행렬에 대한 곱셈 연산으로 완전하지 않은 중간 결과를 얻기 때문에, block nested loop join에서의 방법만 적용해서는 성능을 최적화시키기 어렵다. 따라서 본 발명은 row-row product의 특성을 분석해서 성능을 최적화시킬 수 있는 방법을 제안한다.
제1 희소행렬 A 및 제2 희소행렬 B와 제3 결과행렬 C에 할당하는 메모리 영역의 크기에 따라 (1)두 희소행렬의 부분 행렬을 메모리(120)에 적재하는 과정, (2) 메모리(120) 상에서 중간 결과를 정렬하고 합병하는 과정, (3) 정렬된 중간 결과를 저장장치(130)에 저장하는 과정, (4) 저장장치(130)에 있는 중간 결과들을 최종 결과로 합병하는 과정의 성능이 달라진다. 두 희소행렬의 부분 행렬을 메모리에 적재하는 과정의 성능을 향상시키기 위해서는 inner product에서와 같은 방법을 이용할 수 있다. 그러나 이 방법이 전체 수행시간을 최소화하지 않기 때문에, 나머지 과정의 성능까지 고려해서 메모리를 할당해야 한다.
메모리(120) 상에서 중간 결과를 정렬하고 합병하는 과정의 성능은 제3 결과행렬 C에 할당하는 메모리(120) 상의 제3 영역의 크기에 영향을 받는다. 이때, 제3 결과행렬 C에 할당하는 제3 영역의 크기가 클수록 한 번에 정렬해야 하는 원소의 수가 많아지기 때문에 정렬 비용이 커지는 단점이 있다.
정렬된 중간 결과를 저장장치(130)에 쓰는 과정의 성능을 향상시키기 위한 방법은 2가지가 있다. 첫 번째, 저장장치(130)에 순차적으로 접근하도록 제3 결과행렬 C에 할당하는 제3 영역의 크기를 늘린다. 두 번째, 메모리(120) 상에서 합병되는 중간 결과의 수를 늘려 저장장치(130)에 저장하는 양을 줄인다.
제3 결과행렬 C에 할당하는 제3 영역의 크기가 커지면, 저장장치(130)에 저장하기 전에 담아둘 수 있는 중간 결과가 많으므로 서로 합병될 수 있는 원소가 있을 확률이 높다. 또한, 제2 희소행렬 B에 할당하는 제2 영역의 크기가 커지면, 제1 희소행렬 A에 포함된 행 1개와 연속적으로 계산될 수 있는 제2 희소행렬 B에 포함된 행의 수가 많아지므로 서로 합병될 수 있는 중간 결과들이 연속적으로 제3 영역에 담기게 된다. 따라서, 제2 희소행렬 B에 할당하는 제2 영역과 제3 결과행렬 C에 할당하는 제3 영역의 크기가 클수록 메모리(120) 상에서 합병되는 중간 결과의 수가 많아진다.
저장장치(130)에 있는 중간 결과들을 최종 결과로 합병하는 과정의 성능은 합병해야 할 원소의 수가 적고, file의 수가 줄어들수록 향상된다. 즉, 정렬된 중간 결과를 저장장치(130)에 저장하는 과정의 성능을 향상시키는 방법과 동일하다.
이때, 제1 희소행렬 A, 제2 희소행렬 B 및 제3 결과행렬 C에 할당하는 메모리 영역의 크기는 서로 다른 곱셈 연산 과정의 성능에 영향을 주므로 이를 고려해서 할당해야 한다.
제1 희소행렬 A에 할당하는 제1 영역의 크기는 제1 희소행렬의 부분행렬 및 제2 희소행렬의 부분 행렬을 메모리(120)에 적재하는 과정의 성능에만 영향을 준다. Inner product에서처럼 제1 희소행렬 A에 많은 메모리 영역의 크기를 할당해서 이 과정의 성능만 향상시키는 것은 비효율적이다. 따라서 메모리 할당 장치(100)는 제2 희소행렬 B를 nested loop join에서의 outer relation에 대응시키고, 제1 희소행렬 A에 최소한의 메모리 영역의 크기를 할당할 수 있다.
이때, 할당하고 남은 메모리 영역의 크기의 대부분을 제2 희소행렬 B의 부분 행렬을 로드하기 위한 제2 영역에 할당하는 경우, 제3 결과행렬 C에 할당되는 제3 영역의 크기가 작아서 합병되는 중간 결과의 수가 적어진다. 따라서, 합병되는 중간 결과의 수를 늘리기 위해 제1 희소행렬 A의 부분행렬을 로드하기 위한 제1 영역에 할당하고 남은 메모리 영역의 크기를 제2 희소행렬 B에 할당하는 제2 영역과 제3 결과행렬 C에 할당하는 제3 영역에 나누어 할당하는 방법이 필요하다.
제1 희소행렬 A에 포함된 행 벡터 1개와 제2 희소행렬 B에 포함된 복수의 행 벡터를 곱하였을 때의 중간 결과들은 모두 제3 결과행렬 C에 포함되는 행 벡터 1개로 합병될 수 있는 결과들이다. 즉, 제1 희소행렬 A에 포함된 원소 1개와 제2 희소행렬 B에 포함된 행 벡터 1개를 곱해서 제3 결과행렬 C에 포함되는 행 벡터 1개에 대한 중간 결과를 얻기 때문에, 제1 희소행렬 A에 포함된 행 벡터 1개와 제2 희소행렬 B에 포함된 행 벡터 k개를 곱해서 나오는 제3 결과행렬 C에 포함되는 행 벡터 수는 최대 k개이다. 따라서 합병이 가능한 중간 결과들을 모두 담아둘 수 있는 공간을 확보하기 위해 제3 결과행렬 C에 할당하는 제3 영역 크기는 제2 희소행렬 B에 할당하는 제2 영역의 크기보다 같거나 커야 한다.
이와 같이 제2 희소행렬 B에 할당하는 제2 영역의 크기가 클수록 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분 행렬을 메모리(120)에 적재하는 과정의 성능이 향상되고, 제3 결과행렬 C에 할당하는 제3 영역의 크기가 작을수록 메모리(120) 상에서 중간 결과를 정렬하는 과정의 성능이 향상되기 때문에, 메모리 할당 장치(100)는 제1 희소행렬 A의 부분행렬을 로드하기 위한 제1 영역에 할당하고 남은 메모리 영역의 크기를 제2 희소행렬 B에 할당하는 제2 영역과 제3 결과행렬 C에 할당하는 제3 영역에 동일하게 나누어 할당할 수 있다.
(3) Outer product 기반의 대용량 희소 행렬의 곱셈 방법은 데이터베이스 분야에서 잘 알려진 sort merge join과 유사하게 동작한다. 우선 메모리 할당 장치(100)는 제1 희소행렬 A에 포함된 열 벡터와 제2 희소행렬 B에 포함된 행 벡터의 인덱스(index)를 비교해서 같은 경우 곱셈 연산을 수행할 수 있다. 제1 희소행렬 A에 포함된 열 벡터에 대한 인덱스와 제2 희소행렬 B에 포함된 행 벡터의 인덱스는 서로 중복되지 않기 때문에, join attribute의 중복이 없는 sort merge join과 유사하게 동작한다.
이 때, 메모리 할당 장치(100)는 제1 희소행렬 A를 복수의 열 벡터로 이루어진 부분 행렬 단위로 메모리(120) 상의 제1 영역에 로드하고, 제2 희소행렬 B를 복수의 행 벡터로 이루어진 부분 행렬 단위로 메모리(120) 상의 제2 영역에 로드할 수 있다. 메모리 할당 장치(100)는 메모리(120) 상에 로드된 제1 희소행렬 A의 부분 행렬 및 제2 희소행렬 B의 부분 행렬들을 이용해서 곱셈 연산을 수행하고, 곱셈 연산을 수행한 결과 생성된 제3 결과행렬 C들을 메모리(120) 상의 제3 영역에 담아두었다가 제3 영역에 대응하는 메모리 공간이 가득 차면 제3 결과행렬 C를 저장장치(130)에 저장할 수 있다.
Row-row product와 마찬가지로, 제1 희소행렬 A 및 제2 희소행렬 B와 결과행렬 C에 할당하는 메모리 영역의 크기에 따라 (1) 두 희소행렬의 부분 행렬을 메모리에 적재하는 과정, (2) 메모리(120) 상에서 중간 결과를 정렬하고 합병하는 과정, (3) 정렬된 중간 결과를 저장장치(130)에 저장하는 과정, (4) 저장장치(130)에 있는 중간 결과들을 최종 결과로 합병하는 과정의 성능이 달라진다.
Sort merge join의 특성으로 제1 희소행렬 A에 할당하는 제1 영역 및 제2 희소행렬 B에 할당하는 제2 영역의 크기와 상관없이 제1 희소행렬 A 및 제2 희소행렬 B를 읽는 횟수는 한 번으로 일정하지만, 할당하는 메모리(120 상의 제1 영역 및 제2 영역의 크기가 클수록 저장장치(130)에 순차 접근하는 효과가 있다.
정렬된 중간 결과를 저장장치(130)에 저장하는 과정의 성능은 제3 결과행렬 C에 할당하는 제3 영역의 크기가 클수록 좋아진다. 이는 저장장치(130)에 순차 접근하는 효과뿐만 아니라, 중간 결과를 쓰는 양을 줄일 수 있기 때문이다. 제1 희소행렬 A에 포함된 열 벡터 1개와 제2 희소행렬 B에 포함된 행 벡터 1개에 대한 곱셈 결과 생성된 불완전한 제3 결과행렬 C를 제3 영역에 기록하였을 때, 제3 영역의 공간이 가득 차지 않는다면, 그 다음 벡터에 대한 곱셈 연산 결과를 담을 수 있다. 이 때, 생성된 불완전한 제3 결과행렬 C의 동일한 위치에 속하는 원소에 대한 중간 결과들은 메모리(120) 상의 제3 영역에서 정렬된 후 합병하는 과정을 거쳐 하나의 값으로 합쳐진다. 또한, 많은 원소를 하나의 file에 쓰게 되므로, 중간 결과를 저장하는 file의 개수가 줄어든다. 따라서 저장장치(130)에 있는 중간 결과들을 합병하기 위한 외부 정렬의 성능을 향상시킬 수 있다.
예를 들어, m원 합병 정렬은 정렬해야 할 전체 원소의 수가 같을 때, 내부적으로 정렬된 file의 수가 적을수록 좋은 성능을 보인다. 반면, 메모리(120) 상의 제3 영역에서 중간 결과를 정렬하는 과정의 성능은 제3 결과행렬 C에 할당한 제3 영역의 크기가 클수록 나빠진다. 만약 메모리(120) 상의 제 3영역에서 많은 중간 결과들이 합병된다면, 저장장치(130)에 있는 중간 결과들의 양이 줄어들어 정렬하고 합병하는 비용이 줄어든다.
다만, 희소 행렬 내 원소의 위치가 불규칙하기 때문에, 메모리(120) 상의 제3 영역에서 합병되는 중간 결과의 양을 예측하기 어려우므로 실험을 통해 최적의 성능을 낼 수 있는 메모리 할당 방법을 확인하였다. 그 결과 메모리 할당 장치(100)는 두 희소행렬의 곱셈 결과 생성된 제3 결과행렬 C에 전체 메모리(120) 영역의 절반 크기에 해당하는 제3 영역을 할당하고, 제3 영역에 할당하고 남은 메모리 영역의 크기를 제1 희소행렬 A에 할당하는 제1 영역 및 제2 희소행렬 B에 할당하는 제2 영역에 동일하게 나누어 할당 할 수 있다.
도 4는 본 발명의 일실시예에 따른 메모리 할당 장치가 두 희소행렬에 대해 곱셈 연산하는 방법을 플로우챠트로 도시한 도면이다.
단계(410)에서 메모리 할당 장치(100)는 메모리(120)의 전체 영역의 크기를 식별할 수 있다.
단계(420)에서 메모리 할당 장치(100)는 제1 희소 행렬을 로드하기 위해 필요한 메모리(120) 상의 제1 영역의 크기, 제2 희소 행렬을 로드하기 위해 필요한 메모리(120) 상의 제2 영역의 크기 및 제1 희소행렬과 제2 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬을 기록하기 위한 메모리(120) 상의 제3 영역의 크기를 확인할 수 있다.
단계(430)에서 메모리 할당 장치(100)는 식별된 메모리(120)의 전체 영역의 크기과 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합에 기초하여 제1 희소행렬과 제2 희소행렬의 곱셈 방식에 따라 메모리(120)의 영역을 할당할 수 있다.
본 발명은 제1 희소행렬 및 제2 희소행렬이 메모리(120) 상에 한 번에 로드되는 것이 불가능한 상황을 가정한다. 따라서, 메모리 할당 장치(100)는 식별된 메모리(120)의 전체 영역의 크기가 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합보다 작은 경우 제1 희소행렬과 제2 희소행렬의 곱셈 방식에 따라 메모리(120)의 영역을 할당할 수 있다.
구체적으로 메모리 할당 장치(100)는 Inner product 기반의 대용량 희소 행렬에 대해 곱셈 연산을 수행하는 경우, 제2 희소행렬을 로드하기 위해 필요한 메모리(120) 내의 제2 영역 및 두 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬을 기록하기 위해 필요한 메모리(120) 내의 제3 영역에 대해서는 최소 영역을 할당하고, 제1 희소행렬을 로드하기 위해 필요한 메모리(120) 내의 제1 영역에 대해서는 제2 영역 및 제3 영역에 할당하고 남은 모든 영역을 할당할 수 있다
그리고 메모리 할당 장치(100)는 Row-row product 기반의 대용량 희소 행렬에 대해 곱셈 연산을 수행하는 경우, 제1 희소행렬을 로드하기 위해 필요한 메모리(120) 내의 제1 영역에 대해서는 최소 영역을 할당하고, 제2 희소행렬에 할당하는 제2 영역과 제3 결과행렬에 할당하는 제3 영역에 대해서는 제1 영역에 할당하고 남은 메모리(120) 영역의 크기를 동일하게 나누어 할당할 수 있다.
또한 메모리 할당 장치(100)는 Outer product 기반의 대용량 희소 행렬에 대해 곱셈 연산을 수행하는 경우, 제1 희소행렬 및 제2 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬에 대해서는 전체 메모리(120) 영역의 절반 크기에 해당하는 제3 영역을 할당하고, 제1 희소행렬 A에 할당하는 제1 영역 및 제2 희소행렬 B에 대해서는 제3 영역에 할당하고 남은 메모리 영역의 크기를 동일하게 나누어 할당 할 수 있다.
단계(440)에서 메모리 할당 장치(100)는 할당된 제1 영역에 제1 희소 행렬의 부분 행렬을 로드하고, 할당된 제2 영역에 제2 희소 행렬의 부분 행렬을 로드할 수 있다.
단계(450)에서 메모리 할당 장치(100)는 로드된 제1 희소행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈 연산을 수행할 수 있다. 이후 메모리 할당 장치(100)는 곱셈 연산을 수행한 결과 생성된 제3 결과행렬을 메모리(120) 상의 제3 영역에 기록하고, 제3 영역이 가득 차는 경우 제3 영역에 기록된 제3 결과행렬을 저장장치(130)에 저장할 수 있다.
이때, inner product를 이용하여 제1 희소행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈 연산을 수행하는 것과는 달리 row-row product 및 outer product를 이용하여 제1 희소행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈 연산을 수행하는 경우, 완전하지 않는 중간 결과를 얻을 수 있다. 따라서, row-row product 및 outer product를 이용하여 제1 희소행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈 연산을 수행하는 경우 메모리 할당 장치(100)는 저장 장치(130)에 저장된 제3 결과행렬을 통합함으로써 최종 제3 결과행렬을 생성할 수 있다.
단계(460)에서 메모리 할당 장치(100)는 제1 희소행렬 및 제2 희소행렬의 부분 행렬 중 로드 되지 않고 남아있는 부분 행렬의 존재 여부를 식별할 수 있다. 만약 제1 희소행렬 및 제2 희소행렬의 부분 행렬 중 로드 되지 않고 남아있는 부분 행렬이 존재한다면 메모리 할당 장치(100)는 단계(440) 내지 단계(450)을 반복적으로 수행하여 제1 희소행렬 및 제2 희소행렬의 모든 부분 행렬에 대해서 곱셈 연산이 수행될 수 있도록 할 수 있다.
이와는 달리 제1 희소행렬 및 제2 희소행렬의 부분 행렬 중 로드 되지 않고 남아있는 부분 행렬이 존재하지 않는다면 메모리 할당 장치(100)는 두 희소행렬에 대한 곱셈 연산을 종료할 수 있다.
본 발명의 실시 예에 따른 방법들은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
그러므로, 본 발명의 범위는 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
100 : 메모리 할당 장치
110 : 프로세서
120 : 메모리
130 : 저장 장치

Claims (17)

  1. 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 방법에 있어서,
    상기 메모리의 전체 영역을 식별하는 단계;
    제1 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 제1 희소행렬 및 제2 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬을 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하는 단계; 및
    상기 식별된 메모리의 전체 영역의 크기가 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합보다 작은 경우, 상기 제1 희소행렬 및 제2 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 다르게 할당하는 단계를 포함하되,
    상기 할당하는 단계는,
    inner product, row-row product 및 outer product 중 적어도 하나를 포함하는 곱셈 방식에 따라, 상기 제1 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제1 영역, 제2 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제2 영역, 상기 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분행렬에 대한 곱셈 결과 생성된 제3 결과 행렬을 기록하기 위한 메모리 내의 제3 영역을 다르게 할당하는 것을 특징으로 하는 메모리 할당 방법.
  2. 제1항에 있어서,
    상기 할당하는 단계는,
    상기 제1 희소행렬 및 제2 희소행렬을 inner product 에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제2 영역 및 제3 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제1 영역에 할당하는 메모리 할당 방법.
  3. 제2항에 있어서,
    상기 제2 영역 및 제3 영역은 동일한 크기의 영역을 할당하는 메모리 할당 방법.
  4. 제1항에 있어서,
    상기 할당하는 단계는,
    상기 제1 희소행렬 및 제2 희소행렬을 row-row product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제1 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제2 영역 및 제3 영역에 나누어 할당하는 메모리 할당 방법.
  5. 제4항에 있어서,
    상기 제2 영역 및 제3 영역은 동일한 크기의 영역을 할당하는 메모리 할당 방법.
  6. 제1항에 있어서,
    상기 할당하는 단계는,
    상기 제1 희소행렬 및 제2 희소행렬을 outer product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제3 영역에 상기 메모리의 절반 크기에 해당하는 영역을 할당하고, 할당하고 남은 영역을 제1 영역 및 제2 영역에 나누어 할당하는 메모리 할당 방법.
  7. 제6항에 있어서,
    상기 제1 영역 및 제2 영역은 동일한 크기의 영역을 할당하는 메모리 할당 방법.
  8. 제1항에 있어서,
    상기 할당된 제1 영역에 제1 희소행렬의 부분 행렬을 로드하고, 상기 할당된 제2 영역에 제2 희소행렬의 부분 행렬을 로드하는 단계;
    상기 로드된 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈을 수행하는 단계; 및
    상기 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈을 수행한 결과 생성된 제3 결과 행렬을 상기 할당된 제3 영역에 기록하여 처리하는 단계
    를 더 포함하는 메모리 할당 방법.
  9. 제8항에 있어서,
    상기 로드하는 단계는,
    상기 제1 희소행렬의 부분 행렬 및 상기 제2 희소행렬의 부분 행렬 중 로드되지 않고 남아있는 부분 행렬을 확인하는 단계; 및
    상기 남아 있는 부분 행렬을 각각 제1 영역 및 제2 영역에 로드하는 단계
    를 더 포함하는 메모리 할당 방법.
  10. 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치에 있어서,
    제1 희소행렬 및 제2 희소행렬을 곱하기 위하여 상기 제1 희소행렬의 부분 행렬 및 상기 제2 희소행렬의 부분 행렬을 로드하기 위한 메모리;
    상기 메모리의 전체 영역을 식별하고, 상기 제1 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 두 희소행렬에 대한 곱셈 결과 생성된 제3 결과행렬을 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하며, 상기 식별된 메모리의 전체 영역의 크기가 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합보다 작은 경우, 상기 제1 희소행렬 및 제2 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 다르게 할당하는 프로세서를 포함하되,
    상기 프로세서는,
    inner product, row-row product 및 outer product 중 적어도 하나를 포함하는 곱셈 방식에 따라, 상기 제1 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제1 영역, 제2 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제2 영역, 상기 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분행렬에 대한 곱셈 결과 생성된 제3 결과 행렬을 기록하기 위한 메모리 내의 제3 영역을 다르게 할당하는 것을 특징으로 하는 메모리 할당 장치.
  11. 제10항에 있어서,
    상기 프로세서는,
    상기 제1 희소행렬 및 제2 희소행렬을 inner product 에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제2 영역 및 제3 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제1 영역에 할당하는 메모리 할당 장치.
  12. 제10항에 있어서,
    상기 프로세서는,
    상기 제1 희소행렬 및 제2 희소행렬을 row-row product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제1 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제2 영역 및 제3 영역에 나누어 할당하는 메모리 할당 장치.
  13. 제10항에 있어서,
    상기 프로세서는,
    상기 제1 희소행렬 및 제2 희소행렬을 outer product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제3 영역에 상기 메모리의 절반 크기에 해당하는 영역을 할당하고, 할당하고 남은 영역을 제1 영역 및 제2 영역에 나누어 할당하는 메모리 할당 장치.
  14. 제10항에 있어서,
    상기 프로세서는,
    상기 할당된 제1 영역에 제1 희소행렬의 부분 행렬을 로드하고, 상기 할당된 제2 영역에 제2 희소행렬의 부분 행렬을 로드하며, 상기 로드된 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분 행렬에 대한 곱셈을 수행하여 생성된 제3 결과행렬을 상기 할당된 제3 영역에 기록하여 처리하는 메모리 할당 장치.
  15. 제14항에 있어서,
    상기 프로세서는,
    상기 할당된 제3 영역이 가득찬 경우, 상기 제3 영역에 기록된 결과를 저장장치에 저장하고,
    상기 제3 영역에 기록된 결과가 row-row product 또는 outer product에 의해 생성된 경우, 상기 저장장치에 저장된 결과를 통합하는 메모리 할당 장치.
  16. 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 방법에 있어서,
    상기 메모리의 전체 영역을 식별하는 단계;
    두 희소 행렬 중 제1 희소 행렬을 로드하기 위해 필요한 상기 메모리 내 제1 영역의 크기, 제2 희소 행렬을 로드하기 위해 필요한 상기 메모리 내 제2 영역의 크기 및 상기 두 희소 행렬에 대한 곱셈 결과를 기록하기 위한 상기 메모리 내 제3 영역의 크기를 확인하는 단계;
    상기 식별된 메모리의 전체 영역의 크기가 상기 확인된 제1 영역의 크기, 제2 영역의 크기 및 제3 영역의 크기의 합보다 작은 경우, 상기 제1 희소행렬 및 제2 희소행렬의 곱셈 방식에 따라 상기 메모리의 영역을 다르게 할당하는 단계;
    상기 할당된 제1 영역에 제1 희소 행렬의 부분 행렬을 로드하고, 상기 할당된 제2 영역에 제2 희소 행렬의 부분 행렬을 로드하는 단계;
    상기 로드된 두 희소 행렬의 부분 행렬에 대한 곱셈을 수행하는 단계; 및
    상기 두 희소 행렬의 부분 행렬에 대한 곱셈을 수행한 결과를 상기 할당된 제3 영역에 기록하는 단계;
    상기 할당된 제3 영역에 기록된 결과를 병합하는 단계;
    상기 할당된 제3 영역이 가득 찬 경우, 상기 제3 영역에 기록된 결과를 저장장치에 저장하는 단계; 및
    상기 저장장치에 저장된 결과를 통합하는 단계를 포함하되,
    상기 할당하는 단계는,
    inner product, row-row product 및 outer product 중 적어도 하나를 포함하는 곱셈 방식에 따라, 상기 제1 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제1 영역, 제2 희소행렬의 부분행렬을 로드하기 위한 메모리 내의 제2 영역, 상기 제1 희소행렬의 부분 행렬 및 제2 희소행렬의 부분행렬에 대한 곱셈 결과 생성된 제3 결과 행렬을 기록하기 위한 메모리 내의 제3 영역을 다르게 할당하는 것을 특징으로 하는 메모리 할당 방법.
  17. 제 16항에 있어서,
    상기 할당하는 단계는,
    상기 두 희소 행렬을 inner product 에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제2 영역 및 제3 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제1 영역에 할당하고,
    상기 두 희소 행렬을 row-row product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제1 영역에 최소 영역을 할당하고, 할당하고 남은 영역을 제2 영역 및 제3 영역에 나누어 할당하며,
    상기 두 희소 행렬을 outer product에 기초하여 곱셈을 하는 경우,
    상기 메모리의 제3 영역에 상기 메모리의 절반에 해당하는 영역을 할당하고, 할당하고 남은 영역을 제1 영역 및 제2 영역에 나누어 할당하는 메모리 할당 방법.
KR1020160090956A 2016-01-26 2016-07-18 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법 KR101858593B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020160009529 2016-01-26
KR20160009529 2016-01-26

Publications (2)

Publication Number Publication Date
KR20170089389A KR20170089389A (ko) 2017-08-03
KR101858593B1 true KR101858593B1 (ko) 2018-05-17

Family

ID=59655464

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160090956A KR101858593B1 (ko) 2016-01-26 2016-07-18 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101858593B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101990735B1 (ko) * 2018-03-30 2019-06-18 서울대학교산학협력단 사전 그래프 분할 기반 행렬 벡터 곱을 이용한 대규모 그래프 마이닝 방법 및 장치
KR102142943B1 (ko) * 2018-06-25 2020-08-10 국민대학교산학협력단 클라우드 기반의 인공지능 연산 서비스 방법 및 이를 수행하는 장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110307685A1 (en) * 2010-06-11 2011-12-15 Song William S Processor for Large Graph Algorithm Computations and Matrix Operations
CN103106183A (zh) * 2013-01-29 2013-05-15 福建天晴数码有限公司 基于mapreduce的大规模稀疏矩阵乘法运算的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110307685A1 (en) * 2010-06-11 2011-12-15 Song William S Processor for Large Graph Algorithm Computations and Matrix Operations
CN103106183A (zh) * 2013-01-29 2013-05-15 福建天晴数码有限公司 基于mapreduce的大规模稀疏矩阵乘法运算的方法

Also Published As

Publication number Publication date
KR20170089389A (ko) 2017-08-03

Similar Documents

Publication Publication Date Title
EP3238106B1 (en) Compaction policy
US11325780B2 (en) Method and device for sorting cargo
US9418048B2 (en) Apparatus and method for allocating shared storage areas to parallel processors for multiplication of sparse matrix and vector
US8984085B2 (en) Apparatus and method for controlling distributed memory cluster
CN106407207B (zh) 一种实时新增数据更新方法和装置
CN111813805A (zh) 一种数据处理方法及装置
CN106557307B (zh) 业务数据的处理方法及处理系统
EP2608043A1 (en) Object arrangement apparatus, method therefor, and computer program
CN113742135A (zh) 数据备份方法、装置及计算机可读存储介质
KR101858593B1 (ko) 단일 머신 기반의 대용량 희소행렬 곱셈을 위한 메모리 할당 장치 및 방법
CN111915011A (zh) 一种单振幅量子计算模拟方法
CN112925821A (zh) 基于MapReduce的并行频繁项集增量数据挖掘方法
CN110688055B (zh) 一种大图计算中数据访问方法及系统
CN109788013B (zh) 分布式系统中作业资源分配方法、装置及设备
CN111414422B (zh) 一种数据分布方法、装置、设备和存储介质
US7647592B2 (en) Methods and systems for assigning objects to processing units
KR20210049703A (ko) 다수의 키-밸류 저장소들에 적응(적용)하기 위한 방법 및 시스템
CN104239520A (zh) 一种基于历史信息的hdfs数据块放置策略
US11514306B1 (en) Static memory allocation in neural networks
CN116578410A (zh) 资源管理方法、装置、计算机设备和存储介质
KR20210024751A (ko) 이종 메모리 장치를 포함하는 그래프 처리 시스템 및 그래프 처리 시스템의 동작방법
US20220050845A1 (en) System and method for joining skewed datasets in a distributed computing environment
US20170364454A1 (en) Method, apparatus, and computer program stored in computer readable medium for reading block in database system
US9600446B2 (en) Parallel multicolor incomplete LU factorization preconditioning processor and method of use thereof
CN114661249B (zh) 数据存储方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right