Estoy intentando paralelizar un bucle for ¿Existe alguien que pudiera decirme por donde empezar?
Un saludo
¿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.
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.
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.
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
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.
Bueno, de todas formas muchas gracias por preocuparte.
Un saludo.
Te mantendre informado de lo que consigo
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.
Gracias, pero eso no me vale. Me piden trabajar con la grafica