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

 
Mathemat:

而你的OpenCL仿真器(你的第二个测试)的结果即使与我的相比也显得可疑的弱(我在 "GPU "上有大约10秒)。

它是在计算CPU密集型的GPU--我的核心比我的多。而我的计算是在有4个核心的纯CPU上(设备1)。
 
joo: 你是在CPU密集型的GPU上计算的--比我的核数多。而我的是在4个核心的纯CPU上计算。

不,不是这样的,安德烈。我认为,我还指望着一个有2个核心的纯CPU。有三个论据支持它。第一条简直是铁板一块,第二条和第三条就不那么牢固了。

1.我的系统上只有一个 OpenCL设备另一方面,无论如何,这些磁盘中的一个必须是主机,也就是裸露的CPU。它 是。这不是一个GPU,我在GPU Caps上检查过。

所以我怀疑模拟OpenCL的CPU设备可以是任何支持SSE2及以上的岩石。是否有集成显卡并不重要。顺便说一句,包括一个英特尔酷睿i5-750。

2.我的CPU显卡是Intel HD Graphics。它有6条流水线,但有24个处理器(线程,苍蝇?)圈出接近你我都有的图形规格。

由于飞频比石频低得多,我无法想象24个GPU线程在较低的频率下会比纯CPU的执行速度提高25倍以上(我也有过这种情况)。这只剩下一件事:不是GPU的问题,是CPU对OpenCL的模拟。我可能算错了,但我没有关于英特尔石头的图形架构的更详细数据。

你的嵌入式图形与我的差不多--英特尔高清图形2000--但上面有一些东西是歪的。我不知道如何解释一个几乎是顶级的英特尔Sandy Bridge石头的这么一个奇怪的低结果。据粗略估计,它的加速度应该在50左右。

3.从形式上看,英特尔的嵌入式图形将只在Ivy Bridge上与英特尔高清图形2500和4000一起支持OpenCL(它将已经有64个快速飞,比AMD的集成飞快得多)。而现在,它似乎真的不存在。

我自己还没有搞清楚为什么我的i3没有加快我的计算速度。

 
Mathemat:

...

我自己还没有弄清楚为什么我的i3没有加快我的计算速度。

万岁!它的工作!

2012.04.09 15:32:01 终端 CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0)
2012.04.09 15:32:01 终端MetaTrader 5 x64 build 619启动 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CpuTime/GpuTime = 2.604419002781939
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Cpu上的结果 MachResult==3.64642 at 1594 pass
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU时间 = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Gpu上的结果 MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) GPU时间 = 93460 ms
2012.04.09 15:54:41 ParallelTester_00-02-316x7x3j (USDJPY,H1) OpenCL init OK!
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.573211516347179
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpu上的结果 MachResult==3.82222 at 3357 pass
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 15:42:27 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU时间 = 243907 ms
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpu上的结果 MachResult==3.82222 at 3357 pass
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 15:38:23 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU时间 = 94787 ms
2012.04.09 15:36:49 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!

 
Ashes:

耶!它是有效的!

2012.04.09 15:32:01 终端 CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0)
2012.04.09 15:32:01 终端MetaTrader 5 x64 build 619启动 (MetaQuotes Software Corp.)

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1)CpuTime/GpuTime = 2.604419002781939

2012.04.09 16:00:18 ParallelTester_00-02-316x7x3j (USDJPY,H1) CPU时间 = 243409 ms
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Gpu上的结果 MachResult==3.64642 at 1594 pass
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 15:56:15 ParallelTester_00-02-316x7x3j (USDJPY,H1)GPU时间 = 93460 ms

好吧,这比0.7要好--至少它有一些速度提升。那么你做了什么?

虽然...它非常弱。在我的奔腾G840上,像这样。

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

2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CpuTime/GpuTime = 26.0524992748719
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Cpu上的结果 MachResult==4.04242 at 1775 pass
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 22:11:35 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)CPU时间 = 269461 ms
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Gpu上的结果 MachResult==4.04242 at 1775 pass
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.09 22:07:05 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1)GPU时间 = 10343 ms
2012.04.09 22:06:55 ParallelTester_00-02-316x7x3j_080412 (EURUSD,H1) OpenCL init OK!

一块低成本的石头以几乎一个数量级的优势击败同一公司的更强大的石头,你认为这正常吗?它们的架构几乎相同,而且i3的指令集至少不会更差。

 
Mathemat:

好吧,它已经比0.7好了,至少有一些加速。你又做了什么?

虽然...它是非常弱的。在我的奔腾G840上,情况是这样的。

你怎么看,如果一块预算的石头比同一公司的更强大的石头几乎高出一个数量级,这是否正常?它们的架构几乎相同,而且i3的指令集至少不会更差。

我更新了HD Graphics驱动程序,并安装了新的AMD OpenCL SDK,并使用了英文。

关于性能的差异,我的建议如下:不同版本的OCL+最初你的GPU比CPU频率有优势(假设GPU部分是相同的)。

 
Ashes: 至于性能上的差异,我假设:不同版本的OCL+最初你的GPU频率比CPU有优势(假设GPU部分是一样的)。

我没有任何GPU OpenCL设备,请看我给 joo 的回复。而且你也不应该有一个(我说的是集成显卡)。一切都在CPU核心上进行纯仿真。是的,而且频率优势最多只有2倍,而性能却相差一个数量级。这是一个差异。

第二:版本上的差异并不影响这里列出的绝对所有测试的性能。而在1.1版本上也是一样快(在我的G840上)。

 
Mathemat:

我没有任何GPU OpenCL设备,请看我给 joo 的回复。而且你也不应该有一个(我说的是集成显卡)。一切都在CPU核心的纯仿真上运行。是的,而且频率优势最多只有2倍,而性能却相差一个数量级。这是一个差异。

第二:版本上的差异并不影响这里列出的绝对所有测试的性能。而在1.1版本上也是一样快(在我的G840上)。

看来你是对的。我高兴得太早了。从CPU负载来看,脚本的GPU部分似乎被并行化到了4个核心/线程(CPU负载100%),而CPU部分实际上是在一个核心上执行(25-30%)。

因此,事实证明,4*0.7(开销?)~=2.8-GPU/CPU。

不清楚为什么你的和我的会有这样的区别,只是AMD SDK在x64版本中没有使用 "别人 "硬件的所有功能(据我所知,你有x32)。 HD Graphics驱动版本(Intel公司,14.02.2012,8.15.10.2653)。

G840和i3-2100的比较,来自intel.com。

PS。哎呀,错过了你的8040Mb(即x32/x64已出)。

 
Mathemat:

第二,版本差异对这里发布的绝对所有测试的性能没有影响。而在1.1版本中,它也同样快(在我的G840上)。

OpenCL 1.2对1.1有大约10%的增益。

2012.04.10 09:41:19 Terminal MetaTrader 5 x64 build 619 started (MetaQuotes Software Corp.)
2012.04.10 09:41:19 终端 CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.1 (4 units, 3092 MHz, 4008 Mb, version 2.0)

2012.04.10 09:41:30 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU时间 = 94365 ms
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 09:43:04 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpu上的结果 MachResult==3.52408 at 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU时间 = 244968 ms
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpu上的结果 MachResult==3.52408 at 1914 pass
2012.04.10 09:47:09 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.595962486091242
2012.04.10 10:20:22 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU时间 = 93756 ms
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 10:21:56 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpu上的结果 MachResult==4.06735 at 1519 pass
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU时间 = 242426 ms
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpu上的结果 MachResult==4.06735 at 1519 passed
2012.04.10 10:25:58 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.58571184775076


2012.04.10 11:33:50 PM 终端MetaTrader 5 x64 build 619 启动 (MetaQuotes Software Corp.)
2012.04.10 11:33:50 终端 CPU: GenuineIntel(R) Core(TM) i3-2100 CPU @ 3.10GHz with OpenCL 1.2 (4 units, 3092 MHz, 4008 Mb, version 2.0 (sse2,avx) )

2012.04.10 11:34:14 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU时间 = 86923 ms
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 11:35:41 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpu上的结果 MachResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU时间=246965 ms
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpu上的结果 MachResult==4.27665 at 970 pass
2012.04.10 11:39:48 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.841192779816619
2012.04.10 11:47:50 ParallelTester_00-02-316x7x3j (EURUSD,M1) OpenCL init OK!
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) GPU时间 = 87610 ms
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 11:49:18 ParallelTester_00-02-316x7x3j (EURUSD,M1) Gpu上的结果 MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CPU时间 = 245873 ms
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Count inticators = 16; Count history bars = 50,000; Count pass = 4096
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) Cpu上的结果 MachResult==4.43566 at 781 pass
2012.04.10 11:53:24 ParallelTester_00-02-316x7x3j (EURUSD,M1) CpuTime/GpuTime = 2.806449035498231

 
我认为,如果我们想把一个带有数据的二维/多维数组传递给GPU,我们可以把数据表示为一个结构,然后传递这个结构?
 
Ashes: OpenCL 1.2对1.1有大约10%的增益。

是的,关于这一点。反正收益是非关键性的,没有多少倍的收益。

唯一的区别是,AMD SDK并不在 "外国 "硬件上使用所有功能。

我一开始也有这种假设。

但通过GPU Caps工具进行的CPU OpenCL测试都通过得很好,我检查过。如果你需要,工具就在拖车里。只需旋转CPU模拟。

在一些测试中,i3的帧数比G840高几倍(在4D四元组Julia Set上--约17比4-5)。

因此,事实证明,AMD在这里做得很好。

问题出在终端上,由于某种原因,终端 "理解 "G840,但 "不理解 "安装了AMD APP SDK的冷却器Intel stones。一周前我给servicedesk 发了一条信息,但至今没有回应。

附加的文件: