控制流与数据流分析

控制流与数据流分析
控制流与数据流分析

第七章控制流分析

优化需要从程序中获得足够多的信息。控制流分析就是用来获取程序控制结构信息的形式化分析方法,它是数据流分析,依赖分析的基础。

7.1控制流分析方法概述

7.1.1过程内控制流分析方法主要有下面3种:

1.用dominator图找出循环,把循环标记出来供后面的优化使用。因为循环是程

序中最值得改进的地方,所以这种方法广泛被现在的编译器采用。

2.Interval分析:这是一类分析方法的统称,用来分析单个过程的结构,并把它

分解成为一系列有层次的结构称为interval。这些结构的层次关系可以用一棵树来

表示,就叫控制树。接下来许多分析和优化就可以基于控制树来做。

3.结构分析:结构分析是Interval分析中的特别重要且有代表性的一种,而且它

在许多编译器或优化方法中被用到,所以单独作为一种控制流分析方法。

这三种分析方法各有优劣之处,且三种方法并不是互相隔离的,具体实现时可以根据需求做出折衷选择。

7.1.2控制流图和BB

上面三种分析方法都是基于控制流图(CFG)的基本单元BB来做的。因为控制流图和BB大家都知道,所以这里省略它们的基本概念。只是在识别BB的方法

上补充一点:对call语句的处理。

对call语句的处理:一般情况下call语句调用目标过程后会返回call语句顺序的下一条语句。这时call语句和它顺序的下一条语句都不会被作为入口语句。

但是,如果一个call语句有好几个返回地址(例如:Fortran中有alternate返回地

址),那么call语句的下一条语句就应该作为入口语句,否则BB中将有一条既

不是顺序执行又不在BB末尾的指令。C库函数中的setjump( )和longjump( )也

有类似情况。

7.13 EBB

EBB与控制流分析的关系不大,只是因为刚介绍了BB,所以把EBB也顺带介绍一下。EBB跟BB相比可以使指令调度这种局部优化在选择指令时范围更宽。

介召EBB之前先要知道join node

1. join node的概念:若一个节点不止一个前驱(随便有几个后继),那么该节点就

叫做join node。

2. EBB:除了第一个节点外,其余节点都不是join节点的最大CFG子图。(这

里的第一个节点指的是唯一一个前驱不在该EBB之内的节点,其余节点都不是

join节点因而只有唯一前驱,而且前驱属于该EBB之内,所以一个EBB就是以

join节点为根的一棵树) 图可见《muchnick一书》p177 Fig7.8

完全对称的,我们可以有branch node和reverse EBB的概念,这里略。

3.找EBB的算法:《muchnick一书》p176 Fig7.6 7.7

Build_EBB(r, succ, pred):

作用:给定某个join node,求以它为根的EBB树。

思想:它调用Add_Bbs( )从join节点r出发在CFG上做深度优先搜索,若遇

到非join节点就把它加入该EBB,然后沿该节点继续深度优先搜索;若遇到

join节点就把它放入一个单独的集合EbbRoots里,然后控制返回它的父节点

继续搜索。

Build_All_Ebbs(r, succ, pred):

作用:找到CFG中所有EBB

思想:把CFG的根放入EbbRoots集合里,并把它作为r调用Build_EBB(r, succ,

pred);然后对EbbRoots中的join node队列依次调用Build_EBB(r, succ, pred),

得到所有EBB。

7.2深度/广度优先搜索,前序/后序遍历

7.3Dominators和PostDominators

7.3.1dom,idom基本概念

dominate(简写为dom) 是一个二元关系,a dom b表示从CFG的entry节点到b

节点的任意一条路径都会经过a节点。这时把a叫做b的dominator。

idom关系由dom关系得来,a idom b表示a dom b,且不存在节点c同时满足a dom

c、c dom b。

由CFG的节点集N和idom关系构成的边集组成一棵树,叫idom树,这棵树反

映了CFG上所有节点间dom和idom关系。

7.3.2求dominator和idominator

求dominator的常规算法用的是迭代计算的方法,收敛结果即所求每个节点的

domintor集合。该算法大家比较熟悉,略。

求idominator的算法要基于domintor算法的结果,用下图来简单阐述:

《muchnick 一书》p184 Fig7.15

思想:任取节点i 属于Domin(n)-{n},固定i ,依次检查Domin(n)-{n}-{i}中节点

s ,若s 属于Domin(i),则从Domin(n)中删除节点s ,因为它不可能成为节点n 的

idominator 了。检查完集合Domin(n)-{n}-{i}中剩余节点s 之后,再改变节点i ,

继续上面做的检查。直到domin(n)-{n}集合中只剩一个节点,该节点就是节点n

的idominator 。

求Postdominator 的算法与求dominator 的算法对称,只要把算法Fig7.14中

的pred 函数改为succ 函数就行了。

7.3.3 计算dominator 的快速算法

该算法的详细介绍见Lengauer and Tarjan A Fast Algorithm for Finding Dominators

in a Flowgraph

常规算法时间复杂度为O(n 2 . e),快速算法的时间复杂度为O(n . α(e,n)),α

(e,n)是ackermann 函数的倒数,增长非常缓慢。

先给一个定义sdom(w):

sdom(w) = min{ u| 存在路径v0=u,v1,…,vk=w 且vj>w (1<= j<= k-1) }

先对CFG 作深度优先搜索,搜索树为T ,里面的u ,w ,v1,…,vk 都是T 中先序遍历

的访问顺序,后面经常就用这个顺序号来指代节点。

Sdom(w)表示: 节点u 有路径到达w ,且路径上除u 之外的其它节点的序号都大于w 。取CFG 中满足这个条件且序号最小的u 作为sdom(w)。

引入sdom 函数的目的是由sdom 可以计算idom(w)

因为算法比较复杂,不能几句话说清楚,所以先给个梗概。即我们首先会给

出一些引理和定理,由它们得到sdom(w)的递推计算方法和基于sdom 函数的idom(w)的递推计算方法,然后按照特定的顺序使用递推计算方法计算得到sdom 和idom 。

引理和定理的意义不直观,可能需要了解证明过程才能清楚,可以查看上面的论

文,这里只在附录中给出最重要的定理的证明。(引理1 2 3可以先跳过不看)

引理1:如果v,w 都是G 中的点,且v<=w,那么v 到w 的任何路径都要经过v 和w 在深度

优先树T 上的公共祖先。

引理2:sdom(w) --+ w ;idom(w) -- * sdom(w)

sdom(w) --+ w 表示在T 上sdom(w)是w 的祖先,且

sdom(w)!=w

idom(w) --* sdom(w)表示在T 上idom(w)是sdom(w)的祖先,且有可能

idom(w)=sdom(w)。

引理3:如果v,w 满足v --* w ,那么或者有v --* idom(w)或者有

idom(w) --* idom(v)。

定理1:假如w!=r

sdom(w) = min({ v| (v,w)属于E and v < w }∪{ sdom(u)| u>w and 存在边(v,w)

并且满足u --* v })

定理1就是sdom(w)的递推计算式。

定理一的证明:

设X 等于上面等式的右边部分

一:证明x w sdom ≤)(

如果E w x ∈),(且w x <,那么,由sdom 的定义和x w sdom w x ≤?)(),(。 如果)(u sdom x =,u 满足w u >且v u *→且E w v ∈),(,则有路径l :从

)(u sdom 到u ,从u 到v ,从v 到w 。且)(u sdom 到u 上的节点的序号>u >w ,

从u 到v 的路径上的节点序号也是>u >w ,所以x u sdom w sdom =≤)()(

二:证明x w sdom ≥)(

w v v v v w sdom k k ==-,,...,,)(110 w vj >(,)11-≤≤k j

设k =1,即E w w sdom ∈)),((,且w w sdom w w sdom

前半部分有x =min )((...)w sdom ≤。

若k >1,则取j 是满足1*-→k j v v 的那个最小的j ,假如有11..-≤≤≤j i v v j i ,

则由引理一,存在1...-≤≤j l i v l 是i v 和j v 的公共祖先,即1*-→+→k j l v v v ,这与j 的取法矛盾。所以11..-≤≤≥j i v v j i

所以存在路径)(w sdom ,1v 一直到j v 且路径上的点除了两端点外都大于等于j v ,

这说明)(w sdom )(j v sdom ≥,又

x v sdom E w v v v w v j k k j j ≥?∈→>--)(),(,*,11,所以x w sdom ≥)(

综合一二,可知x w sdom )(。

定理2:如果每一个满足sdom(w) --+ u --* w 的u 都同时满足sdom(u) >= sdom(w),那么idom(w) = sdom(w)

定理3:假设u 是满足sdom(w) --+ u --* w 并且使sdom 值最小的那个u ,那么

u 满足sdom(u) <= sdom(w),且idom(w) = idom(u)

由定理2和定理3得到推论:

推论1:假设w!=r ,u 是满足sdom(w) + u * w 并且使sdom 值最小的那个u ,那

么有

idom(w) = sdom(w) if sdom(w) = sdom(u)

idom(w) = idom(u) if sdom(w) > sdom(u)

这就得到了基于sdom 函数的idom(w)的递推计算式。

上面这些定理比较烦杂,有用的是定理1、2、3和推论,其它都是为了证明这些而

给出的。

算法的步骤:

(1) 算法首先对CFG 做深度优先搜索,按先序遍历次序给各个节点编号。

(2) 按照递减次序,用定理1计算各个节点sdom 函数值

(3) 按照递减次序, 用推论1计算各个节点的idom 函数值,这里要说明的是推

论1计算idom 函数值分两种情况,第一种情况下计算idom(w)时sdom(w)

已经得到,对应于下面图1的step3;而第二种情况下计算idom(w)时

idom(u)还没得到,这时idom(w)中记录序号u ,等递减遍历完成后,再进

行一次序号递增遍历,这时idom(u)的值一定会在idom(w)之前被计算出

来,用idom(w)=idom(idom(w))就能得到idom(w)的值,对应于图1中的

step4。

第(2)步比较复杂,把它拿出来讨论。

我们打算用semi 函数来表示sdom 函数,但semi 函数在算法各个阶段表示

的含义不完全相同。Semi(w)值在(1)之前都为0,在(1)之后等于w ,在(2)之后

等于sdom(w)。第二步每计算完一个节点的semi 函数值,就在该节点和其T 上的

父节点之间连一条边,这样我们得到一个森林。还要引入一个eval 函数,有

了eval 函数我们可以简化sdom 函数的计算。

eval(v):如果v 是森林中某棵树的根,eval(v)=v ;否则取v 所在树的根结

点r ,在r 到v 的树干(不包括r)上找semi 值最小的节点u ,eval(v)=u 。

有了eval 函数之后,我们把定理1的sdom 函数计算式简化为

semi(w)=min{ semi(eval(v))|(v,w)∈ E } E 为CFG 的边集。这样我们只要得到w

的所有前驱的eval 值a ,并算出所有semi(a)并从中取最小值,就得到了semi(w)。

对应于下图算法的step2

图1:

图2:

数字表示深度优先搜索序号,括号内的左边字母表示该节点的sdom节点,右边表示

idom节点。

计算的例子:

以图2为例,说明semi(E)和idom(w)的求解,其中semi(w)=E节点的父节点当step2 i=3时,处理节点E,pred(E)有B和L,eval(B)=B,eval(L)=A,semi(B)=2,semi(E)=3,semi(A)=1;

所以semi(E)=min(semi(B),semi(A),semi(E))=semi(A)=1,即节点R。

这时E在T中的父节点B被加入森林中,假如semi(w)=B,那么计算idom(w)的条

件就已经具备。由图2看出semi(D)=B,由step3,eval(D)等于A,semi(A)

所以idom(D)=A。等到step2,3的for循环完成,此时计算出了idom(A)=R,转到

step4,idom(D)=idom(idom(D))=idom(A)=R,这样就计算出了idom(D)。

7.4 循环和强连通部分

自然循环的定义和通过回边找自然循环的算法大家都很熟悉,略

7.4.1 强连通部分的概念

强连通部分:CFG中的一个子图,其中任两节点之间都互相有路径可以到达对方。

最大强连通部分:强连通部分A,A不是任何一个强连通部分(除A本身之外)的

子图。

7.4.2计算最大强连通部分的算法

先给一个定义:

式一:

lowlink(x)= min({ w|(x,w)属于E,w属于x所在的SCC且 x>w}

并{lowlink(w)|(x,w)属于E且 x

lowlink(x)=y的含义:节点y是从节点x出发,经由最多包含一条回边或一条

cross边的路径,能到达的序号最小的,x所在SCC中的点。

由式一可知:在深度优先搜索树上作一次后序遍历,只要依次对节点x的前驱的

序号(x>w时)或前驱的lowlink值(x

lowlink。

Tarjan给出了一个定理:如果x=lowlink(x),那么x一定是它所在的最大强连通部分当中序号最小的点,也是深度优先搜索树上该最大强连通部分形成的

子树的根。

这里简单证明一下:设x=lowlink(x),假如有节点y!=x,x与y同属一个最大强连通部分且有y

一个序号小于x的节点(至少有y这个节点,所以一定可以找到),因此

lowlink(x)<=z

号最小的点。反过来,因为lowlink(x)是x由最多一条回边或一条cross边能到

达的序号最小的x所在SCC中节点,而x本身就是x所在SCC中序号最小的点,

所以x=lowlink(x)。

算法见《muchnick一书》p195 Fig7.26

算法思想:

Strong_Components(x, Succ)的作用:如果节点x是最大强连通部分中序号最小的

节点,就可以得到x所在最大强连通部分,并把该最大强连通部分加入All_SCC。

步骤:首先在深度优先搜索树上做后序遍历,求出节点x子树中所有节点的

lowlink,算法中的stack存放以x为根的子树中的一些节点(x所在最大强连通部分

中的节点一定在栈中)。如果lowlink(x)=Dfn(x) (即lowlink(x)=x,我采用这种简单

表示法,虽然有点不严密),则把栈中x以上一直到栈顶的元素(包括x)全部弹出,

放到SCC集合中。SCC集合中的节点就是x所在最大强连通部分的所有节点(*)。

把(*)再说明一下:假设栈中x以上的部分有不属于x所在最大强连通部分的节点

v0,一定有lowlink(v0)=v1,lowlink(v1)=v2……lowlink(vk)=vk。如果vk是x为根

的子树中的节点的话,按照算法(if Lowlink(x)=Dfn(x)…),它应该和v0一起已经

被从栈中删掉,这与假设矛盾;如果vk不属于x为根的子树,那x有路径

从x→v0→vk,设vj是路径上第一个不属于以x为根的子树的,这样lowlink(x)

而vj

通部分。反过来很容易看出x所在最大强连通部分中的节点一定在栈中x以上的

位置。两方面综合起来,得到(*)。

如果上页提到那个问题确实存在的话,最大强连通部分的最小序号节点3的

lowlink(3)=2,这时不退栈。到遍历到节点2时,有lowlink(2)=2,这时退栈,

把2、3、4、5算作一个最大强连通分量,这就不对了。

7.5 可规约性

概念:流图G是可规约的当且仅当不存在两个或两个以上入口的强连通子图。

绝大多数的程序设计语言由语言本身语义保证了不出现不可规约的流图。在Fortran77中90%的程序都是可规约的,即使是叫一个不懂结构化编程思想的人用goto语句编程,得到的程序大部分也都是可规约的。在不可规约区域上,像代码外提、规纳变量删除等许多优化就不能做了。

虽然不可规约程序出现很少,但仍然要考虑。解决办法有:

1.做迭代数据流分析。这是最通用的方法。

2.节点分裂。节点分裂可以使不可规约流图变成可规约流图,但同时流图中的节点数会指数级上升。

3.在格上做迭代。这个会在后面数据流分析部分讲到。

7.6 interval分析和控制树

interval分析是一类分析方法的统称。它们的主要思想都是通过在流图上分析某些节点和它们之间的前驱后继关系,识别出控制流图中某些结构,把这些结构塌缩成一个点(同时维持好该节点与流图中其它节点的边),然后再去识别其它结构,一直这样做下去做到不能做为止,最后得到流图一系列有层次的结构,每一个这样的结构就叫做一个interval。

Interval的层次结构可以用一棵树来表示,这棵树就叫控制树。

1.控制树的根是代表整个流图的一个抽象图(塌缩做到不能做的时候的流图叫抽象图)

2.控制树的叶子是基本块(最初流图中的所有节点)

3.非根非叶节点是抽象点(由某个结构塌缩后得到的那个节点叫抽象点)

4.把抽象点和它所代表的结构(或者叫域)中所有节点都连上一条边

几种interval分析方法:

1. T1-T2分析:这是最早也是最简单的interval分析方法,它仅仅识别两种结构

识别出流图中横向箭头左边的结构,把它塌缩成右边的节点,然后继续在改变了的流图中找这样的结构。

举一个T1-T2分析的简单例子:

例如节点B1a 和B3b 构成一个T1型的结构,把它塌缩成B1b 节点,控制树上分别连上B1b 到B1a 、B3b 的边。

2. maximal interval 分析

maximal interval 分析只识别一种结构:极大单入口子图,且该子图必须满足子图中所有闭合路径都经过唯一的入口。注意:maximal interval 分析不能处理不可规约的区域。例如:

如果满足单入口条件,B1必须纳入B2、B3所在区域内。但纳入之后,该区域又不满足所有闭合路径都经过唯一入口的要求。因为B2、B3组成的回路不经过节点B1。

3. minimal interval 分析

把流图中以下三种结构识别为minimal interval 。Minimal interval 分析可以一

直做到整个流图只剩一个节点。

1. 自然循环

2. 极大非循环子图

3. 最小不可规约区域(包含所有入口的最小

强连通子图)

例子见《muchnick一书》p201 Fig7.33、Fig7.34

7.7 structural分析

Rosen发明了语法制导的高层数据流分析方法,能够识别高级语言的语法树上的特定结构,并给出该结构上数据流分析的公式,从而避免迭代计算。现在structural分析相当于把这种分析方法搬到中间代码,试图在中间表示级识别某些结构,以加速数据流分析。Structure分析是interval分析方法中的一种。

structural分析与上一小节提到的几种interval分析方法有两个明显差别:

1.Structure分析识别的结构类型比前面提到过的interval分析方法都要细致

得多。

2.Structure分析中识别的每一个结构(或者叫域)都只有一个入口,因为不可

规约区域不止一个入口,那就必须把这多个入口的lowest common dominator

加入该域。使这个dominator成为该域的唯一入口。

Structure分析识别的结构类型见《muchnick一书》p203 Fig7.35 Fig7.36

Structure分析作用在中间代码上,这时已经通过了编译器前端的语法分析,

去掉了不符合程序规范的控制结构,剩下来的都是符合程序规范的规则的结

构。任何一种结构都可以在Fig7.35 、Fig7.36中找到所属的类别。

算法思想:

Acyclic_Region_Type(N,E,node,nset):给定流图上节点node,看node是否是

某一个非循环结构中的节点。如果node确实属于某个非循环结构,那由nset

返回该结构中所有节点。

具体判断方法是:该节点若只有一个前驱,而该前驱只有一个后继,那它们

同属于一个block shema(见Fig7.35),然后继续看那个前驱是否也只有一个

前驱,该前驱是否也只有一个后继….直到找到该block shema中所有节点为

止。如果node节点不属于block shema,那再看它是否刚好有两个后继,如

果是,再用类似办法(检查相应节点的前驱后继情况) 看它是否属于if then

else或者Case或者proper。

Cyclic_Region_Type(N,E,node,nset):与Acyclic_Region_Type(N,E,node,nset)

的作用和判断方法非常类似,它查看node是否属于某个循环结构。

在循环结构是自然循环的情况下,Structural_Analysis过程中的ReachUnder集

合收集了自然循环中所有的节点;如果是不可规约循环,节点n如果是不可规

约循环的一个入口,那么就将把整个强连通分量都放到ReachUnder集合里,而

且把不在强连通分量中,而是通过其它入口能够到达节点n的那些点也放入

ReachUnder集合。那么在Cyclic_Region_Type过程中,如果发现node节点不是

循环结构唯一入口(判断依据:不可规约循环情况下,n节点与其它入口节点引

入的节点之间没有边可到达),那么可以断定该循环是不可规约循环,这时调用

Minimize_Improper过程。

Reduce(N,E,rtype,NodeSet):把某一个结构塌缩成一个节点p,调用replace( )

函数使原来结构中的点和其他点之间的边改成p 与其它点之间的边。同时在

StructureType ,Structures ,StructNodes ,StructOf 中记录下该结构的信息。

Minimize_Improper( ): 首先用MEC_Entries 过程找出nset 集合中不可规约循环 的所有入口,再用NC_Domin 过程找出这些入口的最近公共dominator ,最后把可 以不经过这个dominator 节点到达强连通分量的节点也加入这个improper region 。

Structure_Analysis(N,E,entry):给定流图和流图入口entry ,对该流图

进行结构分析。

步骤:首先调用DFS_Postorder( …)记录下后序遍历的顺序。

按后序遍历顺序依次查看各个节点,调用Acyclic_Region_Type 函数看该节点是否属于某个非循环结构。若是,继续查看其它节点;若否,调用Cyclic_Region_Type 函数看该节点是否属于某个非循环结构。

具体例子见:《muchnick 一书》 page211 Fig 7.46

第八章 数据流分析

数据流分析的目的是提供过程怎样操纵数据的信息。数据流分析包含范围很广,从简单分析到复杂的过程的抽象执行都属于数据流分析的范畴。

数据流分析的两个原则:1 数据流方程的解必须是实际正确信息的一个保守的近似。2 在保证正确性的条件下,尽可能的激进,使提供更多信息,以求从优化中获得更多好处。

有一些概念大家都很熟悉,例如什么是Gen 、In 、Out …,所以略掉。

说明一下:通常的迭代数据流分析方法大家都很熟悉,这里侧重一些迭代分析的理论根据,但是书上在讲这方面内容时许多关键部分只是说了结果,没有解释原因,我也只好大概跟着书上的思路走,有些地方我找到了原来论文给出了解答,有些地方按我自己的想法给了解释。但许多地方究其原因还是不甚了了,所以说明一下,请大家看的时候注意,有想法请和我一起讨论。

8.1 数据流分析模型:

Geni ,Killi ,Ini ,Outi 都叫数据流属性,它们的值叫数据流信息。

8.1.1 数据流分析的限制(以可用表达式分析为例):

)

()(fi )

(fi Outi Outp Ini )

(),(pred(i)p Killi x Geni x Ini Killi Ini Geni Outi Outp

Ini i pred p -=??-?∈∈?∈ 其中第二行也可以写成第一行可以写成

由上面数据流分析的限制可以得到数据流方程。

只要把 )(i pred p Outp Ini ∈?

的?号改成等号,并且把)(Ini fi Outi ?中的?改成等

号。注意:对于nondistributive 的数据流分析来说,把 )(i pred p Outp Ini ∈?

的?号改成等

号可能会造成数据流信息丢失。

对照《Handbook 》p7 Fig1.2

先给一个可用表达式数据流属性列表,这个表现在不用看,下面用到时再查。

(前面加的Av 表示可用表达式)

表一

Nodei AvGeni AvKilli fi(x)

1 {e1} {e2,e5,e6,e7,e8} {e1} (x-{e2,e5,e6,e7,e8})

2 {e2,e3} {e3,e4} {e2,e3} (x-{e3,e4})

3 {e4} {e5,e6} {e4} (x-{e5,e6})

4 {e4} {e5,e6} {e4} (x-{e5,e6})

5 {e8} {e2,e7,e8} {e8} (x-{e2,e7,e8})

6 φ φ x

8.1.2 几组数据流方程的解:

以下是由上面的可用表达式数据流属性得到的几组数据流方程的解,来看看

它们有什么不同。

1. φ==?AVOuti AVIni i ,,这组解表示没有任何表达式在程序任何点可用,虽然这

组解看起来不对,但是它完全符合上面说到的数据流分析的限制。如果我们用这组解来指导公共子表达式删除,它不会错误地更改程序本来的语义。这是一组安全的赋值。

2. {}8,7......3,2,1,e e e e e U AVOuti AVIni i ===? (U 代表表达式的全集)显然这

组解是错误的,而且如果用这组解来指导公共子表达式删除,它会错误地更改程序本来的语义。这是一组不安全的赋值。

3. node A VIn A VOut

1 φ {e1}

2 φ {e2,e3}

3 {e2,e3} {e2,e3,e4}

4 {e2,e3} {e2,e3,e4}

5 {e2,e3,e4} {e3,e4,e8}

6 φ φ

这组解也符合上面的限制,但是我们注意到表一中e1在节点1中计算后在任何节

点都没有被kill 掉,所以这组解不是最大的一组解。

4. 3. node A VIn A VOut

1 φ {e1}

2 {e1} {e1,e2,e3}

3 {e1,e2,e3} {e1,e2,e3,e4}

4 {e2,e3} {e1,e2,e3,e4}

5 {e2,e3,e4} {e1,e3,e4,e8}

6 {e1} {e1}

这组解是最大安全赋值,给这组解加任何表达式都会违反数据流分析的限制。

一组安全赋值代表了数据流分析的一组有效解,我们最想要的是这些有效解中的最

大一组,叫做MSA(maximum safe assignment)。MSA 又叫MOP(meet over paths)。 仍对照《Handbook 》p7 Fig1.2,按照数据流分析的限制,我们有

过程一:

)))(((22356AVIn f f f AVIn ?,而又可以有

)))(((...223552AVIn f f f AVOut AVIn ???

所以*?))))((((22356AVIn f f f AVIn ,稍微推广一点来看,有

ψρρ∈

??)(16A V I n f A V I n (的所有路径的集合到节点代表从入口节点i 1ψ), 如果把?改成=,那6AVIn 就属于MSA ,因为6AVIn 考虑了控制流所有可能经过的路径,是符合所有数据流分析限制的解中的最大值。

如果所有流函数都单调(单调概念在格理论中介绍),而且数据流属性的可能值又有限的话,只要取ψ中有限路径就可以得到MSA 的解。

大家都很熟悉我们通常使用的迭代数据流分析方法,迭代数据流分析方法得到的是最大固定点赋值(MFA ),但最大MFA 可能与MSA 不同,产生的原因来自于合流算符 ,它可能《Handbook 》p18 1.3.6.2.1就举了一个常量传播的例子:原本知道z =x +y 的结果是常量10,在合流之后反而认为z 的结果不是常量了,这是因为常量传播是nondistributive ,z 是不是常量要取决于其它的变量。

8.2 格、流函数和固定点的理论

8.2.1 格的基本概念

我们首先将建立格的框架,在这个框架中的元素代表了程序中变量、表达式、 或程序结构的抽象属性。并且这些属性必须与程序的执行情况相独立,不会

因为程序中某个条件执行而改变。即数据流分析是不考虑程序具体执行时某

个条件的真假的,即使该条件一直是真或一直是假。

流函数则是格上的元素到元素的映射,这种映射代表的是程序中具体结构在程序中所起的作用。

我们仅讨论半格。

什么是半格:半格就是一个二元组,>?<,ζ,ζ 表示一个集合,?计算ζ中 两个元素的最大下界。由 ?我们可以定义部分序关系,b a ??说明=a b a 。

如果存在两个特殊元素最大元素T 和最小元素⊥,则半格叫做完全半格。

8.2.2 迭代数据流分析怎样会收敛

单调的概念:给定流函数h ,如果满足:任意元素x 、y 属于ζ,若x ?y 且

h(x) ? h(y),那么函数h 单调。如果x 与h(x)可比较的话,函数单调加上格

中元素有限这两个条件就可以保证格上的迭代数据流分析一定收敛。因为

x ,h(x), h(h(x))…可以组成一个chain ,它是单调增或者单调减的。

我认为这里的流函数(在格上讨论的流函数)应该把它认为是与程序的一次迭代相联系的函数,它的自变量和因变量都应该指的是程序中同一个点的流信息状态,而不是那种通常的与某个基本块或某个结构对应的流函数f : 自变量是in(B),因变量是out(B)。

一般情况下,流函数h 的自变量与因变量是可比较的,因为迭代数据流分析的初始值大都设为最小值⊥或者最大值T (例如到达定制初始设为空,可用表达式初始值设为全部表达式U),而⊥和T 跟半格上任何元素都可比,所以h(⊥)与⊥可比,再由单调性就有h(⊥)与h (h(⊥))也可比,…这样形成一个chain 。

但对于常量传播来说,流函数h 的自变量与因变量就是不可比较的,因为常量传播的格元素不是通常用的bitvector (如果用bitvector ,那bitvector 将是无限长),它的格叫ICP 。中间一排点分别代表变量的值,从负无穷到正无穷。

假如有z =z +1的循环计算,那每次计算完z 的值都加1,因变量仍然属于中间一排的元素,只不过加了1,因此自变量与因变量不可比较。下图就是ICP 。

8.2.3 Distributive 函数

如果h 满足)()()(:,b h a h b a h b a ?=?∈?ζ,则函数h 是distributive 函数。因为按照迭代数据流分析,我们不断地要做类似 )(i pred p Outp Ini ∈=

的合流操作,在8.2.1

中已经举过一个常量传播的例子,合流操作可能会导致有用信息丢失。如果流函数有distributive 性质的话,就能够保证在做合流操作时,有用信息不会丢失。

我们想要的数据流分析的解是MSA(或者叫MOP),

MOP =

∏∈)()(B path p p Init F 对于path(B)=entry,B1,…,Bn=B ,p 是从程序入口到节点B 的

任意路径,Fp 就是这个路径的流函数(注意与格上讨论的流函数相区别),所有这些流

函数作用在初始数据流信息得到值,MOP 即对这些值做合流得到的结果。

但是,我们通常做数据流迭代只能得到MFA(最大固定点赋值,8.1最后提到过),计算MFA 就要按 )(i pred p Outp Ini ∈=

每迭代一次就要作一次合流。合流可能造成有用信

息丢失,所以MFA 可能不等于MSA ,但是如果有了distributive 性质,MFA 就能保证等于MSA 了。

在Kild73 A Unified Approach to global program analysis 有详细证明,有

兴趣的可以参考那篇论文,这里说个大概做法,:

从两个方向证明MFA(B)<=MOP(B),MOP(B)<=MFA(B)

证明第一个方向只要证明任意一条从entry 到B 的路径p ,MFA(B)<=)(Init F p 。用对路径p 的长度做归纳。证明第二个方向只要对合流次数作归纳。

8.2.4 Bit Vector 函数

先给bounded 函数空间的定义:循环结构作数据流分析时,该结构对应

的流函数f 可能会发生任意次作用f*。而在一个k-bounded 函数空间里,f*=k f id )(?

如果数据流信息能用位矢量的形式来表示的话,该数据流分析的流函数就有很好的性质:例如单调、distributive 且各个变量数据流信息独立。除此之外,位矢量的函数空间是2-bounded ,即f*=)(f id ?,这一点在后面把structural 分析用于数据流分析时,非常有用。f*=)(f id ?式的原因在于位矢量的每一维都只有0和1两种取值,且f 把矢量哪一维变成0、哪一维变成1是固定的。举个例子:In(B)经过f 作用一次以后得到f(In(B)),相当于(0011…)变成了(1001…),f(In(B))与In(B)合流之后得到(0001…),再经过f 作用仍然会把第一位的0变成1,把第三位的1变成0,得到(1001…),这与f(In(B))相同。

8.3 基于控制树的流分析

如标题所示,这种分析方法主要基于控制树。一般对控制树做两次遍历,第一次自底向上,从基本块节点到根抽象节点,自底向上构造各个结构流函数。第二遍自顶向下,从上往下计算各个点的数据流信息。

8.3.1 自底向上的过程

自底向上过程主要目的就是通过某结构的各个组成部分的流函数来计算该结构对

应的流函数。所以我们应该对不同的结构做分别讨论。下面分别以if -then 、while 、不可规约区域这三种有代表性的结构为例做说明。

1.if -then

因为是自底下上遍历,我们可以认为if 结构和then 结构各自对应的流函数都已经计算得到。现在计算if -then 结构的流函数,它比较简单。

if if then then if F F F F ??==)(

1. While 循环

*)(while body loop F F F ?= l o o p

w h i l e l o o p w h i l e F F F ?=- 循环部分表示沿着环路执行任意次,用流函数表现为while body F F ?复合作用的kleene 闭包。而while 循环即沿环路执行若干次后再经过while 一次(while 条件不满足),所以它的流函数等于loop while F F ?的复合。

假如我们考虑的数据流分析问题都是位矢量问题,即该流分析中数据流信息能用

位矢量的形式来表示,那由8.2.4中给的结论有:

)()*(while body while body loop F F id F F F ??=?=,这样即使流分析遇到循环结构,我们也可以很快地得到该结构对应的流函数。

2. 不可规约区域

))(())((13231233B B B B B B B a B F F F F F F F F *+??=

左边的式子对应控制流经过节点B1到达B2,然后经过B2和B3构成的循环若干次,最后从B3出B3a 结构,右边的式子对应控制流经过节点B1到达B3,经过B2和B3构成的循环若干次,最后从B3出B3a 结构。a B F 3就是这两个式子在格上的最大下届。表示经过这两条通路到达B3a 出口的数据流信息应该做合流操作。

按照上面的做法,我们在自底向上遍历中可以得到所有结构对应的流函数,下一步

我们就具体来计算每个点的数据流信息。

8.3.2 自顶向下的过程

仍然以上面提到的三种结构来说明数据流信息的计算过程。

1. If -then

In(if) = In(if-then)

In(then) =if F (In(if))

因为是自顶向下计算,我们可以认为In(if-then)已经在控制树上一层中被计算得到。

2. While 循环

In(while) =loop F (In(while-loop))

In(body) =while F (In(while))

3. 不可规约循环

In(B1) = In(B1a)

In(B2) = ))3(())1((31B In F B In F B B ?

In(B3) = ))2(())1((21B In F B In F B B ?

但是这样得到的是迭代计算式,我们按照与求B3a 结构对应流函数类似的方

法来重新列In(B2)的计算式。

In(B2) =))1())()(())(((1323123B In F F F F F F F B B B B B B B **?

=)))1()()())(((1323B In F F id F F id B B B B ??

这样,In(B2)不需要迭代就能够计算出来了。In(B3)用In(B2)计算的结果计算

得出。这样我们就得到了所有点的数据流信息,一个完整的例子见《muchnick 》p242

上面这些方法在具体实现时,像if -then 、while 这种比较简单的结

构可以用函数直接实现《muchnick 》p248 Fig8.14,很简单,略,但像不

可规约区域这种复杂的结构,它的数据流信息的计算可以用图结构来表

示Fig8.15。

必知的大数据处理框架技术

这5种必知的大数据处理框架技术,你的项目应该使用哪种? 本文将介绍大数据系统一个最基本的组件:处理框架。处理框架负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据。数据的计算则是指从大量单一数据点中提取信息和见解的过程。 作者:佚名来源:大数据杂谈|2016-11-30 13:37 收藏 分享 本文将介绍大数据系统一个最基本的组件:处理框架。处理框架负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据。数据的计算则是指从大量单一数据点中提取信息和见解的过程。 下文将介绍这些框架: 仅批处理框架: Apache Hadoop 仅流处理框架: Apache Storm

Apache Samza 混合框架: Apache Spark Apache Flink 大数据处理框架是什么? 处理框架和处理引擎负责对数据系统中的数据进行计算。虽然“引擎”和“框架”之间的区别没有什么权威的定义,但大部分时候可以将前者定义为实际负责处理数据操作的组件,后者则可定义为承担类似作用的一系列组件。 例如Apache Hadoop可以看作一种以MapReduce作为默认处理引擎的处理框架。引擎和框架通常可以相互替换或同时使用。例如另一个框架Apache Spark可以纳入Hadoop并取代MapReduce。组件之间的这种互操作性是大数据系统灵活性如此之高的原因之一。 虽然负责处理生命周期内这一阶段数据的系统通常都很复杂,但从广义层面来看它们的目标是非常一致的:通过对数据执行操作提高理解能力,揭示出数据蕴含的模式,并针对复杂互动获得见解。 为了简化这些组件的讨论,我们会通过不同处理框架的设计意图,按照所处理的数据状态对其进行分类。一些系统可以用批处理方式处理数据,一些系统可以用流方式处理连续不断流入系统的数据。此外还有一些系统可以同时处理这两类数据。 在深入介绍不同实现的指标和结论之前,首先需要对不同处理类型的概念进行一个简单的介绍。 批处理系统 批处理在大数据世界有着悠久的历史。批处理主要操作大容量静态数据集,并在计算过程完成后返回结果。

实验分析数据流和绘制数据流图

实验报告课程名称_软件工程导论__________ 学院____计算机工程学院_________班级14软件1班 学号2014144141 姓名秦川 2016年11月8日

批阅教师时间实验成绩 课程名称软件工程 学号2014144141姓名秦川实验日期2016.11.8实验名称实验2分析数据流和绘制数据流图 实验目的: 1、掌握数据流的分析方法 2、掌握数据流图的绘制 实验内容: 任务一绘制数据流图 任务二分析数据流和绘制数据流图 案例一:总务办公管理系统 案例二:火车票预订系统 实验原理: 数据流图(DFD)是软件系统系统的逻辑模型,仅仅描绘数据在软件中流动(从输入移动到输出)的过程中所经受的变换(即加工处理)。 数据流图的绘制方法:根据数据流图的四种成分:源点或终点,处理,数据存储和数据流,从问题描述中提取数据流图的四种成分;然后依据“自顶向下、从左到右、由粗到细、逐步求精”的基本原则进行绘制。 基本符号如下:

实验过程与结果: 1.运行Microsoft Office Visio2007 运行Microsoft Office Visio2007 2.选择“软件和数据库”中的“数据流模型图”模板 选中数据流模型图模板

3.用鼠标选拉图标进行绘图 任务一绘制数据流图 试绘制工资管理系统的数据流图,根据数据流图的符号说明仔细理解下图含义: 这是学校教职工工资管理系统,教师根据课时表,职工根据任务表来确定个人工资情况,数据按以下方向传递: 首先,对课时表或任务表进行审核,审核后的数据经排序形成专用表格; 再进行一系列额外计算,包括个人所得说、住房公积金、保险费得出具体所发工资,并将工资表发给银行; 然后,向教职工展示工资所得明细; 最后,形成编制报表,更新分类表后,交于会计。 其中,人事科负责人事数据,教师与职工的工资由银行发放,会计做好报表的统计。

大数据处理平台构架设计说明书

大数据处理平台及可视化架构设计说明书 版本:1.0 变更记录

目录 1 1. 文档介绍 (3) 1.1文档目的 (3) 1.2文档范围 (3) 1.3读者对象 (3) 1.4参考文献 (3) 1.5术语与缩写解释 (3) 2系统概述 (4) 3设计约束 (5) 4设计策略 (6) 5系统总体结构 (7) 5.1大数据集成分析平台系统架构设计 (7) 5.2可视化平台系统架构设计 (11) 6其它 (14) 6.1数据库设计 (14) 6.2系统管理 (14) 6.3日志管理 (14)

1 1. 文档介绍 1.1 文档目的 设计大数据集成分析平台,主要功能是多种数据库及文件数据;访问;采集;解析,清洗,ETL,同时可以编写模型支持后台统计分析算法。 设计数据可视化平台,应用于大数据的可视化和互动操作。 为此,根据“先进实用、稳定可靠”的原则设计本大数据处理平台及可视化平台。 1.2 文档范围 大数据的处理,包括ETL、分析、可视化、使用。 1.3 读者对象 管理人员、开发人员 1.4 参考文献 1.5 术语与缩写解释

2 系统概述 大数据集成分析平台,分为9个层次,主要功能是对多种数据库及网页等数据进行访采集、解析,清洗,整合、ETL,同时编写模型支持后台统计分析算法,提供可信的数据。 设计数据可视化平台 ,分为3个层次,在大数据集成分析平台的基础上实现大实现数据的可视化和互动操作。

3 设计约束 1.系统必须遵循国家软件开发的标准。 2.系统用java开发,采用开源的中间件。 3.系统必须稳定可靠,性能高,满足每天千万次的访问。 4.保证数据的成功抽取、转换、分析,实现高可信和高可用。

浅谈数据流分析与应用

浅谈汽车数据流分析与应用 关练芬 湛江市第二技工学校 摘要:随着汽车电子控制技术的发展与应用,汽车的修理方式发生了深刻的变化,仅凭经验已不能满足现代汽车修理的需要。作为现代汽车重要检修方法之一的数据流分析,可以使维修人员实时了解汽车的工作状况,为汽车故障诊断与排除提供科学的依据。本文拟谈谈数据流分析的方法及其在汽车电控发动机故障诊断中的应用,为科学修车抛砖引玉。 关键词:汽车电子控制系统数据流分析故障诊断应用实例 随着人们对汽车的动力性、经济性和安全性等要求越来越高,汽车控制技术已由简单的化油器、少量的电气控制到集成电子燃油及点火控制、自动变速器、定速巡航、各种主动安全系统(ABS、ASR等)和舒适系统等于一身的车载电子控制系统。显然,面对日趋完善和复杂的汽车电子控制技术,过去光凭经验、拍脑袋换零件等旧的修车模式已不适应现代汽车检修的要求,而借用先进的专用诊断设备来读取故障码、进行数据流分析及波形分析等现代检修方法在汽车故障诊断中得到了广泛应用。本文拟重点谈谈数据流分析的方法及其在电控发动机故障诊断中的应用,为科学修车提供一点的帮助。 一、汽车数据流的认识 目前,各汽车制造厂家为提高汽车的动力性、经济性和降低排放污染,均致力于发展汽车电子控制技术。同时,为使汽车检修和设定方便,在电子控制系统中还设臵了具有故障自诊断和数据流记忆等功能的自诊断回路,汽车维修人员可以使用专用仪器来读取微机RAM中存储的故障码和数据流等信息,以帮助故障诊断。 众所周知,汽车电子控制系统主要由各种传感器、执行器和控制

微机组成。所谓数据流,是就是指汽车电子控制系统中由微机与传感器和执行器实时交流的输入、输出信号并以数据参数的形式通过诊断接口由专用诊断仪器读出的数据(组)。在汽车微机中增加了数据流记忆功能,真实地反映了传感器和执行器的工作电压和状态,为故障诊断提供了有效的途径。而数据流分析就是维修人员使用专用仪器读取电控系统微机通过诊断插座向外输出的、反映系统实时工作状况的数据流,通过对数据流中的各项参数进行数值分析并与标准值进行比较,以判断电控系统的工作是否正常,为查找故障提供科学依据的一种检修方法。 读取数据流除了可以检测到汽车各种传感器和执行器的工作状态外,还可以设定汽车的运行数据,如进行控制器编码和基本设定等。 二、数据流分析在故障诊断中的意义和作用 随着电子技术与计算机技术的发展与应用,大量的传感器、执行器和微机等安装在汽车上,使汽车的控制方式和修理方式发生了深刻的变化。面对日益复杂的电子控制系统,仅凭经验已无法满足现代汽车维修的需要,维修人员必须要掌握诸如读取故障码、数据流分析和波形分析等现代检修方法,从而科学、有序地排除汽车故障,提高修车效益。 (一)当前汽车故障诊断中存在的不足 现代汽车电子控制技的发展,使汽车维修的技术含量越来越高。但是,由于维修人员素质和维修水平参差不齐,在对汽车电子控制系统检修时主要还存在以下不足:

商业案例分析的常见框架与模型工具

商业案例分析的常见框架与工具1.Strategy 1.1市场进入类 公司宏观环境:PEST(政治、经济、社会、技术) 公司微观环境:SWOT分析、波特五力模型 市场情况分析:市场趋势、市场规模、市场份额、市场壁垒等 利益相关方分析:公司、供应商、经销商、顾客、竞争对手、大 众 3C战略三角 市场细分(定位目标客户群;Niche Market) -地理细分:国家、地区、城市、农村、气候、地形 -人口细分:年龄、性别、职业、收入、教育、家庭人口、家庭类型、家庭生命周期、国籍、民族、宗教、社会阶层 -心理细分:社会阶层、生活方式、个性 -行为细分:时机、追求利益、使用者地位、产品使用率、忠诚程度、购买准备阶段、态度 风险预测与防范 1.2行业分析类 市场:市场规模、市场细分、产品需求/趋势分析、客户需求;BCG Matrix 竞争:竞争对手的经济情况、产品差异化、市场整合度、产业集

中度 顾客/供应商关系:谈判能力、替代者、评估垂直整合 进入/离开的障碍:对新加入者的反应、经济规模、预测学习曲线、 研究政府调控 资金:主要资金来源、产业风险因素、成本变化趋势 1.3新产品引入类 营销调研数据分析 收入预测:时间推导、可比公司推导 产品生命周期 产品战略:4P, 4C, STP, 安索夫矩阵 市场营销战略:以消费者为核心的整合营销,关注各触点,并有 所创新 物流条件:存储、运输 2.Operation 2.1市场容量扩张类:竞争对手、消费者、自身(广义3C理论) 2.2利润改善类:利润减少的两种可能 成本上升:固定成本/可变成本 -固定成本过高:更新设备?削减产能?降低管理者/一般员工工资? -可变成本过高:降低原材料价格?更换供应商?降低工资?裁员? -成本结构是否合理?

商业案例分析的常见框架与工具

商业案例分析的常见框架与工具 1. Strategy 1.1 市场进入类 ?公司宏观环境:PEST(政治、经济、社会、技术) ?公司微观环境:SWOT分析、波特五力模型 ?市场情况分析:市场趋势、市场规模、市场份额、市场壁垒等 ?利益相关方分析:公司、供应商、经销商、顾客、竞争对手、大众 ?3C战略三角 ?市场细分(定位目标客户群;Niche Market) - 地理细分:国家、地区、城市、农村、气候、地形 - 人口细分:年龄、性别、职业、收入、教育、家庭人口、家庭类型、家庭生命周期、国籍、民族、宗教、社会阶层 - 心理细分:社会阶层、生活方式、个性 - 行为细分:时机、追求利益、使用者地位、产品使用率、忠诚程度、购买准备阶段、态度 ?风险预测与防范 1.2 行业分析类 ?市场:市场规模、市场细分、产品需求/趋势分析、客户需求;BCG Matrix ?竞争:竞争对手的经济情况、产品差异化、市场整合度、产业集中度 ?顾客/供应商关系:谈判能力、替代者、评估垂直整合 ?进入/离开的障碍:对新加入者的反应、经济规模、预测学习曲线、研究政府调控 ?资金:主要资金来源、产业风险因素、成本变化趋势 1.3 新产品引入类 ?营销调研数据分析 ?收入预测:时间推导、可比公司推导 ?产品生命周期 ?产品战略:4P, 4C, STP, 安索夫矩阵 ?市场营销战略:以消费者为核心的整合营销,关注各触点,并有所创新 ?物流条件:存储、运输 2. Operation 2.1 市场容量扩张类:竞争对手、消费者、自身(广义3C理论) 2.2 利润改善类:利润减少的两种可能 ?成本上升:固定成本/可变成本 - 固定成本过高:更新设备?削减产能?降低管理者/一般员工工资? - 可变成本过高:降低原材料价格?更换供应商?降低工资?裁员? - 成本结构是否合理? - 产能利用是否合理(闲置率)? ?销售额下降:4P(价格过高?产品品质?分销渠道?促销效果?) 2.3 产品营销类(接近于“新产品引入类”) 2.4 产品定价类 ?以成本为基础的定价:成本加成定价、以目标利润(盈亏平衡)定价 ?以价值为基础定价

大数据处理框架选型分析

大数据处理框架选型分析

前言 说起大数据处理,一切都起源于Google公司的经典论文:《MapReduce:Simplied Data Processing on Large Clusters》。在当时(2000年左右),由于网页数量急剧增加,Google公司内部平时要编写很多的程序来处理大量的原始数据:爬虫爬到的网页、网页请求日志;计算各种类型的派生数据:倒排索引、网页的各种图结构等等。这些计算在概念上很容易理解,但由于输入数据量很大,单机难以处理。所以需要利用分布式的方式完成计算,并且需要考虑如何进行并行计算、分配数据和处理失败等等问题。 针对这些复杂的问题,Google决定设计一套抽象模型来执行这些简单计算,并隐藏并发、容错、数据分布和均衡负载等方面的细节。受到Lisp和其它函数式编程语言map、reduce思想的启发,论文的作者意识到许多计算都涉及对每条数据执行map操作,得到一批中间key/value对,然后利用reduce操作合并那些key值相同的k-v对。这种模型能很容易实现大规模并行计算。 事实上,与很多人理解不同的是,MapReduce对大数据计算的最大贡献,其实并不是它名字直观显示的Map和Reduce思想(正如上文提到的,Map和Reduce思想在Lisp等函数式编程语言中很早就存在了),而是这个计算框架可以运行在一群廉价的PC机上。MapReduce的伟大之处在于给大众们普及了工业界对于大数据计算的理解:它提供了良好的横向扩展性和容错处理机制,至此大数据计算由集中式过渡至分布式。以前,想对更多的数据进行计算就要造更快的计算机,而现在只需要添加计算节点。 话说当年的Google有三宝:MapReduce、GFS和BigTable。但Google三宝虽好,寻常百姓想用却用不上,原因很简单:它们都不开源。于是Hadoop应运而生,初代Hadoop的MapReduce和

汽车数据流分析

1、何谓数据流?有何作用? 汽车数据流是指电子控制单元(ECU)与传感器和执行器交流的数据参数通过诊断接口,由专用诊断仪读取的数据,且随时间和工况而变化。数据的传输就像队伍排队一样,一个一个通过数据线流向诊断仪。 汽车电子控制单元(ECU)中所记忆的数据流真实的反映了各传感器和执行器的工作电压和状态,为汽车故障诊断提供了依据,数据流只能通过专用诊断仪器读取。汽车数据流可作为汽车ECU的输入输出数据,使维修人员随时可以了解汽车的工作状况,及时诊断汽车的故障。 读取汽车数据流可以检测汽车各传感器的工作状态,并检测汽车的工作状态,通过数据流还可以设定汽车的运行数据。 2、测量数据流常采用哪些方法? 测量汽车数据流常采用以下三种方法: (1)电脑通信方式;(2)电路在线测量方式;(3)元器件模拟方式。 2.1怎样用电脑通信方式来获得汽车数据流? 电脑通信方式是通过控制系统在诊断插座中的数据通信线将控制电脑的实时数据参数以串行的方式送给诊断仪。在数据流中包括故障的信息、控制电脑的实时运行参数、控制电脑与诊断之间的相互控制指令。诊断仪在接收到这些信号数据以后,按照预定的通信协议将其显示为相应的文字和数码,以使维修人员观察系统的运行状态并分析这些内容,发现其中不合理或不正确的信息,进行故障的诊断。电脑诊断有两种:一种称为通用诊断仪;另一种称为专用诊断仪。 通用诊断仪的主要功能有:控制电脑版本的识别、故障码读取和清除、动态数据参数显示、传感器和部分执行器的功能测试与调整、某些特殊参数的设定、维修资料及故障诊断提示、路试记录等。通用诊断仪可测试的车型较多,适应范围也较宽,因此被称为通用型仪器,但它与专用诊断仪相比,无法完成某些特殊功能,这也是大多数通用仪器的不足之处。 专用诊断仪是汽车生产厂家的专业测试仪,它除了具备通用诊断仪的各种功能外,还有参数修改、数据设定、防盗密码设定更改等各种特殊功能。专用诊断仪是汽车厂家自行或委托设计的专业测试仪器,它只适用于本厂家生产的车型。 通用诊断仪和专用诊断仪的动态数据显示功能不仅可以对控制系统的运行参数(最多可达上百个)进行数据分析,还可以观察电脑的动态控制过程。因此,它具有从电脑内部分析过程的诊断功能。它是进行数据分析的主要手段。 2.2怎样用电路在线检测方式来获得汽车数据流? 电路在线测量方式是通过对控制电脑电路的在线检测(主要指电脑的外部连接电路),将控制电脑各输入、输出端的电信号直接传送给电路分析仪的测量方式。电路分析仪一般有两种:一种是汽车万用表;一种是汽车示波器。 汽车万用表也是一种数字多用仪表,其外形和工作原理与袖珍数字万用表几乎没有区别,只增加了几个汽车专用功能档(如DWELL档、TACHO档)。 汽车万用表除具备有袖珍数字万用表功能外,还具有汽车专用项目测试功能。可测量交流电压与电流、直流电压与电流、电阻、频率、电容、占空比、温度、闭合角、转速;也有一些新颖功能,如自动断电、自动变换量程、模拟条图显示、峰值保持、读数保持(数据锁定)、电池测试(低电压提示)等。 为实现某些功能(例如测量温度、转速),汽车万用表还配有一套配套件,如热电偶适配器、热电偶探头、电感式拾取器以及AC/DC感应式电流夹钳等。 汽车万用表应具备下述功能: (1)测量交、直流电压。考虑到电压的允许变动范围及可能产生的过载,汽车万用表应能

案例分析报告常见框架与工具详细

商业案例分析的常见框架与工具 1.Strategy 1.1市场进入类 ?公司宏观环境:PEST(政治、经济、社会、技术) ?公司微观环境:SWOT分析、波特五力模型 ?市场情况分析:市场趋势、市场规模、市场份额、市场壁垒等 ?利益相关方分析:公司、供应商、经销商、顾客、竞争对手、大众 ?3C战略三角 ?市场细分(定位目标客户群;Niche Market) - 地理细分:国家、地区、城市、农村、气候、地形 - 人口细分:年龄、性别、职业、收入、教育、家庭人口、家庭类型、家庭生命周期、国籍、民族、宗教、社会阶层 - 心理细分:社会阶层、生活方式、个性 - 行为细分:时机、追求利益、使用者地位、产品使用率、忠诚程度、购买准备阶段、态度 ?风险预测与防范 1.2行业分析类 ?市场:市场规模、市场细分、产品需求/趋势分析、客户需求;BCG Matrix ?竞争:竞争对手的经济情况、产品差异化、市场整合度、产业集中度 ?顾客/供应商关系:谈判能力、替代者、评估垂直整合 ?进入/离开的障碍:对新加入者的反应、经济规模、预测学习曲线、研究政府调控 ?资金:主要资金来源、产业风险因素、成本变化趋势 1.3新产品引入类 ?营销调研数据分析 ?收入预测:时间推导、可比公司推导 ?产品生命周期 ?产品战略:4P, 4C, STP, 安索夫矩阵 ?市场营销战略:以消费者为核心的整合营销,关注各触点,并有所创新 ?物流条件:存储、运输 2.Operation 2.1市场容量扩张类:竞争对手、消费者、自身(广义3C理论) 2.2利润改善类:利润减少的两种可能 ?成本上升:固定成本/可变成本 - 固定成本过高:更新设备?削减产能?降低管理者/一般员工工资? - 可变成本过高:降低原材料价格?更换供应商?降低工资?裁员? - 成本结构是否合理? - 产能利用是否合理(闲置率)? ?销售额下降:4P(价格过高?产品品质?分销渠道?促销效果?) 2.3产品营销类(接近于“新产品引入类”) 2.4产品定价类 ?以成本为基础的定价:成本加成定价、以目标利润(盈亏平衡)定价 ?以价值为基础定价

数据流图与数据字典的一个经典例子

系统的数据流图与数据字典实例 作为示例,为简单起见,我们只考虑人机分工。此处的数据流图是计算机化的帐务处理系统中涉及到计算机部分的数据流图,人工完成的部分将不做反应。例如:计算机没有能力审核原始凭证、填制记账凭证,这些工作必须由人来完成,因此进入系统(系统的自动化部分)的应该是记账凭证而不是原始凭证。银行对帐单仍然是系统的输入数据流,原有的输出数据流系统也必须提供。 图1 系统的顶层数据流图 图2 系统的第一层分解图 记账凭证进入计算机系统需要进行输入操作,而且由于记账凭证本身可能出错,或输入过程中可能发生错误,因此系统必须提供对已输入的记账凭证的修改功能和审核功能,审核通过的记账凭证才能够记账。据此,对“凭证处理”分解得到第二层分解图,该分解图由凭证输入、凭证修改和凭证审核三个处理构成。如果记账凭证是由操作人员直接根据原始凭证

用计算机填制,则凭证处理还应该包含一个打印记账凭证的处理。 图3 系统第二层分解图之一(图1)在系统中,登帐处理由计算机完成,其分解的流程图与原来一致。 图4 系统第二层分解图之二(图2)

图5系统第二层分解图之三(图3) 图6 系统第二层分解图之四(图4) 8.1.3 数据字典 数据字典的作用是对数据流图中的各种成分进行详细说明,作为数据流图的细节补充,和数据流图一起构成完整的系统需求模型。数据字典一般应包括对数据项,数据结构、数据存储和数据处理的说明。以下列出本系统的主要数据字典条目。 1. 数据项条目 数据项编号:D01-001 数据项名称:凭证编号 别名:凭证流水号 符号名:PZBH 数据类型:数值型 长度:4 取值围:1~9999 其余略。 2. 数据结构条目

车联网大数据平台架构设计

车联网大数据平台架构设计-软硬件选型 1.软件选型建议 数据传输 处理并发链接的传统方式为:为每个链接创建一个线程并由该线程负责所有的数据处理业务逻辑。这种方式的好处在于代码简单明了,逻辑清晰。而由于操作系统的限制,每台服务器可以处理的线程数是有限的,因为线程对CPU的处理器的竞争将使系统整体性能下降。随着线程数变大,系统处理延时逐渐变大。此外,当某链接中没有数据传输时,线程不会被释放,浪费系统资源。为解决上述问题,可使用基于NIO的技术。 Netty Netty是当下最为流行的Java NIO框架。Netty框架中使用了两组线程:selectors与workers。其中Selectors专门负责client端(列车车载设备)链接的建立并轮询监听哪个链接有数据传输的请求。针对某链接的数据传输请求,相关selector会任意挑选一个闲置的worker线程处理该请求。处理结束后,worker自动将状态置回‘空闲’以便再次被调用。两组线程的最大线程数均需根据服务器CPU处理器核数进行配置。另外,netty内置了大量worker 功能可以协助程序员轻松解决TCP粘包,二进制转消息等复杂问题。 IBM MessageSight MessageSight是IBM的一款软硬一体的商业产品。其极限处理能力可达百万client并发,每秒可进行千万次消息处理。 数据预处理 流式数据处理 对于流式数据的处理不能用传统的方式先持久化存储再读取分析,因为大量的磁盘IO操作将使数据处理时效性大打折扣。流式数据处理工具的基本原理为将数据切割成定长的窗口并对窗口内的数据在内存中快速完成处理。值得注意的是,数据分析的结论也可以被应用于流式数据处理的过程中,即可完成模式预判等功能还可以对数据分析的结论进行验证。 Storm Storm是被应用最为广泛的开源产品中,其允许用户自定义数据处理的工作流(Storm术语为Topology),并部署在Hadoop集群之上使之具备批量、交互式以及实时数据处理的能力。用户可使用任意变成语言定义工作流。 IBM Streams IBM的Streams产品是目前市面上性能最可靠的流式数据处理工具。不同于其他基于Java 的开源项目,Streams是用C++开发的,性能也远远高于其他流式数据处理的工具。另外IBM 还提供了各种数据处理算法插件,包括:曲线拟合、傅立叶变换、GPS距离等。 数据推送 为了实现推送技术,传统的技术是采用‘请求-响应式’轮询策略。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽和服务器资源。

软件架构案例分析

票务系统架构案例分析?10.1 ATAM方法表述

?10.2 商业动机的表述 ?10.3 构架的表述 ?10.4 质量属性效用树 ?10.5 质量场景的构架分析 ?10.6 对系统构架的再分析 ?10.7 评审结论 10.1 ATAM方法表述 (1)概述 ATAM(Architecture Tradeoff Analysis Method): SEI提出的一种软件构架评估方法。ATAM评估方法的主 要目的: 1)提炼出软件质量属性需求的精确描述;

2)提炼出构架设计决策的精确描述; 3)评估这些构架设计决策,并判定其是否令人满意的实现了这些质量需求。 ATAM评估方法: 并非把每个可以量化的质量属性都进行详尽的分析,而是使众多的风险承担者(包括经理、开发人员、测试人员、用户、客户等等)都参与进来,由此而达到上述目标的。 ATAM是一种挖掘潜在风险,降低或者缓和现有风险的软件构架评估方法。因此,以下三点是评估中要特别注重的:风险、敏感点和权衡点。 (2)构架涉众 ·普通用户 ·用户管理员

·票务管理员 ·开发人员 ·测试人员 (3)评估步骤 ATAM主要分以下几个步骤: 1)ATAM描述; 2)商业动机表述; 3)软件构架表述;4) 确定构架方 式; 5)生成效用树; 6)分析构架方式; 7)确定场景及其优先级; 8)进一步分析构架方式; 9)得出结论。

10.2 商业动机的描述 项目经理从开发组织和客户角度,来表述票务系统的商业目标,综合如下: ?从开发组织角度:开发一个模块性强、实时高效、界面良好、与外部其他系统兼容良好的系统,这使得开发组织能够把整个产品或某个模块卖给其他客户,同时由于良好的界面和业务处理效率而受市场欢迎。 ?从客户角度:系统容易操作,可维护性好、系统稳定、可以及时准确的处理用户的在线订票或查询业务。根据上述目标,质量属性可以划分为两类:高优先级质量属性: 1)性能 2)安全性 3)易用性

大数据技术架构解析

大数据数量庞大,格式多样化。大量数据由家庭、制造工厂和办公场所的各种设备、互联网事务交易、社交网络的活动、自动化传感器、移动设备以及科研仪器等生成。它的爆炸式增长已超出了传统IT基础架构的处理能力,给企业和社会带来严峻的数据管理问题。因此必须开发新的数据架构,围绕“数据收集、数据管理、数据分析、知识形成、智慧行动”的全过程,开发使用这些数据,释放出更多数据的隐藏价值。 一、大数据建设思路 1)数据的获得 大数据产生的根本原因在于感知式系统的广泛使用。随着技术的发展,人们已经有能力制造极其微小的带有处理功能的传感器,并开始将这些设备广泛的布置于社会的各个角落,通过这些设备来对整个社会的运转进行监控。这些设备会源源不断的产生新数据,这种数据的产生方式是自动的。因此在数据收集方面,要对来自网络包括物联网、社交网络和机构信息系统的数据附上时空标志,去伪存真,尽可能收集异源甚至是异构的数据,必要时还可与历史数据对照,多角度验证数据的全面性和可信性。 2)数据的汇集和存储 数据只有不断流动和充分共享,才有生命力。应在各专用数据库建设的基础上,通过数据集成,实现各级各类信息系统的数据交换和数据共享。数据存储要达到低成本、低能耗、高可靠性目标,通常要用到冗余配置、分布化和云计算技术,在存储时要按照一定规则对数据进行分类,通过过滤和去重,减少存储量,同时加入便于日后检索的标签。 3)数据的管理 大数据管理的技术也层出不穷。在众多技术中,有6种数据管理技术普遍被关注,即分布式存储与计算、内存数据库技术、列式数据库技术、云数据库、非关系型的数据库、移动数据库技术。其中分布式存储与计算受关注度最高。上图是一个图书数据管理系统。 4)数据的分析 数据分析处理:有些行业的数据涉及上百个参数,其复杂性不仅体现在数据样本本身,更体现在多源异构、多实体和多空间之间的交互动态性,难以用传统的方法描述与度量,处理的复杂度很大,需要将高维图像等多媒体数据降维后度量与处理,利用上下文关联进行语义分析,从大量动态而且可能是模棱两可的数据中综合信息,并导出可理解的内容。大数据的处理类型很多,主要的处理模式可以分为流处理和批处理两种。批处理是先存储后处理,而流处理则是直接处理数据。挖掘的任务主要是关联分析、聚类分析、分类、预测、时序模式和偏差分析等。 5)大数据的价值:决策支持系统 大数据的神奇之处就是通过对过去和现在的数据进行分析,它能够精确预测未来;通过对组织内部的和外部的数据整合,它能够洞察事物之间的相关关系;通过对海量数据的挖掘,它能够代替人脑,承担起企业和社会管理的职责。 6)数据的使用 大数据有三层内涵:一是数据量巨大、来源多样和类型多样的数据集;二是新型的数据处理和分析技术;三是运用数据分析形成价值。大数据对科学研究、经济建设、社会发展和文化生活等各个领

汽车数据流分析思路

汽车数据流分析思路 1、何谓数据流?有何作用? 汽车数据流是指电子控制单元(ECU)与传感器和执行器交流的数据参数通过诊断接口,由专用诊断仪读取的数据,且随时间和工况而变化。数据的传输就像队伍排队一样,一个一个通过数据线流向诊断仪。汽车电子控制单元(ECU)中所记忆的数据流真实的反映了各传感器和执行器的工作电压和状态,为汽车故障诊断提供了依据,数据流只能通过专用诊断仪器读取。汽车数据流可作为汽车ECU的输入输出数据,使维修人员随时可以了解汽车的工作状况,及时诊断汽车的故障。读取汽车数据流可以检测汽车各传感器的工作状态,并检测汽车的工作状态,通过数据流还可以设定汽车的运行数据。2、测量数据流常采用哪些方法? 测量汽车数据流常采用以下三种方法: (1)电脑通信方式;(2)电路在线测量方式;(3)元器件模拟方式。2.1怎样用电脑通信方式是通过控制系统在诊断插座中的数据通信线将控制电脑的实时数据参数以串行的方式送给诊断仪。在数据流中包括故障的信息、控制电脑的实时运行参数、控制电脑与诊断之间的相互控制指令。诊断仪在接收到这些信号数据以后,按照预定的通信协议将其显示为相应的文字和数码,以使维修人员观察系统的运行状态并分析这些内容,发现其中不合理或不正确的信息,进行故障的诊断。电脑诊断有两种:一种称为通

用诊断仪;另一种称为专用诊断仪。 怎样分析节气门开度? 节气门开度是一个数值参数,其数值的单位根据车型不同有以下种: 若单位为电压(V),则数值范围为0~5.1V; 若单位为角度,则数值范围为0度~90度; 若单位为百分数(%),则数值范围为0~100%。 该参数的数值表示发动机微机接收到的节气门位置传感器信号值,或根据该信号计算出的节气门开度的大小。其绝对值小,则表示节气门开度小;其绝对值大,则表示节气门开度大。在进行数值分析时,应检查在节气门全关时参数的数值大小。 以电压为单位的,节气门全关时的参数的数值应低于0.5V; 以角度为单位的,节气门全关时的参数值应为0度; 以百分数为单位的,节气门全关时该参数的数值应为0。此外,还应检查节气门全开时的数值。 节气门全开时的数值应分别为4.5V左右;82度以上;95%以上。若有异常,则可能是节气门位置传感器有故障或调整不当,也可能是线路或微机内部有故障。 怎样分析发动机转速? 读取电控装置数据流时,在检测仪上所显示出来的发动机转速是由电控汽油喷射系统微机(ECU)或汽车动力系统微机(PCM)根据发动机点火信号或曲轴位置传感器的脉冲信号计算而得的,它反

案例分析基本的分析框架

基本的分析框架主要有: 1)Cost-Be nefit 成本效益分析 比如一个饮料制造商考虑是否应该上一个订单自动处理系统?这时候就需要采用成本效 益 分析。Cost of new automated orderprocessing system would involve: HW/SW devel opment cost, marketing to supportthe new program, customer service ,而Benefitside 的话,我们需要考虑new clie nt bus in ess gen erated 以及in creme ntal bus in ess that could be draw n from exist in gcustomers 。 2) 1 nternal/External 分析 比如我们的运输业客户最近的capacity utilization rate 下降了。这时候我们需要考虑内 夕卜部因素,内部因素可能有:scheduli ng and routi ng system,sales effort, capacity management process出问题了,外部因素可能是整个行业都在面临产能利用率不高的问题,或者是竞争对手采取了新的定价政策,把我们的顾客抢走了等等。 常用的案例分析框架有: 一.Bus in essStrategy 1. 市场进入类 入市场分析(市场趋势,市场规模,成熟vs.新兴,定价趋势,市场壁垒等) 九Competitor(Market share,stre ngth/weak ness) 九Con sumer (Purchas ing criteria,customer segme nt, profitability) 九Compa ny/Capabilities 丸Cha nnel 九Cost 九市场细分很重要,n iche market 九Busin ess Model 九Regulati on/Restrict ion 2?行业分析类 九市场(市场规模,市场细分,产品需求/趋势分析,客户需求) 入竞争(竞争对手的经济情况,产品差异化,市场整合度,产业集中度) 九顾客/供应商关系(谈判能力,替代者,评估垂直整合) 九进入/离开的障碍(评估公司进入/离开,对新加入者的反应,经济规模,预测学习曲线,研究政府调控) 几资金金融(主要金融资金来源,产业风险因素,可变成本/固定成本) 3. 新产品引入类 九4C (Customer, Competiti on, Cost,Capabilities) 九市场促销,分销渠道(渠道选择,库存,运输,仓储) 九STP 分析和4P(Product, Price, Place, Promotion) 4. 定价 九Product/Service 丸Customer (Purchasing criteria,Price sensitive or not) 九Competitor/Substitute 九Supply/Dema nd 九基于成本定价法cost based

大数据 技术架构解析

大数据技术架构解析 作者:匿名出处:论坛2016-01-22 20:46 大数据数量庞大,格式多样化。大量数据由家庭、制造工厂和办公场所的各种设备、互联网事务交易、社交网络的活动、自动化传感器、移动设备以及科研仪器等生成。它的爆炸式增长已超出了传统IT基础架构的处理能力,给企业和社会带来严峻的数据管理问题。因此必须开发新的数据架构,围绕“数据收集、数据管理、数据分析、知识形成、智慧行动”的全过程,开发使用这些数据,释放出更多数据的隐藏价值。 一、大数据建设思路 1)数据的获得 大数据产生的根本原因在于感知式系统的广泛使用。随着技术的发展,人们已经有能力制造极其微小的带有处理功能的传感器,并开始将这些设备广泛的布置于社会的各个角落,通过这些设备来对整个社会的运转进行监控。这些设备会源源不断的产生新数据,这种数据的产生方式是自动的。因此在数据收集方面,要对来自网络包括物联网、社交网络和机构信息系统的数据附上时空标志,去伪存

真,尽可能收集异源甚至是异构的数据,必要时还可与历史数据对照,多角度验证数据的全面性和可信性。 2)数据的汇集和存储 数据只有不断流动和充分共享,才有生命力。应在各专用数据库建设的基础上,通过数据集成,实现各级各类信息系统的数据交换和数据共享。数据存储要达到低成本、低能耗、高可靠性目标,通常要用到冗余配置、分布化和云计算技术,在存储时要按照一定规则对数据进行分类,通过过滤和去重,减少存储量,同时加入便于日后检索的标签。 3)数据的管理

4)数据的分析

5)大数据的价值:决策支持系统

大数据的神奇之处就是通过对过去和现在的数据进行分析,它能够精确预测未来;通过对组织内部的和外部的数据整合,它能够洞察事物之间的相关关系;通过对海量数据的挖掘,它能够代替人脑,承担起企业和社会管理的职责。 6)数据的使用

大数据平台技术框架选型

大数据平台框架选型分析 一、需求 城市大数据平台,首先是作为一个数据管理平台,核心需求是数据的存和取,然后因为海量数据、多数据类型的信息需要有丰富的数据接入能力和数据标准化处理能力,有了技术能力就需要纵深挖掘附加价值更好的服务,如信息统计、分析挖掘、全文检索等,考虑到面向的客户对象有的是上层的应用集成商,所以要考虑灵活的数据接口服务来支撑。 二、平台产品业务流程 三、选型思路 必要技术组件服务: ETL >非/关系数据仓储>大数据处理引擎>服务协调>分析BI >平台监管 四、选型要求 1.需要满足我们平台的几大核心功能需求,子功能不设局限性。如不满足全部,需要对未满足的其它核心功能的开放使用服务支持 2.国内外资料及社区尽量丰富,包括组件服务的成熟度流行度较高 3.需要对选型平台自身所包含的核心功能有较为深入的理解,易用其API或基于源码开发 4.商业服务性价比高,并有空间脱离第三方商业技术服务 5.一些非功能性需求的条件标准清晰,如承载的集群节点、处理数据量及安全机制等 五、选型需要考虑 简单性:亲自试用大数据套件。这也就意味着:安装它,将它连接到你的Hadoop安装,集成你的不同接口(文件、数据库、B2B等等),并最终建模、部署、执行一些大数据作业。自己来了解使用大数据套件的容易程度——仅让某个提供商的顾问来为你展示它是如何工作是远远不够的。亲自做一个概念验证。 广泛性:是否该大数据套件支持广泛使用的开源标准——不只是Hadoop和它的生态系统,还有通过SOAP和REST web服务的数据集成等等。它是否开源,并能根据你的特定问题易于改变或扩展?是否存在一个含有文档、论坛、博客和交流会的大社区?

市场分析工具、方法及应用(框架)

市场分析工具、方法及应用(框架) 第一章:市场环境分析方法及应用(PEST分析) 1、政治法律环境分析 政治稳定性、税收政策、产业政策、法律限制等等 2、经济环境分析 经济增长率、汇率、货币政策、GDP、恩格尔系数等 3、技术环境分析 技术变革速度、产品生命周期、技术保护、知识产权等 4、社会环境分析 人口数量与素质、地理环境、生活方式、价值观等 案例:福特E-dsel汽车项目的失误 中国汽车节能化发展还是豪华化发展方向? 第二章:行业竞争分析方法及应用 1、行业规模及发展潜力分析 产业生命周期、市场潜力、销售预测等 2、行业结构分析 行业集中度、竞争强度(波特五力分析)、行业盈利率等 3、竞争对手分析 竞争对手界定五大方法、竞争性路径分析法等 4、消费者分析 消费者购买特点、消费者购买黑箱、马斯洛需求层次、影响消费者决策的四大情境因素等 5、市场地位分析 市场占有率、波士顿“三四”规则、市场定位“三”法则等 讨论:中国轿车业行业特点及市场结构? 案例:新天葡萄酒竞争对手分析及其目标市场的选择 第三章:市场机会分析与选择工具 1、企业资源分析 企业异质资源、价值链、行业关键成功要素、资料杠杆、资源模仿性分析等2、核心能力分析 核心能力的识别、核心能力与企业价值等 3、SWOT分析 SWOT矩阵、SWOT战略组合等 4、业务选择与组合 BCG矩阵、GE矩阵、战略钟、财务能力雷达图等 案例:比亚迪进军汽车市场面临的挑战 郎能电器BCG分析 第四章:营销战略分析方法及应用 1、市场细分类型 什么是市场细分、市场细分的依据、消费者市场细分的八大类型等 2、评估细分市场 市场细分评估标准、细分市场的规模和成长性、细分市场结构吸引力等

大数据架构的介绍及分析

大数据架构的介绍及分析 数据分析工作虽然隐藏在业务系统背后,但是具有非常重要的作用,数据分析的结果对决策、业务发展有着举足轻重的作用。随着大数据技术的发展,数据挖掘、数据探索等专有名词曝光度越来越高,但是在类似于Hadoop系列的大数据分析系统大行其道之前,数据分析工作已经经历了长足的发展,尤其是以BI 系统为主的数据分析,已经有了非常成熟和稳定的技术方案和生态系统,对于BI 系统来说,大概的架构图如下: 可以看到在BI系统里面,核心的模块是Cube,Cube是一个更高层的业务模型抽象,在Cube之上可以进行多种操作,例如上钻、下钻、切片等操作。大部分BI系统都基于关系型数据库,关系型数据库使用SQL语句进行操作,但是SQL 在多维操作和分析的表示能力上相对较弱,所以Cube有自己独有的查询语言MDX,MDX表达式具有更强的多维表现能力,所以以Cube为核心的分析系统基本占据着数据统计分析的半壁江山,大多数的数据库服务厂商直接提供了BI套装软件服务,轻易便可搭建出一套Olap分析系统。不过BI的问题也随着时间的推移逐渐显露出来: BI系统更多的以分析业务数据产生的密度高、价值高的结构化数据为主,对于非结构化和半结构化数据的处理非常乏力,例如图片,文本,音频的存储,分析。 由于数据仓库为结构化存储,在数据从其他系统进入数据仓库这个东西,我

们通常叫做ETL过程,ETL动作和业务进行了强绑定,通常需要一个专门的ETL团队去和业务做衔接,决定如何进行数据的清洗和转换。 随着异构数据源的增加,例如如果存在视频,文本,图片等数据源,要解析数据内容进入数据仓库,则需要非常复杂等ETL程序,从而导致ETL变得过于庞大和臃肿。 当数据量过大的时候,性能会成为瓶颈,在TB/PB级别的数据量上表现出明显的吃力。 数据库的范式等约束规则,着力于解决数据冗余的问题,是为了保障数据的一致性,但是对于数据仓库来说,我们并不需要对数据做修改和一致性的保障,原则上来说数据仓库的原始数据都是只读的,所以这些约束反而会成为影响性能的因素。 ETL动作对数据的预先假设和处理,导致机器学习部分获取到的数据为假设后的数据,因此效果不理想。例如如果需要使用数据仓库进行异常数据的挖掘,则在数据入库经过ETL的时候就需要明确定义需要提取的特征数据,否则无法结构化入库,然而大多数情况是需要基于异构数据才能提取出特征。 在一系列的问题下,以Hadoop体系为首的大数据分析平台逐渐表现出优异性,围绕Hadoop体系的生态圈也不断的变大,对于Hadoop系统来说,从根本上解决了传统数据仓库的瓶颈的问题,但是也带来一系列的问题:从数据仓库升级到大数据架构,是不具备平滑演进的,基本等于推翻重做。 大数据下的分布式存储强调数据的只读性质,所以类似于Hive,HDFS 这些存储方式都不支持update,HDFS的write操作也不支持并行,这些特性导致其具有一定的局限性。 基于大数据架构的数据分析平台侧重于从以下几个维度去解决传统数据仓库做数据分析面临的瓶颈: 分布式计算:分布式计算的思路是让多个节点并行计算,并且强调数据本地性,尽可能的减少数据的传输,例如Spark通过RDD的形式来表现数据的计算逻辑,可以在RDD上做一系列的优化,来减少数据的传输。

相关文档
最新文档