グラフィック処理ユニットには、メモリ合体と呼ばれるものがあることを知りました。それを読んで、私はこのトピックについて明確ではありませんでした。これは、メモリレベル並列処理に関連する何らかの方法ですか?
Googleで検索しましたが、満足のいく答えを得ることができませんでした。
誰かがより包括的で理解しやすい説明をしてくれると助かります。
グラフィック処理ユニットには、メモリ合体と呼ばれるものがあることを知りました。それを読んで、私はこのトピックについて明確ではありませんでした。これは、メモリレベル並列処理に関連する何らかの方法ですか?
Googleで検索しましたが、満足のいく答えを得ることができませんでした。
誰かがより包括的で理解しやすい説明をしてくれると助かります。
回答:
「結合」とは、メモリアクセスパターンの結合を指すこともあります。この使用法では、スレッドを同時に実行し、近くのメモリにアクセスしようとすることを意味するために、合体が使用されます。これは通常、次の理由によります。
したがって、予測可能なメモリパターンを使用できるプログラムを作成することが重要です。スレッド化されたプログラムではさらに重要であり、メモリ要求が飛び越えないようにします。そうでない場合、処理ユニットはメモリ要求が満たされるのを待機します。
並列プログラミング入門からヒントを得た図:レッスン2 GPUハードウェアと並列通信パターン:
下:均一なメモリアクセスを備えた4つのスレッド。黒い破線の長方形は、単一の4ワードメモリ要求を表します。
メモリアクセスは近く、1つのgo / block(または最小数の要求)で取得できます。
ただし、スレッド間のアクセスの「ストライド」を増やすと、より多くのメモリアクセスが必要になります。下:ストライドが2の、さらに4つのスレッド。
ここで、これらの4つのスレッドには2つのメモリブロックリクエストが必要であることがわかります。歩幅が小さいほど良い。ストライドが広いほど、より多くの要求が潜在的に必要になります。
もちろん、大きなメモリストライドよりも悪いのは、ランダムメモリアクセスパターンです。これらをパイプライン処理、キャッシュ、または予測することはほぼ不可能です。
私はネットの周りで「合体」という言葉の2つの用途を見ていると思います。どちらも記憶に関係しています。1つは、解放されたメモリ割り当ての合体です。これは、質問でリンクされているウィキペディアのページで言及されているものです。
メモリを割り当てるときに、メモリマネージャは、隣接する2つのメモリブロックが解放される状況になることがあります。これらを組み合わせると、単一の解放されたメモリブロックになります-これは「結合」と呼ばれます。例:
4つの割り当てられたブロックから開始:
後で、そのうちの1つが解放されます。
その後、別のものが解放されます。
では、なぜ2つの隣接する空きブロックがあるのでしょうか?それらの結合:
結合は、可能な限りすぐに発生する可能性があります。たとえば、ガベージコレクターでは、コレクターの実行時に発生します。