2008-06-03[n年前へ]
■「GPUを使った物理計算プログラム」と「スクリプト言語」
日経エレクトロニクスを読んでいると、「GPUを使った並列計算で物理シミュレーションを高速化」という記事があった。PC用のグラフィックボードに搭載されている描画処理LSI(GPU)での物理計算の解説記事で、流体などの挙動を粒子群として計算するプロメテック・ソフトウェアの計算ソフトウェアを題材に、GPUで物理計算をする効果や注意点などを解説したものだった。そういえば、つい最近、「NVIDAがGPUベースのレンダリングソフトNVIDIA Gelato Proを無償提供開始」というニュースもあった。
ところで、GPUを使ったシェーダプログラム言語であるGLSL (OpenGL Shading Language)に触れたときに感じた新鮮さは、「GLSLで書かれたプログラムは、実行時にコンパイルされる」ということだった。シェーダのソースコードを書き換えると、そのシェーダを使ったアプリケーション実行すると、その実行時にシェーダプログラムがコンパイルされ動くのである。
その感覚はとても新鮮で、「C言語のようでCでない変なスクリプト言語」をいじっているような面白い感覚を味わった。また、自然に並列計算される具合が、何だか非同期で動くアプリケーションをスクリプト言語で書く感じに似ているのだろうか、と感じたりもした。
JavascriptやRubyや…といったスクリプト言語を使うプログラマが、GPUを使ったプログラムをいじってみると、これが結構ハマったり楽しむことができたりするものかもしれない。
2008-07-08[n年前へ]
2008-07-11[n年前へ]
2009-05-08[n年前へ]
■DNS(Direct Numerical Simulation)技術によるゴルフボール周辺の空気の流れを忠実に解析
DNS(Direct Numerical Simulation)技術によるゴルフボール周辺の空気の流れを忠実に解析
ゴルフボールのように丸くて微細な凹凸がある物体周りの速い空気の流れを解析するには、ゴルフボール周りの空間を10億個以上の小さな領域に分割して計算する必要があり計算量が膨大で非常に困難でした。従って、従来はゴルフボール周辺の空間を数千万個の領域に分割し計算負荷を小さくしてシミュレーションすることが一般的でした。しかしながらこの方法ではディンプル一つ一つによって引き起こされる空気の乱れを極めて詳細、且つ忠実に解析することができず、ディンプルの設計に必要な情報を十分に得ることができませんでした。
そこで、我々はアリゾナ州立大学(Arizona State University)、メリーランド大学(University of Maryland)、住友ゴム工業(株)との共同研究で、空気の流れを支配する方程式を直接計算する(Direct Numerical Simulation)方法の開発に着手しました。ボールが回転することによる境界条件の変化への対応方法や、多数のCPUで並列に計算を効率的に行う計算手法をゴルフボールの計算に特化して研究することで、今回のゴルフボールのDNS(Direct Numerical Simulation)技術を開発しました。
2009-05-30[n年前へ]
■エクセルのマルチスレッド機能
Microsoft Excel 2007 を使っていると、前のバージョンとは違い、マルチスレッドの設定ができることに気がついたのです。そこで、試しに、以前遊んだ「エクセルでシミュレーション」シリーズのワークシートを使い、CPU数=1にした時とCPU数=2にした時の速度比較を行ってみました。「10×10ほどの小さな空間分割でポワソン方程式を差分法で解く」というワークシートで比較をしてみたのですが、計算時間にはまったく違いがみられませんでした。
考えてみると、このワークシートの場合、セル間が循環参照されていて、単純に「独立に複数スレッドで(領域分割して)計算をする」というようなことはできそうにありません。これでは、マルチスレッド計算の効果が表れないのも、当然といえば当然です。
そこで、次に、先ほどのワークシートを独立した2つの「10×10の空間」の電界計算をするものに変えてみました。といっても、つまりは、コピー&ペーストして、2つの領域を作ってみただけです。今度は(マルチスレッド機能のCPU使用数の違いで)計算時間に差が出るかと思いきや、・・・CPUの数によらず、やはりどちらも35秒ほどで、マルチスレッドの効果は現れませんでした。
「エクセルに深入りしたらおしまい」「エクセルは時間泥棒」と常々思っているのですが、「エクセルのマルチスレッド処理の動きがどのようになっているか」を調べたくてたまらないのです。もちろん、そんなことを始めたりしたら「時間がなくなる一方」になってしまうわけですが・・・。