我是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轮换,什么是更好的选择?
提前致谢, 克里斯
答案 0 :(得分:1)
我找不到在同一个矩阵上多次执行cublasSrotg
和cublasSrot
的技巧,所以我实现了自己的内核。
与rhypot
同时使用更简单的方法来提高性能
double t = rhypot(x, y);
double c = x * t;
double s = y * t;
请参阅CUDA Devblog