<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
随着GPU可编程性能的增强以及GPGPU技术的不断发展,人们希望基于流处理器模型的GPU能够像CPU一样,在支持流程分支的同时,也允许对存储器进行灵活的读写操作。在进行早期的GPU通用可编程技术研究时,Ian Buck [1]就曾经指出,缺乏灵活的存储器操作,是制约GPU完成复杂计算任务的关键,因此他在设计Brook [2]时增加了对scatter/gather特性的支持,但是其实现过程仍然是通过一些以牺牲性能为代价的技巧完成的。
在GPU中scatter/gather的实现与第一向量机中的很相似,scatter允许将数据输出到非连续的存储器地址内,而gather则允许从非连续的存储器地址内读取数据。因此如果认为存储器(如DRAM)是一个二维数组,scatter可以看作利用下标将数据写入数组中的任意位置,即a[i] = x,而gather可以看作是利用下标从数组中的任意位置读出数据,即x = a[i]。
在CUDA [5]的架构中(图1),每个ALU可以看作是一个处理核心&