🐙

コンピューター概論:フォン・ノイマン・ボトルネックとメモリリークについて

2024/11/04に公開

前置き

ご存知な方ももちろんいらっしゃると思いますが、
今の世界で使っているスマホ、デスクトップタブレットもこのノイマン型(von Neumann architecture)と言うアーキテクチャーを使っています。

そのため、ハードウェア・ソフトウェアに掛かっている
パソコン系の大学ではコンピューター概論と言う講義が絶対あります。

ただ、ソフトウェアエンジニアとして
理解するべきなどころはすごく少ないです。

もちろん全部理解するほうが良いとは思いますが、
私は必要であればその時にまた調査して
勉強するほうが効率的だと思う人間ですのでおすすめしません。

私たちが使える時間はすごく限っていますので
有効に使うほうが良いでしょう。

なので今回の記事はこのフォン・ノイマン・ボトルネックと
メモリーリークについて紹介したいと思います。

この二つについて詳しく分からなくてもイメージだけ理解できれば
この記事の価値は十分あると思います。

パソコンの構成について

まずはパソコンはどのように構成されているでしょう。
おそらく皆さんが良く使っているパソコンは四つぐらいかと思います。


デスクトップ


ノートパソコン/タブレット/スマホ

このパソコン中にはですね。
CPU、メモリー、HDDと言うパーツがあります。

軽く説明するとCPUは処理・制御を担当して
メモリーとHDDは処理・制御に必要な命令・データを格納場所になります。

HDDの場合は、最近SSDと言うものを良く使いますね。

左上からHDD/Memory(Ram)/Hard Disk Drive(HDD)

写真のものはデスクトップで使うバーツで
端末が一番小さいスマホの場合はもっと小さいCPU、メモリー、HDDが必要です。

そのため、小さくなるほど小さいパーツが必要なので
一般的には値段もその分高くなります。

ノイマン型とは

じゃあ、上のものを図式化して見ましょう。

これだけだと理解ずらいと思いますので
背中で良く使われているMS社Excelと言うプログラム開くようにしていると仮定して見ます。

まずはInput Deviceは正確ではないですが、Excelファイルになります。
Output DeviceはExcelが画面に開くことです。

もちろんHDDにはもうExcelがインストールされて
最初にExcelファイルを開くことが前提になります。

1:CPUとDisk Contoroller/Data Access Memory

ユーザーがExcel開くとまずOSはCPUにExcelを開くためのデータをメ
モリーに格納しよと言うリクエストをもらい、
Disk Contorollerにその命令を転送します。

Disk Contorollerはその命令を分析して
Data Access Memoryに命令を転送します。

2、3:Disk Contoroller/Data Access Memory、HDD/SSDとMemory

Data Access MemoryはHDD又SSDにあるExcel開くためのデータを
Memoryに転送してMemoryはそのデータを格納します。

Memoryに格納されるデータはExcelと言うプログラムで良く使う
データ/ライブラリー/プラグインなどが格納されます。

4、5:Memory、CPUとモニター(Output)

CPUはExcelファイルに開くための、
データをMemoryにリクエストしてデータの処理を開始します。

この処理の内にプログラムを画面に表示されるために
Randeringを行いますが、必要によってグラフィックカード(GPU)が活躍します。

もちろんExcelを開くためにはそんなに必要ではないですが
プログラムがゲームになると必須になるでしょう。

この流れでHDD/SSDに格納されているファイルがモニターに表示されます。

これがノイマン型と言うものになります。

ただ、この型にはボトルネックと言う問題があります。

フォン・ノイマン・ボトルネックについて

実はこのアーキテクチャーにはボトルネックが発生してしまう問題があります。

上で説明している図は現在のコンピューターで
一般的にノイマン型と言うものは下の画像になります。

まあ、CPU以外のものをMemory Unitで考えたらほぼ間違いはないと思います。

上で少し説明した通り、
ノイマン型ではボトルネックと言うことが発生しましますが

結論的にはCPUの処理速度がMemoryの転送速度より早いことによって
以前もらったデータがもう処理が終わって
次のデータをもらうまで余った時間が発生することを言います。

これは現在のパソコンにも発生することですが、
Cacheと言うサブデバイスがCPUの周りでサポートしてくれるせいで
今のパソコンはほぼ感じれないです。

そのため、CPUを選択する時にはCacheの数も大事でしょう。
もちろん、上のExcelを最初開く時には間違いなく発生します。

これに関してもっと詳しく話して見ましょう。

フォン・ノイマン・ボトルネックについて:CPUとMemory速度

ピンクの枠を現状一番早いSSDと言う記録ストレージ、
赤い枠は普通のCPU、
オレンジ枠をRAMと前提します。
もちろんオレンジ枠をCacheメモリーと考えたらもっと早いと思います。

次はこの三つの速度を確認して見ましょう。

CPUの速度

CPUは一般的にGiga Hertz単位で
Hertzは1秒間あたりの波の揺れる回数、諸略してGHzと良く言います。

Intel i7-9700の場合、通常3.6GHzで
ブーストして最大4.9Ghzまで上がります。

今回はもっとギャップを見せるために
最大速度である4.9Ghzを基準にします。

Memoryの速度


MemoryはCPUと同様なクラックスピードであるHertz単位と
データ転送速度であるData Rateと言うものがあります。

ご覧の通り、このメモリーがCPUとストレージの媒体を担当していることが確認できます。

Hertzは1秒間あたりの波の揺れる回数、諸略してGHzと良く言います。

画像のDDR4-2400の場合、3200MT/sのData Rateを持っているので
一般的にバス幅が8byteであることを考えると25.6GB/sを転送できます。

I/O Bus ClockがCPUと関連ある速度のため、
1600Mhzになり、CPUと同様にGhzで考えると1.6Ghzのクラック速度を持っています。

ストレージ(SSD)の速度

SSDやSSDの場合、
一般的にはMega Byte単位で1秒単位でMb/sと良く言います。

Samsung 860 Evoと言う商品の場合、
550Mb/sの読み込み速度、520Mb/sの書き込み速度を持っています。

速度の比較

今回は理解のために三つの速度を比較しますが、
実は以下の理由で正しい比較方法ではありません。

1.SSD/HDDと言うデータストレージは不揮発性メモリーで
RAMは揮発性メモリーである点

  1. 各SSD/CPU/RAMの用度が違うこと
    それによって転送方法も違うため、
    単純に転送速度で比較することは正しくない点

ただ、転送速度を比較することでどこで
ボトルネックが発生するかを確認できます。

なお、CPU/RAM/SSDの速度は以下の通り整理できます。

Intel i7-9700の場合、最大4.9Ghz
DDR4-2400の場合、25.6GB/sのデータ転送速度/1.6Ghzのクラック速度
Samsung 860 Evoの場合、550Mb/sの読み込み速度、520Mb/sの書き込み速度

CPUとRAMの場合、約3倍のギャップが
RAMとSSDの場合、約500倍速度のギャップがあることを理解できます。

この事情によって、
最初プログラムを開く時に時間が掛かることは当然なことです。

逆に2回開いた時には
もうメモリー(RAM,Cacheなど)にコアーなリソースが格納されているので
一回目より時間が掛からないです。

つまり、
このデバイス間のクラック速度、データ転送速度のギャップよって
ボトルネックが発生します。

特にデータストレージであるSSD/HDDとRAMのボトルネックが
一般的にユーザー側で感じられるボトルネックになります。

最後に

ここまででパソコンの構成と
実際アプリケーションがどの流れで画面に表示されかについて
最後にはノイマン型で発生するボトルネックについて説明しました。

もちろんもうちょっと詳しく
不/揮発性メモリーの分離とかCacheの話など
学問的に話すことも
自分は今はそこまで理解する必要がないと判断しているので
興味がある方はぜひ調べて学ぶことも良いかと思います。

次の記事ではメモリーリックと
ソフトウェアエンジニアがなぜこのハードウェアまで
理解する必要があるかについて結論を出して
コンピューター概論と言う記事は終わりたいと思っています。

GitHubで編集を提案

Discussion