在CUDA中查找最大值

kar*_*kar 3 parallel-processing cuda reduction

我正在尝试在CUDA中编写代码以查找给定数字集的最大值.

假设您有20个数字,并且内核在2个5个线程的块上运行.现在假设10个线程同时比较前10个值,并且线程2找到最大值,因此线程2正在更新全局存储器中的最大值变量.当线程2正在更新时,将使用旧值进行比较的剩余线程(1,3-10)会发生什么?

如果我使用atomicCAS()锁定全局变量,线程(1,3-10)将使用旧的最大值进行比较吗?我怎样才能克服这个问题?

jwd*_*msd 10

这纯粹是一个减少问题.以下是NVIDIA对优化GPU降低的精彩演示.您可以使用相同的技术来查找所有元素的最小值,最大值或总和.