1、CPU是针对延迟优化的,而GPU是针对带宽优化的。
你可以将CPU想象为一辆法拉利,而GPU则是一辆大卡车。它们的任务都是从一个随机位置A取得包裹,并将这些包裹运送到另一个随机位置B。CPU(法拉利)可以快速从你的RAM中获取一些内存(包裹),而 GPU(大卡车)在这方面做得较慢(延迟更高)。然而,CPU(法拉利)需要多次往返才能完成任务(从位置A取2个包裹到位置B...重复),而GPU可以一次性获取更多的内存(从位置A取100个包裹到位置B...重复)。
换句话说,CPU擅长快速获取少量内存(例如5 * 3 * 7的运算),而GPU擅长获取大量内存(例如矩阵乘法:(A*B)*C)。最好的CPU具有大约50GB/s的内存带宽,而最好的GPU有750GB/s的内存带宽。因此,你的计算操作需要的内存越多,GPU相对于CPU的优势就越明显。
2、 隐藏线程并行下的内存访问延迟
GPU的延迟问题可能会影响性能。一辆大卡车虽然可以一次携带很多包裹,但问题在于你需要等很长时间才能收到下一批包裹。如果不解决这个问题,即使是处理大量数据,GPU也会非常慢。那么这个问题是如何解决的呢?
如果你要求一辆大卡车进行多次运输包裹,你总是需要等待很长时间,直到卡车完成下一次运输——卡车本来就慢。然而,如果你现在使用一队法拉利和大卡车(线程并行性),并且有一个包含许多包裹的大型任务(如大块内存