- 博客(21)
- 资源 (8)
- 收藏
- 关注
原创 矩阵乘法脉动阵列的C++模拟
自从谷歌的TPU问世以后,被人们遗忘很久的脉动阵列又再次火了一把。矩阵乘法就可以用脉动阵列进行计算,而脉动阵列这种数据流又特别适合用硬件进行实现。下面是用脉动阵列进行矩阵乘法的示意图。可以看到,A的每一行不是同时进入脉动阵列的,而B的每一列也不是同时进入脉动阵列的,相邻行或列进入脉动阵列的时间恰好相差一个时钟周期。以下是用c++模拟脉动阵列的代码:#include <iostream>#include <cstdlib>#include <ctime>
2020-10-30 20:57:13 1040 1
原创 ShiDianNao的c++实现
#include"cfg.h"#include<iostream>#include<cstdlib>#include<ctime>using namespace std;class PE{public: int weight; int feature; int acc;public: void calc(){ acc+=weight*feature; return; }};class
2020-10-27 11:01:29 227
原创 循环分块对减少off-chip memory access的具体分析
如图,我们要计算NaN_aNa个t(i)t(i)t(i)和NbN_bNb个r(j)r(j)r(j)两两之间的距离,这是未进行分块的原始代码,假设cache(或者片上缓存)的容量为M个向量,并假设NaN_aNa和NbN_bNb远大于MMM,则对每个i,我们从片外存储器load一个ttt,并且从片外存储器load M-1个rrr,进行M-1次的距离计算后,这M-1个r便被替换出cache,转而加载下一组M-1个的r,因此,对每个确定的i,需要进行约[NbM−1][\dfrac{N_b}{M-1}][M.
2020-10-22 21:22:10 411
原创 N皇后问题的拉斯维加斯算法和回溯算法
#include<iostream>#include<cstdlib>#include<ctime>#define N 8using namespace std;int T[100]; //(i,T[i])指放在第i行第T[i]�?int k=0; //当前已经放置了多少行bool place(int j);void backtrace(){ //当前已经放置完第1,2,3...k行,从第k+1行开始回�?
2020-10-22 15:50:40 1007
转载 Graph Convolutional Network(GCN)
layers.pyimport mathimport torchfrom torch.nn.parameter import Parameterfrom torch.nn.modules.module import Moduleclass GraphConvolution(Module): def __init__(self, in_features, out_features, bias=True): super(GraphConvolution, self).__
2020-10-20 18:37:37 284
原创 EIE稀疏矩阵乘法硬件模拟
#include<iostream>#include<cstdlib>#include<ctime>#include <iomanip>using namespace std;typedef int dtype;typedef struct CSC{ int a; //存储非零元素个数 int n; //存储列数 dtype* v; //存储非零值
2020-10-19 16:17:38 326
原创 LSQ+的pytorch实现
import torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Functionclass Round(Function): @staticmethod def forward(self, input): output = torch.round(input) return output @staticmethod def backward
2020-10-17 21:48:23 830
原创 稀疏矩阵CSR存储的C++实现
实现了稀疏矩阵的生成(指定稀疏程度)、稀疏矩阵转换为CSR、从CSR中恢复出矩阵、稀疏矩阵和向量的乘法等功能。从运行结果来看,稀疏矩阵存储为CSR格式和向量相乘的运行速度快于普通矩阵向量乘法,而且稀疏程度越高,优势越明显。#include<iostream>#include<cstdlib>#include<ctime>#include<stdio.h>typedef int dtype;using namespace std;void csr_
2020-10-16 20:53:11 4530 2
原创 LEARNED STEP SIZE QUANTIZATION论文复现
import torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Functionclass Round(Function): @staticmethod def forward(self, input): output = torch.round(input) return output @staticmethod def backward
2020-10-15 23:23:51 528 2
原创 论文阅读-LEARNED STEP SIZE QUANTIZATION
一.TitleLEARNED STEP SIZE QUANTIZATION二.Abstract&Introductionwhy?近年来,神经网络作为一种许多革命性技术的组成部分开始崭露头角,比如图像识别、语音识别以及自动驾驶等。但是,要利用好这一技术并大规模应用需要开发者有一个系统性的视角,即要兼顾网络的性能、吞吐率、能效以及紧凑程度。现在很多研究者都致力于在保持网络精度的同时,用低精度的数据去表示权重和激活,这种方法使得模型的大小以及计算量大大降低。因此,如何在降低精度的同时尽可能保持网络
2020-10-15 19:59:34 1708 4
原创 BN融合的量化感知训练及其uint8推理的模拟
上一篇博客介绍了如何进行量化感知训练,并进行uint8前向推理,但是没有将BN层进行融合,这使得模型推理时的计算复杂度仍然有改进的空间,本篇博客讲述了如何进行BN融合的量化感知训练,并在训练完成后进行了uint8推理的模拟,以方便今后在FPGA上的部署。代码:from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport torchi
2020-10-15 10:21:07 1422 6
原创 uint8量化感知训练mnist手写体识别
import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch import distributedfrom torch.nn import initfrom torch.nn.parameter import Parameterfrom torch.autograd import Function# ********************* range_trackers(范围统计器,统计量化前范围) *
2020-10-14 18:06:22 856 1
原创 BNN训练MNIST数据集
from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport torch.nn as nnimport torchimport torch.nn.functional as Ffrom torch.autograd import Function# ********************* 二值(+-1) *********
2020-10-13 16:19:31 1006 2
原创 论文阅读6:MeliusNet
一.TitleMeliusNet: Can Binary Neural Networks Achieve MobileNet-level Accuracy?二.Abstract&Introductionwhy?深度神经网络在众多机器学习领域取得了巨大的成功,人们也在不断设计更大、更复杂的网络以追求更高的准确率,然而,深度神经网络巨大的参数数目和计算量阻止了其在移动和嵌入式设备上的应用,针对这一问题,人们做了许多工作来减少模型大小、加速推理速度,主要可以分为三个研究方向:一是模型剪枝技术,二是
2020-10-12 15:35:19 812
原创 论文阅读笔记5-An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture
一、TitleAn Asynchronous Energy-Efficient CNN Acceleratorwith Reconfigurable Architecture二、Abstract & Introductionwhy?卷积神经网络在计算机视觉领域被广泛使用,并且展示了它在图像分类、目标检测以及视频监控等方面的巨大优势。传统上 ,卷积神经网络的推断过程在CPU和GPU上完成,但是,CPU计算资源有限,并行度不够,而GPU虽然在计算方面强于CPU,但是GPU有着极高的功耗,ASI
2020-10-10 21:30:26 691
原创 ShiDianNao中的数据组织
在ShiDianNao中,NBin和NBout有2∗Py个Bank,每个Bank分为许多行,每行Px∗2字节,即每行Px个16位定点数2*P_y个Bank,每个Bank分为许多行,每行P_x*2字节,即每行P_x个16位定点数2∗Py个Bank,每个Bank分为许多行,每行Px∗2字节,即每行Px个16位定点数,下面讲讲具体的数据组织方式(困扰了我很久)如图11所示,首先,将Nyin∗Nxin的输入特征按照Py∗Px进行分块N_{yin}*N_{xin}的输入特征按照P_y*P_x进行分块Nyin.
2020-10-09 21:57:13 215
原创 论文阅读4:ShiDianNao
一、TitleShiDianNao: Shifting Vision Processing Closer to the Sensor二、Abstractwhy?尽管近年来神经网络在很多领域都表现出色,但是神经网络的能效和性能都受限于访存,这在计算机视觉领域主要是指CNN(卷积神经网络),因此,如果要进行CNN在边缘应用中的推广,这是一个必须解决的问题。how?本文中,作者利用卷积神经网络权重共享的特性,提出了一个叫做ShiDianNao的加速器,它充分进行了数据复用,消除了对DRAM的访问,并且
2020-10-09 13:59:49 920
原创 生成不重复的随机数
问题:生成[0,N-1]区间内的n个互不相同的随机数。解决思路:首先,生成一个长度为N的数组,然后将其打乱,取前n个数,即为上述问题的解。为了验证上述方法产生的随机数是符合要求的,我们用下面的方法来检验。每次随机的从[0,N-1]中选取n个数,记它们的和为X,则X的期望可以计算如下:这样选取n个数总共有CNnC_N^nCNn中取法,这么多取法总共取出了CNn∗nC_N^n*nCNn∗n个数,而0,1,2,…N-1这N个数出现的概率是相同的,因此每个数出现了n∗CNnN\dfrac{n*C_N^n
2020-10-07 21:38:02 1019
原创 有序表搜索
#include<iostream>#include<algorithm>#include<ctime>#include<cstdlib>#include<set>#pragma GCC optimize("Ofast")using namespace std;int rand_int(int a,int b);void non_repeat(int n,int *a){ set<int> s; wh
2020-10-07 19:58:04 313
转载 windows和ubuntu双系统卸载ubuntu的安全方法
若启动方式为legacy引导,则使用Mbrfix。若启动方式为UEFI,则使用easyUEFI。链接
2020-10-06 16:53:49 187
原创 python中的NotImplementedError
class A(): def __init__(self): self.name='Tom' def func(self): raise NotImplementedError def get_sex(self): if self.sex=='man': print("男") else: print("女")class B(A): def __init__(self)
2020-10-04 19:37:08 2691
基于FPGA的HLS CNN加速器
2022-03-26
pingpang_block_mm.rar
2020-11-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人