前提・実現したいこと
double a[N][N][N],b[N][N][N];
のように2つの3次元配列をデータ構造とするプログラムを、キャッシュメモリ12MB,メインメモリ16GBのコンピュータ上で実行することを考えています。そこで、最高速で処理するとき、Nはどのように求められるのか。
分かる方いましたらご指導お願いします。
試したこと
調べてわかったのは、
最高速で処理を実現するには全てのデータがキャッシュメモリ上に乗らなくてはいけないことです。
ここに問題に対して試したことを記載してください。
> 全てのデータがキャッシュメモリ上に乗らなくてはいけないことです。
ということなら、あとは電卓計算の世界では?
コメントありがとうございます。
具体的な計算手順はどうなるのでしょうか。
よろしくお願い申し上げます。
最高速で処理を実現するには全てのデータがキャッシュメモリ上に乗らなくてはいけないことです。
というのは正しくありません。
すべてのデータがレジスタに載っていればもっと速くなります。
コメントありがとうございます。
そうなんですね、知識不足で申し訳ございません。
では、全てのデータがレジスタに載っていれば、Nはどのように求まるのでしょうか。具体的にご教授くださるとありがたいです。
> 具体的な計算手順はどうなるのでしょうか。
配列とは何なのかを知らないと言うことですね。諦めましょう。
Nが0なら「何も計算せずに済む」ということになってしまいますが、その解釈は間違っていますでしょうか?
a[N][N][N] の大きさは (double の大きさ × N)^3 になります。
b も同じ大きさなので、その 2 倍がメモリの使用量です。
最大の N を求めよということなら、それがキャッシュに収まる範囲の最大値を求めれば良いでしょう。
最大の N を求めよという問題ならね。
問題を自分の言葉で書き直す際に意味不明になっているので、まず国語の勉強を頑張るのが良いと思います。
きわめて具体的に書いてみました。
もう少し抽象化した方が良かったですか?
処理の内容は?
アプリからキャッシュに載るデータをコントロール出来るのかな?
OSや他のアプリがどう動くかでアプリ(最高速で動かそうとしているプログラム)が使うキャッシュの量は変わってくるのじゃない?
全データの合計を求める、というように、データを1回しか使わないのなら、キャッシュってそんなに速度には影響しないように思えるし。(最高速、だから、ほんのちょっとでも、速くしたいってことかな?)
実行速度を速くする為にキャッシュの事をあれこれ考えるのは、あまり実質的でないような気がします。
12MB全部そのデータで埋めた場合、キャッシュメモリが他のことに使えなくなるので処理は遅くなるかもしれませんね。
回答1件
あなたの回答
tips
プレビュー