コンピュータ・システム論A/コンピュータ・アーキテクチャ論Ⅱ
担当者 小笠原 武史(オガサワラ タケシ)
年度 2025授業コード 1F10238101 科目ナンバリング
対象年次 2~4 授業形態 講義 実施形態 対面
時間割 春木5 開講キャンパス 赤羽台(INIAD) 教室 3201教室
単位数 2 主たる使用言語 日本語 実務教員科目
授業科目区分
授業回数
受講対象学科
【サブタイトル】

コンピューターのパフォーマンス:ソースコードとCPUの関係

【講義の目的・内容】

INIADの講義ではPython、JavaScript、C、Javaといったプログラミング言語を扱っています。皆さんは、こうした言語でソフトウェアのソースコードを作成できるでしょう。ソースコードでは基本的な操作、例えば変数の代入や読み出し、条件文やループによる実行順序の制御、がコーディングされます。さらには、オブジェクト指向プログラミングによるオブジェクトの生成や操作がコーディングされます。また上記のソフトウェアの視点とは別に、皆さんはハードウェアの視点でコンピュータを見ることができています。ソフトウェアがコンピュータで実行される際、CPUは機械語を読み込み、1つ1つ実行します。機械命令の種類によって実行される操作が異なり、例えばメモリ操作命令であれば、CPU内部とメモリの間でデータを読み書きします。さらにメモリとレジスタのレイテンシのギャップを和らげるため、CPUは複数レベルのキャッシュを持ち、L1とL2ではサイズやレイテンシの特性が異なることはご存じでしょう。ソースコードと機械命令は1対1ではないことはご存じでしょうか。Cでは同じ1つのソースコードから速度が異なるプログラムが生成できます。Cではソースコードを機械命令に明示的にコンパイルします。コンパイルの際により高い最適化レベルを指定すると、より高速なプログラムを生成できます。前述のようにプログラムの実行は機械命令の実行ですから、1つのソースコードから複数の機械命令を生成できます(遅いプログラム=効率の良くない機械命令、速いプログラム=効率の良い機械命令)。一方Pythonでは、機械命令にコンパイルするタイミングは我々には見えませんが、プログラムをCPUで実行する限りいずれかのタイミングで機械命令が実行されているはずです。本講義では、ソースコードから変換された機械命令がCPUで実行される詳細を取り扱います。講義で紹介するトピックを確認するため、皆さんは自身のPCでそれらを実践します。最終的に皆さんはプログラミング言語と性能の関係が分かるでしょう。より具体的には、各種プログラミング言語で書かれたソースコード(人間が読める)と、それに対応する実際にCPUで実行される機械命令を関係づけられるでしょう。その後、CPythonと呼ばれるPythonインタプリタがPythonプログラムをどのように処理しているかを調べます。

【学修到達目標】

ソースコードから変換された機械命令がCPUで実行される詳細について、(1)皆さんが自身のPCでそれらを実践します、(2)各種プログラミング言語で書かれたソースコード(人間が読める)と、それに対応する実際にCPUで実行される機械命令を関係づけます、(3)CPythonと呼ばれるPythonインタプリタがPythonプログラムをどのように処理しているかを自身のPCで調べます。

【講義スケジュール】

"URL先に詳細を記載していますので見て下さい。
URL: https://docs.google.com/document/d/e/2PACX-1vSMjwEPjB9MpuFcsSCn70zDmaKd0KNKm_RDRmDvO0fS9zmLH0TTYrMmYnC24avS4o5gnp3P_VFTBQPP/pub

序章
基本1–プログラムの機械命令を見てみましょう
基本2–機械の命令をパフォーマンスに関連付けましょう(動的ビュー)
基本3– CPUアーキテクチャを見て、変化するIPCを理解しましょう(例:0.5から5)
基本4–メモリ
基本5–分岐予測
基本6–スレッドレベルの並列処理とデータの並列処理
基本7–高級言語で書かれたプログラムのパフォーマンスと機械命令
基本の復習(中間試験)
CPython 1 – PythonはJavaScript、C、Javaと同じくらい高速ですか?
CPython 2 –基本的なPython操作のためにインタープリターが行うこと
CPython 3 –インタープリターが変数とオブジェクトの値を読み取る/書き込む方法
CPython 4 –関数呼び出しは想像よりも複雑になります
CPython 5 –CPythonでリストを実装およびインデックス化する方法
自分でCPythonを調べてみましょう(試験)"

【指導方法】

講義スケジュールの詳細に示されている内容に従って、講義で説明された知識を実際のコンピューターでの実験結果と関連付けます。 MOOCはありません。

【事前・事後学修】

自分のPCで講義内容を再現し、宿題を通じて自身の力で応用する

【成績評価の方法・基準】

基本部分とCPython部分の理解に基づいて目標の達成を評価します

【受講要件】

"事前に以下の資料を確認し、hardware performance counterを使えるLinux環境を確認すること。
URL: https://docs.google.com/document/d/e/2PACX-1vRkQUG68LVLgR6F4xGv4KJroRH2ZFti-9X4Z63uzJLCg9eUNI3THCD_9T-DbMz-BKMMU6ec8JF23s8A/pub

特にC言語で書かれたCPythonインタプリタを動かしながらCで書かれたソースコードを追っていくため、C言語ソースコードを読めることは必須。

関連する以下の講義の理解を前提とする:コンピュータ・サイエンス概論I (Python, JavaScript), コンピュータ・アーキテクチャ (CPU), プログラミング言語I (C), ソフトウェア・エンジアリング (Java)"

【テキスト】

なし

【参考書】

なし

【関連分野・関連科目】

コンピュータ・サイエンス概論I (Python, JavaScript), コンピュータ・アーキテクチャ (CPU), プログラミング言語I (C), ソフトウェア・エンジアリング (Java)

【備考】

なし

【添付ファイル1】
【添付ファイル2】
【添付ファイル3】
【リンク】

なし