是否可以获得指向cuDoubleComplex的实部和虚部的指针?

时间:2018-08-27 02:28:01

标签: cuda

请考虑设备内存中的if (mobile_test($color, $name) === 5) { echo "The column ID is 5" /* This line will be triggered */ } 阵列<dfn>。是否有可能获得指向cuDoubleComplex的实部和虚部的指针,而无需分配和对两个新的a数组进行深拷贝?

类似这样的东西:

a

而不是类似的东西:

double

CUDA does have something like this for numbers,但不适用于数组/指针。

原因是我希望能够分别在实部和虚部上调用cuBLAS real_a = //points to real part of a imag_a = //points to imaginary part of a 而不是/*allocate real_a and imag_a here */ for(int j=0; j<numElements; j++){ real_a[j]= a[j].x; imag_a[j]= a[j].y; } 函数。例如,

D

1 个答案:

答案 0 :(得分:1)

  

是否有可能获得指向实部和虚部的指针?   无需分配并进行深拷贝到两个新的双精度数组中?

可以做到:

double* real_a = reinterpret_cast<double*>(&a[0].x); //points to real part of a
double* imag_a = reinterpret_cast<double*>(&a[0].y); //points to imaginary part of a

,但是请注意,访问指针以获取正确的实数或虚数元素时,需要使用跨度2。

  

原因是我希望能够打电话给cuBLAS D   Z分别在实部和虚部上起作用。

这将与在实指针或虚指针上作为矢量操作的BLAS函数一起使用,因为这些BLAS例程允许传递跨步(在这种情况下必须为2)。

  

例如,

     

cublasDgemm(...,real_a,...,somearray,...,anotherarray,...)

这与您可以直接获得的指针不起作用,如我在此处所示。 BLAS函数会将数组视为矩阵,但确实支持跨越式的源数据和目标数据,但该跨度将应用于具有平坦矩阵的每一列的开头,但不适用于列中的元素,这是您需要做的这项工作正常。