憂鬱な午後のひととき

8月28日_

WASM

GoやC#ではUint64Arrayをそちらで確保したメモリをCに渡せたのだけど, JavaScriptではModule._malloc()で確保された領域でないといけないようだ(何か他に方法がある?).

そうすると自分でfreeしないといけない. JavaScriptにはデストラクタが無いのでどうしよう.

8月27日_

vp4dpwssd

mkl-dnn/blob/master/src/cpu/jit_avx512_common_1x1_conv_kernel.cppとか眺めてるといろいろ勉強になる.

ああ, こうしとけばより便利に使ってもらえたのかとか.

8月25日_

サイボウズ・ラボユース合宿3

全体の様子. サイボウズ・ラボユース合宿2017開催

8月24日_

サイボウズ・ラボユース合宿2

あなたの知らないnopたち@ラボユース合宿. MPXのエンコーディングは職人芸だなあ. よくまあうまいこと思いついたものだ.

8月23日_

サイボウズ・ラボユース合宿1

会場はマホロバ・マインズ三浦. 久しぶりに海を見た.

8月22日_

MPXの命令表記法

bndldx, bndstxはbaseレジスタ+displacementとindexレジスタの2個の引数をとる. 命令的にはbndldx, bnd0, base, disp, indexでよいと思うのだがbase, indexはどちらかが省略されてもよい. それで

bndldx bnd0, [base + index * scale + disp]

という表記を採用したのかな. これだとbaseやindexが空でもOK. かなりこじつけ感がするが. ただ[base + disp]と[index + disp]の区別がつかないのでscale = 2とかにして区別することにしたのだろうか(scaleは無視される).

bndldx bnd0, [base]
bndldx bnd0, [index * 2]

分かりにくいせいか3オペランドタイプ表記もあるようだ.

bndstxは

bndstx [rcx], bnd0, rax
bndstx [rcx], rax, bnd0
bndstx [rcx+rax], bnd0

の3通りある(NASMはどれも通す). IntelのMPXスライドとsdeの逆アセンブル表記法も異なってたりする.

8月21日_

『タイムマシンでは、行けない明日』(畑野智美)

過去を変えたいために昔に行くがどうもうまくいかずにすれ違いばかり起こってしまう. 題材としてはよくあるけどなかなかおもしろかった.

『ふたつの星とタイムマシン』(畑野智美)は短編集だったが, それらの別々にあったエピソードをうまいこと一つにした感じ.

8月19日_

古いニコリ

こないだ実家に戻って自分の本の整理をしていたら1994年ごろのニコリが出てきた. 解いてない問題が多かったので持って帰ってやってみると中級者向けの問題でも難しい.

今のやつはやさしくしてるのね(その代わり後ろに巨大なのが増えている).

万年初心者なので手頃でありがたい.

8月18日_

multi byte nop

pull reqで教えてもらったのだがmulti byte nopは9byteまではIntelとAMDで同じらしい. 大昔に調べたときはなんか微妙に違っていた気がして(勘違いかな?)それっきり放置だったのだが, 同じなら対応してよいな.

Software Optimization Guide for AMD Family 17h ProcessorsのEncoding Padding for Loop Alignmentをみると10byteから15byteまでは66hプレフィクスを繰り返してる. 命令デコーダの負荷が高くなったりしないのだろうか(まあマニュアルにかいてるのだからAMDでは大丈夫なのだろうけど).

8月17日_

丸めモードを変更せずに0への丸めを実現する

ブクマにつっこみが入っていた

丸めモードを変更・に依存せずに0切り捨てを行う手法は遅くとも1997年には存在したのでいちいちいじってたらそれは処理系がうんk

指摘された99年頃のIntelの最適化マニュアルを発掘してみると確かにそう書いてますね. ありがとうございます. でもVCは2001年ぐらいのときは切り替えていたような(自信なし). Intelコンパイラはちゃんとやっていたのかな.

Pentium4から丸め制御(+α)だけ変更するときはFCWの変更が高速化されたので, その手法よりは切り替える方が速かったんじゃないかしら(自信なし).

現在のマニュアルには「丸め, 精度, 無限大ビットを3個以上の値の間で変更するときは丸めモードの変更を避けるアルゴリズムの方が効率がよい」とありますね. そこまで変更しないなら丸めモードを変更して丸めるほうがよいのでしょう(未確認).

8月16日_

_mm_cvt_roundsd_i64(__m128d, int r)のrの設定値

丸めモードRN, RD, RU, RZに対応して0~3の値を設定してもエラーになる(incorrect rounding operand).

何が悪いのかなあとコンパイルオプションを変えたり, 最新版gccをとってきてbuildして試してもエラー.

バグ報告してみるかとgcc.gnu.orgのbugzillaに書き込もうとしたらサーバーエラー.

で, clangでも同じエラーだし何か自分が悪いのかもともう一度確認して_MM_FROUND_NO_EXC(8)とorをとらないといけないことが分かった.

どこかマニュアルに書いてあるのかな. まあともかくすんでのところでバグ報告して恥かかずにすんでよかった.

8月15日_

x86/x64における小数から整数への丸め処理命令の変遷

書いてみた. AVX-512でのはなしはあまり知られていないと思う. gcc/clang/NASMで動作確認できず, Xbyak+sdeでしか試してないのであってるかとても不安だ.

8月14日_

巨大数論』(フィッシュ)

寿司 虚空編』(小林銅蟲)というよく分からないマンガ(タイトルは寿司なのに中身は数学)からたどり着いた.

まだ最初の方しか見てないけどおもしろそう. 先日読んだ『巨大数』より詳しそう.

8月12日_

cgo on Linux and macOS

どうもmacOSは挙動が微妙に違うようでいろいろ困った.

もうちょっとうまい方法がありそうだけどとりあえず両方で動くようになった.

8月11日_

頭痛

ひどい.

8月10日_

_mm_cvt_roundsd_i32

マニュアルやgcc/clangのライブラリヘッダを見る限りでは第二引数に0~3を指定できるように見えるのだけど指定するとエラーになってしまう. NASMでは

cvtsd2si eax, xmm0, {rz-sae}

みたいに書いても無視されるようだ(バグ?). Xbyakではちゃんと動いてるようだが不安.

8月8日_

SHA命令とMPX命令

Xbyakにpull reqが来ていたのでチェックしながら対応する.

8月6日_

『コンピュータは数学者になれるのか?』(照井一成)

めちゃくちゃ面白かった.

購入したのは1年以上前なのだけど, 少し読んでは挫折してを繰り返してなんとか最後までたどりついた.

真理述語の定義不能性と定義可能性, 超限順序数, 対角線論法を使ってはP≠NPを示せなさそうとか, CPS変換と二重否定のはなしとか, 断片的にしか聞きかじっただけだった言葉や概念を多少なりともわかった気分になった(もちろん詳細はまだ全然理解できてないけど).

また読み直そう.

8月5日_

『電王』(高嶋哲夫)

将棋の名人を目指す子供とコンピュータ用ソフトを開発する人の話.

テーマはよいのだけど, 話題が散漫で肝心の人工知能に関する記述やソフト開発のくだりが???なところが目立った.

8月4日_

『はじめて読む486』(蒲地輝尚)

ラボユースで見たいという人がいたので実家の押し入れから発掘した. 購入したのは20年以上前か.

本当は古い本を処分するはずが読んで詰め直しただけで終わってしまった.

8月3日_

休み

4日ほどネットワーク不通になります.

Optimzied C++ vol.9

予定が空いて久しぶりの参加. 相変わらずこの著者, もう少しきちんと調べてから書いた方がいいんじゃないかと思う.

8月2日_

Re: 割り算

メインではほとんど使われないので安全側に倒して実装しなおしてやっと動いた. 最適化は必要になってから. ペアリングでベンチマークをとるとChromeよりFirefoxの方が1割近く速いようだ.

8月1日_

割り算

vint.hppの除算が特別な値のときにエラー(?)になることがわかった. 割り算難しい.


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