DALAB情報発信用ブログ:OpenCAE+GPGPU+Peridynamics編

DALABで行っている研究活動の中で、OpenCAEやGPGPUや破壊解析の取り組みについてまとめてゆきます。

DEXCS-OpenFOAMの有効活用:GPGPUによるDEM解析(2)

2011年11月22日 17時59分32秒 | DEXCS情報
ここではNVIDIAのサイトからCUDAのパッケージをインストールします。なお利用するのはVer.3.1で、Ubuntu9.10の64bit用です。最新はVer.4.0があるようですが、ここでは実績のある構成で進めます。

■CUDA Toolkitのダウンロード
まずは以下のダウンロードサイトに接続します。
http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux
この中で、CUDA Toolkit for Ubuntu Linux 9.10の64-bitをダウンロードします。
ファイルcudatoolkit_3.1_linux_64_ubuntu9.10.runはホームディレクトリに保存されています。
以下の作業は、ホームディレクトリで行います。

■CUDAのインストール先を準備する
ここでは、CUDAに関連する全てを/opt/CUDAにインストールすることにします。ディレクトリを以下のとおり準備します。なお一般ユーザーが自由に読み書きできるようにしておきます。
$ sudo mkdir /opt/CUDA
$ sudo chmod 777 /opt/CUDA

■CUDA Toolkitのインストール
以下のコマンドを実行してインストールします。
$ chmod a+x cudatoolkit_3.1_linux_64_ubuntu9.10.run
$ sudo ./cudatoolkit_3.1_linux_64_ubuntu9.10.run
ここでインストール先ディレクトリを聞かれますので、/opt/CUDAとします。

最後に色々な注意などが表示され、Installation Completeと表示されたらインストール成功です。ここでインストールされたファイルなどは、全て/opt/CUDA/cudaに配置され、削除するときはこのディレクトリを全て削除します。またリリースノートなどは、/opt/CUDA/cuda/docにあります。

■CUDA Toolkitのパスの設定
インストールの注意に従ってパスを以下のように設定します。

・LD_LIBRARY_PATH
2つの方法がありますが、設定ファイルを使います。
$ sudo vi /etc/ld.so.conf.d/cuda.confで設定ファイルを新しく作ります。
内容は以下の2行です。
 /opt/CUDA/cuda/lib64
 /opt/CUDA/cuda/lib
この設定を有効にするために、以下のコマンドを実行します。
$ sudo ldconfig

・PATH
以下の手順で設定ファイルを使います。
$ sudo vi /etc/profile.d/cuda.shで設定ファイルを新しく作ります。
内容は以下の2行です。
 export PATH=/opt/CUDA/cuda/bin:$PATH
 export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH
この設定を有効にするために、ログアウトして再ログインします。

以上の設定を確認するために、以下のコマンド実行します。
$ printenv | grep PATH
ここで、上記で設定したPATH,LIBRARY_PATHを確認します。
$ ldconfig -p | grep CUDA
ここで、上記で設定した/opt/CUDA/cuda/lib,lib64を確認します。

■GPU Computing SDKのダウンロード
次に追加のライブラリやサンプルプログラムなどをインストールします。先のNVIDIAのダウンロードサイトから、GPU Computing SDK code samplesのdownloadからダウンロードします。
http://developer.nvidia.com/object/cuda_3_1_downloads.html#Linux
ファイルgpucomputingsdk_3.1_linux.runはホームディレクトリに保存されています。

■GPU Computing SDKのインストール
以下のコマンドを実行してインストールします。
$ chmod a+x gpucomputingsdk_3.1_linux.run
$ ./gpucomputingsdk_3.1_linux.run
ここでインストール先ディレクトリを聞かれますので、/opt/CUDA/SDKとします。さらにCUDAのインストール先を確認されます。defaultで/opt/CUDA/cudaと正しく表示されているのでEnterで進めます。

最後に色々な注意などが表示され、Installation Completeと表示されたらインストール成功です。ここでインストールされたファイルなどは、全て/opt/CUDA/SDKに配置され、削除するときはこのディレクトリを全て削除します。また先に設定したPATH,LIBRARY_PATHの設定が正しいか確認されます。

ここでLD_LIBRARY_PATHの設定を、以下のとおりに追加します。
$ sudo vi /etc/profile.d/cuda.sh
内容は以下のとおり
export LD_LIBRARY_PATH=/opt/CUDA/cuda/lib:$LD_LIBRARY_PATH
ここでもログアウトして再ログインしておきます。

ここで上記で用いた2つのインストール用ファイルは、念のため/opt/CUDAに保存しておきます。

■サンプルプログラムのビルド
サンプルのソースがある/opt/CUDA/SDK/Cでビルドします。
$ cd /opt/CUDA/SDK/C
$ make
ビルド作業がしばらく続きます。最後にFinished building allと表示されたら、ビルドが完了したことになります。

サンプルプログラムの説明は、/opt/CUDA/SDK/CにあるSample.htmlにまとめられています。また実行形式は、/opt/CUDA/SDK/C/bin/linux/releaseに沢山作られています。
この実行形式にはパスを通していないので、ディレクトリを移動して実行します。例としてnbodyを実行してみます。
$ cd /opt/CUDA/SDK/C/bin/linux/release
$ ./nbody
銀河の星が爆発するような表示が出されると思います。これでCUDAのインストールが完了です。

DEXCS-OpenFOAMの有効活用:GPGPUによるDEM解析(1)

2011年11月20日 20時57分56秒 | DEXCS情報
今取り組んでいるDEM解析は、LIGGGHTSというシステムを用いていますが、これはLAMMPSという分子動力学のシステムがベースになっています。多数の粒子の相互関係を計算するので、非常に計算量が多く計算時間もかかります。

そこで最近流行のGPGPUの活用を試みたいと思います。どうもLAMMPSの方は古くから使われているシステムでGPGPUに対応する改良が既に行われているようなので、これに期待して最終的にはLIGGGHTSをGPGPUで高速処理することが目標です。

GPGPUの開発にはNVIDIAの提供するCUDAを用いるのですが、これはWindows/Linux/MacOSなどが公開されており自由に選択できます。今回は、LIGGGHTSとOpenFOAMとの連携であるCFDEMを目標にUbuntuのLinuxで構築することにします。

ベースですが、将来的にOpenFOAMと連携することを考えて近日公開予定のDEXCS20110forOpenFOAMを用いることにしました。これは先に解説したLIGGGHTSの構築検証ベースでもあります。要は、Ubuntu10.04-64bitということで考えてください。

構築に用いるハードウエアは以下のようなものです。CPUは4コアですがちょっと古いですね。メモリは検証用でCPUにあわせてほどほどです。
CPU: Intel Core2Quad Q8200 2.3GHz
RAM: 4GB
HDD: 500GB
さて問題のGPUですが、NVIDIA GeForce GTS 250です。こちらもちょっと古いですが検証用システムの仕様です。
GPU: NVIDIA GeForce GTS 250 1.8GHz 1024MB-RAM 128-CUDAcore

■ベースの構築
DEXCS2011forOpenFOAM(64)を用いてベースを用意します。要はUbuntu10.04(64)ですので、取り敢えず公開前の場合にはこれをインストールしてください。DEXCS2011forOpenFOAMについては、詳細なインストール手順が以下に公開されていますので、これに従って進めます。
http://mogura7.zenno.info/~et/collect/CAE/DEXCS/2011/DEXCS2011_Install.pdf

ネットワークの設定を済ませ、アップデートマネージャで再チェックを行い、最新の状態にしておきます。

■NVIDIAドライバの導入
上記のインストールが成功していれば、GUIが利用できて何らかのグラフィックのドライバが動作していると思いますが、ここで最新のNVIFIA GPUに対応したドライバを導入します。以下のコマンドを実行して、ネットワークからapt-getでインストールします。途中で確認があったら y で進めます。
$ sudo add-apt-repository ppa:ubuntu-x-swat/x-updates
$ sudo apt-get update
$ sudo apt-get install nvidia-current
上記では、加えてnvidia-settingsもインストールされます
$ sudo apt-get install nvidia-current-modaliases

インストールが成功すると、システム⇒システム管理にNVIDIA X Server Settingsが追加されます。メニューからこのツールを実行すると、注意のメッセージが表示され、X configuration fileを修正するため、以下のコマンドを実行して、X Serverを再起動せよと指示がでます。
$ sudo nvidia-xconfig
新しいX Configuration fileが/etc/X11/xorg.confに作られたと表示されるので、X Serverの再起動するため、先のツールを終了して再起動します。X Severを変更したため注意のメッセージが出た場合には、Xをリスタートする選択します。

再度、NVIDIA X Server Settingsを起動すると、画面の解像度の設定などが確認できます。また利用するGPUの情報も確認できます。

■CUDA利用に必要なライブラリなど
以下のコマンドで、CUDAのコンパイルに必要なライブラリをインストールします。
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install libxi-dev
$ sudo apt-get install libxmu-dev

以上で準備は終わりです。次はNVIDIAのサイトからCUDAのパッケージをインストールします。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(2)

2011年11月17日 22時06分08秒 | DEXCS情報
コンパイルにより作られたliggghtsを用いてDEM解析のサンプルを実行し、結果の可視化までを説明します。

■サンプルケースの用意
ダウンロードしたLIGGGHTSのパッケージには、/opt/LIGGGHTS/liggghts/examples/LIGGGHTSにたくさんのサンプルが用意されています。
コンベア上に粒子が移動する例題conveyorを試してみます。

ホームディレクトリに作業用ディレクトリを用意します。
$ mkdir ~/DEMwork
上記のサンプルをコピーします。
$ cp -r /opt/LIGGGHTS/liggghts/examples/LIGGGHTS/conveyor ~/DEMwork

■サンプルケースの実行
サンプルケースのディレクトリに移動します。
$ cd ~/DEMwork/conveyor
入力ファイルin.conveyorを確認したら、次のようにして単体実行できます。
$ liggghts < in.conveyor
計算結果は、postディレクトリのdump.conveyorに保存されます。
なお、実行環境が4coreCPUならば、MPIを用いて並列実行も以下のように可能です。
$ mpirun -np 4 /opt/LIGGGHTS/bin/liggghts < in.conveyor

■可視化データ変換ツールpizza.pyのインストール
このpizza.pyを用いて、liggghtsの計算結果dump.conveyorをVTKに変換して、ParaViewで可視化結果を確認します。

まずはpizza.pyをインストールします。以下のサイトよりPizza.py Toolkitにチェックを入れて、ダウンロードボタンを押して入手します。/opt/LIGGGHTSにおき、パッケージを展開します。
http://www.sandia.gov/~sjplimp/download.html
$ tar xvfz pizza.tar.gz
これでツールが/opt/LIGGGHTS/pizza-70ct11にインストールされました。
※ダウンロードした時期によってOctではなくDecになりますが、同様な手順で進めるので読み替えてください。

次にシステムのpythonを利用するために、環境に合わせてpizza.pyを変更するため、以下のディレクトリに移動します。
$ cd /opt/LIGGGHTS/pizza-7Oct11/src

pythonがインストールされている場所をwhereisで確認すると/usr/bin/pythonなので、pizza.pyの先頭を以下のようにエディタで変更します。
$ vi pizza.py
 #!/usr/bin/python -i

この場所/opt/LIGGGHTS/pizza-7Oct11/srcにコマンドパスを通しておきます。
$ vi ~/.bashrc
 export PATH=/opt/LIGGGHTS/pizza-7Oct11/src:$PATH
この.bashrcを有効にするために以下のsourceを実行します。
$ source ~/.bashrc

■pizza.pyの実行環境の追加
このpizza.pyでは解析データを可視化するために、いくつかの補足ライブラリが必要です。以下の項目をパッケージマネージャで追加します。

システム⇒システム管理⇒Synapticパッケージマネージャを起動します。各項目を検索して、適用しインストールします。
・Pmw: python-pmw, python-pmw-doc
・ImageTk: python-imaging-tk, python-imaging-tk-dbg
・OpenGL: python-opengl

ここでToglについては、liblablgl-ocaml, liblabgl-ocaml-devなどをインストールしたのですが、pythonからToglを正しく読み込めないようです。ただし今回はVTKへの変換だけを行い直接にOpenGLの可視化は行わないので、pizza.pyのパスを通した/opt/LIGGGHTS/pizza-7Oct11/srcより、gl.py,gl.pycの2つを上のディレクトリに移動しておきます。
※H231225の時点でダウンロードした場合は、pizza-8Dec11が作られますが、この場合には上記のエラーは出ないので、glの移動は不要でした。

■pizza.pyによる可視化データ作成
先に実行したサンプルconveyorのディレクトリ~/DEMwork/coveyorに移動します。
pizza.pyの動作を記述するPzzaScriptを、以下の内容を記述したファイルpizzascriptとして作成します。
$ vi pizzascript
 d=dump("post/dump.conveyor")
 v=vtk(d)
 v.many("post/dump")
 exit()

データ作成を以下の様に実行します。
$ pizza.py -f pizzascript
色々なメッセージが出力されますが、Ctrl-Dで抜けてから、サンプルの結果が保存されているpostディレクトリの中に、dump0000.vtk ... dump0199.vtkが作成されています。

ParaViewを利用して結果を確認します。
$ paraview
起動したら、ファイルメニューから上記のVTKファイルを選択して、Applyで表示して調整すると、赤い粒子が落ちてきてコンベアーの上を移動する様子が分かります。

以上で最も基本となる動作が確認できました。

DEXCS-OpenFOAMの有効活用:LIGGGHTSによるDEM解析(1)

2011年11月17日 12時13分44秒 | DEXCS情報
ここでは、DEM解析のソフトウエアの1つであるLIGGGHTSを利用する手順を説明します。OpenFOAM-2.0でもDEM解析が可能ですが、これは粒子を1種類しか指定できない(今の知識では)ので、物体の衝突などを扱うことが難しいと思うのです。

そこで、分子動力学のソフトウエアLAMMPSをベースにして、DEM解析を可能にしたLIGGGHTSを利用してみようと思います。このソフトウエアは、OpenFOAMと連携することで、CFD+DEMつまり流体中の粒子の運動を解析できるそうで、CFDEMとして公開されています。

最終的にはCFDEMを目指すので、OpenFOAMがインストールされている状態を基本とするために、DEXCS2011forOpenFOAMを用いて動作環境を構築します。これは近々公開されるDEXCSで、Ubuntu10.04+OpenFOAM2.0.xの環境となっており、同等の環境ならば同じ手順でできると思います。ここでは64bit環境で構築しています。

なおこの内容は、PENGUINITIS さんのウエブに公開されている情報を手本にして作成しています。
http://www.geocities.jp/penguinitis2002/study/LIGGGHTS/LIGGGHTS/LIGGGHTS.html

■ベースOSの準備
DEXCS2011forOpenFOAMをVMware上に構築します。たぶんDEXCS2010forOpenFOAMにOpenFOAM2.0.xを導入した状態でも同じだと思います。要は、Ubuntu10.04+OpenFOAM2.0.xを用意します。まず最初のLIGGGHTSではOpenFOAMは利用しません。最初にシステム⇒システム管理⇒アップデートマネージャでシステムを更新しておきます。

■コンパイルの準備
LIGGGHTSをコンパイルするには、FFTWとMPIが必要になります。FFTWは、C言語で作られた高速フーリエ変換のツール集で、MPIは並列処理を実現する基盤システムです。ここで用いているDEXCS2011での状況で確認してみます。

システム⇒システム管理⇒Synapticパッケージマネージャを起動して、再読込でパッケージ情報を最新にしておきます。検索からfftwを探してみます。色々と見つかりますが、バージョン2のfftw-dev, fftw-docs, fftw2の3つを選択してインストール指定します。適用を押してダウンロードとインストールを進めます。

次にOpenMPIを準備します。パッケージマネージャでopenmpiを検索して、すでにインストールされているlibopenmpi-dev,libopenmpi1.3,openmpi-commonに加えて、バージョン1.4.1-2に関する4つlibopenmpi-dbg,openmpi-bin,openmpi-checkpoint,openmpi-docをインストール指定します。適用を押してダウンロードとインストールを進めます。環境によっては既にインストールされているパッケージもあります。

LIGGGHTSのコンパイルでMPIのインストール位置を設定するので調べておきます。findでopenmpiを検索すると、/usr/lib/openmpiの中にincludeとlibがありました。

コンパイルは/optにLIGGGHTSを作って行うことにするので、以下の準備をします。
$ sudo mkdir /opt/LIGGGHTS
$ sudo chmod 777 /opt/LIGGGHTS

■LIGGGHTSの入手
gitで最新版のソフトウエアを入手します。/opt/LIGGGHTSの中で、以下のコマンドでダウンロードします。
$ git clone git://cfdem.git.sourceforge.net/gitroot/cfdem/liggghts
しばらく待つと、/opt/LIGGGHTSの中にliggghtsディレクトリができる。

MakeFileが多数用意されているディレクトリに移る。
$ cd liggghts/src/MAKE

■Makefileの修正
最も状況に近いMakefile.linuxを修正して使うのでバックアップを取る。
$ cp Makefile.linux Makefile.linux.org

エディタviなどでMakefile.linuxを状況に合わせて修正する。
$ vi Makefile.linux

変更点は以下の4つ
・コンパイラはgccとする
 #CC = icc
 CC = gcc
・リンカーはgccとする
 #LINK = icc
 LINK = gcc
・MPIのincludeの設定
 #MPI_INC = -DMPICH_IGNORE_CXX_SEEK
 MPI_INC = -DMPICH_IGNORE_CXX_SEEK -I/usr/lib/openmpi/include
・MPIのlibの設定
 #MPI_LIB = -lmpich -lpthread
 MPI_LIB = -L/usr/lib -lmpi -L/usr/lib/openmpi/lib -lmpi_cxx -lpthread

■LIGGGHTSのコンパイルとインストール
先のMakefileを修正した場所の上(/opt/LIGGGHTS/liggghts/src)に移動し、linuxをターゲットにMakeを実行する。
$ cd ..
$ make linux

コンパイルに成功すると/opt/LIGGGHTS/liggghts/srcに実行形式lmp_linuxが作られ、sizeで状態が表示される。
次にインストール用のディレクトリを作り、上記の実行形式をliggghtsとしてコピーしてこれを利用する。
$ mkdir -p /opt/LIGGGHTS/bin
$ cp lmp_linux /opt/LIGGGHTS/bin/liggghts

■コマンドパスを通しておく
まずliggghtsのパスを設定する。~/.bashrcの最後に以下を追加する。
export PATH=/opt/LIGGGHTS/bin:$PATH
次に結果の可視化で用いるparaviewのパスを同様な方法で設定する。
export PATH=/opt/OpenFOAM/ThirdParty-2.0.x/build/linux64Gcc/paraview-3.10.1/bin:$PATH

設定を有効にするために、ログアウトして再ログインしておきます。