0

我是 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 轮换,什么是更好的选择?

在此先感谢,克里斯

4

1 回答 1

1

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

同时rhypot有一种更简单的方法,性能更高

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

请参阅CUDA 开发博客

于 2015-05-31T06:14:18.047 回答