2

NUMA 対応のマルチスレッド プログラミングは初めてです。すべてのスレッドとそのメモリ割り当てが 1 つのノードに制限されるようにコードを書いています。プログラムの開始時に、次の呼び出しを行います。

struct bitmask *bm = numa_parse_nodestring("0");
if (bm == 0) {
    exit(1);
}
numa_bind(bm);

私の理解では、この方法で numa_bind を呼び出すと、すべてのスレッドとすべてのメモリ割り当てがノード 0 にバインドされます。

さらに、このコードから pthread を開始するときは、次を使用して特定の CPU にバインドします。

pthread_setaffinity_n

ただし、/proc//numa_maps を見ると、特定のライブラリ (libc など) がノード 1 のメモリにバインドされていることがわかります。プロセスが必要とするすべてのメモリがノードにバインドされていることを確認するにはどうすればよいですか? 0?

4

2 に答える 2

0

コードは、ローカル プロセッサの L3 キャッシュにキャッシュされる傾向があります。読み取り専用であるため、キャッシュに読み込まれると、トラフィックが生成される可能性はほとんどありません。問題があることを示すプロファイリング情報がない限り、あまり気にしません。

于 2016-12-29T16:04:27.423 に答える
0

libc のような共有ライブラリは、プロセス/アプリケーションで指定されたメモリ バンクにバインドできません。共有ライブラリ沼を参照してください

于 2013-09-10T13:10:22.497 に答える