Discusión sobre el artículo "OpenCL: El puente hacia mundos paralelos"

 

Artículo publicado OpenCL: El puente hacia mundos paralelos:

A finales de enero de 2012 la empresa de desarrollo de software que está detrás de Meta Trader 5 anunció el soporte nativo de OpenCL en MQL5. Utilizando un ejemplo ilustrativo, el artículo plantea los fundamentos de programación en OpenCL en el entorno MQL5 y proporciona algunos ejemplos de la optimización simple del programa para incrementar la velocidad de operación.

Autor: Sceptic Philozoff

 

Muchas gracias.

Llevaba mucho tiempo esperando un artículo sobre OpenCL.

Voy a leerlo ahora. :)

 
Un montón de bukaf :) Pero bukaf muy necesario y útil, masticaré este granito. ¡Gracias!
 
joo: Llevo mucho tiempo esperando un artículo sobre OpenCL.

Voy a leerlo. :)

Probablemente no lo necesites demasiado. Ya deberías saberlo todo.

En el próximo artículo será serio, habrá mucho sobre hardware.

 
Sí. Realmente es demasiado pronto para incluirlo, pero desde luego es necesario adaptar esta norma para la especialización. Tal vez sea posible hacerlo en la próxima versión del sexto thester, me gustaría tener esta funcionalidad antes....
 
GKS: Sí. Es demasiado pronto para activar

¿Qué es demasiado pronto para activar, por favor, aclárelo. Si OpenCL - ya está habilitado. Todos los experimentos se realizaron directamente en MetaEditor 5.

P.D. Lo principal es que a través de OCL, el codificador realmente tiene acceso a algo que no tenía acceso antes. Estos son:

- (S)SSEx, que puede incluirse en Visual Studio, pero no puede incluirse en MQL5 sin OCL (sin contar las dlls).

- acceso a calculos en GPUs discretas, que adicionalmente acelera lo que se puede hacer en un solo nucleo en MQL5 sin ningun truco tipo dll.
.

 
Mathemat:

1. Probablemente no lo necesites demasiado. Ya deberías saber cómo hacer todas estas cosas.

2. En el próximo artículo será serio, habrá mucho sobre hardware.

1. Lo necesito.

2. ¡Genial!

La pregunta sigue sin quedarme clara: ¿Por qué llamas "emulación" a la ejecución del programa OCL en la CPU? La CPU es sólo uno de los dispositivos, junto con la GPU, con los que el programa OCL puede funcionar si existe el controlador correspondiente para el dispositivo, y todos los núcleos del procesador están cargados.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
joo: La pregunta sigue sin quedarme clara: ¿por qué llamas "emulación" a ejecutar un programa OCL en la CPU?

Porque eso es la emulación, emulación lenta. En la CPU (gracias a Intel, tiene un compilador inteligente que busca la vectorización si no lo prohibes explícitamente) la paralelización se hace mediante instrucciones (S)SSEx y quizá análisis de dependencias, mientras que las GPU tienen muchas más posibilidades relacionadas con los motores SIMD. Y hay buses más anchos y memoria más rápida, especialmente memoria local y privada.

Acerca del hardware. Las principales recomendaciones se aplicarán al hardware de AMD. Pero muchas de ellas, con una terminología ligeramente modificada, también se aplican al hardware NVidia.

 
Mathemat:

Porque es emulación, emulación lenta. En las CPU (gracias a Intel, que tiene un compilador inteligente que busca la vectorización si no la prohíbe explícitamente), la paralelización se hace mediante instrucciones (S)SSEx y posiblemente análisis de dependencias, mientras que las GPU tienen muchas más posibilidades relacionadas con los motores SIMD. Y hay buses más anchos y memoria más rápida, especialmente memoria local y privada.

Acerca del hardware. Las principales recomendaciones se aplicarán al hardware de AMD. Pero muchas de ellas, con una terminología ligeramente modificada, también se aplican al hardware NVidia.

OpenCL (Open Computing Language) es un estándar abierto libre de royalties para la programación paralela de propósito general a través de CPUs, GPUs y otros procesadores, proporcionando a los desarrolladores de software un acceso portátil y eficiente a la potencia de estas plataformas de procesamiento heterogéneas.

Véase: no se menciona OCL para GPU ni el modo de emulación para otros dispositivos. OpenCL es un lenguaje de programación universal para organizar cálculos paralelos en cualquier dispositivo que tenga más de un núcleo de cálculo y soporte OCL. No es CUDA ni ATI Stream, que están adaptados a las GPU.

Además, en algunos casos la paralelización y los cálculos OCL en CPU son incluso más rápidos que en GPU. Ahora es obligatorio elegir un dispositivo en la configuración de mis programas, porque la velocidad de los cálculos depende directamente de la cantidad de datos procesados y de la "gravedad" de los cálculos (también depende de la configuración de entrada): a veces es más rápido en la GPU, a veces en la CPU.

 
joo:

OpenCL (Open Computing Language) es un estándar abierto libre de derechos de autor para la programación paralela de propósito general en CPU, GPU y otros procesadores, que ofrece a los desarrolladores de software un acceso portátil y eficiente a la potencia de estas plataformas de procesamiento heterogéneas.

Véase: no se menciona OCL para GPU ni el modo de emulación para otros dispositivos. OpenCL es un lenguaje de programación universal para organizar cálculos paralelos en cualquier dispositivo que tenga más de un núcleo de cálculo y soporte OCL. No es CUDA ni ATI Stream, que están diseñados para GPU.

Quizá tenga razón en algunos aspectos, ya que la CPU se considera un dispositivo. Pero algunos datos sugieren más bien que se trata de una emulación. Por ejemplo, hay sospechas de que escribir un buffer en la memoria del dispositivo CLBufferWrite() en el caso de la CPU se hace sólo "por un tick", porque la CPU sólo tiene una memoria global. Sin embargo, la CPU también tiene una caché, pero no sé qué pasa con ella y cómo funciona.

Además, en algunos casos la paralelización y los cálculos OCL en la CPU son incluso más rápidos que en la GPU.

Sí, hay casos en los que, por ejemplo, el producto escalar de dot( ) es más rápido en la CPU. Pero yo no especularía sobre qué sería más rápido si la comparación fuera entre un Core 2 Duo y una tarjeta gráfica más potente que la del enlace. Sobre todo si te ocupas de optimizar el algoritmo. Es diferente para CPU y GPU, digas lo que digas.

 
Mathemat:

¿Qué es lo que hay que activar antes? Si OpenCL - ya está habilitado. Todos los experimentos se realizaron directamente en MetaEditor 5.

P.D. Lo principal es que a través de OCL, el codificador realmente tiene acceso a algo a lo que antes no tenía acceso. Estos son:

- (S)SSEx, que se puede incluir en Visual Studio, pero no se puede incluir en MQL5 sin OCL (sin contar las dlls).

- acceso a cálculos en GPUs discretas, que acelera adicionalmente lo que se puede hacer en un solo núcleo en MQL5 sin trucos tipo dlls.
.

Me refería a la adaptación para la computación en nube, si te imaginas que cada núcleo de procesador es asistido por muchas "abejas hambrientas" de aceleradores gráficos conectados en red con muchos ordenadores, será realmente genial y rápido.

La mitad del trabajo está hecho, ahora solo es cuestión de encenderlo para la nube....