「プロセッサゼミ」の応募課題は全3問(Q1-Q3)からなります。 Q1は共通問題であり、当ゼミに応募する方は全員回答してください。 Q2とQ3は選択問題です。このゼミは途中からCPU自作班とNPUプログラミング班に分かれます。選考に通過した場合、回答した選択問題に対応する班に配属されます。両方とも回答した場合の配属は講師側で決定させてもらいます。 # Q1(共通) ## Q1.1 プロセッサゼミをなぜ志望するか教えてください。あわせて、本ゼミで取り組みたいことがあれば記述してください。ゼミではまず基本的な課題に取り組んだ後、受講者の皆さんそれぞれの興味に応じた発展課題に取り組む時間を設ける予定です。 また、何か他にアピールしたいこと(今まで作ってきたものなど)があれば、それも自由に書いてください。 ## Q1.2 ターミナルでcoding agentに「このディレクトリ以下の構造を把握して」とプロンプトを入力してから結果がターミナルに表示されるまでにコンピュータの内側で起こっていることを、プロセッサの視点に立って説明してください。 # Q2 (選択・CPU自作) Q2は難しい問題が多いので、すべてを完璧に回答できる必要はありません。調べても分からないことがあれば「どこまで調べて、何が分からなかったか」を書いてください。 Q2.2、Q2.3、Q2.4は、CPUが命令を処理する仕組みと構造の観点から回答してください。 ## Q2.1 CPU自作班では受講者がそれぞれ好きなISAのCPUを実装し、高速化や機能の追加に取り組んでもらう予定です。あなたが実装したいCPUの種類、使用するプログラミング言語、ハードウェア記述言語を教えてください。講師が予習するためにも、詳しく教えてください。 ## Q2.2 同じプログラムを実行した場合であっても、昔の高性能なCPUと比較して、最新の高性能なCPUの方が実行時間が基本的に短くなっています。何が差異を生み出しているのでしょうか?比較する年代、技術や手法を明示したうえで、CPUで命令が実行される手順に注目して説明してください。 ## Q2.3 分岐予測、投機的実行、Out-of-Order実行の中から1つ選んで、どのような技術かを簡単に説明してください。また、その動作を観測するプログラムを書いて、プログラムと実行環境、結果と考察を教えてください。観測できなかった場合は、なぜ観測できなかったか、どうすれば観測できそうかを考察してください。 ## Q2.4 任意のISAの中から定義を1つ選んで、そのように定義されている理由や経緯を教えてください。その定義を変えればCPUを高速化できそうかを考察してください。ISAはあなたしか知らない自作のISAでも構いませんが、その場合は仕様書にアクセスする方法を教えてください。 ## Q2.5 今までに作ったり、書いたことがあるCPU(シミュレータや周辺部品でも可)について、そのテスト手法を教えてください。テストは何を対象にして何を検証したのか、今後テスト手法を改善するならどうするかを書いてください。まだCPUを作ったことがない場合は、CPUをハードウェア記述言語で書くにあたって、どのように設計してテストするかの計画を立てて教えてください。 # Q3 (選択・NPU) ## Q3.1 深層学習を高効率に計算するためにNPUと呼ばれるハードウェアが多数設計されています。興味のあるNPUを1つ選択し、そのアーキテクチャを調査し説明してください。なぜCPUやGPUよりも高効率に深層学習ワークロードを計算できると言われているのか説明してください。また、そのNPUが苦手とする計算はどのようなものか考えてください。 ## Q3.2 多くのNPUではユーザがハードウェアの詳細を意識しなくてもNPUを扱えるよう、コンパイラが整えられています。Q3.1で取り上げたNPUについて、どのようなユーザインターフェースが提供されているか、そしてそれがどのようにして実行バイナリまでコンパイルされるか説明してください。また、調査を行う中で、疑問が残った部分を教えてください。 ## Q3.3 高速フーリエ変換(FFT)を何かしらのハードウェアで並列化してください。対象ハードウェアは何でも構いません。普段使いのラップトップPCにもマルチコア、ベクトル演算ユニット、内蔵GPU/NPUなどが搭載されていますので、これらを駆使してみてください。 - どのような並列化や工夫を行ったか、利用したハードウェアやFFTの特徴を踏まえた理由とともに教えてください。 - 並列化後、ナイーブな実装に対する高速化度合いを計測してください。そしてこの高速化率が妥当かどうか考察してください。計測の条件(FFTサイズ、計測範囲など)は適切に設定し明記してください。計測の結果が考察によって説明されていることを期待していますので、結果の良し悪しは問いません。 - なお、フレームワークで並列FFTが提供されている場合もありますが、これらを使わずに、どう並列化するのが良いか自分で設計してみてください。 - 提出物には、ソースコードと説明の両方を含めてください。