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中,那么会有比较明显的效果。
大致如此,欢迎您常来论坛,祝您好运~ |