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

 
joo:
我认为,如果我们想把一个带有数据的二维/多维数组传递给GPU,我们可以使用结构形式的数据表示并传递结构?

我试着通过一个结构--它起作用了!我自己也没有想到会以这种方式传递多维 数组 :)谢谢!

我附上了一个小例子,使用二维数组--它工作得很好。这个例子有点歪,但总的来说,它很好地证明了这种变态的可能性:)

PS:你的UGA+OpenCL--这只是不够的情绪:) 我们曾经如何生活--回忆起来很可怕......

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
附加的文件:
 
MigVRN:

PS:你的UGA+OpenCL就是一点感情都没有。 :) 我们以前的生活方式让人想起就觉得阴森恐怖......

谢谢你,我很高兴你喜欢它。借此机会,我想向Ilyas Sharapov(mql5)问好,并表示感谢。
 

CL_DEVICE_ANYCL_DEVICE_GPU 已经过时了?

CL_USE_ANYCL_USE_GPU_ONLY 现在是否相关?

 
joo:

CL_DEVICE_ANYCL_DEVICE_GPU 已经过时了?

CL_USE_ANYCL_USE_GPU_ONLY 现在是否相关?

是的。
 
MetaDriver:
是的。

通过Tychkov教授的方法在我的电脑中发现了一个神秘的设备1,它比CL_USE_ANY 快,甚至比CL_USE_GPU_ONLY 快。

它是什么?:O

 
joo:

在我的电脑中发现了一个神秘的设备1,使用Tychkov教授的方法,运行速度比CL_USE_ANY 快,甚至比CL_USE_GPU_ONLY 快。

它是什么?:O

请提供统计资料。适用于所有设备。:)
 
MetaDriver:
板上的统计数字。适用于所有设备。:)
启用任何功能

2012.04.12 23:27:29 Struct_OpenCL (GBPUSD,H1) GPY和CPY的计算差异:0.0
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.326
2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1)GPU时间 = 141 ms

2012.04.12 23:27:28 Struct_OpenCL (GBPUSD,H1) SPU时间 = 187 ms


cl_use_gpu_only

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) GPY和CPY的计算差异:0.0
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 1.376
2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1)GPU时间 = 125 ms

2012.04.12 23:29:11 Struct_OpenCL (GBPUSD,H1) SPU 时间 = 172 ms


1

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) GPY和CPY之间的计算差异:0.0
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) CPY/GPU= 2.397
2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1)GPU时间= 78 ms

2012.04.12 23:30:12 Struct_OpenCL (GBPUSD,H1) SPU 时间 = 187 ms


我建议大家像我一样尝试一下,很有可能你会发现一个比无助的独立显卡更快的设备。:D


PS。我怀疑CL_USE_ANYCL_USE_GPU_ONLY 是一样的 - 在CPU上计算,但设备1是我的GPU。这是标准常数中的一个基本混淆。

 
joo:

我建议大家像我一样乱用,你可能会发现一个比无用的独立显卡更快的设备。:D

PS。我怀疑CL_USE_ANYCL_USE_GPU_ONLY 是同一件事--它是一个CPU计算,但设备1是我的GPU。这是标准常数中的一个基本混淆。

这是我读到的内容!这不是在终端的帮助下!调整了代码以反映这些变化。看看你能得到什么。我是这样想的。

23:17:00 SPU时间=1155ms
23:17:01 启用OpenCL的设备总数: 2
23:17:02 GPU时间#0 = 249 ms
23:17:02 cpy/gpu #0 = 4.639
23:17:03 GPU #1 时间 = 265 ms
23:17:03 cpy/gpu #1= 4.358

GPU:Advanced Micro Devices, Inc.采用OpenCL 1.1的Turks(6个单元,725 MHz,1024 Mb,版本CAL 1.4.1703(VM))。
CPU:正版英特尔(R)酷睿(TM)i3-2310M CPU @ 2.10GHz,带OpenCL 1.1(4个单元,2095 MHz,5990 Mb,2.0版本)。
附加的文件:
 
2012.04.12 22:37:07     OpenCL  GPU: NVIDIA Corporation GeForce GT 440 with OpenCL 1.1 (2 units, 1660 MHz, 1024 Mb, version 296.10)
2012.04.12 22:37:07     OpenCL  CPU: AuthenticAMD AMD Athlon(tm) II X4 630 Processor with OpenCL 1.1 (4 units, 2998 MHz, 2048 Mb, version 2.0)
2012.04.12 22:39:46     Struct_OpenCL__1 (EURUSD,H1)    Время СPU = 686 ms
2012.04.12 22:39:47     Struct_OpenCL__1 (EURUSD,H1)    Всего устройств c возможностями OpenCL: 2
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №0 = 172 ms
2012.04.12 22:39:50     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №0= 3.988
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    Время GPU №1 = 406 ms
2012.04.12 22:39:51     Struct_OpenCL__1 (EURUSD,H1)    CPY/GPU №1= 1.690
 
MigVRN:

试着使用这种结构,它对我不起作用(我怀疑第二维必须是一个固定的尺寸,这就是为什么它对我不起作用)。

struct Array2dFloat
{
  float Column[];
  int LineCount(int lineCount)
  {
    int size = ArrayResize(Column,lineCount);
    ArrayInitialize(Column,0.0);
    return(size);
  }
};

而且,为了方便起见,还可以用这样的函数来调整两个尺寸的大小。

void ArrayResize2DArrayFloat(Array2dFloat &ArrayOfArray[], int columnCount,int lineCount)
{
  // разбивка по вертикали
  ArrayResize(ArrayOfArray,columnCount);
  // разбивка по горизонтали
  for(int i=0;i<columnCount;i++)
    ArrayOfArray[i].LineCount(lineCount);
}