Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: epoca en 25 Febrero 2015, 16:58 pm



Título: Paralelizar Codigo Secuencial
Publicado por: epoca en 25 Febrero 2015, 16:58 pm
Estoy intentando paralelizar un bucle for ¿Existe alguien que pudiera decirme por donde empezar?

Un saludo


Título: Re: Paralelizar Codigo Secuencial
Publicado por: eferion en 25 Febrero 2015, 17:25 pm
¿C, C++, C++11?

Si lo quieres hacer a mano, siempre puedes coger, en cada iteración del for, un hilo de un pool (si no hay disponibles, esperas) y al hilo asignarle la tarea correspondiente. Una vez finalizada la tarea devuelves el hilo al pool y continúas con la ejecución.


Título: Re: Paralelizar Codigo Secuencial
Publicado por: epoca en 25 Febrero 2015, 21:54 pm
Creo que no es tan facil, o es que yo lo veo muy dificil, lo tengo que paralizar usando CUDA dentro del for, en C, existe una función pero lo que no entiendo es como asocio esa función para queda hilo la ejecute y cree un resultado diferente. ¿Como se asocia dicha función a sus correspondiente hilos?, ¿lo realiza el compilador automaticamente?

Gracias de antemano por tu ayuda.


Título: Re: Paralelizar Codigo Secuencial
Publicado por: eferion en 26 Febrero 2015, 07:40 am
Para usar CUDA tienes que cargar una extensión en el compilador. Esta extensión añade ciertas características que no están presentes en una compilación típica y es lo que permite que se puedan ejecutar ciertas sentencias de forma paralela usando la tarjeta gráfica para ello.

Por cierto, ten en cuenta que no se puede depurar el código que se ejecute en la tarjeta gráfica, así como tampoco su memoria, así que suele ser una buena práctica probar la mayor parte del código en una compilación sin CUDA.

Un saludo.


Título: Re: Paralelizar Codigo Secuencial
Publicado por: epoca en 26 Febrero 2015, 09:43 am
Una compilación sin CUDA, te refieres a una compilación secuencial ¿verdad?.
Soy consciente de que no se puede depurar el código que mandes a la gráfica pero puedes definir las funciones que vas a utilizar en la GPU como por ejemplo: __global__void ASDecisionRule(.....)
Con lo que no me aclaro es: dentro de esas funciones que tu envías a la GPU ¿automáticamente se dividen en tantas como hilos haya? y ¿Como se entienden entre si?

¿Conoces la paralelizacion del problema de viajero TSP? Estoy intentando hacer algo similar.

Un saludo


Título: Re: Paralelizar Codigo Secuencial
Publicado por: eferion en 27 Febrero 2015, 10:16 am
No soy experto en CUDA. Sobre este tema únicamente tengo algunas nociones básicas.

Si se que para sincronizar elementos tienes que utilizar mecanismos de exclusión mutua (si toqueteas variables comunes), pero poco más al respecto.

Quizás deberías buscar algún manual de CUDA en Internet.

Siento no ser de más ayuda.

Un saludo.


Título: Re: Paralelizar Codigo Secuencial
Publicado por: epoca en 27 Febrero 2015, 13:14 pm
Bueno, de todas formas muchas gracias por preocuparte.

Un saludo.

Te mantendre informado de lo que consigo


Título: Re: Paralelizar Codigo Secuencial
Publicado por: ivancea96 en 27 Febrero 2015, 15:08 pm
Sinó, también tienes los threads de C++11 (http://www.cplusplus.com/reference/thread/thread/). Así usas threads en al CPU normal, sin gráfica.


Título: Re: Paralelizar Codigo Secuencial
Publicado por: epoca en 28 Febrero 2015, 08:29 am
Gracias, pero eso no me vale. Me piden trabajar con la grafica