问题标签 [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.
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
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的功能版本:
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 )使用了大约相同的内存空间?
下面是我的代码:
cuda - 求解 AX=B 的线性方程
我目前求解 Ax=b 方程两次。
其中 A 是稀疏矩阵 NxN
x, b 是大小为 N 的向量。(我有 b1 和 b2)
我想通过使用 cusparse 函数一次性解决这两个问题来减少时间。
所以我想从我拥有的 2 个 b 构建一个大小为 Nx2 的矩阵,并用 A 求解它,就像方程 AX=B 可以做的那样。
- 理论上是对的吗?
- 我应该使用哪个 cusparse 函数?
请注意我正在使用稀疏矩阵而不是密集矩阵。
谢谢!
c++ - 尖点::extract_diagonal 未找到
我将 CUSP 用于我的部分 GPU 加速代码。我需要从尖点矩阵 C 中提取对角线。在下面的代码中应该将其放入对角线中。
但是在编译时我得到“尖角”没有成员“extract_diagonal”
如果我有:
如示例中所示,我无法找到 format_utils.h。如果我插入详细信息以完成标题的路径,如下所示:
编译能够找到 format_utils.h 但仍然说没有“extract_diagonal”
我正在查看的示例是:
版本如下:
我是否缺少一些包含或其他?作为最后的手段,我将所有标题都包含在主 cusp 目录中,但无济于事。
任何建议都会很棒。
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 a
to 。
我得到了以下答案。
我得到的向量 y 很奇怪,我认为正确的答案 y 应该是:
所以我不确定combine和reduce的这种替换是否可以适应其他稀疏矩阵格式,比如coo。或者我上面写的代码调用乘法可能是不正确的。你能给我一些帮助吗?任何信息都会有所帮助。
谢谢!
cuda - 将稀疏矩阵从 Eigen::SparseMatrix 转换为 Cusp::hyb_matrix
我正在寻找一种转换方式
Eigen::SparseMatrix< float> <-> cusp::hyb_matrix< int, float, cusp::host_memory>
来回。
Eigen 矩阵是先前计算的结果,我需要一个 cusp::hyb_matrix 以便稍后使用 GPU 进行共轭梯度计算。
谢谢。
c++11 - 在 CUDA 函数中使用 CUSP 矩阵?
我想编写一个内核函数,将 2 个 CUSP 矩阵 A 和 B 作为输入,
然后将数据并行填充到 B 中。
出现以下错误:
我该怎么做?