3 ポイント 投稿者 GN⁺ 2024-03-04 | 1件のコメント | WhatsAppで共有
  • Cornell CSの博士課程レベル科目 CS 6120 をオンラインで追えるように、講義動画、ノート、論文リーディング、実装課題をまとめた自己主導型カリキュラム
  • 中間表現、データフロー、古典的最適化といった コンパイラの中核トピック から、並列化、JITコンパイル、ガベージコレクションまで扱う
  • 実習では LLVM と教育用IR Bril を使い、抽象的な概念を自分で実装してみるオープンソースハッキング課題へとつながる
  • 自己主導版では締め切りを無視できるが、実際の授業の Zulipディスカッション や学期末プロジェクトには参加できない
  • 資料はGitHubでオープンソース公開されており、問題を報告でき、修了後にはフィードバックフォームを記入できる

受講方法と扱う範囲

  • CS 6120 は、Cornell CSAdrian Sampson が作成したプログラミング言語実装の科目
  • 講座の範囲には、コンパイラ実装の共通基盤と研究志向のトピックがともに含まれる
    • 中間表現
    • データフロー
    • 「古典的」最適化
    • 並列化
    • JITコンパイル
    • ガベージコレクション
  • 学習は 論文リーディング とオープンソースハッキング課題で進む
    • 実習には LLVM と、授業用の教育IRである Bril を使う
  • 自己主導カリキュラムは、「想像上の大学」で4単位の無採点科目を履修する形式で構成されている
    • 講義は線形の順序で並べられている
    • 各レッスンには動画と文章ノートがある
    • 一部のレッスンには実装課題が含まれる
    • 動画視聴と論文リーディングを織り交ぜて進めるよう推奨順が設定されている

実際の授業との違い

  • 自己主導受講者は課題の締め切りを無視できる
  • 実際の授業の Zulipディスカッション には参加できない
  • 実際のCS 6120には学期末プロジェクトがある
    • 自己主導版の学期末課題は「コンパイラの魔法で世界を変えること」
  • 講義制作の品質は、特に初期レッスンでは低い可能性がある
  • CS 6120 の資料は GitHub でオープンソース公開されており、問題を見つけたらバグ報告できる
  • 修了後には フィードバックフォーム を記入できる

レッスンと読み物

1件のコメント

 
GN⁺ 2024-03-04
Hacker Newsのコメント
  • 学部課程を終えて最初の正社員の仕事を探していたとき、この講義のおかげでMANGA(Meta, Apple, NVIDIA, Google, Amazon)のコンパイラエンジニアリングチームの面接を通過できた。
    University of Waterlooの低レベル計算システムのカリキュラムも素晴らしく、オープンソースのコンパイラプロジェクトにも貢献していたが、面接で最も難しい質問に答えるうえでこの講義は本当に大きな助けになった。

    • 「par excellent」ではなく par excellence であり、その文の構造でも不自然。
      より自然に書くなら「my university has the low level computing systems curriculum par excellence」くらいのほうがよかったと思う。
  • コンパイラを書く前に、コンピュータアーキテクチャを理解し、最も効率的な機械語コードを作るためにコンパイラが何を生成すべきかを知ることが先だと思う。
    ただ経験上、学校や大学はコンピュータアーキテクチャ、さらにはシステムプログラミングまでもますます優先順位を下げているようで、おそらく技術的すぎると見なしているからだと思う。
    それでもその知識は、業界で良い仕事を得るうえで非常に重要だ。

    • 大学が システムプログラミング の優先順位を下げているというのはその通りだが、理由は「技術的すぎるから」ではない。
      大学と関わっていて感じる根本的な問題は、限られた授業時間の中で扱いうる内容が多すぎることだ。
      この分野で知るべき情報量は時間とともに指数関数的に増え、すでに限界を超えているので、一般トラックでシステムプログラミングの授業時間が減るのは、年々より多くの学生にとって関連性が低くなっているからであり、合理的だ。
    • 業界でいう 良い仕事 とは何を指し、なぜそう考えるのか、もう少し説明してもらえる?
    • このレベルの低レベルな詳細なしにコンパイラを使えるようになったことは、業界の大きな進歩の一つだと思う。
      コンパイラレベルでやるべきことは依然として多いが、そのかなりの部分はコンピュータの マイクロアーキテクチャ レベルまで気にしなくて済むべきだ。
    • GPU関連の作業 は今でもコンピュータアーキテクチャとコンパイラの能力を強く要求する。
      x86やMIPSを勉強する必要はないとしても、CUDAはそれらよりさらに奇妙な構造を見せる。
    • 経験上、誰も低レベルの詳細を「技術的すぎる」とは見なしていないように思う。
      低レベルな内容を強調しない通常の理由は、実装ごとに異なり、すぐ古くなり、一般化しにくいからだ。
      付け加えると、私は「システムプログラマ」タイプとはあまり相性がよくない。こうした極度に具体的な雑学を自分の職業的アイデンティティ全体にしてしまう傾向があり、そのせいでアセンブリは使えても 関手 が何かは知らない人まで出てくる。
  • 高度なコンパイラ最適化 を深く扱う良い学術資料がないように思う。
    かなり探したが、ほとんどの講義は入門レベルで、実際に面白い技法は人気のあるオープンソースコンパイラのソースコードの奥深くまで入らないと見つからず、かなり驚いた。

    • ほとんどの学術講義は パース に過度に偏っており、残りは表面的にしか教えていないように見える。
  • コンパイラはおよそ30年間、大きく進歩していない分野の一つだと思う。
    2004〜2006年にPerugia Universityで講義していたときも、15〜25年前の資料を特に問題なく使えた。
    最近は状況が変わってきたようだ。

    • それは事実ではない。
      2004〜2006年当時でも新しい内容として教えられたが、おそらく扱わなかったものだけ見ても SSA構築、SLPベクトル化、自動ピープホール超最適化があり、これは今思いついただけでもそれくらいある。
      変わっていないのはコンパイラ教科書のほうだ。パーサ生成器の作り方に過度に集中し、実際にコンパイラをどう設計するか、まして現代のコンピュータアーキテクチャ設計についてはほとんど扱わない。この不満は何十年も前からあった。
    • 同意しない。
      この10年で地形は インクリメンタルコンパイル 技法の方向へ大きく進化した。
      理論的進展は主にパーサに閉じ込められているが、実装面ではパイプライン全体にわたってグローバルなプログラム最適化やコード生成にまで適用されている。
    • それ以降、コンパイラテスト はかなり変わり、大規模なランダムテストが主流になった。
    • コンパイラ設計や実装に精通しているわけではないが、コンパイラの対象である 機械語とアセンブリ は時間とともに大きく変わってきたように思う。
      新しいプロセッサ世代ごとに命令やオプションが増え、それによってコンパイラが活用できる新しい最適化や組み合わせが生まれているようだ。
    • おそらく、ほとんどのプログラミング言語が命令型、ループ、多範囲の副作用といった面で大きく変わっていないからだろう。
      純粋関数型言語 用のコンパイラを書くなら、確かに新しい資料が必要になるはずだ。
  • こういう講義があるのはうれしい。
    これで高度なテーマを案内されながら自分のペースで進められる。
    ずっと コンパイラエンジニア のキャリアを望んでいたが、私の住む場所には教育や仕事の機会が多くない。
    アメリカを見ると採用市場の競争は圧倒的に激しく、正直どうやって入ればよいのかわからない。
    持っている経験は学部のときに受けた講義一つだけだが、そのコースは本当にすべてが良かった。

    • この分野には、多くの人が越えられない 過酷な学習曲線 がある。
      他のコードを操作するコードを書かなければならず、たいてい意味論と動作目標がかなり異なるからだと思う。そこに口伝えの知識や雑音も多い。
      だからコンパイラチームは、すでに長いことコンパイラを作ってきた人を特に好む。ただ、当然ながらブートストラップ問題があるので、大きなチームはその曲線を越えられそうな卒業生も採用し、私もだいたいそういう形で入った。
      全般的なキャリアはあるがコンパイラ経験がないなら、自分が慣れている仕事をしている会社のうちコンパイラチームもあるところ、つまり「かなり大きいソフトウェア会社」に入り、社内異動 を狙うのが明確な戦略だ。
  • 「A Unified Theory of Garbage Collection」も入っているのがよい。
    少なくともこの学生たちは 参照カウントとトレーシングガベージコレクション の違いをきちんと理解するようになるだろう。

  • 「CS 6120はAdrian Sampsonによるプログラミング言語実装に関するCornell CSの博士課程レベルの講義」だというが、かなり高度な講義ということ?
    私はコンピュータサイエンスで 博士課程レベル ではない気がする。

    • 準備レベルを伝統的な 学位段階 で測らないほうがよい。
      とにかくやってみて、できるなら準備できているし、できないならまだというだけだ。
    • 博士課程だからといって学部より難しいという意味ではない。
      とにかく一度やってみればよい。
  • 20年前にGerhard Goosが行っていた一般的なコンパイラ構成の講義で扱っていた内容と、今でもおおむね似ているように見える。
    さらに新しい論文もリンクされているので、一度見てみるのもよさそうだ。
    Steven Muchnickの Advanced Compiler Design and Implementation という本が好きだった。
    18年間コンパイラのソースコードを見ていないので、特にプロファイリングや経路ベース最適化のあたりはついていけていない感じがするし、最近の機械学習を見ると、もっと高度なSIMD関連の内容もたくさんありそうだ。

  • 数年前の夏にこのオンライン講義を追いかけて、本当に多くを学んだ。
    Bril IR の小さな問題にPRを送り、教授と一緒に修正していく過程がとても没入感のあるものだった。

  • この講義の 前提講義 があるのか気になる。