首页
/ Gunrock:GPU图分析的强大工具

Gunrock:GPU图分析的强大工具

2024-09-18 13:44:39作者:宣利权Counsellor

项目介绍

Gunrock 是一个专为GPU设计的CUDA库,专注于图处理。它采用了一种高层次批量同步/异步数据中心抽象的方法,特别关注顶点或边前沿的操作。Gunrock通过结合高性能GPU计算原语和优化策略(特别是在细粒度负载均衡方面),以及一种允许程序员快速开发新图原语的高层次编程模型,实现了性能和表达性之间的平衡。这使得开发者能够轻松地从单个GPU扩展到多个GPU,而无需深入了解GPU编程。

项目技术分析

Gunrock的核心技术在于其高效的GPU计算原语和优化策略。它利用CUDA的并行计算能力,通过高层次的编程模型简化了图算法的实现。Gunrock支持多种图算法,如广度优先搜索(BFS)、单源最短路径(SSSP)等,并且提供了丰富的示例和文档,帮助开发者快速上手。

Gunrock的架构设计灵活,支持从单个GPU到多个GPU的扩展,适用于不同的计算场景。其自动化的依赖管理(如NVIDIA/thrustNVIDIA/cub)进一步简化了项目的构建和维护。

项目及技术应用场景

Gunrock适用于需要高性能图处理的多种场景,包括但不限于:

  • 社交网络分析:快速分析大规模社交网络中的关系和影响力。
  • 生物信息学:处理复杂的生物网络,如蛋白质相互作用网络。
  • 推荐系统:通过图算法优化推荐系统的准确性和效率。
  • 金融风控:分析交易网络中的异常行为和潜在风险。

项目特点

  1. 高性能:利用CUDA的并行计算能力,Gunrock在GPU上实现了高效的图处理。
  2. 易用性:高层次的编程模型和丰富的文档使得开发者能够快速上手,无需深入了解GPU编程。
  3. 灵活性:支持从单个GPU到多个GPU的扩展,适用于不同的计算需求。
  4. 自动化依赖管理:自动获取和配置外部依赖,简化了项目的构建和维护。
  5. 丰富的示例和文档:提供了多种图算法的示例和详细的文档,帮助开发者快速理解和使用Gunrock。

快速开始

在开始构建Gunrock之前,请确保您的系统上已安装CUDA Toolkit(推荐版本为v11.5.1或更高)。其他外部依赖(如NVIDIA/thrustNVIDIA/cub)将通过cmake自动获取。

git clone https://github.com/gunrock/gunrock.git
cd gunrock
mkdir build && cd build
cmake .. 
make sssp # 或者使用 make -j$(nproc) 编译所有算法
bin/sssp ../datasets/chesapeake/chesapeake.mtx

实现图算法

Gunrock提供了详细的文档,帮助开发者理解和实现新的图算法。以下是一个简单的示例,展示了如何在GPU上使用Gunrock的数据中心、批量同步编程模型实现广度优先搜索(BFS)。

void prepare_frontier(frontier_t* f,
                      gcuda::multi_context_t& context) override {
  auto P = this->get_problem();
  f->push_back(P->param.single_source);
}

void loop(gcuda::multi_context_t& context) override {
  auto E = this->get_enactor();
  auto P = this->get_problem();
  auto G = P->get_graph();

  auto single_source = P->param.single_source;
  auto distances = P->result.distances;
  auto visited = P->visited.data().get();
  auto iteration = this->iteration;

  auto search = [=] __host__ __device__(
                      vertex_t const& source,
                      vertex_t const& neighbor,
                      edge_t const& edge,
                      weight_t const& weight) -> bool {
    auto old_distance =
      math::atomic::min(&distances[neighbor], iteration + 1);
    return (iteration + 1 < old_distance);
  };

  operators::advance::execute<operators::load_balance_t::block_mapped>(
    G, E, search, context);
}

引用Gunrock

感谢您对Gunrock的关注和支持。如果您在研究中使用了Gunrock,请引用以下文献:

@article{Wang:2017:GGG,
  author =	 {Yangzihao Wang and Yuechao Pan and Andrew Davidson
                  and Yuduo Wu and Carl Yang and Leyuan Wang and
                  Muhammad Osama and Chenshan Yuan and Weitang Liu and
                  Andy T. Riffel and John D. Owens},
  title =	 {{G}unrock: {GPU} Graph Analytics},
  journal =	 {ACM Transactions on Parallel Computing},
  year =	 2017,
  volume =	 4,
  number =	 1,
  month =	 aug,
  pages =	 {3:1--3:49},
  doi =		 {10.1145/3108140},
  ee =		 {http://arxiv.org/abs/1701.01170},
  acmauthorize = {https://dl.acm.org/doi/10.1145/3108140?cid=81100458295},
  url =		 {http://escholarship.org/uc/item/9gj6r1dj},
  code =	 {https://github.com/gunrock/gunrock},
  ucdcite =	 {a115},
}

版权与许可

Gunrock由加利福尼亚大学董事会所有。该库、示例和所有源代码均在Apache 2.0许可下发布。

热门项目推荐
相关项目推荐

项目优选

收起
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
33
24
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
830
0
redis-sdkredis-sdk
仓颉语言实现的Redis客户端SDK。已适配仓颉0.53.4 Beta版本。接口设计兼容jedis接口语义,支持RESP2和RESP3协议,支持发布订阅模式,支持哨兵模式和集群模式。
Cangjie
376
32
advanced-javaadvanced-java
Advanced-Java是一个Java进阶教程,适合用于学习Java高级特性和编程技巧。特点:内容深入、实例丰富、适合进阶学习。
JavaScript
75.92 K
19.09 K
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
147
26
Yi-CoderYi-Coder
Yi Coder 编程模型,小而强大的编程助手
HTML
57
7
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
19
2
杨帆测试平台杨帆测试平台
扬帆测试平台是一款高效、可靠的自动化测试平台,旨在帮助团队提升测试效率、降低测试成本。该平台包括用例管理、定时任务、执行记录等功能模块,支持多种类型的测试用例,目前支持API(http和grpc协议)、性能、CI调用等功能,并且可定制化,灵活满足不同场景的需求。 其中,支持批量执行、并发执行等高级功能。通过用例设置,可以设置用例的基本信息、运行配置、环境变量等,灵活控制用例的执行。
JavaScript
9
1
qwerty-learnerqwerty-learner
为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers
TSX
15.62 K
1.45 K
anqicmsanqicms
AnQiCMS 是一款基于Go语言开发,具备高安全性、高性能和易扩展性的企业级内容管理系统。它支持多站点、多语言管理,能够满足全球化跨境运营需求。AnQiCMS 提供灵活的内容发布和模板管理功能,同时,系统内置丰富的利于SEO操作的功能,帮助企业简化运营和内容管理流程。AnQiCMS 将成为您建站的理想选择,在不断变化的市场中保持竞争力。
Go
78
5