並列コンピューティングに適した問題

効率的な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コアにつき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...