nvGRAPH原理概述
nvGRAPH原理概述
nvGRAPH的API參考分析。
簡(jiǎn)介
數(shù)據(jù)分析是高性能計(jì)算的不斷增長(zhǎng)的應(yīng)用。許多高級(jí)數(shù)據(jù)分析問題可以稱為圖形問題。反過來,當(dāng)今許多常見的圖形問題也可以稱為稀疏線性代數(shù)。這是NVIDIA?CUDA?8.0中新增的nvGRAPH的動(dòng)機(jī),該功能利用GPU的線性代數(shù)功能來處理最大的圖形分析和大數(shù)據(jù)分析問題。
此版本提供了圖形構(gòu)造和操作原語(yǔ),以及針對(duì)GPU優(yōu)化的一組有用的圖形算法。核心功能是SPMV(稀疏矩陣矢量乘積),該模型使用半環(huán)模型并針對(duì)任何稀疏模式自動(dòng)進(jìn)行負(fù)載平衡。有關(guān)半環(huán)及其用法的更多信息,推薦Jeremy Kepner和John Gilbert所著的“線性代數(shù)語(yǔ)言中的圖形算法”一書。
要使用nvGRAPH,應(yīng)該確保nvGRAPH庫(kù)在環(huán)境中(Windows上為PATH,Linux上為L(zhǎng)D_LIBRARY_PATH),“#include nvgraph.h”指向引用nvGRAPH API的源文件,并在命令上使用-lnvgraph鏈接代碼行,或?qū)ibnvgraph添加到的庫(kù)依賴項(xiàng)中。已經(jīng)在Linux,Visual Studio 2012和Windows的Visual Studio 2014上使用GCC 4.8和更高版本測(cè)試了nvGRAPH。
使用nvGRAPH的典型工作流程。首先調(diào)用nvgraphCreate()初始化庫(kù)。接下來,用戶可以繼續(xù)通過nvGRAPH的API將圖形數(shù)據(jù)上傳到庫(kù)中;如果設(shè)備內(nèi)存中已經(jīng)加載了圖形,則只需要一個(gè)指向圖形數(shù)據(jù)數(shù)組的指針即可。可以使用nvgraphCreateGraphDescr(),使用CSR(壓縮的稀疏行)格式和CSC(壓縮的列存儲(chǔ))格式上載圖形。這將為圖形對(duì)象創(chuàng)建一個(gè)不透明的句柄,稱為“圖形描述符”,該句柄表示圖形拓?fù)浼捌鋽?shù)據(jù)。可以分別使用nvgraphSetVertexData()和nvgraphSetEdgeData()將圖形數(shù)據(jù)附加到圖形的頂點(diǎn)和/或邊緣。數(shù)據(jù)的多個(gè)值可以同時(shí)存在于每個(gè)邊或頂點(diǎn)上,每個(gè)值都由索引訪問數(shù)據(jù)集數(shù)組。然后,用戶可以對(duì)數(shù)據(jù)執(zhí)行圖形算法,從數(shù)據(jù)中提取子圖,或使用nvGRAPH API重新格式化數(shù)據(jù)。用戶可以將結(jié)果下載回主機(jī),也可以將結(jié)果復(fù)制到設(shè)備上的其它位置,完成所有計(jì)算后,用戶應(yīng)調(diào)用nvgraphDestroy()釋放nvGRAPH使用的資源。從數(shù)據(jù)中提取子圖,或使用nvGRAPH API重新格式化數(shù)據(jù)。用戶可以將結(jié)果下載回主機(jī),也可以將結(jié)果復(fù)制到設(shè)備上的其它位置,完成所有計(jì)算后,用戶應(yīng)調(diào)用nvgraphDestroy()釋放nvGRAPH使用的資源。從數(shù)據(jù)中提取子圖,或使用nvGRAPH API重新格式化數(shù)據(jù)。用戶可以將結(jié)果下載回主機(jī),也可以將結(jié)果復(fù)制到設(shè)備上的其它位置,完成所有計(jì)算后,用戶應(yīng)調(diào)用nvgraphDestroy()釋放nvGRAPH使用的資源。
nvGRAPH取決于僅在CUDA功能3.0和更高版本的體系結(jié)構(gòu)中提供的功能。這意味著nvGRAPH將僅在開普勒一代或更新的顯卡上運(yùn)行。選擇該選項(xiàng)是為了提供最佳性能。
建議用戶先檢查提供的示例代碼,然后從那里進(jìn)行改編以供自己使用。
總結(jié)
以上是生活随笔為你收集整理的nvGRAPH原理概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代码生成codegen
- 下一篇: nvGRAPH API参考分析(一)