ふと思い立ってRustコンパイラをc5.18xlargeでビルドしてみている。コンパイラ本体の並列化はまだ(オプションで有効化できるけど、stage0には適用されないのと、まだ実験段階だと思うので今回は使わない)だけど、codegen部分(LLVM)とLLVM自体のビルド(cc1plus)は超並列で走るので速そう
Conversation
Notices
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:08:25 JST
Masaki Hara
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:08:47 JST
Masaki Hara
LLVMのビルド、1分くらいで終わってしまった……
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:11:42 JST
Masaki Hara
rustc自体の並列度は(実験的なオプションを入れてコンパイルしたコンパイラを使わない限り)1だけど、一応cargoは並列で走るのでrustc_*系のcrateは同時にコンパイルできる。ただ*.cpp単位で別々にcc1plusが走るのよりはずっと粒度が落ちるのでそこまで並列化しない。
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:13:20 JST
Masaki Hara
あとRustの場合crate分割で並列化しようとしても、どうしても懸垂型の依存関係になってしまって全部というわけにはいかない。コンパイラの場合rustcで初まりrustc_driverで終わる依存関係になっていてこの2つはボトルネックになる
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:19:03 JST
Masaki Hara
16分でできた (準備で10分くらい)
$ /usr/bin/time ./x.py build
...
10520.85user 623.12system 16:36.00elapsed 1118%CPU (0avgtext+0avgdata 4090924maxresident)k
2760inputs+9767344outputs (13452major+272387221minor)pagefaults 0swaps -
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:21:03 JST
Masaki Hara
結論としては、それなりの支出さえできればコンパイラハックハンズオンが(技術的には)実施できる
-
Masaki Hara (qnighy@qnmd.info)'s status on Sunday, 02-Sep-2018 22:25:28 JST
Masaki Hara
stage1,stage2の両方あわせて16分で、実際にコンパイラを開発するときはstage1でテストすれば十分なので、書いてから精々10分待てば実行できる。実際にはrustc_*系をいじったときはもう少しコンパイル時間を削減できるので十分短いサイクルで開発できる
-