我有一个相当复杂的mql5 for循环代码集,需要通过opencl运行。这意味着我需要有一些调用其他函数的内核函数。因此,我尝试了这个简单的代码,当我通过它调用另一个函数时,它无法创建程序(错误5105)。为什么?

               const string _cl_source=
                "                                                      \r\n"
                "                                                      \r\n"
                "__kernel void Tester()                                \r\n"
                "{                                                     \r\n"
                "                                                      \r\n"
                "  float _margin = 10f;                                 \r\n"
                "  float _balance = 10f;                                \r\n"
                "  float _equity = 10f;                                 \r\n"
                "  float _openprice = 10f;                              \r\n"
                "  float _closeprice = 10f;                             \r\n"
                "  float _position = 10f;                               \r\n"
                "                                                      \r\n"
/*fails on adding this line*/"  CouponReset(_margin,_balance,_equity,_openprice,_closeprice,_position);\r\n"
                "                                                      \r\n"
                "}                                                     \r\n"
                "                                                      \r\n"
                "                                                      \r\n"
                "__kernel void CouponReset(float margin,                     \r\n"
                "                   float balance,                      \r\n"
                "                   float equity,                      \r\n"
                "                   float openprice,                      \r\n"
                "                   float closeprice,                     \r\n"
                "                   float position)               \r\n"
                "{                                                     \r\n"
                "  position = 0f;                         \r\n"
                "  openprice = 0f;                         \r\n"
                "  closeprice = 0f;                         \r\n"
                "  balance  = equity;                         \r\n"
                "  margin  = balance;                         \r\n"
                "                                                      \r\n"
                "}                                                     \r\n"
                "                                                      \r\n";

最佳答案

编辑:实际上,我对此进行了审查,并且有可能从另一个内核调用一个内核。但是,您不应该这样做,因为这可能会导致您遇到麻烦(特别是如果使用__local内存)。

您应用中的关键问题只是0.0f浮点数。

您也可以做一个单独的函数,两个内核都调用。其中之一只是对该函数的包装。

void _CouponReset(float margin,
                   float balance,
                   float equity,
                   float openprice,
                   float closeprice,
                   float position)
{
  position = 0.0f;
  openprice = 0.0f;
  closeprice = 0.0f;
  balance  = equity;
  margin  = balance;
}


__kernel void Tester()
{

  float _margin = 10.0f;
  float _balance = 10.0f;
  float _equity = 10.0f;
  float _openprice = 10.0f;
  float _closeprice = 10.0f;
  float _position = 10.0f;

  _CouponReset(_margin,_balance,_equity,_openprice,_closeprice,_position);

}


__kernel void CouponReset(float margin,
                   float balance,
                   float equity,
                   float openprice,
                   float closeprice,
                   float position)
{
  _CouponReset(margin, balance, equity, openprice, closeprice, position);
}

07-24 09:45
查看更多