2016年10月28日金曜日

LaTeXエディタ TeXworks の情報

LaTeX用のエディタ
  • TeXworks/設定
    • ubuntuの場合:
      • スペルチェッカー辞書は.
      • sudo apt-get install myspell-en-us
      • でインストールしたら,texworksの編集→設定で指定できる.その後は,編集→スペルチェックで起動できる.
その他の情報

2016年8月9日火曜日

CUDA は float が速い!

最近,暇を見つけてはCUDAプログラミングに没頭しているのですが,
どうやらGPUの浮動小数点はfloatがデフォルトらしい,

というのをネットで見つけて,実際やってみました.

浮動小数点を double にした場合:
real 147m13.761s
user 147m0.970s
sys 0m5.916s

浮動小数点を float にした場合:
real 40m51.620s
user 40m43.707s
sys 0m5.255s

というわけで,3.6倍かせげました.こんな違うんだ・・・

2016年7月13日水曜日

GPU ライブラリ “ArrayFire” (Ubuntu 14.04)

C/C++ で力学シミュレータを作るときに,逆行列を掛けるのが面倒なので,
C++ 用のベクトル・行列ライブラリを探してみました.

文法の美しさでは Eigen がよかった.すごいかっちょいいソースが書けます.ヘッダーファイルだけというのもお手軽.

http://eigen.tuxfamily.org/

でも,CUDA で並列計算したいときは ArrayFire がいい感じ.ソースファイルは共通のまま,g++ のリンカーオプションを取り替えるだけで,CPU用とGPU用をコンパイルできます.

http://arrayfire.org/


Ubuntu 14.04 へのインストール


1.ダウンロード
http://arrayfire.com/download/

2.準備
※本家の説明ではパッケージ名 libglfw3 が誤植で glfw3 になってた.
sudo apt-get install libfreeimage-dev libatlas3gf-base libfftw3-dev cmake
sudo apt-add-repository ppa:keithw/glfw3
sudo apt-get update
sudo apt-get install libglfw3

3.インストール
sudo sh ArrayFire-*_Linux_x86_64.sh --exclude-subdir --prefix=/usr/local

4.コンパイル

ソースコードの例:

#include <arrayfire.h>
// Generate random data, sum and print the result.
int main(void)
{
    // Generate 10,000 random values
    af::array a = af::randu(10000);
    // Sum the values and copy the result to the CPU:
    double sum = af::sum<float>(a);
    printf("sum: %g\n", sum);
    return 0;
}


Makefileの例: ※$(CC)の前は,スペースじゃなくてタブにします.

#-lafcpu, -lafcuda, or -laf for the CPU, CUDA, and unified backends
LIBS=-lafcpu
LIB_PATHS=-L/usr/local/lib
INCLUDES=-I/usr/local/include
CC=g++ $(COMPILER_OPTIONS)
COMPILER_OPTIONS=-std=c++11 -g
all: main.cpp Makefile
    $(CC) main.cpp -o test $(INCLUDES) $(LIBS) $(LIB_PATHS)

2015年4月8日水曜日

攻撃と防御3 (可制御性?)


攻撃と防御2 では,
  •  平衡維持体Aの攻撃とは,システムの状態を,Aが望む平衡状態に移行させるためにAが発生する内力
なんて定義してみましたが,これって制御理論の「可制御性」と,ほとんど同義に見えます.

「小郷・美多著,システム制御入門,実教出版,2002」によると,線形時不変システム:
$$
\dot{\boldsymbol x}=A{\boldsymbol x}+B{\boldsymbol u}\tag{*}
$$
が可制御であるとは,(意訳してます)
  • 初期状態${\boldsymbol x}(0)$と望む状態${\boldsymbol x}_s$のどんな組み合わせに対しても,
  • 適当な制御入力${\boldsymbol u}(t)$が作れて,有限時間内に${\boldsymbol x}(s)={\boldsymbol x}_s$とできること.
です.

こうやって並べてみると面白いですね.なんつーか,可制御性って神?

だって,平衡維持体の連結システムが片側の制御入力に関して可制御ならば,適当な${\boldsymbol u}(t)$が作れちゃって,必ず攻撃に成功しちゃいます.

こういう一方的な状況は格闘ぽくないですね.もっと戦って欲しい!

ようするに可制御な制御系が構成できてしまうと,格闘学からは遠ざかるのかな.

可制御性を阻むものってなんでしょう?

防御ですよね.あはは,いいこと思いついた.
  • 仮説:片側の可制御入力を,他方が無効化(防御)すると格闘が起きる?
ほんとかな. なにやら分からなくなってきました.(微分ゲーム?)

つづく

桜に雪が・・・

桜咲いてるのに雪が降りました.すげーな.こんなの記憶にないな.
貴重な体験なので写真貼っときます.






2015年2月4日水曜日

攻撃と防御2

攻撃とは何か考えてみたいと思います.大辞林では,
  • 戦争やスポーツの試合などで,相手を攻めること。
だそうです.「攻める」も引いてみると,
  • 敵側に攻撃を加える。
だそうで,元に戻っちゃいました(笑)

自前で考えるしかなさそうです.取っ掛かりとして,数理格闘学における対戦の定義をヒントにしたいと思います.こんなんでした.


左上の$\omega_1$を何もしてない状態とします.で,赤が「攻撃」を仕掛けるとします.
まだ「攻撃」が未定義ですが,その目的は人為的に規定できます. 我々の経験上,
  • 何もしなけりゃ $\omega_1$ (引き分け)を保つシステムの状態を, $\omega_2$か$\omega_3$(勝利)に移行させること
とするのが自然だとは思いませぬか? これを定義にしちゃいましょう.すなわち,
  • 平衡維持体Aの攻撃とは,システムの状態を,Aが望む平衡状態に移行させるためにAが発生する内力
なんて申すのはいかがでござろう?(ふざけんな笑)
ちなみに,「内力」にしたのは,外力だと助太刀になっちゃうからです.

ここまで来ると防御は簡単で,
  • Bの防御とは,Aの攻撃を無効化するためにBが発生する内力
でいいんではないでしょうか.

けど長いっすね.まいっか

2015年1月26日月曜日

攻撃と防御1

(入試やら何やらかんやら何やらで間が開いてしまった)

さて(自称)数理格闘学では,「対戦」を,
  • 2者が相互作用して勝敗を決すること
と解釈し,平衡維持体のペアの状態を,「勝敗」と関連づけました.

でも,これだけではあんまり対戦ぽくないですね.

素朴な語感からすると,今まさに争っている感じが欲しいです.
そこを考えないと格闘学した気になれません.
というわけで,
  • 対戦の過程ってなに?
という問題を考えねば・・・ちょっと視点を変えてみましょう.

対戦スポーツの練習で,勝敗自体は練習しないですよね.
もちろん,練習中に勝敗を決する場面はあると思いますが,
勝敗の結果自体は目的じゃないように思われます.

ふつう練習では,勝敗に至るプロセスのほうを反復するはずです.
典型的には,「攻撃」と「防御」という2種類のプロセスを反復練習します.

そんなこんなで,
  • 「攻撃」や「防御」の定式化?
なんて考えだすと面白そうですね.考えているうちに眠くなってきました.

つづく