憂鬱な午後のひととき

9月28日_

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互換な枠組みを用意しているらしいがその場には詳しい人はいらっしゃらなかったようで残念.

9月27日_

暗号入門資料

社内研修用のを公開. イラストを多めにしたらとっつきやすく見えるかもという意見をもらったのでいろいろ入れてみた.
まだ1時間で話すにはきつい. もう少しけずらないとなあ.

9月25日_

WalBの話

予想以上に, 突っ込んだ質問が多数あり活発な議論となっていた. 参加してよかった.

せっかく書いた日本語のチュートリアルが埋もれていたのでリンクした.

9月24日_

BLS署名

というわけでBLS signature demoもnativeと完全に値を出せるようになった.

9月23日_

SHA-256/512

WASMのために実装した.

速度はともかく, これでmclはOpenSSL/GMPの両方がなくてもnativeと同じ動作をするようになった.

9月22日_

SHE

G1のスカラー倍算, 点が固定ならGLV法より大きなWindow法の方が速いのでそちらを使うように修正した.

templateの特殊化がその場凌ぎになってるのでリファクタリングしないといかんな.

9月20日_

初めてのiPhone

会社から支給される.

会社管理のサイトにアクセスするのは二段階認証が必要 →とりあえず各自の携帯でやってて →紛失したときのためにMDM入れて →私物管理されるのやだなあ →そもそも会社がみなに提供すべき

の流れ. 後半の流れは予想以上に早くて驚いた(もちろん営業など仕事に必須のところでは前から支給されていた). 私は在宅勤務するときの認証にしか使わないのでもったいない気もするがメモリ32GB積んでるって、正直ムダじゃないですか?みたいなものか.

9月19日_

462-bitペアリング

ここまで大きくなるとBNじゃないほうがよいのだけどとりあえず対応した.

9月18日_

Re: mapToGi

GMPを使わない割り算の実装が極端にしょぼくて遅かった. 結果的にmod pでの巾乗算が遅かったのでそこだけMontgomeryに変更して妥当な速度になった.

9月17日_

『リビジョンA』(未須本有生)

戦闘機を改良する話. 官と民間の駆け引きや企業内の足の引っ張りあいとか半沢直樹ぽい. 全然知らない世界なのでなかなかおもしろかった.

9月14日_

BLS署名デモ

漸くkey sharingとkey recoverが動いた. 終わってみれば簡単なのだがはまっていて時間を食った.

mapToGi関数がめちゃくちゃ遅いことが判明した(ペアリング演算よりも遅い). 内部でLegendre関数やinvやsquareRootを呼んでるのでそのあたりの実装がしょぼいからかな. 10倍ぐらい速くしたい.

9月13日_

mcl on WASM

Fp254BNbやFp382などを切り替えられるようにした. BLS12曲線も早く実装したい.

9月12日_

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する.

9月10日_

UnionFind

英語の勉強を兼ねてUnionFindをJavaで実装.

9月9日_

池袋ジュンク堂

久しぶりに来た. 英語の文法全然覚えてないので『英語ライティングルールブック』(デイヴィッド・セイン)を買ってみた.

9月8日_

WASM(WebAssembly)入門 ペアリング演算やってみた

Runtime.stackの使い方とか.

9月7日_

テンプレートテンプレートパラメータ

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にしないとマッチしないと指摘を受けました. どうもありがとうございます. ぼけてました.

9月4日_

ISEC研究会

専門委員会にも参加で夜遅くなった. ずっと座っていたのでおしりが痛い.

8月2日_

ブラウザ上でペアリング計算

ようやくユーザが値を変えながら確認できるようなデモを作れた. 手元ではFirefox, Chrome, Edge(about:configで拡張JavaScript有効)で動いた. 64bitブラウザじゃないと大分遅いので注意.

AndroidのChrome上でも動くのはうれしい.

CライクなAPIを提供してるのだけど, destructorの無いJavaScriptでどうやってfreeを安全にさせようか.


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