Mxnet-MsShadow学习

MsShadow学习

@(mxnet)

1. msshadow简介

msshadow 可以无缝编写cpu和GPU代码
主要作用如下:
- 矩阵基本操作
- 同时编写cpu和gpu代码
- 内存需要显示分配
- 全部使用template编写,包含头文件即可使用。

2. test:

1 下载MSShadow库
2 guide下执行make即可编译出例程

3. mshadow实现原理探究

  1. stream是用来实现什么功能?: cpu和gpu同步使用。
  2. 表达式模板如何实现?
  3. gpu变成细节

4 gpu和cpu抽象

4.1 如何屏蔽gpu和cpu细节

  1. 编写矩阵的操作就是编写模板。仍然需要为cpu和gpu单独实例化。
  2. Tensor 实现的时候,根据对gpu和cpu进行特殊实例化

4.2 nvcc如何进行cpu和gpu协同编译

  1. gpu 的sample 安装在 /usr/local/cuda文件夹下面
  2. 混合变成方法
    1. 使用nvcc将 .cu编译为.o
    2. 使用gcc将.c 编译为.o
    3. 使用gcc将 两者编译的.o 链接成输出文件

gcc 和nvcc 关于c语言生成的连接符号是一致的。

5. 表达式模板

特点

思想:将运行时进行函数编译优化的过程提到编译的过程进行,这样编写的程序运行的速度便得到保证。
1. 省却写循环的过程,仍然保持程序的高效:表达式模板 inline-操作,重载+,编译时优化。
2. 模板重载运算符重载
3. layer computation: 重载赋值运算符。

实现原理

  1. 定义表达式泛型
  2. 为表达式泛型重载 * +等基本类型运算符,其返回值仍然是表达式类型,lazy computation的实现方式。
  3. 定义数组类型,并将数组类型的赋值运算符重载为求值过程,for循环便在这里编写。
  4. 定义通用F,可以讲element-wise函数转换为表达式类型
  5. 将所有的函数都定义为inline类型,最有求值的过程中便能进行优化,函数高效的原因
  6. 实际使用过程中 遇到等号,便进行求值。

6. cuda编程要点

6.1 编程模型

CUDA并行编程模型包含三个实体: 线程网、线程块,线程。一个网可以包含x*y个线程块,线程块可以包含x*y个线程。

Alt text

  1. 内核在在定义在线程上执行的最小实体。内核使用__global__声明。
  2. 内核调用语法 VecAdd<<<1, N>>>(A, B, C);
    第一个参数表示设备在执行核函数数使用的并行线程块(block)的数量,第二个参数表示每个线程块启动线程(thread)的数量
    调用语法表达二维的方式:

    dim3 threadsPerBlock(16, 16);
    dim3 numBlocks(N / threadsPerBlock.x, N / threadsPerBlock.y);
    MatAdd<<<numBlocks, threadsPerBlock>>>(A, B, C);

多维度的数据索引:
- gridDim.x-线程网络X维度上线程块的数量
- gridDim.y-线程网络Y维度上线程块的数量
- blockDim.x-一个线程块X维度上的线程数量
- blockDim.y-一个线程块Y维度上的线程数量
- blockIdx.x-线程网络X维度上的线程块索引
- blockIdx.y-线程网络Y维度上的线程块索引
- threadIdx.x-线程块X维度上的线程索引
- threadIdx.y-线程块Y维度上的线程索引

cuda并行计算详细说明

6.2 内存编程模型

  1. 寄存器内存,local memory 线程私有内存
  2. 共享内存:同一个block读写内存。使用share_申请。
  3. 全局内存: gpu和cpu共享的内存

6.3 cuda编程顺序

  1. 定义并行模型
  2. 定义内核函数
  3. 定义调用内核函数的并行方式
  4. 函数封装,将gpu函数封装出c接口
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值