问题标签 [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.
c++ - 用 C++ 解决稀疏线性系统的最佳方法 - GPU 可能吗?
我目前正在做一个我们需要解决的项目
|Ax - b|^2
.
在这种情况下,A
是一个非常稀疏的矩阵A'A
,每行最多有 5 个非零元素。
我们正在处理图像,其中 NA'A
是NxN
像素数。在这种情况下N = 76800
。我们计划去RGB
然后维度将是3Nx3N
。
在 matlab 中求解(A'A)\(A'b)
大约需要 0.15 秒,使用双精度。
我现在已经对Eigens
稀疏求解器进行了一些实验。我努力了:
和一些不同的顺序。迄今为止最好的是
这需要0.35 - 0.5
使用AMDOrdering
.
例如,当我使用ConjugateGradient
它时,它大致需要6 s
,0
用作初始化。
解决问题的代码是:
这是我第一次在 C++ 及其求解器中使用稀疏矩阵。对于这个项目,速度至关重要,以下0.1 s
是最低要求。
我想得到一些反馈,这将是最好的策略。例如,一个应该能够使用SuiteSparse
and OpenMP
in Eigen
。你对这些类型的问题有什么经验?例如,有没有一种提取结构的方法?真的应该conjugateGradient
那么慢吗?
编辑:
感谢您提出宝贵意见!今晚我在 Nvidia 上阅读了一些关于 cuSparse 的内容。它似乎能够进行分解甚至解决系统。特别是似乎可以重用模式等等。问题是这能有多快,可能的开销是多少?
鉴于我的矩阵 A 中的数据量与图像中的数据量相同,内存复制不应该是这样的问题。几年前我做了实时 3D 重建软件,然后你复制每一帧的数据,一个慢版本仍然以超过 50 Hz 的速度运行。那么,如果因式分解要快得多,那么它可能会加速吗?特别是该项目的其余部分将在 GPU 上,所以如果可以直接在那里解决它并保留解决方案,我想这不是缺点。
Cuda 领域发生了很多事情,而我并不是最新的。
cuda - Fortran 上的 CuSolver 稀疏接口
我正在尝试编写一个程序来将 cusolverSp 连接到 fortran。尽管我对用 C 编写 cuda 并不陌生,但我不确定如何在 fortran 上使用它。
以下是我的代码:
我构建期间的当前错误是
错误 S0188:参数号 # 到 cusolverspcreate/etc:类型不匹配
我不知道如何解决它。该程序是对工作 cusolverDn 的修改,我确信这意味着我犯了很多错误,因为我可以参考的接口示例并不多。
cuda - 使用工具包中提供的库编译我的 CUDA 程序
我编写了简单的 CUDA c++ 程序来模拟二维矩阵上的扩散。当我尝试使用 Toolkit 中提供的一些库时遇到了麻烦。我想用 cuBlas 的东西替换我效率极低的矩阵转置内核,也想用求解线性系统的 cuSolvers 实现替换 implCU。麻烦的是我不知道如何使用这些函数或编译它们。它与 Nvidia 提供的示例代码上的 Makefiles 一起工作。如果有人能帮助我,最好向我展示在编写 .cu 文件时应该如何使用这些功能,我将不胜感激。
这是代码: http: //pastebin.com/UKhJZQBz
我在 Ubuntu 16.04 上,并且按照官方指南中的说明导出了 PATH 变量(因此它们包括 /usr/local/cuda-8.0/bin)。
这是来自的输出nvcc -I /usr/local/cuda-8.0/samples/common/inc/ difusion2d.cu
cuda - 什么版本的 CUDA 引入了 cuSolverRF?
我可以使用 CUDA 7.5 的机器,但我认为它缺少 cuSolverRF 库。
当前标记为版本 DU-06709-001_v8.0 的文档说“此外,cuSolver 提供了一个新的重构库,可用于解决具有共享稀疏模式的矩阵序列”大概是 cuSolverRF 库,表明它是在 8.0 中引入的,但我找不到任何确认这一点的发行说明。
cuda - 正确使用 cudaFortran cuSolver 函数
我目前正在将一些 Fortran 代码迁移到 cudaFortran。具体来说,该任务涉及对海量矩阵进行谱分析,以便将它们对角化。这是我到目前为止编写的代码
编译和mem-check输出如下:
看起来我实际上并没有cusolverDnDsyevd
正确调用函数,很可能我没有使用正确类型的变量。但是由于我在编程方面是半文盲,并且我必须遵循的唯一示例是用 C 编写的(使用那些花哨的 void** 东西)我不知道什么是正确的。
编辑:完整输出deviceQuery
tensorflow - 你可以在 tensorflow 中使用来自 cuSOLVER 的 GPU QR 分解算法吗?
我可以看到它在https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/cuda_solvers.h (Geqrf) 中被引用,但是https://github.com/tensorflow上的 tensorflow QR op /tensorflow/blob/master/tensorflow/core/kernels/qr_op_float.cc未注册用于 GPU 使用。我可以使用 Geqrf 以某种方式制作自己的操作,还是有其他方法?
cuda - cuSolverDN 或其他 CUDA 库是否有用于密集矩阵的批处理版本的 QR 分解来求解 A*x = b?
我正在尝试解决 A*x = b 其中 A 具有复杂值且密集的问题。
我使用 cuSolverDN 库中的 cusolverDnCgeqrf() 方法对一组线性方程组进行 QR 分解。但是,我想多次这样做以加快处理速度。
这种方法有“批处理”版本吗?或者我可以使用另一个 CUDA 库吗?
matrix - cusparseSdense2csr 转换
我正在尝试使用 cusparseSdense2csr API 将密集矩阵转换为稀疏矩阵,密集矩阵如下:
预期的结果稀疏矩阵应该是:
但我得到的输出是
为什么会这样?背后的原因是什么?
cuda - cuSOLVER 自动并行计算许多矩阵?
我必须进行相同的计算(例如,获取 的特征值A1, A2, ...
)on many(>10^15)
矩阵,所以我希望尽可能多地使用线程。
但我找不到说明线程数的 cuBLAS 或 cuSOLVER 代码。如果我使用 for 循环和 cuSOLVER 函数编写代码,cuSOLVER 会自动分配资源和并行计算吗?
或者是否有任何 cuSOLVER 或 cuBLAS API 可以控制线程数和并行化函数?……
matrix - What is the most efficient way to compute the inverse of a general matrix using cuSolver?
I have in mind to to use getrf
and getrs
from the cuSolver package and to solve AB=X
with B=I
.
Is this the most best way to solve this problem?
If so, what is the best way to create the col-major identity matrix
B
in device memory? It can be done trivially using afor
loop but this would 1. take up a lot of memory and 2. be quite slow. Is there a faster way?
Note that cuSolver does not provide getri
unfortunately. Therefore I must to use getrs
.