CUDA编程之机器人SLAM点云视觉学习与实践0——预备知识

准备开一个cuda的专栏,记录自己对cuda点云、视觉学习与实践的过程,希望能坚持更下去,最终的目标是想实现基于cuda对每个粒子并行加速的视觉gmapping

这一节记录从零开始使用cuda编程的一些基础知识

GPU架构和属性

cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);

上面可以获取gpu的属性。这里实践采用的是GTX1060显卡,一些重要的属性如下:
gpu算力:6.1
grid最大维度:3

  • x方向最大block:231-1
  • yz方向最大:65535

block最大维度:3

  • xy方向最大:1024
  • z方向最大:64
  • threads最多:1024

上面提到的thread,block,grid还有warp是CUDA编程上的概念,以方便程序员软件设计,组织线程,同样的我们给出一个示意图来表示。
在这里插入图片描述thread:一个CUDA的并行程序会被以许多个threads来执行。
block:数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
grid:多个blocks则会再构成grid。
warp:GPU执行程序时的调度单位,目前cuda的warp的大小为32,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT。

软件代码

主机(host)一般指cpu,器件(device)一般指gpu
常用的标识符:

  • __global__表示该函数在主机中执行函数的呼叫,在器件中执行
  • __host__表示该函数在主机中执行函数的呼叫,在主机中执行
  • __device__表示该函数在器件中执行函数的呼叫,在器件中执行

cuda编程主要分为5步:

  1. 给host和device分配内存
  2. 数据拷贝,从host到device
  3. kernel计算
  4. 数据拷贝,从device到host
  5. 释放内存

编写代码应该严格按照这样的五个步骤来,后面的代码也都遵循这样一个流程。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值