问题标签 [cusolver]

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 回答
175 浏览

cuda - 如何批量处理 cusolver cholesky 逆(potri)?

与 CUBLAS 不同,Cusolver 具有 Cholesky 分解。我看到cusolverDnDpotrsBatchedand cusolverDnDpotrfBatched,但不幸的是我似乎无法cusolverDnDpotriBatched文档中找到。

有没有什么方法可以在没有大量开销的情况下进行批处理cusolverDnDpotri,或者有什么方法可以做与 API 所做的等效的事情?

0 投票
1 回答
556 浏览

cuda - 具有大矩阵的 CUDA cuSolver gesvdj

我正在NVIDIA P6000 上运行在“G.2. 带有奇异向量的 SVD(通过 Jacobi 方法)”部分下找到的代码的略微修改版本。细微的修改是在堆中为 A、U 和 V 向量动态分配内存,并用取决于 A 索引的值填充指定大小的 A 向量。我还将所有内容从双精度数转换为浮点数。最后的修改是对 gesvdj 调用本身的循环和收敛性检查,直到某些迭代次数(在我的例子中是 10 次)。

通过这些细微的修改,我能够克服在大小大于 ~1000x1000 的对称阵列上执行 SVD 的第一个障碍。我最终需要在大小为 1048576x20 的数组上运行 SVD。

目前,该算法针对大小为 10000x20 的数组运行,但当我转到 50000x20 时失败。

这个问题似乎源于 gesvdj 调用本身。调用 gesvdj 后的同步调用失败并返回一般访问错误。

如果我使用 cuda-memcheck 运行程序,我会在同一块中的不同线程中得到一系列错误:

我想知道我是否遇到了某种 cusolver 内部限制?有人有想法么?如有必要,我可以提供我的确切代码,但它与我认为我只会将人们指向那里的示例非常相似。

谢谢!

编辑以添加我链接到的示例中的违规代码,算法在断言处失败(CUSOLVER_STATUS_SUCCESS == status); 线。我对 C 和 CUDA 编码真的很陌生,如果有一些明显的调试信息我遗漏了,我很抱歉。

编辑 2添加我的代码...

0 投票
1 回答
343 浏览

cuda - LU factorization receives different results between LAPACK and cuBLAS/cuSOLVER

I am testing out some scenarios where the function dgetrf is returned differently when used with cuBLAS/cuSOLVER compared to writing for LAPACK. For example, I am looking at LU factorization of the following matrix:

2.0 4.0 1.0 -3.0 0.0

-1.0 -2.0 2.0 4.0 0.0

4.0 2.0 -3.0 5.0 0.0

5.0 -4.0 -3.0 1.0 0.0

0.0 0.0 0.0 0.0 0.0

I first try to call dgetrf from cuBLAS/cuSOLVER as followed (warning, ugly testing code ahead!)

The output from the code above is

When I try to do the same with LAPACK (warning: more ugly code!):

The output I get is

I understand that they are different libraries, but is this behaviour expected?

0 投票
1 回答
70 浏览

eigenvalue - 输出结果不匹配,LAPACKE_zheev() vs cusolverDnZheevd()

我正在将代码从遗留 cblas/lapacke 转换为 cudaBLAS/cudaSOLVER 并遇到一些问题。我制作了一个测试程序来深入了解这一点。附件是我正在使用的代码:

可以使用#define __CUDA 编译程序以获得cuda 构建或不使用#define __CUDA 获得非cuda 构建。 non-cuda build 给我以下输出:

cuda build 给我以下输出:

任何人都可以阐明这个问题,为什么我主要是特征向量得到不同的结果?特征值顺序也似乎相反。这是为什么?

0 投票
1 回答
183 浏览

cuda - 对 `cusolverDn` 函数的未定义引用

我需要并行计算一个大矩阵的特征值。为此,我使用 cuSolver。为了测试它是如何工作的,我从文档中获取了代码:

但是在编译之后我得到了下一个错误undefined reference to `cusolverDnCreate',,和undefined reference to cusolverDnDsyevd_bufferSize,但是所有这些函数都存在于 <cusolverDn.h> 中。 undefined reference to cusolverDnDsyevdundefined reference to `cusolverDnDestroy

最奇怪的是,当我尝试按照那里所说的那样编译这个文件时:undefined reference to cusolverDn。相反,我在上面列出了两个第一个错误(其他错误相同)我得到了新错误:identifier "cusolverEigMode_t" is undefinedidentifier "CUSOLVER_EIG_MODE_VECTOR" is undefined.

我尝试解决它几天,如果你能帮助我,我将不胜感激!

0 投票
0 回答
46 浏览

matrix - 如何并行查找大矩阵的特征值?

我需要尽可能快地在 CUDA 上找到 1000 和更大的矩阵的特征值。我找到了 cusolver 库并从文档中运行代码:

它工作得非常快,但问题是我无法计算大于 25*25 的矩阵的特征值(当我尝试将 m 的值设置为大于 25 时,变量 m 负责矩阵 0 的大小我得到:Segmentation fault (core dumped)。我应该更改库或使用 cusolver?

0 投票
1 回答
166 浏览

c++ - 测试 CUDA 11 cusolverDnDSgels()

试图理解 cusolverDnDSgels 函数。如果我使用文档中的简单 3x3 示例运行它,它可以工作,但是当我使用我的数据运行它时,d_info 返回 -1,正如文档所说,如果 d_info = -i 那么第 i 个参数无效。

贝娄我发布了带有 3 x 3 和 4 x 3 矩阵的代码,其中前者有效,而后者无效。

作为参考,我使用了这个网站计算器https://adrianstoll.com/linear-algebra/least-squares.html

0 投票
1 回答
158 浏览

c++ - cuSOLVER - cusolverSpScsrlsvqr 的设备版本比主机版本慢得多

我有一些规则构建的稀疏 3 对角 NxN 矩阵A,并且想要解决系统问题Ax=b。为此,我使用cusolverSpScsrlsvqr()来自 cuSolverSp 模块。设备版本比cusolverSpScsrlsvqrHost()大 N 慢很多倍可以吗?例如,对于 N=2^14,设备时间为 174.1 毫秒,主机时间为 3.5 毫秒。我在 RTX 2060 上。

代码:

0 投票
1 回答
239 浏览

c++ - CUDA - CUBLAS:解决许多(3x3)密集线性系统的问题

我正在尝试使用 CUDA 10.1 解决大约 1200000 个线性系统(3x3,Ax=B),特别是使用 CUBLAS 库。我从这篇(有用的!)帖子中得到了启发,并在统一内存版本中重新编写了建议的代码。该算法首先使用 cublasgetrfBatched() 执行 LU 分解,然后连续两次调用 cublastrsm() 求解上三角线性系统或下三角线性系统。代码附在下面。它最多可以正确处理大约 10000 个矩阵,在这种情况下,执行 LU 分解需要约 570 毫秒(在 NVIDIA GeForce 930MX 上),求解系统需要约 311 毫秒。

我的问题/问题是:

  1. 过载问题:为超过 10k 的矩阵分配内存时会崩溃。为什么?如何改进我的代码以解决整批 120 万个矩阵?

  2. 时间问题:我的目标是在不到 1 秒的时间内解决所有这些系统。我目前是否遵循正确的方法?否则有什么建议吗?

  3. 是否有可能和/或有用,如果是的话,如何使用 10k 矩阵批次的“流”?

代码:

0 投票
1 回答
117 浏览

c++ - cusolverDnDDgels 的错误结果

我想测试 CUDA 11.1 提供的 xgels 的 cuda 实现,看来我无法使其正常工作。例如,这段代码似乎运行得很好:

不幸的是,结果是错误的,因为只有第一列似乎还可以:

工作区:3653888!***

查找工作区 - 如果可以,则为 1:1!***

解决状态 - 1 如果确定:1!***

伊特尔:-51!

信息 - 如果没问题,则为 0:0!

犰狳结果:

9.9965 -0.0198 0.0290 -0.0317 0.0027 -0.0197 0.0377 -0.0379 -0.0172 0.0088

9.9774 0.0485 0.0089 -0.0233 0.0054 -0.0257 0.0130 0.0080 0.0149 -0.0335

求解器结果:

9.9965 -0.0198 0.0290 -0.0317 0.0027 -0.0197 0.0377 -0.0379 -0.0172 0.0088

-0.8578 0.1884 0.5331 -0.8275 0.1992 -0.0587 1.0014 -0.0250 0.6571 -0.5516

如果我运行 cuda-memcheck,我得到的第一个错误是:

所以看起来代码有内存错误,但我在使用中无法检测到任何错误。此外,如果我注释掉对 cusolverDnDDgels 的调用,错误就会消失。

关于是什么导致此代码失败的任何线索?

我在 rtx 2080TI 上执行代码,代码编译为:

在 VisualStudio for Windows 中,作为选项使用:compute_70,sm_70;compute_75,sm_75;