メモリー割り当て

インテル® スレッディング・ビルディング・ブロック (インテル® TBB) には、STL テンプレート・クラス std::allocator に似た 2 つのメモリー・アロケーター・テンプレートが用意されています。scalable_allocator<T>cache_aligned_allocator<T> の 2 つのテンプレートは、次のように、並列プログラムのクリティカルな問題に対処します。

常にキャッシュライン上で割り当てるには、cache_aligned_allocator<T> クラスを使用します。cache_aligned_allocator によって割り当てられる 2 つのオブジェクトでは、フォールス・シェアリングが発生しないことが保証されます。1 つのオブジェクトが cache_aligned_allocator で割り当てられ、もう 1 つのオブジェクトが別の方法で割り当てられた場合、フォールス・シェアリングを回避する保証はありません。cache_aligned_allocator のインターフェイスは std::allocator と同一なため、STL テンプレート・クラスの allocator 引数として使用できます。

次のコードは、cache_aligned_allocator を割り当てに使用する STL ベクトルの宣言方法を示しています。

std::vector<int,cache_aligned_allocator<int> >;

ヒント

cache_aligned_allocator は、たとえ小さなオブジェクトであっても、メモリーに対応するキャッシュラインを少なくとも 1 つ割り当てる必要があるため、多くの空間が必要になります。そのため、フォールス・シェアリングが重要な問題になりそうな場合のみ、cache_aligned_allocator<T> を使用するようにしてください。

スケーラブル・メモリー・アロケーターは、インテルの PSL CTG チームによって開発された McRT テクノロジーを採用しています。