NUMA対応の方法でcpp標準コンテナAPIを使用する便利で効率的な方法はありますか?NUMA対応Cppコンテナ
私は、cpp環境でOpenMP並列スパース行列ベクトル乗算を行いたいと考えています。 NUMAドメインに関して、ベクトルと行列の値を割り当て、初期化する 、Cのコードが何らかの形で次のようになり:CPPで
size_t N = 1000000;
double* vecVal = malloc (N*sizeof(double));
#pragma OMP parallel for
for (size_i=0; i<N; ++i)
{
vecVal[i] = 0.;
}
/* do spMV */
delete vecVal;
を私はスタンダードを使用したい::ベクトル(STD ::の配列固定サイズもOKです)。 std :: vector :: reserve()はそのトリックを行いますか? それはこのような何かをするために有効です。
私はその後のstd ::ベクトルに正しいサイズを設定するにはどうすればよいstd::vector<double> vec;
vec.reserve(N);
double *vecVal = vec.data();
#pragma OMP parallel for
for (size_i=0; i<N; ++i)
{
vecVal[i] = 0.;
}
/* do spMV */
?
誰かがもっとエレガントな方法を知っていますか?
1つのNUMAドメイン(最初のタッチ)のすべての値を初期化するので、resize()はNUMAを意識していません – Titzi
NUMA対応のコードでmallocのメモリを削除するのは特別ですか? –