高速化するアプリケーションとして、物質などが拡散するシミュレーションを取り上げます。このようなシミュレーションは熱の伝わり方をあらわす熱伝導や汚染物質の拡散現象など様々な分野で応用されています。
このシミュレーションで最も簡単にイメージできる例としては、下図のように水面にインクが広がっていくものです。この図は水面を上から見たものとなります。
水面にインクを一滴落とした瞬間は落下地点付近にしかインクはないので、落下地点周辺はインクの色が濃いです。しかし、時間が経過するにつれて、インクは広がり、落下地点付近のインクの色は薄くなっていきます。最終的に、インクは水面全体に広がり、その色の濃さは一様となります。
今回はこのシミュレーションを下図のタワー型のマシンで行います。
グラフィックボードはマシンの中にあるので、この写真には写っていません。側面のカバーを外すことでグラフィックボードを確認できます。カバーを外した写真は第1回の記事に載せてありますので、そちらをご覧ください。
下の表はこのマシンのスペックです。
OS |
マイクロソフト Windows 7 Professional |
CPU |
インテル Core-i7-4470(4コア) |
メモリ |
8GB |
グラフィックボード |
NVIDIA Geforce GTX 780 Ti(2880コア) |
この記事を見ている多くの皆さんは、マイクロソフト社のWindowsをお使いではないでしょうか?
今回は皆さんと同じWindowsでシミュレーションを行います。
CPUとメモリは、特別仕様のスーパーコンピュータ「京」とは違って、家電量販店やパソコンショップで購入できる一般的なタワー型のマシンに搭載されているものです。
グラフィックボードにはNVIDIA社のGeforce GTX 780 Tiを利用しました。このグラフィックボードは10万円弱ぐらいで、ミドルクラスのグラフィックボードになります。
そのため、お使いのマシンに初めから搭載されていないかもしれません。PCパーツを扱っているお店やオンラインショップであればすぐに購入できるものです。
ちなみに、今回用いたマシンのCPUは4コアで、グラフィックボードは2880コアとなっております。
このコア数の大きな違いを見ただけでも、グラフィックボードで高速化ができそうな気がしてきますね。
グラフィックボードでの高速化を示すために、3種類の処理方法で処理時間を測定して比較しました。
1つ目は「CPUの1コアで処理」です。これは皆さんが普段使われるソフトウェアと同じようにCPUの1コアのみで処理をする方法です。
2つ目は「CPUの全コアで並列処理」です。処理時間を短縮するためにCPUの4コアをフルに使って処理する方法です。
3つ目は「グラフィックボードでの処理」です。これはグラフィックボードの全コアを使って処理する方法です。性能を十分に発揮させるために、全コアの利用だけでなく、Geforce GTX 780 Tiに特化したチューニングや、文献[1]を参考に共有メモリと呼ばれるものを用いて処理しています。
そして、下図のように、シミュレーションの処理はグラフィックボードで行い、処理完了後にCPUでディスプレイに表示させるようにしました。そのため、グラフィックボードはシミュレーションの処理だけを行います。
さて、色々と前置きが長くなってしまいましたが、3つの処理方法の処理時間の比較を見てみましょう。
下のグラフはシミュレーションの各種法の処理時間を示しています。処理時間とは、処理開始から処理が完了するまでに掛かった秒数を示しています。
処理内容は、最初に述べた水面にインクを落とした時のシミュレーションです。水面を1024×1024の格子状に分割して、1秒間を0.000002秒毎(500000ステップ)に計算をするようにしました。
「CPUの1コアで処理」と「CPUの全コアで並列処理」の比較を見てみると、それぞれ17分47秒と11分3秒となっており、やはり全コア使っている方が短時間で処理を終わらせています。全コアを使うことで、約1.6倍高速化できたといえます。
「グラフィックボードでの処理」では、なんと1分24秒で同じ処理を終えています!
劇的に高速化していることが一目瞭然です!
「CPUの1コアで処理」と「CPUの全コアで並列処理」と比較すると、それぞれ約12.7倍と約7.9倍となりました。
この結果を用いてある想定をしてみましょう。
60秒間のインク拡散のシミュレーションをしなさいという課題がAさんとBさんに与えられたとします。
AさんはCPUの全コアで、そのシミュレーションを午前9時に開始したところ、その処理に11時間2分も掛かり、午後8時に完了しました。
一方、Bさんはグラフィックボードを使ったので、シミュレーションはたったの1時間24分で終わりました。午前9時に開始させて午前10時半には終わっているのです!
もし、この例を業務に置き換えたら、グラフィックボードを使うことは非常に有効な手段といえます。
ただし、1つ注意点があります。
CPUとグラフィックボードのコア数と先ほどの結果を考えてみましょう。
CPUとグラフィックボードのコア数はそれぞれ4コアと2880コアと、グラフィックボードのコア数はCPUより720倍なのですが、「グラフィックボードでの処理」と「CPUの全コアで並列処理」では720倍ではなく、7.9倍程度でした。
これは、「グラフィックボードでの処理」の時間にグラフィックボードとCPU・メモリ間のデータ転送時間が含まれていること、そして、グラフィックボードの動作はCPUより遅いことなどが挙げられます。
とはいえ、処理時間が劇的に高速化されていることに変わりはありません。
このように、高速化をするためにそれ専用の高価で特別なシステムを構築・購入することなく、家電量販店など購入することができるグラフィックボードで、桁外れの高速化ができるのです。
シミュレーションや時間の掛かる処理を扱う専門家や研究者から非常に注目されているのも分かります。
今回は、文献からではなく、実際にグラフィックボードで高速化してみました。次回はグラフィックボードの進化などを紹介したいと思います。
<参考文献>
[1] 青木 尊之・額田 , “はじめてのCUDAプログラミング”, 工学社.