憂鬱な午後のひととき

9月30日_

『情報幾何学の基礎』勉強会Chentsovの定理の節を担当

拡張する方法は問題なかったと思うのだけど, 次節以降につなげるには別の方法でないといけなかったのか. よくわからん(PDF資料).

9月29日_

PVS-Studio

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では見つからなかった.

9月26日_

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だと同様のエラーになった. 実体を定義しないといけないのは面倒だな.

9月24日_

数学カフェ『圏論2』参加

お昼13時から夜20時まで多少の休憩は随時あったけどほぼぶっ通し. 講演者の方お疲れさまでした.

多少の予習はしていたけど後半とても難しかった. のらんぶる(@nolimbre)さんの前半の初心者向け導入のすばらしさに感動した.

帰りまた迷子になってさまよった. 走り回っていたら, たまたま同じ勉強会に参加していた人にあって助かった. ありがとうございます.

9月23日_

『データ解析におけるプライバシー保護』(佐久間淳)

勉強会で読み始める. 先に差分プライバシーを知りたいという意見があったので1, 2, 6章を説明した(資料).

9月22日_

【数学カフェ予習回】【数論幾何】参加

会場がものすごく曲がりくねった道で迷子になった. 絶対遅刻すると思ったが運良く, 人に道を教えてもらって間に合った.

5時間かけて多様体の定義から楕円曲線上のWeil予想の証明まで. お疲れさまでした. すばらしい.

Silvermanの楕円曲線の本をほぼ踏襲していたので大昔に読んだときの自分のノートを見ながら思い出しつつ懐かしむ. 前半, 細かい証明はしないのならvarietyは多項式の零点としてさくっと進めて後半に時間をとってもよかったかもしれない.

9月21日_

mcl

いろいろやったすえ, LLVMでは速度出せないと分かったのでnasmで書くことにする. ただループとかifdefとかマクロでどうするのか調べて書くのがとても面倒.

Xbyak使いたい. 機能限定版でよいのでXbyakの出力がnasmソースになるようなものを作るか.

9月20日_

無線LAN調子悪し

家のマシン同士の接続がどうも調子悪い. どれもインターネットにはつながってるけどA → BはつながるけどCやDからBにはつながらない. ただCやDからAにはつながるのでそれを経由するとBにはつながる. 再起動直後はつながらないけどしばらくしたら一瞬つながってまた切れるとか不安定.

Windows Updateでfirewallの設定が変わったのかといろいろみたけど分からない. 半日ぐだぐだしていてルータをリセットしたら直った.

9月19日_

mcl

testまわりのリファクタリング.

9月17日_

体が動かん

最近, 休みは殆ど寝てる, というか体が動かない.

9月16日_

Random Beacons in Decentralized Networks

私のBLS署名の実装を使ったデモもあるらしい. Zcashというのもペアリングを使ってるようだし, ブロックチェイン系はにぎやかだ. 中身知らないのでこれから勉強する.

9月15日_

C/C++プログラマのための開発ツール

少し前に社内で講義したときのものに加筆修正したものを公開した.

9月14日_

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の効率が上がったからかな.

9月10日_

OS XのNX bit

サイト引っ越しのときに発掘した昔のネタ発表Cプログラマのためのカッコつけないプログラミングの勧めPDF. ソースコードは fac.c. 2010年9月なのでもう6年近く前だった. 明治大学のMiyashita Lab.では9月24日にもまた「普通じゃないプログラミング」をするらしい.

OS Xでも動かせないか試してみたが, Linuxの-z execstackのようなオプションは見当たらなかった. OSが問答無用でstackの実行属性はoffにしているようだ.

9月9日_

Intel Parallel Studio XE Professional Edition

OSSライセンスというのがあったので申し込んでみたら受諾された. 数十万するソフトなのでとてもありがたい. いろいろ試してみよう.

9月8日_

Re: runtime error

配列のやりとりを全て[]Aから[]*Aに変更して構造体のコピーを避けるようにしたら大丈夫になった.

runtime.SetFinalizer(p, destroy)で登録したpに対して, そのインスタンスが別のものからコピーされるとdestroyAで削除するselfが別のものになってエラーということかな.

9月7日_

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
}
9月6日_

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は不要だったかも.

ああ, エラー処理もちゃんとかかないといけないな.

9月5日_

『悟浄出立』(万城目学)

著名な話の脇役からの視点による短編集. 意表をつかれたがとても面白い. 表題作とラストの「父司馬遷」がよかった.

9月4日_

Caffe Optimized for Intel Architecture: Applying Modern Code Techniques

XbyakにAVX-512が欲しいと行ってた人はこのためだったのか. Intelの最適化のページで紹介されるのはとても感慨深い.

頑張って対応させてよかった.

9月3日_

『私と月につきあって』(野尻抱介)

おもろかった. 無理だろと思うようなトラブルの中で, よくそういう解決方法を思いついた. すばらしい.

9月2日_

『宇宙は無数にあるのか』(佐藤勝彦)

インフレーションの話がわかりやすかった. 人間原理はうさんくさいというか逃げな気がする.

宇宙の大きさ420億光年の中の素粒子の個数を数えてパターンを勘定しているところ, 量子力学的に単純に組み合わせを数えればよいわけではないと思うのだがどうだろう.

今日はISEC委員会でまた機械振興会館.

何かといくことになるなあ.

9月1日_

BLS署名

何度かリクエストに応じて作り替えてほぼ固まった. 基本的な機能に加えて, VSS(Verifiable secret sharing)相当のもの, 署名や公開鍵の加法性, PoP(Proof of Possesion)の機能を持つ.

これらがどう応用されるのか. そのうち公開されるらしい. 興味深い.


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