以下是你可以在MetaTrader 5中直接使用OpenCL而不需要任何DLLs的情况 - 页 5

 
Renat Fatkhullin:

在这种背景下,AMD看起来很有优势,不仅是因为明显更快的数学计算(采矿场通常建立在AMD上),而且还因为其开放标准的策略(他们已经开放并向公众推广了很多)。AMD显卡中OpenCL 2.0的引入使这一规格非常接近于CUDA的能力,现在为CUDA打基础根本没有意义

这是很有用的信息,而大约7年前,我在玩CUDA,认为它仍然是游戏规则。

我的问题是:现在的OpenCL的调试器怎么样?我不是指MT5终端,而是指一般的MT5终端。到目前为止,我只看到英特尔公司的调试器作为Visual Studio 的一个插件,以及同一公司的独立调试器(已被取消)。但似乎是英特尔的处理器和嵌入式图形才是为了这个目的。我完全不了解如何调试并行代码--对我来说,它只是一个黑盒子。

 

你只能为自己或为特定的领域使用CUDA工作,你可以要求Nvidia卡的明确存在。

是的,CUDA曾经有更多的功能。然而,随着AMD硬件推出OpenCL 2.0和新版本的OpenCL 2.1,没有必要坐在供应商的锁定之下。特别是当该供应商还压低了功能。

就最大覆盖率而言,只有一个选择--OpenCL,它在普通处理器上也能正常工作。也就是说,你不必要求GPU的无条件存在,也不必为GPU和CPU写两个版本的代码。一旦写好,OpenCL代码将在不同的配置上工作。

CUDA/OpenCL只能在专门的调试器中进行调试。这里不可能有什么奇迹。

 
Renat Fatkhullin:

在例子中

if((cl_ctx=CLContextCreate())==INVALID_HANDLE)

在具有CPU可用设备的配置中,显示 "未找到OpenCL"。

否则。

if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE)

作品

*问题在于默认的设备选择

 

我们能不能把这些都以一个漂亮的形式呈现出来,不要所有的引号? 这对感知和创造来说太不方便了。

而对于神经网络,我们应该有标准的类,而且有可能像welllslab那样使用opcl instantly)

"#define HL1Count "             + (string)hl1NeuronCount + "                     \r\n"
          "#define HL2Count "             + (string)hl2NeuronCount + "                     \r\n"
          //------------------------------------------------------------------------------------
          "#define NeuronSensitivity  "   + (string)NeuronSensitivity_P + "                \r\n"
          //------------------------------------------------------------------------------------
          "#define sampleCount "          + (string)sampleCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define signalCount "          + (string)signalCount + "                        \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrSaSize "         + (string)(sizeof(ArrSample) / sizeof(float)) + "\r\n"
          "typedef struct{float C[StrArrSaSize];} ArrSa;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrWeSize "         + (string)(sizeof(ArrWe) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrWeSize];} ArrWe;                                   \r\n"
          //------------------------------------------------------------------------------------
          "#define StrArrCrSize "         + (string)(sizeof(ArrCr) / sizeof(float)) + "    \r\n"
          "typedef struct{float C[StrArrCrSize];}ArrCr;                                    \r\n"
          //------------------------------------------------------------------------------------
          "#define Spread "               + (string)(Spread_P * Point()) + "               \r\n"
          //------------------------------------------------------------------------------------
          "#define Point "                + (string)Point() + "                            \r\n"
          "#define SL "                   + (string)(StopLoss_P * Point()) + "             \r\n"
          "#define TP "                   + (string)(TakeProfit_P * Point()) + "           \r\n"
          //------------------------------------------------------------------------------------
          "                                                                                \r\n"
          "__kernel void Work(__global ArrSa *Sample,                                      \r\n"
          "                   __global ArrWe *Weights,                                     \r\n"
          "                   __global ArrCr *Result)                                      \r\n"
          "{                                                                               \r\n"
          "  int thread       = get_global_id(0);                                          \r\n"
          "                                                                                \r\n"
          "  //------------------Переменные нейронной сети---------------------------------\r\n"
 
Maxim Dmitrievsky:

我们能不能以一种漂亮的形式把这些东西都拿出来,不要所有的引号? 这对感知和创造是很尴尬的。

而对于神经网络,我们应该有标准的类,而且有可能像welllslab那样使用opcl instantly)

嗯,为什么不呢?看,没有一个具体的功能是MQL不知道的。我用MQL来编写和调试OCL的这个函数,然后我就把它全部硬化了。你甚至可以用OCL做一个代码转换器,但我觉得自己做这个没有什么特别的意义。也许MQ会这样做,但我怀疑。
 
Renat Fatkhullin:

这不仅展示了MQL5代码中的GPU计算,而且还展示了终端的图形功能。

附上作为脚本的完整源代码。OpenCL 1.2上的错误已被修复。

我还知道如何刺绣。而在打字机上...(c) 这些交易终端 是为了什么?
 
它是否会转到云端的代理?
 
GKS:
它是否会转到云端的代理?
没有
 
GKS:
它是否会转到云端的代理?
 

所有这些都很好,但是!OCL有一个很大的问题,一般来说,所有的并行化手段都有一个很大的问题--很少有算法可以有效地被并行化。为什么在并行计算的 例子中,如此受欢迎的是模拟波浪,球落在金字塔上的破坏,也就是说,一切可以分解成小块并在自己的处理器上计算的。

当然,对于fora/bear来说,这些是神经网络、各种傅里叶变换、小波、过滤器等,所有这些都是完全平行的。但有一些线性算法根本不能被并行化。作为一项规则,当下一步算法的结果是基于上一步的结果。

我写这篇文章是为了那些认为我买了两块很酷的显卡,一切都会在我的测试器中正常工作的人。