Foros del Web » Programación para mayores de 30 ;) » C/C++ »

doble,quad nucleo/core

Estas en el tema de doble,quad nucleo/core en el foro de C/C++ en Foros del Web. ¿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 ...
  #1 (permalink)  
Antiguo 25/07/2010, 16:03
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 1
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.
  #2 (permalink)  
Antiguo 25/07/2010, 17:12
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 7 meses
Puntos: 95
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.
  #3 (permalink)  
Antiguo 26/07/2010, 02:22
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 1
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.
  #4 (permalink)  
Antiguo 26/07/2010, 08:58
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 9 años, 9 meses
Puntos: 228
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.....
  #5 (permalink)  
Antiguo 26/07/2010, 09:30
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 7 meses
Puntos: 95
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.
  #6 (permalink)  
Antiguo 26/07/2010, 15:53
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 1
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.
  #7 (permalink)  
Antiguo 27/07/2010, 16:34
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 7 meses
Puntos: 95
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
  1. //Definicion del kernel
  2.  
  3. __global__ void SumaVector(float* A, float* B, float* C)
  4.  {
  5. int i = threadIdx.x;
  6. C[i] = A[i] + B[i];
  7.  }
  8. int main()
  9. {
  10.  //Llamada al kernel con N hilos CUDA
  11. SumaVector<<<1, N>>>(A, B, C); }

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)

Última edición por AlanChavez; 27/07/2010 a las 16:59
  #8 (permalink)  
Antiguo 28/07/2010, 05:18
 
Fecha de Ingreso: julio-2010
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 1
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.
  #9 (permalink)  
Antiguo 28/07/2010, 15:49
 
Fecha de Ingreso: junio-2010
Ubicación: Charlotte, NC
Mensajes: 611
Antigüedad: 9 años, 7 meses
Puntos: 95
Respuesta: doble,quad nucleo/core

Cita:
Iniciado por tenoffers Ver Mensaje
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.
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.

Que procesador tienes, tal vez alguno de mis compañeros de trabajo me pueda informar que alternativas ofrece Intel para procesadores como el tuyo.

Etiquetas: core, doble, dual, nucleo, quad
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:52.