Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
作って学ぶ コンピュータアーキテクチャ 出版にあたっての経験談
msyksphinz
September 01, 2022
Technology
0
570
作って学ぶ コンピュータアーキテクチャ 出版にあたっての経験談
msyksphinz
September 01, 2022
Tweet
Share
More Decks by msyksphinz
See All by msyksphinz
次世代を担うオープン命令セットアーキテクチャRISC-Vの最新動向
msyksphinz
3
3.6k
Rustで作るフルスクラッチQEMU型エミュレータ
msyksphinz
6
3.8k
ハードウェア記述言語Chiselを もっと活用するためのDiplomacy概説
msyksphinz
1
1.4k
ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向
msyksphinz
1
2.1k
オープンソースCPUアーキテクチャ 「RISC-V」を中心に変わる半導体の世界
msyksphinz
1
2.1k
ますます注目されるオープンCPUアーキテクチャRISC-Vの最新動向
msyksphinz
0
3.6k
Introduction of Technologies and People Supporting RISC-V Ecosystem
msyksphinz
0
3.1k
RISC-Vエコシステムを 構成する技術と立役者たち
msyksphinz
0
3.2k
試しながら学ぶ オープンソースプロセッサ RISC-V の世界
msyksphinz
1
3.8k
Other Decks in Technology
See All in Technology
JAWS-UG朝会_41_NakagawaAkihiro.pptx.pdf
anakagawa
2
610
Lyssa Adkins : Agilists Superpower and Challenge
kawaguti
PRO
1
160
アムロは成長しているのか AIから分析する
miyakemito
1
320
ROS_Japan_UG_#49_LT
maeharakeisuke
0
190
JAWS-UG AI/ML #15 - SageMaker Experimentsで始める機械学習モデルの実験管理
masatakashiwagi
0
530
日本ディープラーニング協会主催 NeurIPS 2022 技術報告会講演資料
tdailab
0
870
Kaggleシミュレーションコンペの動向
nagiss
0
160
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
180
ついに来る!TypeScript5.0の新機能
uhyo
16
8.6k
Kubernetes_EKSに入門してみる
toru_kubota
0
220
Akiba-dot-SaaS-ExtraHop
sakaitakeshi
1
100
証明書って何だっけ? 〜AWSの中間CA移行に備える〜
minorun365
3
1.9k
Featured
See All Featured
A better future with KSS
kneath
230
16k
Become a Pro
speakerdeck
PRO
6
3.2k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
Designing Experiences People Love
moore
130
22k
Writing Fast Ruby
sferik
613
58k
Designing for Performance
lara
601
65k
Mobile First: as difficult as doing things right
swwweet
213
7.8k
What's new in Ruby 2.0
geeforr
336
30k
Teambox: Starting and Learning
jrom
124
7.9k
Optimizing for Happiness
mojombo
365
64k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
31
20k
Atom: Resistance is Futile
akmur
256
24k
Transcript
作って学ぶ コンピュータアーキテクチャ LLVMとRISC-Vによる低レイヤプログラミングの基礎 出版にあたっての経験談 @msyksphinz_dev
作って分かるコンピュータアーキテクチャ LLVMとRISC-Vによる低レイヤプログラミングの基礎 • 著者:木村 優之 • 発行:技術評論社 2022年7月1日 • ISBN:978-4297129149
• コンピュータアーキテクチャの本 • ISAの知識 • RISC-Vの知識 • マイクロアーキテクチャ • これらをLLVMに落とし込む • 関数の作成 • C言語はどのようにアセンブリに落とし込まれる? • グローバル変数って具体的にアセンブリでどうなってい る? • ELFファイルって何? • … などを、LLVMの具体的な実装とともに解説
執筆までのスケジュール 2018年 2019年 2020年 2021年 2022年 Fixstars主催 「コンパイラ勉強会」 参加 LLVMの勉強
CPU0をベースに勉強 LLVMについてひたすらブログに書く 出版社に 打診 打ち合 わせ 執筆開始 初期原稿 レビュー 初期原稿 指摘事項修正 第2原稿 指摘事項修正 第3原稿 修正 第3原稿 修正 初期原稿 指摘事項 修正 最終確認 出版
LLVM勉強のきっかけ「コンパイラ勉強会」 • フィックスターズ主催 「コンパイラ勉強会」に参加 • 2018年11月10日開催 • 当時はRISC-Vの「リ」の字もなかった • たぶんまだオモチャだと思われていた
• LLVMのRISC-V対応もまだ初期段階 • 「それならイッチョ自分でやったろうか」と思い勉強を開始 → モタモタしてたら海外チームの実装が メインストリームにマージされた • 筆者は修士論文もコンパイラネタで書いており、 もともと興味があった • 非常にコミュ障な筆者は、懇親会が怖くて、発表会が終わると速攻で帰った。 https://proc-cpuinfo.fixstars.com/2018/11/compiler_study_report/
「きつねさん」は神本 • おそらく最古のLLVMについて書かれた日本語書籍 • フロントエンド・バックエンド両方について解説 • 弱点 • 情報が古くなっている。 2013年に出版されたのでしかたなし
• LLVM 3.5をベースに書かれている • 猛烈な量の日本語。図がほとんど無く理解に苦しむ • 表紙の可愛いキツネさんは内部にほとんど登場しない • LLVM+RISC-V本は「きつねさんに追いつけ追い越せ」を 目標に執筆されました。
「CPU0」は神資料 • Creating an LLVM Backend for the Cpu0 Architecture
• CPU0という仮想のアーキテクチャに対して LLVMのバックエンドを一から作成する • かなり詳細なところまで解説されている • 可変長引数 • C++の例外 • ELFの生成 • 「RISC-V + LLVM本」の執筆に際して、本資料は かなり参考にしました。感謝いたします https://jonathan2251.github.io/lbd/
執筆から出版まで • 本書は「出版社への持ち込み」から始まりました • こういうケースはレアらしい • LLVMバックエンドについてブログ記事を書いていると、 最終的にWord 300ページ程度の規模になった •
「これ出版できるんじゃない?」 • メールをしてみると、すごい勢いでミーティングが設置された すみません、 LLVMの本出版 したいんですけど 了解です。 担当者つけるんで 待ってください 返信はや! 担当者です。 ミーティングしま しょう
本書のターゲットをどこにもっていくか? • 「LLVMバックエンド」だけでは、 ブルーオーシャンどころか誰得?になってしまう コンピュータ アーキテクチャ 勉強したいなあ… ハードから 学ぶ? ソフトから
学ぶ? • 本書はソフトウェアからのアプローチ • というかそういう方針でストーリーを作った • コンピュータを学ぶには いろんなアプローチがある • CPUを作る? • コンパイラを作る? • OSを作る? • コンパイラ作成を通じて、 ハードとソフトの境界を体験
ストーリーを考える • 具体的には「目次」 • どういう構成でいくか • 編集者さんと、Google Docsで 目次を管理 •
まあこの辺のツールはなんでもいい • このへん、めっちゃ大事 • Go / No Goに関わるところだと思う
目次 • 第1部 • 第1章:コンピュータアーキ テクチャとISAの基礎知識 • 第2章:RISC-Vの基礎知識 • 第3章:LLVMの基礎知識
• 第2部 • 第4章:LLVMバックエンドの仕組み • 第5章:簡単な関数や演算のサポート • 第6章:算術演算・グローバル変数・ ポインタ・制御構文のサポート • 第7章:オブジェクトファイル・ ELFファイル出力のサポート • 第8章:LLVMでのテスト記述と リグレッション 最終的には伝わりにくくなってしまったが、 2部構成 すごく偏りがあるように見えるが、それは 気にしない
こだわり「いま何の話をしているの?」 • ラベルを付与「今なんの話をしているのか?」
こだわり「大量の図」 • きつねさんは神本だが、図が極端に少ない • アルゴリズム、データフロー、クラスの関係など、各種図を大 量に追加 • 執筆のかなりの時間を占める • 分かりやすさにこだわっているので、見てくれると嬉しい
• リポジトリを検索すると、全体で230個のPNGファイル • 全部入っているとすると、2ページに1枚の図が入っている
校正つらい • 「出版」舐めてました… • 筆者の稚拙な原稿のせいで、大量の修正が発生 • 技術的なミス • ストーリー的なミス •
実際、最初の原稿に対して9割は校正により書き換わったと思う • 指摘項目はGitHub上のレビュー機能で管理したが、多すぎて途中でページが開けなくなる • 特にストーリー的なミス • 「ある節では、何を言いたいのか?」「ある章が、どういうストーリーで進むのか?」 • 章の最初に、読者に明確にゴールを示す必要性 • このあたりの見積もりが甘く、文章の位置をかなり入れ替えることに
レビュー • 筆者は知り合いが少ない • LLVMの専門家となればなおさら • レビュアーは、当然著者が依頼しなければならない • 数少ないハードウェアの専門家の方々に頼んで大まかなチェック •
特に第1部、コンピュータアーキテクチャに関して • LLVMの細かいところはともかく、 明らかな矛盾、読みにくさなどについて徹底的なレビュー 謝辞:ハードウェア ツヨツヨ軍団 (敬称略) adachi6k dalance shuntarot taichi-ishitani tom01h
GitHub Issues/PRを用いたレビュー • GitHubの機能を用いて レビュー • 割と便利だと思った。 • 執筆はMarkdown
LLVMでかすぎ、コードの管理どうする? • 本書内に大量にLLVMのコードを埋め込む • バージョンが変わると実装が変わり危険 • LLVMのAPIの変わりやすさは異常 • 解決策: •
原稿内に自動的にコードを埋め込むスクリプト で最新コードを追いかける • 利点:スクリプトを走らせると、原稿内の埋め 込みコードがすべて最新版に置き換わる • 欠点:埋め込み無し原稿、埋め込みあり原稿が 存在し混乱 オリジナル原稿 ~は、以下を実装します。 @ref: source1 LLVMリポジトリ // @ref: source1 int main () printf(“Hello¥n”); // @endref: source1 スクリプト 生成済み原稿 ~は、以下を実装します。 int main () printf(“Hello¥n”);
LLVMコードにアノテーションを埋め込む オリジナル原稿 ソースコード 生成原稿 問題点:まちがえて自動生成した方を 変更し、スクリプト再実行時に 全部消してしまう。 → とりあえず、自動生成側はRead Onlyに
して編集できないようにする。
消えた章:より高度な構文のサポート • サポートページより無料公開予定 • しばらく触っていないのでテストが落ちないか心配 • 編集者さんの圧倒的校正が入っていません。従って読みにくい。 • 構造体引数 •
可変長引数 • 末尾再帰 まあすでに500Pもあるのに、より分厚くするわけにもいかんし
消えた章:浮動小数点のサポート • サポートページより無料公開予定 • レイトレースとかするよ! • しばらく触ってなかったので、LLVM12でビルドするとエラーが出て大焦り • 公開前には何とか修正したい •
浮動小数点について • 浮動小数点命令をLLVMに実装する • 浮動小数点算術演算命令の追加 • さまざまな浮動小数点命令の追加 • まとめとレッスン:浮動小数点演算を用いた マンデルブロ集合の描画 • さらに一歩先へ:浮動小数点演算を用いたレイトレース プログラムの実行 これ自作LLVMバックエンドで 生成したよ!
印税の話? • あんまりべらべらしゃべってはいけない気がする • ヒント:4年かけたことを考えると、良くない • 筆者は本業があるので、あまり気にしていない
商業出版にあたり、 圧倒的なプロの仕事を見せつけられた • 同人では決して経験することのないプロの仕事を体験できた • 編集者すごい • 日本語のプロには、文章を書くことに関して絶対に敵わない、と思った • 文章を書いて、売って、お金をもらうというのはこういうこと
• 文章を書くにあたっての、向き合い方を学ばしてもらった • それにしたって相変わらず筆者ブログの日本語はひどい
みんなが買うとみんなが嬉しい • LLVMの実験はすべて1台のノートPC によって行われました • ノートPCでのLLVMデバッグビルド マジつらい • Surface Laptop
2でのビルド:夜通し • ビルドを仕掛けてから就寝 → 朝に確認 • 埋め込みスクリプトでリビジョンを綺麗に出すために、LLVMリポ ジトリのリベース・リコンパイルを何度も行う必要がある • 計算パワーは必須の世界 • 継続的サポート、新規技術調査の ためにも、金銭的支援を… 調査・実装・ビルド・執筆・校正 すべてを司ったSurface Laptop 2 スペースキーが死んでいる。この間ついに引退した。
None