OpenCL:MQL5中的内部实现测试 - 页 50

 
Mathemat:
这就是诀窍的意义所在。如果至少有一个外部GPU,CLContextCreate()里面的参数不能明确选择CPU。

不应该是这样的 -https://www.mql5.com/ru/docs/opencl/clcontextcreate

参数

设备

[in] 系统中OpenCL设备的数量,按顺序排列。可以指定其中一个值,而不是一个特定的数字:CL_USE_ANY - 可以使用任何可用的支持OpenCL的设备; CL_USE_GPU_ONLY- 禁用OpenCL仿真,只能使用专用的OpenCL设备(显卡)。

Документация по MQL5: Работа с OpenCL / CLContextCreate
Документация по MQL5: Работа с OpenCL / CLContextCreate
  • www.mql5.com
Работа с OpenCL / CLContextCreate - Документация по MQL5
 

我想是的,不应该是这样。但从哪里得到这个数字,然后选择合适的?

https://www.mql5.com/ru/docs/opencl/clgetinfointeger? 但只有一个属性--设备的数量,CL_DEVICE_COUNT

我的系统里有一个,这就是为什么它返回1。

Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
Документация по MQL5: Работа с OpenCL / CLGetInfoInteger
  • www.mql5.com
Работа с OpenCL / CLGetInfoInteger - Документация по MQL5
 
记住要升级到最新的619版本并重新编译程序。在这个版本中,OpenCL的初始化原则已经改变。
 
Mathemat:

我想是的,不应该是这样。但你从哪里得到这个数字,然后选择正确的数字?



你应该尝试指定CL_USE_GPU_ONLY,那么显卡将被占用,不需要这个数字。
 
Rosh: 你应该尝试指定CL_USE_GPU_ONLY,那么显卡就被占用了,不需要这个数字。
这是可以理解的。但我想指定CPU--带独立显卡。我如何做到这一点?
 

棒极了!所以HD4200不是一个OpenCL设备,是吗?

看起来这里真的有纯粹的CPU仿真。我喜欢它!

如果我可以教i3做这件事呢...

我开始隐约怀疑为什么AMD APP SDK不能在i3的MT5上正常工作:不是所有的核心都是真实的,而且AMD没有超交易技术。也许,这就是为什么驱动器在某种程度上是扭曲的。

或者说,窍门就在MT5中,它能正式识别该设备,但实际上却没有任何作用?

 
Mathemat:
诀窍是这样的。如果至少有一个外部GPU,CLContextCreate()里面的参数不能明确选择CPU。

这是在CPU上(在我的例子中是设备1)。

2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CpuTime/GpuTime = 74.73506433823529
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Cpu МахResult==4.54091 at 2233 pass
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 21:03:01     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      CPU time = 325247 ms
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Result on Gpu МахResult==4.54091 at 2233 pass
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 20:57:36     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      GPU time = 4352 ms
2012.04.08 20:57:32     ParallelTester_00-02-(16 x7x3) (USDJPY,M30)      OpenCL init OK!

CLContextCreate(device)参数 拉到了脚本参数中。 你可以在所有的选项中摸索。

// 也许仍然有一个秘密的臭味相投的组合?:))

附加的文件:
 

2012.04.08 22:01:08    Terminal    CPU: GenuineIntel  Intel(R) Pentium(R) CPU G840 @ 2.80GHz with OpenCL 1.2 (2 units, 2793 MHz, 8040 Mb, version 2.0 (sse2))

2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CpuTime/GpuTime = 26.95192501511792
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Cpu МахResult==4.98137 at 1628 pass
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:05:59    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    CPU time = 267417 ms
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Result on Gpu МахResult==4.98137 at 1628 pass
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.08 22:01:32    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    GPU time = 9922 ms
2012.04.08 22:01:22    ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)    OpenCL init OK!


谢谢,我不知道...

好吧,我毫不怀疑这个比例会是3比1左右:你有3倍的核心,74.735/26.952 ~ 2.77。这是个好消息:更多的核心意味着更多的收益!AMD在这里也保住了--由于核心数量的原因!。

但我想知道其他人会有什么--比如说,拥有i5 Sandy Bridge的人?

如果有人有推土机E,它可能真的很酷...。尽管它可能不是,因为这有点像FPU的问题。

 
MetaDriver:

而在这次测试中,由于某种原因,我的铁器撕碎了你的。

2012.04.09 01:09:36        ParallelTester_00-02-316x7x3j (EURUSD,H1)          CpuTime/GpuTime = 161.0007722007722

2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Cpu МахResult==4.85831 at 2497 pass
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:09:36    ParallelTester_00-02-316x7x3j (EURUSD,H1)    CPU time = 208496 ms
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Result on Gpu МахResult==4.85831 at 2497 pass
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    Соunt inticators = 16; Count history bars = 50000; Count pass = 4096
2012.04.09 01:06:08    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 1295 ms

2012.04.09 01:06:07        ParallelTester_00-02-316x7x3j (EURUSD,H1)           OpenCL init OK!


下面是在OpenCL CPU上的测试(所有4个核心都是100%的负载)。

2012.04.09 01:11:15    ParallelTester_00-02-316x7x3j (EURUSD,H1)    GPU time = 68547 ms

2012.04.09 01:10:07    ParallelTester_00-02-316x7x3j (EURUSD,H1)    OpenCL init OK!


GPU有480个苍蝇,CPU有4个,相差120倍,也就是说,一次可以完成120倍的计算,但CPU只落后于GPU的68547/1295=52.9倍。这意味着CPU线程比GPU线程快,但GPU获胜只是因为它可以同时执行更多的任务。我弄得对吗?


在CPU上的扩展比100%少很多(大约76%),而不是4倍,只有3倍的加速208496/68547=3.04

虽然,这个测试的具体内容可能会影响它。

 

安德烈,我想你搞错了:MD 在这里只在CPU上发布了这个测试,没有显卡,也就是说直接选择CPU模拟。根据我的理解,你的第一个测试是在显卡上。

而你的OpenCL仿真显卡的结果(你的第二个测试),即使与我的相比,似乎也是可疑的低(我在 "GPU "上有大约10秒)。

如果我有什么误解,请纠正我。