使用cuBlas函数cublasSrotg和cublasSrot进行QR分解的Givens旋转

时间:2012-06-20 15:23:51

标签: cuda gpgpu nvidia cublas

我是CUDA的新手,我尝试使用cuBlas libary实现用于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×1000矩阵的转化。由于cublaSrotg()用r和z覆盖参数a和b,我无法在设备内存中使用矩阵。但是将矩阵的元素复制到主机需要大约90%的循环周期。 C中的实现速度提高了三倍。

我使用它错了吗?对于CUDA设备上的Givens轮换,什么是更好的选择?

提前致谢, 克里斯

1 个答案:

答案 0 :(得分:1)

我找不到在同一个矩阵上多次执行cublasSrotgcublasSrot的技巧,所以我实现了自己的内核。

rhypot同时使用更简单的方法来提高性能

double t = rhypot(x, y);
double c = x * t;
double s = y * t;

请参阅CUDA Devblog