0

ハイ パフォーマンス コンピューティングのコンテキストでは、次のようなコードを見ました。

typedef union
{
  erts_smp_rwmtx_t rwmtx;
  byte  cache_line_align_[ERTS_ALC_CACHE_LINE_ALIGN_SIZE(sizeof(erts_smp_rwmtx_t))];
}erts_meta_main_tab_lock_t;

erts_meta_main_tab_lock_t    main_tab_lock[16];

上記の表示は何をしcache_line_align_ますか?なぜ便利なのですか?

4

1 に答える 1

2

マルチスレッドでプログラムを作成する場合、プログラムの 2 つの部分が、共有メモリ システムで隣り合っているメモリ内のオブジェクト/プリミティブにアクセスしようとする場合があります。

残念ながら、コンピュータ ハードウェアは、両方のメモリが同じキャッシュ ライン上にある場合、メモリの 1 つの部分を 1 つのプロセッサに提供し、別の部分を別のプロセッサに同時に提供することはできません。

この落とし穴は、偽の共有として知られています。

これを克服するために、問題のメモリ位置 (変数) の間にスペースのバッファーを追加できます。

そのスペースのバッファーは、目的の変数をメモリ内で分散させることを除いて、まったく何もしません。

キャッシュ パフォーマンス用に最適化された非マルチ スレッド プログラムがいくつかあり、同様のトリックが見られる場合があります。キャッシュライン。

于 2012-07-28T01:13:30.103 に答える