c - 在nvGraph中使用cuSPARSE作为连接矩阵?

标签 c cuda graph-theory scientific-computing

标题几乎说明了一切,但我在网上找不到任何有关此内容的文档。我有兴趣实现一些面向图形的算法,并且我的连接矩阵变得相当大。有没有办法使用 cuSPARSE 消除连接矩阵中的大量冗余? (因为每个顶点实际上最多连接到 5 个其他顶点)。

我已经实现了图形分区来分段并减小连接矩阵的大小,但这给我留下了大约 256 x 256 的矩阵,其中大约一半是零。 (例如:无连接)

最佳答案

nvGRAPHa new CUDA library CUDA 8RC 工具包中提供。由于 CUDA 8RC 是候选版本,而不是生产版本,因此它的文档仅以 PDF 形式存在,并未正式在线,并且这些 PDF 文档是在安装 CUDA 8 RC 工具包时安装的。

与这个新库相关的特定文档是nvGRAPH_Library.pdf,其位置将根据您是在 Windows 还是 Linux 上安装 CUDA 8RC 工具包以及您在安装过程中选择的选项而有所不同流程。

Is there a way to use cuSPARSE to remove the large amounts of redundancy in my connection matrix?

事实上,指定图形拓扑的唯一方法(我认为这相当于你的“连接矩阵”)是通过 compressed sparse method 。您使用的实际方法(CSC 或 CSR)是在 nvGRAPH 配置/初始化期间使用 nvgraphTopologyType_t 枚举指定的:

2.2. nvGRAPH graph topology types

Graphs toplogy types. Defines storage format. Some algorithms can work only with
specific topology types, see algorithms descriptions for the list of supported topologies.

typedef enum
{
NVGRAPH_CSR_32 = 0,
NVGRAPH_CSC_32 = 1,
} nvgraphTopologyType_t;

Topology types

NVGRAPH_CSR_32 Compressed Sparse Rows format (row major format). Used
in SrSPMV algorithm. Use nvgraphCSRTopologyX_t topology
structure for this format.

NVGRAPH_CSC_32 Compressed Sparse Column format (column major format).
Used in SSSP, WidestPath and Pagerank algorithms. Use
nvgraphCSCTopologyX_t topology structure for this format.

此特定枚举类型通常会在初始图形配置期间传递给 nvGRAPH:

// Set graph connectivity and properties (transfers)
nvgraphSetGraphStructure(handle, graph, (void*)CSC_input,NVGRAPH_CSC_32);

从20开始第3章的nvGRAPH文档PDF文档中给出了更完整的代码示例/示例,并且CUDA 8RC中提供了新的nvGRAPH示例代码示例代码安装,例如 nvgraph_Pageranknvgraph_SemiRingSpMVnvgraph_SSSP(单源最短路径)。

NVIDIA 的正常做法是在工具包进入生产版本状态时公开这些文档(例如 here )。

编辑:随着 CUDA 8 的发布,上面引用的这些文档现在是 publicly available .

关于c - 在nvGraph中使用cuSPARSE作为连接矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112325/

相关文章:

c - 在 C 中将非常大的数字存储在整数中

c - 如何在 GDB 中将二进制值(1010)打印成十进制值(10)?

c - 从不兼容的指针类型传递 arg2 'listFind'

javascript - 如何检测 javascript 元素层次结构中的循环

java - 根据 char[][] 数组提供的规则创建邻接矩阵

c - 无法理解这个函数的返回值

c++ - 在cuda中分配结构数组后变量丢失

cuda - 查询CUDA设备是否支持32位或64位寻址

machine-learning - 使用内置显卡,没有NVIDIA显卡,可以使用CUDA和Caffe库吗?

python - 查找有向图中包含指定节点的所有长度为 n 的循环的最快方法