访问global虽然仍然需要最多数百个时钟周期,但是总的来说比cpu的内存还是快多了...如果使用得当的话。CUDA是符合SIMD-PRAM模型的,也就是n台功能相同的处理机(block看成处理机,每个thread看成处理机的一部分更好些),一个容量无限大的共享处理器M。其中M就是global memory,虽然在CUDA中也是有限的,但是比起可怜的shared还是多很多了。
global作为共享存储器,最重要的功能就是用来进行block之间的通信。这里能不能叫做通信其实有问题,因为block之间实际上没有通信...CUDA上的通信实际上就是刷新,运行完一个kernel,把所有的需要与其他block交换的数据都写进global,然后再launch一个kernel读入上次生成的数据...如此往复循环。
如果kernel的输入与输出是同一个矩阵,就是一个原地(in-place)操作,下个kernel还是读取这个矩阵。
如果输入矩阵与输出矩阵不同,而且需要反复操作这两个矩阵,就构成了一个乒乓操作,例如第一次kernel使用ping为输入,pong为输出,下次阅读全文>
发表于 @ 2008年07月16日 12:49:00|评论(loading...)|编辑|收藏