C++代码优化
a flying bird
永远飞翔的鸟
展开
-
为什么模板函数应该定义在头文件内
为什么模板函数应该定义在头文件内原创 2022-08-14 22:12:38 · 520 阅读 · 0 评论 -
系统性能分析工具:perf
系统性能分析工具:perf原创 2022-06-04 22:45:07 · 239 阅读 · 0 评论 -
caffe卷积神经网络中im2col 详解
转载:caffe im2col详解本文讲解的是caffe中卷积过程,众所周知caffe中卷积采用的是im2col和sgemm的方式。网上已经有很多的im2col的讲解。原本不打算写这篇文章(在此不得不吐槽下,网上有不少的讲解caffe im2col的过程的文章多是错的。一些文章和caffe的具体实现对不上,真不知道他们到底有没有看caffe代码的具体实现,正是因为那些文章,浪费了不少时间。)本文举例讲解caffe中im2col 和 sgemm的具体过程。在此之前先说明下:caffe中的数据是行优转载 2020-10-25 22:10:07 · 675 阅读 · 1 评论 -
darknet中gemm实现
darknet对卷积计算的处理实际上是:先使用im2col将input_channel*(height*width)的输入特征图(实际存储是按照行存储的,即是1*(input_channel*height*width)的一维数组)转化成(input_channel*kernel_size*kernel_size)*(out_height*out_width)的特征矩阵,这里同样是按行存储的。之后通过gemm函数实现通用的矩阵乘法实现卷积计算,即让卷积核矩阵*im2col后的输入特征矩阵。其中卷积核的原创 2020-10-24 10:48:58 · 714 阅读 · 0 评论 -
c++的矩阵乘法加速trick
最近读RNNLM的源代码,发现其实现矩阵乘法时使用了一个trick,这里描述一下这个trick。首先是正常版的矩阵乘法(其实是矩阵乘向量)void matrixXvector(float* destvect, float* srcmatrix, int srcmatrix_rownum, int srcmatrix_colnum, float* srcvect, int srcvect_size){ for(int row=0;row<srcmatrix_rownum;++row){原创 2020-10-18 09:16:05 · 755 阅读 · 0 评论 -
-O1 -O2 -O3 优化的原理是什么?
一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的目标。当优化标识被启用之后,gcc编译器将会试图改变程序的结构(当然会在保证变换之后的程序与源程序语义等价的前提之下),以满足某些目标,如:代码大小最小或运行速度更快(只不过通常来说,这两个目标是矛盾的,二者不可兼得)。 O1优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进...原创 2020-10-17 22:26:16 · 10563 阅读 · 1 评论 -
BLAS之GEMM和GEMV
BLAS简介BLAS全称是Basic Linear Algebra Subprograms是规定了一套低级的执行常见线性代数操作的规范。其实现经常针对特殊的机器进行优化,比较著名的·BLAS库有ACML, ATLAS, MKL, OpenBLAS。许多常见的数值软件均采用兼容BLAS规范的实现库来进行线性代数计算,比如Matlab, Numpy, Mathematica`。其中,Level 1 BLAS主要提供向量操作Level 2 BLAS提供矩阵向量操作(gemv)gemv原创 2020-10-17 09:56:28 · 8970 阅读 · 0 评论