『情報幾何学の基礎』勉強会Chentsovの定理の節を担当
拡張する方法は問題なかったと思うのだけど, 次節以降につなげるには別の方法でないといけなかったのか. よくわからん(PDF資料).
『情報幾何学の基礎』勉強会Chentsovの定理の節を担当
拡張する方法は問題なかったと思うのだけど, 次節以降につなげるには別の方法でないといけなかったのか. よくわからん(PDF資料).
Xbyakで試したら1個ケアレスミスが見つかった.
int aaa = addr.getOpmaskIdx(); if (aaa & !(type & T_M_K)) throw Error(ERR_INVALID_OPMASK_WITH_MEMORY);
マスクレジスタを指定しているのに, 命令がそのtypeでなければエラーにするという部分. &&の書き間違い.
VCの/analyzeやcppcheck, scan-buildでは見つからなかった.
static constメンバのリンクエラー
gccやVCで通るのにclangでリンクエラーになってなんでだろうと調べたらこんなコードだった.
#include <algorithm> struct A { static const int a = 3; }; int main() { return std::min(A::a, 5); } % clang++-3.8 t.cpp /tmp/t-575569.o: In function `main': t.cpp:(.text+0xa): undefined reference to `A::a'
std::minの引数の型はconst T&. static constなaは値を使う限りは普通に使えるけど参照(つまりアドレス)を取ろうとすると実体がないのでエラーになるようだ.
gccも-O0だと同様のエラーになった. 実体を定義しないといけないのは面倒だな.
お昼13時から夜20時まで多少の休憩は随時あったけどほぼぶっ通し. 講演者の方お疲れさまでした.
多少の予習はしていたけど後半とても難しかった. のらんぶる(@nolimbre)さんの前半の初心者向け導入のすばらしさに感動した.
帰りまた迷子になってさまよった. 走り回っていたら, たまたま同じ勉強会に参加していた人にあって助かった. ありがとうございます.
『データ解析におけるプライバシー保護』(佐久間淳)
勉強会で読み始める. 先に差分プライバシーを知りたいという意見があったので1, 2, 6章を説明した(資料).
会場がものすごく曲がりくねった道で迷子になった. 絶対遅刻すると思ったが運良く, 人に道を教えてもらって間に合った.
5時間かけて多様体の定義から楕円曲線上のWeil予想の証明まで. お疲れさまでした. すばらしい.
Silvermanの楕円曲線の本をほぼ踏襲していたので大昔に読んだときの自分のノートを見ながら思い出しつつ懐かしむ. 前半, 細かい証明はしないのならvarietyは多項式の零点としてさくっと進めて後半に時間をとってもよかったかもしれない.
mcl
いろいろやったすえ, LLVMでは速度出せないと分かったのでnasmで書くことにする. ただループとかifdefとかマクロでどうするのか調べて書くのがとても面倒.
Xbyak使いたい. 機能限定版でよいのでXbyakの出力がnasmソースになるようなものを作るか.
無線LAN調子悪し
家のマシン同士の接続がどうも調子悪い. どれもインターネットにはつながってるけどA → BはつながるけどCやDからBにはつながらない. ただCやDからAにはつながるのでそれを経由するとBにはつながる. 再起動直後はつながらないけどしばらくしたら一瞬つながってまた切れるとか不安定.
Windows Updateでfirewallの設定が変わったのかといろいろみたけど分からない. 半日ぐだぐだしていてルータをリセットしたら直った.
mcl
testまわりのリファクタリング.
体が動かん
最近, 休みは殆ど寝てる, というか体が動かない.
Random Beacons in Decentralized Networks
私のBLS署名の実装を使ったデモもあるらしい. Zcashというのもペアリングを使ってるようだし, ブロックチェイン系はにぎやかだ. 中身知らないのでこれから勉強する.
少し前に社内で講義したときのものに加筆修正したものを公開した.
Goのcgoを使ったときのwrapクラス
Re:runtime errorで書いたように構造体のコピーを避けるのはうっかりやってしまうと困るので別の方法を考える.
os.FileではFile構造体に公開していないfile構造体へのポインタのみを保持するようにしていた.
しかしこれでは*os.Fileな型fから実体へアクセスするにはポインタfの中身を見て
f → *fileのポインタ → fileの中身を見てfd
となりfdじゃなくてC.structAの場合は更にC++のpimlのためのポインタ → 中身とものすごく遠い.
幸い, 今回wrapするC++のクラスはサイズが固定で中身は数値を表す単なるバイト列で他への参照は持たない. そこでC++をwrapするCの不完全構造体をC++の構造体と同じサイズのものにする.
struct Cで公開する構造体C_A { uint64_t buf[C++での構造体のサイズ / 4]; };
としてC_Aのポインタpを引数とする関数の実装を*(A*)pでアクセスするようにした.
そして更にGo側のwrapクラスをC_Aと同じようにする. そうすればGoでC.createA(), C.destroyA()を呼ぶ必要がなくなりruntime.SetFinalizerも不要になる.
wrapされたクラスを扱う側の見た目は変わらない. 具体的にはこの変更.
このように変更してベンチマークをとったら1割ほど速くなった. メモリアクセスとGCの効率が上がったからかな.
OS XのNX bit
サイト引っ越しのときに発掘した昔のネタ発表Cプログラマのためのカッコつけないプログラミングの勧めPDF. ソースコードは fac.c. 2010年9月なのでもう6年近く前だった. 明治大学のMiyashita Lab.では9月24日にもまた「普通じゃないプログラミング」をするらしい.
OS Xでも動かせないか試してみたが, Linuxの-z execstackのようなオプションは見当たらなかった. OSが問答無用でstackの実行属性はoffにしているようだ.
Intel Parallel Studio XE Professional Edition
OSSライセンスというのがあったので申し込んでみたら受諾された. 数十万するソフトなのでとてもありがたい. いろいろ試してみよう.
Re: runtime error
配列のやりとりを全て[]Aから[]*Aに変更して構造体のコピーを避けるようにしたら大丈夫になった.
runtime.SetFinalizer(p, destroy)で登録したpに対して, そのインスタンスが別のものからコピーされるとdestroyAで削除するselfが別のものになってエラーということかな.
runtime error
ときどきエラーになるらしい. デストラクタの作り方が間違ってるのかな. みよう見まねで作ってみたのだけど, どうしたもんか.
簡単な例ではうまく動いているように見えたんだけどなあ.
type A struct { self *C.A } func destroyA(p *A) { C.estroy(p.self) } func NewA() *A { p := new(A) p.self = C.create() runtime.SetFinalizer(p, destroy) return p }
Go手始め
bls.hppなクラスをGoから扱いたくてcgoを初めて触る. bls.hppを一度bls_if.hでCインタフェースにして, それをGoから呼び出す.
bls.goな感じでラッパークラスを作ったけどあってるんだろうか. メモリリークとかそれ系が心配.
それからC側のPublicKeyクラスのvectorとかwrapするとGoのarrayとずれるので結局ポインタのポインタ配列を作ってやりとりしてる. あってるのかなあ. とりあえず最低限の確認コードmain.goは動いたのだけどどろくさいな. もっとうまいするにはどうすればよいのか.
Go側でどうせwrapするならC++のpimplは不要だったかも.
ああ, エラー処理もちゃんとかかないといけないな.
『悟浄出立』(万城目学)
著名な話の脇役からの視点による短編集. 意表をつかれたがとても面白い. 表題作とラストの「父司馬遷」がよかった.
Caffe Optimized for Intel Architecture: Applying Modern Code Techniques
XbyakにAVX-512が欲しいと行ってた人はこのためだったのか. Intelの最適化のページで紹介されるのはとても感慨深い.
頑張って対応させてよかった.
『私と月につきあって』(野尻抱介)
おもろかった. 無理だろと思うようなトラブルの中で, よくそういう解決方法を思いついた. すばらしい.
『宇宙は無数にあるのか』(佐藤勝彦)
インフレーションの話がわかりやすかった. 人間原理はうさんくさいというか逃げな気がする.
宇宙の大きさ420億光年の中の素粒子の個数を数えてパターンを勘定しているところ, 量子力学的に単純に組み合わせを数えればよいわけではないと思うのだがどうだろう.
今日はISEC委員会でまた機械振興会館.
何かといくことになるなあ.
何度かリクエストに応じて作り替えてほぼ固まった. 基本的な機能に加えて, VSS(Verifiable secret sharing)相当のもの, 署名や公開鍵の加法性, PoP(Proof of Possesion)の機能を持つ.
これらがどう応用されるのか. そのうち公開されるらしい. 興味深い.