MetaTrader 5 Python用户组 - 如何在Metatrader中使用Python - 页 25

 
fxsaber:

你是如何对代码的OpenCL部分进行调试的?

通过运行和解压的结果。
 
Fast235:

Renat,请提供一个OpenCL有优势的情况的大概清单,当处理大量的数组或在一个EA中有大量的符号和指标时。

如果你能在没有交联的情况下建立起数以百万计的阵列,并且可以进行并行分析,你就可以加快速度。

一般来说,任何人只要解决并理解其任务的局限性,就会很容易回答他或她的问题。只要没有对极限的理解(而且只有梦想 "如果"),不断地与正在解决的任务拉扯,并行主义仍然只是一个很酷的想法。

不幸的是,大多数任务不能有效地并行化。

 
Renat Fatkhullin:

如果你能建立数以百万计的没有交叉链接的阵列,并且可以并行分析,你就可以加快速度。

一般来说,一个能解决并理解其任务限制的 人,会很容易回答他的问题。只要没有对极限的理解(而且只有梦想 "如果"),不断有撕裂的任务被解决,并行主义仍然只是一个很酷的想法。

不幸的是,大多数任务不能有效地并行化。

我记得有一个事实,即在计算中存在伴随的时刻,这就是为什么在我的脑海中出现了这个问题

 
Renat Fatkhullin:
通过运行和解吸的结果。

有没有可能在OpenCL代码里面放一个引子?

 

粗略的说,关于OpenCL

你可以想象,有一个处理器有大的(向量)寄存器,单个的N个双值可以写入其中(例如,让N=64,那么64个值可以写入寄存器中)。
这样的寄存器可以彼此相加、相乘等,事实证明,对于一个命令,你可以对N个变量执行操作。

但也有局限性。

不可能对一个寄存器中的值进行操作,例如,不可能将一个寄存器中的一部分值添加到它们之间。
在频率上,这种处理器比一般的CPU要差很多,因此在需要连续处理一个数值的任务中使用它没有意义。
除了频率较低外,还有一个内存限制,数值只能从特殊内存中加载和卸载。
从RAM中复制数据到这个特殊的存储器是可能的,但只能通过一个非常狭窄的(慢)通道。
因此,需要处理大量数据的任务也不太适合使用OpenCL

 
fxsaber:

有没有可能在OpenCL代码里面放一个引子?

在外面。

让我们跳过讲课环节。你只需接受并阅读我们和互联网上关于OpenCL的所有创建和详细描述。

OpenCL 搜索。




实际上,非常有趣的是,"opencl交易 "在谷歌上被搜索到 了很多来自我们资源的东西。


 
Renat Fatkhullin:

下面是Python 3.8和MQL5在单线程/OpenCL模式下的比较:时间以秒为单位,越少越好

pi-single.py
pi-multi.py
速度PI.mq5单一
速度 PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python在JIT模式下通过numba,硬件是这样的。

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

使用OpenCL的例子非常简单,在其优化方面没有任何花哨的东西。虽然这个任务对于OpenCL来说并不庞大,而且它在准备过程中引发了开销,但它仍然给出了一个更好的结果。

使用OpenCL可以常规地运行非常大的并行计算。进入门槛并不高,只需要一天时间就能搞清楚如何使用。

播放用的文件附在后面。

看来这个在OpenCL中计算PI的问题在7年前就已经解决了。

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • www.mql5.com
Настоящая статья открывает небольшой цикл публикаций, посвященных программированию на OpenCL, или Open Computing Language. Платформа MetaTrader 5 в ее текущем воплощении до подключения OpenCL не позволяла напрямую, т.е. нативно, использовать преимущества многоядерных процессоров для ускорения вычислений. В разделе "Статьи", правда, еще полтора...
 
我还搞不清楚。
Single thread: the value of PI is 3.141592653590
Single thread: calculated in 7.382561 seconds
OpenCL not found. Error code=5100
OpenCL initialization failed with 5100

有没有人有任何需要下载的直接链接?在英特尔,它需要注册。


HH在英特尔GPU的CPU上我要摸索视频适配器的驱动程序,然后安装Intel_OpenCL_driver,再把视频适配器的驱动程序。这样一来,一切都能正常工作,视频也不会变慢。

 

Vict:

我担心积极使用这一功能会把启动变成一个多分钟的探索。

将不转你可以启用缓存。

雷纳特-法特库林

下面是Python 3.8和MQL5在单线程/OpenCL模式下的比较:时间以秒为单位,越少越好。

pi-single.py
pi-multi.py
速度PI.mq5单一
速度 PI.mq5 OpenCL
4.1743
0.2101
4.1836
0.1025

Python在JIT模式下通过numba,硬件是这样的。

  • Windows 10 x64, Intel Xeon E5-2690 v3 @ 2.60GHz
  • GeForce RTX 2080

在多线程模式下,你在10000个线程中比较CPU与GPU的性能。GPU没有参与到python中。

如果我找到一台有合适显卡的电脑,我将修复Python代码并在这台电脑上测试。 我将尝试在CPU上运行你的代码,我以为需要GPU。

我的目的根本不是要证明谁更快。更有趣的是,我想知道你们整合Python的计划。

你是否计划在python中使用任何交易功能 和tick事件?


不过,GPU似乎是强制性的,"AMD APP SDK "是不能下载的。
Документация по MQL5: Торговые функции
Документация по MQL5: Торговые функции
  • www.mql5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция: Ордер – это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк...
 
Ilyas:

粗略的说,关于OpenCL

我们可以想象,有一个处理器有大的(向量)寄存器,我们可以写入单个的N个双值(例如让N=64,那么64个值可以写入寄存器中)。
这样的寄存器可以彼此相加、相乘等,事实证明,对于一条指令,你可以对N个寄存器进行操作。

但也有局限性。

不可能对一个寄存器中的值进行操作,例如,不可能将一个寄存器中的一部分值添加到它们之间。
在频率上,这种处理器比一般的CPU要差很多,因此在需要连续处理一个数值的任务中使用它没有意义。
除了频率较低外,还有一个内存限制,数值只能从特殊内存中加载和卸载。
从RAM中复制数据到这个特殊的存储器是可能的,但只能通过一个非常狭窄的(慢)通道。
因此,需要处理大量数据的任务也不太适合使用OpenCL

在PI计算的例子中没有矢量。它只是将总和分成几个独立的块,并将它们发送到每个OpenCL核心。一切都在最后加起来。

例如,如果没有独立显卡,CPU中有4个物理核心+4个虚拟核心,执行速度将提高8倍。也就是说,大块的和将在每个核心上平行地被计算。