使用 nvGraph 中的 cuSPARSE 作为连接矩阵?

Using cuSPARSE in nvGraph as the connection matrix?

标题几乎说明了一切,我在网上找不到任何关于此的文档。我有兴趣实现一些面向图形的算法,并且我的连接矩阵变得相当庞大。有没有办法使用 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 工具包和选项而有所不同您 select 在安装过程中。

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

事实上, 指定图形拓扑的方法(我认为这等同于您的 "connection matrix")是通过 compressed sparse method。您使用的实际方法(CSC 或 CSR)在 nvGRAPH configuration/initialization 期间指定,使用 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);

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

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

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