CUDA cublas <t> gbmv理解

Ixa*_*zis 2 cuda cublas

我最近想使用简单的CUDA矩阵向量乘法.我在cublas图书馆找到了一个合适的功能:cublas << >> gbmv.这是官方文档

但它实际上非常差,所以我无法理解klku参数的含义.而且,我不知道是什么stride(它也必须提供).有关这些参数的简要说明(页37),但看起来我需要了解其他内容.

在互联网上搜索并没有提供关于这个问题的大量有用信息,主要是对不同版本的文档的引用.

所以我对GPU/CUDA/cublas大师提出了几个问题:

  1. 如何找到有关使用cublas的更易理解的文档或指南?
  2. 如果你知道如何使用这个功能,你不能解释我如何使用它?
  3. 也许Cublas图书馆有点特别,每个人都使用更受欢迎,更好记录的东西等等?

非常感谢.

Jon*_*rsi 6

所以BLAS(基本线性代数子程序)通常是一个API,顾名思义,它是基本的线性代数例程.它包括矢量矢量运算(1级blas例程),矩阵矢量运算(2级)和矩阵运算(3级).有一个"参考"BLAS可以正确实现所有内容,但大多数时候你会为你的架构使用优化的实现.cuBLAS是CUDA的一个实现.

BLAS API非常成功,它描述了它被广泛采用的基本操作.然而,(a)由于当时的架构限制(这是1979年,并且使用8个字符或更少的名称定义API以确保它可以广泛编译),名称非常神秘,并且(b)它成功,因为它很通用,所以即使是最简单的函数调用也需要很多无关的参数.

因为它如此广泛,所以通常假设如果你正在进行数值线性代数,你已经知道了API的一般要点,因此实施手册通常会遗漏重要的细节,我认为这就是你遇到的问题.

级别2和3的例程通常具有形式的函数名TMMOO..,其中T是数值类型的矩阵/向量的(S/ D单/双精度实,C/ Z,单/双精度复合物),MM是矩阵类型(GE一般-例如,只是一个密集的矩阵,你不能说任何其他的东西; GB对于一般的带状矩阵,SY对称矩阵等),并且OO是操作.

这一切现在看起来都有点荒谬,但它的工作和工作相对较好 - 你很快学会扫描这些熟悉的操作,这样SGEMV就是单精度通用矩阵时间向量乘法(这可能是你想要的,而不是SGBMV) ,DGEMM是双精度矩阵矩阵乘法等.但它确实需要一些练习.

因此,如果您查看cublas sgemv说明或原始文档,您可以单步执行参数列表.首先,基本操作是

此函数执行矩阵向量乘法 y = a op(A)x + b y ,其中A是以列主格式存储的amxn矩阵,x和y是向量,并且是标量.

其中op(A)可以是A,A Ť,或A ħ.因此,如果您只是想要y = Ax,那么就像常见情况那样a = 1,b = 0.和transa == CUBLAS_OP_N.

incx是不同元素之间的步幅x; 有很多情况下这会派上用场,但如果x只是一个包含矢量的简单1d数组,则步幅为1.

这就是SGEMV所需要的一切.