У меня довольно сложный набор кодов для цикла mql5, который мне нужно запустить через 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);
}
Других решений пока нет …