为什么GPU能比CPU更快地进行矩阵乘法?

Aer*_*rin 1 parallel-processing gpu matrix-multiplication tensorflow pytorch

我一直在使用GPU一段时间没有质疑但现在我很好奇.

为什么GPU能比CPU更快地进行矩阵乘法?是因为并行处理吗?但我没有写任何并行处理代码.它是自动完成的吗?

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

Aer*_*rin 11

实际上这个问题促使我参加了威斯康星大学(Luis Ceze 博士)的计算机体系结构课程。现在我可以回答这个问题了。

总结起来,就是因为硬件专业化。我们可以定制芯片架构,以平衡专业化和效率(更灵活与更高效)。例如,GPU 高度专门用于并行处理,而 CPU 则设计用于处理多种不同类型的操作。

在此输入图像描述

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

在此输入图像描述


cod*_*101 10

你如何并行化计算?

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
Run Code Online (Sandbox Code Playgroud)

我们能够这样做,因为c [0]的值不依赖于除[0]和b [0]之外的任何其他值.所以每次添加都是独立的.因此,我们能够轻松地并行化任务.

正如您在上面的示例中所看到的那样,同时添加了100个不同的元素可以节省您的时间.这样,添加所有元素需要1M/100 = 10,000步.


GPU并行化的效率如何?

现在考虑今天的GPU有大约2048个线程,所有线程可以在恒定时间内独立完成2048个不同的操作.因此提升了.

在你的矩阵乘法的情况下.你可以平行计算,因为GPU有更多的线程,并且在每个线程中你有多个块.因此很多计算是平行的,从而导致快速计算.


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

实际上,几乎所有的机器学习框架都使用了所有可能操作的并行实现.这是通过CuDa编程实现的,NVIDIA API可以在NVIDIA GPU上进行并行计算.所以你没有明确地写它,它都是在低级别完成的,你甚至都不知道这一点.

是的,这并不意味着您编写的c ++程序将自动并行化,因为您拥有GPU.不,你需要使用CuDa编写它,然后只有它将被并行化,但大多数编程框架都有它,所以它不是你需要的.