2016-05-03 24 views
5

Esiste un modo comodo ed efficiente per utilizzare l'API del contenitore standard cpp in modo sensibile alla NUMA?Contenitore Cpp NUMA aware

Mi piacerebbe fare una moltiplicazione di Matrix Vector sparse parallele OpenMP in un ambiente cpp. per allocare e inizializzare i valori di vettori e matrici per quanto riguarda i domini NUMA, il codice C avrebbe in qualche modo simile a questa:

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; 

In Cpp Vorrei utilizzare std :: vector (std :: array con anche una dimensione fissa è ok). std :: vector :: reserve() fa il trucco? E 'legale fare qualcosa di simile:

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 */ 

Come posso poi impostare il formato corretto per lo std :: vector?

Qualcuno sa un modo più elegante?

+1

ridimensiona() non è al corrente di NUMA poiché inizializza tutti i valori su un dominio NUMA (primo tocco) – Titzi

+0

È una cosa speciale per il codice NUMA consapevole di 'delete' a' malloc'ed memory? –

risposta