Ho:
- matrice 20 * 40000 di float M -
std::vector<std::vector<float>>
; - 1000 valori X;
- ~ 2000000 strutture POD S.
Una situazione tipica è: per ogni valore di X prendo parecchie strutture da S e cambio alcuni intervalli in righe di M (questi intervalli possono sovrapporsi); poi passo attraverso la M e conto queste modifiche per ricevere l'output desiderato.
Quindi ho 2 problemi:
- Devo memorizzare t copie di M (per ora li creo in una sorta di pool e quindi ottengo
thread_local
di riferimento per ogni thread) - Devo chiamare
std::fill(M[i].begin(), M[i].end(), 0);
prima di ogni iterazione e vedo che sta consumando il tempo.
E domande:
- L'approccio con riferimento a thread_local è appropriato?
- Come gestire
std::fill()
? Come può essere migliorato?