5

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

1つのNUMAドメイン(最初のタッチ)のすべての値を初期化するので、resize()はNUMAを意識していません – Titzi

+0

NUMA対応のコードでmallocのメモリを削除するのは特別ですか? –

答えて