![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并行计算
文章平均质量分 71
singing1001
码农
展开
-
模型计算力(flops)和参数(parameters)
模型计算力(flops)和参数(parameters) https://zhuanlan.zhihu.com/p/144938518提纲:Ø 参数量Ø FLOPS\FLOPs\GFLOPsØ 浮点运算和参数量的区别Ø 不能绝对的用FLOPs作为速度衡量的原因——MAC\并行度\平台参数量:CNN:一个卷积核的参数 = k*k*Cin+1一个卷积层的参数 = (一个卷积核的参数)*卷积核数目=k*k*Cin*Cout+CoutFLOPS:...转载 2021-06-02 17:51:35 · 3046 阅读 · 0 评论 -
Hi3516 SDK 安装以及升级使用说明
本文转载自:http://blog.sina.com.cn/s/blog_63eaeced0102ux4k.html第一章 Hi3516_SDK_V1.x.x.x版本升级操作说明如果您是首次安装本SDK,请直接参看第2章。第二章 首次安装SDK1、Hi3516 SDK包位置在"Hi3516_V100R001C01/01.softwar...转载 2019-03-04 14:58:48 · 1931 阅读 · 0 评论 -
aarch64中相对于arm32中,NEON多支持的指令
先记录一下,慢慢补充!vzip1q原创 2019-02-20 17:42:44 · 2360 阅读 · 0 评论 -
conv3x3s1_winograd64_neon5非NEON实现的输入数据转换部分
输入数据的转换的具体处理流程如下:设outw =(top_blob.w+5)/6*6,即outw是top_blob.w扩展,为能被6整除的自然数;同样,outh=(top_blob.h+5)/6*6,为能被6整除的自然数; 设w = outw +2,h=outh + 2;w_tm= outw / 6 * 8,int h_tm = outh / 6 * 8; 分配Mat type的变量bot...原创 2019-01-03 11:33:28 · 651 阅读 · 0 评论 -
conv3x3s1_winograd64_transform_kernel_neon5的非NEON实现,
conv3x3s1_winograd64_transform_kernel_neon5的非NEON实现这里面的变换的理论依据,我还是没有搞清楚,先闷着头继续看了,希望高人能指点一二,谢谢!函数:void conv3x3s1_winograd64_transform_kernel_neon5(const Mat& kernel, Mat& kernel_tm, int inc...原创 2019-01-02 16:07:21 · 781 阅读 · 0 评论 -
多项式运算性能比对
有原始按照每次项相乘的方式来计算和使用horner方法进行多项式求和运算;使用原始计算方法,代码如下: double poly_original(double *a, double x, long degree) { long i; double result = a[0]; double xpwr = x; ...原创 2019-01-02 13:23:31 · 445 阅读 · 0 评论 -
中国剩余定理
中国剩余定理,在给定模数和求模后的余数,且模数是质数,且被求模的数是小于所有模数积的正整数,则可以唯一确定该正整数。中国剩余定理数学描述如下:在给定对于,,它标识“c除以模数后的余数”,这里的模数是两两互质的。那么,可以在范围内可以得到唯一的正整数c,,mod是求模运算。这里,,,是模 的数论倒数( 为 模 意义下的逆元),即,可以通过公式求得。其中,GCD标识“ gr...原创 2018-12-26 11:18:57 · 191 阅读 · 0 评论 -
ncnn使用winograd的卷积实现条件及基本流程
NCNN的winograd卷积使用条件是:kernel为3x3,stride为1x1,kernel的扩展系数为1x1 输入和输出的channel个数大于等于32,小于等于128 bottom_blob padding后的blob 的width和height小于等于120Winograd的卷积实现主要有如下几个步骤:把kernel data进行扩充为8x8,并重新排列; 把bott...原创 2018-12-28 13:34:51 · 2326 阅读 · 1 评论 -
基于块的矩阵相乘与常规的相乘的对比试验
因为基于块的矩阵相乘会比较好的利用缓存机制,作如下试验,测试一下性能。测试代码如下: #include <stdio.h> #include <iostream> #include <string> #include <malloc.h> #include <memory.h> #in...原创 2018-12-17 17:56:25 · 229 阅读 · 0 评论 -
NEON的Registers, vectors, lanes and elements
NEON的Registers, vectors, lanes and elementsNEON指令和浮点指令使用相同的寄存器文件,称之为“NEON和浮点寄存器文件”。它跟ARM core 寄存器文件完全区分开。NEON和浮点寄存器文件是一组可以作为32-bit、64-bit或128-bit的寄存器来访问。对于一个指令,哪个寄存器是可用的依赖于它是一个NEON指令还是一个VFP指令。本文把N...原创 2018-12-17 14:29:20 · 560 阅读 · 0 评论 -
Winograd算法
Winograd算法描述如下:选择一个多项式,它的值要比大。然后,把它分解为k+1个互质的实系数多项式相乘,例如, 设。求解,得到。 计算出 和 ,这里,i=0,1,...,k 。 计算出 , 这里,i=0,1,...,k 。 通过使用,计算出。 完成。就是的乘积。...原创 2018-12-26 15:00:36 · 1662 阅读 · 0 评论 -
比较NEON与其它的技术实现
比较NEON与其它的技术实现 NEON与ARMv6 SIMD的比较 ARMv6架构引入了一个很小的SIMD指令集,它能够并行执行打包到标准32-bit通用寄存器的多个16-bit或8-bit值。这些指令在没有增加额外计算单元情况下,提升了2倍或4倍的速度。ARMv6 SIMD 指令“UADD8 R0, R1, R2”并行执行一个32-bit寄存器里的4个8-bit值与另一个32-bit寄...原创 2018-12-14 17:41:08 · 1244 阅读 · 0 评论 -
openblas的调用序列
因为要多线程并行计算,基于矩阵相乘的原理,把乘矩阵的列和被乘矩阵的行,根据线程数均匀的分配给各个任务队列。至于后面怎么进一步分解成更小的向量进行运算,我没有搞清楚,希望有高人指点啊,多谢! ...原创 2018-11-26 16:38:53 · 302 阅读 · 0 评论 -
1.1输入矩阵展开(im2col_cpu函数的解读)
函数原型:void im2col_cpu(const Dtype* data_im, const int channels,const int height, const int width, const int kernel_h, const int kernel_w,const int pad_h, const int pad_w,const int stride_h, const int s...原创 2018-11-23 17:32:38 · 1117 阅读 · 0 评论 -
15.1双调排序(Bitonic sort)
概述双调合并排序(Bitonic mergesort)是一个并行排序算法。它也用作建立一个排序网络的一种构造方法。这个算法是由Ken Batcher提出来的。基于它生成的排序网络包含了个比较操作和的延时,这里的n是要排序的元素个数。一个排好序的序列是一个单调非降(或单调非增)序列。一个双调序列是一个满足对于特定的k(),,或者是该序列的循环移位序列。例如, 或者 ...原创 2018-11-14 17:16:14 · 1514 阅读 · 0 评论 -
GCC中的NEON相关的编译选项
GCC的命令行参数 主要的选项是-mcpu, -mfpu, and -mfloat-abi。 指定CPU的选项 2.9.1 Option to specify the CPU使用 -mcpu=cpu-name,其中cpu-name是使用小写字符的处理器名称,例如, Cortex-A9 的该选项为 -mcpu=cortex-a9。 CPU ...原创 2018-11-07 10:08:15 · 10505 阅读 · 0 评论 -
数据处理技术简介
数据处理技术简介 Single Instruction Single Data 每个操作符指定要处理的单个数据源。如果要处理多个数据项,则需要多个指令。如下代码使用了4个指令完成8个寄存器相加。 add r0, r5 add r1, r6 add r2, r7 add r3, r8 Single Instruction Mu...原创 2018-11-02 15:41:38 · 1349 阅读 · 0 评论 -
NEON的vmulq_lane_f32与vmlaq_lane_f32的使用
__extension__ static __inline float32x4_t __attribute__ ((__always_inline__))vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane){ return __a * __aarch64_vget_lane_f32 (__b, __lane)...原创 2018-11-09 14:14:52 · 3395 阅读 · 0 评论