我是 CUDA 的新手,我尝试使用 cuBlas 库为 QR 分解实现 Givens 旋转。
我用了
cublasStatus_t cublasSrotg(cublasHandle_t handle,
float *a, float *b,
float *c, float *s)
用于计算 c 和 s 和
cublasStatus_t cublasSrot (cublasHandle_t handle, int n,
float *x, int incx,
float *y, int incy,
const float *c, const float *s)
用于旋转 1000 x 1000 矩阵。由于 cublaSrotg() 用 r 和 z 覆盖参数 a 和 b,我无法在设备内存中使用矩阵。但是将矩阵的元素复制到主机大约需要循环任何循环的 90%。C 语言的实现速度快三倍。
我用错了吗?对于 CUDA 设备上的 Givens 轮换,什么是更好的选择?
在此先感谢,克里斯