【发布时间】:2018-08-27 02:28:00
【问题描述】:
考虑设备内存中的cuDoubleComplex 数组a。是否有可能获得指向a 的实部和虚部的指针,而无需分配并执行深度复制到两个新的double 数组中?
类似这样的:
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;
}
CUDA does have something like this for numbers,但不适用于数组/指针。
原因是我希望能够分别在实部和虚部上调用 cuBLAS D 而不是 Z 函数。例如,
cublasDgemm(...,real_a,...,somearray,...,anotherarray,...)
【问题讨论】:
-
嗯...所有虚部(同样是实部)都应该以固定的步幅间隔开,因此理论上您可以将每个虚部的地址计算为
base + index * stride用于迭代器...也许如果您告诉我们为什么需要将复数数组的组件分成两个数组,而不是将它们留在a[]中并根据需要访问,我们可以提供更好的帮助。 -
好的,我实际上需要它们作为连续块,因为我将在它们上调用 cuBLAS 函数。根据您的建议,我已在问题中添加了更多详细信息。
-
请注意,您链接到的是 JCUDA 文档,这基本上只是为了实现 java 和 CUBLAS/CUFFT 使用的 C 类型之间的互操作性
标签: cuda