标签: cusolver

用CUDA求解密集线性系统AX = B.

我可以使用新的cuSOLVER库(CUDA 7)来解决表单的线性系统

AX = B 
Run Code Online (Sandbox Code Playgroud)

在那里A,X并且BNxN密集矩阵?

cuda gpu cusolver

6
推荐指数
1
解决办法
9138
查看次数

对于各种b,稀疏带状Ax = b的批量CUDA解决方案

我有一个稀疏的带状矩阵A,我想(直接)解决Ax = b.我有大约500个向量b,所以我想解决相应的500 x.我是CUDA的新手,所以我对我有哪些选择感到困惑.

cuSOLVER有一个批量直接求解器cuSolverSP,用于在这里使用QR的稀疏A_i x_i = b_i .(由于A的条件很好,我对LU也没问题.)但是,据我所知,我无法利用我所有的A_i都是一样的事实.

另一种选择是首先确定CPU或GPU上的稀疏LU(QR)因子分解,然后并行执行GPU上的后置替换(分别为backsub和matrix mult)吗?如果cusolverSp <t> csrlsvlu()用于一个b_i,是否有一种标准方法可以为多个b_i批量执行此操作?

最后,由于我对此没有直觉,考虑到必要的开销,我是否应该期望在这些选项中的GPU加速?x的长度约为10000-100000.谢谢.

c++ cuda sparse-matrix matrix-factorization cusolver

6
推荐指数
1
解决办法
708
查看次数

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

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

|Ax - b|^2.

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

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

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

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

SimplicialLLT
SimplicialLDLT
SparseQR
ConjugateGradient
Run Code Online (Sandbox Code Playgroud)

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

SimplicialLDLT
Run Code Online (Sandbox Code Playgroud)

这需要0.35 - 0.5使用AMDOrdering.

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

解决问题的代码是:

    A_tot.makeCompressed();
     // Create solver
    Eigen::SimplicialLDLT<Eigen::SparseMatrix<float>, Eigen::Lower, Eigen::AMDOrdering<int> > solver;
    // Eigen::ConjugateGradient<Eigen::SparseMatrix<float>, Eigen::Lower> cg;
    solver.analyzePattern(A_tot);
    t1 = omp_get_wtime();
    solver.compute(A_tot);
    if (solver.info() != Eigen::Success) …
Run Code Online (Sandbox Code Playgroud)

c++ sparse-matrix eigen cusolver suitesparse

5
推荐指数
1
解决办法
2283
查看次数

使用CUDA进行Cholesky分解

我正在尝试使用cuSOLVER库实现Cholesky分解。我是一名初学者CUDA程序员,并且我一直指定块大小和网格大小,但是我无法找出程序员如何使用cuSOLVER函数显式设置它。

这是文档:http : //docs.nvidia.com/cuda/cusolver/index.html#introduction

QR分解是使用cuSOLVER库实现的(请参见此处的示例:http ://docs.nvidia.com/cuda/cusolver/index.html#ormqr-example1 ),即使在此处也未设置上述两个参数。

总结一下,我有以下问题

  • 如何使用cuSOLVER库设置参数:块大小和网格大小?
  • NVIDIA文档中提到的QR示例代码如何处理?

cuda gpu nvidia gpu-programming cusolver

3
推荐指数
1
解决办法
3614
查看次数

对 cusolverDn 的未定义引用

我正在尝试运行 cuda 7.0 中提供的 cuSolver 库。我在使用 cuSolver 库时遇到问题,解决起来一定非常简单,但我在这里寻求一些帮助。

我看了很多张贴的例子,我特别选择了 JackOLantern 中的这个:

使用 CUDA 并行实现多个 SVD

我刚刚将其缩减为 kernel_0.cu:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<stdio.h>
#include<assert.h> 
#include<math.h>

#include <cusolverDn.h>
#include <cuda_runtime_api.h>

#include "Utilities.cuh"

/********/
/* MAIN */
/********/
int main(){

// --- gesvd only supports Nrows >= Ncols
// --- column major memory ordering

// --- cuSOLVE input/output parameters/arrays
int *devInfo;           gpuErrchk(cudaMalloc(&devInfo,          sizeof(int)));

// --- CUDA solver initialization
cusolverDnHandle_t solver_handle;
cusolverDnCreate(&solver_handle);

cusolverDnDestroy(solver_handle);

return 0;

}
Run Code Online (Sandbox Code Playgroud)

我使用与 JackOlantern 相同的 Utilities.cuh 和 …

cuda cusolver

2
推荐指数
1
解决办法
3371
查看次数