<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/matla/">
    <title>matla @ ウィキ</title>
    <link>http://w.atwiki.jp/matla/</link>
    <atom:link href="https://w.atwiki.jp/matla/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>matla @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2011-09-29T01:03:05+09:00</dc:date>
    <utime>1317225785</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/28.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/27.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/26.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/25.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/24.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/23.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/22.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/20.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/matla/pages/18.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/matla/pages/28.html">
    <title>ART-Linuxの便利ツール</title>
    <link>https://w.atwiki.jp/matla/pages/28.html</link>
    <description>
      個人的に一番書いておきたい備忘録ｗ

ART-Linuxを使うに当たって，便利ツールをいろいろ準備する．
すべてUbuntu10.04向けな情報である．

***gccを入れておく
なんとLinuxのくせに開発環境が入っていない．
G++4.4をSynapticからインストールする．

ついでにmakefileの依存関係をなんとかしてくれる
makedependをインストールしておく．g++の-MMオプションを使う人はいらない．
# sudo apt-get install makedepend

***Subversionを入れる
バージョン管理ツールとして，RapidSVNとmeldを入れた．
# sudo apt-get install rapidsvn
# sudo apt-get install meld

RapidSVNを起動して
表示→設定→プログラム→比較ツール→
上の空欄(参照の左)に [/usr/bin/meld]
引数に              [%1 %2] を入力
で，meldを差分表示ツールとして登録可能

ついでにRapidSVNではSubversion自体は入らないので，
# apt-get install subversion
もしておくと困ったときに使える．

***geditにshift-jisエンコーディング対応させる。
Windowsがメインユーザである私は，エディタにはgeditを使っている．
いろんな意味でメモ帳みたいなものだからである．
しかし，SHIFT-JISには最初対応していないので，文字化けする．
ターミナルから、
# sudo gconf-editor
して、apps -&gt; gedit2-&gt;preferences-&gt;encoding
を開き、auto_detectに [SHIFT_JIS]を追加する。
ねんのため上の方にもっていっておく。

キーを右クリックして、デフォルト、かつシステムの設定にしておく。
geditを開き直せばあらふしぎ。できなかったらググってください．

***バックアップを考える
制御システムでは，新しいドライバのインストールや改造が
たびたびになるが，そのたびにシステムを壊していると何度もセットア    </description>
    <dc:date>2011-09-29T01:03:05+09:00</dc:date>
    <utime>1317225785</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/27.html">
    <title>ART-Linuxのインストール</title>
    <link>https://w.atwiki.jp/matla/pages/27.html</link>
    <description>
      ART-linuxを準備するには，まず，x86互換PCを準備します．
いわゆるパソコンですね．ただし，現在は32bitのみの対応のようです．
64bit版はハードウェアドライバの対応なども状況がよくありませんので，
制御をする場合には無難な選択肢でしょう．

***PC選択時の注意点

個人的には，多くのシステムで試したわけではないのですが，
-Core2Duoシステムではなぜか上手くいかない例が多い(重い)
-ビデオカードがnVidiaなシステムではなぜか上手くいかない例が多い(重い)
といった経験があります．どうも，ARTの割り込みとビデオカード周り？の割り込みがバッティングし，
非常に動作が重くなるようです．原因については謎とのことですが…
修正は難しく，たぶん改良も期待薄(商品ではありませんからね！)なので，上手く動くハードを探します．
私の経験だと，古き良きPentium4や，corei5のPCでは，nvidiaボードであっても上手くいっていました．
(core2duoシステムがいけないのかな？？)
また，AMDのAthlonなんかもいまのところ上手くいっています．CPUしか記憶にありませんが，一応うまくうごいたものを
以下にリストアップします．古いのは詳細が記憶にないのですいません．
-Socket 478系のPentium4，PentiumD + 845 (ART カーネル2.2系にて動作)
-Corei5 Sandy Bridge + H67 
-Athlon 64 XP 5800+ + ?
ただし，重いからといってART機能が使えないわけではありません．重くて使いものにならないかもしれませんが…
CUIで動かすと問題なく使える可能性が0ではありません^^;

インストール前の注意として，
Speed step, Turbo boost等の実クロック可変なシステムはBIOSによりoffにしたほうが無難でしょう．
というか，offにしてください．時間計測にも影響を及ぼす可能性が0とは言えません．

それではArt-linuxシステム構築の備忘録です．下記備忘録のため書きなぐります．

***Linuxをインストールする

まず，土台となるlinuxをインストールする．現在，ARTがサポートさ    </description>
    <dc:date>2011-09-20T20:50:32+09:00</dc:date>
    <utime>1316519432</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/26.html">
    <title>ART-Linuxについて</title>
    <link>https://w.atwiki.jp/matla/pages/26.html</link>
    <description>
      *ART-Linuxについて

ART-LinuxはRT-Linuxのように実時間でのプロセス実行を目指したOSで，
産総研さんが開発し，現在はSourceForgeにArt-Linuxの項目があるようです．（[[Art-Linux&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=art-linux-welcome]]）

個人的にはすごくお勧めなのですが，理由は以下です．
-100μ秒程度の実時間実行が簡単に実現可能
-ユーザ空間でリアルタイムが実現できるのでRT-linuxのようにカーネルプロセスと分けて開発する必要がない
-上記のことから，普通のマルチスレッドで組みさえすればよく，面倒なプロセス間通信が必要がない
-タイマーボード等を用意する必要がない
-OS等ソフトウェアはタダのものを使える！(←重要！)

利点１に関しては，制御をする際には非常に重要です．
リアルタイム性は高速に周期実行ができるとか，そういうことではありません．
たとえ1sec周期であっても，windowsではリアルタイム実行が困難です．
それは，windowsだと次回の実行時間が1.000sec後かもしれないし，1.005sec後かもしれないからです．
これはいわゆるリアルタイム性が通常保証されないためです．
その当たりを保証するには，タイマーボード等を用いるか，高度なプログラミングが必要になります．

利点５は重要ですね．OSがオープンソースであり，ARTパッチも無料で使用可能です．
(ただし，ライセンスの詳細は確認してください)
お金のない研究室で，リアルタイム制御が必要ならば，
手持ちのPC＋インターフェース社等のAD/DA/DIOを使うことで
10万円前後での実時間制御システムの構築も可能でしょう．

逆に，欠点は以下です．
-Linuxベースのため，Windowsユーザーには壁が高く感じられる（^^;
-RT-linuxのような，二桁μ秒の割り込みは無理(経験的にはARTは100μ秒程度まで…)
-意外とハードウェア(PC)を選ぶ

上記の欠点があったとしても，制御を考える際には非常に有力な選択肢になりうると思います．
個人的には組み込みでもなければ，R    </description>
    <dc:date>2011-09-20T20:50:15+09:00</dc:date>
    <utime>1316519415</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/25.html">
    <title>How to ART-Linux</title>
    <link>https://w.atwiki.jp/matla/pages/25.html</link>
    <description>
      *ART-Linuxについて

ART-Linux(←が正しいと思いますが，入力の手間から時々大文字小文字が違ったらすいません^^;)はRTLinuxのように実時間でのプロセス実行を目指したOSで，
産総研さんが開発し，現在はSourceForgeにArt-Linuxの項目があるようです．（[[Art-Linux&gt;http://sourceforge.net/mailarchive/forum.php?forum_name=art-linux-welcome]]）

個人的にはすごくお勧めなのですが，理由は以下です．
-100μ秒程度の実時間実行が簡単に実現可能
-ユーザ空間でリアルタイムが実現できるのでRT-linuxのようにカーネルプロセスと分けて開発する必要がない
-上記のことから，普通のマルチスレッドで組みさえすればよく，面倒なプロセス間通信が必要がない
-タイマーボード等を用意する必要がない
-OS等ソフトウェアはタダのものを使える！(←重要！)

逆に，欠点は以下です．
-Linuxベースのため，Windowsユーザーには壁が高く感じられる（^^;
-RT-linuxのように，二桁μ秒の割り込みは無理(経験的にはARTは100μ秒程度まで…)
-意外とハードウェア(PC)を選ぶ

兎に角，ART-linuxは一度環境さえ構築できてしまえば，実時間制御に非常に有用です．
今回はその構築法について，備忘録がてら，書きたいと思います．

+[[ART-Linuxについて]]
+[[ART-Linuxのインストール]]
+[[ART-Linuxの便利ツール]]

本日の来訪者：&amp;counter(today)
昨日の来訪者：&amp;counter(yesterday)
来訪者累積：&amp;counter(total)

#comment(title_name=おなまえ,title_msg=こめんと,nsize=50,size=100,vsize=3,disableurl,below)    </description>
    <dc:date>2011-09-20T20:49:48+09:00</dc:date>
    <utime>1316519388</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/24.html">
    <title>CUDAがMATLABのツールボックスに！</title>
    <link>https://w.atwiki.jp/matla/pages/24.html</link>
    <description>
      これまで，なんとかMATLABでCUDAを使う方法を試し，いろいろ使ってみましたが，
なんとMATLABで正式対応しましたね！

結構古い情報なのでみなさん御存じかもしれませんが…
R2010bから，Parallel Computing Toolboxにて正式対応したようです．
初歩の計算は簡単にできるし，カーネルも自分で書けるし…で，
もう願ったりかなったり．（謎
ただし，私はいまもっているGPUがCUDA Cap v1.1なので使えない…
(Cuda cap v1.3以降のみサポート…orz)
GTX260以上じゃないとだめってことっすね．
以前450買ったら，画面がドライバ入れてもおかしくなり，
戻してしまったので画面バグりながらもリトライしてみようかなｗ

というわけで使ってみたらまた報告してみまっす！

本日の来訪者：&amp;counter(today)
昨日の来訪者：&amp;counter(yesterday)
来訪者累積：&amp;counter(total)

----
----
----
----    </description>
    <dc:date>2011-01-18T21:01:13+09:00</dc:date>
    <utime>1295352073</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/23.html">
    <title>MATLAB+CUDAv3.1について</title>
    <link>https://w.atwiki.jp/matla/pages/23.html</link>
    <description>
      CUDA-MATLAB連携について，CUDAの1.1aライブラリには，NvidiaからMATLAB用のプラグインが用意，配布されています．2.0まではこれでコンパイル＆実行できていましたが，どうも3.1だとこのままではできないっぽい･･･何がおかしいのでしょうか．
というわけで，管理人なりにまとめたMATLAB＋CUDA Toolkit　v3.1の方法です．
といってもMATLABのサイトに載っているわけですがｗ

・MATLABをインストールする
・Visual Studio 2008をインストールする(じゃなくてもいい？？)

・NvidiaのMATLABアクセラレーションに関するページ
http://www.nvidia.com/object/matlab_acceleration.html
から，•MathWorks White Paper on how to accelerate MATLAB using MEX and CUDA Functionsに飛ぶ
・コンタクトインフォーメーションを入力し，先に進むと，
Accelerating MATLAB Code Using GPUsと，cudaWhitePaper.zipが手に入る

このnvmexを使うことでv3.1のものもコンパイルできた．
**cudaWhitePaper内のサンプルのコンパイル方法

・MATLABにて，mex -setupからVisualStudioにコンパイラを切り替える
・cudaWhitePaper内にカレントを移動する．
・nvmex内のnvccCommandLine = [ ...のところの，
&#039; -I&#039; matlabroot &#039;/extern/include &#039; ...
を
&#039; -I&quot;&#039; matlabroot &#039;/extern/include&quot; &#039; ...
としてディレクトリ名を&quot;&quot;で括る

・MATLAB上からnvmex(&#039;nvPowerSeries.cu&#039;);とすればnvPowerSeries.mexw32ができる．
・benchPowerSeries.mで動作確認

以上でした．場所だけわかれば簡単でしたね．

本日の来訪者：&amp;counter(today)
昨日の来訪者：&amp;counter(yesterda    </description>
    <dc:date>2010-08-19T15:43:03+09:00</dc:date>
    <utime>1282200183</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/22.html">
    <title>ohpack_bbs_log</title>
    <link>https://w.atwiki.jp/matla/pages/22.html</link>
    <description>
      -書き込みテストです．左側に名前，右側にコメントをどうぞ． - 管理人 2010-04-16 23:13:31  
-早速いただきました！参考にさせていただきます． - 牧田（三重大） 2010-04-27 15:10:31  
--ありがとうございます！プログラムが書け次第随時機能追加予定ですので，またよろしくお願いします．ありましたら欲しい機能，バグ報告等お願いします！ - 管理人 2010-04-28 09:52:11  
-Ohpackに少し機能を追加しました． - 奥田(管理人) 2010-05-17 15:38:50  
-頂きます！論文も参考にさせていただいています．ありがとうございます． - 後藤（三重大） 2010-07-07 14:35:43  
--ありがとうございます！よろしければ使用後ご感想をお願いします． - 管理人 2010-07-08 15:08:51  
-Ohpack，活用させていただきます．ダウンロードページでは斜線表示されていたのですがV0.4は使えるのでしょうか？ - monkey 2011-02-24 12:13:24  
--現状のoh-packは開発中のもので，とてもリリースと呼べないためあのように表示していますｗバグ取りなど，改造の上でご使用頂く分には問題ありません．おかしい点などありましたら，書き込んでくださると助かります！ - 管理人 2011-03-24 14:00:33      </description>
    <dc:date>2011-03-24T14:00:32+09:00</dc:date>
    <utime>1300942832</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/20.html">
    <title>OHPack_コメントフォーム</title>
    <link>https://w.atwiki.jp/matla/pages/20.html</link>
    <description>
      OH-Pack メンテナンスページ

Okuda Hybrid-system Packageのメンテナンスページです．
良い場所がないため、ここに仮住まいします．
OH-Packに関するご意見，バグ報告，ご感想，機能追加希望等をお書き込みください．
OH-Packの配布はこちら
#ref(http://www9.atwiki.jp/matla?cmd=upload&amp;act=open&amp;pageid=20&amp;file=logo1111.gif,,http://www.suzlab.nuem.nagoya-u.ac.jp/~okuda/ohpack.html)

----
**ご意見投稿フォーム
コメントにチェックを付けて投稿すると，レスできます．
新規コメントを投稿する場合にはお名前の左のチェックをどうぞ．

#pcomment(title_name=名前,ohpack_bbs_log,reply)
　　　　　　　　　↑お名前　　　　　　　　　　　　　　　　　↑コメント
----
&amp;link_edit(text=編集,page=ohpack_bbs_log)















_    </description>
    <dc:date>2010-04-26T12:25:01+09:00</dc:date>
    <utime>1272252301</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/19.html">
    <title>MATLAB&amp;CUDAで快適計算ライフ3</title>
    <link>https://w.atwiki.jp/matla/pages/19.html</link>
    <description>
      好評だった備忘録(個人的に)の続編です．

CUDA-MATLAB連携の例です．
データをグラボに載せたり降ろしたりは結構なオーバーヘッドです．
たとえばグラボ上で A*B+C の行列演算をしたいけど，A,Cは固定で，
BだけMATLABで変更しつつ演算したい…そんな時は…

- static float *data_on_gpu = NULL;として，staticにポインタを確保する
- 上記がNULLなら，cudaMallocでデータをGPU上に確保する
- 関数から抜ける前にdata_on_gpuをfreeせず，そのままにしておく．
- mexAtExitを使って，クリーンナップ関数を登録しておく．複数回登録しないように防止せんといかん？
- クリーンナップ関数で，BをcudaFreeすべし!NULL設定を忘れずに．
- BがNULLじゃない(前もって登録されている)なら毎回転送しないといけないA,Cのデータだけ，cudaMemcpyして，計算実行！

ここでポイントなのは，確保したメモリはmxMallocで確保したわけじゃないし，MATLABのメモリでもないので，
mexMakeMemoryPersistentでpersistentに登録しなくてもよい事．

上記の場合，Bがすでに転送されていれば，もう転送しない，といった感じでできるでしょう．
でも，本当なら自分の好きなタイミングで転送できるといいので，MATLAB上で，
ptr = RegistB(B);
Res = Calc_ABC(A,ptr,C);
とかやりたい処ですが，MATLABにポインタ型を渡すやり方がわからないので，
受け側のCalc_ABCでは整数であろうptrの値の型を無視して強引にポインタにキャストしないといけない気がします…

かといって，二つのスクリプトでextern等でアクセスできるようにしてもどのみち汎用性がないし…
結局
Calc_ABC(NULL,B,NULL);//A,CがNULLだとBを登録
Res = Calc_ABC(A,NULL,C);//BがNULLだと登録したBを使う
としていますが…

うまくやる方法はないんでしょうかね．
グラボ上のメモリを自分で管理するしかしょうがないですね．ラッパを作ってみる    </description>
    <dc:date>2009-08-09T23:30:10+09:00</dc:date>
    <utime>1249828210</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/matla/pages/18.html">
    <title>MATLAB&amp;CUDAで快適計算ライフ2</title>
    <link>https://w.atwiki.jp/matla/pages/18.html</link>
    <description>
      好評だった備忘録(個人的に)の続編です．

CUDA-MATLAB連携の例です．以下に，少し大きめなベクトルx行列の例を示します．

ここで，ファイルをアップします．
１．MATLABのテストスクリプト&amp;ref(test_main.m)
２．自作版ベクトルx行列の.cuファイル &amp;ref(cuda_test3.cu)
と，コンパイル後のmexファイル&amp;ref(cuda_test3.mexw32)
３．CUDA-SDK付属のScalarProdを改造した，ベクトルx行列の.cuファイル&amp;ref(cuda_test4.cu)とコンパイル後のmexファイル&amp;ref(cuda_test4.mexw32)

(注1)これらのファイルを使用してなんかおかしいことになっても責任はとれません．自己責任でバグがないように直してからお使いください．直せない場合は使わないでください．とくに，cuda_test3はサイズチェックや行列の向きのチェックをしていません．例題以外のサイズ行列をかけ合わせたい等の場合，バグりますので気を付けてください．

(注2)SDKの内積計算では，向きが平行(横向きx横向き)と考えていますので，かける順番や転置が適当にかわっていますので注意ください．

結果例：
[1x16384のベクトル]*[16384x1024の行列]の計算で試してみました． 
69msec @ Core2Duo2.4GHz(MATLAB使用) 
33msec @ Core2Duo4.0GHz(MATLAB使用) 

61msec @ 8600GT(kernel programは自作) 
35msec @ 9800GTX+(kernel programは自作) 

50msec @ 8600GT(SDKのScalar Product改) 
28msec @ 9800GTX+(SDKのScalar Product改) 

ううむ．自分で作ると速度でないですね．コツがわかりません…
そしてなぜか自作関数で大きなサイズをしますと答えが合いません．なんか間違ってますね…

本日の来訪者：&amp;counter(today)
昨日の来訪者：&amp;counter(yesterday)
累積来訪者：&amp;counter(total)

#comment(    </description>
    <dc:date>2009-08-09T22:38:02+09:00</dc:date>
    <utime>1249825082</utime>
  </item>
  </rdf:RDF>
