请考虑设备内存中的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
答案 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函数会将数组视为矩阵,但确实支持跨越式的源数据和目标数据,但该跨度将应用于具有平坦矩阵的每一列的开头,但不适用于列中的元素,这是您需要做的这项工作正常。