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

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

DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(3)

2013年06月23日 12時47分11秒 | OpenCAE活用
この検証では、DEXCS2012-Salome-D1-B1-64を用いていますが、要はUbuntu12.04LTS-64bitと言うわけです。高性能を追求するために、様々なツールを組み合わせて、手動でコンパイルすることも有用ですが、極力手間を省いて単にツールとして使いたい要望もあります。

そこで、Ubuntuのベースであるdebianの特徴である、優れたパッケージマネージャーSynapticを用いて、目的を達成する方法を検討します。

■ SynapticによるCode_Saturneの導入手順

・アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。

・左上の再読込を押して、パッケージ情報を最新にして、右上の検索より「code_saturne」を検索します。

・検索の結果は、code_saturne ver.2.1.0の関連パッケージが5個+syrthesの1個が見つかります。

※バージョンが2.1.0で少し古いのが気になりますが、まあ簡単に導入できますし、公式サイトにはドキュメントなどもあるので、現役システムとして利用することにします。

・導入は、まずcode_saturneパッケージを選択して、インストール指定にします。
 これにより、6つすべてのパッケージがインストール指定になります。
 同時に、gfortranなど非常に多数のツールが連携して導入されます。

・適用を押してインストールを進めます。結果として46個を追加し3個を更新します。
 多数のファイルを処理するので、しばらく待ちます。

・適用が完了したメッセージが出たら、ツールを閉じて終了です。非常に簡単ですね。

■ パッケージ導入したCode_Saturneの検証

・さて本当に導入されているか、確かめてみます。端末を起動して、code_saturneと打ち込むと、
 何と、以前にコンパイルした時と同じようなメッセージが表示されます。バージョンも2.1.0でした。
$ code_saturne
dexcs@dexcs-edf:~$ code_saturne
Usage: /usr/bin/code_saturne <topic>
Topics:
help
autovnv
compile
config
create
gui
info
run
salome
Options:
-h, --help show this help message and exit
$ code_saturne info --version
code_saturne version: 2.1.0

・次にどこに何が導入されたか、調べてみます。次のコマンドで調べてみます。
 なお、最後の 2>/dev/null は、検索できない部分のエラー表示を省略するおまじないです。
$ find / -name code_saturne -print 2>/dev/null
/usr/lib/code_saturne
/usr/lib/python2.7/dist-packages/code_saturne
/usr/share/code_saturne
/usr/share/pyshared/code_saturne
/usr/share/doc/code_saturne
/usr/bin/code_saturne
/usr/include/code_saturne
/etc/bash_completion.d/code_saturne

・残念ながら例題:examplesはありませんが、文書:docsは/usr/share/doc/code_saturneにあるようです。
$ cd /usr/share/doc/code_saturne; ls
autovnv.pdf install.pdf theory.pdf user.pdf
developper.pdf refcard.pdf tutorial.pdf

■ おまけ

最後に、導入が簡単にできたのですが、そもそもCode_Saturneがどんなシステムなのか、Synapticの説明を翻訳することで調べてみます。

=====【Synaptic説明表示より引用】=====
General purpose Computational Fluid Dynamics (CFD) software
汎用数値流体力学(CFD)ソフトウエア「Code_Saturne」

The basic capabilities of Code_Saturne enable the handling of either incompressible or expandable flows with or without heat transfer and turbulence.
Code_Saturneの基本的な機能としては、非圧縮性または膨張性を持つ流体の流れが解析可能であり、この場合には熱伝達や乱流などの考慮の有無に対応しています。

Dedicated modules are available for specific physics such as radiative heat transfer, combustion (gas, coal, heavy fuel oil, ...), magneto-hydrodynamics, compressible flows, two-phase flows (Euler-Lagrange approach with two-way coupling), extensions to specific applications (e.g. Mercure_Saturne for atmospheric environment).
専用の解析モジュールは特定の物理現象に対応しています。例えば、放射熱伝達、燃焼現象(ガス、石炭、重油…)、磁気流体力学、圧縮性流体、二層流現象(2種類の連携に対するオイラーーラグランジェ手法)、特定応用への拡張(例えば、大気環境を対象とするMercure_Saturneなど)

It runs in parallel with MPI on distributed memory machines.
本システムは、分散メモリ並列計算機上でMPIを用いて並列処理で解析します。

Developed since 1997 at EDF R&D, it is based on a co-located Finite Volume approach that accepts meshes with any type of cell (tetrahedral, hexahedral, prismatic, pyramidal, polyhedral...) and any type of grid structure (unstructured, block structured, hybrid, conforming or with hanging nodes, ...).
開発はEDF R&Dにおいて1997より行われ、有限体積法を基本原理におき、様々な要素(四面体、六面体、三角柱、四角錐、多面体…)や、様々な格子構造(非構造格子、構造格子、混合格子、適合また節点依存…)によるメッシュが利用できます。
=====【Synaptic説明表示より引用】=====

■ Salomeとの連携

これまでに説明した方法では、code_saturneにcreateオプションをつけて実行し、流体解析のケースファイルを作ってから、その中に作られたSaturneGUIを実行することで、Code_Saturneを実行していました。なお直接にCode_SaturneのGUIを起動するには、以下の様にオプションguiをつければ起動します。
$ code_saturne gui

次に、構造解析システムSalome-Mecaで利用したCode_AsterのプリポストシステムSalomeを、流体解析Code_Saturneで利用する方法を検討したところ、どうも、本解説で述べたような、Installerを用いる導入、Synapticを用いる導入では、Code_Saturneの導入時にSalomeとの連携が考慮されていないため、そもそも出来ない事のようです。

DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(2)

2013年06月18日 21時35分19秒 | OpenCAE活用
先に示した手順で簡単にCode_Saturneが導入できたと思います。小さなインストーラーのみを用いて、自動的にダウンロードして構築するなど、完成度の高いシステムであることが分かります。これよりEDFのCode_Saturne開発への意気込みが、非常に大きと期待されます。

ここでは、インストールしたCode_Saturneの動作確認を、インストールパッケージに入っている例題:examplesを用いて進めたいと思います。その前に、インストール元のディレクトリ~/Downloads/installerの中身を確認しておきます。
$ cd ~/Downloads/installer

ここには、Code_Saturneをインストールするために必要なファイルやオプションパッケージなどがあります。この中で、Code_Saturneのインストールパッケージはcode_saturne-3.0.1.tar.gzで、これを展開したディレクトリがcode_saturne-3.0.1になります。ただし実際にコンパイルにおけるビルドは、code_saturne-3.0.1.buildで行われます。

そこで、code_saturne-3.0.1ディレクトリの内容を確認します。
$ cd code_saturne-3.0.1; ls

インストールに必要なファイルやディレクトリが多数あります。この中で、利用者が取り敢えず直接に必要となるのは、文書:docsと例題:examplesの2つです。他にも有用な情報extras,testsなどがありますが、利用が進んだのちに利用することにします。

なおこのインストールパッケージcode_saturne-3.0.1.tar.gzは、installerからでなく、直接にダウンロードすることもできます。

■ 文書と例題の移動

インストールが完了したら、文書:docsと例題:examplesを、Code_Saturneのファイル保存用ディレクトリ~/CodeSaturneFilesに移動しておきます。
$ cd ~
$ mkdir CodeSaturneFiles
$ cd ~/Downloads/installer/code_saturne-3.0.1
$ cp -r docs examples ~/CodeSaturneFiles
$ cd ~/CodeSaturneFiles; ls

他のファイルは実行に必要ないので、ここでは削除します。以下の手順で行います。
$ cd ~/Downloads
$ sudo rm -r installer installer-3.0.1.tar.gz
(所有者が異なるファイルがあるのでsudoで実行)

■ 文書:docの設定

まずは文書:docsを確認します。
$ cd ~/CodeSaturneFiles/docs; ls

ファイルの名の最後に/があるものが、文書を構成するファイル群を保存した10個のディレクトリです。基本的に文書はTeXで作られており、doxygen, manpages, style などは他の目的の文書です。
Makefile.am autovnv/ doxygen/ manpages/ style/ tutorial/
Makefile.in developer/ install/ refcard/ theory/ user/

以上で示した7つのフォルダのTeXソースを元に、PDF文書が生成されて各ディレクトリ内にあります。同様な文書が、Code_Saturneの公式サイトにも公開されていますが、これらはVer3.0.1に完全に対応しており、ウエブの文書は古い場合もあるので、こちらの利用をお薦めします。
autovnv.pdf developer.pdf install.pdf refcard.pdf theory.pdf tutorial.pdf user.pdf

これらをメニューバーの場所→ホームフォルダーより、ファイルブラウザからダブルクリックして、ドキュメントビューアーよりPDF文書を参照することができます。さらに、code_saturneにはプログラムから、これらの文書を参照する機能があります。これを設定します。

以下の手順で、code_saturneのインストールフォルダに、PDF文書をコピーしておきます。ここでは、例としてrefcard.pdfを行いますが、必要に応じて最後の手順でコピーしてください。
$ cd /opt/salome/code_saturne-3.0.1/share/
$ mkdir -p doc/code_saturne
$ cd doc/code_saturne
$ cp ~/CodeSaturneFiles/docs/refcard/refcard.pdf .

以下のコマンド実行で、指定したPDF文書を、Ubuntuのドキュメントビューアーで表示することができます。
$ code_saturne info -g refcard

■ 例題:examplesの検証

このバージョンのcode_saturneには、以下の4つの例題があります。
1-simple_junction 2-full_domain 3-stratified_junction 4-2Ddisks

これらの説明は、先に移動した文書:doc中のtheory.pdfにあり、以下のように対応しています。

1-simple_junction → P.7 Part II Simple junction testcase
2-full_domain → P.13 Part III Full domain
3-stratified_junction → P.33 Part IV Stratified junction
4-2Ddisks → P.41 Part V Three 2D disks

流体解析では多数のファイルをディレクトリに分けて管理しており、全体を一覧するためにUbuntuのファイルブラウザの一覧表示で見ることができます。ただ様々な操作は端末上で行うので、コマンドよりファイル構成を確認するために、treeコマンドをインストールのときに用いたSynapticを使って導入しておきます。

それでは最初の1番目の例題を検証してみます。フォルダに移動します。
$ cd ~/CodeSaturneFiles/examples/1-simple_junction

そこにはcase1,meshの2つのディレクトリがあり、treeで見ると以下のファイル構成になっています。
$ tree
├── case1
│  └── case1.xml
└── mesh
   └── downcomer.des

1: Code_SaturneのCASEディレクトリを作成する

Code_Saturneは、1つ以上のCASEディレクトリを含むSTUDYディレクトリを作成して、そこに流体解析に必要なファイルを配置します。ここでは、最も単純な形として1-simple_junctionをSTUDYディレクトリとして、この中に1つのCASEディレクトリを作ります。なお以下のようにCASE名を指定しない場合は、CASE1になります。
$ code_saturne create

これよりSTUDYディレクトリは、以下のような構成となります。なお、このCASEディレクトリの準備については、先に用意した/home/dexcs/CodeSaturneFiles/docs/userにあるuser.pdfのP.19 3.3 Case preparerに、詳しい説明があります。

詳しい説明は徐々に進めるとして、概要だけをまとめておきます。まずDATAディレクトリには、REFERENCEディレクトリとSaturneGUIスクリプトがあります。
REFERENCEディレクトリには、様々な物性データが集められており、この情報の名前や内容は変更できません。SaturneGUIスクリプトは、Code_Saturneを活用するためのGUIツールの起動用スクリプトです。
次にSRCディレクトリには、REFERENCEディレクトリとEXAMPLESディレクトリがあります。これらはユーザーサブルーチンの情報がまとめられています。
更にSCRIPTSディレクトリには、Code_Saturneの解析実行スクリプトがあります。なおRESUは結果のディレクトリです。

1-simple_junction
├── CASE1
│  ├── DATA
│  │  ├── REFERENCE
│  │  │  ├── cs_user_scripts.py
│  │  │  …
│  │  │  └── meteo
│  │  └── SaturneGUI
│  ├── RESU
│  ├── SCRIPTS
│  │  └── runcase
│  └── SRC
│     ├── EXAMPLES
│     │  ├── cs_user_boundary_conditions-advanced.f90
│     │  …
│     │  └── cs_user_postprocess-sfc.c
│     └── REFERENCE
│        ├── cs_user_atmospheric_model.f90
│        …
│        └── usvosy.f90
├── case1
│  └── case1.xml
└── mesh
   └── downcomer.des

2: simple_junctionのデータを準備する

例題の1-simple_junctionには、既に必要がファイルが用意されているので、以下の手順で解析設定情報のxmlファイルを、先に作ったCASEディレクトリのDATAディレクトリにコピーします。
$ cd ~/CodeSaturneFiles/examples/1-simple_junction
$ cp case1/case1.xml CASE1/DATA

次に各ケースで共通で利用するメッシュ情報をMESHディレクトリとして、作成したSTUDYディレクトリ1-simple_junctionの中に、CASEディレクトリと並べて、以下のように例題のmeshディレクトリを利用して用意します。
$ cp -r mesh MESH

3: Code_SaturneのGUIツールを起動する

先に用意した起動スクリプトSaturneGUIを用いて、以下のように起動します。
$ cd CASE1/DATA
$ ./SaturneGUI
解析事例の画像を集めた表示のあるCode_Saturne GUI-3.0.1が起動します。
FileメニューからOpenより、先に用意したcase1.xmlを開きます。ツール上に設定情報が表示されます。
Code_Saturneでは、解析の結果を起動時刻で管理しているので、一旦この設定をFile→Saveで保存して現在時刻の情報とします。
念のためFile→Quitで終了して、再度case1.xmlの設定ファイルを読み込みます。

4: Code_Saturneで流体解析を実行する

左下の設定項目の一覧の中で、最後のCalucutation managemnet を開いて、最後のPreparer batch calculationを選択します。
右下のScript fileパネルの下の、Calculation startのStart calculationボタンを押して実行します。

※なお最初の実行のとき、python2.7/site-packageにおいてmesh関連のエラーがログ表示パネルに赤色で表示され、中断する場合があります。この時は一旦終了して、再度StaurneGUIを起動すると正しく実行できることがあります。原因は不明です。

ログ表示パネルには、以下のように実行の進展が表示されます。以下より、code_saturne-3.0.1を1CPUで単独実行して、結果をCAE1のRESUディレクトリ中の2013062201106に保存したことがわかります。
これより、解析結果の保存ディレクトリ名が、解析時刻の分までで決められているので、1分以内に再実行すると正しく進まないようです。

==(抜粋)==
Code_Saturne is running
Version: 3.0.1
Path: /opt/salome/code_saturne-3.0.1
Result directory: /home/dexcs/CodeSaturneFiles/examples/1-simple_junction/CASE1/RESU/20130622-1106
Single processor code_saturne simulation.

****************************
Preparing calculation data
****************************
Preprocessing calculation
****************************
Starting calculation
****************************
Saving calculation results
****************************
==(抜粋)==

確認できたら、OKを押して終了します。GUIツールもFile→Saveで保存してから、File→Quitで終了しておきます。

5: 解析結果をSalome/ParaViSで確認する

指示どおり、RESUディレクトリに結果が出来ているかを確認します。
$ cd ../RESU; ls -l

解析実行毎に、年月日ー時分として20130622-1106のように結果ディレクトリがあります。ここに移動して確認します。
$ cd 20130622-1106

結果として色々なファイルがあるのですが、解析結果はpostprocessingディレクトリにあるので、移動して確認します。
$ cd postprocessing; ls *.case

ここで、Code_Saturneはデフォルトで、EnSight形式の結果ファイルを出力するので、拡張子がcaseとなるため、上記のように確認すると、RESULTS.caseがあります。次に、EnSight形式はSalomeに組み込まれているParaViSモジュールで読み込むことができます。もちろん単独のParaViewでも可能です。

そこでデスクトップにあるSalomeのアイコンから起動して、モジュールをParaViSに切り替えます。ファイル→ParaViewファイルを開く…で、File of type をEnSight Files( *.case *.CASE *.Case )にしてから、RESULTS.caseをディレクトリを移動して探してから開きます。Applyを押すと赤いモデル空間が表示できます。

ここから先は結果の見方になるので、続く記事でまとめようと思います。以上で、例題:examplesを用いて、Code_Saturneの起動が確認できました。



DEXCS2012-Salomeの有効活用:CFD/Code_Saturneの導入手順(1)

2013年06月17日 18時47分29秒 | OpenCAE活用
DEXCS2012-Salomeは、Salome-Mecaによる構造解析を目的とするオープンCAEシステムですが、開発元のEDFでは流体解析ソルバーとしてCode_Saturneを公開しています。これはプリポストシステムのSalomeにおいて、構造解析Code_Asterと流体解析Code_Saturneを統合した連成解析が可能となっているそうなので、非常に期待しています。
http://code-saturne.org/cms/

そこで、DEXCS2012-Salome (Ubuntu-12.04LTS-64)をベースにして、Code_Saturneを導入する手順をまとめます。なおこの手順は、以下のPENGUINITISさんのブログを参考にして、DEXCS2012-Salome用に補足したものです。他のLinuxシステムでも同様な手順ですが、具体的な記述はDEXCS2012-Salome-D1-B1-64をベースにしています。
http://www.geocities.co.jp/SiliconValley-SantaClara/1183/study/Code_Saturne/Code_Saturne_setup.html

Code_Saturneの導入では、以下の"installation guide"に示す手作業で各種のツールを組み込んで、完全で高性能なシステムを構築することも可能ですが、この記事では簡易なインストーラーを用いる方法を説明します。性能向上が必要になった段階で、手作業での高性能システムの構築手順をご紹介する予定です。
http://code-saturne.org/cms/sites/default/files/install-3.0.pdf

■ はじめの注意

インストールではネットワークからダウンロードを行うので、DEXCS2012はインターネットに接続可能にします。
他にCUDAの導入などを行うとツールのバージョンが異なるので、以下はDEXCS2012-Salomeの導入直後を前提とします。
以下に示す導入手順は例題が動作する基本状態の構築までを示しており、並列処理など性能向上にはツールの追加が必要になります。

■ ダウンロードと展開

以下のサイトからCode_Saturneのインストールツールをダウンロードします。2013/06時点での最新の公開版は3.0になるので、ページの最初の行にある"installer"よりダウンロードします。インストールツールなのですぐに終わります。DEXCSでChromiumブラウザを用いた場合は、ホームのDownloadsに、installer-3.0.1.tar.gzが保存されます。
http://code-saturne.org/cms/download/3.0

以下の手順で展開して、~/Downloads/installerでインストール作業を進めます。なお以下の手順ではコマンド入力を基本にしており、Ubuntuの端末を利用します。DEXCSでは上部のバーかアプリケーション→アクセサリ→端末で利用できます。複数起動して目的に応じて使い分けると便利です。
$ cd ~/Downloads
$ tar xvfz installer-3.0.1.tar.gz
$ cd installer; ls -l

ここで3つのファイルが確認できて、README.txtはインストールの説明、install_saturne.pyはインストールスクリプト、setupはインストールの設定ファイルでこれを書き換えてインストールを進めます。

■ インストール環境の準備

DEXCSの状態でインストールを進めるためには、以下のツールの追加が必要です。アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。ログインユーザーのパスワードを入力してツールが起動したら、再読込を押して最新の状態にしておきます。

g++:検索 g++ (4.6.3) → g++ g++4.6 libstdc++6-4.6-dev (3)
gfortran:検索 gfortran (4.6.3) → gfortran gfortran-4.6 (2)
opnempi:検索 openmpi (1.4.3) → libopenmpi-dbg libopenmpi-dev (2) + 関連ツール(1)
cmake:検索 cmake (2.8.7) → cmake cmake-data cmake-dbg (3) + 関連ツール(2)
PyQt4:検索 pyqt4 (4.9.1) → pyqt4-dev-tools (1)

■ setupファイルの変更

以下の方針に従って設定を変更します。これは動作を確認した設定ですが、インストール先などは他に選択できます。
・インストール先は、Salome-Mecaがインストールされている/opt/salomeとします。このディレクトリを自由に利用できるように、次のコマンドで設定しておきます。
$ cd /opt
$ sudo chmod 777 salome
・数値計算においては、blasが必要になり様々な高性能ツールがありますが、ここではDEXCSにあるlibblas3gfをそのまま利用します。将来はOpenBLAS、IntelMKLなどの交換が可能です。
・並列処理においては、metis, scotchなどの高性能ツールがありますが、ここではインストールせずデフォルトの機能を利用します。手作業の完全インストールでは、これらを導入できます。
・オプショナルパッケージの cgns, hdf5, med, libxm2 はインストールが必要で、mpiは/usrにインストールされたツールを流用します。これらはインストーラーが自動的にインストールします。

以上を踏まえて、設定ファイルsetupをインストール条件に合わせて変更するので、エディタviなどでsetupを開きます。
$ cd ~/Downloads/installer
$ vi setup

・prefix ~/opt → prefix /opt/salome
・mpi None yes yes → mpi /usr yes no
・libxml2 None auto no  → libxml2 None yes yes

■ コンパイルの実行

先のsetupに従って、以下のコマンドでコンパイルを実行します。
$ ./install_saturne.py

オプショナルパッケージやCode_Saturneなどはインターネットからダウンロードして自動にインストールまで進めてくれます。インストール作業ディレクトリ~/Download/installerの状態を、lsで確認すると様子が分かります。
インストールは、自動的にインストールパッケージをダウンロードし展開して設定して、コンパイルとインストールまで完全自動で進みます。非常に完成度の高いシステムです。インストールは、以下の順序で進みます。
HDF5 (Hierarchical Data Format):version: 1.8.9
CGNS (CFD General Notation System):version: 3.1.3
MED (Model for Exchange of Data):version: 3.0.6
libxml2 (XML library):version: 2.7.8
Code_Saturne (Code_Saturne CFD tool):version: 3.0.1

エラーが無く、最後に「Thank you for choosing Code_Saturne!」と表示されたら、コンパイルは完了です。なお途中でエラーで中断した場合には、install_saturune.logの最後にエラーの詳細があるので、これを参考に対処します。

インストール先は、/opt/salome/code_saturne-3.0.1です。この中のbinに、code_saturne ple-configがあり、「code_saturne」が実行形式になります。以下のコマンドで、実行時のオプションが表示されます。
$ /opt/salome/code_saturne-3.0.1/bin/code_saturne

以下の記述を最後に追加して、コマンド実行パスを設定しておきます。
$ cd ~
$ vi .bashrc
$ source .bashrc

===== .bashrc =====
# code_saturne
export PATH=/opt/salome/code_saturne-3.0.1/bin:$PATH
===================

DEXCS2012-Salomeの有効活用:CUDA5によるGPGPU環境構築(1)

2013年06月05日 11時38分11秒 | OpenCAE活用
ここではアプリケーションとしてのCAEから発展して、CUDA5.0を用いたGPGPUプログラミング環境を構築して、超並列数値解析によるCAEの可能性を検証したいと思います。

ベースとなるシステムは、DEXCS2012-Salome-D1-B1-64を利用します。平成25年5月末に公式サイトから公開しています。これはベースとしてはUbuntu12.04-LTS-64になるので、DEXCSでなくても同様な構築は可能だと思うので、パッケージの追加などはそれぞれの環境で確認してください。

まずはDEXCS2012-Salome-D1-B1-64.isoを用いてベースの環境を構築します。目的はGPGPUによるCUDAプログラミングなのでGPUの活用が前提です。しかし現時点では仮想マシンからはGPUが利用できないと思うので、CUDA5.0に対応したGPUが搭載されたPCに直接にDEXCSをインストールすることになります。

ISOファイルからDEXCSインストール用DVDを作成したら、このDVDから起動して以下の手順に従ってベースの環境の構築を進めてください。なおネットワークからソフトウエアをダウンロードする方法で進めるので、ネットワークは必須になります。またGPUも利用可能な状態であることが前提です。
(インストール手順は作成中:基本的にはインストーラ「Custom12.04のインストール」の指示どおり)

なおベースのUbuntu12.04では、アップデートマネージャーでシステムを最新の状態にしておきます。

■ CUDAドライバのインストール

NVIDIAのGPUデバイスを利用するためには、ドライバをインストールする必要があります。この方法には色々ありますが、4つほど紹介します。簡単に実行するお勧めは2の方法です。

1:CUDAのインストールパッケージを用いて、ToolkitとSamplesと同時にドライバを導入することもできますが、GUIの停止や再開などの手間が必要になる場合があります。また設定ツールのインストールなども面倒になります。

2:Ubuntuの場合にはシステムの標準的な方法が、メニューのアプリケーション→システムツール→システム設定→追加のドライバーにあります。デスクトップPCでシステムがGPUを認識すれば、この方法が最も確実な方法になります。

3:上記のNVIDIAのダウンロードページから、利用するGPUを選択してLinux64bit-Japaneseの条件で検索し、NVIDIA-Linux-x86_64-319.23.runをダウンロード出来ました。これを用いてGPUドライバを導入する方法です。

実は検証用のノートPCでは、GeForce GT555Mが搭載されているのですが、Ubuntuの追加のドライバーでは認識できず、確実な2の方法が実行できません。そこで、NVIDIAのサイトからダウンロードする3の方法がありますが、これも1と同じような難しい手順が必要です。
http://www.nvidia.co.jp/Download/index.aspx?lang=jp

最後に、UbuntuのSynapticパッケージマネージャを利用する4の方法があります。これはノートPCなどで、CPUとGPUのグラフィック機能が両方あって、目的に応じて使い分ける「NVIDIA OPTIMUS」により制御する場合に対応する方法です。Linux上でnvidia optimus機能に対応するために、bumblebeeを用います。
http://bumblebee-project.org/

4:DEXCS2012-SalomeにはSynapticが既に導入してあるので、アプリケーション→システムツール→システム管理→Synapticパッケージマネージャを起動します。

(0) bumblebeeを導入する準備として、端末より以下のコマンドを入力しておきます。続いてSynapticの再読み込みで最新のパッケージ情報にしておきます。
$ sudo add-apt-repository ppa:bumblebee/stable

(1) Synapticの検索よりbumblebeeを探します。以下の3つが見つかるので、インストール指定して関連ツールも導入します。
bumblebee, bumblebee-dbg, bumblebee-nvidia

(2) 適用を実行して、インストールを進めます。これによってnvidia-currentのドライバもインストールされます。Synapticの検索でnvidiaより探して確認しておきます。

(3) これまで使われていたnvidia-gpu用の汎用ドライバNouveau display driverを削除するため、Synapticでnouveauを検索して、xserver-xorg-video-nouveauを完全削除します。

(4) ここで導入したGPU用のドライバなどを有効にするために、再起動します。

(5) ドライバの導入を確認するために、端末よりCPU動作のglxspheresとGPU動作のoptirun glxsperesで画像の生成の状態や結果出力よりnvidia-gpuの動作を確認できます。

以上の手順で導入されたnvidia-currentのドライバは、Synapticで確認すると304.88です。次に導入するCUDA-5.0では304.54より新しいドライバが必要なので、一応大丈夫です。

■ CUDAシステムの構築環境準備

以下の手順では、全てSynapticを用いて導入して、リンクの調整などを端末でコマンド入力により進めます。

・glutの導入: glutで検索
freeglut3, freeglut3-dbg, freeglut3-dev の3つが導入された状態にする。関連する追加パッケージも導入する。
以下のコマンドでリンクを張る。
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libglut.so /usr/lib/libglut.so

・g++の導入: g++で検索
g++, g++-4.6, libstdc++6-4.6-dev の3つが導入された状態にする。

・OpneMPIの導入: openmpiで検索
最新版としてver1.5が必要なので、openmpi1.5-bin, openmpi1.5-checkpoint, openmpi1.5-common, openmpi1.5-doc の4つと、
libopenmpi1.5-2, libopenmpi1.5-dbg, libopenmpi1.5-dev の3つが 導入された状態にする。関連する追加パッケージも導入する。

ただしDEXCS-Salomeとしても利用する場合で、Gmshのメッシュツールを動作させるには、OpenMPI-1.4.3が前提になるので、上記の導入によりGmshは動作しなくなるので、上部パネルからも削除しておく。

・Xiの導入: xiで検索
libxi-dev, libxi6, libxi-dbg の3つが導入された状態にする。

・Xmuの導入: xmuで検索
libxmu6, libxmu-dev, libxmu-headers, libxmu-dbg 4つが 導入された状態にする。

以上で準備は終わりです。

■ CUDAシステムのインストール

ドライバを導入してベースシステムが出来たので、次はCUDAのプログラミング環境を準備します。以下のNVIDIAサイトからUbuntu12.04-64bitに対応したCUDA-5.0システムをダウンロードします。「LINUX: CUDA 5.0 Production Release」のUbuntu11.10-64bitを選択します。
https://developer.nvidia.com/cuda-toolkit-50-archive

最新版CUDA-5.5のダウンロードは、以下より可能ですが、これはDriver-319以上が必要になり、上記の手順では304.88なので、導入には面倒な手順が必要になります。
https://developer.nvidia.com/cuda-downloads

・準備作業
現時点で最新の「cuda_5.0.35_linux_64_ubuntu11.10-1.run」をダウンロードしたら、端末を開いて、CUDA作業用フォルダ~/CUDAworkを作って、そこにファイルを移動して、準備を進めます。
$ cd ~
$ mkdir CUDAwork
$ mv ~/Downloads/cuda_5.0.35_linux_64_ubuntu11.10-1.run ~/CUDAwork/
$ cd CUDAwork
$ chmod a+x cuda_5.0.35_linux_64_ubuntu11.10-1.run

・構築手順
それでは、CUDA-5.0の導入を進めます。このインストールファイルはCUDA-5.0の、Driver, Toolkit, Samples、3つをインストール出来ますが、先にnvidia-currentで304.88のCUDA対応のGPUドライバをインストールしているので、Toolkit,Samplesのみを導入します。
$ sudo ./cuda_5.0.35_linux_64_ubuntu11.10-1.run で実行者のパスワードを入力し、インストールファイルを実行します。

英文でライセンスや利用条件などが出力されますが、確認しながらスペースバーで最後まで進めます。

最後に、Do you accept the previously read EULA? (accept/decline/quit): に対して、acceptで進めます。

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 304.54? ((y)es/(n)o/(q)uit): に対しては先に述べたように不要なので、noで進めます。

Install the CUDA 5.0 Toolkit? ((y)es/(n)o/(q)uit): に対しては必要なので、yesで進めます。

Enter Toolkit Location [ default is /usr/local/cuda-5.0 ]: に対してはデフォルトにするので、Enterで進めます。

Install the CUDA 5.0 Samples? ((y)es/(n)o/(q)uit): に対しては必要なので、yesで進めます。

Enter CUDA Samples Location [ default is /usr/local/cuda-5.0/samples ]: に対してはデフォルトにするので、Enterで進めます。

Installing the CUDA Toolkit in /usr/local/cuda-5.0 ... と表示されてインストールが進みます。しばらくかかります。

インストールの結果が以下の様に示されます。
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-5.0
Samples: Installed in /usr/local/cuda-5.0/samples (pristine) and /home/dexcs/NVIDIA_CUDA-5.0_Samples (writable)

最後に以下の警告が出ますが、取り敢えず動作するので先に進めます。
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 304.54 is required for CUDA 5.0 functionality to work.

・環境変数など

続いて以下の手順に示されたように、プログラミングに関する環境変数などを設定します。
* Please make sure your PATH includes /usr/local/cuda-5.0/bin
* for 64-bit Linux distributions add /usr/local/cuda-5.0/lib64 and /lib to /etc/ld.so.conf and run ldconfig as root

$ vi ~/.bashrc でファイルの最後に以下を追加します。
# cuda
export PATH=/usr/local/cuda-5.0/bin:${PATH}
端末を閉じて新しい端末を開いてから、printenv | grep PATH で設定を確認します。

$ sudo vi /etc/ld.so.conf でファイルの最後に以下を追加します。
/usr/local/cuda-5.0/lib64
/usr/local/cuda-5.0/lib
/usr/lib/nvidia-current
設定したら、sudo ldconfig してから、ldconfig -p | grep cuda で設定を確認します。なお、nvidia-currentの場所は導入したドライバによって異なっています。

・ライブラリの設定

本当ならこれで環境構築は完了なのですが、Samplesをコンパイルするときに、libcuda.soが無いとエラーが出るので、応急的に以下のコマンドでリンクを作っておきます。
$ sudo ln -s /usr/lib/nvidia-current/libcuda.so /usr/local/cuda-5.0/lib64/libcuda.so

■ CUDA Samplesのコンパイル

上記のインストールにより、/home/dexcs/NVIDIA_CUDA-5.0_Samples が作られているので、そこでコンパイルを以下の様に実行します。
$ cd /home/dexcs/NVIDIA_CUDA-5.0_Samples
$ make

相当に時間がかかりますが、終わるまで暫く待ちます。ここでエラーなどで停止した場合には、準備作業が不完全か、バージョンの不一致などですので、メッセージを良く見て対応します。

エラー無く以下のメッセージが出たらコンパイルが全て完了です。
Finished building CUDA samples

■ CUDA Samplesの実行

上記のコンパイルで作られた実行形式は、~/NVIDIA_CUDA-5.0_Samples/bin/linux/release に作られるので、移動します。
$ cd ~/NVIDIA_CUDA-5.0_Samples/bin/linux/release

ここでそのまま ./deviceQuery と実行しても、以下の様に実行できません。NVIDIA Optimusが制御出来ないからです。
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

そこで、optirun ./deviceQuery と実行すると、以下の様に正しく実行できます。これでCUDA-5.0が動作することが確かめられました。ただしoptirunよる実行では、最初に切り替え時間がかかるようです。
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GT 555M"
CUDA Driver Version / Runtime Version 5.0 / 5.0
CUDA Capability Major/Minor version number: 2.1
……
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 5.0, CUDA Runtime Version = 5.0, NumDevs = 1, Device0 = GeForce GT 555M

それでは、画像生成による例として nbody を試してみます。
$ optirun ./nbody とすると、GPUにより高速に天体の多体問題の計算が進みます。30GFLOPSぐらい出ています。
$ oprirun ./nbody -cpu とすると、 非常に低速な処理になることが実感できます。0.5GFLOPSがやっとこですね。