代码之家  ›  专栏  ›  技术社区  ›  aerin

为什么GPU的矩阵乘法速度比CPU快?[关闭]

  •  -1
  • aerin  · 技术社区  · 7 年前

    我用GPU已经有一段时间了,但现在我很好奇。

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

    任何直觉/高级解释都会受到赞赏!谢谢。

    1 回复  |  直到 7 年前
        1
  •  6
  •   coder3101    7 年前

    如何并行计算?

    GPU能够进行很多并行计算。比CPU能做的要多得多。 看看这个例子,向量相加或矩阵相加的更简单的例子,比如说1百万个元素。

    使用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个不同元素可以节省您的时间。这样,添加所有元素需要1米/100=10000步。


    GPU并行化的效率如何?

    现在考虑一下今天的GPU大约有2048个线程,所有线程都可以在恒定时间内独立地执行2048个不同的操作。所以给了我一个鼓励。

    在矩阵乘法的例子中。您可以对计算进行并行处理,因为GPU有更多的线程,并且在每个线程中都有多个块。因此,许多计算都是并行的,因此计算速度很快。


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

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

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