CUDA-如何对 block 进行平均?

标签 cuda average

我有一个关于 block 平均的问题。我的输入数据大小为256*512,我将256个线程放在一个 block 中,所以总共有512个 block 。输出的大小应为256,其中每个元素是不同 block 中相同线程ID的平均值。换句话说,对所有 512 个 block 中的线程 1 进行平均,并将结果提供给输出数组的线程 1。类似地,对所有 512 个 block 中的线程 2 进行平均,并将其提供给输出数组的线程 2。我知道通过使用共享内存在 block 内进行平均是非常快速和高效的,但这不是这里的条件。使用 NPP 函数可以让我在 for 循环中完成此操作,但这确实很耗时。有人可以建议如何有效地对 block 进行平均吗?非常感谢!

最佳答案

为什么不翻转它,每个 block 执行 512 个线程,并执行共享内存求和缩减来计算 block 内的总和,然后除以 512 并存储到全局内存?

您还可以使用 thrust 快速进行编码,使用按键归约操作。

关于CUDA-如何对 block 进行平均?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892575/

相关文章:

java - Java 静态数组的排序、平均和查找最小数

cuda - Nvidia 的 nvprof 输出为 FLOPS

c - OpenCV 2.4.4 和 GPU 支持人脸检测

c - NVCC:警告:允许所有异常与以前的功能不兼容

r - 比较两个表的元素,平均现有元素并将 NA 保留为 R 中不存在的元素

sum - 获取聚合函数以在 KDB 中返回 null

MySQL 指定天数的平均温度

cuda - CUDA SM 上的经线如何安排?

algorithm - CUDA 最大缩减算法不起作用

c - 谐波平均产生不正确的结果