【发布时间】:2011-04-04 22:46:30
【问题描述】:
我正在编写一个 CUDA 内核来对矩阵的每个元素执行单个操作(例如,对每个元素求平方根,或求幂,或者如果所有数字都在 [-1;1] 之间,则计算正弦/余弦)等。)
我选择了块/线程网格尺寸,我认为代码非常简单明了,但我问自己......我可以做些什么来最大化合并/SM 占用率?
我的第一个想法是:让所有 semiwarp(16 个线程)从全局内存中加载数据集合,然后将它们全部用于计算,但它发现没有足够的内存传输/计算并行化。我的意思是所有线程加载数据,然后计算,然后再次加载数据,然后再次计算.. 就性能而言,这听起来很糟糕。
我认为使用共享内存会很棒,也许使用某种局部性使线程加载的数据比促进其他线程工作实际需要的数据多,但这听起来也很愚蠢,因为第二个会等待前者在开始工作之前完成加载数据。
我不确定我是否就我的问题提出了正确的想法,我只是在开始着手处理具体问题之前获得想法。
每条评论/建议/批评都被广泛接受,谢谢。
【问题讨论】: