2014/05/28(水)ubuntuインストール (TeX関連)

ubuntuのTeX関連のインストールメモ。

10.04と違って、ちゃんとUTF8でtexソースを書くようになった。

sudo apt-get install texlive-lang-cjk
sudo apt-get install texlive-fonts-recommended
sudo apt-get install texlive-fonts-extra
sudo apt-get install xdvik-ja
sudo apt-get install dvipsk-ja
sudo apt-get install gv

pdfを見るのに、acroreadはパッケージになく、evinceかfirefoxの内蔵ビューアを使うことにする。ところが、明朝になるべきところがゴシックになってしまう問題あり。そこで、 /etc/fonts/local.conf を
<fontconfig>
<match target="pattern">
    <test qual="any" name="family">
        <string>Ryumin</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
        <string>IPAexMincho</string>
    </edit>
</match>
<match target="pattern">
    <test qual="any" name="family">
        <string>GothicBBB Medium Identity H</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
        <string>IPAexGothic</string>
    </edit>
</match>
</fontconfig>
の内容で作成。

更に、文書作成関連として、

sudo apt-get install nkf
sudo apt-get install gnuplot
sudo apt-get install gnuplot-x11
sudo apt-get install gnuplot-doc
sudo apt-get install tgif
sudo apt-get install gimp
sudo apt-get install inkscape
sudo apt-get install mimetex
sudo apt-get install latexdiff

あたりを。

2014/05/28(水)ubuntu 14.04LTSインストール

普段使いのPCはWindowsマシンですが、Windowsは各種ドライバとvmwareを安定して動かすためだけの
存在と思っていて、普段は仮想マシンのubuntuで生活しています。
こうすると、PCを買い替えたときも仮想マシンだけのコピーで済むので環境の移行が圧倒的に楽です。

しかし、楽をしすぎてubuntuは10.04LTSをずっと使い続けていました。10.04は2013年3月でサポートが
切れていて、一年間サポート切れの状態で使っていたことになります。
4月に14.04LTSが出たので、思い切って環境を作り直すことにしました。今度の
LTS (Long Time Support) は5年間らしいので、しばらく耐えられます。

以下、だらだらとインストールメモ。

https://www.ubuntulinux.jp/
から、Ubuntu 14.04 LTS日本語 Remix (4月28日リリース)の64bit版をダウンロード。
vmwareで、新規仮想マシン、標準、後でOSをインストール。
インストールが終わったら、vmware toolsのインストールをクリック。
CDがマウントされてファイルブラウザが開くので、homeにコピーして展開
sudo ./vmware-install.pl
質問には基本的にreturnを押すだけ。
共有フォルダを有効にし、/mnt/hgfs に共有フォルダが見えているのを確認。

2014/05/27(火)HaswellとFMA

常用のノートPCをレッツノートのSX1からSX3にしました。
ついでにvmwareを最新にし、vmwareの中で飼ってるubuntuを14.04に。

CPUがSandyBridgeからHaswellになったので、ちょっとFMAで遊んでみました。
Haswellの新機能の一つに、FMA命令の追加があります。
FMA = Fused Multiply Add です。乗算と加算のフュージョンですね。
a * b + cをいっぺんに計算してくれる機能で、内積計算なんかが高速になりそうですが、
精度保証的には「a*bをいったん無誤差で計算してからcを加算し、最後に一回だけ丸める」という
動作が重要です。これを使うとtwoproductが非常に簡単に書けたりします。

で、ちょっと動くかどうか試してみました。
#include <stdio.h>
#include <immintrin.h>

double fma(double a, double b, double c)
{
        double d;
        __m128d va = _mm_set_sd(a);
        __m128d vb = _mm_set_sd(b);
        __m128d vc = _mm_set_sd(c);
        __m128d vd = _mm_fmadd_sd(va, vb, vc);
        _mm_store_sd(&d, vd);
        return d;
}

int main()
{
        printf("%f\n", fma(1., 2., 3.));
}
こんな感じで動きました。gccだと-mfmaとか-march=nativeとか必要。VCは特に要らない?
AVXなので4並列で実行する能力がありますが、このコードは1つだけ計算してます。
1つだけ計算するのに128bitレジスタを使わなきゃいけないのはちょっと違和感?

twoproductに用いたときの性能評価とかはこれからぼちぼちやっていきましょう。

2014/04/16(水)kv-0.4.3

というわけで、ちょっと間が空いたけどkv-0.4.3としました。
CardanoとFerrariを書いたときに気付いた複素数やdd周りの問題点を修正しています。
また、-DKV_NOHWROUNDをつけたときにハード的な丸めモードの変更を使わずに方向付き丸めのエミュレートで区間演算を行う機能が、ddの場合でも有効になりました。あまりスピードは出ないけど、IEEE754Std.に従う全てのCPUで動かせるようになりました。

2014/03/30(日)Cardanoの公式とFerrariの公式

3次方程式の解法であるCardanoの公式、4次方程式の解法であるFerrariの公式、
数学の歴史で大変有名だけど、中身をよく吟味したことは無かった。
ちょっとしたきっかけで、これらをプログラムする機会があったのだが、
案外ややこしくて苦労した。Cardanoでは、複素数の3乗根を取る部分で3種類の解のうち
適切な1つを選ばないといけない部分があるのだが、こういうところがきちんと
書いてない文献が多かった。Ferrariでも平方根で同じような箇所がある。

最初はmathematica先生にSolve[a4 x^4 + a3 x^3 + a2 x^2 + a1 x + a0 = 0, x]とか投げて
出てきた式を適当に簡約化してこんなんでいいか、なんてやってたが、結果的にそれじゃ
使い物にならなかった。

CardanoやFerrariでは反復によらず直接解を計算するので、全計算過程を区間演算化すれば
容易に精度保証付きの解が得られる。と思って書いてみたが、ギリギリの計算が要求されて
ライブラリの問題点がいろいろ洗い出される結果に。
  • atan2([0, 1e-10], [-1, 1])のような場合に結果の区間幅が大きくなってしまう。
  • expに無限大に近いが無限大ではない数を入れたときの結果がおかしい (引数をfloorで丸めたものがintの範囲を超える場合)
  • 複素数の絶対値や平方根で(特に原点を含むような引数で)エラーになることがある。
  • ddの平方根に0を入れるとnanになる(newton法の失敗)
  • exp(interval<dd>(-1e308)*2)のような計算で無限ループに陥る
などなど。
複素数とddは実戦投入の経験が少なかったので、ちょうどいい訓練になった。
複素数の0に対してexp(log(0))がちゃんと0(あるいは0を含む微小区間)を返さなければ
うまく動かないようなシチュエーションも出てきて、intlabすらここはきちんと動かなかった。

最終的にはなんとか動くようになったのだが、CardanoはまだマシだがFerrariは素晴らしく
精度が出ない。doubleで平均的には7,8桁くらいか。
計算時間もかかるし、これらの方法が実際の数値計算法としてあまり使われない理由がよく分かった。
何でもやってみるものだなあ。

おかげでライブラリも結構アップデートしたので、ファイルの整理が出来たらversion upしよう。
OK キャンセル 確認 その他