当中用到一个宏定义CUDA_KERNEL_LOOP

在common.hpp中有。

#defineCUDA_KERNEL_LOOP(i,n) \

for(inti = blockIdx.x * blockDim.x + threadIdx.x; \

i < (n); \

i +=blockDim.x * gridDim.x)

先看看caffe採取的线程格和线程块的维数设计,

还是从common.hpp能够看到

CAFFE_CUDA_NUM_THREADS

CAFFE_GET_BLOCKS(constintN)

明显都是一维的。

整理一下CUDA_KERNEL_LOOP格式看看,

for(inti = blockIdx.x * blockDim.x + threadIdx.x;

i< (n);

i+= blockDim.x * gridDim.x)

blockDim.x* gridDim.x表示的是该线程格全部线程的数量。

n表示核函数总共要处理的元素个数。

有时候,n会大于blockDim.x* gridDim.x,因此并不能一个线程处理一个元素。

由此通过上面的方法,让一个线程串行(for循环)处理几个元素。

这事实上是经常使用的伎俩,得借鉴学习一下。

再来看一下这个核函数的实现。

template<typename Dtype>

__global__void mul_kernel(const int n, const Dtype* a,

constDtype* b, Dtype* y)

{

CUDA_KERNEL_LOOP(index,n)

{

y[index]= a[index] * b[index];

}

}

明显就是算两个向量的点积了。

因为向量的维数可能大于该kernel函数线程格的总线程数量。

因此有些线程能够要串行处理几个元素。

转载于:https://www.cnblogs.com/bhlsheji/p/4060400.html

caffe源代码分析--math_functions.cu代码研究相关推荐

  1. 你绝对能看懂的Kafka源代码分析-KafkaConsumer类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  2. Linux内核源代码分析——vmstat核心代码注释

    一次和圈子里的朋友群聊的时候,谈到了vmstat的实现机制.我当时正在轻轨上,幻想着从轻轨飞下去的快感.在轻轨上我发表了自己的一些看法,不过都是意淫. 现在,已经过去半周了,今天终于闲下来把vmsta ...

  3. 你绝对能看懂的Kafka源代码分析-RecordAccumulator类代码分析

    目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...

  4. MediaInfo源代码分析 5:JPEG解析代码分析

    ===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...

  5. 网络游戏源代码分析_为您的游戏选择正确的网络代码

    网络游戏源代码分析 We evaluated and researched today's most popular netcode frameworks for multiplayer games ...

  6. 《深入分析GCC 》——第2章 GCC源代码分析工具2.1 vim+ctags代码阅读工具

    本节书摘来自华章出版社<深入分析GCC >一书中的第1章,第2.1节,作者 王亚刚 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 GCC源代码分析工 ...

  7. Android 中View的绘制机制源代码分析 三

    到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...

  8. CASSINI源代码分析

    CASSINI源代码分析 2004-11-10 http://blog.csdn.net/shanhe/ 为什么要分析CASSINI? Cassini(卡西尼)是asp.net上的一个开源项目.主要给 ...

  9. RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)

    2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...

  10. openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)

    本文将openCV中的RANSAC代码全部挑选出来,进行分析和讲解,以便大家更好的理解RANSAC算法.代码我都试过,可以直接运行. 在计算机视觉和图像处理等很多领域,都需要用到RANSAC算法.op ...

最新文章

  1. 浅析高端网站建设策划方案都包括哪些内容?
  2. 高等数学:第七章 空间解析几何(1)空间解析几何与向量代数 向量的加减法、数乘、坐标
  3. python 使用 sorted 对 列表嵌套元组的数据进行排序
  4. 电脑屏幕保护怎么取消_怎么监控员工电脑?老板如何知道员工上班在干什么?...
  5. QT的QQuickStyle类的使用
  6. Day11多态部分-1 【1.1 多态的体现】
  7. 视不可当:信息图与可视化传播
  8. Win10系统浏览器字体乱码如何解决
  9. 高颜值可定制在线绘图工具
  10. 久等了,你要的 Python 书籍推荐,来了
  11. Gradle发布项目到 maven 之novoda/bintray-release(3)
  12. Web项目中时间格式化的方法
  13. JS获取手机型号和系统版本
  14. 风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程
  15. CAD手机看图软件中如何根据已知坐标点绘制线段?
  16. zonecreate
  17. 利用声音传感器控制led灯功能_树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED...
  18. 分享一个很酷很炫的html5特效网站源码
  19. 人工智能之数学基础篇—高等数学基础(下篇)
  20. 【矩阵基础与维度分析】【公式细节推导】矩阵非线性最小二乘法泰勒展开

热门文章

  1. Python学习笔记8—Python函数
  2. C++引用,常量优化,四种类型转换符
  3. [Linux] ubuntu server sudo出现sudo:must be setuid root 完美解决办法
  4. innerHTML 插入 script 脚本正确执行的处理方式
  5. 数论知识(2)-------------欧拉函数
  6. OleDb驱动调用Oracle存储过程出错:ORA-06502
  7. 用OCR技术识别验证码---tesseract
  8. 这些年我用过的6个API接口在线管理平台
  9. Spring Boot + WebMagic 实现网页爬虫,写得太好了!
  10. 2018年双十一:计算机品类纸质书籍销量冠军