为什么GPU做矩阵乘法比CPU更快?

2024-01-22

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

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

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


如何并行计算?

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 并行化的效率如何?

现在考虑一下今天的 GPU 大约有 2048 个线程,所有线程可以在恒定时间内独立执行 2048 个不同的操作。因此给予提升。

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


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

几乎所有机器学习框架都使用所有可能操作的并行实现。这是通过 CUDA 编程、NVIDIA API 在 NVIDIA GPU 上进行并行计算来实现的。你不明确地写出来,都是在底层完成的,你甚至不知道。

是的,这并不意味着您编写的 C++ 程序会自动并行化,仅仅因为您有 GPU。 不,你需要使用CUDA来编写它,然后它才会被并行化,但是大多数编程框架都有它,所以你端不需要它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么GPU做矩阵乘法比CPU更快? 的相关文章

随机推荐