ソシャゲの話
FGOも新章まであと2日くらいか?まあそれ出てから今週のマスターミッションやります。あとは、どんな鯖が出てくるのか。。。 てかこちらの時間で水曜日朝に生放送して、そのまま実装だと思うんだけど、水曜日教員と昼から面談入ってるから午後までプレーできそうにないな。。。
ガルパは、26あたりのクリアも曲によっては余裕から、これ無理っぽそーってのまで。あと、結構その日の感覚による。あと爪は切ったほうがいい。このへんは弐寺のときと同じ。
プリコネコラボ見据えてシャドバ(チュートリアルだけやってアンスコした)を再度始めた。カードゲーム苦手なんだよな。何もわからん。とりあえず考え方みたいなのうを掴むしかない。
プリコネ、やっとダンジョンExtreme Iのボス倒してスタミナ生産の家具が増えた。まあこのへんは最近2倍とかでいつ行くかタイミングを見失ってたので、もう少し早くやってても良かったかもしれない。あとは最後面倒くさくなってサポ借りた。 あとはPLv120超えた(話したっけ)、R13に向け準備中、昨日から復刻クリスマス来てるけどVHボス2凸できた。ユカリさまさまですわ。 ノマも26−14を超えたので、あと3面ですな。。。これはR13がどこまで早く整えられるかによる。今泥2倍だけど。ただイベント重なってるからどこまでノマしてどこまでイベ回るか。。。メモピに気をつけつつ周る予定。
Numba使うとSegfault出るが?+Julia vs Python
表題の件なんですが、どうもNumbaのアップデートすれば大丈夫っぽいです。ネット見る限るPython3.4.Xあたりからの問題で、発生当時numba0.44.1、Python3.7.5でした。 アップデートはpipつかってるなら
pip install -U numba
でした。これいちいち手動でやんの。。。?
なんでこんなこと気づいたかというと現実逃避にPythonでRBCのVFI書いてたんですね。本当のVFI(pol funとしてgrid上しか選ばない=非線形ソルバー使わない、Concavity使わない)
で、これ条件同じにしてもJuliaよりPython+Numbaのほうが早くね…? 100グリッド1e-6精度で
Python: 8.55s (ただしfor loop
Python+Numba: 0.62s 1.27s
Julia: 0.23s 1.80s
とかですね。全部10iterごとにmax diffの表示させてます、Juliaで真面目には書いてないけど、そこまで変なことしてないはずなんだが。なお@inbounds使った上で2回め以降の結果です。
んーでも、他の超単純な常微分方程式の数値解を求める、みたいなネットに転がってるものをコピペしてみると、普通にjulia 0.53s vs Python+Numba 1.90sとかですね。まあ、今の所あんまり細かくPythonでコード書けないし、numba使うとエラーが全然不親切だし、ターミナルからあんまり回す気にならんし juliaみたいにインタラクティブモードに入ってどうこうするってことができなくて、常にターミナルからファイル実行しなきゃいけないのは不便ですね。もしかしてちゃんとやり方あるのかな?juliaは関数で全部処理するから使い回しも簡単なんだけど、そこらへんPythonだとmoduleなんですかね。あんましわからんのよね。Juliaにもモジュールあるけどまだちゃんと使いこなせてない。
(追記:普通に無駄なArray一個消したらめちゃ早くなったし、Juliaのほうが早くなった。それでもjuliaでAllocationが少し大きすぎる気がするのでおそらく不要な部分あり。
で、まあもうこんなことで時間使うの無駄だなって感じてきたから、以下だと信じてPythonは除外する。 まず、Numbaを使えばJuliaより早くなる場面は多い。ただし制約としてNumpyの関数を明示的に使う必要があり、最初からそうしておかないと、普通のコードからNumbaように書き換える二度手間が発生する。例えば絶対値のabsは標準の関数として存在するけど、Numbaを使うならnp.absoluteと使わないと警告が出る。
また、上でも述べたように、Numbaのエラーは何なのか、少なくとも慣れてない俺にはわかりにくい。 更に、まずNumbaで回す前になしで回るか確認して、そこからNumbaを追加して計算するということになるが、そのNumbaなしの計算が苦痛。
なので、最初に投資したJuliaで今後も行くことになるだろう。まあ趣味の範囲でPython数値計算勉強するのはいいと思うけど、今から研究にPythonを使うかっていうのは選択肢から当分除外する)
ところで、古い情報だと@autojitとか使うような書き方されてるけど、もうdeplicatedらしいので、
from numba import jit @jit
でいいっぽいですよ。
冬休みですね
発表は終わったので、学生特権の長い冬休み、年末年始は日本へ帰ります。
まあそれはそれでリアルの話なのでいいのですが、ソシャゲそろそろ色々起こるので頑張らないとですね。多分一番頑張らなきゃいけないのは研究なんですけど。
プリコネはストーリーの自力開放を目指してて26-14までなんとか来たんですが、多分間に合わないかな。少しレベル上げるかランク上げないと、現状ではサポ借りても厳し目だったので。ランク上げるとなると16日からの泥2倍まではあんまり回りたくないという。レベルだけでなんとかなるかなー。ちなみにPLv120のキャラLv117前後。 そして王都終末決戦が特定キャラのみという話なのも気がかりですが。。。まあマナ無しでサポ借りられるっぽいし、そこに期待か。 課金してまでで手に入れたクリチカをいつになったら育てられるのか。というか現状魔法パ組めるほど魔法形育ってないけど。
あとはFGOも5章が来るので、これはかなり楽しみですね。ストーリーかイベントがない限りあんまりやる気線。ってか今回のボックス35箱分しか回れなかった。 低レアキャラは当分育てられそうにないです。てかボックス10箱までしか開けてないな。
バンドリはExトライ目標があんまり進まない。フルコン取れって言われると逆に緊張して落とすんだよな。
ていうか、発表終わったから朝ゆっくり寝たいのに、7時位に自然に目が冷めてそこからソシャゲ周回とネトサしてると寝られなくなっちゃう。これよくない。 最近目がしょぼしょぼするなとか、肩こりからの頭痛がよく起きるんだけど、これ多分普通に寝不足な気がする。 今日は金曜日だし、早めに寝て明日の朝hゆっくりしたいなぁ。。。
諸々
昔から怒られることや避難されることに人一倍敏感で、そういうシチュエーションがとても苦手である。部活でクソ怒られたからかなと思ったけど、小学校の頃から怒られないようにするための努力してたな。 で、研究ってのは絶対に批判されるものであり、それがひいては分野の発展につながっていくとは頭でわかってるのですが、プレゼンで教員からくるツッコミが今から怖い。特に久しぶりに自分の研究だから、全部自分の問題になるわけで。 もちろん人格を攻撃されてるわけじゃないんだから、それから研究のブラッシュアップにつなげていけばいいのだけれど。嫌だなあ。あと2日プレゼンの練習しなきゃ。
メールボックス確認したら夏の間のペーパーに対して2nd advisorからっぽいフィードバックが入ってたけど、何書いてあるか読めない。てか、これ本当に2ndなのか、もしかしたら1st advisorかもしれんけど。
あと、先日何人かと話してリサーチクエッションに対する姿勢の話になったとき、ある人はミクロデータに基づかなきゃだめでしょという話になり、Empiricalやりたくないマンとしては辛い。ただ、別にデータにもtづかなくてもnormativeな研究はある程度マクロのモーメントと合っていれば、contributionは別のところにあるのだからいいと思うなというのが私の立場だが。
プリコネが23−13まで来た。ノマ2倍期間でなんとか主要6人をR12装備5つまで強化できたし、あとは特別イベントまでに自力でストーリー開放できるかって感じ。別に今開放できるのは知ってるけど、どうせなら自力で行けるとこまで行きたいじゃん。
ガルパ、Extremeの25で落ちるものもアレば26でもクリアできるのもあり、詐称のレベルの話になってきた気がする。やっぱお酒飲まなければ音ゲーやるチャンスが生まれていいですね。 ただ弐寺のアプリは昨日リリースということでやってみたけど、オープニングからBGMがうまく流れなかったので、Oneplus7Tだとちょっとうまく行かないのかも?
Julia 並列化
マルチスレッドとかなんもわかってないけど。コアが物理でスレッドが仮想(コア内に2こくらいある)でおk? とにかくとりあえずメモ。今後追加していく。現状、Julia v1.3である。 なお以下の内容は
Announcing composable multi-threaded parallelism in Julia
をかいつまんだもの。
スレッドの数を設定
Julia起動前にターミナルで
$ export JULIA_NUM_THREADS=n
を実行。ただしnは任意の整数。もちろんコンピューターが持ってるスレッド以上の数を指定しても以下では無視されるけど。
正しく設定できてるか確認
上記のセットが終わればJuliaを起動して、
Threads.nthreads() # いくつスレッドが使われてるか Threads.threadid() # 現在のスレッドのID # またはタスク振り分けを画面に表示させてみる Threads.@threads for i = 1:10 println("i = $i on thread $(Threads.threadid())") end
テスト
並列化の恩恵について以下の関数で見てみる。関数自体は1次元配列vを受け取ったときに中身をソートするものだけど、vがある一定サイズの場合、並列化を行う。 最初に入れたvを半分に分割し、1~size(n)/2までの方を並列化、一定サイズになるまではそこに再帰的に関数を適用している。
import Base.Threads.@spawn # sort the elements of `v` in place, from indices `lo` to `hi` inclusive function psort!(v, lo::Int=1, hi::Int=length(v)) if lo >= hi # 1 or 0 elements; nothing to do return v end if hi - lo < 100000 # below some cutoff, run in serial sort!(view(v, lo:hi), alg = MergeSort) return v end mid = (lo+hi)>>>1 # find the midpoint half = @spawn psort!(v, lo, mid) # task to sort the lower half; will run psort!(v, mid+1, hi) # in parallel with the current call sorting # the upper half wait(half) # wait for the lower half to finish temp = v[lo:mid] # workspace for merging i, k, j = 1, lo, mid+1 # merge the two sorted sub-arrays @inbounds while k < j <= hi if v[j] < temp[i] v[k] = v[j] j += 1 else v[k] = temp[i] i += 1 end k += 1 end @inbounds while k < j v[k] = temp[i] k += 1 i += 1 end return v end
重要なのは
half = @spawn psort!(v, lo, mid) # task to sort the lower half; will run psort!(v, mid+1, hi) # in parallel with the current call sorting # the upper half wait(half) # wait for the lower half to finish temp = v[lo:mid] # workspace for merging
で再帰的に関数を適用してるから、結果的には最初の2分割で上下ともに並列化されてるんだと思われる。
MacBool Pro 13 inch 2017、2.3 GHz デュアルコアIntel Core i5での結果は
julia> a = rand(20000000); b = copy(a); @time sort!(b, alg = MergeSort); # single-threaded 2.120218 seconds (111.87 k allocations: 82.144 MiB, 31.72% gc time) julia> b = copy(a); @time sort!(b, alg = MergeSort); 1.985665 seconds (11 allocations: 76.294 MiB) julia> b = copy(a); @time psort!(b); # four threads 1.760655 seconds (332.00 k allocations: 702.748 MiB, 4.95% gc time) julia> b = copy(a); @time psort!(b); 1.101960 seconds (3.77 k allocations: 686.923 MiB, 4.72% gc time)
と早くなってるのがわかる。
とまあ、参照したサイトのはわかるけど、これをどうやって数値計算に落とし込むかが〜〜〜。
デバフ
ルカはUBで防御デバフあるからTP貯めるために星あげないほうがいい マコトもUBにあるけど柔らかすぎるので耐久上げるために星上げたほうがいいってことね。
次のプリフェスって年末かな。クリスが引きたい。そしていつジュンさんは来てくれるのか。
そういえばなんかゴリ押しでダンジョンExtremeの方行くほうが、育成整えるより早そう。。。まだ当分はかかるけど。
latex + VScode
メモし忘れてたから、念の為。
latexとvs codeはhomebrewなりなんなりでインスコ済みとする。 vs codeでlatex workshopを使うとき、ちゃんとwaorkshop側にlatexビルドできるようにするために、まず最初にユーザーのホームディレクトリに(cdだけでいけるとこ?)に.latexmkrcファイルを作成する必要がある。 内容は現行のPCの中をコピペすればいいけど、参考としては以下のサイトを参照のこと。 qiita.com
ただしこれをやると、workshop側でビルド時にpdfがVS code内のタブで開く設定にしててもskimが勝手に開くので、手動でpdf用のタブを開く必要があるっぽい?しかもskimとtabで同じpdfを見てるアホな自体になると思うけど。