我对GPU计算几乎一无所知。我已经看过有关GPU计算的文章,比如Fast minimum spanning tree for large graphs on the GPU或All-pairs shortest-paths for large graphs on the GPU。听起来GPU在CPU没有的计算方面有一些限制。我需要知道GPU可以做什么样的计算?
感谢。
答案 0 :(得分:1)
嗯,我是一名有经验的CUDA新秀,所以我想我可以帮助从一个人到另一个人的回应。
您的问题的答案非常简短:
它可以与CPU完全相同,但它具有不同的功能,可以使它更快或更慢地提供所需的结果(如果考虑到相同的硬件成本)。 < / p>
CPU,即使是多核CPU,也会寻求更低的延迟,并导致一系列的构建需求。在相反的方向上,GPU假定您有如此多的独立数据要处理,如果您处理来自第一个数据条目的每个数据条目的单个指令,则应该可以在处理所有内容之前参与下一个代码指令在当前的指令中(有点难以实现,并且需要在并行开发方面有丰富的经验)。因此,GPU构造没有考虑与CPU相同强度的处理延迟,因为它可以被批量处理“隐藏”,而且,它不会担心时钟频率,因为它可以是补偿了处理器的数量。
所以,我不敢说GPU对CPU有限制,我会说它具有更具体的处理目的,例如声卡,它的构造利用了这种特殊性。比较两者与将雪地摩托车与自行车进行比较相同,它没有真正意义。
但是,有一点可以说:如果可以采用高并行方法,GPU可以以比CPU低的成本提供更高的效率,请记住CPU代表中央处理单元和Central可以被理解为它必须更加通用的外围。
答案 1 :(得分:0)
首先,您的代码应包含如此多的循环,以便调度程序在找不到足够的资源来完成循环时可以在循环之间切换。之后,您应该确保您的代码不会面临以下任何一个lamitaions:
1.Divergance:如果您的代码长if statements
,那么您的代码在GPU上可能会变得多样化。每32个线程组合在一起,并且一次向所有线程分配一条指令。因此,当if
在某些线程上被执行时,属于else statement
的其他线程应该等待,反之亦然,这会降低性能。
非合并内存访问:另一个是内存访问模式。如果您按顺序访问全局内存,那么您可以利用最大内存带宽,但如果您对全局内存中的数据的访问不正确,那么您将找到作为botteleneck的内存访问。因此,如果您的代码非常有利于缓存,请不要选择GPU,因为GPU上的ALU /缓存比率低于CPU。
低占用率:如果您的代码消耗了如此多的寄存器,共享内存,加载/存储数据以及特殊的数学函数(如三角函数),那么您可能会发现资源短缺会阻碍您建立完整的计算能力GPU