Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
作って学ぶ コンピュータアーキテクチャ 出版にあたっての経験談
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
msyksphinz
September 01, 2022
Technology
1.8k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
作って学ぶ コンピュータアーキテクチャ 出版にあたっての経験談
msyksphinz
September 01, 2022
More Decks by msyksphinz
See All by msyksphinz
オープンソースでどこまでできる?フォーマル検証チャレンジ
msyksphinz
0
400
LiteXとオレオレCPUで作る自作SoC奮闘記
msyksphinz
0
1.9k
ハイパフォーマンスCPUの作り方_アーカイブ用.pdf
msyksphinz
0
67
次世代を担うオープン命令セットアーキテクチャRISC-Vの最新動向
msyksphinz
3
5.6k
Rustで作るフルスクラッチQEMU型エミュレータ
msyksphinz
8
4.9k
ハードウェア記述言語Chiselを もっと活用するためのDiplomacy概説
msyksphinz
1
1.9k
ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向
msyksphinz
2
2.9k
オープンソースCPUアーキテクチャ 「RISC-V」を中心に変わる半導体の世界
msyksphinz
1
2.7k
ますます注目されるオープンCPUアーキテクチャRISC-Vの最新動向
msyksphinz
0
4.7k
Other Decks in Technology
See All in Technology
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
600
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
140
徹底討論!ECS vs EKS!
daitak
3
940
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
310
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
170
自宅LLMの話
jacopen
1
670
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
130
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
180
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
170
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
230
Agile and AI Redmine Japan 2026
hiranabe
3
330
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
220
Featured
See All Featured
BBQ
matthewcrist
89
10k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
71
40k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
How to Talk to Developers About Accessibility
jct
2
240
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Building Applications with DynamoDB
mza
96
7.1k
Balancing Empowerment & Direction
lara
6
1.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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