La mia CPU è un Core i3 330M con 2 core e 4 thread. Quando eseguo il comando cat /proc/cpuinfo
nel mio terminale, è come se avessi 4 CPUS. Quando uso la funzione OpenMPOpenMP e core/thread
Ora ho una classe di vettore C++ standard, intendo una classe di array doppio di dimensioni fisse che non utilizza modelli di espressione. Ho attentamente parallelizzato tutti i metodi della mia classe e ottengo l'accelerazione "attesa".
La domanda è: posso immaginare l'accelerazione prevista in un caso così semplice? Ad esempio, se aggiungo due vettori senza cicli for paralleli, ottengo un po 'di tempo (usando il comando shell time). Ora se uso OpenMP, dovrei ottenere un tempo diviso per 2 o 4, in base al numero di core/thread? Sottolineo che sto solo chiedendo questo particolare problema semplice, in cui non c'è alcuna interdipendenza nei dati e tutto è lineare (aggiunta vettoriale).
Ecco il codice:
Vector Vector::operator+(const Vector& rhs) const
{
assert(m_size == rhs.m_size);
Vector result(m_size);
#pragma omp parallel for schedule(static)
for (unsigned int i = 0; i < m_size; i++)
result.m_data[i] = m_data[i]+rhs.m_data[i];
return result;
}
ho già letto questo post: OpenMP thread mapping to physical cores.
Spero che qualcuno mi spieghi di più su come OpenMP può portare a termine il lavoro in questo semplice caso. Devo dire che sono un principiante nel calcolo parallelo.
Grazie!