留学・音ゲー・研究備忘録

heine98の音ゲー・研究・留学の記録

Julia v1.0 覚え書き

v0.6.4を使っていたのだが、大幅なコード書き直しになったためにv1.0を入れてみたところ、結構問題が生じた。v0.7を経由しなかった部分からくる問題もあるようだが、とりあえず以下のことがv1.0に変更した際に起きたこと。かなりマニアック。

 

1.パッケージはパッケージ用のrepl?かなんかでやる。

今まではPkg.add("hoge")で追加したりしていたが、今回から(v0.7から?)変わっている。というか昔のstack overflowでREQUIREとかのファイルを旧ヴァージョンから移動してPkg.update()でなんとかなると書いてあったので試したのだがうまくいかない。仕方なく、Documentationにある方法で手動で入れ直したので書いておく(英語サイト)

Pkg · The Julia Language

要は、Juliaを実行後に"]"を押してパッケージモード的なところに入れば良い。その後、add hogehogeパッケージを導入できる。

インスコした直後なら、先に3.を見て、どうやったらうまく最新バージョンが立ち上がるか見てほしい(まあMacならアプリケーションからダブルクリックで立ち上がるけど)

自分用:現状入れてたパッケージは(この他にも導入中に追加で入れられたものもあるが、とりあえずこれさえ入れれば大丈夫なはず)

Distributions
Atom
NLsolve
NLopt
Optim
DataStructures
PyPlot
Roots
DataFrames
CSV

 

 

 

2.Parallel computingでかなりの変更が生じている。

これは経済学のコンテクストで語るしかないのだが、Jesus&Davidのペーパーを見てみよう。

https://www.sas.upenn.edu/~jesusfv/Guide_Parallel.pdf

github:

github.com

さて、書いている時点ではコードにめぼしい変更がなされていないので、以下の変更が必要だとわかった部分である。(https://docs.julialang.org/en/v1/manual/parallel-computing/index.html

JuliaのParallelizationで@parallelのコードだが(Julia_main_Paralell.jl)、まず最初にv1.0ではParalleliztionをするにあたって明示的にDistributedモデュールとSharedArraysモデュールを宣言しなければならない。

したがって、最初の何行かで

 

using Distributed

@everywhere using SharedArrays

 

が必要になる。

更にクソな変更が、47行目あたりでSharedArrayを宣言したときのことである

 

tempV = SharedArray{Float64}(ne*nx, init = tempV -> tempV[Base.localindexes(tempV)] = myid())

 

このライン、まずv1.0では少なくとも”Base.”が不要になった。更に"localindexes"が"localindices"に変更されている。加えて、これはSharedArrayの問題ではないのだが、"=myid()"の代入部分で"."を加える必要がある。したがって。v1.0では

 

tempV = SharedArray{Float64}(ne*nx, init = tempV -> tempV[localindices(tempV)] .= myid())

 

が正しい形となる。

だが、これでも回らない。ここからはよくわかっていないのだが、

 

MethodError: Cannot `convert` an object of type RemoteException to an object of type Array{Int64,1}

 

が出てくる。つまりこれはこの行のステートメント実行中に背後でconvertできない問題が生じているわけだが、ここからはパッケージの中身の問題なので俺には何もできない。

そういう意味で、現状ではv1.0でParallel Computingなコードは核のh避けたほうが良さそうだ。。

 

3.Atomでうまくv1.0を動かす。

(Introducing Julia/Getting started - Wikibooks, open books for an open world)

Juliaを公式のバイナリ?経由でインストールした場合、アップデートではなく違うバージョンが独立にインストールされることになる。

なんかHomebrewのパッケージ管理ソフトかなんかを使えばまた違うらしいのだが、とにかくわからんので今まで使ったことはない。

まあ問題は独立して存在する2つのバージョンがあってもいいのだが、AtomにJunoだかなんかを入れて統合環境?的なのでJuliaを使ってるので、Atom内のコンソールでJuliaを立ち上げたときに昔のJuliaが立ち上がり、最新のが立ち上がらない。これに関しての対処法は

(1)まずターミナルなどでjuliaと打って起動させる場合のヴァージョンを変える

Macならターミナルで以下を実行(v1.0の場合、それ以外は1.0を適宜変更)

sudo ln -fs "/Applications/Julia-1.0.app/Contents/Resources/julia/bin/julia" /usr/local/bin/julia

これでデフォルトのjuliaがどのバージョンになるか決まる。

(2)Atom内のJulia>SettingsでJulia Pathをデフォルトにしておく

つまり過去にここの部分を過去にいじったことがなければ、特にやることはない。

 

これでAtomからJuliaの最新バージョンが立ち上げられる。場合によってはJunoパッケージが必要になるっぽいので、まず先にターミナルでJuliaを実行し、パッケージREPL?(素人なのでここらへんの細かい用語わからん)からadd Junoを実行しておく。