Cuda 库布拉斯大学;t>;gbmv理解

Cuda 库布拉斯大学;t>;gbmv理解,cuda,cublas,Cuda,Cublas,我最近想用一个简单的CUDA矩阵向量乘法。我在cublas库中找到了一个合适的函数:cublasgbmv。这是 但是它实际上非常差,所以我没有理解kl和ku参数的含义。此外,我不知道什么是stride(也必须提供)。 这些参数有一个简短的解释(第37页),但看起来我需要知道一些其他的东西 互联网上的搜索并没有提供关于这个问题的大量有用信息,主要是参考不同版本的文档 因此,我有几个问题要问GPU/CUDA/cublas专家: 我如何找到更容易理解的关于使用cublas的文档或指南 如果你知道如何使

我最近想用一个简单的CUDA矩阵向量乘法。我在cublas库中找到了一个合适的函数:cublasgbmv。这是

但是它实际上非常差,所以我没有理解
kl
ku
参数的含义。此外,我不知道什么是
stride
(也必须提供)。 这些参数有一个简短的解释(第37页),但看起来我需要知道一些其他的东西

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

因此,我有几个问题要问GPU/CUDA/cublas专家:

  • 我如何找到更容易理解的关于使用cublas的文档或指南
  • 如果你知道如何使用这个函数,你能解释一下我该如何使用它吗
  • 也许库布拉斯图书馆有点与众不同,每个人都使用一些更受欢迎、更好记录的东西,等等
  • 非常感谢。

    因此(基本线性代数子程序)通常是基本线性代数例程的API,顾名思义。它包括向量运算(1级blas例程)、矩阵向量运算(2级)和矩阵运算(3级)。有一种可用的方法可以正确地实现所有内容,但大多数情况下,您会为您的体系结构使用优化的实现。cuBLAS是CUDA的一个实现

    BLASAPI作为一种描述基本操作的API非常成功,因此被广泛采用。然而,(a)由于当时的体系结构限制(这是1979年,API是使用8个字符或更少的名称定义的,以确保它可以广泛编译),名称非常神秘,(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是以列主格式x和y存储的m x n矩阵 是向量,和是标量

    式中,op(A)可以是A、AT或AH。因此,如果您只是想要
    y=Ax
    ,通常情况下,那么
    A=1
    b=0
    。和
    transa==CUBLAS\u op\N

    incx
    x
    中不同元素之间的跨距;在很多情况下,这很方便,但是如果
    x
    只是一个包含向量的简单1d数组,那么跨距将为1


    这就是SGEMV所需的全部功能。

    CUBLAS函数只是以标准Fortran BLAS为模型,其中有大量的文档。因此,尝试搜索SBGMV,您可能会找到所需的功能(您的矩阵真的是带状的吗?)