问题标签 [cublas]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
22229 浏览

cuda - 简单的 CUBLAS 矩阵乘法示例?

我正在为 CUBLAS 寻找一个非常简单的矩阵乘法示例,它可以使用高性能 GPU 操作将 M 乘以 N 并将结果放在 P 中以用于以下代码:

到目前为止,我发现使用 CUBLAS 进行任何类型的矩阵乘法的大多数代码(似乎?)都过于复杂。

我正在尝试设计一个基础实验室,学生可以在其中比较 GPU 上的矩阵乘法与 CPU 上的矩阵乘法的性能,大概是在 GPU 上提高了性能。

0 投票
1 回答
10595 浏览

c - 如何使用 blas 以最佳方式转置矩阵?

我正在做一些计算,并对不同 BLAS 实现的力量和弱点进行一些分析。但是我遇到了一个问题。

我正在测试 cuBlas,在 GPU 上做 linAlg 似乎是个好主意,但有一个问题。

使用列主要格式的 cuBlas 实现,由于这不是我最终需要的,我很好奇是否有一种方法可以使 BLAS 进行矩阵转置?

0 投票
1 回答
2083 浏览

cuda - CUBLAS 的工作出人意料

使用 CUDA+CUBLAS 编写了我的第一个程序。它只使用 'cublasDgemm' 函数并计算 2 N*N 矩阵的乘积。

但是,在我启动程序的所有时间里,它一直产生相同的错误答案(例如,当将包含 5 作为单个元素的 1*1 矩阵乘以包含元素 6 的 1*1 矩阵时,它总是说结果是 36,而不是30)。我检查了几次程序都没有成功。但是,当我在第二天(即重新启动后)回到它时,它工作得很好。我不记得我是否重新编译了它,但事实是它是同一个 VS 项目、相同的代码、具有 GPU 的同一台计算机。

那么,谁能解释我为什么会发生这种情况?我是否必须进一步期待同样的奇怪行为?

这是我启动的代码:

0 投票
1 回答
1624 浏览

performance - CUBLAS dgemm 性能查询

这些是我在 4 个 GPU 上运行 cublas DGEMM 的结果,每个 GPU 使用 2 个流(Tesla M2050):

在此处输入图像描述

我已经测试了我的结果,它们没问题;与使用默认流的版本相比,我担心我得到的高 Gflops 值。我正在使用以下公式计算 Gflops:

Gflops = {2.0*10^-9*(N^3+N^2)}/elapsed_time_in_s

对于使用多个流的版本,我是否需要以任何方式修改此公式?

HtoD-ker-DtoH是主机到设备的数据传输、内核执行和设备到主机的数据传输所花费的时间,以秒为单位(这是上面公式的分母)。 Crosspost 到 Nvidia 论坛 - http://forums.nvidia.com/index.php?showtopic=219910&st=0#entry1350908

编辑:根据@talonmies 的评论,我cudaStreamSynchronize在计算时间之前添加了一个,结果如下:

在此处输入图像描述

谢谢,

萨彦

0 投票
1 回答
1920 浏览

casting - CUDA 和 cuBLAS 中的类型转换

我正在用 cuda 编写一个程序,并试图减少数据传输的开销。我使用 cuBLAS 库进行矩阵乘法,我必须发送 30.000.000 个数字,其值范围为 0-255。

现在我将它们作为浮点数发送,因为我希望我的最终产品是一个浮点数,考虑到它们可以放入一个字节,最终会变得非常昂贵。

有没有办法在使用 cuBLAS 库或任何其他快速数学库时将它们作为字节发送并将它们类型转换为浮点数?或者告诉gpu以某种方式将它们对齐为浮点数?

0 投票
3 回答
2126 浏览

c++ - 在一次操作中进行多个矩阵-矩阵乘法

我正在实现一个算法,它本质上是一系列矩阵-矩阵乘法,如下所示:

我的矩阵是非常小的 100x100 浮点数,但序列非常长,大约数十亿。

我尝试使用 CUBLAS 来进行矩阵乘法,但这很慢,但我确实注意到了一些有趣的事情。

将 100x100 与 100x100 矩阵相乘很慢,但将 1.000.000x100 与 100x100 相乘相对较快,这让我想到。如果我不是从左到右进行扫描,而是并行进行 10.000 次扫描。这应该很快,如果我在完成后乘以我的​​矩阵,我会得到相同的结果——只是更快。

M_1 ... M_n 在一组大约 100 个不同的矩阵中毫无价值,所以空间消耗并不是真正的问题,我需要做的就是在一次操作中进行多次乘法运算。

现在这是我的问题。我已经完成了一个矩阵-矩阵(sgemm)实现,灵感来自 nvidia 在他们的文档中展示的一个,但它的速度大约是 cublas 的 4 倍。有人知道 CUBLAS 是如何工作的吗?如果代码在某处可用?

0 投票
1 回答
447 浏览

python - cublas cublasZgemm() 比预期慢

根据英伟达。cublasZgemm 比英特尔 MKL 快 6 倍。

但是,在我的 PC(i7 2600、Nvidia gtx560、OS:linux 64bit)上,cublasZgemm 比 MKL 稍慢。

我使用 numpy.dot() 附带的 enthought python 发行版,它将 numpy 与 MKL 10.3 链接起来。

使用 cublasZgemm 的矩阵乘法函数在共享库中编译,并在 python 脚本中使用 ctypes 调用。

当两个 1024x1024 复矩阵相乘时。numpy.dot() 花了 84 毫秒。ctypes 函数调用花费了 110 毫秒,而 cublasZgemm() 部分花费了 97 毫秒。

我想知道为什么 cublassZgemm 没有 nvidia 所说的那么快?

0 投票
1 回答
377 浏览

c - 使用 CUBLAS / CUSPARSE 操作将未初始化数组的元素设置为 0 是否安全?

例如,当累加不同矩阵向量乘法的结果时(即使只有一个累加元素,这也是您在 BLAS 中所做的事情),一个形式上从零向量开始。但是没有无开销的方法可以直接在 CUDA 设备内存上分配一个零数组(或者是否存在?),因此想到的解决方案是简单地采用任意数字的数组,而不是将其初始化为 0 , 将值传递给orbeta = 0.的第一次调用。毕竟,如果它有那个参数“为什么不使用它”。cublas<t>gemvcusparse<t>csrmv

这是

  • 一个好主意?或者情况β = 1 是否以这样的方式进行了优化,以提供整体更好的性能来将数组初始化为 0 然后使用调用cusparseDcsrmv(..., 1., zeroes_array)
  • 安全的?天真地,浮点作为 ℝ 元素的表示应该满足x ⋅ 0 = 0 ∀ x,但是这种天真的处理在处理浮点时当然通常是相当致命的。我很确定当数组先前用于具有相同数据类型的其他一些操作时,结果表现良好,但它对于新分配的设备内存的单元化块安全吗?

我主要对稀疏情况感兴趣,因为对于稠密矩阵,乘法的O ( n ² ) 复杂性使得不必过多考虑向量的O ( n ) 分配的性能。

0 投票
2 回答
4264 浏览

c++ - 使用 CUBLAS 找到最大值和最小值

我无法理解为什么使用 CUBLAS 在一系列双打中找到最大值和最小值的函数不能正常工作。

代码如下:

其中 values 是要在其中搜索的值。max_idx 和 min_idx 是值中找到的数字的索引。CUBLAS 调用的结果似乎相当随机并且输出错误的索引。

有人对我的问题有很好的答案吗?我现在有点难过:(

0 投票
1 回答
2066 浏览

cuda - 错误“external symbol _cublasDestroy_v2@4”是不是CUDA使用不当导致的?

当我尝试编译矩阵 CUBLAS 操作时出现这些错误:

有谁知道这个错误是否可能是由于使用 4.1 版而不是新的 4.2 CUDA 引起的?