More Related Content
More from MITSUNARI Shigeo
More from MITSUNARI Shigeo(20)
私と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
- 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
- 29. • AVX-512のマニュアルは1000ページ以上
• 新規レジスタ
• フォーマットが複雑怪奇
• 理解するのにかなり時間を費やした
• 最初はマニュアルのバグも
• どうしても分からなかった部分が次版で修正されていた
• 3カ月掛かって対応
• GitHubの依頼者はIntelの人だった
• そこから奇妙な関係が始まる
大変だった
29 / 48
- 32. • iWAPT 2018
• 自動パフォーマンスチューニングの国際ワークショップ
• Intelの招待講演
• http://iwapt.org/2018/iwapt2018-invitedtalk.html#talk1
• 内容はXbyakの紹介と使い方(ありがたい)
Intelの人が宣伝してくれる
32 / 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
- 45. • JITアセンブラの移植だけでは動かない
• 「AVX-512コードを生成するコード」[AVX]を
「A64FX SVEコードを生成するコード」[SVE]に修正する必要
• 量が膨大なので大変
• AVX-512命令とSVE命令を熟知して
• Intelの最適化コード生成部を理解し
• それをSVE用の最適なコードを生成するコードを作る必要
• 速度的にクリティカルな部分は富士通が実装
• それ以外の一部のコードは私も担当
• Intelの本家oneDNNにmerge
• Intelの公式レポジトリにライバルCPU用のコードが入る
• 個人的にかなり感動
コード生成部の翻訳
45 / 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