为什么GPU可以使矩阵乘法比CPU快?

时间:2018-07-14 22:58:47

标签: tensorflow parallel-processing gpu matrix-multiplication pytorch

我一直在使用GPU已有一段时间,没有质疑它,但是现在我很好奇。

为什么GPU进行矩阵乘法的速度比CPU快得多?是因为并行处理吗?但是我没有编写任何并行处理代码。它会自动完成吗?

任何直觉/高级解释将不胜感激!谢谢。

3 个答案:

答案 0 :(得分:6)

您如何并行化计算?

GPU能够执行许多并行计算。远远超出CPU的能力。 看这个简单的矢量加法或矩阵加法的例子,比如说1M个元素。

使用CPU,假设您最多可以运行100个线程: (还有100个,但我们假设一会儿)

在一个典型的多线程示例中,假设您并行化了所有线程上的添加。

这是我的意思:

c[0] = a[0] + b[0] //let's do it on thread 0
c[1] = a[1] + b[1] //let's do it on thread 1
c[101] = a[101] + b[101] //let's do it on thread 1

我们之所以能够做到这一点,是因为c [0]的值不依赖于除a [0]和b [0]之外的任何其他值。因此,每个添加项均独立于其他项。因此,我们能够轻松并行化任务。

如您在上面的示例中看到的,同时进行100个不同元素的所有添加操作可以节省您的时间。这样,添加所有元素需要1M / 100 = 10,000个步骤。


GPU并行化的效率如何?

现在考虑当今拥有大约2048个线程的GPU,所有线程都可以在恒定时间内独立地执行2048个不同的操作。因此提振了力量。

在矩阵乘法的情况下。您可以并行化计算,因为GPU具有更多线程,并且在每个线程中您都有多个块。因此,许多计算都是并行的,从而实现了快速计算。


  

但是我没有为GTX1080编写任何并行处理!它是自己完成的吗?

实际上,几乎所有的机器学习框架都使用所有可能操作的并行实现。这是通过CuDa编程(NVIDIA API在NVIDIA GPU上进行并行计算)实现的。因此,您无需明确地编写它,而是在低级完成的,甚至您都不知道这一点。

是的,这并不意味着您编写的c ++程序将自动并行化,仅仅是因为您具有GPU。 不,您需要使用CuDa编写它,然后才将其并行化,但是大多数编程框架都具有它,因此从头开始就不需要它。

答案 1 :(得分:4)

实际上,这个问题使我参加了Luis Ceze博士的计算机体系结构课程。 现在我可以回答这个问题。

总而言之,这是由于硬件的特殊性。 我们可以定制芯片架构,以在专业化和效率之间取得平衡(更灵活vs.更有效率)。例如,GPU是专门用于并行处理的,而CPU被设计为处理许多不同种类的操作。

enter image description here

此外,FPGA,ASIC比GPU更专业。 (您看到处理单元的块了吗?)

enter image description here

答案 2 :(得分:1)

GPU 设计传统上侧重于最大化浮点单元和执行多维数组操作。它们最初是为图形设计的,线性数学很有用。

CPU 针对一般计算和单线程执行进行了优化。每个执行单元都庞大而复杂。