CUBLAS基于参考BLAS,参考BLAS从未包含Hadamard产品(复杂或真实).因此CUBLAS也没有.英特尔已经添加v?Mul到MKL这样做,但它是非标准的,而不是在大多数BLAS实现中.这是一种老式的学校fortran程序员只会编写一个循环的操作,所以我认为它确实不能保证BLAS中的专用例程.
我所知道的没有"标准"CUDA库实现了Hadamard产品.可以使用CUBLAS GEMM或SYMM来执行此操作并提取结果矩阵的对角线,但从计算和存储角度来看,这将是极其低效的.
Thrust模板库可以使用thrust::transform,例如:
thrust::multiplies<thrust::complex<float> > op;
thrust::transform(thrust::device, x, x + n, y, z, op);
Run Code Online (Sandbox Code Playgroud)
将迭代来自设备指针x和y的每对输入并计算z [i] = x [i]*y [i](可能需要进行几次转换才能编译它,但是你得到了理念).但这实际上需要在项目中编译CUDA代码,显然你不希望这样.