问题标签 [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.
cuda - 如何批量处理 cusolver cholesky 逆(potri)?
与 CUBLAS 不同,Cusolver 具有 Cholesky 分解。我看到cusolverDnDpotrsBatched
and cusolverDnDpotrfBatched
,但不幸的是我似乎无法cusolverDnDpotriBatched
在文档中找到。
有没有什么方法可以在没有大量开销的情况下进行批处理cusolverDnDpotri
,或者有什么方法可以做与 API 所做的等效的事情?
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添加我的代码...
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?
eigenvalue - 输出结果不匹配,LAPACKE_zheev() vs cusolverDnZheevd()
我正在将代码从遗留 cblas/lapacke 转换为 cudaBLAS/cudaSOLVER 并遇到一些问题。我制作了一个测试程序来深入了解这一点。附件是我正在使用的代码:
可以使用#define __CUDA 编译程序以获得cuda 构建或不使用#define __CUDA 获得非cuda 构建。 non-cuda build 给我以下输出:
cuda build 给我以下输出:
任何人都可以阐明这个问题,为什么我主要是特征向量得到不同的结果?特征值顺序也似乎相反。这是为什么?
cuda - 对 `cusolverDn` 函数的未定义引用
我需要并行计算一个大矩阵的特征值。为此,我使用 cuSolver。为了测试它是如何工作的,我从文档中获取了代码:
但是在编译之后我得到了下一个错误undefined reference to `cusolverDnCreate'
,,和undefined reference to cusolverDnDsyevd_bufferSize
,但是所有这些函数都存在于 <cusolverDn.h> 中。 undefined reference to cusolverDnDsyevd
undefined reference to `cusolverDnDestroy
最奇怪的是,当我尝试按照那里所说的那样编译这个文件时:undefined reference to cusolverDn。相反,我在上面列出了两个第一个错误(其他错误相同)我得到了新错误:identifier "cusolverEigMode_t" is undefined
和identifier "CUSOLVER_EIG_MODE_VECTOR" is undefined
.
我尝试解决它几天,如果你能帮助我,我将不胜感激!
matrix - 如何并行查找大矩阵的特征值?
我需要尽可能快地在 CUDA 上找到 1000 和更大的矩阵的特征值。我找到了 cusolver 库并从文档中运行代码:
它工作得非常快,但问题是我无法计算大于 25*25 的矩阵的特征值(当我尝试将 m 的值设置为大于 25 时,变量 m 负责矩阵 0 的大小我得到:Segmentation fault (core dumped)
。我应该更改库或使用 cusolver?
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
c++ - cuSOLVER - cusolverSpScsrlsvqr 的设备版本比主机版本慢得多
我有一些规则构建的稀疏 3 对角 NxN 矩阵A
,并且想要解决系统问题Ax=b
。为此,我使用cusolverSpScsrlsvqr()
来自 cuSolverSp 模块。设备版本比cusolverSpScsrlsvqrHost()
大 N 慢很多倍可以吗?例如,对于 N=2^14,设备时间为 174.1 毫秒,主机时间为 3.5 毫秒。我在 RTX 2060 上。
代码:
c++ - CUDA - CUBLAS:解决许多(3x3)密集线性系统的问题
我正在尝试使用 CUDA 10.1 解决大约 1200000 个线性系统(3x3,Ax=B),特别是使用 CUBLAS 库。我从这篇(有用的!)帖子中得到了启发,并在统一内存版本中重新编写了建议的代码。该算法首先使用 cublasgetrfBatched() 执行 LU 分解,然后连续两次调用 cublastrsm() 求解上三角线性系统或下三角线性系统。代码附在下面。它最多可以正确处理大约 10000 个矩阵,在这种情况下,执行 LU 分解需要约 570 毫秒(在 NVIDIA GeForce 930MX 上),求解系统需要约 311 毫秒。
我的问题/问题是:
过载问题:为超过 10k 的矩阵分配内存时会崩溃。为什么?如何改进我的代码以解决整批 120 万个矩阵?
时间问题:我的目标是在不到 1 秒的时间内解决所有这些系统。我目前是否遵循正确的方法?否则有什么建议吗?
是否有可能和/或有用,如果是的话,如何使用 10k 矩阵批次的“流”?
代码:
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;