...........
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)); // загружаем в gpufor(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( voiddst_array[], // куда копируем voidsrc_array[], // откуда копируем intdst_start=0, // с какого индекса пишем в приемник intsrc_start=0, // с какого индекса копируем из источника intcnt=WHOLE_ARRAY// сколько элементов );
int ArrayCopy( voiddst_array[], // куда копируем voidsrc_array[], // откуда копируем intdst_start=0, // с какого индекса пишем в приемник intsrc_start=0, // с какого индекса копируем из источника intcnt=WHOLE_ARRAY// сколько элементов );
是的,我明白,你不希望使用更复杂的算法和内存超限。
//Выполняет OpenCL программу.bool CLExecute(int kernel, // хендл на кернел OpenCLuint work_dim, // размерность пространства задач constuint& global_work_offset[], // начальное смещение индексовconstuint& global_work_size[] // общее количество индексов
);
这些代码将被添加。
这些代码将被添加。
谢谢你,那么缺少的是一个检查手柄是否有效的函数。
我们只从CL函数中接受指针的值,而不是指针本身,所以将指针存储在不同的地方会造成试图删除无效进程的情况(无论是上下文、缓冲区、程序还是内核)。
需要的功能。
而且,有必要以编程方式获得设备的内存大小,因为视觉的内存比CPU的少,而所有同时存在的上下文使用相同的内存。
通过标准的mql手段获得卡的温度(也包括CPU),以便对负载进行剂量,这将是一件好事。
// "因为我一直都在狂飙突进......:)
获取OpenCL对象的属性将很快到来。
还将组织检查手柄。
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写东西不是为了浪费时间从无到有地重写。这并不公平。:)
...
4. 确保你已经有一个正常的缓冲区访问(cl_Read/WriteBuffer),指定两个起始偏移量(包括mql-array offset和cl-buffer offset)。否则,几乎所有的数组都要被复制两次--我们真的需要这样做吗?我们用OpenCL写东西不是为了浪费时间从无到有地重写。这并不公平。:)
具体说明你的意思。
到目前为止,我还没有遇到过你所描述的情况。
具体说明你的意思。
它的作用是什么,我还没有遇到你描述的情况。
没问题。这里有一个最近的例子。建立一个埃马家族。
不需要什么异国情调,我只希望能像这里一样。
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
没问题。这里有一个最近的例子。建立埃马家族
不需要什么异国情调,我只想让它像这里一样。
int ArrayCopy(
void dst_array[], // куда копируем
void src_array[], // откуда копируем
int dst_start=0, // с какого индекса пишем в приемник
int src_start=0, // с какого индекса копируем из источника
int cnt=WHOLE_ARRAY // сколько элементов
);
是的,我明白,你不希望使用更复杂的算法和内存超限。
而你希望能够在复制阶段进行抵消。
我不想复制100000个元素,然后做998000个移位。但我们应该保留我们现在拥有的带移位的变体,因为它不允许多次复制相同的数据,而是从已经准备好的带新移位的CL缓冲区为新的任务取数据。
如果能够通过重新分配或覆盖CL缓冲区中的部分数据来进行覆盖,那么新收到的tick数据就可以被添加,而不必购买所有的数据,这对SZY来说也是不错的。在实时情况下,这几乎没有什么用处,但在测试器中,它是有用的。