はじめに
プロデルにはマルチスレッドの機能があります。試します。
手法
足し算を1000万回×3回やらせます。シングルスレッドの場合と,マルチスレッドの場合で,実行時間の差を見ます。実行時間は,プログラムの最初と最後に起動時間を取得して計算します。それぞれ10回ずつ試し,平均を求めます。
実験
まずは,シングルスレッドで実行しました。
スタートは,起動時間。
えは,1。
かは,え。
10000000回繰り返す
かは,か+1。
繰り返し終わり
きは,え。
10000000回繰り返す
きは,き+1。
繰り返し終わり
くは,え。
10000000回繰り返す
くは,く+1。
繰り返し終わり
起動時間-スタートを報告。
次に,マルチスレッドで実行しました。
スタートは,起動時間。
あというスレッドを作る。
いというスレッドを作る。
うというスレッドを作る。
えは,1。
あで『かは,え。
10000000回繰り返す
かは,か+1。
繰り返し終わり
』を実行する。
いで『きは,え。
10000000回繰り返す
きは,き+1。
繰り返し終わり
』を実行する。
うで『くは,え。
10000000回繰り返す
くは,く+1。
繰り返し終わり
』を実行する。
あを待機する。
いを待機する。
うを待機する。
起動時間-スタートを報告。
なお,コンパイル済みコンソールアプリでは,匿名関数が使えないので,プロデルデザイナ上で試しています。CPUは,Xeon E3-1505M v5 @ 2.80GHzです。
結果
値はミリ秒です。
回 | シングルスレッド | マルチスレッド |
---|---|---|
1 | 11875 | 5234 |
2 | 11469 | 5266 |
3 | 11734 | 5906 |
4 | 13313 | 5219 |
5 | 11609 | 6000 |
6 | 11593 | 5188 |
7 | 11547 | 5985 |
8 | 13266 | 5234 |
9 | 12907 | 5828 |
10 | 11844 | 5297 |
p値=$1.766 \times 10^{-12}$(Welchのt検定)
感想
行列の計算に時間がかかってしかたがないのですが,CUDAの使い方が分からないので,せめてマルチスレッドで計算したいなと思いました。