今年
自分のGitHubでの開発に専念してた(できた)年だった.
mcl/blsはEthereum系で少しずつ認知度が上がり, 採用されるケースも増えた.
その結果, 様々なプラットフォームでの要件も増えていろんな環境に対応する作業が多かった.
嫌いじゃないけど面倒なことも多い. 特にGo(cgo)はちょっと王道から外れると途端にめんどい.
あと.NET on Linuxやgomobile for iPhone/Androidなどのマニアックなのも.
主流じゃない環境だとclang 7でもC++11でもエラーになることもあってやっぱりC++03最強と認識したのであった(マジ).
もうちょっとがんばればデファクトになれなくもなさそうなのでもうしばらくこのまま続けたい.
XbyakはIntelの新CPU対応や落ち穂拾い的な対応など.
gccもclangも対応してないときに新命令サポートするのはいろいろ気をつかう.
IntelがXbyakに当てた独自パッチが間違ってるのでそれに対して修正issue出すという,
レアな経験もして面白かった(出すときはめちゃ緊張した).
Xbyak for fugakuはフェイントやった.
まさかそのプロジェクトに関われるとは思ってもいなかったのでありがたいな.
13年前からなんかかんやと言われることもあったが,
続けてるといいこともあるもんだと素直に思う.
来年はその上で動くアプリで役に立ちたい.
自分のソフトを使ってもらえるというのはとてもありがたい.
ものすごいマシンも2台やってきた. けれども, ひっきりなしの要望に対応しまくっていたら後半完全にキャパオーバーだった(休まるときがない).
12月は結構体調崩してダウンしてた. 来年はもう少し自分のペースを保てるように気をつけよう.
歩く
最近いろいろ詰め込みすぎていたので頭を空っぽにするために歩く.
三輪から天理までもくもくと.
ついでに奈良公園に行って若草山の麓まで. 鹿たっぷり. 外国人多し. 特に中国系の人.
お店もいろいろできていてびっくり.
山に登ろうと思ったけど閉山だった. 残念.
Joint Workshop of NTT Labs and NTT Research
聞きたいセッションがあったので上司にお願いして参加した.
京都8時半着の新幹線. 長年京都にいたけど京都直結のホテルに入ったのは初めて.
京都タワーのいつもと違う眺めが新鮮.
終わって実家に帰る.
USBつながらない
朝Windowsを再起動したらログインできない. 画面はでてるけど何も反応しない.
駄目元でリモート接続したらつながった. とりあえずデータバックアップをとUSB-SDDをつなげたけど認識しない.
どうしたものかと一度電源を切って直接SDDをマザーボードにつないでバックアップ.
試しにPS/2キーボードをつなげたら入力できる.
修理依頼の電話をしてBIOSとかいろいろリセットしたらUSBを認識するようになった.
電源まわりが怪しい気がしてるのだけど動くようになってしまったので修理はまた今度に.
xbyak for fugaku
fujitsuからxbyak_aarch64が公開される.
ARMv8 + SVE対応, つまり富嶽用. 最初その話を聞いたまさかと思ったけど実現した.
めちゃうれしい.
といってもやることはまだまだいっぱいある.
できるだけ貢献したいな.
Re: MAP_JIT
結局
inline int getMacOsVersionPure()
{
char buf[64];
size_t size = sizeof(buf);
int err = sysctlbyname("kern.osrelease", buf, &size, NULL, 0);
if (err != 0) return 0;
char *endp;
int major = strtol(buf, &endp, 10);
if (*endp != '.') return 0;
return major;
}
inline int getMacOsVersion()
{
static const int version = getMacOsVersionPure();
return version;
}
#if defined(XBYAK_USE_MAP_JIT)
int mode = MAP_PRIVATE | MAP_ANONYMOUS;
const int mojaveVersion = 18;
if (util::getMacOsVersion() >= mojaveVersion) mode |= MAP_JIT;
こんなコードになった.
実際, Xcode 9 + 10.13.6でMAP_JITつけると落ちるらしいので対策必要.
どういう実装してるんだろうなあ.
MAP_JIT
macOSのmmapを使ってJITしたい場合はこのフラグをつけるべきらしい.
しかし古いmacOSでつけるとクラッシュするらしい.
後方互換性...
メインマシン
なんか急にキーボードを受け付けなくなったと思ったら, リセットボタンも効かない.
強制リブートしたらWindowsが見つかりませんとか, BIOS画面で固まったりした.
やばい. ちょうど2年しか使ってないのに.
JavaScriptのmapとarray
JavaScriptで
[1,2,3].map(x=>parseInt(x))
は[1,2,3]になるのに
[1,2,3].map(parseInt)
は[1,NaN,NaN]になるのはなぜと言われた.
ほんまや, おもしろい.
実はparseIntは(string,radix)を受ける関数でradix=0だとよきに計らう.
mapで渡される値は(現在の値, 配列のindex, 配列)なので
(string,radix)=(1,0), (2,1), (3,2)となり最初以外はエラーになってしまう.
a=[1,2,...,9,10,..]を渡すと9番目から9,11,13,15,17,19,21,23,25,27,38,41,...となり一見意味不明な数列となる.
llvmのbmi2
いつのバージョンからか, mcl内部で使われているllvmが自動生成するコードが-mattr=bmi2してるのにmulxを使わなくなってしまった.
仕方がないので古いllvmの出力コードで固定する.
ほっとくと勝手にavxを使って遅くなるのでわざわざ-mattr=-sseつけてる. 頼むから遅くならないでほしい.
振り返り
今年のメモを見ながらまとめてる.
いろいろ好き勝手にやらせてもらってる. ありがたい.
回復傾向
ようやく喉の痛みが治まってきたが, 体のだるさが半端無い. 寝てるしかない.