Ayuda - Programación Paralela o Distribuida en C++

Iniciado por CobraCY, 12 Noviembre 2011, 15:46 PM

0 Miembros y 1 Visitante están viendo este tema.

CobraCY

Buenas, soy nuevo en la comunidad y me pasé revisando y buscando algo que me ayude a entender un poco mejor la programación paralela o distribuida, de modo que pueda hacer mis programas funcionar en todos los núcleos (procesadores) de un ordenador.

Ya busque mucho en google y sin resultado, muchos papers, proyectos y teoría pero nada práctico.
Me gustaría ver algunos ejemplos de como se aplica esto, que librerías necesito para empezar, como es que funciona y cuales son las ventajas y desventajas que obtengo al usar este tipo de programación.

Si hay algún tema de este tipo, es posible que se me haya pasado por alto, agradecería me brinden el enlace y si en caso yo encuentro algo navegando en la red lo publicaré aquí para ayudar al resto de gente.

Saludos y gracias por su tiempo.


CobraCY

Gracias por la respuesta, pero no es lo que busco.

Si me dejo entender, hay una forma de volver la programación en C++ al paralelo, para que de este modo distribuya la ejecución de distintas tareas en diversos nucleos, por ejemplo:

Tengo un código que aplica 2 for, uno dentro del otro(anidado).

Código (cpp) [Seleccionar]

for(int i=0; i < x; i++)
{
     for(int j=0; j < y; j++)
     {
        if(i == j)
            return x+y;
     }
}


Entonces lo que hace esto es dividir el primer for a un nucleo y el for anidado en otro nucleo, lo cual permite doble ejecución en la mitad del tiempo. Se que para esto hay que usar algunas librerias y declaraciones pero la verdad no he encontrado nada de ejemplos acerca de esto, mucha teoria y poca práctica y/o ejemplos.

Si alguien tuviera conocimientos acerca de este metodo de programación y me brindara su ayuda le estaria eternamente agradecido.

Saludos.



naderST


rir3760

Cita de: CobraCY en 13 Noviembre 2011, 00:38 AMEntonces lo que hace esto es dividir el primer for a un nucleo y el for anidado en otro nucleo
El problema con el ejemplo es: lo que ejecuta el bucle externo es el bucle interno. Para que fuera posible realizar el proceso en paralelo deberia ser:
for (int i = 0; i < x; i++){
   // Algun proceso basado en i ...
}

for (int j = 0; j < y; j++){
   // Algun proceso basado en j ...
}


Informacion en Wikipedia: Parallel computing

Una de las APIs: OpenMP

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

CobraCY

exacto rir3760, es por eso que busco algunos ejemplos acerca de esto, donde pueda ver como aplicarlo y desarrollar software de esta forma, pues como sabemos los ordenadores tienen cada vez más núcleos y haces que tu software trabaje solo en 1 estás desperdiciando potencial de ordenador, así que me gustaría información de como aplicar este método en un lenguaje como C++.

Saludos.

pucheto

Para memoria compartida, averigua sobre Threads ( pthreads o std::thread por ejemplo ), OpenMP, Cilk, Cilk++ . Y averigua sobre algoritmos lock-free.
Para entornos distribuidos averigua sobre MPI, Erlang y design patterns para estos, como MapReduce.

CobraCY

gracias :) ;-) ahora me pondré a investigar, igual agradezco más respuestas :D...

Saludos.