CUDA Academy · 课时

Thrust 归约、扫描与排序

一次调用即可使用的高级原语

第 3 / 4 课13 个步骤

Thrust 归约、扫描与排序 是 CoddyKit 上的免费 CUDA Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CUDA Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CUDA Academy 课程共包含 4 节课。

一行代码实现复杂算法

归约、扫描和排序很难手动高效实现。Thrust 通过一次函数调用为您提供经过调优的版本。🎁

归约将数据合并为一个值

thrust::reduce 会将每个元素合并为一个结果,例如对数组求和;这一切都在底层并行完成。

int total = thrust::reduce(d.begin(), d.end());

自定义归约运算符

Reduce 默认使用加法,但您可以传入初始值和二元操作,以计算乘积、最大值或任何满足结合律的结果。

int m = thrust::reduce(d.begin(), d.end(),
  0, thrust::maximum<int>());

扫描保留运行总和

扫描也称为前缀和,会在每个位置输出当前的运行总和。它是压缩、排序和流分配的核心。

包含式与排除式

inclusive_scan 会将当前元素计入总和,而 exclusive_scan 不会。选择正确的形式可以避免差一错误。

thrust::inclusive_scan(d.begin(), d.end(),
  out.begin());

扫描并不容易并行化

前缀和看起来是顺序操作,但 Thrust 会使用巧妙的树算法将其并行执行,您完全不必自己编写该算法。

原地排序

thrust::sort 会使用快速的 GPU 基数排序或归并排序对 device_vector 进行原地排序;处理大型数据时,它比 CPU 排序快得多。

thrust::sort(d.begin(), d.end());

按键排序

sort_by_key 会对一个数组排序,同时按照相同顺序重新排列第二个值数组,非常适合让记录与其键保持对应。

thrust::sort_by_key(keys.begin(),
  keys.end(), values.begin());

组合基本操作

实际的处理流程会将这些操作串联起来:先变换再归约,或先排序再扫描。每一步都是一次经过调优的调用,因此您可以专注于逻辑。

融合式 transform_reduce

transform_reduce 会在一次遍历中完成映射和求和,无需临时数组即可计算点积或平方和等结果。

float ss = thrust::transform_reduce(
  d.begin(), d.end(), sq, 0.0f, thrust::plus<float>());

让库发挥优势

这些基本操作都经过 NVIDIA 的深度优化。优先使用它们通常胜过自定义内核,还能节省数小时工作。

快速检查

回想一下前缀和会产生什么结果。

回顾

您使用 reduce 将数据归并,通过扫描构建运行总和,使用排序排列数组,并通过 transform_reduce 融合多个步骤。🏁

免费开始

用 AI 导师学习 C++ — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「Thrust 归约、扫描与排序」课时是免费的吗?

是的 — 「Thrust 归约、扫描与排序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CUDA Academy 课程的其余内容,请升级到 CoddyKit PRO。 CUDA Academy 课程共包含 4 节课。

「Thrust 归约、扫描与排序」这节课中我会学到什么?

一次调用即可使用的高级原语 你通过在浏览器中直接运行的动手代码来练习 CUDA Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CUDA Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CUDA Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Thrust 归约、扫描与排序」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CUDA Academy 课中编写并运行代码吗?

能。每节 CUDA Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 正确使用 cuBLAS GEMM
  2. Thrust 向量与变换
  3. Thrust 归约、扫描与排序
  4. 用于深度学习的 cuDNN
← 返回 CUDA Academy