【问题标题】:CUDA- how to do average over blocks?CUDA-如何对块进行平均?
【发布时间】:2012-08-09 21:58:26
【问题描述】:

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

【问题讨论】:

  • 你不能切换线程和块,以便你可以平均块中的线程吗?

标签: cuda average


【解决方案1】:

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

您也可以使用 thrust 快速编写代码,使用 reduce-by-key 操作。

【讨论】:

  • 感谢您的回答。您的意思是先使用矩阵转置,然后使用共享内存平均每个块 512 个线程?或者有更好的方法来分配线程和块?就像将 intput[0] 放入块 0 线程 0,将 input[256] 放入块 0 线程 1,...,输入 [256*512-1] 放入块 0 线程 511?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-09
  • 2017-04-22
  • 2017-03-01
  • 2020-06-19
  • 1970-01-01
相关资源
最近更新 更多