Temas Calientes

NVIDIA: Es más fácil paralelizar el código en CUDA y OpenCL que en x86

Tesla K20-K20X-portada

Hace un par de semanas Intel anunció sus nuevos aceleradores Xeon Phi 5110P, y siguiendo la tradición de sus agresivas campañas marketeras, los promociona como una solución mucho más fácil de programar en comparación con los aceleradores Nvidia Tesla y AMD FirePro S Series; campaña ante la que sabíamos que tarde o temprano tendría respuesta de Nvidia o AMD.

Nvidia es la primera en responder, y si bien no desmienten las afirmaciones de Intel, mencionan que tanto sus GPUs Tesla como los FirePro de su competidora AMD, gracias al uso de entornos de programación como CUDA, OpenACC y OpenCL permiten paralelizar de forma más fácil del código en comparación con la programación multi-núcleo para CPU (haciendo una clara alusión a Xeon Phi), logrando un rendimiento hasta 100 veces superior (o más) que el de los CPUs.

Aunque Nvidia acepta que ganancias de rendimiento suculentas (entre 100 a 200 veces) no son posibles en todos los escenarios del mundo HPC, pues estas cifras son posibles sólo en algunos escenarios donde el código no está del todo optimizado para su funcionamiento en múltiples núcleos CPU, mencionan que optimizando el código es posible duplicar el rendimiento CPU e incluso obtener ganancias de rendimiento entre 5 a 10 veces, lo cual obviamente haría no tan suculentas las ventajas de los GPUs.

Nvidia piensa que muchos programadores apostarán por los GPUs, los que gracias a APIs como CUDA, OpenACC y OpenCL, permiten obtener mayores ganancias de rendimiento y de forma más fácil que optimizar sus aplicaciones para múltiples núcleos x86.

Links:
-Too good to be true; bad coding versus GPGPU compute power  (PC Perspective)
-Nvidia says large GPGPU speed up claims were due to bad original code  (The Inquirer)

También pueden comentar en nuestro foro.

24 Comentarios

NVIDIA: Es más fácil paralelizar el código en CUDA y OpenCL que en x86

Hot debate. What do you think? Thumb up 20 Thumb down 22 avatar_Kansja Kansja dijo hace 6 meses

CUDA: programar explicitamente en paralelo, romperte la cabeza un rato, terminar con codigo buggeado que solo funciona en ciertas GPU.

x86: Declara OpenMP al principio del programa
?????
Profit.

Responder
Thumb up 3 Thumb down 0 avatar_Pedro Pedro dijo hace 6 meses

Sí claro, y las instrucciones AVX ahí esperando.

Thumb up 1 Thumb down 1 avatar_Kansja Kansja dijo hace 6 meses

OpenMP =/= compilador, OpenMP solo declara una libreria que al pasar por el compilador asigna automaticamente las threads posibles del programa, el compilador es el que analiza el codigo y busca posibles optimizaciones via instrucciones.

Well-loved. Like or Dislike: Thumb up 5 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

@Kansja:

Si taaaan facil es paralelizar codigo para x86 como colocar un "include " en la cabecera del codigo fuente... ¿Porqué los desarrolladores de Blender 3D no lo han puesto para multihilar el motor para juegos, si es algo tan trivial?
Pero si es así me voy a tomar un tiempo para colocar esa linea en todos los ficheros.
Y la optimización con SSE y AVX NO me es suficiente.

Thumb up 1 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

Era "include " lo que no me salió.

Thumb up 1 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

No sé porque no muestra los signos de mayor y menor qué.
La linea era "include omp.h" donde omp.h está entre los signos que no aparecen.

Thumb up 1 Thumb down 1 avatar_Kansja Kansja dijo hace 6 meses

>Preguntale a los devs, no a mi

Y puedes compilar tu mismo el codigo, intentalo, haz el commit en el Git, no?

Yo particularmente no uso Blender, uso OgreKit, como motor, asi que no sabria responderte

Well-loved. Like or Dislike: Thumb up 23 Thumb down 5 avatar_fcoberrios fcoberrios dijo hace 6 meses

ACTIVENLE EL AA A LA FOTO QUE ME ARDEN LOS OJOS!!!

Responder
Well-loved. Like or Dislike: Thumb up 12 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

Perdona, pero aqui estamos acostumbrados a ver los dientes de sierra.

Well-loved. Like or Dislike: Thumb up 10 Thumb down 0 avatar_fcoberrios fcoberrios dijo hace 6 meses

Jjajjaja, obviamente es broma xD.

Well-loved. Like or Dislike: Thumb up 17 Thumb down 4 avatar_Asdf Asdf dijo hace 6 meses

x86: Practicamente es para que corra solo intel

Cuda: Aca corre solo nvidia

OpenCL: Estandar abierto que cualquiera puede implementarlo.


Por que son tan tercas estas compañias que quieren privatizar todo? Oh, wait. Verdad que esa es la unica forma "segura" de ganar plata. Saben que si alguien quiere implementar esas tecnologias, obligadamente van a tener que comprar sus productos, y listo, bolsillos mas llenos.

Responder
Well-loved. Like or Dislike: Thumb up 7 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

Bueno, la mayoria de las normas para escribir en lenguajes como C, o C++ son normas abiertas, son muy pocos los IDE's que no pueden intercambiar los fivheros fuente, un ejemplo: FreePascal vs TurboPascal.
Asi que son altamente efectivos, más no perfectos; porque siempre habrá una empresa/corporación neci@ que querrá pasarse el estandar por la raja.

Thumb up 0 Thumb down 2 avatar_Kansja Kansja dijo hace 6 meses

Tambien el estandar abierto sufre mucho bloating por asegurar compatibilidad en mas dispositivos

Hot debate. What do you think? Thumb up 7 Thumb down 4 avatar_Dnuke Dnuke dijo hace 6 meses

Nvidia, dame un lenguaje "multiprocesador" que sea tan sencillo de aprender como Pascal, y cuando lo tengas ahi si nos entenderemos.

Responder
Thumb up 1 Thumb down 0 avatar_pepe pepe dijo hace 6 meses

Volvé a Cyclelogic a terminar Cervero y dsp hablá de programación

Well-loved. Like or Dislike: Thumb up 11 Thumb down 0 avatar_hgoravla hgoravla dijo hace 6 meses

En el ejemplo (multiplicar cada uno de los 512 elementos de un arreglo por 2) que usaron para la presentación del Xeon Phi se refieren a adaptar “código común Algoritmo de Montecarlo”. Al poco tiempo también anunciaron que estaba disponible su “SDK for OpenCL Applications XE 2013 for Xeon Phi.” que según la nota también funciona en sus microprocesadores x86 Core y en sus IGPs HD Graphics de 2º y 3º generación por lo que decidí descargarla para intentarlo. No obstante la extensa documentación incluida, no encontré un ejemplo para entusiasmar a principiantes (como yo) pero que supongo agregarán en la versión final. Descargué también el “AMD-APP-SDK-v2.7-Windows-64” y allí si encontré muchos ejemplos documentados con fuente y ejecutables entre otros este MonteCarloAsian que se ve mucho mas sofisticado útil y complejo que el del ejemplo de la presentación y del que dicen “Monte Carlo análisis es una piedra angular para la implementación de modelos financieros” “los analistas frecuentemente deben esperar horas para ver el resultado de las simulaciones del modelo. Esto afecta a su capacidad de responder rápidamente a situaciones dinámicas del mercado o para completar un análisis de riesgo antes del siguiente día de negociaciones”. No obstante que para mi sorpresa pude cargarlo y compilarlo muy fácilmente en el analizador de Intel este genera un binario con extensión .ir que no supe cómo ejecutar. Pero sí pude ejecutar la versión de AMD con estos resultados
MonteCarloAsian.exe -c 512 -i 5 -q –t --device cpu (ó gpu según el caso)
Modo CPU: Intel core i7 267QM 2.2Ghz Uso del CPU 0.78:92.33% 4 cores + 4 ht
Time: 52.632(sec) Transfer+Kernel: 51.9485(sec) Samples used / sec: 111017
Modo GPU: AMD 6740M Uso del GPU 28.26:29.01% y CPU 12.57:12.60%
Time: 9.97(sec) Transfer+Kernel: 8.6(sec) Samples used / sec: 669984
Como también dispongo de un desktop:
Modo CPU: AMD phenom II X4 955 3.2Ghz Uso del CPU 95.63:96.67% 4 cores
Time: 111.622(sec) Transfer+Kernel: 110.647(sec) Samples used / sec: 52133.3
Modo GPU: AMD HD6950 Uso del GPU 18.83% y CPU 12.57:12.60% 4 cores
Time: 9.166(sec) Transfer+Kernel: 7.821(sec) Samples used / sec: 739834
Ejecuté 5 muestras en cada caso sin variaciones sustanciales

Conclusión: El uso de un GPU (aquí usando OpenCL) SI influye de manera enorme en el rendimiento en casos “triviales” como el de este ejemplo. Cinco veces y hasta Doce veces más rápido que apoyándose únicamente en el CPU. Seguramente pueden obtenerse mejores resultados en otras configuraciones y no me cabe duda que usando GPU´s NVIDIA también. Tampoco se requiere una supercomputadora par lograrlo, de modo que ya me imagino a jóvenes emprendedores combinando el potencial de estas librerías con el del SDK de libre Office (por ejemplo) para crear soluciones prácticas usando solamente la hoja electrónica y que tentarían hasta a el más re-tacaño de los banqueros.
Se puede afirmar además que usando el GPU podría ver simultáneamente películas de alta definición mientras se ejecuta el modelo sin afectar mayormente el rendimiento, cosa que no sucedería usando el CPU solamente.

Responder
Thumb up 1 Thumb down 0 avatar_LM LM dijo hace 6 meses

Recuerdo haber implementado el método de montecarlo en una materia de simulación en la universidad (para calcular campos electricos teniendo información de borde) y ta, es de las cosas 100% paralelizables y con las que se puede alcanzar el rendimiento teórico de las gpu.
Me gustaría ver algoritmos más complicados, con datos compartidos, que precisen sincronización y además más sensibles a la predicción de branches a ver qué tan bien les iría a nvidia y amd.

Thumb up 5 Thumb down 2 avatar_Sergio Pizarro Sergio Pizarro dijo hace 6 meses

Me dio mucha flojera leer tu comentario, así que leí solo la conclusión xD

Thumb up 2 Thumb down 2 avatar_C4ct00s C4ct00s dijo hace 6 meses

No entendí ni pelota la parte técnica, pero por lo que caché le puedo preguntar a mi computador donde meter mis lucas? Y hacer que el banco me pase plata?

Eso suena bonito.

Well-loved. Like or Dislike: Thumb up 4 Thumb down 0 avatar_Dnuke Dnuke dijo hace 6 meses

@C4ct00s:

No puede decirte en que banco puedes colocar tu dinero pues el GPU no sabrá decirte con exactitud (o podría pero el código sería ultralargo), pero si puede realizar por ti un calculo que determine las variables de los bancos (como la tasa de interes en ahorro y la tasa de mora en la jarjeta de credito), ya terminado los cálculos te pasa un informe con los valores, los revisas y ves cúal banco es el más conveniente para guardar tu dinero.

Thumb up 2 Thumb down 0 avatar_C4ct00s C4ct00s dijo hace 6 meses

Igual estaría re bueno, porque me mareo mirando planillas de bancos con sus tasas de interés y cláusulas truchas.

Pero en base a eso, por ejemplo me puede decir donde invertir en caso que me interese meter plata en la bolsa (caso hipotético) y hacer una proyección del comportamiento de las acciones no?

Deja tu Comentario

La opción de comentar está abierta a todos los usuarios, pero te pedimos por favor mantenerte dentro del tema del artículo y no publicar comentarios ofensivos o publicidad basura. Nos reservamos el derecho de eliminar cualquier comentario que no cumpla estas reglas.

Para que aparezca tu foto en vez del icono genérico en tu comentario, el email con el que comentas debe estar inscrito en Gravatar.

*