Mi CPU es un Core i3 330M con 2 núcleos y 4 hilos. Cuando ejecuto el comando cat /proc/cpuinfo
en mi terminal, es como si tuviera 4 CPUS. Cuando uso la función OpenMP get_omp_num_procs()
también obtengo 4.OpenMP y núcleos/hilos
Ahora tengo una clase de vector C++ estándar, me refiero a una clase de matriz doble de tamaño fijo que no usa plantillas de expresión. He paralelizado cuidadosamente todos los métodos de mi clase y obtengo la aceleración "esperada".
La pregunta es: ¿puedo adivinar la velocidad esperada en un caso tan simple? Por ejemplo, si agrego dos vectores sin bucles para-paralelos, obtengo algo de tiempo (usando el comando de tiempo de shell). Ahora, si uso OpenMP, ¿debería dividir el tiempo entre 2 o 4, de acuerdo con la cantidad de núcleos/hilos? Insisto en que solo estoy preguntando por este problema simple en particular, donde no hay interdependencia en los datos y todo es lineal (adición de vectores).
Aquí hay un código:
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;
}
ya he leído este post: OpenMP thread mapping to physical cores.
Espero que alguien me diga más acerca de cómo OpenMP hace el trabajo en este caso simple. Debo decir que soy un principiante en informática paralela.
Gracias!