NVIDIA: Es más fácil paralelizar el código en CUDA y OpenCL que en x86
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.
Intel fabricará microprocesadores a medida para...
NVIDIA presenta oficialmente su nuevo GPU GeFor...
Intel Core i7-4770K “Haswell-DT” versión comerc...
Hacer una réplica por supercomputador del cereb...
Smart Dust: La computadora más pequeña que un g...
AMD anuncia su promoción Never Settle Reladed L...
AMD lanza su GPU Radeon HD 8970M “Neptune”
Se filtran imágenes, especificaciones y precio ...
24 Comentarios
NVIDIA: Es más fácil paralelizar el código en CUDA y OpenCL que en x86
CUDA: programar explicitamente en paralelo, romperte la cabeza un rato, terminar con codigo buggeado que solo funciona en ciertas GPU.
Responderx86: Declara OpenMP al principio del programa
?????
Profit.
Sí claro, y las instrucciones AVX ahí esperando.
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.
@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.
Era "include " lo que no me salió.
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.
>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
ACTIVENLE EL AA A LA FOTO QUE ME ARDEN LOS OJOS!!!
ResponderPerdona, pero aqui estamos acostumbrados a ver los dientes de sierra.
Jjajjaja, obviamente es broma xD.
x86: Practicamente es para que corra solo intel
ResponderCuda: 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.
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.
Tambien el estandar abierto sufre mucho bloating por asegurar compatibilidad en mas dispositivos
Nvidia, dame un lenguaje "multiprocesador" que sea tan sencillo de aprender como Pascal, y cuando lo tengas ahi si nos entenderemos.
ResponderVolvé a Cyclelogic a terminar Cervero y dsp hablá de programación
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
ResponderMonteCarloAsian.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.
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.
Me dio mucha flojera leer tu comentario, así que leí solo la conclusión xD
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.
@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.
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