-
GPU(图形处理器),一般指计算机的显卡,可以代替CPU完成大量复杂的矩阵(图像)运算,从而让CPU专注与逻辑运算,提高计算机的整体效率,提升图像的处理能力。
-
与CPU相比,GPU具有更多的ALU(算术逻辑单元),能够进行大量的并行运算。
-
CUDA C 是英伟达公司推出的能够在该公司显卡上进行编程的语言,与C语言有很大的类似之处,并且能够兼容C语言。在这里需要区分两个概念分别是host(CPU & memory)和device(GPU & memory)。
-
在使用CUDA C编写程序时,变量的值必须保存在host中,device中只能存放host中变量的地址,并可以通过地址来修改host中变量的值。在对数组进行计算操作时,可以同时对数组中的所有元素进行并行运算,而不需要像在C语言中那样编写for循环遍历数组再运算那样的串行方式。
-
在GPU中,复杂的算法不会占用太多的时间,因为GPU中大量的运算单元能够很快的进行并行运算,所以程序中能够改写成并行运算的算法最好是改写。相反,GPU中主要耗时的任务是频繁的在host和device中进行数据的交换传输,和分配释device内存的操作,因此在程序中还需要避免频繁的上述操作。
-
CUDA C与C语言的主要区别可以观察下图所示例子:
__global__是一个全局声明,表示saxpy_parallel()是一个全局函数,(1)运行在device上(2)被host代码调用;
saxpy_parallel<<<2048,128>>>(4096*256,2.0,x,y)是对函数的一个调用,其中,“<<<2048,128>>>”表示在GPU中开辟了2048个block,其中每个block里面又包含128个thread;
blockIdx表示block索引,取值范围是0~2047,同理threadIdx表示thread的索引,取值范围是0到127,blockDim表示每一个block的大小,即每一个block中的thread的个数,在本例中为128。 -
工作时的数据流:(1)从CPU memory中复制输入数据到GPU memory中(2)编写GPU程序并执行,计算得到结果(在GPU中)(3)将结果从GPU memory中复制到CPU memory中。
-
CUDA C Code包含以下部分:
GPU的计算是一个巨大的并行运算过程。 -
开辟内存和数据交换:
malloc 在GPU中为二级指针开辟一个内存空间,memset可以指定大小赋值。 -
Device Code:
-
计算索引:
(1)block
(2)thread
(3)combine blocks and threads
Which thread will operate on the red element?
GPU学习笔记
最新推荐文章于 2024-05-30 16:52:50 发布