CUDA cublas<t>gbmv 理解

3
我最近想使用简单的CUDA矩阵-向量乘法。我在cublas库中找到了一个合适的函数:cublas<<>>gbmv。这里是官方文档
但实际上,它非常不友好,所以我没能理解klku参数的含义。此外,我也不知道stride是什么(必须提供)。这些参数有一个简要的解释(第37页),但看起来我需要知道其他东西。

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

所以我有几个问题要问GPU/CUDA/cublas专家:

  1. 如何找到更易理解的有关使用cublas的文档或指南?
  2. 如果您知道如何使用此函数,能否向我解释一下如何使用它?
  3. 也许cublas库有些特别,每个人都使用一些更流行、文档更好等等的东西?

非常感谢。


2
CUBLAS函数只是基于标准的Fortran BLAS模型,因此有大量的文档可供参考。因此,尝试搜索SBGMV,您可能会找到您要查找的内容(您的矩阵是否真的是带状的?) - talonmies
1个回答

7

因此,BLAS(基本线性代数子程序)通常是一个API,用于基本的线性代数例程。它包括向量-向量操作(一级blas例程),矩阵-向量操作(二级)和矩阵-矩阵操作(三级)。有一个可用的"参考" BLAS实现了所有正确的内容,但大多数情况下,您会使用针对您的架构进行优化的实现。cuBLAS是CUDA的一种实现。

BLAS API作为描述基本操作的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 + by,其中A是以列主要格式存储的m x n矩阵,x和y是向量,而α和β是标量。
其中op(A)可以是A,A T或A H。因此,如果您只想要y = Ax,这是常见情况,则a = 1,b = 0,并且transa == CUBLAS_OP_N。
incx是x中不同元素之间的跨度;有很多情况下这会很方便,但如果x只是包含向量的简单1d数组,则步幅为1。
这就是关于SGEMV所需的全部内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接