《智能计算系统》第五章

第五章 编程框架机理

5.1 TensorFlow设计原则

​ TensorFlow的设计原则主要集中在三方面:高性能、易开发、可移植。

5.1.1 高性能

​ 首先,TensorFlow中集成的算子在设计过程中已经针对底层硬件架构进行了充分的优化;同时,针对生成的计算图,TensorFlow提供了一系列的优化操作,提升了计算图的运行效率;并且TensorFlow调度器可以根据网络结构的特点,并行运行没有数据依赖的节点,异步发射满足依赖关系的多个节点而不同步等待每个节点的中间结果。

阅读更多

《智能计算系统》第六章

第六章 深度学习处理器原理

6.1 深度学习处理器概述

6.1.1 深度学习处理器的意义

​ 随着神经网络算法的发展,神经网络从只有输入和输出层的感知机,发展到有一个隐层的多层感知机,再到深度神经网络。在这个过程中,伴随着神经网络的层数、神经元数量、突触数量的不断增长,传统芯片CPU、GPU已经难以满足神经网络不断增长的速度和能效需求。由此诞生了深度学习处理器。

阅读更多

《智能计算系统》第七章

第七章 深度学习处理器架构

​ 为了满足智能终端的实际应用需求,DLP-S在DLP的基础上对控制部件、运算部件和存储部件进行了优化,在降低功耗的同时提升了性能。

7.1 单核深度学习处理器

​ DLP-S在DLP的基础上进行了优化,主要体现在如下四个方面:

​ (1)在控制模块中设计了多发射队列,使得没有依赖关系的指令可以并行发射,从而支持指令级并行。

​ (2)在向量运算单元中添加更多的运算操作组合,提高性能和灵活性。

​ (3)在矩阵运算单元中采用低位宽的运算器,并且支持稀疏数据,减少运算能耗。

​ (4)在存储模块中采用TLB和LLC减少了访存的延迟。

阅读更多

《智能计算系统》第八章

第八章 智能编程语言

8.1 为什么需要智能编程语言

​ 传统编程语言和智能计算系统存在三方面的鸿沟:一是语义鸿沟,传统编程语言无法高效地描述高层智能计算语义,导致开发智能应用程序效率低下;二是硬件鸿沟,传统编程语言难以高效地抽象智能计算硬件特性,导致最终生成的代码的执行效率较低;三是平台鸿沟,智能计算硬件平台种类繁多并且在不断增长,传统编程语言难以实现跨平台可移植,针对特定平台优化的程序难以实现在不同平台上的高效执行。

阅读更多

FFT算法介绍

快速傅里叶变换(FFT)

​ FFT的任务就是将多项式的系数表示法转化为点值表示法,再由点值表示法转化为系数表示法的过程。前面的过程称为求值(DFT),后面的过程称为插值(IDFT)。

​ 任取n+1个互不相同的$S=\lbrace p_1,p_2,…,p_{n+1}\rbrace$,对$f(x)$分别求值后得到$f(p_1),f(p_2),…,f(p_{n+1})$,此时称$A(x)=\lbrace(p_1,f(p_1)),(p_2,f(p_2)),…,(p_{n+1},f(p_{n+1}))\rbrace$为多项式f(x)在S下的点值表示法。

​ 得到一个n次多项式的点值表示法需要代入n+1个数到多项式里面去,如果只是随意选取n+1个,每个数值的计算复杂度为O(n),那么n+1个数值的计算复杂度将仍然是O(n²),因此想到了利用奇偶函数的对称性代入,这样计算量就变为了原来的一半,之后不断递归,但由于后续的递归过程如果代入的是实数平方,后续递归将不能进行。由此便引入了复数。通过将n次单位根组成S,记$A_0(x)$为偶次项和,$A_1(x)$为奇次项和:
$$
A_0(x)=a_0x^0+a_2x^1+…+a_{n-1}x^{\frac{n}{2}}
$$
$$
A_1(x)=a_1x^0+a_3x^1+…+a_{n-2}x^{\frac{n}{2}}
$$

于是有$A(\omega_n^m)=a_0\omega_n^0+a_1\omega_n^m+a_2\omega_n^{2m}+a_3\omega_n^{3m}+…+a_{n-1}\omega_n^{(n-1)*m}+a_n\omega_n^{nm}$

之后:$A(\omega_n^m)=A_0((\omega_n^m)^2)+\omega_n^mA_1((\omega_n^m)^2)=A_0(\omega_\frac{n}{2}^m)+\omega_n^mA_1(\omega_\frac{n}{2}^m)$

$A(\omega_n^{m+\frac{n}{2}})=A_0((\omega_n^m)^2)+\omega_n^{m+\frac{n}{2}}A_1((\omega_n^m)^2)=A_0(\omega_\frac{n}{2}^m)-\omega_n^mA_1(\omega_\frac{n}{2}^m)$

因此递归的FFT伪代码为:

1
2
3
4
5
6
7
8
9
10
11
12
def FFT(A)
# A-[a0,a1,...,an-1]
n=len(A)
if n==1:
return A
A0,A1=[a0,a2,...,an-2],[a1,a3,...,an-1]
a=[0]*n
for i in range(n/2):
a[i]=a0[i]+w*a1[i];
a[i+n/2]=a0[i]-w*a1[i]
w=w*wn
return a

硬件加速背景以及卷积神经网络优化

大数据时代的到来,数据呈爆发式增长的态势,深度学习技术不断发展,比如图像识别、语音识别和自然语言处理等。但是这些深度学习技术都有着极为庞大的计算量,对芯片的性能功耗要求很高,现今,比较热门的比如神经网络被广泛应用于人工智能应用之中,而传统的通用芯片再处理复杂神经网络的时候收到了带宽和能耗的限制,因此就推动了人们对深度学习硬件加速器的研究,目前主流的硬件加速器有三类:GPU、ASIC和FPGA。
  • GPU:与传统CPU不同,GPU的内部拥有大量的逻辑计算单元,远超其中的控制单元和寄存器的规模;GPU拥有一些存储单元可以使得GPU线程之间可以共享这些内存而不依赖于全局内存;GPU拥有相对高速且内存带宽相对较大的全局内存。

  • ASIC:针对某一个或者某一类算法进行硬件定制,通常来说,相对于其他硬件加速器,ASIC加速深度学习算法能取得较高的性能和功耗,但是其开发周期长,成本高,缺乏灵活性。

  • FPGA:与其他硬件加速其不同的是FPGA具有可编程性,也就是FPGA内部的逻辑块是可以通过编程进行调整的,因此灵活性较高,并且也拥有不错的性能和较低的功耗。现阶段,GPU更适合深度学习算法的训练阶段,FPGA更适合深度学习算法的推理阶段。

阅读更多

轻量级神经网络架构

1. 人工设计的轻量级神经网络模型

1.1 使用小卷积核代替大卷积

​ 使用多层小卷积核代替一层大卷积核,可以减少网络的参数。如图所示:

例如使用两层3×3的卷积核代替5×5的卷积核,其卷积核的参数量可以从25减少到18,对于输入大小为 H×W×Cin 的特征,输出为 H×W×Cout 大小的特征图时,其浮点运算数从H×W×Cin×Cout×5²减少到了2×H×W×Cin×Cout×3。对于图b使用1×3核3×1的卷积核代替3×3的卷积核,可以使得参数量减少为原来的1/3。

阅读更多

三色灯控制实现

数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或者多个元素组成,由于数组的长度是固定的,所以在Go中很少使用。所以不作过多介绍。

数组的初始化的两种方式:

1
2
var r = [3]int{1, 2, 3}
q := [...]int{1, 2, 3} //语法糖
阅读更多

EdgeX实现温湿度数据读取

在linux环境中进行测试

​ 起初在win环境下可以通过使用商家提供的软件进行连接获取数据,但是在linux环境下不能连接。

​ 之后通过设置树莓派eth0为静态ip,再ping 192.168.0.88 则可以发现该设备。

阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×