level 9
王皮尔磁子
楼主
"CUDALink使 Wolfram 语言能够在GPU上使用 CUDA 并行计算架构".
我想要将复数的 List 转换为 CUDAVector, 再使用 CUDADot 计算内积.
但是发现有 CUDATranspose 函数但是没有相应的 CUDA 下的 Conjugate 函数, 因此想要计算内积似乎需要先将 CUDAVector 转换回 List, 再正常地 Conjugate, 最后转换回 CUDAVector. 这个做法有些奇怪, 看上去是绕了一大圈远路, 有谁知道为CUDAVector取复共轭有什么简便的方法吗?
Needs["CUDALink`"];
cuvec1 = CUDAVector[Normalize@RandomComplex[{-1 - I, 1 + I}, 10],
"ComplexReal32"];
cuvec2 = Conjugate@cuvec1;
cuvec3 = Conjugate@Normal@Normal@cuvec1 ;
cuvec4 = CUDAVector[Conjugate@Normal@Normal@cuvec1 , "ComplexReal32"];
CUDADot[cuvec4, cuvec1]
2025年12月20日 14点12分
1
我想要将复数的 List 转换为 CUDAVector, 再使用 CUDADot 计算内积.
但是发现有 CUDATranspose 函数但是没有相应的 CUDA 下的 Conjugate 函数, 因此想要计算内积似乎需要先将 CUDAVector 转换回 List, 再正常地 Conjugate, 最后转换回 CUDAVector. 这个做法有些奇怪, 看上去是绕了一大圈远路, 有谁知道为CUDAVector取复共轭有什么简便的方法吗?
Needs["CUDALink`"];
cuvec1 = CUDAVector[Normalize@RandomComplex[{-1 - I, 1 + I}, 10],
"ComplexReal32"];
cuvec2 = Conjugate@cuvec1;
cuvec3 = Conjugate@Normal@Normal@cuvec1 ;
cuvec4 = CUDAVector[Conjugate@Normal@Normal@cuvec1 , "ComplexReal32"];
CUDADot[cuvec4, cuvec1]