GPU学习笔记

  1. GPU(图形处理器),一般指计算机的显卡,可以代替CPU完成大量复杂的矩阵(图像)运算,从而让CPU专注与逻辑运算,提高计算机的整体效率,提升图像的处理能力。

  2. 与CPU相比,GPU具有更多的ALU(算术逻辑单元),能够进行大量的并行运算。

  3. CUDA C 是英伟达公司推出的能够在该公司显卡上进行编程的语言,与C语言有很大的类似之处,并且能够兼容C语言。在这里需要区分两个概念分别是host(CPU & memory)和device(GPU & memory)。
    在这里插入图片描述

  4. 在使用CUDA C编写程序时,变量的值必须保存在host中,device中只能存放host中变量的地址,并可以通过地址来修改host中变量的值。在对数组进行计算操作时,可以同时对数组中的所有元素进行并行运算,而不需要像在C语言中那样编写for循环遍历数组再运算那样的串行方式。

  5. 在GPU中,复杂的算法不会占用太多的时间,因为GPU中大量的运算单元能够很快的进行并行运算,所以程序中能够改写成并行运算的算法最好是改写。相反,GPU中主要耗时的任务是频繁的在host和device中进行数据的交换传输,和分配释device内存的操作,因此在程序中还需要避免频繁的上述操作。

  6. 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。

  7. 工作时的数据流:(1)从CPU memory中复制输入数据到GPU memory中(2)编写GPU程序并执行,计算得到结果(在GPU中)(3)将结果从GPU memory中复制到CPU memory中。

  8. CUDA C Code包含以下部分:在这里插入图片描述
    GPU的计算是一个巨大的并行运算过程。

  9. 开辟内存和数据交换:在这里插入图片描述
    malloc 在GPU中为二级指针开辟一个内存空间,memset可以指定大小赋值。

  10. Device Code:第三种一般直接省略,无需加上该标志,默认为CPU调用的函数
    也有<<<blocks,threats>>>这种比较常见
    示例
    主函数
    主函数2

  11. 计算索引:
    (1)block在这里插入图片描述
    (2)thread在这里插入图片描述
    (3)combine blocks and threads在这里插入图片描述
    Which thread will operate on the red element?
    Which thread will operate on the red element?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值