見出し画像

暇つぶし流体解析.2進数.解析で使用するメモリ容量

はじめに

大学院生のころ,数値解析を用いて流体現象の解明を行ってきた関係で,PCの仕組みやデータ記憶,処理などの仕組みについて勉強するようになりました.これらを理解していなかった学部生のころには,プログラムを実行することが出来ないだけでなく,過剰な負担を要したことで,PCが焦げてしまったり,HDDを壊してデータが消失したり...悪戦苦闘していました.大学院生になってからは,これらを勉強し,大規模データを解析,ハンドリング出来るようになりました.これら勉強した内容について,何回かに分けて備忘録を残そうと思います.

デジタル空間でのデータの記憶の仕方:2進数

デジタル空間で行われる解析ですが,実際に,コンピュータは,どのようにデータを記憶し,数値処理しているか.

コンピュータは,その物理的な特性から,2進数でデータ処理をしているのは有名ですね(現在,話題の量子コンピュータは例外).2進数においては1桁の数字をビット(bit)と呼び,この1bitごとに,0と1の2種類の情報を記憶することが出来ます.そのため,2bit(2桁)ならば4種類,4bitならば16種類の情報を区別することが出来ます.現代のコンピュータでは,8bit(8桁256種類)をまとめて1 バイト(byte)として取り扱います.

このような単位の元,コンピュータの計算処理を担うCPUが,計算の最小単位において,何ビットのデータを同時に扱えるかが課題になる.昔は,32bit (=4byte)が多かったみたいですが,最近は64bit (=8byte)が主流ですね.

数値シミュレーションにおいては,この32bitで表すものを単精度,64bitで表すものを倍精度と呼び,その値によって記憶可能な桁数が異なってきます.

流体解析で使用する変数とメモリ容量

さて,流体解析では,このような上記のような単精度や倍精度などの値を大量に記憶しながら,各場所の流体現象の時間変化を計算することになります.コンピュータには,メモリというパーツがあり,この容量よりも大きいデータ量を扱うことは出来ません.解析を実施しようとすると,エラーが表示されます.

ここでは,以前,暇つぶしに解析した,ダムブレイク問題において使ったメモリ容量を概算します.

この解析では,縦1m,幅0.5m,高さ0.5mの水槽を,縦方向に200個,横方向に100個,高さ方向に100個の格子に区切り(格子総数:200万個),格子内を出入りする水の質量と運動量を計算しながら,流体全体の挙動を評価しています.

個別の格子に着目すると,格子の中心と,6個の面の中心に評価点を設けており,それぞれの場所のx,y,z座標を記憶しております(変数の数:4×3=12).

また,格子の中心で圧力や密度,水の体積割合,格子面の中心で流速成分u,v,wを評価しています.これらの時間的に変化する変数については,次の時間ステップの情報も記憶する必要があります(pnew, unewなど).よって,これらの変数の個数は12個になります.

実際には,他にも記憶する変数はたくさんありますが,これらの基本的な変数だけで,どのくらいメモリを使用するか確認します.1つの変数を8byte(倍精度の実数)で表すと,

8byte×(12個の座標変数+12個の流体関係の変数)×200万個の格子
=384,000,000 byte
=384,000 KB(キロバイト)
=384 MB(メガバイト)
=0.384 GB(ギガバイト)

実際のプログラムには,この3倍くらいの変数があるので,計算では1GB程度のメモリを使用していました.現在のモバイルノートパソコンに搭載されているメモリの容量は16GB程度が一般的なので,あの程度の数値シミュレーションは,モバイルノートパソコンで計算できるんです.
参考ですが、windows 11は、起動するだけで、メモリを8GB程度使いますね。

デスクトップパソコンのメモリ容量は32GB~128GB,ワークステーションやスパコンだとメモリ容量は128GB~512GB程度が一般的でしょうか? メモリ容量が1TB(テラバイト)以上なんてスパコンもありますね!

もっと,扱う変数が多く,これら以上のメモリを必要とする場合は,複数のコンピュータにデータを分散して記憶させ,時々刻々と一部のデータを共有しながら計算することになります.


この記事が気に入ったらサポートをしてみませんか?