サイズ 100 の 3D キューブ内の 4 バイトの float は、少なくとも 4,000,000 バイトを使用します。それはかなり大きな塊です。
それらすべてを同時にメモリ内に置くと、使用するデータ構造に関係なく、少なくともそれだけのスペースを占有します。
それらをメモリから移動し、必要な場合にのみ取り込むことを検討してください。
それを行う最善の方法は、それらに対して行う必要がある処理の種類によって異なります。たとえば、次の疑似コードを使用して直接順次処理を行っていたとします。
for i = 0 to 99:
for j = 0 to 99:
for k = 0 to 99:
loadAndDoSomethingWith (i, j, k)
flushData()
currentlyLoaded = -1
float buffer[100]
def loadAndDoSomethingWith (i, j, k):
if i * 100 + j != currentlyLoaded:
flushData()
currentlyLoaded = i * 100 + j
read buffer from file #currentlyLoaded
doSomethingWith (buffer, k)
def flushData():
if currentlyLoaded != -1:
write buffer to file #currentlyLoaded
その後、一度に 1 つの次元 (100 個の浮動小数点数) を取り込むことができます。
データ構造内のさらに多くの場所からのデータが必要な場合など、より複雑なケースを処理するために、複数のバッファーを使用して同様のスキームを実行できます。スラッシングをできるだけ回避するために、バッファリング戦略をアルゴリズムに一致させるようにしてください。