lec 11. code optimization

7
MATLAB Programming Code Optimization 김탁은 [email protected] 1

Upload: tak-eun-kim

Post on 15-Jun-2015

528 views

Category:

Education


12 download

TRANSCRIPT

Page 1: Lec 11. Code Optimization

MATLAB Programming

Code Optimization

김 탁 은[email protected]

1

Page 2: Lec 11. Code Optimization

MATLAB Programming

Vectorization

반복문 대신 벡터 또는 행렬 연산으로 계산하는 방법

• 프로그램 처리 속도 향상됨

각종 행렬 연산을 위해 제공되는 함수들을 최대한 사용

• find 함수 등

n = 100for i = 1:n

A(i) = B(i) + C(i);end

n = 100;A(1:n) = B(1:n) + C(1:n);

2

Page 3: Lec 11. Code Optimization

MATLAB Programming

Vectorization

Vectorized Code와 그렇지 않은 코드의 속도 비교

• 예를 들어 𝑓𝑓 𝑥𝑥 = 𝐴𝐴 sin( ⁄𝑥𝑥 2𝜋𝜋) 를 𝑥𝑥 = 0~2𝜋𝜋 까지 계산

% no vectorization

n = 100000;A = 5;f = zeros(1,100);

tic;t = linspace(0, 2*pi, n);for i = 1:n

f(i) = A * sin(t(i)/(2*pi));endtoc;

Elapsed time is 0.027193 seconds.

% vectorization

n = 100000;A = 5;

tic;t = linspace(0, 2*pi, n);f = A * sin(t/(2*pi));toc;

Elapsed time is 0.004632 seconds.

3

Page 4: Lec 11. Code Optimization

MATLAB Programming

Quiz

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를

계산하여, 가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for

문)을 사용하여 작성하고, 다른 하나는 vectorized code로 작성하여

속도를 비교해 봅시다.

• 힌트:

– Vectorized Code의 경우,

• 주어진 한 포인트를 repmat 함수를 사용하여 10만 x 3 행렬 rQ로 만들고, 10만개 포인트와

rQ의 행렬 뺄셈 등을 이용하여 계산

4

Page 5: Lec 11. Code Optimization

MATLAB Programming

Quiz

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를

계산하여, 가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for

문)을 사용하여 작성하고, 다른 하나는 vectorized code로 작성하여

속도를 비교해 봅시다.

% no vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

% 이곳에코드를작성하세요.

toc;

% vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

rQ = repmat(Q, N, 1);

% 이곳에코드를작성하세요.

toc;

5

Page 6: Lec 11. Code Optimization

MATLAB Programming

Quiz Sol.

10만개의 3차원 포인트와 주어진 한 포인트 간의 유클리디언 거리를 계산하여,

가장 가까운 거리를 갖는 포인트를 찾는 코드를 반복문 (for 문)을 사용하여

작성하고, 다른 하나는 vectorized code로 작성하여 속도를 비교해 봅시다.

% no vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

D2 = zeros(N,1);for i=1:N

PT = PTs(i,:);D2(i) = sqrt(sum((Q-PT).^2));

end

[VAL2, IDX2] = min(D2)

toc;

% vectorization

N = 100000;D = 3;PTs = rand(N, D);Q = rand(1, D);

tic;

rQ = repmat(Q, N, 1);D = sqrt(sum((rQ-PTs).^2, 2));[VAL1, IDX1] = min(D)

toc;

6

Page 7: Lec 11. Code Optimization

MATLAB Programming

find 함수 사용 시 속도

행렬에서 특정 조건을 만족하는 원소들을 찾기 위해 find 함수를 쓰는

경우와 쓰지 않는 경우의 속도 비교

% find를쓰지않는경우

N = 1000;m = rand(N);

idx = [];

tic;

for i=1:N^2if (m(i) < 0.2)

idx = [idx i];end

end

toc;

Elapsed time is 2.242514 seconds.

% find를쓰는경우

n = 1000;A = 5;

tic;

idx = find(m < 0.2);

toc;

Elapsed time is 0.002795 seconds.

7