说来惭愧,接触GPU是在07年6月份,研二,来公司实习。用cg把以前的一些图像处理算法改写在了GPU上,当时是用的geforce8800GTX。后来入职后,开始接触别的工作,学x-ray,学习image acquisition,只是没事的时候翻翻手册,浏览下群里的讨论。就在这漫不经心的日子里,逐渐忘了很多东西。现在项目重新开始,也重新开启了cuda之路。
七种武器,不一定有七种。
也许只是一个代号,也许,这厮是在模仿古龙~
(一)stream
stream
stream 流.
看不见的显卡内部,有无数的stream在流动。
从main memory到global memory有stream[i]在,
在SM里,那些忙着做加减乘除预算的,有stream[i+1]在,
同时还有从global memory往回倒腾的stream[i+2]在。
由于stream的存在,使得各条战线的兄弟们都同时在忙活,你,不是一个人在战斗!
任何事情好像都是过犹不及,stream太多了也不成,management成问题啊,这不,我这1024*1024的图像,开64个流的时候发现性能下降了一大截啊。开4,8,16貌似还可以的说。
手册上是这么说的:
设T1 = execution time of kernel
T2 = memory transfer time
N = number of streams
Time(using stream) = max(T1, T2) + min(T1, T2) / N.
看来对于大规模数据吞吐的时候还是有点优势的。
但是我的concern是:
要对于convolution这样数据位置相关的运算的话,这流划分起来是不是就有困难了呀?