问题标签 [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 投票
1 回答
821 浏览

thrust - 对 CUBLAS 中的行/列向量感到困惑

我刚刚开始 CUBLAS/CUDA 编程。我主要使用矩阵和向量运算。我对 CUBLAS 中使用的向量的方向感到非常困惑。行向量和列向量似乎没有区别。因此,如果我使用 level-2 函数将矩阵与向量相乘,如何指定向量的方向?它会一直被视为列向量吗?如果我想将列向量 (nx1) 与行向量 (1xm) 相乘以生成矩阵 (nxm),我是否应该始终将它们视为矩阵并使用 3 级函数进行乘法?

另外,我使用推力来生成向量,所以如果我将推力向量(n 个元素)传递给 cublasCgemm 以形成 1xn 或 nx1 矩阵(即行或列向量)。如果我将 cublasOperation_t 设置为 CUBLAS_OP_N,该向量是否会被视为 1xn 或 nx1 向量?

谢谢。

0 投票
1 回答
1775 浏览

cuda - 如何在CUBLAS中做复数的幂?

我正在将我的 c++ 代码移植到 CUDA 和 CUBLAS。我使用 stl::complex 进行复杂计算(即 pow、log、exp 等),但我没有看到 CuComplex 库中定义的相同函数。我不知道如何创建这些功能,但我在网上找到了一些代码

上述结果没有给出正确答案。cpow有什么问题吗?对复数执行幂和其他功能会更好吗?

0 投票
2 回答
886 浏览

cuda - 在 CUDA 中查找 max/min 而不将其传递给 CPU

我需要在浮点数组中找到最大元素的索引。我正在使用函数“cublasIsamax”,但这会将索引返回给 CPU,这会减慢应用程序的运行时间。

有没有办法有效地计算这个索引并将其存储在 GPU 中?

谢谢!

0 投票
1 回答
3752 浏览

c++ - CUDA/CUBLAS 矩阵向量乘法

我之前发布了一个关于 CUDA 中的矩阵向​​量乘法和关于编写我自己的内核的问题。在这样做之后,我决定使用 CUBLAS 来实现我的问题,正如一些用户建议的那样(感谢@Robert Crovella),希望获得更高的性能(我的项目是性能驱动的)。

澄清一下:我想将 NxN 矩阵与 1xN 向量相乘。

几天来,我一直在查看粘贴在下面的代码,但我无法弄清楚为什么乘法会给我一个不正确的结果。我担心我使用 <vector> 数组会引起问题(这是使用这些数据类型的更大系统的一部分)。我并不是要将这个线程用作调试工具,但我认为这也将有助于其他试图实现这一目标的用户,因为我没有在互联网上找到针对我的特定问题(以及 cublas)的特别全面的资源v2 API)。提前致谢!

0 投票
1 回答
832 浏览

c++ - CUDA/CUBLAS:访问数组中的元素

作为对上一个问题的跟进,我正在尝试实现以下循环,这是一个矩阵向量乘法,其中向量是矩阵 Q 的列,基于循环迭代器:

编辑:Q 不能事先填充,而是用迭代器 K 的进展填充。

数组的维度是:

一个 [N x N]

Q [N x (0.5N + 1)]

该数组已被展平,以便与 cublasSgemv() 一起使用。我的问题是,是否可以通过告诉它从哪里开始访问 d_Q 以及元素的增量是多少(因为它是行主要 C++)来使用 cublasSgemv():

编辑:将内存访问增量与 sizeof(float) 相乘。据我所知,仍然不起作用。

我认为不可能像那样索引 d_Q,因为我没有得到任何结果

已解决:@RobertCrovella 的解决方案正是我想要的。谢谢。

0 投票
2 回答
2044 浏览

c++ - 使用 CUBLAS 进行多个矩阵向量调用

我目前必须执行 128 个独立的顺序矩阵向量 CUBLAS 操作。所有的矩阵和向量都是不同的。每个独立矩阵紧跟在下一个矩阵之后存储在内存中,并且向量同样连续存储在内存中(全部以行优先形式)。

更多上下文:矩阵为 (2048 X 8),向量长度为​​ 2048。输出都是独立的。因为我有超级矩阵,所以我有以下内容:

使用cublasSgemv我首先对每个迷你矩阵进行转置,然后将结果添加(而不是替换)到内存中:

我正在打 128 个这样的电话,我想在一个电话中进行。

分析器显示进行这些多次调用会显着降低性能。进行多个矩阵向量运算的最佳方法是什么?有没有办法将它们批量处理成一个快速调用?

流是最好的方法还是有一些方法可以用相关的偏移量进行调用(索引到我的矩阵和向量数组)?唯一其他有效的选择似乎是使用 CUSPASE 调用并将所有矩阵粘贴在对角线上。

注意:对于这个特定问题,我对在 gemv 调用中获得正确的转置或行/列主要排序不感兴趣。

0 投票
1 回答
1344 浏览

cuda - cuBLAS 的标准 Fortran 接口

我在 Linux 上使用了一个商业模拟软件,它可以进行密集的矩阵操作。该软件默认使用英特尔 MKL,但它允许我将其替换为自定义 BLAS/LAPACK 库。此库必须是共享对象 (.so) 库,并且必须导出 BLAS 和 LAPACK 标准例程。该软件都需要标准的 Fortran 接口。

为了验证我是否可以使用自定义库,我编译了 ATLAS 并在其中链接了 LAPACK(来自 netlib)。该软件能够毫无问题地使用我编译的 ATLAS 版本。

现在,我想让软件使用 cuBLAS 以提高仿真速度。我遇到了 cuBLAS 不导出标准 BLAS 函数名称(它们有cublas前缀)的问题。此外,库 cuBLAS 库不包含 LAPACK 例程。我readelf -a用来检查导出的函数。

另一方面,我尝试使用MAGMA来解决这个问题。我成功编译并链接到所有 ATLAS、LAPACK 和 cuBLAS。但它仍然没有导出正确的函数,也没有在最终的共享对象中包含 LAPACK。我不确定这是应该的方式还是我在构建过程中做错了什么。

我也找到了CULA,但我不确定这是否能解决问题。

是否有人试图将 cuBLAS/LAPACK(或适当的包装器)链接到一个(.so)导出具有正确函数名称的标准 Fortran 接口?我相信这在概念上是可能的,但我不知道该怎么做!

0 投票
2 回答
750 浏览

cuda - cublas:相同的输入和输出矩阵以获得更好的性能?

我看到 CUBLAS 可能是用于单个大型矩阵乘法或加法等的有效算法包。但在常见的设置中,大多数计算都是依赖的。所以下一步依赖于上一步的结果。

这会导致一个问题,因为输出矩阵必须与 CUBLAS 例程中的输入矩阵不同(因为输入矩阵是 const ),所以要花费大量时间来分配空间并为这些临时矩阵从设备复制数据。

那么是否可以做诸如乘法(A,A,B)之类的事情,其中​​第一个参数是输出矩阵,第二个/第三个是输入矩阵,以避免额外的内存操作时间?还是有更好的解决方法?

非常感谢 !

0 投票
1 回答
1791 浏览

cuda - 在内核中调用 cublas

我想并行使用 Zgemv。

我的编译命令是

第一行是工作。但是第二行是错误的!

我搜索“cudaRegisterLinkedBinary”,但我什么也没有!

我知道 nvcc 支持在内核中调用 cublas。

0 投票
1 回答
1021 浏览

c - CUBLAS 通用矩阵点积

我写了一个struct和一些包装“CUBLAS 矩阵对象”的函数

struct是:

alloc 函数创建矩阵结构:

免费功能:

从浮点数组中设置矩阵值的函数:

我在编写一个涵盖矩阵转置的通用点积函数时遇到了问题。这是我写的:

例子:

我想要一个矩阵A:

这意味着:

并将其与转置 B 相乘:

还:

A*B^T=C 的结果:

我正在使用点函数:

使用此功能时,我得到:** On entry to SGEMM parameter number 10 had an illegal value

我究竟做错了什么?