Я портирую код C++ на CUDA & CUBLAS. Я использую stl :: complex для сложных вычислений (т. Е. Pow, log, exp и т. Д.), Но я не видел тех же функций, которые определены в библиотеке CuComplex. Я не знаю, как создавать эти функции, но я нашел некоторые коды онлайнкак сделать комплексное число в CUBLAS?
#include <iostream>
#include <cublas_v2.h>
#include <cuComplex.h>
using namespace std;
typedef cuDoubleComplex Complex;
#define complex(x, y) make_cuDoubleComplex(x, y)
__host__ __device__ double cabs(const Complex& z) {return cuCabs(z);}
__host__ __device__ double carg(const Complex& z) {return atan2(cuCreal(z), cuCimag(z));}
__host__ __device__ Complex polar(const double &magnitude, const double &angle) {return complex(magnitude*cos(angle), magnitude*sin(angle));}
__host__ __device__ Complex cexp(const Complex& z) {return polar(exp(cuCreal(z)), cuCimag(z));}
__host__ __device__ Complex czlog(const Complex& z) {return complex(::log(cabs(z)), carg(z));}
__host__ __device__ Complex cpow(const Complex& z, const int &exponent) {return cexp(cuCmul(czlog(z), complex((double)exponent, 0)));}
void main(void)
{
Complex z=complex(0.34, 0.56);
cout << cuCreal(cpow(z, 2)) << " " << cuCimag(cpow(z, 2)) << endl;
}
приведенные выше результаты не дали правильного ответа. Это что-то не так с личностью? Можно ли лучше использовать силу и другую функцию на комплексном числе?
cuComplex.h выполняет только несколько сложных операций, которые необходимы CUBLAS и CUFFT. Рассмотрите возможность подачи запроса функции для более полной поддержки операций над сложными данными в CUDA. Вы можете сделать это через форму сообщения об ошибке, связанную с зарегистрированным веб-сайтом разработчика. – njuffa
@njuffa У меня была такая же проблема и были размещены вопросы на форуме [NVIDIA Forum] (https://devtalk.nvidia.com/default/topic/549254/complex-arithmetics-in-cuda/) и [StackOverflow] (http: //stackoverflow.com/questions/17405715/complex-arithmetics-in-cuda). Следуя вашему предложению на форуме, я также подал запрос об улучшении через форму системы отчетности об ошибках в июле. Один пользователь SO направил меня на эту [CUDA Complex Library] (https://github.com/jtravs/cuda_complex), что может представлять интерес и для других пользователей. Я сообщил системе отчетности об ошибках существования этой библиотеки. – JackOLantern
[cusp] (http://code.google.com/p/cusp-library/wiki/QuickStartGuide) также имеет [сложную реализацию] (http://code.google.com/p/cusp-library/source /browse/cusp/complex.h), которые могут представлять интерес для некоторых пользователей. –