今年も残す所あと僅かであり、秋学期ABの講義期間も間もなく終わりを迎えようとしている。秋学期ABが終わって、願わくば今受けてる講義すべてで単位が取れれば修了要件を満たすことができるため、もう講義を取る必要がなくなる。今のペースだと必要単位数+10単位ぐらいの単位を取って修了するペースである。取りすぎであり、おかげで毎日のように課題のコードを書いたり専門外の論文を読んだりレポートを書いたりしている。講義が終わったらあとは修論を仕上げるために研究に勤しむだけなのだが、入学前に思っていたよりも、多くの講義はあっさりというか簡単だったという印象である。エグい実装や論文読みを課せられる講義があるのかと身構えていたのだが、殆どの講義でそんなことはなく普通にやってれば終わってしまうような課題ばかりだった。実装関係はホント簡単だったのでこれでいいのかという気持ちなのだが、まぁ好きで書いてる人は放っておいても書けるようになるし、研究で書く必要がない人は全く書かないし、、みたいな感じなので、実装力は重要視してないのかもしれない。この一年で自分が課題で書いたもっとも複雑なコードはrubyで500行ぐらいで書いたマルチプロセスで動作するMapReduceフレームワークのコードぐらいで、短いものだと多分10行ぐらいの穴埋め問題的なやつを書いて動作確認しただけだと思う。それ以外でも入門書のサンプルコード程度である。このような講義を受けてきて最近思うのは、世に出ている日本語の入門書というのは実はすごく充実しているのではないかということである。自分は社会人になってから書籍に頼って勉強してきたワケだが、それらのその辺の本屋で買える入門書はとても実用性が高いものだったのではないかと感じるようになった。大学の講義レベルの内容を読むだけで学べるぐらいには良い内容の本がその辺の本屋に売っている、といっても過言ではないのかもしれない。世の中のCS専攻を出ていないエンジニア達よ、技術書を買って勉強すれば基礎分野なら十分CS専攻卒と張り合えるぞ、多分。一方で、講義で扱わなければ恐らく一生読まなかったであろう本に出会えることもあり、こういうのはきっと大学の講義固有の価値なんだろうなと思う。秋学期に並列システムアーキテクチャに関する講義を取っているのだが、そこで教科書として使っている本は自分にとってまさに「知らないこと」を学べる一冊だった。ハードカバーこの商品を含むブログを見る自分は並列システムというと、マルチスレッド/マルチプロセスの実装の仕方みたいな話しか知らなかったのだが、そもそもなぜ並列化が必要なのか?という話から始まり、インストラクションレベルの並列化、つまりパイプライン、スーパースカラに代表されるプロセッサレベルの技術から解説される。ソフトとハードの両面でどのような技術が用いられて並列に動作するシステムが実現できているかを解説している。この本の特徴として、メモリバンド幅がどれだけパフォーマンスに影響を与えるかという話をあらゆる例題を用いて説明している。一貫して「メモリシステムはCPUよりはるかに遅い」ということを繰り返し主張している。具体的には「1サイクルでアクセスできるL1キャッシュと100サイクルでアクセスできるメモリがあって、キャッシュヒット率が10%落ちるとプログラムのレイテンシがどれぐらい落ちるか」といった感じで、具体的なスペックを示したシステムを例として読者に考えさせている。この辺の考え方はうっすらと知っていた程度で、具体的な数値について考えたことがなかった。実際に計算してみることでどれぐらいキャッシュミスがパフォーマンスに影響を与えるかということがよく分かる。これは独学でやっていたら恐らく手をつけなかった、というより、この手の話は日本語だとちゃんと解説されている本が少ないと思われるので出会わなかったかも知れない。いう意味でこの本はここで読む機会を持つことが出来てよかったし、実際キャッシュヒット率を意識した実装は重要である。単純な1000x1000ぐらいの行列同士の積を二重ループで求めるようなシンプルな処理でもキャッシュヒット率が下がると露骨に処理時間が長くなるのは他の講義でも体験した。このブログ更新するのいつ振りだろう。profileseri::diaryseri::diary::competitive_programmingはてなブログをはじめよう!serihiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。