憂鬱な午後のひととき
LLVM 5.0
mclのLLVMによるコード生成部分をllvm 3.8から5.0に挙げたら1割遅くなった.
生成コードを見たところ使ってほしくないところでSIMDが使われるようになっていた.
速くなるならいいけど1割も遅くなるのはあれなのでdisableにする.
LLVMのコード生成でsseをoffにするには-mattr=-sseを追加すればよい.
これで3.8とほぼ同じ速度のコード生成になった(速くなるならもっとよかったけど).
Intel developer conferrence 2017に行ってみた.
結構いろいろおもしろい製品の紹介があった. ブースも賑わっていた.
PFNのChainer for Intelのお話も聞いてきた. iDeep(だったかな?)というCuPy互換な枠組みを用意しているらしいがその場には詳しい人はいらっしゃらなかったようで残念.
暗号入門資料
社内研修用のを公開.
イラストを多めにしたらとっつきやすく見えるかもという意見をもらったのでいろいろ入れてみた.
まだ1時間で話すにはきつい.
もう少しけずらないとなあ.
WalBの話
予想以上に, 突っ込んだ質問が多数あり活発な議論となっていた.
参加してよかった.
せっかく書いた日本語のチュートリアルが埋もれていたのでリンクした.
BLS署名
というわけでBLS signature demoもnativeと完全に値を出せるようになった.
SHA-256/512
WASMのために実装した.
速度はともかく, これでmclはOpenSSL/GMPの両方がなくてもnativeと同じ動作をするようになった.
SHE
G1のスカラー倍算, 点が固定ならGLV法より大きなWindow法の方が速いのでそちらを使うように修正した.
templateの特殊化がその場凌ぎになってるのでリファクタリングしないといかんな.
初めてのiPhone
会社から支給される.
会社管理のサイトにアクセスするのは二段階認証が必要
→とりあえず各自の携帯でやってて
→紛失したときのためにMDM入れて
→私物管理されるのやだなあ
→そもそも会社がみなに提供すべき
の流れ. 後半の流れは予想以上に早くて驚いた(もちろん営業など仕事に必須のところでは前から支給されていた).
私は在宅勤務するときの認証にしか使わないのでもったいない気もするがメモリ32GB積んでるって、正直ムダじゃないですか?みたいなものか.
462-bitペアリング
ここまで大きくなるとBNじゃないほうがよいのだけどとりあえず対応した.
Re: mapToGi
GMPを使わない割り算の実装が極端にしょぼくて遅かった.
結果的にmod pでの巾乗算が遅かったのでそこだけMontgomeryに変更して妥当な速度になった.
『リビジョンA』(未須本有生)
戦闘機を改良する話. 官と民間の駆け引きや企業内の足の引っ張りあいとか半沢直樹ぽい.
全然知らない世界なのでなかなかおもしろかった.
BLS署名デモ
漸くkey sharingとkey recoverが動いた.
終わってみれば簡単なのだがはまっていて時間を食った.
mapToGi関数がめちゃくちゃ遅いことが判明した(ペアリング演算よりも遅い).
内部でLegendre関数やinvやsquareRootを呼んでるのでそのあたりの実装がしょぼいからかな.
10倍ぐらい速くしたい.
mcl on WASM
Fp254BNbやFp382などを切り替えられるようにした.
BLS12曲線も早く実装したい.
volatileのread復習
void f0(volatile int *x)
{
*x;
}
void f1(volatile int *x)
{
static_cast<int>(*x);
}
void f2(volatile int *x)
{
static_cast<volatile int&>(*x);
}
f1は必ずreadする, f2は必ずreadしない.
f0はC++03は曖昧, C++11以降は必ずreadする.
UnionFind
英語の勉強を兼ねてUnionFindをJavaで実装.
池袋ジュンク堂
久しぶりに来た. 英語の文法全然覚えてないので『英語ライティングルールブック』(デイヴィッド・セイン)を買ってみた.
テンプレートテンプレートパラメータ
gc 7.2 -std=c++17で挙動がおかしいと言われて調べたら次のコードで再現した.
#include <stdio.h>
#include <string>
template<class T>
struct X {
X(T *) { puts("xxx"); }
};
template<class T, template<class T_>class Container>
struct X<Container<T> > {
X(Container<T> *) { puts("xxx2"); }
};
template<class T>
void func(T *) { puts("yyy"); }
template<class T, template<class T_>class Container>
void func(Container<T> *) { puts("yyy2"); }
int main()
{
std::string s;
X<std::string> x(&s);
func<std::string>(&s);
}
実行結果は
xxx2
yyy
clangだと-std=c++03, c++11, c++14, c++1zのどれも"xxx"になる.
Visual Studioも同じ挙動.
gcc 7以降の-std=c++1zをつけたときだけxxx2になる.
P0522R0を反映したものらしい.
従来の挙動にするには-fno-new-ttp-matchingをつければよいようだ.
関数に対しては従来通りの挙動なんだけどあってるのかな.
→後者はオーバーロードなのでcharにしないとマッチしないと指摘を受けました.
どうもありがとうございます. ぼけてました.
ISEC研究会
専門委員会にも参加で夜遅くなった. ずっと座っていたのでおしりが痛い.
ブラウザ上でペアリング計算
ようやくユーザが値を変えながら確認できるようなデモを作れた.
手元ではFirefox, Chrome, Edge(about:configで拡張JavaScript有効)で動いた.
64bitブラウザじゃないと大分遅いので注意.
AndroidのChrome上でも動くのはうれしい.
CライクなAPIを提供してるのだけど,
destructorの無いJavaScriptでどうやってfreeを安全にさせようか.
昔
御意見は光成滋生<herumi@nifty.com>までお願いします