标题几乎说明了一切,但我在网上找不到任何有关此内容的文档。我有兴趣实现一些面向图形的算法,并且我的连接矩阵变得相当大。有没有办法使用 cuSPARSE 消除连接矩阵中的大量冗余? (因为每个顶点实际上最多连接到 5 个其他顶点)。
我已经实现了图形分区来分段并减小连接矩阵的大小,但这给我留下了大约 256 x 256 的矩阵,其中大约一半是零。 (例如:无连接)
最佳答案
nvGRAPH
是 a 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_Pagerank
、nvgraph_SemiRingSpMV
和 nvgraph_SSSP
(单源最短路径)。
NVIDIA 的正常做法是在工具包进入生产版本状态时公开这些文档(例如 here )。
编辑:随着 CUDA 8 的发布,上面引用的这些文档现在是 publicly available .
关于c - 在nvGraph中使用cuSPARSE作为连接矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38112325/