見出し画像

【共通の話題で例える】メモリとcpu間のデータ通信を河川工学で例える

先日、コンピュータでのデータ処理の際に、自分の困っていることを先輩に説明出来なかった。この方は大学院修了後に国の官庁で働かれた大先輩です。しかし、データ分析やコンピュータの仕組みには詳しくなさそうです。世間一般そうでしょう。こういう時は、共通の話題(水工学、河川工学)で例えるべきですよね。

というわけで、数値計算(ノード内並列OpenMP)におけるcpuとメモリの間でのデータのやり取りについて、ダムの流入、放流、貯留で例えてみます。

*追記*より多くの人に知ってもらうためには、交通・道路で例えるとわかりやすいんですよね!

コンピュータでのデータ処理の流れ

  1. cpuの複数のスレッドを使って、複数の新しい値を算出し、新しい値をメモリに転送する。

  2. メモリに記憶してある古い値を新しい値に更新する

  3. 更新する新しい情報が膨大になると、メモリの帯域幅(GB/S)が逼迫し、メモリ内でのデータ更新が遅延する。

  4. その間、cpuは待機して計算が進まない。

  5. メモリに負荷がかかりすぎて、処理が間に合わず、コンピュータがフリーズしたりシャットダウンする。ここが、最近の悩みです。

OpenMPでスレッド数を増やしても計算速度が向上しない理由の一つですね♪これを、ダムでの貯水と放流、流入に例えてみます。

  1. 大洪水で上流から水がダムに流入する

  2. 規則に従って、ダムの放流ゲートを操作して、放流する

  3. 流入流量が多く放流操作が間に合わない。んー、ここがしっくりこない。

  4. この間に、ダム貯水池内に洪水が溜まる。すなわち、この短時間においては洪水を調節できないことを意味する。

  5. 最大放流量以上に洪水が流入してダムをオーバーフローする。これは絶対に発生させてはいけない。なお、放流ゲートや操作施設が破損して想定通りに放流できずに放流が間に合わないといった危険性もあります。実際に放流設備が破損した事例を聞きます。流木沈木の影響と言われています。

こんなところでしょうか?あれ、メモリ容量について説明出来ていませんね。普通に考えると、ダムの貯水容量ですね。

次に交通分野に例えてみます。

  1. 高速道路で大量の車が走っている🚗

  2. 一般道に降りたり、合流したりする箇所で、動きが悪くなり、少しずつ渋滞が発生する。車線が多ければ(メモリの帯域幅が大きければ)、そちらを通ることで渋滞にはなりません。

  3. 次第に大渋滞になり、人がイライラする(このイライラの許容範囲がダム貯水容量でしょうか?)イライラのキャパを超えた時に、無理な割り込みなどが発生して、事故へと繋がる。事故は事故を呼び、何時間も通行止めとなる。

料金所付近の交通でも例えられそうですね。いずれにせよ、交通って河川の流れに似ていますね。それもそのはず、制約の中で流れるという現象は同じですもんね。なお、戦後の自動車ブームで道路計画の策定が進められている時に河川分野の人が交通に異動したそうです。

最後にAppleのmac studioのメモリ帯域幅は800GB/sらしいです。羨ましいです。


ここに追記できそうだな〜

いいなと思ったら応援しよう!