数据重用论文

2024-06-14

数据重用论文(精选7篇)

数据重用论文 篇1

现在核内Cholesky分解算法【1,2】的发展已经比较成熟,但是当数据量很较大时,数据将无法一次性的读入内存,因此就引进核外计算的概念【3】。核外计算就是运算过程中数据并没有全部存放在存储器中,当CPU对其进行处理时才将核外数据读人内存缓冲区,处理完毕后写回文件。由于磁盘I/O操作的速度比较慢,所以在处理大数据量问题时,I/O性能显然要超过CPU性能而成为重要的限制因素。因此尽量减少访问磁盘次数,增加每次内外存交换的有效数据量,可以提高运行效率。数据重用【4,5】是一种有效的减少I/O操作次数的技术,通过将当前已经读入内存而下一次仍需用到的数据继续的留在内存,来降低I/O操作的时间。

1 基本概念

在解线性方程组的过程中,若线性方程组的系数矩阵A是实对称正定矩阵,则可用Cholesky分解法求解线性方程。平方根法(A=LLT)在计算对角线元素时要完成n次开方。为了避免开方运算,我们将线性方程的系数矩阵A分解成A=LDLT。因此,改进后的Cholesky分解的公式如下:

数据重用就是对现有或原有数据的再次有效应用。核外计算的过程中,需要多次将文件里的数据读入内存,进行计算等处理。如果当前已经读人内存数据块的一部分,在计算下一个数据块时也要用到,那部分已经存在于内存中的数据就可以被继续使用,而不用重新读人一遍,如图1所示。一般情况,重用的数据量在内存缓冲区所占比例越大时,利用数据重用技术达到的效果也就越好。

2 数据重用算法实现的Cholesky分解

2.1 Cholesky分解并行算法的描述

主节点P0将存储在该节点磁盘上的n维系数矩阵A依次调入规模为np×kb×n的数据量到内存缓冲区(其中,np代表从节点机个数,kb表示每次单个节点机需计算的行数,n为矩阵A的维数),再将第i(i=1,2,…,q)次调入的数据写回i.txt子文件中,这样就将矩阵A拆分成了q块。依次对各子文件i.txt进行Cholesky分解,即主节点先将文件i.txt调入内存缓冲区并存储在数组a中,再将数据发送到np个从节点上,每个从节点Pj(j=1,2,…,np)并行计算子文件i.txt中第j,j+np,…,j+(kb-1)*np行的数据(即用已分解完毕的子文件1.txt,2.txt,…,(i-1).txt的数据去更新文件i.txt文件中的数据,然后再用文件i.txt中的数据进行自身的分解),并将计算结果通过集群并行环境下的MPI_Bcast()函数广播到其它各个节点。在子文件i.txt的数据分解完毕后,主节点P0并没有将该数组a的数据立刻写回子文件,而是将其继续的留在内存缓冲区中;当对下一个子文件(i+1).txt进行分解时,主节点P0则不需像调用其它子文件(1.txt,2.txt,…,(i-1).txt)那样重新的读到数组aa中,而是直接将子文件i.txt的数据a赋给数组aa,主节点再将子文件(i+1).txt的数据读入数组a中,用数组aa的数据去更新数组a。这种数据重用的方法减少了I/O操作的次数,节省了运行时间。s是子文件依次分解的循环控制变量,ka表示读取已分解子文件的循环控制变量,在拆分后a∈R[kb×np]×n,aa∈R[kb×np]×n。具体步骤如下:

(1)文件拆分:

主节点机打开存储于本地磁盘中的矩阵文件A.txt,在内存的空闲容量允许的情况下,将其拆分成数据规模为np×kb×n的q个子文件,并将生成的q个子文件写回磁盘。其中,q=

(2)A矩阵的Cholesky分解过程:

a,1.txt(s=0)的Cholesky分解:(1)主节点打开1.txt,读取文件内容,赋值到a[np*kb][n]数组中,将数组a广播出去。(2)从节点myid(myid=1,2,……,np)将数组a中的第i行(i%np=myid-1)进行Cholesky分解。(3)从节点将已分解的对角元素赋给数组d[n]。(4)从节点用数组a已分解的元素重写其下三角。

b,j.txt(s=1,2,……,q-1,j=s+1)的Cholesky分解:(1)从节点将数组a的值赋给数组aa。(2)主节点将分解后的数组a写回磁盘。(3)主节点打开并读取j.txt内容,赋值到a且将其广播出去。(4)用j-1.txt去更新j.txt子文件。(5)主节点逆向依次读取(ka+1).txt(ka=s-2,s-3,,……,0),并将其赋值给数组aa。(6)主节点将数组aa广播出去后,各个从节点根据数组aa的值去更新数组a的值并用数组aa的元素重写数组a的下三角。(7)将数组a进行Cholesky分解。(8)将本次分解的对角线元素赋值给数组d[n]。(9)用数组a本次分解的元素重写其下三角。

2.2 实例展示

由于在三角分解中,分解后的上三角和分解后的下三角是相同的,所以我们可以只求矩阵的上三角。下面以图2所示情况为例说明本算法思想,算法的流程图见图3。具体步骤如下:在分解的过程中利用其并行性,主节点打开第一个子文件1.txt后,赋值给a8×12,再将a广播出到各个从节点。每个从节点卷帘的计算出分解因子后,广播出去,如此的计算kb=2次,该子文件的Cholesky分解完毕。当1.txt计算结束后,从节点将数组a8×12的值赋给数组aa8×12,主节点先将子文件1.txt写回磁盘再打开下一个子文件2.txt,赋值给a8×12,再将a广播到各个从节点。各个从节点用aa6×15卷帘的去更新a8×12,更新完毕后a8×12再像上面的操作,每个从节点卷帘的计算出分解因子后,广播出去,如此的计算kb=1次后,第二个子文件的Cholesky分解完毕。当2.txt计算结束后,最后主节点将子文件2.txt写回磁盘。

2.3 算法的复杂度分析

设文件数据总量为n×n,被划分为不重叠的q块,则每块的数据量m=n×n/q。使用数据重用前,既要读入要分解的子文件,又要重复读入一遍所有已分解的子文件。则使用数据重用前的内外存交换的数据总量S1=n×n+m×q×(q-1)/2=n×n×(q+1)/2。采用数据重用后,内外存交换的数据总量S2=m+n×n×(q-1)/2。由此可知,使用数据重用前后读入的数据量的差距△S=S1-S2=n×n-m。数据重用的方法减少了内外存交换的数据量,这部分免于交换的数据改为在内存中移动,内存移动速度远高于I/0速度,从而降低核外应用程序执行时间。

同时,使用数据重用前读取子文件的次数N1=q×(q+1)/2;使用数据重用后读取子文件的次数N2=q×(q-1)/2+1。由此可知,两种方法的读取文件的次数相差q-1次,文件的读取时间可以提高的效率为P=(2×q-2)/(q2+q)×100%。我们可以将上面的效率提高公式求导得P'=2×(-q2+2×q+1)/(q2+q)2。所以,当系数矩阵划分的子文件数量q≥3时,子文件的数量越少,效率提高的越明显。在理想的状态下(即不考虑通信、等待和内存容量等影响),效率的提高率可达到33.3%(q=3)。

3 实验测试与结果分析

实验环境采用由5台主频为2.8GHz的Intel Xeon CPU,内存为ECC DDR-2 SDRAM 2GB的Dell PowerEdge 2850构建的集群。该集群运行Linux RH9操作系统,并且建立了MPI并行编程环境。本文测试的两个程序分别为:带状循环划分的核外程序out和带状循环划分的核外数据重用程序chy。

表1表示当A的阶数n=2478(kb=10,20,40)时,核外数据重用程序out和核外程序chy的Cholesky分解执行时间对比,其中节点数np分别为2,3,4,5。图4为核外数据重用程序相对于核外程序的效率提高百分比。

由表1可见,核外数据重用方法使得Cholesky的分解时间明显短于核外分解时间。这是因为采取数据重用后,在每次分解第i(i=2,3,….,q)个子文件时,主节点都少读一个已分解的子文件。这样就减少了I/O操作所花费的时间,提高了系统的执行效率。

图4表明,核外数据重用分解并行算法的效率明显好于核外分解并行算法,并且随着节点个数的增加,提高的效率也随之增大。同时,单个子文件分配到各个处理器上的矩阵行数kb越多,效率提高的百分比就越大。这是因为随着节点数目np的增加或处理器上的矩阵行数kb越多,子文件的大小增加,数据重用所节省的I/O操作时间占的比例也随之增大。所以在不超过系统内存的情况下,节点数np越大,行数kb越多,效率提高的幅度就越大。

4 结束语

核外计算中,数据存储在磁盘上,当CPU对其进行处理时需将其读人内存缓冲区。由于磁盘I/O操作的特点是启动开销大,所以降低外存访问次数可以大幅度地提高运行效率。本文通过对Cholesky分解并行算法的研究,表明数据重用方法减少读取子文件的次数,减少数据的读取量,从而提高Cholesky分解算法的效率。为了存放重用的数据,本文采用双缓冲区的方式,即为一个核外数组分配两个内存缓冲区,分别用于存放本次和下一次读入的数据块。采用数据重用技术时,重用的数据量在内存缓冲区所占比例是保证重用效果的关键。目前分布存储计算机的处理速度都很高,而其网络通信速度较慢,所以用增加计算和通信粒度的办法也可以减少通信成本,提高并行Cholesky分解的执行效率。

参考文献

[1]Distributed SBP Cholesky Factorization Algorithms with Near-Optimal Scheduling[J],FRED G.GUSTAVSON,LARS KARLS-SON,BO KAGSTRO M,ACM Transactions on Mathematical Software,2009,36(2):1-25

[2]A Fully Portable High Performance Minimal Storage Hybrid Format Cholesky Algorithm[J],BJARNE S.ANDERSEN,JOHN A.GUNNELS,FRED G.GUSTAVSON,JOHN K.REID,JERZY WASNIEWSKI,ACM Transactions on Mathematical Software,2005,31(2):201-227

[3]核外计算中的几种I/O优化方法[J],唐剑琪,方滨兴,胡铭曾,王威,计算机研究与发展,2005,42(10):1820-1825

[4]核外计算中I/O优化策略的研究[J],王维,胡铭曾,哈尔滨商业大学学报,2005,21(5):600-603

[5]多处理机系统循环间数据重用的cache优化[J],丁永华,原庆能,藏斌宇,计算机学报,1998,9(8):580-58

数据重用论文 篇2

关键词:重用度,匹配度,满足度,知识重用系统模型

0前言

目前企业间竞争日益激烈, 产品越来越复杂, 交货期越来越短, 质量要求越来越高, 使得企业必须尽可能快速的开发新产品以响应市场的需求。通常一个新的设计问题的解是通过对已有设计问题的推理、修改而获得。有数据表明, 75%的设计是基于实例的设计[1], 一个新产品的开发。约40%是把过去已有的知识借鉴使用, 约45%是对过去已有的设计知识修改后再应用于新设计开发当中, 只有约15%是完全创新的设计[2,3]。所以, 如何有效的使用已有的设计知识进行新产品的开发, 成为制约产品快速开发及提高企业竞争力的关键。

1重用度

在对设计知识重用时, 从设计知识库中检索到有用的实例并从中提取有用信息, 是关键因素之一。对于一个产品中所包含的设计知识能否被设计人员提取并重复利用, 取决于这个产品的重用度, 即设计时对设计知识的重用程度。

1.1重用度 (Degree of Reuse, Do R) 指知识在一个设计过程中的重用程度

以设计实例的重用为例, 重用度是由相似度 (Do S) 和满足度 (Do F) 的加权和来计算。如下式所示:

其中, wm和wn称为权值, Do S和Do F可由产品设计人员或者设计根据对重用的影响来确定。

1.2匹配度 (Degree of Similarity, Dos) 指设计实体之间的匹配程度

匹配度在[0, 1]之间变化, 当匹配度为“0”时, 两个实体完全不匹配;当匹配度为“1”时, 两个实体完全匹配。匹配度一般用匹配性距离来计算。

1.2.1计算匹配性距离的方法

源设计实例与目标设计例之间的匹配性可以通过以下几种计算方法:欧氏离、曼哈顿距离、无模距离。

欧氏距离

当设计知识中每个属性值规范化以后, 欧式距离可通过下式计算:

曼哈顿距离

无限模距离

1.2.2特殊匹配度的衡量标准

莱恩史铁距离

一些非数值型数据的处理计算时, 测量集合的匹配性需考虑两个集合A和B, 其中常用的测量如下:

字符串的匹配度的测量, 由于字符串的顺序不同字符不同, 当给定两个字符串m, n匹配性可根据包含、重叠合变化匹配度判断。

1.2.3满足度

(1) 满足度 (Degree of Fulfillment, Do F) 。用来描述距离要求值的偏离值和要求满足的程度。匹配只是从结构的方面对两个设计例进行比较判断, 这并不能完全满足设计时所要求的功能、行为等方面的匹配性。

(2) 满足度的计算。设计要求可分为领域中的属性定义、常量表达式、关系算子和逻辑算子四个部分。满足度先经过属性匹配然后通过数学逻辑表达式将属性值及可能的范围进行合理的结合产生新的可能值, 依次为每一个关系表达式计算它的满足度, 最后与关系算子的满足度结合为逻辑表达式从而得出满足度。

关系算子的Do F计算

其中, p——属性, x——任一属性, r——要求, y——任一要求逻辑算子的Do F计算

2设计知识重用的系统模型

工业产品的创新开发通常都会涉及多个知识领域, 因此对于不同领域知识的设计模型都会有所不同, 设计人员在开发新的产品时就应该从中择取最高效、优势的模型从而提高开发有效利用率。Inns和Neville[4]提出了以公司层面为基础的设计过程模型, 以此模型来支持设计知识的重用。

Shahin等[5]人认为, 设计重用系统是一个有机的设计系统, 数据库是支撑设计的重要环节, 是由许多个设计过程集成的一个整体。他们提出的设计重用系统构造方法中系统功能包括数据库结构化和信息结构化。这些信息包括产品概念、具体设计及详细设计、方案概念、优先权要求等。

本文提出了一种设计重用系统如图1所示。

该系统的功能主要有:记录整个设计过程;查询有效设计;根据相关特征, 查询已有实例;具有设计经验记录存储功能;支持对已有实例及正在进行设计过程知识重用。

3小结

在设计过程中有许多复杂知识交叉作用, 这些设计知识也发挥着各自不同的作用在整个创新设计过程当中。发绝大多数新产品的开是已有设计知识或者设计产品要求的修改及延伸。因此, 新产品的开发中各学科知识交叉在所难免, 这就要求开发人员了解各个领域知识才能保证快速的进行产品设计。若能够使用以前的设计知识, 就可以减少重复劳动, 从而提高效率。设计知识能否重用取决于该设计知识的重用度。本文提出了重用度的概念并深入研究了相似度, 满足度两个关键评价标准, 进而提出了几种匹配度、满足度合重用度的计算公式。最后根据Inns、Neville和Shahin等人的理念提出了一种设计知识重用系统模型。

参考文献

[1]林春.基于MATLAB的点云数据处理[J].科技资讯, 2006 (08) :85-86.

[2]单晨伟.叶片类零件螺旋铣削切触点轨迹规划问题研究[D].西安:西北工业大学, 2004.

[3]施法中.计算机辅助几何设计与非均匀有理B样条[M].北京:高等教育出版社, 2001.

[4]Inns, T.G.and Neville, P.Establishing a Company Level Design process to Facilitate Design Reuse.In Porceedings of Engineering Design Conefernee’98 on Design Reuse.London:Proefssional Engineering Publishing Limited, June1998

三代皇帝重用张安世 篇3

汉武帝去世后, 年仅8岁的汉昭帝即位。因张安世一贯勤勉敬业, 大将军霍光奏请皇帝, 封张安世为右将军兼光禄勋, 做自己的副手。此时, 张安世的职位在大臣中已居第二位, 可谓地位显赫, 但他仍然兢兢业业。汉昭帝特意下诏, 赞扬张安世有尧舜之时的古大臣之风, 加封他为富平侯。

汉昭帝在位十三年后去世, 张安世又同霍光一起辅佐汉宣帝即位。霍光去世后, 御史大夫魏相上奏皇帝提出:“张安世侍奉两代皇帝三十余年, 一直忠诚信实, 谨慎厚道, 夙夜不懈, 应当封为大将军。”宣帝也想重用他。张安世听到这个消息, 急忙请求单独面见皇帝, 说:“我自认才力不足以承担大将军之职, 请皇帝哀怜, 以成全老臣的性命。”宣帝笑着说:“你过于谦虚了, 你若不行, 还有谁能行呢?”张安世百般推辞无效, 最后, 皇帝仍封他为大司马卫将军, 领尚书事, 并将都城以内的全部兵权交给他。

综观历史上许多权臣大将, 处于这样的地位, 往往踌躇满志, 骄狂自得。张安世则不然, 他深知月盈则亏、水满则溢的道理, 更加小心畏忌, 谨慎供职。他每次同皇帝一起参与大事决策后, 往往请病假不上朝, 等皇帝就此发出诏令后, 再派吏员到丞相府探问是怎么回事, 以致连朝廷大臣都不知道他曾参与密议。他待下属也特别宽厚。任光禄勋时, 曾有一个郎中因喝醉了在殿中小便, 负责官员禀报张安世, 欲按规惩治, 张安世说:“你怎么知道他不是倒汤水呢, 怎么能以小过成人罪责?”用这种方式保护了这位下属。他又因父子尊显, 心不自安, 多次奏请皇帝将自己的儿子外派到地方任吏职。

张安世为官历武帝、昭帝、宣帝三朝, 朝中屡经大变, 宦海之中风急浪诡。张安世不管风云如何变幻, 从不结党营私, 一直正道行世。这是他能得到三代皇帝始终如一信任的重要原因。

应当说, 他同大将军霍光关系不错, 彼此绝对信任。霍光推荐张安世做自己的副手, 也可以说他对张安世有知遇之恩。但是, 张安世同霍光的交往, 完全是公谊, 是为国效力, 为君尽忠, 没有丝毫个人谋算的私心。正因如此, 当霍光死后数年, 他的儿子霍禹、霍云、霍山等阴谋作乱的图谋败露, 在霍氏因此被灭族的一场大动乱中, 张安世没有受到丝毫牵连。

张安世的哥哥张贺任掖庭令, 在武帝曾孙 (后来的汉宣帝) 年少寒微时曾尽力扶持与资助, 并认为武帝曾孙刚毅、有才气, 多次向弟弟张安世称道。张安世就劝止他哥哥说:“年轻皇帝 (指汉昭帝) 在上, 不宜称赞皇曾孙。”这些话皇曾孙当时都知道, 他即位当皇帝后对张安世说:“当年掖庭令称赞我, 你制止他, 做得很对。”后来, 宣帝为表彰张贺当年扶持之功, 封过继给张贺的张安世的小儿子张彭祖为阳都侯。

张安世当时贵为勋臣中的第一人, 父子封侯, 食邑超万户。但是, 张安世自奉俭约, 平素在家只穿黑色粗丝做的衣服, 夫人亲自纺线织布, 家中奴仆皆劳作治产, 没有游手好闲者, 由此也导致家境殷厚。他因此上书皇帝, 要求辞去官家俸禄, 当时官方的账本上, 张家拒领的金钱累计达百万之数。

重用真想干事情的人 篇4

到了公司, 由于他提前到达, 前面还有人在谈话, 他就坐在休息室等着。他自己到饮水机边用纸杯接了一杯水, 正要返回座位, 看见一位中年人手里拿着材料急匆匆地走过来, 他便侧身让这位中年人先走。轮到人事经理和他谈话了, 人事经理问了他一些问题, 他一一作答。完了以后, 人事经理问他还有什么问题, 他也不客气地提了一系列问题, 从公司产品的性质, 在市场上的地位, 发展的前途, 问到如果录用后自己会从事什么工作, 有哪些特殊要求, 工作中遇到困难会得到什么帮助, 以及自己的发展前途等等。谈完之后, 人事经理告诉他, 回去等消息, 有什么决定会马上通知他。

很快他就得到通知, 说是决定录用, 要他去报到。报到时, 人事经理告诉他, 本来不可能这么快做决定, 但是那天谈话时你提的问题给我的印象太深了, 很少有人这样提问, 可见你是一个真想干事情的人。我把你的情况给总经理汇报了, 总经理问是不是那天在饮水机边侧身让路的小伙子, 我说是的。总经理说, 能够主动照顾别人的人, 素质错不了。所以就提前决定录用了。

我在这里不是介绍这位年轻人求职面试的技巧, 而是想着重肯定这位人事经理的慧眼, 肯定这家公司善于发现和重视想干事情的人。这也是企业文化, 而且是企业文化的一项重要内容。

有一位香港的企业家曾经问我:“内地的人怎么那么看重钱?”我问他怎么讲。他说, 我这里办一个企业, 有许多人来求职, 几乎每一个人都是只问给多少工资。我说, 人家到你这里工作自然希望工资高点。他说, 问题是他们除了工资之外, 对于我的厂房、设备水平, 用什么原料, 做什么样的产品, 销路怎样一概不问, 我怎么能相信他们是真想来做事情的。

企业是干出来的, 不是说出来的, 也不是只靠钱堆出来的。干才有出路。干得好, 企业才能生存, 才能发展, 才能有利润, 才能有工资、有福利。企业不是提款机, 不干就什么也没有。

企业发展要靠人, 靠人才。人各有长短, 要因材施用。最基本的是要用想干事的人、肯干事的人, 不肯干, 什么才能都没有用。

IOS重用机制研究与实践 篇5

IOS开发中, 如何更好地控制CPU开销和做好内存管理是每个开发者都必须考虑的问题, 为了使开发出来的应用占用更少的CPU和内存, Cocoa Touch提供了一系列好的方法, 开发者可以利用系统提供的方法对自己的应用加以优化, 使开发出来的应用运行更快, 用户体验更好。重用就是系统为开发者提供的方法之一。

1 IOS重用原理

1.1 重用

在IOS的一些视图中, 它们的内部包含子视图, 当父视图显示区域发生变化时, 比如用手滑动屏幕, 原来在屏幕中的子视图就会滑出到屏幕之外, 而原来在屏幕之外的子视图就有机会进入屏幕中[1]。对于进入屏幕的不同子视图对象而言, 在进入屏幕时都会实例化该视图, 同时为了节约内存, 对于移出屏幕的子视图也应该执行释放操作。如果包含的子视图数量很多, 频繁的实例化必将造成CPU和内存开销增大, 反复的释放对象操作虽然能及时释放内存空间, 但会加大CPU开销。为了解决该问题, IOS的一些控件提供了重用机制。如果屏幕上所有的子视图或者部分子视图是相同的对象, 采用可重用对象设计不需要进行反复的实例化新对象和释放旧对象操作, 而是先使用可重用单元格标识 (reuseidentifier) 到系统重用队列中去查找可重用对象, 如果找到则重用该对象, 没有则创建新对象。在IOS 6以后, 可以使用可重用对象的父视图有表视图 (TableView) 、集合视图 (UICollectionView) 和地图视图 (MKMapView) [1]。

1.2 TableViewCell重用机制

TableView是IOS中应用最广的控件, IOS应用中很多用户界面 (User Interface) 都采用TableView来实现。因此表视图的设计往往对应用起到重要作用。表视图是典型的可采用重用设计的对象。其内部有两种子视图可采用重用机制设计, 它们是表视图单元格 (UITableViewCell) 和表视图节头节脚视图 (UITableViewHeaderFooterView) 。

如图1所示, 这是在电子商务应用中经常可见到的用户界面, 该UI主要由TableView和Searchbar两个视图构成, 假设该表视图总共有100个单元格 (TableViewCell) , 分别以Cell0—Cell100给单元格命名, 其中可见的有6个单元格, 当Cell0移出屏幕后, 将会有另一单元格Cell6进入屏幕, 当Cell1移出后, Cell7进入屏幕, 依此类推。从界面上可以看出, 这些单元格除了内容不一样外都是同一种样式, 因此IOS并不会采取反复实例化单元格和释放单元格的方式, 而是将最先移出的Cell0加入一个重用CeLL队列中, Cell6要进入时, 首先查找重用队列中是否有可重用的单元格, 如果没有才新建单元格, 否则重用已有单元格。Cell7可以重用Cell0, Cell8重用Cell1, 依此类推。因此, 该表视图不管有多少单元格, 实际只需实例化7个单元格, 也即屏幕可见单元格个数加一。查看UITableView类, 可以看到有- (NSArray*) visibleCells方法, 该方法可以返回一数组对象, 保存表格中当前可见单元格对象[2]。对于同一个应用可能存在多个重用对象, 为了区分不同的重用对象, 可以为每个重用对象设置一个重用标识 (reuseIdentifier) 。在系统定义的UITableViewCell类中可以看到@property (nonatomic, readonly, copy) NSString*reuseIdentifier;语句, 该属性可以获取单元格的重用标识。

2 TableViewCell重用实例分析

为了更好地说明重用机制在创建表视图中的优势, 以图1所示表视图为例, 对重用和不重用单元格两种情况进行介绍与分析。

系统为IOS表视图单元格提供了4种可选的样式UITableViewCellStyleDefault、UITableViewCellStyleSubtitle、UITableViewCellStyleValue1, UITableViewCellStyleValue2, 图1所示表视图不适合这任意一种样式, 其单元格是一种自定义的单元格。对于自定义的表视图单元格可以采用3种方式创建:Nib文件、Stroyboard以及代码实现。Nib文件方式和Storyboard方式都是采用图形界面IB (Interface Builder) 来创建单元格及其子视图, 其特点是直观方便、代码少。采用代码实现比其它两种方式更灵活, 但编写代码相对比较繁琐。

2.1 单元格实现原理

Cell继承自UITableViewCell类。如果视图控制器遵循UITabelViewDataSource协议, 通过实现tabelView:cellForRowAtIndexPath:方法, 数据源会为表视图提供所有Cell对象, 即单元格。Tableview中Cell和数据是分离的, 因此在tabelView:cellForRowAtIndexPath:方法中应先生成单元格, 然后为单元格填充指定的数据内容。本例中即先创建包含4个标签 (UILabel) 控件和一个图形控件 (UIImage) 的单元格, 然后将图书图标、图书名称、价格、卖出册数及售出地的内容填入该单元格。

2.2 IB实现方式

2.2.1 步骤

nib实现方式通过创建单元格图形界面, 采取加载nib文件和重用的方式在tabelView:cellForRowAtIndexPath:方法生成单元格。简要步骤如下。首先在项目 (project) 中创建一个空白view, 并命名为Custom.xib。向view中拖入一个UITableViewCell, 在该单元格中加入4个标签 (UILabel) 控件和一个图形控件 (UIImage) , 调整位置和大小。创建一个UITableViewCell子类CustomCell, 并将CustomCell类与UITableViewCell控件关联 (见图3) , 设定单元格重用标识CellIdentifier (见图4) 。最后为每个单元格子视图控件创建一个插座变量。

Stroryboard方式类似于nib方式, 只是不需要单独建立view文件, 只需在已有tabelview中加入tableviewcell, 其它操作和nib方式类似。

2.2.2 关键代码

代码段1:

代码段2:

以上代码为nib文件方式创建单元格所采用的重用实现, 如采用storyboard方式, 则需将上述代码段1删除, 将代码段2中if语句代码改为“cell=[[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CellIdentifier"];”。但该语句只是创建系统缺省模式的cell, 如果是自定义的cell, 还必须通过代码创建cell的各子视图。

2.3 代码实现方式

代码实现cell重用, 可以通过重写- (instancetype) initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) reuseIdentifier方法, 在该方法中创建cell的子视图, 并添加到cell。在View load方法中添加代码[self.tableView registerClass:[CustomCell class]forCellReuseIdentifier:@"CellIdentifier"]为Tableview注册CustomCell类。再通过CustomCell*cell=[tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"forIndexpath:indexpath]语句进行重用。因为刚开始无可重用cell, 所以用if语句判断cell==nil时, 执行语句“cell=[[CustomCell alloc〗initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:@"CellIdentifier"];”。该语句对cell进行初始化, 并指定重用标识为“CellIdentifier”。重写方法代码示例如下。

3 TableViewCell重用优势分析

3.1 试验测试

为了比较使用重用机制与不使用重用在系统开销方面的区别, 可以做一个简单的测试, 比较两种情况系统在cpu资源和内存资源的损耗方面的差异。测试重用机制采用前述Nib文件重用方式;不使用重用机制的情况, 采用代码实现, 将前述代码进行简单的修改。将前述重写- (instancetype) initWithStyle: (UITableViewCellStyle) style reuseIdentifier: (NSString*) reuseIdentifier方法中的代码段3去掉, 将其加入UIViewTableCell的Init方法。如下所示。

代码段3

//代码段4

运行项目, 在debug navigator下查看两种情况下CPU资源和内存的变化。使用重用机制和不使用重用分别如图5、图6所示。

图5和图6中左边为项目运行初始状态, 右边为项目运行后模拟滑动屏幕。可以看出项目刚开始运行时, 两者所占用CPU和内存资源基本上无差异。在屏幕滑动时使用重用机制内存占用比不用重用机制大, 但CPU占用比不用重用机制小。屏幕滑动越快, 两种情况下的CPU占用差异越大。而且如果所用cell不是自定义样式, 而是系统默认的cell样式, 则这种区别更明显。

利用MAC OS自带的内存动态分析工具instruments进行内存测试, 也可以得出类似结论。单击product菜单下的profile子菜单或者使用快捷键commad+i可以打开instrments工具。

3.2 结果分析

为什么实验结果显示, 运用重用机制占用内存反而比不用重用机制占用内存更多?难道ios的重用机制不节约内存, 还耗费内存?为了说明该问题, 可以从项目的运行原理进行分析。所测试的项目是在xcode5下基于ios7操作系统, 支持ARC内存管理机制。不使用重用机制, 创建表格所作的操作是反复创建cell, 释放cell, 当单元格进入屏幕是执行创建操作, 移除屏幕时执行释放操作, 释放cell后, 所占用的内存就释放掉了。因此如果屏幕处于静止状态, 理论上来说只有6个cell占用内存。而对于使用重用机制创建cell时, 除了屏幕可见的6个cell占用内存, 还有重用队列中用于重用的cell所占用内存, 因此重用的cell越多, 则所占用的内存越大。而对于CPU而言, 不使用重用机制必须反复创建cell和释放cell, 而使用重用机制则只需在运行开始时创建cell, 到不需要TableView时才释放, 因此, CPU损耗重用的情况比不重用的情况要小。

以上试验是在Mac Os系统下的模拟器上进行的, 应用在iphone上运行时的实际情况比这要相对复杂, 如有时可能多个应用同时运行, 或者需要加载网络数据, 有时移动屏幕速度又过快。对于iphone有限的CPU资源而言, 所有这些情况都有可能造成CPU资源损耗过大, 而使运行速度变慢, 以至系统不能及时释放移出屏幕的cell, cell释放的延迟会导致内存资源被反复创建的cell所占用, 严重时甚至耗尽内存使应用crash掉。反之, 如果采用重用机制就可避免这种情况的发生。因为重用已有cell比反复创建和释放一个新的cell实例要节约CPU时间, 可以改善内存延迟释放问题, 因此更能体现出重用机制的优势。

4 结语

通过对重用机制在定制tableview中的应用实践可以看出, 对于大型的tableview, 成千上万行的表格, 如果具有相同样式的cell, 使用重用机制可以极大减少系统开销。对于系统没有提供重用机制的控件, 也可利用重用原理, 自定义重用方法。在CPU处理能力和内存有限的情况下, 最大限度控制系统开销是开发的基本准则。

参考文献

[1]关东升.ios开发指南-从零基础到App Stroe上架[M].第2版.北京:人民邮电出版社, 2014.

国家精品课程重建,更需重用 篇6

取得成就的同时,一个严峻的问题也凸显出来,即精品课程的使用效率过低。这是政府、高校、教师、学生都必须正视的、亟待解决的一个重要问题,同时也直接关系到精品课程的后续建设和持续发展。

1 精品课程网站“重建轻用”

精品课程建设的出发点是为了实现优质资源共享、整体教学水平提升;核心是解决好课程内容建设问题;落脚点和关键点则是课程资源建成后的共享与应用。

从教育部《关于启动高等学校教学质量与教学改革工程精品课程建设工作的通知》颁布起,各高校纷纷积极开展起精品课程的申请、筹备及建设工作,相继完成了一批国家级、省级和校级精品课程的组建任务。然而,从目前各地院校对精品课程的使用情况来看,却存在着比较严重的“重建轻用”现象。相当一部分高校十分重视评审环节,不惜一切代价拿到省级或国家级“精品课程”称号。评上以后,由于网络教学资源更新速度迟缓、缺乏课程共享意识、应用机制,相关教学服务不到位,大量各级精品课程仅仅停留在一个网站的层面,教师上课不用、学生下课不看,使得本应是最优秀资源的汇集地变成了只为评审、考核而设的“虚”网,不仅覆盖面小、使用率低,而且根本没有起到一个示范性课程的作用。这种为“建”而建、重建轻用的做法,明显违背了国家开展精品课程建设的初衷。如何有效解决这一问题,亟须引起高度重视。

2 精品课程重在“用”

2.1 加大宣传力度,实现资源共享重用

作为开放教育资源的一种,目前我国精品课程网站的访问者、使用者主要是教师和在校学生。山东大学高教研究所在学生中进行的一项调查显示学生对精品课程网络资源的认知度分别为:5%非常熟悉、25%比较熟悉、46%听说过,但很生疏、24%完全不了解;而使用率分别为:6%经常使用、28%偶尔使用、30%极少使用、36%从未使用。由此可见广大学生对精品课程的认知度、使用率都极其的低。而要改变这种高资源耗费率、低资源利用率的状况,势必要加大对精品课程的宣传力度。因此从项目管理者层面要通过多种方式向学校、教师宣传国家建设精品课程的真正用意,以及资源共享对社会、学校、个人所产生的积极影响;从学校层面要在建设的同时更加关注资源的使用情况,在学生、教师中间大力普及课程资源信息;从国家层面应利用媒体等对整个社会进行精品课程的宣传,使社会知道国家这一资源建设举措,成为个人学习提高、机构培训教育的一种资源,从而让精品课程真正服务于社会,服务于终身学习,进而体现其真正价值所在。

2.2 统一资源支持平台,增进课程资源共享重用

精品课程资源使用率低下的另一个重要原因是课程网站浏览不畅、在线视频播放困难、资源的可获取性极其不稳定,这些大大降低了对学习者的吸引力、阻碍了课程资源的使用。造成这一现象的直接原因就是缺乏统一的资源支持平台。分析开放课程的领航者MIT OCW的成功经验,我们可以发现:该项目充分利用现有IT成熟的网络技术,所有课程均可顺利访问,这些课程界面统一,对课程教师的技术要求比较低,教师可以把主要精力集中在准备资源、教学设计等课程内涵建设工作上。而我国的精品课程没有统一的课程平台,课程开发团队多是自己建设网站、技术门槛较高,很多教师花去大量的时间、金钱用于网站的建立,而忽视了课程的长效性内涵建设;另外由此也造成了各个学科的课程比例分配不当,主要表现在理工科课程数超过总课程的一半,而历史学、哲学等文科课程则相当少。因此,建立统一的资源支持平台,才能从技术方面增进精品课程资源的共享重用。各高校应建立校级资源支持平台,统一存放精品课程,避免一门课程一个平台,以便于课程访问与维护。平台提供工具,方便教师制作标准的、便于“重用”的课程资源。同时组建专门小组,从技术、人员方面进行视频录制、网站制作、系统维护等的支持、保障工作。而国家则应建设一个精品课程资源共享平台,上传所有的精品课程资源到服务器上,并在各省建立网站映像,以统一开放的方式分享给教师、学生以及其他自学者。这样就从技术上对实现精品课程资源共享重用给予了保障。

2.3 资源及时更新,保持精品课程对大众的吸引力

“为评而建”是现在精品课程建设中出现的严重问题,表现为:课程一旦获得立项,就缺乏相应的后续建设、停滞不前,不注重课程内涵的进一步提升,学校也缺乏管理的长效机制。由于无法做到一个动态的、发展的网络资源库,导致精品课程应用功能的缺失、严重挫败了公众对其使用的积极性,最终沦为一个“死网”、无用之网。遏制这种现象的唯一出路就是保持对大众的吸引力,也是精品课程得以持续性被“重用”、发挥长效性功能的重要保障。这就要求各级课程网络资源内容要及时更新,时刻保持其“新鲜度”。教育部为此也提出了各级精品课程网站资源每年的更新率要达到10%的要求。具体实施过程中应当注意教学内容与时俱进,可将最新研究成果以补充教材和教学资源的形式及时在课程网站上予以发布,实现资源的动态发展。借助信息技术把优质的教学资源高效、快捷地呈现给学习者,有效弥补课本教材建设普遍存在周期过长,形式单一,跟不上时代发展节奏的问题,发挥精品课程网络技术的优势,实现网站资源灵活性、及时性和前沿性的特点;同时坚持以人为本的思想,依据课程的特点,在使用、结构、页面、色彩等各方面充分考虑到访问者的需要,方便其学习、使用。从而强化精品课程在大众心里的“有用性”,提高其使用效率。

2.4 建立促进机制,保障精品课程从建设向应用转型

建立促进机制,鼓励教师积极使用网站资源,是精品课程从建设向应用转型的重用保障。教师是推进精品课程网站应用的重要力量,各高校要避免在课程建设上对教师奖励力度大,而对推广使用却没有刚性要求的做法。应建立各种应用机制,注重绩效评价:改变教师主观上存在不想破旧、不思立新的惰性思想,客观上存在“不能胜任”的问题。大力鼓励教师利用精品课程网络资源进行教学模式改革、探讨新型教学方法、调动学生积极性、激发学生潜能、提高教学质量,从而回归精品课程建设的初衷:大规模投资、大规模受益,以达到整体教学水平的提升。

参考文献

[1]倪丽娟,柴双超.网络教学资源共建共享研究[J].2011(10):3-5.

[2]田华.高职精品课程建设的精品特性.陕西教育,2011(7-8).

基于VMM构建可重用验证平台 篇7

随着SoC设计复杂度的持续增加,验证成为当前SoC以及可重用IP模块设计中面临的最大挑战。虽然有新的验证技术产生[1],但是设计能力与验证能力之间的差距仍然巨大。特别是在芯片开发过程中,通常集成了不同厂商的多个IP模块。一方面需要将使用不同验证策略的测试案例集成到一起,另一方面需要在同一个验证环境中,将不同级别的IP组件进行扩展或者组合,这样必然造成验证周期的延长[2]。为了解决上述问题,需要开发统一的验证平台,对不同设计的不同级别进行功能验证。同时,该验证平台还能够对验证过程进行有效的控制,确保功能验证的完整性。利用SystemVerilog支持的VMM验证方法学,能够建立层次化的可重用验证平台[3]。同时,Synopsys 公司的VCS仿真验证工具完全支持SystemVerilog描述的结构功能,能够实现随机激励的自动生成[4]、覆盖率统计和断言检查,从而有效完成整个设计的验证过程。

1 SystemVerilog语言和VMM验证方法学

1.1 SystemVerilog语言

面向对象的类结构支持继承机制,利用类结构建立事务和事务处理器,具有代码模块的独立性、动态连接性和易于维护性等特点。允许使用者进行代码复用,舍去许多麻烦的设计验证细节,降低验证的复杂度。

SystemVerilog硬件设计验证语言融合了面向对象的编程技术[5,6],与以往的过程性设计语言(Verilog或VHDL)相比,更易于建立验证平台。利用基于面向对象的类结构,对需要处理的数据进行抽象和包装,利用基于事务的工作机制代替基于引脚的信号变化,从而可以在事务上进行验证,提高验证效率。

1.2 VMM验证方法学

VMM是Synopsys公司推出的基于SystemVerilog的验证方法学,推荐层次化的验证架构[7,8]。标准的验证平台共分五个层次实现,每个层次又包含多个验证组件,结构如图1所示。

类(Class)是构成VMM验证平台的核心,每个层次的验证组件都是基于类结构实现。信号层为最低层次,用于实现验证平台与设计电路(DUT)之间的信号连接。命令层中的驱动器执行上一层次送来的命令,然后产生相应的驱动信号送入DUT。监视器对DUT的输出信号进行监视,并生成相应的控制命令。功能层则由场景层的生成器驱动,并为命令层提供事务命令,同时将转换后的事务命令送入到记分板。检查器则对来自于记分板和监测器的结果进行对比。场景层中包含生成器,主要是生成带约束的随机激励。测试层为测试台的顶层,是用户自定义的测试案例,包含对激励的约束。该层的行为确定其他层次的作用,启动和控制整个测试平台的运行。在验证过程中,利用功能覆盖率评估测试进度,用于指导修改随机激励的约束条件,最终达到覆盖率要求。

在建立测试平台时,并不要求建立所有的测试层次,需要根据实际情况进行适当改进[9]。当DUT含有多层协议时,则可能需要多个层次。当场景层比较简单时,可以将场景层与功能层进行合并。

2 可重用验证平台

2.1 验证环境

通用异步收发器(UART)主要用于控制设备间的串行通行,在SoC的设计中的应用比较广泛。特别是在SoC的设计中复用UART IP核,能够提高SoC设计效率,降低成本。因此,必须保证UART IP核功能的正确性,需要对其进行充分的功能验证。

利用VMM验证方法学建立的UART验证环境主要由4部分组成[10],如图2所示。

在顶层模块(rs232_top.sv)中,利用时钟生成器生成与DUT和测试台连接的时钟信号,并分别将接口(rs232_if.sv)、测试台模块(rs232_test.sv)和DUT(rs232.v)进行实例化。通过接口将测试台与设计模块进行连接,避免了其他外部电路与设计之间的操作,同时降低了错误发生的几率,缩短了调试测试台代码和设计代码的时间。

2.2 验证平台的建立

利用层次化的类结构建立UART的验证平台,组成结构如图3所示。利用SystemVerilog的面向对象特征,所有的验证组件都在单独的类中实现,包括配置和数据事务,生成器、驱动器等,以便于其他类进行调用,并且易于复用和扩展。

(1) 事务类。

根据UART功能验证需求,在一种工作模式下,需要发送或接收多个数据。因此,在该测试台中,通过两个事务类完成UART的随机化配置和数据生成。在配置类中,定义带约束的随机化的UART可配置选项和验证环境的可配置选项,使得在测试环境建立前,确定UART的工作模式和收发数据的次数。在数据类中,定义带约束的随机化的接收发送数据。

(2) 事务处理器类。

事务处理器主要完成接收事务的处理,并传递至下一个事务处理器。事务处理器的生命周期相对于验证环境是静态的,在仿真起始时创建,存在于整个仿真过程。在该验证平台中的事务处理器同样利用类结构实现,包括生成器类、驱动器类、监视器类和环境类。

生成器类提高了激励生成的层次,使得激励的生成与实际的驱动器和监视器等测试台组件分离,从而易于对事务进行修改。该类调用事务描述符,并生成相应的随机事务,同时将事务传递给驱动器。驱动器类则产生UART工作的控制信号,并将配置数据和接收发送数据写入到相应的寄存器中。监视器类则完成对中间事务的检测,并适时将事务输出。环境类中包含生成器类、驱动器类、监视器类等的实例化。在该类中完成验证的整个控制过程,确保所有的验证步骤按照正确的顺序执行。

(3) 回调方法的应用。

回调方法允许使用者在不修改事务处理器代码的情况下,扩展事务处理器的行为。必须在处理器内部对事务执行之前或之后启用回调方法。事务前的回调允许注入故障或者延时。事务后的回调则可以将已经被处理的事务送入记分板或者送入功能覆盖模型中,进行覆盖率数据的采集。

在该验证平台中,利用回调方法创建了三个回调基类的扩展类,分别用于故障的注入、将事务送入记分板和覆盖数据的采集。

(4) 测试案例的设计。

为了达到更高的覆盖率,需要对随机激励的约束进行修改。或者对于随机化激励难以验证的功能,则需要创建特定的测试案例。此时,需要对生成器的功能进行扩展。

该验证平台采样工厂模式,可以在不修改验证环境的情况下,通过只修改测试案例,达到改变随机约束的目的。能够同时支持直接测试和随机测试。需要特别注意的是,每个测试案例都要实例化验证环境,在测试案例中对生成器的父类初始化完成后,再对生成器的子类进行初始化。

在UART的验证中,共创建了以下3个测试案例:

初始测试案例(debug_test.sv):生成的随机事务只与事务描述符内的约束相关。

改进约束的测试案例(constrained_test.sv):在该测试案例中,对配置描述符添加了新的约束。

直接测试案例(driected_test.sv):在该测试案例中,利用专用的事务代替配置描述符中的随机事务。

3 验证结果

利用Synopsys公司的VCS仿真工具运行该验证平台,通过多次反馈分析提高功能覆盖率。先利用修改随机约束和不同的随机种子的方法,生成不同的随机配置和数据。当功能覆盖率不能有效提高时,再进行直接测试。最终,使得各功能覆盖率模型的覆盖指标达到100%,如图4所示。

例如,在随机测试的后期,覆盖率报告显示intr_type的覆盖率为80%,没有采样到intr_type=3′d2的值,表示没有产生UART忙中断。从而通过创建直接测试案例,在发送或接收数据过程中,向线路控制寄存器中写数据,则产生UART忙中断。仿真后再次查看覆盖率统计报告,显示覆盖率为100%。

4 验证平台的可重用分析

利用传统的直接测试方法编写测试台时,没有可重用的验证组件。而在层次化的可重用验证平台中,将验证平台需要实现的整体功能进行划分,利用不同的验证组件进行实现,使得验证更易于进行,也便于对验证平台的功能进行改进。该验证平台的可重用性主要体现在以下两个方面:

一是对于不同的IP模块进行验证时,可以复用验证平台结构,也可以有选择的重用验证组件。例如,对于连接至APB外围总线的多个设备,具有相同的APB接口时序,可以重用验证平台中的激励产生器和总线功能模型,只需要按照具体要求修改激励的约束条件。

二是从模块级到系统级验证的重用。对于SoC进行系统级验证时,主要是验证各个IP模块之间的连接关系、时序关系、地址映射和中断的优先级关系是否符合设计要求。此时,原IP模块各个接口的协议不变,不再使用激励生成器和驱动器,而是由系统级的处理器给IP模块提供相应的激励信号。利用各个组件的“即插即用”特性,仍然可以最大限度的重用模块级验证平台。例如,在对整个SoC进行系统级验证时,就可以在将UART直接与APB总线连接,其它验证组件连接关系不变的情况下进行。监视器、覆盖率模型以及故障注入组件仍然与模块级验证时一样进行工作,确保验证功能的完整性。可见,层次化的验证平台将底层细节抽象成事务级进行管理,减少了对底层细节的控制,从而提高工作效率。验证平台的重用能够使得验证工程师从建立验证环境中解脱出来,允许更多的时间考虑如何更有效的验证设计。

5 结 语

利用SystemVerilog的面向对象特征,易于建立层次化的可重用验证平台。结合带约束的随机验证和覆盖率驱动的验证技术,能够有效提高验证效率,确保验证功能的完整性。各验证组件相对独立,易于重用,具有广泛的适用性。

参考文献

[1]须自明,刘站.各种验证技术在SoC设计中的应用[J].微计算机信息,2006(Z1):120-121.

[2]徐英伟,刘佳.SoC功能验证的特点和方法[J].微处理机,2006,28(2):11-13.

[3]程刚,蔡敏.基于SystemVerilog的SoC功能验证方法研究[J].科学技术与工程,2009,11(22):6814-6818.

[4]刘杰,徐伟俊,夏宇闻.设计验证中的随机约束[J].中国集成电路,2006(1):28-31.

[5]闫沫,张媛.基于SystemVerilog语言的设计验证技术[J].现代电子技术,2008,31(6):8-11.

[6]SPEAR C.SystemVerilog for verification[M].[S.l.]:Springer Science+Business Media Inc.,2006.

[7]BERGENRON J,CEMY E,HUNTER A.Verificationmethodology manual for SystemVerilog[M].[S.l.]:Springers,Synopsys Inc.and ARM Limited,2006.

[8]丁婷婷,申敏.分层式验证平台及覆盖技术在SOC上的应用[J].北京电子科技学院学报,2007,15(2);55-57.

[9]BERGERON J.Writing test-benches using SystemVerilog[M].[S.l.]:Springer Science+Business MediaInc.,2006.

上一篇:古陶瓷图案下一篇:基桩静载试验