mclのLLVM依存の切り離し
LLVMはasmコード生成にしか使っていないので中間生成物のasmを保存しておくことでユーザはLLVMなしでもコンパイルできるようにした.
x86/x64/ARM/ARM64でちゃんと動くか確認するのは結構面倒.
明日から1/2までネットワークにつながりません. マシンは非力になるけど雑音が無くなるので開発はかどるかな.
ARM版でTEPLAの2倍いけるとうれしいのだが, それには後1.4倍速くする必要がある.
それではよいお年を.
mclのLLVM依存の切り離し
LLVMはasmコード生成にしか使っていないので中間生成物のasmを保存しておくことでユーザはLLVMなしでもコンパイルできるようにした.
x86/x64/ARM/ARM64でちゃんと動くか確認するのは結構面倒.
明日から1/2までネットワークにつながりません. マシンは非力になるけど雑音が無くなるので開発はかどるかな.
ARM版でTEPLAの2倍いけるとうれしいのだが, それには後1.4倍速くする必要がある.
それではよいお年を.
mclのLLVMによるasmコード生成
静的に出力するのでIntelのBMI2命令セットを有効にしてbuildしていると持ってないマシンで例外が発生してしまう.
いろいろ考えたが今回はできるだけ広く使ってもらうことが目標の一つなのでbuild時に-mattr=bmi2ありなしの両方のコードを生成し, 片方の関数名にはサフィックスをつけて区別し, 実行時にCPU判別して切り替えられるようにした.
Windows版はもともとXbyakしか使ってないので関係ない.
mulxを使う関数だけすればよいと思っていたが生成コードを見ていると意図しないところでその他のビット演算命令が使われる可能性があるようだ. 結局同じ関数になってしまう無駄を承知で全ての関数を切り替えることにした(個別に確認するのは面倒すぎる).
niftyコース変更
@homepageサービスのために毎月1000円少々払っていたのを, サービス終了によりついに250円の基本コースに変更できた.
長年使っているメールアドレスがあるので解約はしない.
ARM64版もう少し速くなってTEPLAの4倍. LLVMまわりは一端終わりにして上位をいじろう.
mclの高速化続き
ARM64版ほんの少し速くなってTEPLAの3.98倍.
mclの高速化
最終巾の一部を若干高速化. 10%ちょい速くなった. 最速の1/1.6倍. x64版はTEPLAの5倍. ARM64版は3.9倍. 来月までに4倍越えたいな.
OpenSSL 1.1系列でbuildできない部分があったので修正. EVP_CIPHER_CTXなどのクラスの中身が見えなくなっていた.
『「レジリエンス」を育てる本』(藤野博 日戸由刈監修)
たまたま図書館で見かけて読んでみたら面白かった.
レジリエンスとは心の回復力やしなやかさを意味する.
強い心ではなく, 失敗したときに立ち直れるようになりやすくする.
「レジリエンス」(落ち込んでも立ち直る力)+「ソーシャルスキル」(失敗したときにまわりに支えを求める)+「自尊心」(課題にとりくんでいるとき成功を信じる力) というのは先日のバグの調べ方で聞かれた「どうやってモチベーションを保ちますか」という質問の答えにうまく合致する.
ラボ忘年会
何年ぶりかで忘年会. 前やったのはいつだろう.
忘年会やろう→飲まない人多し→夜だと都合つけにくい→昼にしよう→という流れでランチ会になった.
えらく景色のよい店でこういうのもよい(こういうほうがいい).
Sidechain, アイデア自体は面白いけど実現性が?な感じ. 派生物を好きなように作れると言っても, bitcoinの総量は変更できず, 匿名性も担保できるのか不明.
Re: VelvetSweatshop
この謎仕様は古いExcelだけじゃなくて今のもそうだった. Excel 2016で新しく作ったファイルにVelvetSweatshopというパスワードを付けて保存したファイルは何もせずに開ける.
PowerPoint 2016ならパスワードを聞かれる. 変なの.
When is a password not a password? When Excel sees "VelvetSweatshop"によると このパスワードで暗号化したファイルはだれでも開けるけどアンチウイルスソフトがチェックしにくくなるという(一つだけなのでパターンを追加すればいいのだけど).
VelvetSweatshop
msofficeの暗号化・復号ツールを使ってる人から, 「なんか, 暗号化されてるけどパスワード入れてないのに開けるファイルがあった. なんだろう」という質問があった.
正直古いOfficeのフォーマットなんて全く興味無いのだが, ついつい調べてしまった. 確かに暗号化されてるのにパスワード無しで開く. 私のツールだとパスワードを入れないとエラーになる. しかしそのパスワードは分からない.
LibreOfficeをインストールしてそのファイルを試したら開けたのでデバッガで追いかけてみるかとbuildしてみる.
build中にソースコードを見てみるかと眺めていたらあっさり見つけてしまった. filterdetect.cxxで
/* "VelvetSweatshop" is the built-in default encryption password used by MS Excel for the "workbook protection" feature with password. Try this first before prompting the user for a password. */ std::vector<OUString> aDefaultPasswords; aDefaultPasswords.push_back("VelvetSweatshop");
という記述があった. 試しに自作ツールで-p VelvetSweatshopをつけたらちゃんと復号できた. 昔のExcelのデフォルトパスワードってどういう経緯で付けられた仕様なんだろう. 不思議だ.
足の小指の爪
昨日で直近の締め切りがあるタスクが全て終わったので一息ついた. 疲れていたのか夜中トイレに行くとき足の指をぶつけた.
次の日痛いなと思って見たら血が出てた. 思ったより強くぶつけていたようだ.
SCIS2017
とりあえず出した. 「使いやすいように実装がんばってみた」というだけで理論的な新規性は一切ない. でもまあ, じっさいぽつぽつと使われているのでそれなりの価値はあるかな.
依頼があったのでXbyakのラベルクラスにそのラベルが定義されたアドレスを取得するgetAddress()メソッド追加.
最近ちょいちょいと複数の人から要望がある.
社内成果発表会
終わった. 今年は外部のいろいろな人と共同でやることが増えて面白かった. 来年も頑張ろう.
『「こころ」は遺伝子でどこまで決まるのか』(宮川剛)
ゲノム脳医学入門. ノックアウトマウスを使って作業記憶のみ劣化していることを突き止めていく.
最近流行のゲノム解析診断サービスに対して, どうあるべきかという提言をしているのがこういった新書では目新しい. 実際に著者が試して, どこがよくて, どういう誤りを避けるべきか書いてるのもいい.
『5アンペア生活をやってみた』(斎藤健一郎)
朝日新聞出版から出てるのかと思ったら岩波ジュニア新書だった. 福島の原発事故を機に出来るだけ電気を使わないようにする生活を選ぶ.
たいした行動力だな. 冷蔵庫を手放すのは無理そうだが箒で掃除はできるかもしれない.
Re: disp8N
dip8Nにマッチするかの処理がoffsetが負のときうっかりunsignedとして扱っていたため, 1byteにできるときも4byteのままだった.
3byte長くなるだけでプログラム自体はちゃんと動くので気がつきにくい. もちろん修正したのだけど, よく気がついたな. ツールで警告がでるのだろうか.
disp8N
NASMをアップデートしたらXbyakでいくつかテストが失敗するようになった. 調べたらNASMがバグっていた部分に合わせていたところが修正されて顕在化したのだった.
disp8NのT1Sのときのエンコーディング処理が間違っていたのだった. Intelのマニュアル、エンコーディングのところ(Opcode/Instruction, Op/En)を読んだだけでは駄目でinputSizeを文章の中で確認しないと分からない仕様はなんとかしてほしい. それとも私が読み間違いしてるのかなあ.
Re: Cybozu Tech Conf
資料とりあえずできた. 次はSCIS2017の資料.
mcl
うまく動かないと問い合わせがあって調べたら, あるヘッダファイルをC++11モードでコンパイルしたものとそうでないものを混ぜて使っていた.
まあそれはしかたないだろうな.
資料の準備. 来週はいろいろ締め切りや発表会が目白押しでやばい. なんとか乗り切らねば.
clang for Visual Studio
XbyakがWindows用のclangに一部対応してなかったので修正依頼があった.
今回初めて気がついたのだが2種類あるようだ. LLVMのサイトでダウンロードできるWindows snapshot buildsとMicrosoftのサイトからダウンロードできるもの. 後者のClang/C2はintrinsic関数は定義されているけど実体がなくてリンクエラーになった. inline assemblerはclang 3.8ではサポートしていたけどバイナリは何を書いてもint 3しか生成されないようで使えない.
前者のやつはVisual Studioのintrinsic関数と同じものが使えるようだ. というわけで前者のやつだけサポートした.
ところで今回の件はそもそも私が__xgetbv()ではなく_xgetbv()を使っていれば問題なかった. 最初ドキュメントが無くて__xgetbv()を試したら何故か動いたのでそのままになっていたんだな.