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

 

这些代码将被添加。

ERR_OPENCL_NOT_SUPPORTED           5100    
ERR_OPENCL_INTERNAL                5101
ERR_OPENCL_INVALID_HANDLE          5102
ERR_OPENCL_CONTEXT_CREATE          5103
ERR_OPENCL_QUEUE_CREATE            5104
ERR_OPENCL_PROGRAM_CREATE          5105
ERR_OPENCL_TOO_LONG_KERNEL_NAME    5106
ERR_OPENCL_KERNEL_CREATE           5107
ERR_OPENCL_SET_KERNEL_PARAMETER    5108
ERR_OPENCL_EXECUTE                 5109
ERR_OPENCL_WRONG_BUFFER_SIZE       5110
ERR_OPENCL_WRONG_BUFFER_OFFSET     5111
ERR_OPENCL_BUFFER_CREATE           5112
 
Rosh:

这些代码将被添加。

谢谢你,那么缺少的是一个检查手柄是否有效的函数。

我们只从CL函数中接受指针的值,而不是指针本身,所以将指针存储在不同的地方会造成试图删除无效进程的情况(无论是上下文、缓冲区、程序还是内核)。

需要的功能。

bool CLCheckHandle(int handle);
 
而且你还需要以编程方式获得设备的内存大小,因为小部件的内存比CPU的要少,所有同时存在的上下文都使用相同的内存。
 
Urain:
而且,有必要以编程方式获得设备的内存大小,因为视觉的内存比CPU的少,而所有同时存在的上下文使用相同的内存。

通过标准的mql手段获得卡的温度(也包括CPU),以便对负载进行剂量,这将是一件好事。

// "因为我一直都在狂飙突进......:)

 
MetaDriver:
有谁读过这个主题吗? 这有点像独角戏 :)
 
OpenCL中没有获得温度和GPU负载的功能。
获取OpenCL对象的属性将很快到来。
还将组织检查手柄。
 
mql5:
1.OpenCL中没有获得GPU温度和负载的功能。
2.获取OpenCL对象的属性即将推出。
3.还将组织处理检查。

1.我知道。它不一定要通过OpenCL,但一定要通过系统。 这个想法只是为了使功能成为本地的(不需要从mql5程序中调用DLL)。

这里有一些优秀的功能。

终端信息量

返回一个mql5程序的相应环境属性的整数值。

终端信息字符串

返回一个mql5程序的相应环境属性的字符串值

MQL5InfoInteger

返回一个运行中的mql5程序的相应属性的整数类型值

MQL5InfoString

Returns a value of string type of a corresponding property of a launched mql5-program.

如果能增加,那就很好,也很符合逻辑。

系统InfoInteger,因此

系统信息字符串

它提供了对系统环境所有必要信息的访问:内核数量、操作系统的名称和大小、内存量(总)、可用(空闲)内存量(RAM和磁盘空间),等等,等等。

毕竟,终端在空旷的永恒空间中是不工作的。否则,它看起来非常沙化。

2, 3.

4.一定要实现正常的缓冲区访问(cl_Read/WriteBuffer),指定两个起始偏移量(包括mql-array的偏移量和cl-buffer的偏移量)。否则,几乎所有的数组都要被复制两次--我们真的需要这样做吗?我们用OpenCL写东西不是为了浪费时间从无到有地重写。这并不公平。:)

 
MetaDriver:
...

4. 确保你已经有一个正常的缓冲区访问(cl_Read/WriteBuffer),指定两个起始偏移量(包括mql-array offset和cl-buffer offset)。否则,几乎所有的数组都要被复制两次--我们真的需要这样做吗?我们用OpenCL写东西不是为了浪费时间从无到有地重写。这并不公平。:)

具体说明你的意思。

到目前为止,我还没有遇到过你所描述的情况。

 
Urain:

具体说明你的意思。

它的作用是什么,我还没有遇到你描述的情况。

没问题。这里有一个最近的例子。建立一个埃马家族。

...........  
 while(limit/(cl_BufLength-1)>0)
     {
       for(int i=0;i<CountLine;i++)
         {
          dOut[i]=EmaBuffer[i].B[limit];  // переписываем начальные значения Ema
                            // в промежуточный массив, поскольку напрямую с указанного смещения 
                            // загрузить в буфер невозможно.
         }
       CLBufferWrite(cl_Mem_Out,dOut,0,CountLine*sizeof(double));  // загружаем в gpu
       for(int i=1;i<cl_BufLength;i++)
         {
          dIn[i]=price[limit-i];                 // переписываем цены
                                                // То же самое с ценами.
         }
       CLBufferWrite(cl_Mem_In,dIn);  // загружаем в gpu

       CLExecute(cl_Krn,1,kOfs,kWork);
.........
..........

不需要什么异国情调,我只希望能像这里一样。

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );

 
MetaDriver:

没问题。这里有一个最近的例子。建立埃马家族

不需要什么异国情调,我只想让它像这里一样。

int  ArrayCopy(
   void  dst_array[],       // куда копируем
   void  src_array[],       // откуда копируем
   int   dst_start=0,       // с какого индекса пишем в приемник
   int   src_start=0,       // с какого индекса копируем из источника
   int   cnt=WHOLE_ARRAY    // сколько элементов
   );



是的,我明白,你不希望使用更复杂的算法和内存超限。

//Выполняет OpenCL программу.
bool  CLExecute(int          kernel,                 // хендл на кернел OpenCL
                uint         work_dim,               // размерность пространства задач 
                const uint&  global_work_offset[],   // начальное смещение индексов
                const uint&  global_work_size[]     // общее количество индексов
                );

而你希望能够在复制阶段进行抵消。

我不想复制100000个元素,然后做998000个移位。但我们应该保留我们现在拥有的带移位的变体,因为它不允许多次复制相同的数据,而是从已经准备好的带新移位的CL缓冲区为新的任务取数据。

如果能够通过重新分配或覆盖CL缓冲区中的部分数据来进行覆盖,那么新收到的tick数据就可以被添加,而不必购买所有的数据,这对SZY来说也是不错的。在实时情况下,这几乎没有什么用处,但在测试器中,它是有用的。