MATLAB with CUDA

340 views
Skip to first unread message

Shetora

unread,
Aug 19, 2010, 2:27:54 AM8/19/10
to GPGPUfan
その後の調べで,NVIDIAではなくMATLABのMathworks社側のサイトに,CUDAの使用方法が載っていました.
http://www.nvidia.com/object/matlab_acceleration.html からリンクがありますね.手順に従っ
たら,ちゃんとCUDAのv3.1でもコンパイル,実行できました!
(本当にCUDAで動いているかは確認できていませんが・・・CPUに比べて激遅だったので大丈夫だと思います)

ただしMATLABの'-I"' MATLABROOT '"/extern/include'の指定の処で,このように""で括ってあげる必要があり
ました.

同じところで躓いている方がいらっしゃったら連絡ください.

Ishii Masayuki

unread,
Aug 19, 2010, 6:53:25 AM8/19/10
to gpgpuf...@googlegroups.com
じょうほうありがとうございます。

>その後の調べで,NVIDIAではなくMATLABのMathworks社側のサイトに,CUDAの使用方
法が載っていました.
>http://www.nvidia.com/object/matlab_acceleration.html からリンクがあります


ね.手順に従っ
>たら,ちゃんとCUDAのv3.1でもコンパイル,実行できました!
>(本当にCUDAで動いているかは確認できていませんが・・・CPUに比べて激遅だった
ので大丈夫だと思います)

おめでとうございます。これは自分でも探そうと思いましたが、時間がなくてすいま
せんでした。
MATLAB側にあったのですね。

>ただしMATLABの'-I"' MATLABROOT '"/extern/include'の指定の処で,このように""
で括ってあげる必要があり
>ました.

これは重要な情報ですね。ありがとうございます。

それはそうと、応用数理のほうでもMATLABを使ってGPGPU機能付きの
数値計算させた論文が見られます。かなり効果があるようです。とくに
大規模連立一次方程式の数値解法にてです。
ほかにも相性のいいアルゴリズムがあるかどうかはわかりませんが。

いしいまさゆき


Shetora

unread,
Aug 22, 2010, 7:47:58 AM8/22/10
to GPGPUfan
> それはそうと、応用数理のほうでもMATLABを使ってGPGPU機能付きの
> 数値計算させた論文が見られます。かなり効果があるようです。とくに
> 大規模連立一次方程式の数値解法にてです。
こういうときはアルゴリズムは何を使っているんでしょうか??
私は工学のシステム同定や機械学習分野で使っていますが,
この分野では,線形方程式がスパースになりがちなんですよね...
比較的スパースな場合でも効率よく並列化できる方法があったら知りたいです.

あるいは,大規模な行列を扱うことは少ないのですが,
せいぜい数十次元程度の線形方程式を数千個解くとかを高速化したいことがままあります.
とりあえず並列でLU分解してみたいところですが,
ピボット選択がネックになりそうで…
(メモリもカツカツです)

まぁ,悩んでいるよりやってみるほうが早いのでしょうけども.

Ishii Masayuki

unread,
Aug 22, 2010, 9:32:32 AM8/22/10
to gpgpuf...@googlegroups.com
>こういうときはアルゴリズムは何を使っているんでしょうか??
>私は工学のシステム同定や機械学習分野で使っていますが,
>この分野では,線形方程式がスパースになりがちなんですよね...
>比較的スパースな場合でも効率よく並列化できる方法があったら知りたいです.

一例として、2010年6月の応用数理に
「GPUのための前処理つき共役勾配法」
というタイトルのレビューが存在します。
共役勾配法にてGPUにおける線形方程式の解法を行っており、
ICCG法について実装をしているようです。
結構高速化に成功しているようです。
よろしければ、コピーを送ることもできますがいかがでしょうか?

いしいまさゆき


MIURA Shin-ichiro

unread,
Aug 22, 2010, 1:50:12 PM8/22/10
to GPGPUfan
横から失礼します・・・

私の素人的な見解ですが,小さい規模の次数(100元~1000元程度まで?)の連立方程式ならば,反復法よりも直接法の方が有利だと思います.
これは計算速度の点だけでなく,特にGPUで行う場合単精度計算が基本となるので,小さい次数の連立方程式がたくさんある方程式には,打切り誤差がたく
さん伝播しそうな気がします.

私の計算では流体計算ですので,100万程度から数千万元連立方程式を解くので仕方なく共役勾配法を使っていますが,厳密に解かなくていいということも
幸いしています.
確かに優対角でない行列に直接法を使う場合はピボット選択が必要ですが.


> 一例として、2010年6月の応用数理に
> 「GPUのための前処理つき共役勾配法」

応用数理学会会員なのに論文見ていないのですが,確か山梨大の先生で,単精度計算を2度使って倍精度を達成させるという方法ですよね?
すごいな~と思って発表を聞いた記憶があります.

ただ今になってしまうと,新しいコアになって,倍精度計算がしやすくなってどう変わるのかな~という気持ちです.
倍精度で計算したいですが,取り合えず私の計算では単精度でのCG法でも収束はしているので,この論文を見ていないことにしています(汗

Ishii Masayuki

unread,
Aug 22, 2010, 8:19:17 PM8/22/10
to gpgpuf...@googlegroups.com

>私の素人的な見解ですが,小さい規模の次数(100元~1000元程度まで?)
の連立方程式ならば,反復法よりも直接法の方が有利だと思います.
>これは計算速度の点だけでなく,特にGPUで行う場合単精度計算が基本となるので,
小さい次数の連立方程式がたくさんある方程式には,打切り誤差がたく
>さん伝播しそうな気がします.

LU分解とかそういった計算方法ですよね。

>私の計算では流体計算ですので,100万程度から数千万元連立方程式を解くので
仕方なく共役勾配法を使っていますが,厳密に解かなくていいということも
>幸いしています.
>確かに優対角でない行列に直接法を使う場合はピボット選択が必要ですが.

もしも、厳密じゃなく数値的でもOKならばCG法でもいいのですよね。
ほかにもGMRES法などいろいろあるようです。

>応用数理学会会員なのに論文見ていないのですが,確か山梨大の先生で,単精度計
算を2度使って倍精度を達成させるという方法ですよね?
>すごいな~と思って発表を聞いた記憶があります.

なるほど。しかし今回は前処理手法に関する手法です。山梨大学の先生であることで
はあっております。

>ただ今になってしまうと,新しいコアになって,倍精度計算がしやすくなってどう
変わるのかな~という気持ちです.
>倍精度で計算したいですが,取り合えず私の計算では単精度でのCG法でも収束はし
ているので,この論文を見ていないことにしています(汗

倍精度では必要に応じてなのかもしれませんね。。。

いしいまさゆき

Ishii Masayuki

unread,
Aug 23, 2010, 6:57:50 AM8/23/10
to gpgpuf...@googlegroups.com
それと、補足ですがみずほ総合研究所の所員さんも
クリロフ部分空間法の一つである共役勾配法にてCUDAを実装させて
大規模連立一次方程式を解くと、劇的に速くなったという話があります。
ほかにも大規模連立一次方程式とCUDAの相性の話はあるでしょうか?

いしいまさゆき

Ishii Masayuki

unread,
Aug 23, 2010, 7:04:10 AM8/23/10
to gpgpuf...@googlegroups.com
http://www.mizuho-ir.co.jp/solution/research/tools/simulation/gpu/

です。よろしくお願いします。

いしいまさゆき

Kawakami Hiroshi

unread,
Aug 23, 2010, 7:16:36 AM8/23/10
to gpgpuf...@googlegroups.com
皆様
この度はお仲間に入れて頂きありがとうございます。

私共もCG法をGPUでCUDA実装をしております。
私自身は担当ではありませんが、GPUを複数枚利用し
パフォーマンスを出すような事を実施しております。

ご参考まで
http://www.gdep.jp/product/view/21
1ケ月間のご評価も可能です。

管理人様
ふさわしくないレスであれば遠慮なく削除してください。

かわかみ

Ishii Masayuki

unread,
Aug 23, 2010, 7:54:35 AM8/23/10
to gpgpuf...@googlegroups.com
ありがとうございます。

>私共もCG法をGPUでCUDA実装をしております。
>私自身は担当ではありませんが、GPUを複数枚利用し
>パフォーマンスを出すような事を実施しております。

性質のいい行列であればCG法をCUDAで実装すると
いい結果が得られるというわけですね。
たとえば悪条件になるような行列の場合のCG法はどうなるか。
それとGMRESなどの別の方法などいろいろ考えられそうですよね。

お詳しい知識を持たれている方はいますか?

かわかみ様。ありがとうございます。

また、このメーリングリストは宣伝にも使うことができます。
よろしくお願いします。

いしいまさゆき


Shetora

unread,
Aug 25, 2010, 12:32:43 AM8/25/10
to GPGPUfan
> 私の素人的な見解ですが,小さい規模の次数(100元~1000元程度まで?)の連立方程式ならば,反復法よりも直接法の方が有利だと思います. これは計算速度の点だけでなく,特にGPUで行う場合単精度計算が基本となるので,小さい次数の連立方程式がたくさんある方程式には,打切り誤差がたくさん伝播しそうな気がします.

同感です.とりあえずLU分解するにしてもピボット選択は必須でしょうから,
何か前処理で優対角に変換できないか,問題を思案してみます!
これさえできちゃえば並列は簡単そうですが,如何せん問題依存ですね.

>小さい次数の連立方程式がたくさんある方程式には,打切り誤差がたくさん伝播しそうな気がします.
これが少しなぜかわからなかったです.
独立・並列で解くのではないのでしょうか??
数値計算は素人知識なため,勉強しなおします.


大規模な連立方程式を解くのにCG法を使うことも知りませんでしたw
最適化のためにしか使ったことが無かったです.なるほど,そういう方法もあるのですね.
並列化できそうな反復法といえばヤコビ法しか思いつきませんでした.
大変勉強になりました.

Ishii Masayuki

unread,
Sep 1, 2010, 8:21:37 AM9/1/10
to gpgpuf...@googlegroups.com
さらに、話は変わりますが
http://www.gdep.jp
によるとPrometech MCL Ver 1.0
でCG法を実装すると、10倍~15倍ほど早く動作するようなのです。
とくに流体や構造解析などにすごい威力を発揮するようです。
こうして考えると、大規模連立一次方程式の数値解法では、GPGPUは
かなり相性がいいゆえ、難しい問題でも大丈夫なのかとも思います。

出来れば、大規模固有値問題でも威力を発揮してくれるとうれしいですね。。。

いしいまさゆき

Reply all
Reply to author
Forward
0 new messages