文章 "使用 OpenCL 测试烛形形态" - 页 2

 
Aleksey Vyazmikin:

还有一个问题,显卡传输/准备数据需要多长时间?我听说有一种观点认为,显卡 OpenCL 不适合用于实际交易,因为数据传输处理会造成时间损失,真的是这样吗?

图 8 显示了向终端控制台输出程序代码中控制点之间的时间间隔。我将在此复制:

时代

其中

  • OpenCL init - 初始化 OpenCL 设备并从资源中创建内核
  • OpenCL 缓冲 - 将 OHLC 缓冲区复制到显卡内存(半年历史,周期 M1)
  • OpenCL 总执行 - 执行(运行多个内核并读取结果等)
  • OpenCL 测试和 OpenCL 准备命令是 OpenCL 总执行包括的执行阶段

将数据加载到数组(图中的缓冲)耗时 26.6ms(也许我必须加载或同步某些东西),将相同数据加载到显卡内存耗时 8.7ms。

是的,如果你来回多次处理大型数据,就会损失大量时间。因此,我们需要在构建算法时尽量减少从 GPU 内存复制数据的次数。我想在不久的将来修改代码,以便在勾选 历史记录上进行测试。那里的容量会更大。看看那里的复制时间会很有趣。

到目前为止,最昂贵的过程是初始化。需要 316 毫秒。但如果我们从现在起使用相同的内核,就可以一次性完成。


 
Serhii Shevchuk:

图 8 显示了将程序代码中控制点之间的时间间隔输出到终端控制台的情况。我将在此复制:

其中

  • OpenCL init - 初始化 OpenCL 设备并从资源中创建内核
  • OpenCL 缓冲 - 将 OHLC 缓冲区复制到显卡内存(半年历史,周期 M1)
  • OpenCL 总执行 - 执行(运行多个内核并读取结果等)
  • OpenCL 测试和 OpenCL 准备命令是 OpenCL 总执行包括的执行阶段

将数据加载到数组(图中的缓冲)耗时 26.6ms(也许我必须加载或同步某些东西),将相同数据加载到显卡内存耗时 8.7ms。

是的,如果你来回多次处理大型数据,就会损失大量时间。因此,我们需要在构建算法时尽量减少从 GPU 内存复制数据的次数。我想在不久的将来修改代码,以便在勾选 历史记录上进行测试。那里的容量会更大。届时我们就能看到复制时间了。

到目前为止,最昂贵的过程是初始化。需要 316 毫秒。但如果使用相同的内核,只需一次即可完成。


谢谢,信息量很大!不过,这与处理器相比如何?

无论如何,对于许多按开仓时间工作的策略来说,如果需要进行复杂的计算,例如在初始化时和每天一次自动适应市场,那么处理器就会很有用。

 
Aleksey Vyazmikin:

谢谢,信息量很大!不过,与处理器相比,它的性能如何?

不管怎么说,对于许多在开仓时工作的策略来说,如果需要进行复杂的计算,例如在初始化时和每天一次自动适应市场,那么它就会很有用。

文章末尾有性能比较表。在策略测试器中对 EA 进行优化,然后将获得的结果和花费的时间与 OpenCL 测试器获得的结果和花费的时间进行比较。第 3 点,"性能比较"。

在 "OHLC on M1 "模式下,测试深度为 9 个月,OpenCL 测试仪在优化两个参数时,每个参数 100 步(10000 次),最多只需 1 秒钟。

这种优化至少每分钟可以对 60 个交易对进行一次,如果我理解正确的话,这已经可以称为自动适应市场了。

 
Serhii Shevchuk:

文章末尾有性能比较表。在策略测试仪中对 EA 进行优化,然后将获得的结果和花费的时间与 OpenCL 测试仪获得的结果和花费的时间进行比较。第 3 点,"性能比较"。

在 "OHLC on M1 "模式下,在 9 个月的测试深度中,OpenCL 测试仪在优化两个各 100 步的参数(10000 次)时最多只需 1 秒钟。

这样的优化至少每分钟可以对 60 个货币对进行一次,如果我没有理解错您的意思,这已经可以称为自动适应市场了。

我看过表格了,问题在于 CPU 和 GPU 的一次迭代(一次通过的结果),因为存在数据准备和传输。不过,这显然是一个有用的话题,可惜的是,由于它的简单性,并不是每个人都能使用它。

 
如果 GPU 场中有多块显卡,计算将在所有显卡上进行,我的理解是否正确?
 
kogriv:
如果有一个由多块显卡组成的 GPU 场,计算将在所有显卡上完成,我的理解是否正确?

很遗憾,MT5 只支持一个 GPU 设备。

 
Aleksey Vyazmikin:

遗憾的是,MT5 只支持一个 GPU 设备。

可以使用多个设备。

由开发人员决定使用哪些设备以及如何使用。

 
Renat Fatkhullin:

可使用多个设备。

开发人员决定使用哪些设备以及如何使用。

如果我没记错的话,你之前写道,一次只能使用一个设备--选择哪一个,是的,可以,有什么变化吗?

我们讨论的不是代理,据我所知,他们每个人都可以使用一个设备,只是同样不清楚如何将代理与特定设备绑定......
 

非常有趣的文章!

很遗憾,您的解决方案没有提供 "遗传优化"。
但这些都可以很容易地添加进去,甚至可以比 MQ5 提供更多的用户选项和优势。

您需要做的是
1) 创建一个结果表,其中包含参数组合,
2) 根据结果对它们进行排序,
3) 将结果分为例如 5 或(用户可定义的 n)。5 或(用户可自定义 n)个部分,
4) 然后从每个部分随机选择参数组合,
5) 为这些选定的参数组合更改一个值,
6) 检查该组合是否已被测试过(然后返回到 4)
7) 测试。
8) 重新从 1) 开始。

只从最差的部分中选择一个组合,从次好的部分中选择两个,然后是三个,依此类推。
因此,最佳部分的优化密度最高,而且由于所有部分相对于彼此的大小总是大致相同(1/5 或 1/n),因此部分边界会发生移动,导致最佳结果的密度进一步增加。

您还可以让用户决定:是否应该在各部分之间测试另一种组合--即在顶部第五部分测试 1、2、3、4、5--或两种组合--1、3、5、7、9--或更多组合,以进一步提高最佳部分的密度?


如果您对表中每个部分的参数组合进行聚类分析,您可以不(仅)随机选择组合,而是有选择性地选择:
a) 在两个聚类的最佳值之间的中间位置--探索两个聚类之间的山谷
b) 在同一个聚类的两个尽可能不同的组合之间的中间位置--寻找新的最佳值、新的顶部。
这可能会大大提高遗传优化结果的质量。你必须试一试!

聚类分析

非常有趣的文章!

很遗憾,您的解决方案并不提供 "遗传优化 "功能。
但您可以很容易地添加这些功能,即使这些功能超出了用户的能力和与 MQ5 相比的优势。Mq5 只有一个选项,即遗传优化,全优化或慢优化。

您需要做的是
1) 将结果及其参数组合制成表格,
2) 按结果排序,
3) 将结果分成 5 或(用户自定义的 n)个部分,
4) 然后从每个部分中随机选择参数组合,
5) 更改所选参数组合的值,
6) 检查该组合是否已被测试过(然后返回第 4 步)
7) 测试。
8) 如果测试失败,则从第 1) 步重新开始。


只从最差的部分选择一个组合,从最好的部分选择两个组合,然后是三个组合,依此类推。因此,最佳部分的优化密度最高,而且由于所有部分相对于彼此的大小总是相同(1/5 或 1/n),部分边界会发生移动,从而导致最佳结果的密度增加。

此外,还可以确定用户:是否可以测试另一种段与段之间的组合--即顶部第 5 段中的 1、2、3、4、5--或两个--1、3、5、7、9--甚至更多,以进一步提高最佳段的密度。

也许您可以引入一些非常有趣和有用的东西?
如果您也对表中每个部分的参数组合进行聚类分析,您不仅可以(仅)随机挑选组合,而且还可以具体地:
a) 两个聚类的最佳值之间的中间位置 - 理解它们之间的山谷
b) 同一聚类的两个最大不同组合之间的中间位置 - 找到一个新的最佳值,一个新的顶点。
这可能会大大提高最佳组合的密度。你必须试一试!

聚类分析


PS:除了我的建议,您是否还想补充一点,即您也可以开发一种以聚类形式呈现结果的方法?
Strategy Tester 总是只显示变量整个范围的结果,如果能看到,例如,有三个聚类,以及每个聚类各自的最佳值(越大越好)、它们的分散度(越大越好)和单个参数的统计数据(最大值、最小值、中间值、标准偏差(越大越好)),信息量就会大得多。这样就更容易看出哪些参数组合可能更稳健,哪些参数组合的最佳值可能更随机。

PS: 除了我的建议外,您是否还可以开发一种以聚类形式显示结果的方法?
Strategy Tester 总是只显示整个变量范围的结果,如果您能看到例如三个聚类,以及每个聚类的最佳值(越大越好)、方差(越大越好)和单个参数的统计数据(最大值、最小值、平均值、标准偏差(越大越好)),则信息量会更大。这样就更容易找到最可靠的参数组合和最佳随机值。


PPS:偶然的机会,我发现了这篇文章:"Optimizing OpenCL Kernels
for Iterative Statistical Applications on GPUs"
,它符合我的建议:)

一个偶然的机会,我发现了这篇文章:"Optimising OpenCL Kernels
for Iterative Statistical Applications on GPUs"
,它符合我的建议:)。



Cluster analysis - Wikipedia
Cluster analysis - Wikipedia
  • en.wikipedia.org
Cluster analysis itself is not one specific algorithm, but the general task to be solved. It can be achieved by various algorithms that differ significantly in their understanding of what constitutes a cluster and how to efficiently find them. Popular notions of clusters include groups with small distances between cluster members, dense areas...
 

很棒的文章

恭喜你,@decanium !

Serhii Shevchuk
Serhii Shevchuk
  • www.mql5.com
Produto publicado This is a convenient tool for measuring the number of points between prices. It support magnetizing to OHLC prices. Calculates profit considering specified lot size and spread (optionally). It counts the number of bars between specified point and the time difference between them. Calculates the slope angle from the...