Умножьте два комплексных числа на GPU, используя OpenCL - PullRequest
3 голосов
/ 21 января 2020

Я пытаюсь написать код на основе 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() без проблем. Просто у меня проблема с * и / операторами.

...