MyEnigmaスマートフォン用の表示で見るMyEnigmaとあるエンジニアのブログです。高計算パフォーマンスなシステムを構築したい時にやはりコンパイルできたらいいなと思ってしまいます。実行するたびにコンパイルする必要があるため、その分、実行が遅くなりがちです。今回はJuliaをコンパイルし、実行する手法を紹介したいと思います。Juliaにおけるコンパイル下記の記事をベースにJuliaにおけるコンパイルについて概要を説明したいと思います。functionを使わないJuliaのコードであれば静的にコンパイルすることができます。静的にコンパイルし易い形で構成されています。特別なトリック無しで静的コンパイルが可能であるということです。test.jl続いて、下記のコマンドでinterfaceファイルからオブジェクトファイルを生成できます。静的コンパイルが可能になります。公式ライブラリが公開されています。下記のようにコンパイルしたいコード(下記の場合はhello.jl)を指定するだけです。hello.jlうまくいくと、builddirというディレクトリができて、その中に実行ファイルや、オブジェクトファイル、ダイナミックライブラリのファイルなどが生成されます。事前にPkg.add("UnicodePlots")でインストールする必要があります。下記のような実行結果が表示されるはずです。以前紹介したJuliaの最適化ライブラリであるJuMPを使用した、ナップサック問題も最適化問題で簡単なベンチマークをとってみたいと思います。ナップザック問題の概要については下記の記事を参照ください。通常の方法でJuliaで実行する方法と、juliacでコンパイルして実行する方法を比較してみました。github.com下記が通常のjuliaコマンドで実行した結果です。今回はbashのtimeをjuliaコマンドの前につけて、JITコンパイルを含めた計算時間計測しています。下記のターミナルのスクリーンショットを見るとわかるとおり、プログラム起動から終了まで、通常のjuliaコマンドでは11秒かかっているのがわかります。下記の結果はjuliacでコンパイルした実行ファイルを実行した場合の結果です。非常に高速に実行できていることがわかります。自分がハマった注意点をまとめておきます。下記のコードのライブラリファイル名のhelloの部分をファイル名に変更する必要があります。github.com(PRを出すべきか。)PyCallが含まれたコードはコンパイルできない当たり前ですが、PyCallで呼ばれたコードはJuliaのコードではないので、コンパイルすることができません。乗り換えるチャンスかもしれません。JuMPのコードをコンパイルする時は、配列のインデックスの始まりは1にするもし、JuMPのコードをコンパイルしたい場合、マクロ内の配列のインデックスは、1始まりにする必要があります。context.)というようなエラーが出てコンパイルできません。インデックスを1始まりにすると治ります。実行するとセグフォで落ちてしまいます。コードの中で、@NLconstraintが入っているとだめなようです。Supportersもしこの記事が参考になり、ブログをサポートしたいと思われた方は、こちらからよろしくお願いします。はてなブログProとあるエンジニアのブログです。Page月別アーカイブスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。