问题标签 [cusp-library]

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

c++ - 从传递的 FORTRAN 数组生成 CUSP coo_matrix

我正在将 CUSP 求解器集成到现有的 FORTRAN 代码中。作为第一步,我只是尝试从 FORTRAN 传入一对整数数组和一个浮点数(FORTRAN 中的实数 *4),这将用于构造然后打印 COO 格式的 CUSP 矩阵。

到目前为止,我已经能够关注这个线程并得到所有东西来编译和链接:Unresolved references using IFORT with nvcc and CUSP

不幸的是,该程序显然将垃圾发送到 CUSP 矩阵并最终崩溃并出现以下错误:

cuda 和 fortran 源代码如下:

cusp_runner.cu

fort_cusp_test.f90

如果你想自己尝试,这里是我的(相当不优雅的)makefile:

当然,库路径需要根据需要进行更改。

谁能指出我正确的方向,以了解如何从 fortran 代码中正确传递所需的数组?


删除接口块并在 C 函数开头添加打印语句后,我可以看到数组正在正确传递,但是 n 和 nnz 导致了问题。我得到以下输出:

fort_cusp_test

cusp_runner.cu

0 投票
1 回答
454 浏览

c++ - 如何从传递的数组中正确构造 CUSP coo 矩阵

我正在尝试将 CUSP 集成到现有的 Fortran 代码中。现在我只是想获得推力/尖顶的基本设置,以从 Fortran 输入数组并使用它们来构造尖顶矩阵(现在是 coo 格式)。由于这个线程,我已经能够获得像 C 例程这样的包装器来编译到库中并将其与 Fortran 代码链接: unresolved-references-using-ifort-with-nvcc-and-cusp

由于前一个线程的帮助,我可以验证 Fortran 是否正确输入数组指针:Generating CUSP coo_matrix from passed FORTRAN arrays

不幸的是,我仍然无法让 CUSP 使用这些来生成和打印矩阵。代码和输出如下所示:

输出

fort_cusp_test.f90

cusp_runner.cu

生成文件


cusp_runner.cu的功能版本:

0 投票
1 回答
252 浏览

memory - cuda cusp 线性求解器中的内存使用

我正在使用cusp::bicgstab求解线性系统Ax=b,其中A是 MxNxP 网格上的 3D Poisson,x是未知数,b是 RHS。我有一个K40m Tesla,它有 12GB 内存。

我用M=2000, N=2000, P=20(8000 万未知数)进行了测试,变量类型是double;因此使用的总内存(用于A、x、b和其他)约为5.5GB。代码工作正常。

然后我将M或者N的值增加到2500(使用的内存还远小于12GB),程序遇到如下错误:

在抛出 'thrust::system::detail::bad_alloc' 的实例后调用终止

what(): std::bad_alloc: out of memory
Aborted (core dumped)

我看到错误是“设备内存不足”。因此,我想知道cusp库中的内存管理。在求解系统的迭代过程中,它是否为额外变量(用于A,x,b )使用了大约相同的内存空间?

下面是我的代码:

0 投票
1 回答
1048 浏览

cuda - 求解 AX=B 的线性方程

我目前求解 Ax=b 方程两次。

其中 A 是稀疏矩阵 NxN

x, b 是大小为 N 的向量。(我有 b1 和 b2)

我想通过使用 cusparse 函数一次性解决这两个问题来减少时间。

所以我想从我拥有的 2 个 b 构建一个大小为 Nx2 的矩阵,并用 A 求解它,就像方程 AX=B 可以做的那样。

  1. 理论上是对的吗?
  2. 我应该使用哪个 cusparse 函数?

请注意我正在使用稀疏矩阵而不是密集矩阵。

谢谢!

0 投票
1 回答
67 浏览

c++ - 尖点::extract_diagonal 未找到

我将 CUSP 用于我的部分 GPU 加速代码。我需要从尖点矩阵 C 中提取对角线。在下面的代码中应该将其放入对角线中。

但是在编译时我得到“尖角”没有成员“extract_diagonal”

如果我有:

如示例中所示,我无法找到 format_utils.h。如果我插入详细信息以完成标题的路径,如下所示:

编译能够找到 format_utils.h 但仍然说没有“extract_diagonal”

我正在查看的示例是:

版本如下:

我是否缺少一些包含或其他?作为最后的手段,我将所有标题都包含在主 cusp 目录中,但无济于事。

任何建议都会很棒。

0 投票
1 回答
163 浏览

cuda - Cusp中的真实缩放稀疏矩阵向量乘法?

在 cusp 中,有一个乘法来计算 spmv(稀疏矩阵向量乘法),它需要一个 reduce 和一个 combine:

从界面看来,对于任何矩阵/向量乘法,自定义合并和归约都应该是可能的。我认为 cusp 支持使用在推力/功能.h 中定义的其他组合和减少函数,除了乘法和加法来计算 spmv。例如,我可以使用thrust::plus 来代替原来的combine 函数(即乘法)吗?而且我猜,这个缩放的 spmv 也支持 coo、csr、dia、hyb 格式的稀疏矩阵。

但是,当我在矩阵 A 为 coo 格式的 a.cu 中测试以下示例时,我得到了错误的答案。它使用加号运算符进行组合。我用 cmd 编译它:nvcc a.cu -o ato 。

我得到了以下答案。

我得到的向量 y 很奇怪,我认为正确的答案 y 应该是:

所以我不确定combine和reduce的这种替换是否可以适应其他稀疏矩阵格式,比如coo。或者我上面写的代码调用乘法可能是不正确的。你能给我一些帮助吗?任何信息都会有所帮助。

谢谢!

0 投票
1 回答
390 浏览

cuda - 将稀疏矩阵从 Eigen::SparseMatrix 转换为 Cusp::hyb_matrix

我正在寻找一种转换方式

Eigen::SparseMatrix< float> <-> cusp::hyb_matrix< int, float, cusp::host_memory>

来回。

Eigen 矩阵是先前计算的结果,我需要一个 cusp::hyb_matrix 以便稍后使用 GPU 进行共轭梯度计算。

谢谢。

0 投票
1 回答
118 浏览

c++11 - 在 CUDA 函数中使用 CUSP 矩阵?

我想编写一个内核函数,将 2 个 CUSP 矩阵 A 和 B 作为输入,
然后将数据并行填充到 B 中。

出现以下错误:

我该怎么做?