pti=on
Meltdown/Spectre対策系のオプションpage isolation table=onは意外とあちこちでパフォーマンスを落とす.
pti=offに比べてJenkins上のテストが数倍遅くなるものがちらほら.
いろいろ調べてみるとJava経由でPython経由で実行バイナリ起動のパフォーマンスが落ちる模様.
Ubuntu 16ではなく18でも同様.
pti=on
Meltdown/Spectre対策系のオプションpage isolation table=onは意外とあちこちでパフォーマンスを落とす.
pti=offに比べてJenkins上のテストが数倍遅くなるものがちらほら.
いろいろ調べてみるとJava経由でPython経由で実行バイナリ起動のパフォーマンスが落ちる模様.
Ubuntu 16ではなく18でも同様.
Xbyak 5.65
push(dword [rax]);が1byte冗長にエンコードしてしまっていた. 動きはするけど無駄. 調べたら2008年に64bit対応したときから入ってた. 10年前からのバグ!
面白かった. LTなのにみんな発表内容が濃い. たいしたもんだなあ. 登壇者にラボユースの人が二人いた.
UEIF
real Linuxでwalbの実験をしようとしたらinsmodできなかった. secure bootをoffにしないといけないもよう.
BIOS画面になかなかたどり着けなかったのでmokutil --validation-disableとやってみた.
static変数のスレッド安全性
C++11から(あるいはgccはもう少し前からだったような)static変数の初期化が安全に行えるようになってるけどJavaScriptでは今のところ不要. __cxa_guard_acquireと__cxa_guard_releaseが要求されるのでむしろ邪魔.
-fno-threadsafe-staticsをつけてそのコードを生成しないようにする.
Re: wasmで返り値の型が異なるとエラー
wasm-ldの--check-signaturesオプション,
extern "C" void* mymemset(void *p, int v, size_t n)
{
char *s = (char*)p;
for (size_t i = 0; i < n; i++) {
s[i] = (char)v;
}
return p;
}
みたいな関数の実体と呼び出す関数が違うとリンク時に
wasm-ld-6.0: error: function signature mismatch: mymemset >>> defined as (I32, I32, I32) -> I32 in add.o >>> defined as (I32, I32) -> I32 in sub.o
と怒られる. 他にもsignatureが違うと言われる関数がちらほら. うーん, ポインタが入ると型がずれてしまうのかなあ. --check-signaturesを消すとちゃんと動く. wasm-ldのバグ? wasm-ld-7だと直ってるのだろうか.
直ってた.
あと上記のような関数はmemsetだと認識して勝手にmemsetを呼び出すような最適化がかかり, 実行時にmemsetがないと怒られる.
Import #1 module="env" function="memset" error: function import requires a callable
最初, どこにも無いのになぜだと思った. これは-fno-builtinをつけると解消する.
wasmで返り値の型が異なるとエラー
wasm用のコードを開発していたらWebAssembly.instantiate()が「elements on the stack for fallthru」とか「drop found empty stack」のエラーが出るようになった.
最初はどこかstackサイズが空になったのかと思ったのだけどそうでも無いみたい. よく分からんなあと思っていたら理由を教えてもらった.
関数の形は返り値の型も含めて同じでないといけないらしい. memset()相当の関数を作っていたのだが返り値をさぼってvoidにしていた. ヘッダでvoid *を返すようになってると上記のエラーになるそうな.
wasm-ldに--check-signaturesをつけるとリンク時にチェックしてくれる.
// a.c
int set(int *p, int x)
{
*p = x;
return x;
}
// b.c
void set(int *p, int x);
void f(int x, int y)
{
set(&x, y);
}
それぞれをclang -target wasm32-wasmでoファイルを作ってリンクすると
wasm-ld-6.0: error: function signature mismatch: set >>> defined as (I32, I32) -> void in a.o >>> defined as (I32, I32) -> I32 in b.o
プロトタイプ宣言と実装の戻り値が異なるなんて通常は滅多にないけど, 上記のように標準関数の大体関数を手抜き実装したときに遭遇してしまった.
Re: L2準同型暗号の解説
準同型暗号の最前線3(理論編)
も書いてみた.
L2準同型暗号の解説
久しぶりにQiitaで書いてみた.
準同型暗号の最前線1(入門編)
準同型暗号の最前線2(原理編)
タイトルは若干煽り気味?
でもまあ先週の発表ネタだから許して.
『松ノ内家の居候』(瀧羽麻子)
淡々としていて盛り上がりは無いが面白かった. なんとなく中島京子っぽいテイスト.
Japanist 10
「~」の入力が漢字変換モードで「~」を入力しても入らないのがとても不便. Japanist 2003のときと同じく[記号入力]の設定で「 ̄→~」にチェックをいれてるのだけどなあ.
仕方がないから「~」を「~」で漢字登録した.
clang for wasm
だいぶ安定してきてるらしいのでぼちぼち試してみる.
emccとの違い.
clangでwasm用オプションは-target wasm32-wasm. そして__wasm__が定義される.
emccでは__asmjs__が定義されている.
linkerはwasm-ldを使う. -no-entry --strip-all --allow-undefinedをつけると最小限のバイナリになる.
Cの関数をexportするには
__attribute__((used)) // emcc
__attribute__((visibility("default"))) // clang
emscripten.hのEM_ASMマクロは使えない. 代わりにwasmのinstance化のところでCから呼んでほしい関数を渡す.
// add.cpp
#define API __attribute__((used))
extern "C" uint32_t addJS(uint32_t x, uint32_t y); // JS関数
extern "C" API uint32_t callJS(uint32_t x)
{
return addJS(x, 999);
}
// run.js
const mod = {}
fetch('add.wasm')
.then(response => response.arrayBuffer())
.then(mod => {
const imports = {
env : {
addJS : (x, y) => { return x + y }
}
}
return WebAssembly.instantiate(mod, imports)
})
.then(ret => mod.exports = ret.instance.exports)
mod.exports.callJS(1000)
WebAssembly.instantiateの第2引数に渡すオブジェクトは envの中にCから呼んでほしい関数を書く. 最初のオーバーロードの例のサンプルでは動かなくて試行錯誤した.
ボランティア
IPA未踏関係で知り合いに頼まれて少し打ち合わせに参加することになった. それは面白そうだし楽しみ.
のだが, その後IPA事務局からのメールで未踏OBはボランティアとして協力してもらうことに決まってるので了承くださいとあった.
もともと対価を受け取るつもりは全然無かったのだけどIPAがそう言ってるのはおかしくないかい.
仮にも経済発展のために起業や事業化も目指してる・支援しているという機構が, 自身が認定した「優れた人材」をボランティアとして使うことに決まってるというのは意味が分からない. OBがコンサルを生業としていたらどうするのだろう. ここは「日当10万円出します(金額適当)」とか「御社の規程に合わせて」とかいうべきじゃないのかな.
Oculus Go
社内で@shuyoさんが布教活動してるので借りて家で試してみた. すごいのだけど, どうも体に合わないようですぐ頭が痛くなる.
立体眼鏡とか立体視とか昔から苦手だったからなあ.
疲れたまりすぎ
うーむ, どこかできちんと休まないといかんな.
疲れすぎ
体が全然動かない. 参った.
ASIA CCSの発表資料
終わってホテルでタクシーを頼んだら高級なのが手配された. 何事も無く順調に帰宅できてよかった.
ASIA CCS参加
一人で海外の会場に行くのは初めてなのでとても緊張した. 最初タクシーでcentral park hotelを頼んだらcentral parkに止まって焦ったがhotelと言ったらそちらに移動してくれた.
ホテルはお風呂やトイレがガラス張りで落ち着かない.
emccの-Ozオプション
emccのオプションで-O3と併用して使うと勘違いしていた. ベンチマークが遅くなってるなあと思ったらこれのせいだった.
-O3のみにするとバイナリサイズが2~3倍大きくなるが1.6倍速くなった.
母関数と漸化式
漸化式を母関数を使って解く方法をおさらい. 久しぶりに紙をたくさん消費した.
wasmでベンチマーク
なんか以前よりいくつかの演算が遅くなってるような気がするのだが, なんか悪さしたかな.
調べたらうっかりGLVメソッドが無効になっていた. そのあたりの速度が戻った. でもまだペアリングが遅いような.
Re: ゼロ知識証明
思っていたのと実際に細かく計算するのとではやはり違う. でも大筋はうまく行きそう(なのかな).
ゼロ知識証明
ちょっとしたアイデアが使えるか手で計算してみる. 既にある結果なのかな. とりあえず自分でできるところまでやってから調べる.