GPU是否比CPU更强大?为什么?
0 330
2
该提问暂无详细描述
收藏
2021-01-22 16:17 更新 张宇哲 •  5246
共 1 个回答
高赞 时间
0

GPU在某些非常特定的功能/操作中功能更强大,而对其他功能/操作则缺乏功能。

例如: 大多数GPU可以并行执行许多最简单的整数和单精度浮点运算的SIMD指令,这些运算具有许多内核(例如,多个cpu内核中的多个数据、多个参数、多个指令)。 它们还与GPU时钟同步了自己(集成)内存的时钟,因此该内存没有指令执行的瓶颈,并且像L2或L3高速缓存一样充当着整体。

结果,在理想的情况下,它们可以实现1到4000 GFlops的性能(取决于GPU的核心数量,例如具有256核心的AMD HD 7970 GHZ将会运行 4000 GFlops),而具有12个内核的标准通用CPU(如Intel i7-5930K)则可以达到约63 GFlops。 如果进行比较,你会发现即使单个CPU内核,对于这些数学指令来说,GPU的性能是标准CPU的3倍。 但是,如果我们习惯了普通的指令类型,例如循环、堆栈操作、内存操作、尤其是对非常大数量的内存的随机访问、IO操作,仅带有一个或两三个参数(而不是数百个参数)的数学指令,那么情况发生了很大变化,普通的CPU有时每个内核的功能要比GPU内核强大100倍以上。 因此,GPU速度通常是更快的,但在一组非常有限的条件下(通常是单精度运算,每条指令具有大量参数)。 通用cpu在更广泛的意义和条件集合上更快,包括可能会(实际上)比GPU更快在数据处理上,即使我们认为GPU会获胜,比如你用更少的参数或更高的精度来计算。

GPU在处理顶点和顶点矩阵(顶点有3个点向量)时极快,实际上只有3-4套运算,并且使用单一精度和并行计算的每个指令的极端参数数量。 这是可以理解的,这些是绘制3D图形、灯光和纹理时必须执行的典型计算。它们无法像具有多个复杂状态和随机行为的CPU复杂算法那样轻松快捷地执行。

但是,如果你的任务/算法可以通过简单的流水线算法在这样的结构上用一个精确的数学来有效地表达,并且不需要大量的内存(在大多数情况下,GPU每个核心的内存功能非常有限,并且从CPU馈送GPU时,RTT延迟有时会比计算CPU本身的结果高得多。) 然后,可以使用GPU大大加快它的运行时间。如果你不能用这样的数学来表达它,那么使用GPU可得到的性能很可能会令人失望。

好消息是,很多通用数学都可以用一种方式来表达(我的意思是需要执行大量基本计算的数学),这种方式将会使用gpu更快地处理它,因此我们每天都在越来越好地提高通用应用程序的性能。

为了实现这一点,我们在OpenGL(如OpenCL)或专有(如CUDA)中提供了许多标准API接口的扩展,甚至还为浏览器提供了JavaScript接口(用于3D绘图的WebGL 1.0,或用于计算的WebGL 2.0)。

最后回到这个问题,GPU并不比一般的CPU快。

收藏
2021-01-22 16:19 更新 张宇哲 •  5246