Я пытаюсь написать код на основе OpenCL для вычисления exp()
некоторых комплексных чисел на GPU, используя следующую функцию ядра:
#include <complex.h>
inline float complex exp(float complex z) {
return (exp(__real__(z)) * (cos(__imag__(z)) + sin(__imag__(z))*I ));
}
__kernel void
calculate(__global float * c)
{
int nIndex = get_global_id(0);
float complex rays = 1.0f + 1.0f * I;
float complex ans = exp(rays);
c[nIndex] = __real__(ans * ans);
}
Но я получаю следующую ошибку:
ASSERTION FAILED: I.hasStructRetAttr() == false
*
хорошо работает с другими комплексными числами, но выдает ошибку при умножении вывода exp()
функций. Также я использую операторы +
и -
с функциями вывода exp()
без проблем. Просто у меня проблема с *
и /
операторами.