SlideShare a Scribd company logo
Parallel IR Vector model on NVIDIA GPU
박일남 pin0156@naver.com
배병걸 bazel1984@naver.com
Motivation
IR Vector model
ConclusionSolution #1 - mul
Kookmin University NLP lab
Solution #2 - sum
for(i=0; i<n-1; i++)
{
for(j=0; j<m; j++)
{
wij_x_wiq+= vector_table[i][j] * vector_table[n-1][j];
wij^2 += vector_table[i][j] * vector_table[i][j];
wiq^2 += vector_table[n-1][j] * vector_table[n-1][j];
}
sim[i] = wij_x_wiq / (sqrt(wij^2 ) * sqrt(wiq^2));
}
Grid
Block 0 Block 1 Block M
number of M block
Grid
Block 0 Block 1
512 thread 512 thread
blockIdx.x * 512 + threadIdx.x
= 0 * 512 + 0
= 0
blockIdx.x * 512 + threadIdx.x
= 1 * 512 + 0
= 512
0
500
1000
1500
2000
GPU CPU
0%
20%
40%
60%
80%
100%
GPU CPU
Document
vector size
CPU(msec) GPU(msec)
1000x10 0.195776 0.188000
2000x20 0.675520 0.308512
3000x30 1.663424 0.479520
4000x40 2.742592 0.612000
5000x50 4.309344 0.844480
6000x60 6.505952 1.028928
7000x70 9.120416 1.288864
8000x80 13.296700 1.398496
9000x90 14.064350 1.705152
10000x100 18.426880 1.852256
20000x200 73.406050 4.935264
30000x300 157.468600 12.655680
40000x400 285.985700 19.385120
50000x500 439.460900 32.910150
100000x1000 1757.020000 118.664400
Dj
Query
Inner
product
||||
),(
11
1
22










t
i
iq
t
i
ij
t
i
iqij
j
j
j
ww
ww
qd
qd
qdsim 

t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11
D1 0 0 .477 0 .477 .176 0 0 0 .176 0
D2 0 .176 0 .477 0 0 0 0 .954 0 .176
D3 0 .176 0 0 0 .176 0 0 0 .176 .176
Q 0 0 0 0 0 .176 0 0 .477 0 .176
벡터 모델은 Cosine 연산
이다. 각 문서Dj와 Query의
모든 벡터간의 곱셈과 덧셈
이 필요한 연산으로 병렬처
리를 할 경우, 속도 향상이
예상된다.
1 … … … 1 1 … … … 1
0 … … … (n/2) -1 n/2 … … … n
Sum(n) … … … … … … … … 512
n = 256
n = 0
.
.
.
.
.
.
n = 512
n = 1
1 1 1 1 1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9
2 2 2 2 2 1 1 1 1 1
6 4 2 2 2 1 1 1 1 1
10 4 2 2 2 1 1 1 1 1
n = 5
n = 2
n = 1
n = 0
Solution #3 - CUDA Kernel
//벡터 내적
for(int i=0; i<D_NUMBER-1; i++)
{
if(idx < N)
d_arr_ip[i*N+idx] = d_arr[i*N+idx] * d_arr[(D_NUMBER-1)*N+idx];
}
__syncthreads();
//벡터 크기
for(int i=0; i<D_NUMBER; i++)
{
if(idx < N)
d_arr[i*N+idx] *= d_arr[i*N+idx];
}
__syncthreads();
//덧셈 연산
for(int i=0; i<D_NUMBER; i++)
{
//각 블럭당 lg 덧셈 계산
int n = B_SIZE/2;
for(; n>1;)
{
if(idx % B_SIZE < n && idx+n < N)
{
d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx+n];
d_arr[(i*N)+idx] += d_arr[(i*N)+idx+n];
}
if(n%2!=0 && (idx % B_SIZE == 0)) //홀수일때
{
d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx + n-1];
d_arr[(i*N)+idx] += d_arr[(i*N)+idx + n-1];
}
n /= 2;
__syncthreads();
}
if(idx % B_SIZE == 0)
{
d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx+1];
d_arr[(i*N)+idx] += d_arr[(i*N)+idx+1];
}
__syncthreads();
}
제시한 곱셈과 덧셈방법을
NVIDIA GPU가 수행할 수 있
도록 CUDA Kernel 을 다음과
같이 작성하였다.
정보검색 분야에 있어서 vector model
은 여러부분에서 사용되는 기초적인 알
고리즘이다. 이러한 기초적인 알고리즘
을 실제 기업들의 경우 속도의 문제로
정확도가 떨어지는 다른 알고리즘으로
대체하고 있는 것이 현실이다. 그래서
이런 vector model의 속도 문제를
NVIDIA GPU의 병렬처리를 이용해 연산
시간을 단축하는 실험을 하였다.
그림 1. 문서 Dj와 Query간의 Vector model 유사도 식
표 1. Document vector
알고리즘 1. vector model algorithm for CPU
그림 3. 문서 Dj와 Query간의 병렬 곱셈 수행 idea
그림 2. 병렬처리를 위한 Grid 와 Block의 크기 제시 및 쓰레드당 index 주소 표현
idx = blockIdx.x * blockDim.x + threadIdx.x
그림 4. 덧셈 병렬 처리를 위한 idea
그림 5. block당 512 쓰레드 사용하여 덧셈 수행
알고리즘 2. vector model - mul algorithm for GPU 알고리즘 3. vector model – sum algorithm for GPU
그림 6. vector size 별 CPU, GPU vector model 연산 시간 그래프
그림 7. vector size 별 CPU, GPU vector model 연산 시간 비교
그래프
표 1. vector size 별 CPU, GPU vector
model 연산 시간 결과
vector size가 증가 할
수록 연산 속도의 효
율성이 확연히 좋아짐
을 볼 수 있었다.

More Related Content

What's hot

Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
Python Machine Learning - ML04 Artificial Neural Network(인공신경망)Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
건환 손
 
Learning to remember rare events
Learning to remember rare eventsLearning to remember rare events
Learning to remember rare events
홍배 김
 
이산수학 C1 프로젝트 5
이산수학 C1 프로젝트 5이산수학 C1 프로젝트 5
이산수학 C1 프로젝트 5pkok15
 
2012 Dm C3 03
2012 Dm C3 032012 Dm C3 03
2012 Dm C3 03chl132435
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
jaypi Ko
 
이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4pkok15
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
jaypi Ko
 
[week16] D3.js_Transition
[week16] D3.js_Transition[week16] D3.js_Transition
[week16] D3.js_Transition
neuroassociates
 
[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis
neuroassociates
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초
jaypi Ko
 
MNIST for ML beginners
MNIST for ML beginnersMNIST for ML beginners
MNIST for ML beginners
홍배 김
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
HYUNJEONG KIM
 
[Week8]R_ggplot2
[Week8]R_ggplot2[Week8]R_ggplot2
[Week8]R_ggplot2
neuroassociates
 
Java Final Report
Java Final ReportJava Final Report
Java Final Report
Hwangcy
 

What's hot (16)

Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
Python Machine Learning - ML04 Artificial Neural Network(인공신경망)Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
Python Machine Learning - ML04 Artificial Neural Network(인공신경망)
 
Learning to remember rare events
Learning to remember rare eventsLearning to remember rare events
Learning to remember rare events
 
이산수학04
이산수학04이산수학04
이산수학04
 
이산수학 C1 프로젝트 5
이산수학 C1 프로젝트 5이산수학 C1 프로젝트 5
이산수학 C1 프로젝트 5
 
2012 Dm C3 03
2012 Dm C3 032012 Dm C3 03
2012 Dm C3 03
 
확통 회귀분석
확통 회귀분석확통 회귀분석
확통 회귀분석
 
이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4이산수학 C1 프로젝트 4
이산수학 C1 프로젝트 4
 
[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석[신경망기초] 선형회귀분석
[신경망기초] 선형회귀분석
 
이산수학05
이산수학05이산수학05
이산수학05
 
[week16] D3.js_Transition
[week16] D3.js_Transition[week16] D3.js_Transition
[week16] D3.js_Transition
 
[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis[Week14] D3.js_Scale and Axis
[Week14] D3.js_Scale and Axis
 
딥러닝기본-신경망기초
딥러닝기본-신경망기초딥러닝기본-신경망기초
딥러닝기본-신경망기초
 
MNIST for ML beginners
MNIST for ML beginnersMNIST for ML beginners
MNIST for ML beginners
 
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
알고리즘 연합캠프 세미나 1-A (Multi Dimension Segment/Fenwick Tree)
 
[Week8]R_ggplot2
[Week8]R_ggplot2[Week8]R_ggplot2
[Week8]R_ggplot2
 
Java Final Report
Java Final ReportJava Final Report
Java Final Report
 

Similar to cuda포스터-박일남

2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdfjinwookhong
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdfkd19h
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서KimChangHoen
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpKimjeongmoo
 
190821 delphi
190821 delphi190821 delphi
190821 delphi
Hyeon-Woo Sa
 
13. Application - Tensorflow Autoencoder
13. Application - Tensorflow Autoencoder 13. Application - Tensorflow Autoencoder
13. Application - Tensorflow Autoencoder
merry7
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDA
yyooooon
 
자료구조05
자료구조05자료구조05
자료구조05
herojoon1378
 
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
Hyemin Song
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
HyeonSeok Choi
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
khuhacker
 

Similar to cuda포스터-박일남 (12)

2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf
 
2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf2012 Dm A0 04 Pdf
2012 Dm A0 04 Pdf
 
이산치4보고서
이산치4보고서이산치4보고서
이산치4보고서
 
Project#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 HwpProject#5 최단거리 찾기 D0 Hwp
Project#5 최단거리 찾기 D0 Hwp
 
190821 delphi
190821 delphi190821 delphi
190821 delphi
 
13. Application - Tensorflow Autoencoder
13. Application - Tensorflow Autoencoder 13. Application - Tensorflow Autoencoder
13. Application - Tensorflow Autoencoder
 
ffmpeg optimization using CUDA
ffmpeg optimization using CUDAffmpeg optimization using CUDA
ffmpeg optimization using CUDA
 
자료구조05
자료구조05자료구조05
자료구조05
 
자료구조05
자료구조05자료구조05
자료구조05
 
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
Aperture : 7. 7세그먼트를 이용해 숫자 출력하기
 
7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성7가지 동시성 모델 - 데이터 병렬성
7가지 동시성 모델 - 데이터 병렬성
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 

cuda포스터-박일남

  • 1. Parallel IR Vector model on NVIDIA GPU 박일남 pin0156@naver.com 배병걸 bazel1984@naver.com Motivation IR Vector model ConclusionSolution #1 - mul Kookmin University NLP lab Solution #2 - sum for(i=0; i<n-1; i++) { for(j=0; j<m; j++) { wij_x_wiq+= vector_table[i][j] * vector_table[n-1][j]; wij^2 += vector_table[i][j] * vector_table[i][j]; wiq^2 += vector_table[n-1][j] * vector_table[n-1][j]; } sim[i] = wij_x_wiq / (sqrt(wij^2 ) * sqrt(wiq^2)); } Grid Block 0 Block 1 Block M number of M block Grid Block 0 Block 1 512 thread 512 thread blockIdx.x * 512 + threadIdx.x = 0 * 512 + 0 = 0 blockIdx.x * 512 + threadIdx.x = 1 * 512 + 0 = 512 0 500 1000 1500 2000 GPU CPU 0% 20% 40% 60% 80% 100% GPU CPU Document vector size CPU(msec) GPU(msec) 1000x10 0.195776 0.188000 2000x20 0.675520 0.308512 3000x30 1.663424 0.479520 4000x40 2.742592 0.612000 5000x50 4.309344 0.844480 6000x60 6.505952 1.028928 7000x70 9.120416 1.288864 8000x80 13.296700 1.398496 9000x90 14.064350 1.705152 10000x100 18.426880 1.852256 20000x200 73.406050 4.935264 30000x300 157.468600 12.655680 40000x400 285.985700 19.385120 50000x500 439.460900 32.910150 100000x1000 1757.020000 118.664400 Dj Query Inner product |||| ),( 11 1 22           t i iq t i ij t i iqij j j j ww ww qd qd qdsim   t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 D1 0 0 .477 0 .477 .176 0 0 0 .176 0 D2 0 .176 0 .477 0 0 0 0 .954 0 .176 D3 0 .176 0 0 0 .176 0 0 0 .176 .176 Q 0 0 0 0 0 .176 0 0 .477 0 .176 벡터 모델은 Cosine 연산 이다. 각 문서Dj와 Query의 모든 벡터간의 곱셈과 덧셈 이 필요한 연산으로 병렬처 리를 할 경우, 속도 향상이 예상된다. 1 … … … 1 1 … … … 1 0 … … … (n/2) -1 n/2 … … … n Sum(n) … … … … … … … … 512 n = 256 n = 0 . . . . . . n = 512 n = 1 1 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 2 2 2 2 2 1 1 1 1 1 6 4 2 2 2 1 1 1 1 1 10 4 2 2 2 1 1 1 1 1 n = 5 n = 2 n = 1 n = 0 Solution #3 - CUDA Kernel //벡터 내적 for(int i=0; i<D_NUMBER-1; i++) { if(idx < N) d_arr_ip[i*N+idx] = d_arr[i*N+idx] * d_arr[(D_NUMBER-1)*N+idx]; } __syncthreads(); //벡터 크기 for(int i=0; i<D_NUMBER; i++) { if(idx < N) d_arr[i*N+idx] *= d_arr[i*N+idx]; } __syncthreads(); //덧셈 연산 for(int i=0; i<D_NUMBER; i++) { //각 블럭당 lg 덧셈 계산 int n = B_SIZE/2; for(; n>1;) { if(idx % B_SIZE < n && idx+n < N) { d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx+n]; d_arr[(i*N)+idx] += d_arr[(i*N)+idx+n]; } if(n%2!=0 && (idx % B_SIZE == 0)) //홀수일때 { d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx + n-1]; d_arr[(i*N)+idx] += d_arr[(i*N)+idx + n-1]; } n /= 2; __syncthreads(); } if(idx % B_SIZE == 0) { d_arr_ip[(i*N)+idx] += d_arr_ip[(i*N)+idx+1]; d_arr[(i*N)+idx] += d_arr[(i*N)+idx+1]; } __syncthreads(); } 제시한 곱셈과 덧셈방법을 NVIDIA GPU가 수행할 수 있 도록 CUDA Kernel 을 다음과 같이 작성하였다. 정보검색 분야에 있어서 vector model 은 여러부분에서 사용되는 기초적인 알 고리즘이다. 이러한 기초적인 알고리즘 을 실제 기업들의 경우 속도의 문제로 정확도가 떨어지는 다른 알고리즘으로 대체하고 있는 것이 현실이다. 그래서 이런 vector model의 속도 문제를 NVIDIA GPU의 병렬처리를 이용해 연산 시간을 단축하는 실험을 하였다. 그림 1. 문서 Dj와 Query간의 Vector model 유사도 식 표 1. Document vector 알고리즘 1. vector model algorithm for CPU 그림 3. 문서 Dj와 Query간의 병렬 곱셈 수행 idea 그림 2. 병렬처리를 위한 Grid 와 Block의 크기 제시 및 쓰레드당 index 주소 표현 idx = blockIdx.x * blockDim.x + threadIdx.x 그림 4. 덧셈 병렬 처리를 위한 idea 그림 5. block당 512 쓰레드 사용하여 덧셈 수행 알고리즘 2. vector model - mul algorithm for GPU 알고리즘 3. vector model – sum algorithm for GPU 그림 6. vector size 별 CPU, GPU vector model 연산 시간 그래프 그림 7. vector size 별 CPU, GPU vector model 연산 시간 비교 그래프 표 1. vector size 별 CPU, GPU vector model 연산 시간 결과 vector size가 증가 할 수록 연산 속도의 효 율성이 확연히 좋아짐 을 볼 수 있었다.