在上一篇文章《你了解CUDA,了解GPU吗?》中,我们介绍了什么是CUDA,什么是GPU。那么接下来我们就要来讲解下GPU到底是如何实现并行计算的,以及CUDA是如何通过编程调用GPU的并行计算力的。
1.GPU是如何实现并行计算
从软件层面来说,GPU在进行并行计算时,是以核(kernel)为单位进行的。如下图所示,每个核相当于一个功能函数。每个核由若干线程块(thread block)负责运算,而每个线程块又由若干个线程组成。所有的线程由CPU负责发放给GPU设备。
从硬件层面来说,GPU包含若干个流处理器(SM)(越多GPU性能越好),每个流处理器由若干个处理单元(粉色)和一个存储单元(黄色)组成,每个流处理器独立并行工作。用以计算CPU发送过来的线程。
当我们执行并行计算时,GPU会将核分配给流处理器进行并行计算。该过程中存在无序和有序两个部分,无序部分保证了程序的并行能力,有序部分保证了程序的逻辑能力。其中无序部分为线程与线程之间无序,有序部分为核与核之间有序。
-
无序:
1 当对一个核进行处理时