Paralelizar Codigo Secuencial

Iniciado por epoca, 25 Febrero 2015, 16:58 PM

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

epoca

Estoy intentando paralelizar un bucle for ¿Existe alguien que pudiera decirme por donde empezar?

Un saludo

eferion

¿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.

epoca

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.

eferion

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.

epoca

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

eferion

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.

epoca

Bueno, de todas formas muchas gracias por preocuparte.

Un saludo.

Te mantendre informado de lo que consigo

ivancea96

Sinó, también tienes los threads de C++11. Así usas threads en al CPU normal, sin gráfica.

epoca

Gracias, pero eso no me vale. Me piden trabajar con la grafica