0

particle私が使用している (SMPの使用に傾いている) アルゴリズムの新しいバリアントの一部として、boxそれぞれboxparticle* []. 私の唯一の懸念は、ボックスあたりの粒子の数が変化する可能性があるため (非常にまれなケースでは平均 10 が 70 に達することが知られています)、ポインター配列を大量に過剰に割り当てる必要があることです。おそらく 5 ~ 10% の使用率で考えていました。

極端なケースでは、これらが 100 万のオーダーになるため、0.5 GB のメモリを割り当てることを検討しています。それが実行されるマシンに関しては問題ではありませんが、メモリをそんなにストライドすることに関連するパフォーマンスのペナルティ(キャッシュがそれを嫌うか何か)があるかどうか疑問に思っています. (たとえば、500 バイトのうち最初の 60 バイト程度にアクセスする)。ただし、ストライド幅がキャッシュを破壊する64の倍数にならないようにすることは知っています...

この計画が同じ時間内により多くの成功したコピーを実行できるように十分なパフォーマンスの向上をもたらす限り、非常にまれなケースで失敗しても問題ありません。

関連する場合、このコードは主に Xeon E5620 で実行されますが、これは変更される可能性があり、アーキテクチャ固有のことはしたくありません。

EDIT:これは、連続したメモリ内のNバイトのパックされたデータを、連続したメモリのはるかに大きな領域に均等にまたがったNバイトのデータと比較しています。

4

1 に答える 1

5

割り当てるメモリによってスワッピングが発生しない場合は、メモリを割り当てるだけで余分なオーバーヘッドは発生しません。

ただし、アルゴリズムが現在データポイントを連続したメモリにパックしており、新しいアルゴリズムが割り当てられたバッファ全体に 5% ~ 10% の使用率を分散している場合 (その場合、質問からは不明です)、かなり多くのキャッシュミスが発生します。メモリにアクセスしています。

一方、CPU ごとに 1 つのバッファがある場合 (および連続したメモリを使用している場合) は、偽共有の機会が減るため、アルゴリズムのパフォーマンスが向上する可能性があります。

于 2012-07-16T17:59:51.843 に答える