¿como puedo aprovechar los 2 o 4 nucleos de intel core?
Puede alguien poner un ejemplo de programa en c++ con un simple for{} que aproveche los dos o cuatro nucleos a la vez?
alguna web donde hayan ejemplos?
Gracias.
| |||
doble,quad nucleo/core ¿como puedo aprovechar los 2 o 4 nucleos de intel core? Puede alguien poner un ejemplo de programa en c++ con un simple for{} que aproveche los dos o cuatro nucleos a la vez? alguna web donde hayan ejemplos? Gracias. |
| |||
Respuesta: doble,quad nucleo/core Si sabes inglés, esta es una excelente web donde puedes encontrar ejemplos de multiplataform threading. http://www.boost.org/doc/libs/1_35_0...ml/thread.html La otra es que te metas directamente a la pagina de desarrolladores de intel core, y descargues el SDK. Yo trabajo con GPU's y la programacion CUDA de Nvidia, mi estacion de trabajo es una computadora de 32 GB de RAM, y un procesador con la capacidad de 20 procesadores normales, esta diseñada para hacer cosas 800 o 1000 veces mas rapido que una computadora avanzada, tiene la capacidad de 4 teraflops y en mi experiencia programando con C++, jamás he visto un programa que con un simple for de c++ aproveches o explotes al maximo la capacidad de un procesador multi nucleo. |
| |||
Respuesta: doble,quad nucleo/core Gracias Alan, por su puesto que con un simple {for} no podemos hacer un programa multinúcleo, me referia a hacer algo simple. ¿Puedes decirme donde puedo encontrar ejemplos en source code? Gracias. |
| |||
Respuesta: doble,quad nucleo/core Ya que estan hablando de esto, les hago una pregunta... El que se ocupa de aprovechar los multinucleos es el Hardware y no el Sfotware?? Osea que a la hora de programar no se puede diferenciar codigo para un nucleo y codigo para otro. Esto lo digo porque no he visto cambio a la hora de programar en assembler. O acaso se le agregan nuevos registros??? Ademas el temara de Thread ya existe desde antes de los multinucleos..... |
| |||
Respuesta: doble,quad nucleo/core Asi es el tema de threads y multi threads ya existía desde antes que se comercializaran los procesadores multinucleo. La diferencia es que si tienes dos nucleos, entonces 2 threads pueden correr al mismo tiempo. Con un solo nucleo, 2 threads se dividen en intervalos, y aunque puede dar la apariencia de estar corriendo al mismo tiempo, en realidad estarían alternandose para correr. Con respecto al source code, como trabajo con nvidia , te puedo facilitar la página para que te familiarices (si te interesa) con la tecnología CUDA: http://developer.nvidia.com/object/c...downloads.html Ahi viene el SDK, los source codes y la documentacion necesaria, sin embargo necesitas un GPU con CUDA compatible. Puedes darle una miradita a la página de Intel, igual tambien pueden ofrecer algo similar. |
| |||
Respuesta: doble,quad nucleo/core OK, entonces la pregunta correcta seria como correr threads (1,2,3,4 o los que sea) a la vez para ejecutar una aplicacion mas rapida, aprovechar toda la potencia de la CPU. Un ejemplo de un programa que use 2 threads para calcular (sumar, multiplicar cualquier) un numero muy grande, por ejemplo? Gracias. |
| |||
Respuesta: doble,quad nucleo/core Bueno escarbando en mi repositorio de codigo encontre uno muy basico que suma dos vectores. Pero para compilarlo tienes que tener una computadora compatible con CUDA, el SDK y el compilador nvcc, pero a manera ilustrativa un programa en C, muy simple para un GPU multinucleo, luciria algo asi: La arquitectura CUDA te permite crear funciones escritas en C, llamadas kernels. Cuando las llamas, son ejecutadas N veces, en paralelo por N hilos (threads) CUDA Cada hilo generado por CUDA, se le asigna una ID unica, la cual podemos accesar a traves de la palabra reservada threadIDx
Código C:
Ver original Otro detalle es que en este tipo de programacion, raras veces utilizas un for, ya que el for restringe tu programa a un solo nucleo, y estarias desaprovechando la capacidad que tiene tu CPU (o GPU en mi caso)
__________________ Visita mi blog donde escribo acerca de desarrollo web y emprendimiento Sigueme en Twitter: @alanchavezv Última edición por AlanChavez; 27/07/2010 a las 15:59 |
| |||
Respuesta: doble,quad nucleo/core Gracias Alan, no dispongo de CUDA en mi equipo pero si 4 quad core, por ello el interes en un ejemplo (completo: includes, etc...) que aproveche 16 threads a la vez. Tema del for: con 'do' 'while' se optimizaria el codigo? No se como darte 'karma' o puntos en este foro, pero solo por el interes mostrados te doy el maximo. Gracias. |
| |||
Respuesta: doble,quad nucleo/core Cita: En realidad, no es cuestion de cambiar de iterador, sino de optimizar la funcion for. Es hacer un override a la funcion for, para optimizarla en paralelo, lo mismo se haría con while y cualquier otra estructura iterativa.
Iniciado por tenoffers Gracias Alan, no dispongo de CUDA en mi equipo pero si 4 quad core, por ello el interes en un ejemplo (completo: includes, etc...) que aproveche 16 threads a la vez. Tema del for: con 'do' 'while' se optimizaria el codigo? No se como darte 'karma' o puntos en este foro, pero solo por el interes mostrados te doy el maximo. Gracias. Que procesador tienes, tal vez alguno de mis compañeros de trabajo me pueda informar que alternativas ofrece Intel para procesadores como el tuyo.
__________________ Visita mi blog donde escribo acerca de desarrollo web y emprendimiento Sigueme en Twitter: @alanchavezv |
Etiquetas: |