インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス
プリミティブの 1 次元コンテナーの配列構造体 (SoA) メモリーレイアウト用のテンプレート・クラスです。
#include
<sdlt/soa1d_container.h>
template<typename PrimitiveT, int AlignD1OnIndexT = 0, class AllocatorT = allocator::default_alloc> class soa1d_container;
typename PrimitiveT |
配列の各要素の型。 |
int AlignD1OnIndexT = 0 |
[オプション] データアクセスがアライメントされるインデックス (ステンシル向け) |
class AllocatorT = allocator::default_alloc |
[オプション] 使用されるアロケーターの型。現在、allocator::default_alloc のみサポートされています。 |
内部的に配列構造体 (SoA) メモリーレイアウトを使用するプリミティブ要素の動的サイズ調整コンテナー。次のものを提供します。
メンバー |
説明 |
---|---|
typedef size_t size_type; |
コンテナーのメソッドのサイズ指定に使用する型。 |
template <typename OffsetT = no_offset> using accessor; |
このコンテナーの accessor にエイリアスされたテンプレート。 |
template <typename OffsetT = no_offset > using const_accessor; |
このコンテナーの const_accessor にエイリアスされたテンプレート。 |
メンバーの型 |
説明 |
---|---|
soa1d_container( size_type size_d1 = 0u, buffer_offset_in_cachelines buffer_offset = buffer_offset_in_cachelines(0), const allocator_type & an_allocator = allocator_type()); |
オプションで指定されるアロケーター・インスタンスを使用して、size_d1 要素の初期化されていないコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。 |
soa1d_container( size_type size_d1, const PrimitiveT &a_value, buffer_offset_in_cachelines buffer_offset = buffer_offset_in_cachelines(0), const allocator_type & an_allocator = allocator_type()); |
オプションで指定されるアロケーター・インスタンスを使用して、size_d1 要素のコンテナーを構築し、各要素を a_value で初期化します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。 |
template<typename StlAllocatorT> soa1d_container( const std::vector<PrimitiveT, StlAllocatorT> &other, buffer_offset_in_cachelines buffer_offset = buffer_offset_in_cachelines(0), const allocator_type & an_allocator = allocator_type()); |
オプションで指定されるアロケーター・インスタンスを使用して、other の各要素を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。 |
soa1d_container( const PrimitiveT *other_array, size_type number_of_elements, buffer_offset_in_cachelines buffer_offset = buffer_offset_in_cachelines(0), const allocator_type & an_allocator = allocator_type()); |
オプションで指定されるアロケーター・インスタンスを使用して、配列 other_array から number_of_elements 要素を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。 |
template< typename IteratorT > soa1d_container( IteratorT a_begin, IteratorT an_end, buffer_offset_in_cachelines buffer_offset = buffer_offset_in_cachelines(0), const allocator_type & an_allocator = allocator_type()); |
オプションで指定されるアロケーター・インスタンスを使用して、範囲 [a_begin-an_end) の要素にその範囲の対応する要素から値を同じ順序でコピーしてコンテナーを構築します。4K キャッシュ・エイリアシングを管理できるように、オプションで指定されるキャッシュラインの数を使用してメモリー上のバッファーの開始位置をオフセットします。 |
soa1d_container clone() const; |
戻り値: 要素の個別のコピーを含む新しい soa1d_container インスタンス。 |
void resize(size_type new_size_d1); |
new_size_d1 要素を含めるようにコンテナーのサイズを調整します。 新しいサイズが現在のコンテナーサイズよりも大きい場合、新しい要素は初期化されません。 |
accessor<> access(); |
戻り値: 組込みインデックス・オフセットを含まない accessor。 |
accessor<int> access(int offset); |
戻り値: 組込みインデックス offset に基づく整数ベースの accessor。 |
template<int IndexAlignmentT> accessor<aligned_offset<IndexAlignmentT> > access(aligned_offset<IndexAlignmentT>); |
戻り値: 組込みインデックス offset に基づく aligned_offset<IndexAlignmentT> ベースの accessor。 |
template<int OffsetT> accessor<fixed_offset<OffsetT> > access(fixed_offset<OffsetT>); |
戻り値: 組込みインデックス offset に基づく fixed_offset<OffsetT> ベースの accessor。 |
const_accessor<> const_access() const; |
戻り値: 組込みインデックス・オフセットを含まない const_accessor。 |
const_accessor<int> const_access(int offset) const; |
戻り値: 組込みインデックス offset に基づく整数ベースの const_accessor。 |
const_accessor<aligned_offset<IndexAlignmentT>> const_access(aligned_offset<IndexAlignmentT> offset) const; |
戻り値: 組込みインデックス offset に基づく aligned_offset<IndexAlignmentT> ベースの const_accessor。 |
template<int OffsetT> const_accessor<fixed_offset<OffsetT> > const_access(fixed_offset<OffsetT>) const; |
戻り値: 組込みインデックス offset に基づく fixed_offset<OffsetT> ベースの const_accessor。 |
STL との互換性
上の表のパフォーマンス重視のインターフェイスに加えて、soa1d_container はパフォーマンスよりも統合を重視した std::vector インターフェイスのサブセットを実装します。 インポート/エクスポートのみという制約により、オブジェクトへの参照を返すことはできません。代わりに、iterators と operator[] はプロキシー・オブジェクトを返し、その他の "const' メソッドは "value_type const" を返します。 さらに、iterators は -> 演算子をサポートしていません。 この制約にもかかわらず、iterators は STL アルゴリズムに渡すことができます。 また、パフォーマンス上の理由から、resize は新しい要素を初期化しません。 次の std::vector インターフェイス・メソッドが実装されます。
size、max_size、capacity、empty、reserve、shrink_to_fit
assign、push_back、pop_back、clear、insert、emplace、erase
cbegin、cend、begin、end、begin、end、crbegin、crend、rbegin、rend、rbegin、rend
operator[]、front() const、back() const、at() const
swap、==、!=
swap、soa1d_container(soa1d_container&& donor)、soa1d_container & operator=(soa1d_container&& donor)