憂鬱な午後のひととき

7月29日_

情報幾何学の基礎輪読会 #8発表

数学の勉強会はほんと久しぶりなのでかなり緊張した.

資料は用意したけどホワイトボードにひたすら書くスタイルで. スライドをめくってるだけだと速すぎて計算が終えなくて自分でも何やってるか分からなくなってしまう.

面倒でも一つ一つ書いていく方がいいね.

7月26日_

社内のGoの勉強会に参加

@ymmt2005さんによる資料More Effective Go.

7月26日_

打ち合わせ

長かった.

7月23日_

Windows 10へのアップグレード

もうすぐ無料アップグレード期間が終わるので3度目のトライ. やはり電源まわりがおかしくなる. 高速スタートアップを無効にしたりデバイスドライバで古いのが残ってないか探したけどうまくいかない.

サスペンドや休止はできるようになったがすぐ電源が入ってしまう.

いろいろ見ていてようやくわかった. [デバイスマネージャー]→[ネットワークアダプター]→[プロパティ]→[電源の管理] で「このデバイスでコンピュータのスタンバイ状態を解除できるようにする」をoffにしたら大丈夫になった. BIOSでそのあたりの設定は切っていたけどこちらも切らないといけなかったようだ.

これで手持ちのマシンは全てWindows 10になった. 次, 移行しないといけないのはここのホームページだな.

7月22日_

Xbyak AVX-512フルサポート

残りあと数個となったところでm128/m256/m512を区別しないといけない命令vfpclasspd/psがあった. 仕方がないのでxword/yword/zwordを追加する. NASMだとxwordじゃなくてowordだしMASM系だとxmmword ptrとかだしややこしい. とりあえず全部命令をつっこんだ. リファクタリングをしたらmasterブランチにしよう.

7月21日_

AVX-512残りあと100個ぐらい

ようやく果てしない作業が終わりそうだ. AVX2とAVX-512のファイルヘッダはわけない方がよかったかな. 作業が煩雑になってしまった.

7月20日_

gather系終わり

AVX2のときはXMMレジスタでマスクを指定していた部分がマスクレジスタを使うようになってる. これで機能拡張系は一通りすんだ. あとはAVX-512専用命令の追加(でも道半ば). 早くこの不毛な作業を終わらせたい.

にしてもNASMのバグ率低い. 今まで新命令実装してるときは2, 3個は必ず見つけていたのに今のところ明確なバグは見当たらない.

7月19日_

cvt系命令終わり

実装終わった. コード整理はあとで. たとえば

vcvtpd2dq ymm2{k3}{z}, zmm20, {rd-sae}
をNASMでアセンブルしたコード62B1FFBBE6D4をIntelのツールxedで逆アセンブルすると
vcvtpd2dq ymm2{k3}{z}{rd-sae}, zmm20

になるので{}の順序はどこでもいいようにした.

7月18日_

cvt系命令

数が多い上, それぞれ微妙に違っていてパターン化しにくいのが辛い. 引数の順序がIntelのアセンブラ(?)とNASMで違うのもあるようだ. ,{sae}という形は構文として筋が悪すぎだ.

7月17日_

Re: 圧縮displacement

一通り書き直した. 手作業じゃなく機械的にやりたいがPDFからテキスト抽出してもフォーマットができてないのでちょっと難しい.

7月16日_

圧縮displacement

これはbroadcastのときのみ使うのかと勘違いしていたが全てのメモリアクセスでサポートしないといけないのだった. しかも値が命令やinputSizeによって一つ一つ変わるので命令ごとに指定しないといけない.

命令表のT2やT4を見てもサイズまで確定しないと値が分からない. 今まで追加していて全部の命令の設定にフラグを設定しないといけない. めちゃくちゃ辛い.

7月15日_

vcvtpd2dq

AVXの時点でvcvtpd2dq xmm, m128とvcvtpd2dq xmm, m256は区別できたのか. 気がついてなかった. NASMで前者は[rax]. 後者はyword [rax]. 前者はxword [rax]とできるのかと思ったらoword [rax]だった.

Xbyakではywordとbroadcast用のyword_bのみを追加するか.

7月14日_

集中豪雨

出かけた途端, 強烈な雨でずぶ濡れになった. 靴もちゃぽんちゃぽんとなって, 服来たままお風呂にはいった状態. 諦めて一度家に戻る.

シャワーを浴びて一息入れたら復活したので渋谷に出かける. 久しぶりに大学の友達に会う.

みなは私が遅れている理由を「迷子になったか」「時間を間違えたか」と予想していたが答えは「今日が7/14と思ってなかった」でした.

7月13日_

AVX-512

ひたすら心折れないように命令追加中.

7月12日_

横浜国立大学

初めて. バスの本数が少なくて苦労した. 森の中みたいで散歩するのは気持ちよさそう.

7月11日_

mcl

768bitまでの素数に対応してほしいという依頼があったのでサポート. このサイズになってくるとMontgomeryは乗算が終わってからの方がよさげな気がする.

7月8日_

情報幾何学の基礎 輪読会

この本, 1行ですむところをぐだぐだな証明が多いな. 次回は私だ. 大変だ.

新人研修講義 : 「詰め込みすぎてよくわからなかったという声多し」 反省.

7月6日_

新人研修

今年の本社の新人研修はかなり気合が入ってる. 講義もたくさん. 私も少し担当になったので準備中.

7月2日_

システムプログラミング会

自分のはひどい発表だったが他の方のはとても勉強になった(From IA-32 to AVX-512).

振り返り問題:
数値一つは64bitとしてzmm0=[8:7:6:5:4:3:2:1], *rax = [Y:X], rax = [H:L]のとき次の命令の挙動の結果を答えなさい. movsdとか相当ややこしい.

ゼロクリアクイズ
命令 意味 結果(範囲指定で反転)
mov al, al alをraxの下位8bitに移動 rax=[H:L]
mov ax, ax axをraxの下位16bitに移動 rax=[H:L]
mov eax, eax eaxをraxの下位32bitに移動 rax=[0:L]
movsd xmm0, xmm0 最下位doubleを移動 zmm0=[8:7:6:5:4:3:2:1]
movsd xmm0, [rax] 最下位doubleを移動 zmm0=[8:7:6:5:4:3:0:1]
vmovsd xmm0, xmm0, xmm0 最下位doubleを移動 zmm0=[0:0:0:0:0:0:2:1]
vmovsd xmm0, [rax] 最下位doubleを移動 zmm0=[0:0:0:0:0:0:0:1]
movlpd xmm0, [rax] double x 2を移動 zmm0=[8:7:6:5:4:3:2:1]
vmovlpd xmm0, xmm0, [rax] double x 2を移動 zmm0=[0:0:0:0:0:0:2:1]
addsd xmm0, xmm0 最下位doubleを加算 zmm0=[8:7:6:5:4:3:2:2]
addpd xmm0, xmm0 double x 2を加算 zmm0=[8:7:6:5:4:3:4:2]
vaddsd xmm0, xmm0, xmm0 最下位doubleを加算 zmm0=[0:0:0:0:0:0:2:2]
vaddpd xmm0, xmm0, xmm0 double x 2を加算 zmm0=[0:0:0:0:0:0:4:2]
vaddpd ymm0, ymm0, ymm0 double x 4を加算 zmm0=[0:0:0:0:8:6:4:2]
7月1日_

Microsoft MVP

Visual Studio and Development Technologies部門でいただけた. ありがたい.


御意見は光成滋生<herumi@nifty.com>までお願いします