어떤 문제가 병렬 컴퓨팅에 적합한가

효율적인 R 코드 작성

Colin Gillespie

Jumping Rivers & Newcastle University

요리

도움의 손길

사공이 많으면 배가 산으로 간다

요리사가 너무 많으면 국을 망친다

효율적인 R 코드 작성

병렬 실행

  • 모든 분석이 다중 코어를 활용할 수 있는 것은 아님
    • 많은 통계 알고리즘은 단일 코어만 사용 가능

그렇다면 병렬 컴퓨팅은 어디에 도움이 될까요?

효율적인 R 코드 작성

몬테카를로 시뮬레이션

for(i in 1:8)
    sims[i] <- monte_carlo()
# User defined function
combine_simulations(sims)
  • 8코어 머신
    • 코어당 시뮬레이션 1개
    • 마지막에 결과 합산
  • 완전 병렬화 가능
효율적인 R 코드 작성

모든 것이 병렬로 실행되지는 않는다

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
x[8] = x[7] = ... x[2] = x[1] = 1
  • 이것을 병렬로 실행할 수 있을까요?
    • 불가능
      • 병렬 컴퓨팅에서는 평가 순서를 예측할 수 없음
      • x[2]보다 x[3]이 먼저 평가될 수 있어 잘못된 결과가 도출됨
효율적인 R 코드 작성

경험적 규칙

반복문을 순방향과 역방향으로 실행할 수 있는가?

for(i in 1:8)
    sim[i] <- monte_carlo_simulation()

for(i in 8:1)
    sim[i] <- monte_carlo_simulation()
  • 두 반복문 모두 동일한 결과를 반환함
  • 따라서 병렬로 실행 가능
효율적인 R 코드 작성

경험적 규칙

반복문을 순방향과 역방향으로 실행할 수 있는가?

x <- 1:8
for(i in 2:8)
    x[i] <- x[i-1]
for(i in 8:2)
    x[i] <- x[i-1]
  • 두 반복문의 결과가 다름
    • 첫 번째: x[8] = x[7] = ... = 1
    • 두 번째: x[8] = x[7] = 7
  • 병렬 컴퓨팅 사용 불가

기억하세요: 반복문을 역순으로 실행할 수 있다면 병렬 컴퓨팅을 아마도 사용할 수 있습니다.

효율적인 R 코드 작성

연습해 봅시다!

효율적인 R 코드 작성

Preparing Video For Download...