现实生活中的 CUDA 编程 Part0 概述

CUDA Cube (source: Nvidia)

这一系列的帖子旨在描述我最近从事的一个 project。 除其他事项外,该 project 必须使用 CUDA 来加速执行的计算。 Project  目的是用C++实现各种 graph features 的计算,以前都是用python写的。

对于那些想跳过我的漫无边际而直接了解系列内容的人,请查看 part 1。

虽然不是这篇 post 的主题,但值得了解这个 project 背后的动机。 Graph features 是分析图格式数据并能够对其执行深度学习操作的重要部分。 涉及 large graph 的主要限制因素是计算其各种 features 所需的时间。 为了提高 features 的性能,提出了C++实现。

不幸的是,这还不够。 对于某些 features,即使使用 C++ 代码,计算不太大(比如 10,000 个节点)的图的 feature  所花费的时间也是不切实际的。 因此,我们必须使用更高级别的性能加速 —— GPGPU(general purpose GPU)编程。

GPU 是极其强大的硬件,能够进行数以千计的 concurrent operations,这使得它们对于许多算法来说都是无价之宝,其中最重要的是 deep learning models 的训练。 使用 Nvidia 提供的 C 接口(称为 CUDA)可以在 GPU 上进行 general purpose programming。 这个接口允许我们编写自己的代码在 GPU 上运行,使我们能够将代码加速几个数量级。

对于那些熟悉基本 C/C++ 的人来说,学习使用 CUDA 编程非常简单。 (关于 GPU 编程的难点是 optimization。CUDA 代码优化已经发展成为一门艺术,整个 forums  和 StackOverflow 都在讨论这个 subject。)

本系列 post 试图展示 CUDA 和 GPU 编程的一些一般功能。 每篇 post 都将重点介绍 CUDA 编程的某个方面,并附上我一路上学到的解释和技巧。

例如,一些 subjects 是:

  • GPU 和 CUDA 简介
  • 基本 example— adding two vectors
  • 可以在 GPU 上运行的函数(kernels 和 device 函数)
  • Unified memory
  • Atomic operations
  • Thrust (相当于STL)
  • Etc.

每一个都可以详细地讲很长时间,但我会尽量做到清晰和简洁,旨在帮助那些想自己开始为 GPU 编程的人,或者那些只对 GPU 感兴趣的人 您听说过的一些算法背后的工作原理。


除了 CUDA 方面,该 project 还包含使用 Boost.Python 创建 Python 和 C++ 代码之间的接口,这本身就是一个有趣且有价值的 subject 。 可能我也会写一些关于这个的 post ——敬请期待!

总而言之,我希望这些将是简短而有趣的 posts ,以帮助将来可能需要使用 CUDA 的任何人。

Next time —— 简单介绍一下GPU和CUDA。


原文链接:Real Life CUDA Programming - Part 0 — An Overview

 

posted @ 2023-05-31 21:28  ImreW  阅读(11)  评论(0编辑  收藏  举报