我正在编写一个 CUDA 内核,其中涉及计算给定矩阵上的最大值,并且我正在评估可能性。我能找到的最好方法是:
强制每个线程在共享内存中存储一个值,然后使用缩减算法来确定最大值(优点:最小分歧缺点:共享内存在 2.0 设备上限制为 48Kb)
我无法使用原子操作,因为同时存在读取和写入操作,因此线程无法通过synchthreads进行同步。
您还有其他想法吗?
您可能还想使用 CUDA Thrust 附带的缩减例程,它是 CUDA 4.0 的一部分或可用here.
该库由两位 nVidia 工程师编写,与大量手工优化的代码相比毫不逊色。我相信网格/块大小也正在进行一些自动调整。
您可以通过包装原始设备指针轻松地与您自己的内核进行交互。
这严格是从快速集成的角度来看的。有关理论,请参阅 tkerwin 的回答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)