Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
私とOSSの25年
2021/5/15
早稲田大学情報理工学科講演会
光成滋生
• 自己紹介
• 会社紹介
• 普段の生活
• プログラミング歴(昔話)
• 午後のこ~だ
• 数学から暗号へ
• 楕円曲線とペアリング
• 関わっているプロジェクト
• Xbyak
• Intel oneDNN
• ブロックチェーン
• スーパーコンピュータ富岳
目次
2 / 48
• サイボウズ・ラボで主に暗号と最適化関係のR&D
• Twitter : @herumi
• GitHub : https://github.com/herumi/
• 資料 : https://slideshare.net/herumi/
• 主な活動
• OSS(オープンソースソフトウェア)を介在した
様々なプロジェクトとのゆるやかなつながり
自己紹介
暗号研究 ブロックチェーン
Intel oneDNN スーパーコンピュータ富岳
Xbyak
3 / 48
会社紹介
• チームワークあふれる社会を創る
• kintone
• 開発の知識がなくても業務に合わせたシステムを作成できる
• サイボウズOffice・Garoon
• スケジュールやワークフローの情報共有を支援する
• 累計12万5千社の企業
• 1千万人ユーザ
• クラウドサービス基盤
• 自社開発&運営
• データセンターも国内
サイボウズ
5 / 48
• 情報がオープン
• 経営会議を含むほとんどの議論が自社ツール上で行われる
• 横からつっこみ・質問・提案可能
• パソコン・モニタ・キーボードなどの開発環境の支援
• 電子書籍を含む書籍の購入手続きが簡単
• 「○○買ってください」と書き込むだけ
• 社内勉強会や社外活動の支援
• より長く働ける環境
• 働き方を柔軟に選択可能(ワーク重視やライフ重視など)
• (男性も)育児休暇や子供の送迎時間などを取りやすい
• 新型コロナ前から在宅勤務可能
詳細 : https://blog.cybozu.io/entry/2020/10/13/124546
社内環境・風土
6 / 48
• サイボウズの研究開発部門(子会社)
• 長期的な視点で自分でテーマを決めて研究・開発
• 自分の研究開発したOSSの著作権は原則個人に帰属
• https://cybozu-oss-policy.readthedocs.io/ja/latest/copyright.html
• 評価
• 論文や特許の数はカウントしない
• 社長曰く「社会に貢献しているかどうか」が重要
• 詳細 : https://cybozushiki.cybozu.co.jp/articles/m005323.html
サイボウズ・ラボ
7 / 48
• 学生支援制度
• https://labs.cybozu.co.jp/youth.html
• 学生が作りたいものをサポート
• 成果物は個人に帰属
• 奨励金制度あり
• 去年・今年はフルリモート
• 去年で10年経った
• 若干名募集中!
サイボウズ・ラボユース
8 / 48
• 研究や実装 ; 9割前後
• OSSの対応や開発をしたり、論文や資料を読んだり
• 他組織との打ち合わせ・論文執筆など
• 専門委員会、論文査読、C++WGなど少々
• ラボユース ; 1割前後
• 定例ミーティング・設計の相談やコードレビューなど
• 本社との関わり ; たまに
• 暗号・セキュリティ講義
• 本社製品のトラブルサポート(最近は殆ど無い)
• サイボウズOfficeの問題→Linuxのバグを見つけてパッチ作成
• Garoonの問題→PHPのバグを見つけて対策
私の普段の活動
9 / 48
• モチベーションの維持
• 基本的にテーマややることを全て自分で決める
• 指示されないので短期目標と長期目標設定が大変
• 気が乗らないときは休む
• インプットとアウトプットのバランス
• 気持ちの管理
• オン・オフの区別があまりない
• 有休とって開発してしまうこともしばしば
• あるテーマで疲れたら別のものにスイッチ
• 体調管理
• もう1年以上出社していない完全引きこもり
• 毎朝1時間前後ウォーキング・ジョギングなど20年以上
自分のコントロール
10 / 48
プログラミング歴
• 小学6年生
• ポケコンPC-1246
• ユーザメモリ約900バイト
• BASIC
• 中学3年生 ; FM-77AV20(8ビット)
• 大学生 ; FM-TOWNS(32ビット)
• まだBASIC
• 大学2回生
• Cコンパイラ(3.5万円); 当時コンパイラは買うものだった
• 修士1年
• 80386用アセンブラ(5.5万円) ; 当時アセンブラは買う(略
パソコン歴
12 / 48
• 『Oh! FM』(パソコン雑誌)
• 田舎ではこれしか情報源が無い
• 周りに知ってる人が誰もいない
• 6809や386のアセンブラ、言語作成、
数値計算、OS、ハードウェアなど
• 意味が分からなくても何度も読み返す
• 開発環境やマシンを持ってなくても
• 『フリーソフトウェアコレクション』
• FM-TOWNS用
• ユーザが作ったソフトを集めて富士通が安価で提供
• ソースコードが公開されているものが多かった
影響を受けたもの(1/2)
13 / 48
• FM-TOWNSのML(メーリングリスト)
• 質問したら親切にいろいろ教えてくれるコミュニティ
• Linux
• 『Linux + JE4』(1996年購入)
• メモリ2MBでHDD無しでもCD起動可能
• 起動に5分ぐらい待つけど
• kernel 1.2?
• コンパイラやアセンブラがついている!
• 画像元
http://solan2.pro.or.jp/~fuji/computerbooks/linux/linux.laser5.html
• いろんなものがソースで配付されていて自分でbuild
• 自分が作ったものはソースを公開する気持ちに
影響を受けたもの(2/2)
14 / 48
MP3エンコーダ
• MP3エンコーダ
• CDの音声データをMP3に変換するには(当時)
• CDデータをWAVファイルとして取り出してディスクに保存
• WAVファイルをMP3ファイルに変換する
• 変換に一晩掛かることも
• 私のHDDが約80MBだったので1曲(50MB)しか入らない
• 知人と高速なエンコーダを作り始める
• MLで知り合った人のお誘い
• FM-TOWNSとWindowsの両方で動作するもの
• 既存ソフトウェアを、出力は変えずに高速化する方針で
午後のこ~だ(1998~)
Windows版がこうだとは
私は長らく知らなかった
16 / 48
• SIMD対応のCPUが登場
• SIMD : 複数の整数・浮動小数点数をまとめて処理する命令
• 1997年IntelのMMX Pentium ; 整数のSIMD
• 1998年AMDのK6-2
• 専用命令3D Now!
• 続々登場する様々なSIMD命令セット
• IntelのSSE, SSE2, SSE3, SSSE3, AMDのEnhanced 3D Now!
• いろいろな協力者が現れる
• Linux, BeOS, FreeBSD, OS2など開発者のOSがばらばら
• 最終的には処理時間の9割以上をasm化
高速化への道
FM-TOWNSにK6-2を
無理やり載せて使う
アセンブラは当然非対応なので
自分で3D Now!に対応させる TOWNS HC+K6-III
レジスタの中身を見る
デバッグツールも作成
17 / 48
• 手動マージからバージョン管理システム(CVS)へ
• 初期 : メールで来たコードを私が手動でマージ(辛い)
• 他人のコミット差分メールを眺めるのはよい勉強
• 仕事でPM(プロジェクトマネージャ)を担当したときも
グループの進捗や問題点が肌感覚で分かる
• 継続的インテグレーション(CI)
• コード変更をサーバにpushしたら
ビルドと自動テスト
• 結果が不正ならメールで通知
• 1clkでも減らす競争
• 遅いと他のメンバーに上書きされて悔しい
開発スタイルの向上
コミット
ビルド
&テスト
結果
採用
18 / 48
• 複数の環境で確認することの重要性
• コンパイラの癖・バグや環境依存なものを実感
• 同じ命令を実行してもOSによって結果が異なることも
• FPUの演算モードやエラーハンドリングの違い
• 浮動小数点数の処理方法
• 精度が不要なところでは余計なものを「はしょる」
• sqr/inv/exp/logなどの計算方法 ; 未だに使える・使ってる技術
• 量が質を転化する
• オンタイムで「CD→リッピング→エンコード→MP3」可能に
• 広く使われた
• 「窓の杜金賞」「オンラインソフトウェア大賞」
• いろいろなリッピングソフトにバンドリングされる
よかったこと
19 / 48
• ブログ
• 最適化の試行錯誤の経緯など
• SIMDプログラミングの方法
• 後に「勉強になりました」と言ってもらえたことも
• その後、勉強会を主催したり参加したり
• x86最適化勉強会 2011~2018
• https://github.com/herumi/x86opti
• テキスト(無料PDF)
• 『パターン認識と機械学習の学習 普及版』
• https://herumi.github.io/prml/
• 『クラウドを支えるこれからの暗号技術』
• https://herumi.github.io/ango/
分かったことをアウトプットする
20 / 48
数学から暗号へ
• 物理や数学を中心にいろいろ勉強
• 電磁気学/解析力学/量子力学/特殊・一般相対性理論
• 関数解析/微分幾何/ゲージ理論/代数幾何/アーベル多様体 etc.
• 楕円曲線が面白い
• 暗号に使うらしい
• 1999年京都工芸繊維大学(当時)笠原先生のセミナーに参加
• 暗号のことを教えていただく
• 私は楕円曲線やペアリングなどの数学を解説
• 先生のご自宅でひたすら勉強会を定期開催
• 「楕円曲線のペアリング」を使った暗号技術を考える
• 研究者になるのは諦めて就職
• 音声・動画のコーデックや組み込みLinuxなどを扱う
大学
22 / 48
• 就職はしたけど暗号の勉強は細々と続ける
• いろんな大学の先生と共同研究
• 2004年IPA未踏スーパークリエータ
• ペアリングを使った放送型暗号の実装
• 2005年IPAの依頼でToyocryptの解読
• その後「F5.PDF」というメールが届く
• F4, F5は解読に使うグレブナー基底計算アルゴリズムの名前
• https://www.ipa.go.jp/security/enc/pressrelease/press_IPA-SMW_20050926.html
• 経産省の「情報化月間推進会議議長表彰」受賞
• じっくり研究的なことをしたくなってきた
• 2007年サイボウズ・ラボに転職
暗号研究
光成さん、F4.PDF送ったから作って
えっ?何がなんだか分かりません
23 / 48
• データを暗号化したまま処理可能な暗号方式
• 産総研、東大、早稲田大学などとの共同研究
• ユーザのプライバシーの向上
• https://herumi.github.io/she-wasm
準同型暗号
お弁当購入 購入せず
お酒購入 * *
購入せず * *
暗号文を送信 お菓子 ジュース お酒 お弁当
A * * * *
B * * * *
C * * * *
... * * * *
暗号文のままクロス集計
お弁当購入 購入せず
お酒購入 80 20
購入せず 10 30
復号
クラウドサーバ
集計後のデータ解析
24 / 48
XbyakとIntel
• 既存手法
• 組み込み関数
• 簡単だが期待通りのアセンブリコードにならないことも多い
• インラインアセンブラ
• 処理系依存・文法が嫌い(個人の感想)
• 外部アセンブラ
• 再利用しづらい
• macro, define, if elseなどの擬似命令が昔(40年?)のまま??
• C/C++との連携がしづらい
• 自分が使いたいアセンブラを開発
既存のアセンブラの不満点
26 / 48
• 見かけはpure C++
• C++の関数としてクラス化・ライブラリ化がしやすい
• JIT(実行時)コード生成
• CPUの特性に応じた柔軟な最適化が可能
• 既存のアセンブラはアセンブル時に値やコードが確定
• C/C++と連携しやすい
• 外部ツールに頼らずC++で完結する
• 2007年公開
• 自分のプログラム開発で使う
• 暗号ライブラリの開発など
• まれにゲームエミュレータなどで使われるがマイナー
• そもそもアセンブラというカテゴリがマイナー
Xbyak
27 / 48
• 2016年4月GitHubでAVX-512に対応してという依頼
• AVX-512はIntelの当時最新のSIMD命令セット
• まだその命令を実行できるCPUが世の中に無い
• Knights Landing(一般向けじゃない)は2016年6月
• Skylake-Xは2017年
AVX-512対応
そうだ、すぐに使いたい
深層学習ライブラリCaffeで使うつもり
将来的には対応したいけど
そんなに早く使いたいの?
分かった。AVX-512のフォーマットから勉強始めるよ
28 / 48
• AVX-512のマニュアルは1000ページ以上
• 新規レジスタ
• フォーマットが複雑怪奇
• 理解するのにかなり時間を費やした
• 最初はマニュアルのバグも
• どうしても分からなかった部分が次版で修正されていた
• 3カ月掛かって対応
• GitHubの依頼者はIntelの人だった
• そこから奇妙な関係が始まる
大変だった
29 / 48
• Intelが新しいCPUを発表したときの主な流れ
• IntelがCPUのスペックを公開する
→各種ツールが対応する→CPUが発売される
• GitHub上でXbyakに対応依頼やパッチが送られて来る
• 確認手段がマニュアルのみで辛いことが多い
• Intelが独自にXbyakにパッチを当てることも
• そのパッチが間違っていたので
「本家が対応したからそちらを使って」とお願いした
個人が企業をサポート?
パッチのバグを直して4FMAPSに対応したけどOp/En
T1_4Xはちゃんと動いてる? 自分では確認できない
Intelの社内バージョン(未公開)の
エミュレータでチェックしたよ
30 / 48
• Twitterでマシン欲しいなと
つぶやく
• 2CPU(100万円x2)112コア
サーバを送ってくださる
• Intel AMXの発表のとき
• 新CPUのスペック公開と同時に
パッチが来た
• GitHubのissueを眺める
• AMXって何?
全然知らないと焦る
• え、公開されたばかり???
• gcc, clangよりも先
嬉しいことも
31 / 48
• iWAPT 2018
• 自動パフォーマンスチューニングの国際ワークショップ
• Intelの招待講演
• http://iwapt.org/2018/iwapt2018-invitedtalk.html#talk1
• 内容はXbyakの紹介と使い方(ありがたい)
Intelの人が宣伝してくれる
32 / 48
• https://github.com/oneapi-src/oneDNN
• Intelが提唱する深層学習(DNN)のための
クロスプラットフォームライブラリ
• DNNに必要な基本演算を提供
• IntelだけでなくAArch64, NVIDIA GPUなどもサポート
• PyTorch, Tensorflow, PaddlePaddle, ONNX等のアプリで利用
画像元 https://software.intel.com/content/www/us/en/develop/tools/oneapi/ai-analytics-toolkit.html
Intel oneDNN
33 / 48
• 2021年4月7日のItmediaの記事
• Intelが「第3世代Xeonスケーラブルプロセッサ(Ice Lake)」
を発表 最大40コアで処理能力を向上
oneDNNのCPUエンジン
この部分にXbyakが利用されている
画像元 https://www.itmedia.co.jp/pcuser/articles/2104/07/news122.html
34 / 48
ブロックチェーン
• ペアリング暗号の研究は1999年から
実装は2003年の未踏IPAから継続していた
• 何度か世界最速実装して論文投稿
• 当時高速な実装のソースを公開する人はあまりいなかった
• 私ぐらい?
• 私のソースを
改良してレコード更新
• でもソースは非公開
• それって...
• http://sac2013.irmacs.sfu.ca/slides/s1.pdf
• 2010年に(理論の話で)IEICE論文賞受賞
ペアリング暗号の研究と開発
Xbyakによる
私の実装
36 / 48
• ペアリングを使ったゼロ知識証明の一種
• Aさんがある知識wを持っていることを
Bさんにその知識wを教えずに納得してもらう暗号技術
• 2014年にzk-SNARKの提案者からパッチと対応依頼
• https://github.com/scipr-lab/libsnark
• 当時Zcashなどで実験的に利用?
• ビットコイン ; 「AがBにC円送った」という情報は公開
• Zcash ; 「○が△に□円送った」としたい
• 中身は教えないがお金の動き
inputX + inputY = outputZ + outputW
は成立してほしい
zk-SNARK
37 / 48
• 2016年7月BLS署名の実装の依頼
• 当時まだ数名?
• BLS署名 ; ペアリングを使った高機能な署名
• 署名を使った多数決や複数個の署名を一つに集約したり可能
• そんな面白い使い方が。使ってもらえるならありがたい。
• 2019年Zurichの研究所にお宅訪問(議論のため軟禁状態?)
• 2021年5月 ; 200人近いメンバー & 3拠点
DFINITY
2017年にP2Pレイヤーのデモ
38 / 48
• 2019年Road to Devconという
勉強会で発表
• そのときDevconというのを知る
しかしチケットは既に売り切れ
• 主催者にお願いして手配していただく
• ありがとうございました
• 2019年Devcon 5
• 大阪開催参加者数千人?
• EthereumのPrysmatic Labsの人に会って使ってもらうことに
• 他にEthereum JS VM (Node.js), AZTEC protocol, Chainsafe,
Harmony.ONE, 0chain, etc.
• いろいろなところで使われてるらしい
• 困ったときだけGitHub issueやメールが来るので詳細不明
BLS署名を使うプロジェクトの増加
Devcon 5 2019
39 / 48
• サポートが大変
• Go, Java, C#, Node.js (WebAssembly), Rust, etc.
• 今年の5月連休はIBMのメインフレームLinuxONE対応をしてた
• とは言え、いろいろな言語・環境の勉強になる
• 私のライブラリに脆弱性を見つけると賞金が出ることが
あるらしい
• 学生の質問メールもできるだけ対応
• 日本の学生からはほぼ皆無(残念)
• ウイルスメールがたくさん来る
• ピーク時は1通/1分ぐらいで何日間も
• なぜかフィルタリングされず(最近は大丈夫)
嬉しいけど困ったことも
40 / 48
スパコン
• A64FX
• 富士通が開発した富岳のCPU
• Arm v8-A命令セット(スマートフォンとほぼ同じ)+SVE
• SVE ; SIMD命令セット
• A64FXでは32個の512ビットSIMDレジスタを持つ
• Intel AVX-512とよく似た構成
• ある日の富士通での会話(想像・伝聞)
2019年富士通からコンタクトが来る
スーパーコンピュータ富岳
富岳でもDNNを使いたい GPUではなくCPUベースなので
Intelの手法を調査
内部でXbyakというものを
使ってるらしい その作者知ってる!
(Xbyakってキワモノ系と
思っていたらこんなところに...)
42 / 48
• IntelのoneDNNを富岳に移植
画像元 https://www.hpci-office.jp/invite2/documents2/meeting_A64FX_210317/TuningTechMeeting_oneDNN.pdf
富岳用DNNライブラリの構成
Xbyak for A64FX
43 / 48
• Xbyak→Xbyak_aarch64
• CPUが異なるので富岳用のJITアセンブラが必要
• クラス設計は概ねXbyakを継承
• レジスタや個別メソッド・文法の方針を議論
• 富士通が実装
• 私もデバッグやリファクタリングでサポート
• GitHubのオープンな場で作業
• やりやすくて快適
• ただしXbyak_aarch64だけでは動かない
• 何故?
移植の概略
44 / 48
• JITアセンブラの移植だけでは動かない
• 「AVX-512コードを生成するコード」[AVX]を
「A64FX SVEコードを生成するコード」[SVE]に修正する必要
• 量が膨大なので大変
• AVX-512命令とSVE命令を熟知して
• Intelの最適化コード生成部を理解し
• それをSVE用の最適なコードを生成するコードを作る必要
• 速度的にクリティカルな部分は富士通が実装
• それ以外の一部のコードは私も担当
• Intelの本家oneDNNにmerge
• Intelの公式レポジトリにライバルCPU用のコードが入る
• 個人的にかなり感動
コード生成部の翻訳
45 / 48
• Xbyak_translator
• [AVX]を[SVE]に自動変換するライブラリの開発
• 富士通の力業
• 移植の手間が大幅に減る
• パフォーマンスは手作業に比べて劣るがうまく行くときも
• 詳細はhttps://blog.fltech.dev/entry/2020/11/18/fugaku-onednn-deep-dive-ja
富士通のよりアグレッシブな戦略
46 / 48
ざっくりとした年表
'96 '98 '99 '00 '01 '04 '05 '07 '10 '14 '16 '17 '18 '19 '20 '21
コーデック
午後のこ~だ
TwinVQ, MPEG etc.
暗号 ペアリングの研究・実装
Toyocrypt
BLS署名
準同型暗号
zk-SNARK
DFINITY Ethereum, etc.
10年
Xbyak Xbyakの実装
富岳版Xbyak
Intel caffe, MKL-DNN, oneDNN
10年
欲しくなった
ペアリングもXbyakも使われるようになるまでざっくり10年
asm, Linuxに触る
富岳版DNN
Xbyakによる新規実装
未踏IPA
DAPDNA
47 / 48
• OSSの観点から自分の活動の振り返り
• 恥ずかしいと思ってもまずはコードを公開してみる
• 自分がやりたいことをしつこく長く続けている
• ペアリングの研究・実装やXbyak
• たまたまよい結果につながった(ことがある)
• (書いてないけど)負の面ももちろんある
• 声を掛けられたらできるだけ対応している
• できる範囲で(自分を追い込みすぎないように)
• 教訓的なものはないけれど
• 長くやりたいなら体に気をつけよう
まとめ
48 / 48

More Related Content

私とOSSの25年

  • 2. • 自己紹介 • 会社紹介 • 普段の生活 • プログラミング歴(昔話) • 午後のこ~だ • 数学から暗号へ • 楕円曲線とペアリング • 関わっているプロジェクト • Xbyak • Intel oneDNN • ブロックチェーン • スーパーコンピュータ富岳 目次 2 / 48
  • 3. • サイボウズ・ラボで主に暗号と最適化関係のR&D • Twitter : @herumi • GitHub : https://github.com/herumi/ • 資料 : https://slideshare.net/herumi/ • 主な活動 • OSS(オープンソースソフトウェア)を介在した 様々なプロジェクトとのゆるやかなつながり 自己紹介 暗号研究 ブロックチェーン Intel oneDNN スーパーコンピュータ富岳 Xbyak 3 / 48
  • 5. • チームワークあふれる社会を創る • kintone • 開発の知識がなくても業務に合わせたシステムを作成できる • サイボウズOffice・Garoon • スケジュールやワークフローの情報共有を支援する • 累計12万5千社の企業 • 1千万人ユーザ • クラウドサービス基盤 • 自社開発&運営 • データセンターも国内 サイボウズ 5 / 48
  • 6. • 情報がオープン • 経営会議を含むほとんどの議論が自社ツール上で行われる • 横からつっこみ・質問・提案可能 • パソコン・モニタ・キーボードなどの開発環境の支援 • 電子書籍を含む書籍の購入手続きが簡単 • 「○○買ってください」と書き込むだけ • 社内勉強会や社外活動の支援 • より長く働ける環境 • 働き方を柔軟に選択可能(ワーク重視やライフ重視など) • (男性も)育児休暇や子供の送迎時間などを取りやすい • 新型コロナ前から在宅勤務可能 詳細 : https://blog.cybozu.io/entry/2020/10/13/124546 社内環境・風土 6 / 48
  • 7. • サイボウズの研究開発部門(子会社) • 長期的な視点で自分でテーマを決めて研究・開発 • 自分の研究開発したOSSの著作権は原則個人に帰属 • https://cybozu-oss-policy.readthedocs.io/ja/latest/copyright.html • 評価 • 論文や特許の数はカウントしない • 社長曰く「社会に貢献しているかどうか」が重要 • 詳細 : https://cybozushiki.cybozu.co.jp/articles/m005323.html サイボウズ・ラボ 7 / 48
  • 8. • 学生支援制度 • https://labs.cybozu.co.jp/youth.html • 学生が作りたいものをサポート • 成果物は個人に帰属 • 奨励金制度あり • 去年・今年はフルリモート • 去年で10年経った • 若干名募集中! サイボウズ・ラボユース 8 / 48
  • 9. • 研究や実装 ; 9割前後 • OSSの対応や開発をしたり、論文や資料を読んだり • 他組織との打ち合わせ・論文執筆など • 専門委員会、論文査読、C++WGなど少々 • ラボユース ; 1割前後 • 定例ミーティング・設計の相談やコードレビューなど • 本社との関わり ; たまに • 暗号・セキュリティ講義 • 本社製品のトラブルサポート(最近は殆ど無い) • サイボウズOfficeの問題→Linuxのバグを見つけてパッチ作成 • Garoonの問題→PHPのバグを見つけて対策 私の普段の活動 9 / 48
  • 10. • モチベーションの維持 • 基本的にテーマややることを全て自分で決める • 指示されないので短期目標と長期目標設定が大変 • 気が乗らないときは休む • インプットとアウトプットのバランス • 気持ちの管理 • オン・オフの区別があまりない • 有休とって開発してしまうこともしばしば • あるテーマで疲れたら別のものにスイッチ • 体調管理 • もう1年以上出社していない完全引きこもり • 毎朝1時間前後ウォーキング・ジョギングなど20年以上 自分のコントロール 10 / 48
  • 12. • 小学6年生 • ポケコンPC-1246 • ユーザメモリ約900バイト • BASIC • 中学3年生 ; FM-77AV20(8ビット) • 大学生 ; FM-TOWNS(32ビット) • まだBASIC • 大学2回生 • Cコンパイラ(3.5万円); 当時コンパイラは買うものだった • 修士1年 • 80386用アセンブラ(5.5万円) ; 当時アセンブラは買う(略 パソコン歴 12 / 48
  • 13. • 『Oh! FM』(パソコン雑誌) • 田舎ではこれしか情報源が無い • 周りに知ってる人が誰もいない • 6809や386のアセンブラ、言語作成、 数値計算、OS、ハードウェアなど • 意味が分からなくても何度も読み返す • 開発環境やマシンを持ってなくても • 『フリーソフトウェアコレクション』 • FM-TOWNS用 • ユーザが作ったソフトを集めて富士通が安価で提供 • ソースコードが公開されているものが多かった 影響を受けたもの(1/2) 13 / 48
  • 14. • FM-TOWNSのML(メーリングリスト) • 質問したら親切にいろいろ教えてくれるコミュニティ • Linux • 『Linux + JE4』(1996年購入) • メモリ2MBでHDD無しでもCD起動可能 • 起動に5分ぐらい待つけど • kernel 1.2? • コンパイラやアセンブラがついている! • 画像元 http://solan2.pro.or.jp/~fuji/computerbooks/linux/linux.laser5.html • いろんなものがソースで配付されていて自分でbuild • 自分が作ったものはソースを公開する気持ちに 影響を受けたもの(2/2) 14 / 48
  • 16. • MP3エンコーダ • CDの音声データをMP3に変換するには(当時) • CDデータをWAVファイルとして取り出してディスクに保存 • WAVファイルをMP3ファイルに変換する • 変換に一晩掛かることも • 私のHDDが約80MBだったので1曲(50MB)しか入らない • 知人と高速なエンコーダを作り始める • MLで知り合った人のお誘い • FM-TOWNSとWindowsの両方で動作するもの • 既存ソフトウェアを、出力は変えずに高速化する方針で 午後のこ~だ(1998~) Windows版がこうだとは 私は長らく知らなかった 16 / 48
  • 17. • SIMD対応のCPUが登場 • SIMD : 複数の整数・浮動小数点数をまとめて処理する命令 • 1997年IntelのMMX Pentium ; 整数のSIMD • 1998年AMDのK6-2 • 専用命令3D Now! • 続々登場する様々なSIMD命令セット • IntelのSSE, SSE2, SSE3, SSSE3, AMDのEnhanced 3D Now! • いろいろな協力者が現れる • Linux, BeOS, FreeBSD, OS2など開発者のOSがばらばら • 最終的には処理時間の9割以上をasm化 高速化への道 FM-TOWNSにK6-2を 無理やり載せて使う アセンブラは当然非対応なので 自分で3D Now!に対応させる TOWNS HC+K6-III レジスタの中身を見る デバッグツールも作成 17 / 48
  • 18. • 手動マージからバージョン管理システム(CVS)へ • 初期 : メールで来たコードを私が手動でマージ(辛い) • 他人のコミット差分メールを眺めるのはよい勉強 • 仕事でPM(プロジェクトマネージャ)を担当したときも グループの進捗や問題点が肌感覚で分かる • 継続的インテグレーション(CI) • コード変更をサーバにpushしたら ビルドと自動テスト • 結果が不正ならメールで通知 • 1clkでも減らす競争 • 遅いと他のメンバーに上書きされて悔しい 開発スタイルの向上 コミット ビルド &テスト 結果 採用 18 / 48
  • 19. • 複数の環境で確認することの重要性 • コンパイラの癖・バグや環境依存なものを実感 • 同じ命令を実行してもOSによって結果が異なることも • FPUの演算モードやエラーハンドリングの違い • 浮動小数点数の処理方法 • 精度が不要なところでは余計なものを「はしょる」 • sqr/inv/exp/logなどの計算方法 ; 未だに使える・使ってる技術 • 量が質を転化する • オンタイムで「CD→リッピング→エンコード→MP3」可能に • 広く使われた • 「窓の杜金賞」「オンラインソフトウェア大賞」 • いろいろなリッピングソフトにバンドリングされる よかったこと 19 / 48
  • 20. • ブログ • 最適化の試行錯誤の経緯など • SIMDプログラミングの方法 • 後に「勉強になりました」と言ってもらえたことも • その後、勉強会を主催したり参加したり • x86最適化勉強会 2011~2018 • https://github.com/herumi/x86opti • テキスト(無料PDF) • 『パターン認識と機械学習の学習 普及版』 • https://herumi.github.io/prml/ • 『クラウドを支えるこれからの暗号技術』 • https://herumi.github.io/ango/ 分かったことをアウトプットする 20 / 48
  • 22. • 物理や数学を中心にいろいろ勉強 • 電磁気学/解析力学/量子力学/特殊・一般相対性理論 • 関数解析/微分幾何/ゲージ理論/代数幾何/アーベル多様体 etc. • 楕円曲線が面白い • 暗号に使うらしい • 1999年京都工芸繊維大学(当時)笠原先生のセミナーに参加 • 暗号のことを教えていただく • 私は楕円曲線やペアリングなどの数学を解説 • 先生のご自宅でひたすら勉強会を定期開催 • 「楕円曲線のペアリング」を使った暗号技術を考える • 研究者になるのは諦めて就職 • 音声・動画のコーデックや組み込みLinuxなどを扱う 大学 22 / 48
  • 23. • 就職はしたけど暗号の勉強は細々と続ける • いろんな大学の先生と共同研究 • 2004年IPA未踏スーパークリエータ • ペアリングを使った放送型暗号の実装 • 2005年IPAの依頼でToyocryptの解読 • その後「F5.PDF」というメールが届く • F4, F5は解読に使うグレブナー基底計算アルゴリズムの名前 • https://www.ipa.go.jp/security/enc/pressrelease/press_IPA-SMW_20050926.html • 経産省の「情報化月間推進会議議長表彰」受賞 • じっくり研究的なことをしたくなってきた • 2007年サイボウズ・ラボに転職 暗号研究 光成さん、F4.PDF送ったから作って えっ?何がなんだか分かりません 23 / 48
  • 24. • データを暗号化したまま処理可能な暗号方式 • 産総研、東大、早稲田大学などとの共同研究 • ユーザのプライバシーの向上 • https://herumi.github.io/she-wasm 準同型暗号 お弁当購入 購入せず お酒購入 * * 購入せず * * 暗号文を送信 お菓子 ジュース お酒 お弁当 A * * * * B * * * * C * * * * ... * * * * 暗号文のままクロス集計 お弁当購入 購入せず お酒購入 80 20 購入せず 10 30 復号 クラウドサーバ 集計後のデータ解析 24 / 48
  • 26. • 既存手法 • 組み込み関数 • 簡単だが期待通りのアセンブリコードにならないことも多い • インラインアセンブラ • 処理系依存・文法が嫌い(個人の感想) • 外部アセンブラ • 再利用しづらい • macro, define, if elseなどの擬似命令が昔(40年?)のまま?? • C/C++との連携がしづらい • 自分が使いたいアセンブラを開発 既存のアセンブラの不満点 26 / 48
  • 27. • 見かけはpure C++ • C++の関数としてクラス化・ライブラリ化がしやすい • JIT(実行時)コード生成 • CPUの特性に応じた柔軟な最適化が可能 • 既存のアセンブラはアセンブル時に値やコードが確定 • C/C++と連携しやすい • 外部ツールに頼らずC++で完結する • 2007年公開 • 自分のプログラム開発で使う • 暗号ライブラリの開発など • まれにゲームエミュレータなどで使われるがマイナー • そもそもアセンブラというカテゴリがマイナー Xbyak 27 / 48
  • 28. • 2016年4月GitHubでAVX-512に対応してという依頼 • AVX-512はIntelの当時最新のSIMD命令セット • まだその命令を実行できるCPUが世の中に無い • Knights Landing(一般向けじゃない)は2016年6月 • Skylake-Xは2017年 AVX-512対応 そうだ、すぐに使いたい 深層学習ライブラリCaffeで使うつもり 将来的には対応したいけど そんなに早く使いたいの? 分かった。AVX-512のフォーマットから勉強始めるよ 28 / 48
  • 29. • AVX-512のマニュアルは1000ページ以上 • 新規レジスタ • フォーマットが複雑怪奇 • 理解するのにかなり時間を費やした • 最初はマニュアルのバグも • どうしても分からなかった部分が次版で修正されていた • 3カ月掛かって対応 • GitHubの依頼者はIntelの人だった • そこから奇妙な関係が始まる 大変だった 29 / 48
  • 30. • Intelが新しいCPUを発表したときの主な流れ • IntelがCPUのスペックを公開する →各種ツールが対応する→CPUが発売される • GitHub上でXbyakに対応依頼やパッチが送られて来る • 確認手段がマニュアルのみで辛いことが多い • Intelが独自にXbyakにパッチを当てることも • そのパッチが間違っていたので 「本家が対応したからそちらを使って」とお願いした 個人が企業をサポート? パッチのバグを直して4FMAPSに対応したけどOp/En T1_4Xはちゃんと動いてる? 自分では確認できない Intelの社内バージョン(未公開)の エミュレータでチェックしたよ 30 / 48
  • 31. • Twitterでマシン欲しいなと つぶやく • 2CPU(100万円x2)112コア サーバを送ってくださる • Intel AMXの発表のとき • 新CPUのスペック公開と同時に パッチが来た • GitHubのissueを眺める • AMXって何? 全然知らないと焦る • え、公開されたばかり??? • gcc, clangよりも先 嬉しいことも 31 / 48
  • 32. • iWAPT 2018 • 自動パフォーマンスチューニングの国際ワークショップ • Intelの招待講演 • http://iwapt.org/2018/iwapt2018-invitedtalk.html#talk1 • 内容はXbyakの紹介と使い方(ありがたい) Intelの人が宣伝してくれる 32 / 48
  • 33. • https://github.com/oneapi-src/oneDNN • Intelが提唱する深層学習(DNN)のための クロスプラットフォームライブラリ • DNNに必要な基本演算を提供 • IntelだけでなくAArch64, NVIDIA GPUなどもサポート • PyTorch, Tensorflow, PaddlePaddle, ONNX等のアプリで利用 画像元 https://software.intel.com/content/www/us/en/develop/tools/oneapi/ai-analytics-toolkit.html Intel oneDNN 33 / 48
  • 34. • 2021年4月7日のItmediaの記事 • Intelが「第3世代Xeonスケーラブルプロセッサ(Ice Lake)」 を発表 最大40コアで処理能力を向上 oneDNNのCPUエンジン この部分にXbyakが利用されている 画像元 https://www.itmedia.co.jp/pcuser/articles/2104/07/news122.html 34 / 48
  • 36. • ペアリング暗号の研究は1999年から 実装は2003年の未踏IPAから継続していた • 何度か世界最速実装して論文投稿 • 当時高速な実装のソースを公開する人はあまりいなかった • 私ぐらい? • 私のソースを 改良してレコード更新 • でもソースは非公開 • それって... • http://sac2013.irmacs.sfu.ca/slides/s1.pdf • 2010年に(理論の話で)IEICE論文賞受賞 ペアリング暗号の研究と開発 Xbyakによる 私の実装 36 / 48
  • 37. • ペアリングを使ったゼロ知識証明の一種 • Aさんがある知識wを持っていることを Bさんにその知識wを教えずに納得してもらう暗号技術 • 2014年にzk-SNARKの提案者からパッチと対応依頼 • https://github.com/scipr-lab/libsnark • 当時Zcashなどで実験的に利用? • ビットコイン ; 「AがBにC円送った」という情報は公開 • Zcash ; 「○が△に□円送った」としたい • 中身は教えないがお金の動き inputX + inputY = outputZ + outputW は成立してほしい zk-SNARK 37 / 48
  • 38. • 2016年7月BLS署名の実装の依頼 • 当時まだ数名? • BLS署名 ; ペアリングを使った高機能な署名 • 署名を使った多数決や複数個の署名を一つに集約したり可能 • そんな面白い使い方が。使ってもらえるならありがたい。 • 2019年Zurichの研究所にお宅訪問(議論のため軟禁状態?) • 2021年5月 ; 200人近いメンバー & 3拠点 DFINITY 2017年にP2Pレイヤーのデモ 38 / 48
  • 39. • 2019年Road to Devconという 勉強会で発表 • そのときDevconというのを知る しかしチケットは既に売り切れ • 主催者にお願いして手配していただく • ありがとうございました • 2019年Devcon 5 • 大阪開催参加者数千人? • EthereumのPrysmatic Labsの人に会って使ってもらうことに • 他にEthereum JS VM (Node.js), AZTEC protocol, Chainsafe, Harmony.ONE, 0chain, etc. • いろいろなところで使われてるらしい • 困ったときだけGitHub issueやメールが来るので詳細不明 BLS署名を使うプロジェクトの増加 Devcon 5 2019 39 / 48
  • 40. • サポートが大変 • Go, Java, C#, Node.js (WebAssembly), Rust, etc. • 今年の5月連休はIBMのメインフレームLinuxONE対応をしてた • とは言え、いろいろな言語・環境の勉強になる • 私のライブラリに脆弱性を見つけると賞金が出ることが あるらしい • 学生の質問メールもできるだけ対応 • 日本の学生からはほぼ皆無(残念) • ウイルスメールがたくさん来る • ピーク時は1通/1分ぐらいで何日間も • なぜかフィルタリングされず(最近は大丈夫) 嬉しいけど困ったことも 40 / 48
  • 42. • A64FX • 富士通が開発した富岳のCPU • Arm v8-A命令セット(スマートフォンとほぼ同じ)+SVE • SVE ; SIMD命令セット • A64FXでは32個の512ビットSIMDレジスタを持つ • Intel AVX-512とよく似た構成 • ある日の富士通での会話(想像・伝聞) 2019年富士通からコンタクトが来る スーパーコンピュータ富岳 富岳でもDNNを使いたい GPUではなくCPUベースなので Intelの手法を調査 内部でXbyakというものを 使ってるらしい その作者知ってる! (Xbyakってキワモノ系と 思っていたらこんなところに...) 42 / 48
  • 44. • Xbyak→Xbyak_aarch64 • CPUが異なるので富岳用のJITアセンブラが必要 • クラス設計は概ねXbyakを継承 • レジスタや個別メソッド・文法の方針を議論 • 富士通が実装 • 私もデバッグやリファクタリングでサポート • GitHubのオープンな場で作業 • やりやすくて快適 • ただしXbyak_aarch64だけでは動かない • 何故? 移植の概略 44 / 48
  • 45. • JITアセンブラの移植だけでは動かない • 「AVX-512コードを生成するコード」[AVX]を 「A64FX SVEコードを生成するコード」[SVE]に修正する必要 • 量が膨大なので大変 • AVX-512命令とSVE命令を熟知して • Intelの最適化コード生成部を理解し • それをSVE用の最適なコードを生成するコードを作る必要 • 速度的にクリティカルな部分は富士通が実装 • それ以外の一部のコードは私も担当 • Intelの本家oneDNNにmerge • Intelの公式レポジトリにライバルCPU用のコードが入る • 個人的にかなり感動 コード生成部の翻訳 45 / 48
  • 46. • Xbyak_translator • [AVX]を[SVE]に自動変換するライブラリの開発 • 富士通の力業 • 移植の手間が大幅に減る • パフォーマンスは手作業に比べて劣るがうまく行くときも • 詳細はhttps://blog.fltech.dev/entry/2020/11/18/fugaku-onednn-deep-dive-ja 富士通のよりアグレッシブな戦略 46 / 48
  • 47. ざっくりとした年表 '96 '98 '99 '00 '01 '04 '05 '07 '10 '14 '16 '17 '18 '19 '20 '21 コーデック 午後のこ~だ TwinVQ, MPEG etc. 暗号 ペアリングの研究・実装 Toyocrypt BLS署名 準同型暗号 zk-SNARK DFINITY Ethereum, etc. 10年 Xbyak Xbyakの実装 富岳版Xbyak Intel caffe, MKL-DNN, oneDNN 10年 欲しくなった ペアリングもXbyakも使われるようになるまでざっくり10年 asm, Linuxに触る 富岳版DNN Xbyakによる新規実装 未踏IPA DAPDNA 47 / 48
  • 48. • OSSの観点から自分の活動の振り返り • 恥ずかしいと思ってもまずはコードを公開してみる • 自分がやりたいことをしつこく長く続けている • ペアリングの研究・実装やXbyak • たまたまよい結果につながった(ことがある) • (書いてないけど)負の面ももちろんある • 声を掛けられたらできるだけ対応している • できる範囲で(自分を追い込みすぎないように) • 教訓的なものはないけれど • 長くやりたいなら体に気をつけよう まとめ 48 / 48