caffe源代码分析--math_functions.cu代码研究
当中用到一个宏定义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代码研究相关推荐
- 你绝对能看懂的Kafka源代码分析-KafkaConsumer类代码分析
目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...
- Linux内核源代码分析——vmstat核心代码注释
一次和圈子里的朋友群聊的时候,谈到了vmstat的实现机制.我当时正在轻轨上,幻想着从轻轨飞下去的快感.在轻轨上我发表了自己的一些看法,不过都是意淫. 现在,已经过去半周了,今天终于闲下来把vmsta ...
- 你绝对能看懂的Kafka源代码分析-RecordAccumulator类代码分析
目录: <Kafka Producer设计分析> <KafkaProducer类代码分析> <RecordAccumulator类代码分析> <Sender类 ...
- MediaInfo源代码分析 5:JPEG解析代码分析
===================================================== MediaInfo源代码分析系列文章列表: MediaInfo源代码分析 1:整体结构 Me ...
- 网络游戏源代码分析_为您的游戏选择正确的网络代码
网络游戏源代码分析 We evaluated and researched today's most popular netcode frameworks for multiplayer games ...
- 《深入分析GCC 》——第2章 GCC源代码分析工具2.1 vim+ctags代码阅读工具
本节书摘来自华章出版社<深入分析GCC >一书中的第1章,第2.1节,作者 王亚刚 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 GCC源代码分析工 ...
- Android 中View的绘制机制源代码分析 三
到眼下为止,measure过程已经解说完了,今天開始我们就来学习layout过程.只是在学习layout过程之前.大家有没有发现我换了编辑器,哈哈.最终下定决心从Html编辑器切换为markdown编 ...
- CASSINI源代码分析
CASSINI源代码分析 2004-11-10 http://blog.csdn.net/shanhe/ 为什么要分析CASSINI? Cassini(卡西尼)是asp.net上的一个开源项目.主要给 ...
- RTMPdump(libRTMP) 源代码分析 9: 接收消息(Message)(接收视音频数据)
2019独角兽企业重金招聘Python工程师标准>>> 注:此前写了一些列的分析RTMPdump(libRTMP)源代码的文章,在此列一个列表: RTMPdump 源代码分析 1: ...
- openCV中的findHomography函数分析以及RANSAC算法的详解(源代码分析)
本文将openCV中的RANSAC代码全部挑选出来,进行分析和讲解,以便大家更好的理解RANSAC算法.代码我都试过,可以直接运行. 在计算机视觉和图像处理等很多领域,都需要用到RANSAC算法.op ...
最新文章
- 浅析高端网站建设策划方案都包括哪些内容?
- 高等数学:第七章 空间解析几何(1)空间解析几何与向量代数 向量的加减法、数乘、坐标
- python 使用 sorted 对 列表嵌套元组的数据进行排序
- 电脑屏幕保护怎么取消_怎么监控员工电脑?老板如何知道员工上班在干什么?...
- QT的QQuickStyle类的使用
- Day11多态部分-1 【1.1 多态的体现】
- 视不可当:信息图与可视化传播
- Win10系统浏览器字体乱码如何解决
- 高颜值可定制在线绘图工具
- 久等了,你要的 Python 书籍推荐,来了
- Gradle发布项目到 maven 之novoda/bintray-release(3)
- Web项目中时间格式化的方法
- JS获取手机型号和系统版本
- 风车IM即时通讯聊天系统源码_聊天APP_附APP_带安装教程
- CAD手机看图软件中如何根据已知坐标点绘制线段?
- zonecreate
- 利用声音传感器控制led灯功能_树莓派 LED+蜂鸣+声音传感器+红外模块组合打造声控/红外控制LED...
- 分享一个很酷很炫的html5特效网站源码
- 人工智能之数学基础篇—高等数学基础(下篇)
- 【矩阵基础与维度分析】【公式细节推导】矩阵非线性最小二乘法泰勒展开
热门文章
- Python学习笔记8—Python函数
- C++引用,常量优化,四种类型转换符
- [Linux] ubuntu server sudo出现sudo:must be setuid root 完美解决办法
- innerHTML 插入 script 脚本正确执行的处理方式
- 数论知识(2)-------------欧拉函数
- OleDb驱动调用Oracle存储过程出错:ORA-06502
- 用OCR技术识别验证码---tesseract
- 这些年我用过的6个API接口在线管理平台
- Spring Boot + WebMagic 实现网页爬虫,写得太好了!
- 2018年双十一:计算机品类纸质书籍销量冠军