みなさん成長が著しい. 担当してるこちらのほうがいろいろ教えてもらってます.
ラボユースの懇親会が終わってから参加. 本を順番に読んでいくのではなく, 気になったところをいろいろディスカッションするスタイル. 結構新鮮.
みなさん, ああだこうだいうのでおもしろい.
みなさん成長が著しい. 担当してるこちらのほうがいろいろ教えてもらってます.
ラボユースの懇親会が終わってから参加. 本を順番に読んでいくのではなく, 気になったところをいろいろディスカッションするスタイル. 結構新鮮.
みなさん, ああだこうだいうのでおもしろい.
mclの群G1のスカラー倍さんのGLVアルゴリズムを実装
実装に結構時間がかかってしまった. 1.5倍速くなった. 2bitずつみるほうがもっと速くなるかと思ったけど逆に遅くなった. normalize()が増えた分のコストが見合わなかった? あとで再度計測する.
bn384
LLVMルーチンが正しく選択されてなかったので修正. ちょっと速くなって0.93msec. 他の曲線も実装したい.
reverse_iteratorでerase
同僚にC++/STLのeraseはreverse_iteratorをなぜ受け入れないのと聞かれた. 考えたことがないけどややこしいからだろうか.
begin() end() ↓ i ↓ +--+--+--+--+--+ | 0| 1| 2| 3| 4| +--+--+--+--+--+ ↑ ri ↑ rend() rbegin()
reverse_iteratorからbase()によって得られたiteratorはiterator方向に一つ進んだもの. つまり図でri.base() == i. だからrbegin()を指す要素を消したい場合は
v.erase(rbegin().base())
ではなく
v.erase((++rbegin()).base())
にしなければならない. 試すまで不安だったけどrend().base() == begin()は成り立つのね. 逆にiからmake_reverse_iteratorするとriに戻る.
make_reverse_iterator(i) == ri.
つまり
std::make_reverse_iterator(v.erase((++ri).base()))
でriの場所をeraseしてriの次のiteratorを返すことになる.
4時間
痛みが和らいでいる状態で横になって寝て痛みで目が覚めるまでどうも4時間が限界のようだ.
何が痛いのか気になったので『よくわかる首・肩関節動きとしくみ』(永木和載)を読んでみた. 専門用語が多すぎる(一つ一つ解説してくれてるのだが)のと, それをみっちり読む心の余裕が無い(とりあえず痛い)のであれだが, 肩は構造がめちゃくちゃ複雑で痛みやすいということがわかった.
夜間痛(私の症状はそういうようだ)を軽減する寝かたも載っていたので試してみたがあんまし効果がなかった.
over-aligned new
SIMD命令のために16byteや32byteアライメントが必要なデータはnewではなくaligned_mallocなどを使うかmallocして自分で調整しないといけなかった.
C++11でアライメントするための命令alignofが追加されたけどnewは変わらず. C++17でようやくnewを使ってアラインメントできるようになる.
gcc 7では-faligned-newをつけるか-std=c++1zで使えるようになる. Visual Studio 2017はまだのようだ.
#include <stdio.h> struct A { alignas(32) int v[16]; }; int main() { A *p = new A(); printf("p=%p\n", (void*)p); } gcc t.cpp -std=c++11 p=0x12d5b90 // アライメントされていない gcc t.cpp -std=c++1z p=0xf471e0 // アライメントされている
レースコンディション
3年前に書いた状態遷移クラスの付近でバグが出るというので調べたらそのクラスのバグだった.
状態遷移と, commit, abortの部分はmutexで守られていたけど, commit完了からdstrで後処理する間に隙間があった. すいません.
BN曲線の384ビットペアリング
mclではできるだけ汎用的に作ろうとしていたけど本当に動くか心配だった. やってみたらあっさり動いて一安心. LLVMバンザイ. Skylake 3.4GHzで1.07msec. 基礎体のチューニングはこれからやってみる. 1msecは切りたいね.
7種類のアンチウイルスソフトをとっかえひっかえインストールするとマシンが不安定になるか心配だった. またあとでレジストリやファイルを走査して不要なものを削除しておこう.
高機能暗号の一般的な話. 大手による実装者の本音(?)などが伺えてよかった. Microsoftが想像以上に頑張っていた. 私もできるところをふやしていこう.
travis-ci
mclで初めて使ってみた(.travis.yml). 何故かbin/bn256_test.exeの依存関係の解消に失敗するのでそれだけbuildしないようにした.
原因追求はまたの機会に.
3/10追記. bn256_test.cppをgit addしていなかったというしょうもない落ち. orz
Cインタフェース
C++のライブラリをCから呼べるようにする場合, 今までコンストラクタ, デストラクタに対応する関数としてT* createT(), void destroyT(T*)を作っていた. ただこの場合, デストラクタが無い言語でそれらを呼ぶのがいろいろ苦労する.
deferやfinalizerにたよってもそれが必ずしも発動するとは限らない.
Tの中身が固定長でsizeof(T)以外はメモリ確保を必要としない場合は, 呼び出し側の言語でメモリ確保した領域を渡す方が便利そうだ.
GoではそれがうまくいったのでJavaやC#でも試してみる.
法事
昨日怪我依頼, 2カ月振りに多めにあるいたのと寒い中の法事でくたくたになった. 相当体力が落ちてる. 風邪を引かないように気を付けないと.
散歩
法事で実家に戻る. 久り振りに友達に会っていろいろ面白いはなしを聞いた. 日々, 攻撃者とのバトルらしい. 大変だ.
天気がよかったのでこれまた久しぶりに京都駅や四条付近を散歩. 足が痛いのでそれほど歩けないけど気持ちよい.
『BSDを256倍使うための本』
私が担当しているサイボウズ・ラボユースの学生が読んでみたらしい. 懐かしいなと調べてみたら出版されたとき, 彼はまだ産まれていない. というか今来てる人ほとんどだれも産まれていない.
22年前だから当然なのだけど, 自分は何してたっけといろいろ思い出してしまう.