送交者: 竹间棋 于 2009-03-18, 18:45:38:
回答: 目前的主要GPU产品 由 竹间棋 于 2009-03-18, 18:44:42:
算法在CPU和GPU在内存存取方式上的区别。
内存数据的存取在运算中是一个耗费时间的过程。从内存中存取数据,通常需要耗费几十到上百个时钟周期。CPU通过高速缓存的方式,来实现内存数据的随机存取,所以在算法上对内存的存取顺序的依赖性比较低,甚至不需要进行过多的考虑。而GPU不同,虽然显存的存取速度一般都远快于普通内存,当时依然是十分耗费时间的任务。更为糟糕的事,GPU由于拥有大量的处理单元,所以无法为每个处理单元配备大量的高速缓存,导致了随机地对内存进行操作的时间开销巨大。所以在算法上,要求尽量进行连续块数据的操作和连续计算,而不是把数据存起来以后在时候取出来进行操作。
算法在CPU与GPU之间数据通信方式上的区别。
从内存中存取数据虽然相对运算来说比较慢,但是CPU和GPU之间通过PCIe接口交换是一个更慢的过程。所以应该尽量减少不必要的CPU和GPU之间数据交换,甚至所有的模拟工作,都应该在GPU中完成,除非必要的数据输入,分析和结果输出。这个结论是不太容易被人接受的,因为有人认为如果CPU分担一部分计算人物速度会更快,但是目前的测试结果否定了这种算法的思路。
算法在CPU和GPU在处理单元组织结构上的区别。
和CPU不同,线程在GPU上的执行并不是相互独立的。通常GPU上线程被分成若干组,每组的线程必须进行完全一样的操作。那么在算法上,就导致了如果出现分支结构,性能就会出现很大的降低。从根本上讲,这种硬件结构要求除非万不得已,不要出现算法上的分支和其他的需要进行流控制的情况发生。