---
# System prepended metadata

title: Books

---

# Books
[An Introduction to Parallel Programming](http://www.e-tahtam.com/~turgaybilgin/2013-2014-guz/ParalelProgramlama/ParallelProg.pdf)
- 並列計算の基礎的な話（MPI, OpenMP, Pthreadsなど）
- 2, 3, 5章を各自で読ませていた（発表はなし）

[The Art of Multiprocessor Programming](http://cs.ipm.ac.ir/asoc2016/Resources/Theartofmulticore.pdf)
- 並列処理のアルゴリズム的に面白い話題（本質的で面白いと思う）
- 並列処理のためにロックを使いましょう、というよりはロックの内部実装の話（2章）
- 加えて3, 4章がよく勉強会の題材になる
- MassiveThreadsのような処理系を作りたいなら読むべき
- 小林追記: Revised First Edition (研究室にある物理本に対応するもの) の PDF がありました
    - https://dl.acm.org/doi/pdf/10.5555/2385452

[Computer Systems](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.138.4401&rep=rep1&type=pdf)
- OSの実装の仕方（hardware依存）
- Low Level Programmingの典型
- 3章 Machine-Level Representation of C Programsと10章 Virtual Memoryがおすすめらしい

[Computer Architecture - A Quantitative Approach](http://acs.pub.ro/~cpop/SMPA/Computer%20Architecture%20A%20Quantitative%20Approach%20(5th%20edition).pdf)
- 通称ヘネパタ
- アーキテクチャ寄りの並列処理の話？
- 情報求む

[Modern Operating System](http://materias.fi.uba.ar/7508/MOS4/Operating.Systems.4th.Edi.pdf)
- 教科書（そんな面白くない）
- 雑多にひたすらいろんなことが並べられてる感じ
- これ読むならComputer Systemsとかxv6をやった方が面白いのでは？

[xv6: a simple, Unix-like teaching operating system](https://pdos.csail.mit.edu/6.828/2020/xv6/book-riscv-rev1.pdf)
- MITで学部授業向けに作られたxv6（V6 UNIXの移植）の解説．
- 100ページほどでOSのエッセンスが簡潔にまとめられている稀有なOSの教科書．
- 慶応の河野研（注：河野先生は品川先生の師匠）で輪読に使われている．
- RISC-V版が2020年8月に遂にリリースされた．x86から解放されてハッピー．
- 最新版は[レポジトリ](https://github.com/mit-pdos/xv6-riscv-book)を参照．

[C++ Concurrency in Action](https://www.bogotobogo.com/cplusplus/files/CplusplusConcurrencyInAction_PracticalMultithreading.pdf)
- 安全に並行プログラミングをするために必要なメモリモデルについての理解
    - 同じメモリアドレスに別のスレッドが並行に書き込んだらどうなる？
- C++11のメモリモデル

[A Primer on Memory Consistency and Cache Coherence [2nd ed.]](https://www.amazon.com/dp/1681737094/)
- キャッシュや共有メモリの仕組みを体系的に学ぶには丁度良い．
- 2020年2月に2nd editionが出て，古典だけでなく最近の話題も扱われている．

[Hardware and Software Support for Virtualization](https://pdfs.semanticscholar.org/79d0/d56f06beb438366a503078cf0aa4b8c94396.pdf)
- 仮想化の話。情報求む
- あまり田浦研で詳しい人がいない印象、品川研で主に扱っている内容かな

[Essentials of Programming Languages](https://web.archive.org/web/20191113092204/https://karczmarczuk.users.greyc.fr/TEACH/Doc/EssProgLan.pdf)
- EOPL
- 実装例が豊富。自分で実装するのを通じて、言語処理系の作り方を学ぶ

[Types and Programming Languages](http://port70.net/~nsz/articles/book/pierce_types_and_programming_languages_2002.pdf)
- TaPL
- 結構厚い。日本語もある。がやっぱり難しい
- PLの基礎理論とproof-of-conceptの実装を扱う．
- 理情の小林研などの理論側のPL系研究室で広く輪読されている
- 各章の依存関係のフローチャートがはじめの方に載っている

[Programming Languages: Application and Interpretation](https://cs.brown.edu/courses/cs173/2012/book/book.pdf)
- もとがhtml。要素のピックアップがしやすい

[Design Concepts in Programming Languages](https://www.e-reading-lib.com/bookreader.php/134602/david-turbak-gifford-design-concepts-in-programming-languages.pdf)
- PLの一般的な概念・定式化を例をもって説明。ベースを理解するにはいい

[Partial Evaluation and Automatic Program Generation](https://www.itu.dk/people/sestoft/pebook/jonesgomardsestoft-a4.pdf)
- コンパイラの基本的な定式化である部分評価（partial evaluation）を説明する教科書．

[The Garbage Collection Handbook: The Art of Automatic Memory Management](https://www.amazon.co.jp/dp/B01MRDA69B/)
- GCの教科書．*The* reference book for Garbage Collection.
- 500ページ以上あり，実装詳細まで掘り下げられている．頭おかしい（誉め言葉）
- 日本語訳もある

[Instruction Selection---Principles, Methods, and Applications](https://kth.diva-portal.org/smash/get/diva2:951540/FULLTEXT01.pdf)
- コンパイラ最適化における命令選択をピンポイントに掘り下げた本．頭おかしい（誉め言葉）

[Accelerated C++: Practical Programming by Example](http://libertar.io/lab/wp-content/uploads/2017/03/Andrew-Koening-and-Barbara-E.-Moo-Accelerated-C-.pdf)
- 情報求む

[Effective C++](https://doc.lagout.org/programmation/C/Addison.Wesley.Effective.CPP.3rd.Edition.May.2005.pdf)
- C++が好きな人がよく読んでる

[Modern Effective C++](https://moodle.ufsc.br/pluginfile.php/2377667/mod_resource/content/0/Effective_Modern_C__.pdf)
- C++が好きな人がよく読んでる

[Professional CUDA C Programming](http://www.hds.bme.hu/~fhegedus/C++/Professional%20CUDA%20C%20Programming.pdf)
- CUDAによるGPUプログラミング
- CUDAの多くの機能をカバーしている反面、重要な部分がわかりづらい
    - （という話が某F社で話題になっていた）
- タイトルのリンクは切れている
    - https://www.cs.utexas.edu/~rossbach/cs380p/papers/cuda-programming.pdf
    - ここから読めるはず

[CUDA by Example: An Introduction to General-Purpose GPU](http://www.mat.unimi.it/users/sansotte/cuda/CUDA_by_Example.pdf)
- CUDAによるGPUプログラミング
- CUDAの基礎的な部分を押さえてある、Professionalよりもこっちを先に読んだ方が良さそう
- 上のリンクは切れていそうだがこちらから読める
    - https://edoras.sdsu.edu/~mthomas/docs/cuda/cuda_by_example.book.pdf

[Structured Parallel Programming: Patterns for Efficient Computation](http://digilib.stmik-banjarbaru.ac.id/data.bc/18.%20Programming/2012%20Structured%20Parallel%20Programming%20Patterns%20for%20Efficient%20Computation.pdf)
- 並列計算のパターン（map, reduce等）とかタスク並列の話
- 並列計算をどう類型化してパターンに落とし込んでいくかの話