Есть ли удобный и эффективный способ использования стандартного API-интерфейса cpp в режиме NUMA?NUMA aware Cpp Container
Я хотел бы сделать параллельное разреженное умножение векторной матрицы OpenMP в среде cpp. Чтобы выделить и инициализировать векторные и матричные значения по отношению к NUMA доменов, код C будет как-то выглядеть следующим образом:
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;
В Cpp Я хотел бы использовать станд :: вектор (Std :: массив фиксированный размер также хорошо). Есть ли std :: vector :: reserve() сделать трюк? Законно ли это сделать что-то вроде этого:
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 */
Как я могу после этого установить правильный размер в станд :: вектор?
Кто-нибудь знает более элегантный способ?
resize() не является NUMA, так как он инициализирует все значения в одном домене NUMA (первый штрих) – Titzi
Является ли особой вещью для кода NUMA для «удаления» памяти malloc? –