问题标签 [suitesparse]

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 投票
3 回答
380 浏览

macos - Brew + 套件稀疏421

我已经brew在 OSX 上安装并且我已经成功安装了几件东西。

但是,当我尝试安装时suite-sparse421(对版本的硬限制):

我收到以下错误:

运行brew doctor显示没问题(Your system is ready to brew.

运行brew update显示没问题(Already up-to-date.

任何想法?

0 投票
0 回答
342 浏览

c++ - 在 C++ 中创建可以使用 CHOLMOD 求解的密集矩阵

我正在开展一个项目,该项目试图优化求解密集矩阵所需的时间。目前,矩阵是在 C++ 中处理的,目前还没有改变它的计划。查看 CHOLMOD 用户手册和示例文件夹,我似乎找不到任何显示未从文件中读取stdin或从文件中读取矩阵的内容。

有没有办法将现有矩阵(类型double *)转换为cholmod_denseCHOLMOD 可以识别的一种或某种形式,以便我可以解决它?

或者,如果在转换之前我的矩阵必须采用某种形式,那应该采用什么形式,有没有办法在不临时将结果写入文件然后将其读回cholmod_dense矩阵的情况下做到这一点?

0 投票
1 回答
2554 浏览

c++ - 用 C++ 解决稀疏线性系统的最佳方法 - GPU 可能吗?

我目前正在做一个我们需要解决的项目

|Ax - b|^2.

在这种情况下,A是一个非常稀疏的矩阵A'A,每行最多有 5 个非零元素。

我们正在处理图像,其中 NA'ANxN像素数。在这种情况下N = 76800。我们计划去RGB然后维度将是3Nx3N

在 matlab 中求解(A'A)\(A'b)大约需要 0.15 秒,使用双精度。

我现在已经对Eigens稀疏求解器进行了一些实验。我努力了:

和一些不同的顺序。迄今为止最好的是

这需要0.35 - 0.5使用AMDOrdering.

例如,当我使用ConjugateGradient它时,它大致需要6 s0用作初始化。

解决问题的代码是:

这是我第一次在 C++ 及其求解器中使用稀疏矩阵。对于这个项目,速度至关重要,以下0.1 s是最低要求。

我想得到一些反馈,这将是最好的策略。例如,一个应该能够使用SuiteSparseand OpenMPin Eigen。你对这些类型的问题有什么经验?例如,有没有一种提取结构的方法?真的应该conjugateGradient那么慢吗?

编辑:

感谢您提出宝贵意见!今晚我在 Nvidia 上阅读了一些关于 cuSparse 的内容。它似乎能够进行分解甚至解决系统。特别是似乎可以重用模式等等。问题是这能有多快,可能的开销是多少?

鉴于我的矩阵 A 中的数据量与图像中的数据量相同,内存复制不应该是这样的问题。几年前我做了实时 3D 重建软件,然后你复制每一帧的数据,一个慢版本仍然以超过 50 Hz 的速度运行。那么,如果因式分解要快得多,那么它可能会加速吗?特别是该项目的其余部分将在 GPU 上,所以如果可以直接在那里解决它并保留解决方案,我想这不是缺点。

Cuda 领域发生了很多事情,而我并不是最新的。

这是我找到的两个链接:基​​准?, MatlabGPU

0 投票
1 回答
326 浏览

c++ - 如何在 Ubuntu 下在 Eigen3 中使用 CholmodSupport

我做了一个很小的例子:

求解器.h

求解器.cpp

主文件

生成文件

当我执行“make t1”时,一切都很好。但是,当我键入“make t2”时,会出现重新定义错误:

原因似乎是“CholmodSupport.h”中的“long”类型专用模板函数。任何想法来解决这个问题?

0 投票
1 回答
126 浏览

c++ - 索引 CHOLMOD 密集向量数组

我有一个 cholmod_dense 数据结构:

cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);

我想提取这些值并将它们复制到另一个变量。这意味着我需要索引到双数组并复制值。

编译器可以接受,但我遇到了分段错误。或者我认为我应该能够做到:

但是编译器真的不喜欢这个:

根据 CHOLMOD 用户指南:

  1. cholmod dense:一个密集矩阵,可以是实数、复数或 zomplex,以列优先顺序排列。这与 C 中使用的行优先约定不同。密集矩阵 X 包含 • X->x,一个大小为 X->nzmax 的双精度数组,或者是复杂情况的两倍。• X->z,如果X 是zomplex,则为大小为X->nzmax 的双精度数组。

所以我应该能够简单地抓取 ex->x 并将其作为双数组索引,但如果没有分段错误,我就无法这样做。谁能帮我吗?

CHOLMOD 库是用 C 编写的,链接到 CHOLMOD 库的代码(上面显示的代码片段)是 c++。

0 投票
0 回答
248 浏览

c++ - 使用 CMake 链接到使用 NVCC 编译的 TPL

如何正确地将我的项目链接到使用 CUDA 的 TPL (CHOLMOD)?

我想将我的 CMake 项目链接到 CHOLMOD (libcholmod.so)。CHOLMOD 是使用 -GPU_BLAS 单独编译的,它只是一个启用 GPU 功能的标志。CHOLMOD 库附带几个演示,允许用户测试该库是否正常运行并与 GPU 一起正常工作。这些测试都通过了,监控 GPU 活动可以确认这些通过。

现在,我想链接我的 CMake 项目以访问 libcholmod.so。我用一个简单的 FindCholmod.cmake 文件做到了这一点:

FindCublas.cmake (我确保找到在 CHOLMOD 编译期间使用的相同库):

当然,我也有类似的 FindMetis、FindOpenBlas 和 FindLapack 文件。然后我链接所有内容:

使用这种方法,我可以成功地访问我的 CMake 项目中的 CHOLMOD 函数库。事实上,它运行良好,但它只是没有访问 GPU,尽管我遵循 CHOLMOD 用户指南来设置export CHOLMOD_USE_GPU=1和在 cpp 中Common->useGPU=1

我的问题是,如何正确地将我的项目链接到使用 CUDA 的 TPL (CHOLMOD)?除了指向预编译的 libcholmod.so 的链接之外,我的项目不包含 cuda 代码。即使 libcholmod.so 已经使用 NVCC 编译,我是否需要将我的 CMake 编译器设置为 NVCC?

其他 CHOLMOD 详细信息:CHOLMOD 使用一些规则来决定是否应在 GPU 上分解矩阵:CHOLMOD_ND_ROW_LIMIT, CHOLMOD_ND_COL_LIMIT, CHOLMOD_POTRF_LIMIT, CHOLMOD_GPU_SKIP我已确保我的测试矩阵满足这些标准。

0 投票
0 回答
180 浏览

visual-studio - 如何将 UMFpack 稀疏矩阵转换为 Eigen 稀疏矩阵?

我有一个使用 UMFpack 稀疏矩阵求解器编写的代码,但需要将其转换为 Eigen 稀疏矩阵,但我遇到了内存问题。

我有 Ai(行指针)、Ap(列指针)和 Ax(数组)。试图解决 Ax=b。我怎样才能传递这些指针和 Axe 或将它们更改为 Eigen?

0 投票
0 回答
17 浏览

c++ - Superl LU MT 无法得到解决方案 X

我试图在我的项目中实现 SuperLU MT 库,但我不明白它是如何工作的。

文档说驱动程序返回您通过参数给出的密集矩阵“B”中的解决方案,但是当我尝试打印这个矩阵 B 时,我得到一个向量。

我正在从示例中打印文件 pzlinsol.c 中的 B 矩阵。

我已经用 scipy 解决了这个问题,结果不是 Ones 的向量,我还尝试了更多示例但没有。

一定有什么我做错了!

谢谢!

0 投票
1 回答
205 浏览

c++ - 尽管通过了所有演示测试,SuiteSparse CHOLMOD 仍抛出 gpu_memorysize 错误

Ubuntu 16.04LTS;套件稀疏 4.5.5;CUDA 8.0.61(性能升级);英伟达驱动 384.98;

我已将 GPU 加速 CHOLMOD 成功实施到我的代码中,并且可以正常工作几个月。然后最近出乎意料(源代码没有更改),我开始在输出中看到这些错误:

我怀疑第三方库在无人看管的情况下自行更新。但是我对 CHOLMOD/Demo/cholmod_l_demo(导出 CHOLMOD_USE_GPU=1)的测试证明 CHOLMOD 本身工作得非常好,并且正在使用完整的 GPU(使用 nvidia-smi 监控活动)。同样,Cuda/samples 都工作得很好。我已经清除并重新安装了所有内容,包括 Cuda、Nvidia 驱动程序和 SuiteSparse。我尝试了 Cuda 8.0 和 Cuda 9.0 的各种组合。无济于事,Cuda/samples 和 CHOLMOD/Demos 仍然可以正常工作,但我的 CHOLMOD 实现抛出了同样的错误。

我已将问题追溯到 cudaMemGetInfo() 函数。出于某种原因,它在 GPU 上报告 0 个可用字节导致第一个错误 (gpu_memorysize)!其余的错误似乎从第一个级联。CHOLMOD/Demo/cholmod_l_demo 脚本中没有发生此错误,这表明我的实现有问题。然而,我的实施没有任何改变。有谁知道为什么 cudaMemGetInfo() 会报告 0 个可用字节?我认为这个问题的答案将有助于指导我找到解决方案。

我查看了无人值守的升级历史记录,似乎在我开始看到错误时更新了一些 linux-headers 和 nvidia 驱动程序。但我不太确定 nvidia 驱动程序更新是罪魁祸首,因为 CHOLMOD/Demo/cholmod_l_demo 工作得很好。所以我怀疑这可能是一个 linux-headers 问题......

我的实现分布在多个文件中,因此可能值得查看Github 提交。但正如我所提到的,与过去几个月 CHOLMOD gpu 加速工作时相比,我没有更改任何源文件。

任何建议都非常感谢!

0 投票
1 回答
81 浏览

matrix - 秩不足矩阵的压缩列格式示例

这是我第一次处理列压缩存储 (CCS) 格式来存储矩阵。谷歌搜索了一下,如果我是对的,在一个有 n 个非零元素的矩阵中,CCS 如下:

例如,如果

我们得到

我的问题是

我)是我写的正确,还是我误解了什么?

II)如果我想用一些为零的列来表示一个矩阵,例如,

CCS 中 M2 的表示不与 M 的表示相同吗?

谢谢您的帮助!