高精度演算(多倍長)をやりたいのでJuliaをはじめてみる,動機・導入・実行まで (on Fedora 29)
Motivation
いつもと全然違う,とある事の勉強をしようと思ったけど,C++で書くのやる気しないなーと思って,
ずっとやろうと思っていたScilabかOctaveでやろうかと思って調べたら,Juliaが予想以上に私のやりたいことをやれそうだった.
Juliaって?
パッと調べて,記憶に残ってるのは,
- JuliaはMITとかの人が作って,速くて書きやすいのが売りらしい.
- JITなので初回実行時にコンパイルが走るらしい.
- BLASやLAPACKがバックエンドに使われてて数値計算やりやすいらしい
- プログラムが書きやすい(構文が賢い)ようだ
- マルチスレッドは簡単にかけそうだ.マルチプロセスは調べてない
で,私はどこに惹かれたか
別に多くの場合においてC++で困らないし,Pythonとか書いててもBLASとかLAPACK使うから結局Cのライブラリを呼ぶハメになるので, BLASが言語仕様に入ってても,別にBLASの関数とか大体使うのは覚えてるからいらねーや.と思っていたら,予想以上に欲しいものが言語的に採用されていた.
疑似4倍精度(Double-Double)を作るパッケージ?を作ってくれている人がいる GitHub - JuliaMath/DoubleDouble.jl: Extended precision arithmetic for Julia (deprecated)
多倍長型がMPFRベースでBigFloat型として使える 整数と浮動小数点数 · The Julia Language
反復解法のパッケージもなんかあるっぽい(AMGあるのか.よく作ったな) Home · IterativeSolvers.jl
Sparse matrix型もあるっぽい Sparse Arrays · The Julia Language
と,いうことで,高精度演算をやったときに,他の精度との精度比較するのに使いやすかったりしないかな?と思ってはじめることする.
気になっていること (別に調べて情報があるか/ないかをキチンと確認してない疑問)
初志を忘れてはいけないので,なぜ始めたのを記録しておく.
動的型付けのように読める (ただし型を明示的に指定もできる)が,BigFloat型にバックエンドのBLAS / LAPACKは対応しているのか? ** BLAS / LAPACKは無理でも,特に型指定のないライブラリなら多倍長で実行してくれちゃったりするのか?(しかも速く!?)
マルチスレッドはどこまで便利か?速いか
プロファイラ周り.時間計測とかベンチマークの楽さ
Sparseの扱い(SparseをLAPACKに突っ込むと?とか)と,Sparse matrix formatの種類,スピード.
Install
Juliaの環境を構築するのは簡単. 環境はConohaのVPS上のFedora29
- 落としてくる (現在のStableはjulia-1.1.0の模様)
Generic Linux Binaries for x86というのを落とせばいい Julia Downloads
tar xzvf ....で解答する
julia-1.1.0/binにPATHを通す
おわり.簡単だった.
なんか動かす
正しくPATHが遠てればjuliaコマンドを打つと対話画面が出てくるので
println("ごまちゃんかわいい")
とかやると,ゴマちゃんが可愛いことをJuliaが教えてくれる
今日はここまで