15
Matlab을 활용한 병렬처리 실습 권병천

Matlab을 활용한 병렬처리

Embed Size (px)

Citation preview

Page 1: Matlab을 활용한 병렬처리

Matlab을활용한병렬처리실습

권병천

Page 2: Matlab을 활용한 병렬처리

목차

컴퓨터에서계량모형계산원리

Matlab에서병렬처리(실습)

VAR모형에대한병렬처리사례

더향상된기법은?

Page 3: Matlab을 활용한 병렬처리

(SSD)

컴퓨터에서계량모형계산원리

중앙처리장치(CPU) 주기억장치(RAM) 보조기억장치(HDD)

메인보드

Page 4: Matlab을 활용한 병렬처리

컴퓨터에서계량모형계산원리

1단계: 데이터이동

보조기억장치에 저장된모형코드 및 데이터를주기억장치로 이동 3

단계

: 결과

반환

4단계: 결과저장

2단

계: 계

산실

행Issue

각 장치의 속도차이로 인한 병목현상

각 장치의 용량차이로 인한 한계

작성한 모형이 대용량 데이터를 처리하는가?

혹은, 대량의 계산을 처리하는가?

아니면, 둘 다 포함되는가?

Page 5: Matlab을 활용한 병렬처리

매트랩에서실제실행

주기억장치에올라온 변수

보조기억장치에존재하는 데이터

및 명령코드

출력 및한줄 명령어입력

명령코드 작성

Page 6: Matlab을 활용한 병렬처리

매트랩에서실제실행function Fn_OlsExec(Y,X,printi)

T = size(Y,1);

X = [ones(T,1) X];

k = size(X,2);

X2 = X'*X;

X2 = 0.5*(X2 + X2');

XY = X'*Y;

bhat = X2\XY;

Yhat = X*bhat;

ehat = Y - Yhat;

sig2hat = ehat'*ehat/(T-k);

X2inv = invpd(X2);

varbhat = sig2hat*X2inv;

stde = sqrt(diag(varbhat));

b0 = zeros(k,1);

t_val = (bhat - b0)./ stde;

mY = meanc(Y);

TSS = Y'*Y - T*mY^2; % TSS

RSS = ehat'*ehat; % RSS

R2 = 1 - RSS/TSS; % R2

R2_ = 1 - (T-1)*RSS/(TSS*(T-k)); % AdjR2

SC = log(RSS/T) - k/T*log(T); % SC

AIC = log(RSS/T) - 2*k/T; % AIC

Page 7: Matlab을 활용한 병렬처리

매트랩에서실제실행

GDP Nowcasting에서사용했던방법론을적용

엑셀 데이터 읽어드림

조합 생성 120C3

12개에서 하나씩 뽑아 Y 대입

280,840개에서 하나씩 뽑아OLS실행

For Loop의총횟수는약 337만(12˟28만)번이순차실행

약 15분소요

이를 병렬처리로 바꾼다면 얼마나 걸릴까?

Page 8: Matlab을 활용한 병렬처리

매트랩에서실제실행

Page 9: Matlab을 활용한 병렬처리

참고) 매트랩에서대용량엑셀실행시

Matlab에서 엑셀파일을 처리할 때 사용하는 함수인 ‘xlsread()’은 파일사이즈가클 경우 처리시간이 매우 늦으며, PC가 멈추는 현상이 발생하여 이를 보완할 수있는 기능을 개발

대용량 엑셀파일 처리 함수 f_BigXlsReader.m

Page 10: Matlab을 활용한 병렬처리

Matlab 병렬처리

Matlab 병렬처리를 위해서는

PCT 툴박스가 필요

PCT 툴박스에서 사용할 worker의 수 설정

Worker의수는 CPU의 Core수에 맞춰 설정

만약 더 많은 수의 Worker가 필요하다면?

⇒ MDCS

Parallel Computing Toolbox

Page 11: Matlab을 활용한 병렬처리

Matlab 병렬처리

MATLAB Distributed Computing Server

• Matlab에서 제공하는 MDCS를 이용하면 여러 PC를 묶어서 동시에 활용가능

• 따라서 여러 CPU에 명령을 할 수 있기 때문에 수십개의 Worker를 만들 수 있음

• 그러나, 하드웨어 및 소프트웨어 구입비용이 비싸며 관리 주체가 필요

※ 참고로 DSGE모형에서 사용하는 Dynare 툴박스 경우, MDCS 없이 Pstools를사용해 병렬처리를 지원(MDCS와 PStools는 다름)

Page 12: Matlab을 활용한 병렬처리

Matlab 병렬처리

병렬처리에서는찍히는 순서가다르다?

지역변수와 전역변수를구분해서 사용해야함!

Page 13: Matlab을 활용한 병렬처리

병렬처리를이용한 VAR모형

VAR모형 #1

VAR모형 #2

VAR모형 #3

VAR모형 #4

::

VAR모형 #25

VAR모형 #26

VAR모형 #27

GVAR모형Eigen > 1.00001

TOT = TOT+1

TOT == 5000

Y

Y

END

대략 2천만번의 VAR모형을 계산

Page 14: Matlab을 활용한 병렬처리

컴퓨터에서계량모형계산원리

Matlab에서 단일처리시 CPU/RAM 사용량

보조기억장치에 파일을쓰느라 병목 발생

Matlab에서 병렬처리시 CPU/RAM 사용량

Page 15: Matlab을 활용한 병렬처리

더향상된기법?

Vectorization

Python, Julia 이용Fortran Julia Python R Matlab Octave Java

gcc 4.8.2 0.3.2 2.7.6 3.1.1 R2014a 3.8.1 1.7.0_65

fib 0.7 2.39 79.95 553.57 4638.29 9764.56 0.9

parse_int 4.88 1.93 12.24 53.23 1580.52 9106.83 5.55

quicksort 1.31 1.24 33.23 255.73 54.43 1766.13 1.69

mandel 0.74 0.72 12.18 54.06 51.23 391.25 0.57

pi_sum 0.99 1.06 16.93 16.55 1.27 279.53 1

rand_mat_stat 1.15 2.14 19.04 16.65 10.48 35.92 4.01

rand_mat_mul 4.73 1.11 1.24 1.91 1.18 1.25 2.35