gpt4 book ai didi

CUDA cublasgbmv 理解

转载 作者:行者123 更新时间:2023-12-04 13:33:01 32 4
gpt4 key购买 nike

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

但是其实很差,所以一直没看懂klku参数是什么意思。此外,我不知道 stride 是什么(也必须提供)。有对这些参数的简要说明(第 37 页),但看来我还需要了解一些其他信息。

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

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

  1. 如何找到关于使用 cublas 的更易于理解的文档或指南?
  2. 如果你知道如何使用这个功能,你能不能告诉我如何使用它?
  3. 也许 cublas 库有点特别,每个人都使用一些更流行、文档更好等的东西?

非常感谢。

最佳答案

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

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

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

2 级和 3 级例程通常具有 TMMOO.. 形式的函数名称,其中 T 是矩阵/向量的数值类型(S/D 用于单/ double 实数,C/Z 用于单/ double 复数),MM 是矩阵类型(GE 用于一般 - 例如,只是一个密集矩阵,您不能说任何其他内容;GB 用于一般带状矩阵, SY 表示对称矩阵等),OO 是操作。

这一切现在看起来有点荒谬,但它确实有效,而且效果相对较好——您很快就会学会扫描这些熟悉的操作,因此 SGEMV 是一个单精度通用矩阵时间向量乘法(这可能是您想要的,不是 SGBMV),DGEMM 是 double 矩阵-矩阵乘法等。但这确实需要一些练习。

因此,如果您查看 cublas sgemv 说明,或者在 documentation of the original ,您可以单步执行参数列表。一、基本操作是

This function performs the matrix-vector multiplication y = a op(A)x + b y where A is a m x n matrix stored in column-major format, x and y are vectors, and and are scalars.

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

incxx中不同元素之间的步幅;在很多情况下这会派上用场,但如果 x 只是一个包含向量的简单一维数组,那么步幅将为 1。

这就是 SGEMV 所需的全部内容。

关于CUDA cublas<t>gbmv 理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10724767/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com