用户
 找回密码
 立即注册
发表于 2013-10-23 09:18:36
以及,玫瑰斑竹刚才私下提供了您的算法的一个改进方案,由我代为发表:

非常神奇!我将每个线程处理6个元素,耗费时间从810毫秒直降到250毫秒,但是将多项式系数拷入共享内存的优化效果不明显,但是拷贝方法对我很有启发----CUDA编程和CPU编程在思想上有较大差异,令人耳目一新。
谢谢诸位版主,我以后有什么问题不明白还要请教,望各位大佬不要嫌麻烦。
使用道具 举报 回复 支持 反对
发表于 2013-10-23 11:49:30
acone 发表于 2013-10-23 09:18
非常神奇!我将每个线程处理6个元素,耗费时间从810毫秒直降到250毫秒,但是将多项式系数拷入共享内存的优 ...

LZ您好:

1:每个线程处理多个元素带来的效能提升是可以预期的,因为这里将N次数据的准备工作减少到了1次,以及减少了多次重复启动kernel的时间。

2:因为原先直接从global memory读取数据的时候,还会被L2 cache缓冲,并不是每次都从global memory的DRAM中读取,以及当时的读取方式也没有warp内分支,而只是因为cache的读取粒度会造成一些浪费(如果您是kepler GPU,这个浪费会少一些,而且L2 cache得到了加强)。所以,综合看待计算和访存的比例,如果瓶颈并不在访存上,那么优化访存带来的好处就不多。以及,在一个线程处理多个元素的安排下,进一步降低了对访存的要求(因为读入一次可以使用6次)。

如果您在某个访存密集的问题中,将可以被局部反复利用的数据缓冲在shared memory中,那么会有比较明显的效果。

大致如此,欢迎您常来论坛,祝您好运~
使用道具 举报 回复 支持 反对
12
发新帖
您需要登录后才可以回帖 登录 | 立即注册