文章 "OpenCL:并行世界的桥梁"

 

新文章 OpenCL:并行世界的桥梁已发布:

2012 年 1 月末,从事 MetaTrader 5 开发业务的软件开发公司宣布 MQL5 可向 OpenCL 提供原生支持。本文通过一个示例说明了 MQL5 环境下 OpenCL 的编程基础知识,并列举了几个示例,讲述了为提高运行速度所做的朴素优化。

作者:Sceptic Philozoff

 

非常感谢!

我一直在等待一篇关于 OpenCL 的文章。

我现在就去读。:)

 
很多 bukaf :)但是布卡夫非常必要和有用,我会好好咀嚼这块花岗岩。谢谢!
 
joo: 我一直在等待一篇关于 OpenCL 的文章。

我要读一读。:)

你可能不太需要它。你应该已经都知道了。

下一篇文章会很严肃,会有很多关于硬件的内容。

 
是的,现在加入还为时过早,但当然有必要对这一标准进行专业化调整。也许在下一个版本的第六版中可以做到这一点,我希望能早点实现这一功能....。
 
GKS: 是的,现在启用还为时过早。

什么是过早启用,请说明一下。如果是 OpenCL - 已经启用。所有实验都是直接在 MetaEditor 5 中进行的。

附注:最主要的是,通过 OCL,编码员实际上可以使用一些以前无法使用的功能。它们是

- (S)SSEx,它可以包含在 Visual Studio 中,但如果没有 OCL 就无法包含在MQL5 中(不包括 dlls)。

- 访问独立 GPU 上的计算,这将额外加快在 MQL5 中单核上完成的计算,而无需任何类似 dll 的技巧。

 
Mathemat:

1.你可能不太需要它。你应该已经知道如何做这些事情了。

2.下一篇文章会很严肃,会有很多关于硬件的内容。

1.我需要它。

2. 很好!

我仍然不清楚的问题是:为什么你把在 CPU 上执行 OCL 程序称为 "仿真"? 如果有相应的设备驱动程序,并且所有处理器内核都已加载,CPU 只是 OCL 程序可以运行的设备之一,另外还有 GPU。

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
joo: 我仍然不清楚的问题是:为什么你称在 CPU 上运行 OCL程序 为 "仿真"?

因为这就是仿真,缓慢的仿真。在 CPU 中(多亏了英特尔,它有一个智能编译器,如果你没有明确禁止,它就会寻找矢量化),并行化是通过 (S)SSEx 指令和可能的依赖性分析完成的,而 GPU 有更多与 SIMD 引擎相关的可能性。此外,还有更宽的总线和更快的内存,尤其是本地内存和专用内存。

关于硬件。主要建议适用于 AMD 硬件。但其中许多术语稍作修改后也适用于 NVidia 硬件。

 
Mathemat:

因为这是仿真,缓慢的仿真。在 CPU 中(感谢英特尔,它有一个智能编译器,如果你没有明确禁止,它就会寻找矢量化),并行化是通过 (S)SSEx 指令和可能的依赖性分析完成的,而 GPU 有更多与 SIMD 引擎相关的可能性。此外,还有更宽的总线和更快的内存,尤其是本地内存和专用内存。

关于硬件。主要建议适用于 AMD 硬件。但其中许多术语稍作修改后也适用于 NVidia 硬件。

OpenCL(开放计算语言)是一个开放的免版税标准,用于CPU、GPU和其他处理器之间的通用并行编程,使软件开发人员能够便携、高效地访问这些异构处理平台的强大功能。

请看--这里没有提到用于 GPU 的 OCL 和用于其他设备的仿真模式。OpenCL 是一种通用编程语言,用于在任何 拥有一个以上计算核心并支持 OCL 的设备 上组织并行计算。它不是为 GPU 定制的 CUDA 或 ATI Stream。

此外,在某些情况下,CPU 上的并行化和 OCL 计算甚至比 GPU 更快。现在,我强制要求在程序设置中选择设备,因为计算速度直接取决于处理的数据量和计算的 "严重程度"(也取决于输入设置)--有时在 GPU 上更快,有时在 CPU 上更快。

 
joo:

OpenCL(开放计算语言)是一个开放的免版税标准,用于CPU、GPU和其他处理器的通用并行编程,使软件开发人员能够便携、高效地访问这些异构处理平台的强大功能。

请看--这里没有提到用于 GPU 的 OCL 和用于其他设备的仿真模式。OpenCL 是一种通用编程语言,用于在任何 拥有一个以上计算核心并支持 OCL 的设备 上组织并行计算。它不是专为 GPU 设计的 CUDA 或 ATI Stream。

也许你在某些方面是对的,因为 CPU 被视为一种设备。但一些数据表明,这更像是模拟。例如,有人怀疑在 CPU 的情况下,将缓冲区写入设备内存 CLBufferWrite() 只是为了 "打勾",因为 CPU 只有一个全局内存。不过,CPU 也有缓存,但我不知道缓存的情况和工作原理。

此外,在某些情况下,CPU 上的并行化和 OCL 计算甚至比 GPU 上的还要快。

是的,有这样的情况,比如说,dot( )的标量乘积在 CPU 上更快。但如果是在酷睿 2 双核处理器和比链接中的显卡更强大的显卡之间进行比较,我不会去猜测哪个更快。尤其是在优化算法的情况下。不管你怎么说,CPU 和 GPU 的算法是不同的。

 
Mathemat:

什么是提前启用,请说明。如果是 OpenCL - 已经启用。所有实验均直接在 MetaEditor 5 中进行。

附注:最主要的是,通过 OCL,编码员实际上可以使用以前无法使用的东西。它们是

- (S)SSEx 可以包含在 Visual Studio 中,但如果没有 OCL 就无法包含在MQL5 中(不包括 dlls)。

- 访问离散 GPU 上的计算,这可以额外加速 MQL5 中单核上可以完成的计算,而无需任何 dll 类型的技巧。

我的意思是适应云计算,如果你想象每个处理器内核都有许多 "饥饿的蜜蜂 "图形加速器的帮助,并与许多计算机联网,那将会非常酷、非常快。

一半的工作已经完成,现在只需打开云计算....。