CUDA-как работать с комплексными числами?
какие заголовки CUDA следует включить в мою программу, если я хочу работать с комплексными числами и выполнять простые математические операции (сложение и умножение) для этих сложных двойных чисел в самом ядре?
В C++ я могу умножить постоянное число на сложное двойное>, если они оба двойные. Однако в CUDA я получаю много ошибок, когда пытаюсь выполнить простые математические операции для сложных double > s, когда это не с другим сложным double>. Что я не хватает?
спасибо!
1 ответов
заголовок для включения:
#include <cuComplex.h>
на стандартной установке linux CUDA он находится в:
/usr/local/cuda/include
вам нужно будет проверить этот файл заголовка и использовать определенные в нем функции для управления сложными числами на устройстве.
чтобы умножить (двойное) комплексное число на действительное число, я бы:
#include <cuComplex.h>
...
double cr = 1;
double ci = 2;
double r = 3;
cuDoubleComplex c = make_cuDoubleComplex(cr, ci);
cuDoubleComplex result = cuCmul(c, make_cuDoubleComplex(r, 0));
редактировать: С недавно выпущенной тягой v1.8 в CUDA 7 RC можно использовать thrust:: complex в любом тяги код или код устройства CUDA. Это позволяет писать более естественные операции, такие как:
#include <thrust/complex.h>
...
thrust::complex<float> c = thrust::complex<float>(2.0f, 5.0f);
thrust::complex<float> c2 = c*c;
float r = c2.real();