精华内容
下载资源
问答
  • 文章目录 while for awk(效率更高) while #!/bin/bash read -p "请输入一个数字:" num NUM=${num:-100} SUM=0 i=1 while [ $i -le $NUM ] do let SUM+=i let i++ done echo "$SUM" [root@localhost xunhuan]# ...


    while

    #!/bin/bash
    
    read -p "请输入一个数字:" num
    NUM=${num:-100}
    SUM=0
    i=1
    
    while [ $i -le $NUM ]
    do
      let SUM+=i
      let i++
    done
    
    echo "$SUM"
    
    [root@localhost xunhuan]#  bash sum1.sh 
    请输入一个数字:10
    55
    

    for

    #!/bin/bash
    read -p "请输入一个数字:" num
    
    NUM=${num:-100}
    SUM=0
    i=1
    
    for i in `seq $NUM`
    do
      SUM=$[SUM+i]
      let i++
    done
    
    echo "$SUM"
    
    [root@localhost xunhuan]# bash for1.sh
    请输入一个数字:10
    55
    

    awk(效率更高)

    [root@localhost awk]# cat awk1.sh
    #!/bin/bash
    sum=0
    for((i=0;i<=100000;i++))
    do
      ((sum+=i))
    done
    echo $sum
    [root@localhost awk]# bash awk1.sh
    5000050000
    
    [root@localhost awk]# cat awk2.sh
    
    #!/bin/bash
    
    awk 'BEGIN{while(i++<100000)sum+=i;printf("%d\n",sum)}'
    [root@localhost awk]# bash awk2.sh
    5000050000
    
    展开全文
  • 计算机组成原理重点总结(学习笔记)含计算公式

    千次阅读 多人点赞 2020-07-24 17:55:05
    机器指令与微指令的关系 影响流水线性能的因素 流水线性能(吞吐率、加速比、效率) 六、总线 集中仲裁方式 总线操作和定时 总线标准 总线带宽(单位时间内总线上传输数据的位数) 一、计算机系统概述 计算机系统的...

    一、计算机系统概述

    计算机系统的多层次结构

    微程序设计级、一般机器级、操作系统级、汇编语言级、高级语言级。
    硬件
    第1级:微程序机器层M0(微指令系统),由硬件直接执行微指令
    第2级:传统机器M1(机器语言机器),用微程序解释机器指令
    软件
    第3级:虚拟机器M2(操作系统机器),用机器语言解释操作系统
    第4级:汇编语言M3(汇编语言机器),用汇编程序翻译成机器语言程序
    第5级:虚拟机器M4(高级语言机器),用编译程序翻译成汇编语言程序

    冯·诺依曼机

    基本工作方式:控制流驱动方式;
    最根本的特征:采用“存储程序”原理,即按地址访问并顺序执行指令;
    指令和数据均以二进制形式存放在存储器中;
    CPU区分依据是:指令周期的不同阶段。
    冯·诺依曼计算机:以运算器为中心
    现代的计算器:以存储器为中心
    5大部件:存储器、运算器、控制器、输入设备、输出设备(适配器)
    三大部分:CPU(运算器、控制器)、I/O设备(输入设备、输出设备)、主存储器

    哈佛结构

    将指令和数据放在两个独立的存储器,允许在一个机器周期内同时获得指令和操作数,提高了执行速度。

    计算机性能指标

    机器字长
    1、CPU一次能处理数据的位数。
    通常与CPU的寄存器位数有关。字长越长,精度越高。
    2、机器的字长也会影响机器的运算速度。
    字长较短,运算位数多,可能需要多次运算才能完成。
    3、对硬件造价有影响。
    直接影响ALU、数据总线以及存储字长的位数。

    存储容量
    主存容量、辅存容量

    运算速度
    吞吐量和响应时间
    主频和CPU时钟周期
    CPI:执行一条指令所需的时钟周期数。
    CPU执行时间:指运行一个程序所花费的时间。取决于:1、主频;2、CPI;3、指令条数
    MIPS:每秒执行多少百万条指令。
    MFLOPS:每秒执行多少百万次浮点运算。(标志系统性能最有用参数)
    GFLOPS:每秒执行多少十亿次浮点运算。
    TFLOPS:每秒执行多少万亿次浮点运算。

    二、数据的表示和运算

    汉字的编码

    ①输入码(外码):区位码、国际码、拼音码、电报码、表形码等
    ②内码:0、1(机器码)
    ③输出码:汉字字形码
    汉字编码包括汉字的输入编码、汉字内码、汉字字形。用两个字节表示一个汉字,每个字节用七位码。区位码是4位十进制数,前2位是区码,后2位是位码。
    国标码是将十进制的区位码转换为十六进制后,再在每个字节上加上20H。为了方便计算机区分中文字符和英文字符,将国标码两个字节的最高位都改为“1”,这就是汉字内码(十六进制)。

    字符串的存放

    小端模式:按先存储低位字节、后存储高位字节的顺序存放字符串的内容。
    大端模式:按先存储高位字节、后存储低位字节的顺序存放字符串的内容。

    校验码

    奇偶校验码:只能检出一位错误,不能确定出错的位置;只能检验处奇数位错误,不能检测出偶数位错误。
    奇校验码:整个校验码中“1”的个数为奇数。
    偶校验码:整个校验码中“1”的个数为偶数。
    海明(汉明)检验码:可检出错位位置
    循环冗余校验(CRC)码:可检出错误位置(通过除法运算)

    原码、反码、补码、移码

    1、原码、补码、反码三种机器数的最高位均是符号位。
    2、当真值为时,原码、补码、反码的表示形式均相同,即符号位用“0”表示,数值部分与真值相同。
    当真值为时,原码、补码、反码的表示形式不同,但其符号位都用“1”表示,而数值部分补码是原码的“求反加1”,反码是原码的“每位求反”
    3、同一个真值的移码和补码仅差一个符号位
    4、不同机器数表示±0时,其形式不同。
    [+0]原≠[-0]原, [+0]反≠[-0]反,[+0]补=[-0]补,[+0]移=[-0]移
    5、当机器字长确定后,补码比原码、反码能多表示一个负数。
    6、移码只能表示整数,用它表示浮点数的阶码时,能方便地判断阶码的大小。

    补码定点数的加/减运算

    基本公式:(将符号位和数值部分一起参加运算,并且将符号位产生的进位自然丢掉即可)
    加法:[A]补+[B]补=[A+B]补
    减法:[A-B]补=[A]补+[-B]补([-B]补由[B]补连同符号位在内,每位取反,末尾加1

    溢出判断:
    ①用一位符号判断溢出:实际参加操作的两个数符号相同,结果又与原操作数的符号不同,即为溢出。
    ②用两位符号位判断溢出:当2位符号位不同时,表示溢出,否则,无溢出。不论是否发生溢出,高位(第1位)符号永远代表真正的符号。(变形补码,运算时多一位)
    01正溢出(上溢);10负溢出(下溢)
    ③采用一位符号位根据数据位的进位情况判断溢出。如果符号位的进位与最高数位的进位不同,则表示结果溢出。

    浮点数的加/减运算

    (1)对阶:两个数的小数点位置对齐(使阶码相等),两个数的阶码相减求阶差,使小阶的尾数向右移位,每右移一位,阶码加1。

    (2)尾数求和:将对阶后的两个尾数按定点加(减)运算规则进行运算。

    (3)规格化:补码规格化形式为[S]补 00.1××××;[S]补 11.0××××。
    左规:尾数出现00.0××××或11.1××××时,需左规。尾数左移一位,阶码减1。
    右规:尾数出现01.××××或10.××××时,表示尾数溢出,但在浮点运算中不算溢出,可通过右规处理。尾数右移一位,阶码加1。

    (4)舍入:在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度,用舍入法来提高尾数的精度。
    ①“0舍1入”法:被移去的最高位数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。又溢出时,再右规……
    ②“恒置1”法:不论丢掉的最高数位是“1”还是“0”,都使尾数末位恒置“1”。
    两种方法同样都有使尾数变大和变小两种可能。

    (5)溢出判断(是否溢出由阶码的符号决定)
    上溢:阶码[j]补=01,×××,作溢出处理
    下溢:阶码[j]补=10,×××,按机器零处理

    浮点数的表示范围

    在这里插入图片描述
    上溢:当浮点数阶码大于最大阶码时,上溢,机器停止运算,进行中断溢出处理。
    下溢:当浮点数阶码小于最小阶码时,下溢,溢出的数绝对值很小,通常将位数各位强制为0,按机器零处理,机器可以继续运行

    8位二进制整数范围

    原码、反码:-127—+127
    补码、移码:-128—+127

    标准IEEE 754标准

    现代计算机中,浮点数一般采用IEEE制定的国际标准:
    在这里插入图片描述
    常用的浮点数有三种:在这里插入图片描述
    阶码用移码表示,短实数、长实数、临时实数的偏移量用十六进制数表示分别为7FH(127)、3FFH、3FFFH

    尾数部分通常是用原码、规格化表示,即非“0”的有效位最高位总是“1”,但在IEEE标准中,有效位呈如下形式:1▲ff…ffff,其中▲表示假想的二进制小数点。在实际表示中,对短实数和长实数,这个整数位的1省略,称隐藏位;对于临时实数不采用隐藏位方案。

    规格化的短浮点数真值:(1)S×1.m×2E127(-1)^{S}×1.m×2^{E-127}

    三、存储器层次结构

    存储器的层次化结构

    存储器主要性能指标:速度、容量、每位价格(位价)
    一般来说,速度越高,位价越高;容量越大,位价越低;容量越大,速度越低。

    在这里插入图片描述
    层次结构主要体现在缓存-主存和主存-辅存这两个层次上。

    缓存-主存:主要解决CPU和主存速度不匹配问题
    (由硬件自动完成)数据调动对任何程序员透明。

    主存-辅存:主要解决存储系统的容量问题
    (由硬件和操作系统共同完成)数据调动对应用程序员透明。

    动态RAM的刷新

    一般取2ms,对动态RAM的全部基本单元电路必作一次刷新,称为刷新周期,又称再生周期。刷新的单位是行,仅需要行地址。

    集中刷新:在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作,称“死时间”或“死区”。(全部一起刷)

    分散刷新:对每行存储单元的刷新分到每个存取周期内完成。优点:没有死区。缺点:存取周期加长,整个系统速度降低。(一个个刷)

    异步刷新:是前两种方式的结合,既缩短“死时间”,又充分利用最大刷新时间间隔为2ms的特点。(一行行刷)

    一行行刷的平均刷新时间:
    行数 = 芯片容量 / 每行存储单元个数
    平均刷新时间 = 间隔最长 / 行数

    动态RAM与静态RAM的比较

    在这里插入图片描述

    存储容量的扩展

    (1)位扩展
    增加存储字长。例如:2片1K4位的存储芯片可组成1K8位的存储器。
    注意:其中一片的数据线作为高4位D7-D4,另一片的数据线作为低4位D3-D0。

    (2)字扩展
    增加存储器字的数量。例如:2片1K8位的存储芯片可组成一个2K8位的存储器。
    注意:两片都连地址线A0-A9。(从低位连起)

    (3)字、位扩展
    既增加存储字的数量又增加存储字长。

    双口RAM和多模块存储器

    为了提高CPU访问存储器的速度,可以采用双端口存储器(空间并行)、多模块存储器(时间并行)等技术,都属于并行技术。

    多模块存储器

    为了提高访存速度。(CPU速度比存储器快,同时从存储器中取出n条指令,可以充分利用CPU资源,提高运行速度)
    (1)单体多字系统
    在一个存取周期内,从同一地址取出n条指令,然后逐条将指令送至CPU执行,即每隔1/n存取周期,主存向CPU送一条指令,增大了存储器的带宽,提高了存储器的工作速度。
    例如:从同一地址取出4条指令,为单体四字结构,每字W位。按地址在一个存取周期内可读出4*W位的指令或数据,使主存带宽提高到4倍。
    缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显。

    (2)多体并行系统
    采用多提模块组成的存储器。每个模块可以并行工作,也可以交叉工作。
    低位交叉编址
    程序连续存放在相邻体中(交叉存储)。低位地址表示体号,高位地址表示体内地址。
    地址的低n为片选。
    优点:相邻地址单元的数据放在不同组,各组可以并行工作,能较好提高存储器的带宽。
    缺点:某一组出现故障,会影响整个存储器的正常工作。
    高位交叉编址
    按体内地址顺序存放(顺序存储)。高位地址表示体号,低位地址表示体内地址。
    地址的高n位片选。
    优点: 某一组的故障不影响其他组,且容易通过添加模块来扩充容量。
    缺点:相邻地址单元的数据放在同一组存储单元,各组间串行工作,不利于提升存储器的带宽。
    在这里插入图片描述

    Cache计算

    (h越接近1越好,ta越接近tc越好)
    在这里插入图片描述

    Cache中主存块之间的映射方式

    由主存地址映射到Cache地址称为地址映射。

    (1)直接映射
    主存数据只能装入Cache中的唯一位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)。
    映射关系i=jmod   2ci=j \mod\ 2^{c}
    地址结构

    主存字块标记 Cache字块地址 字块内地址

    优点:实现简单,只需利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。
    缺点:不够灵活,降低命中率。

    (2)全相联映射
    允许主存中每一字块映射到Cache中的任何一块位置上。可以从已被占满的Cache中替换出任一旧字块。
    通常采用昂贵的“按内容寻址”的相联存储器来完成。
    地址结构

    主存字块标记 字块内地址

    优点:灵活,命中率高,缩小了块冲突率,空间利用率高。
    缺点:地址变换速度慢,实现成本高

    (3)组相联映射(上述两种映射的折中)
    将Cache空间分成大小相同的组,主存的一个数据块可以装入到一组内的任何一个位置(组间采取直接映射,组内采取全相联映射)。
    映射关系:i=j mod Q (i是缓存的组号,j是主存的块号,Q是Cache的组数)Q=1是变为全相联映射
    地址结构

    主存字块标记 组地址 字块内地址

    Cache中主存块的替换算法

    (1)先进先出(First-In-First-Out,FIFO)算法
    (2)近期最少使用(Least Recently Used,LRU)算法
    (3)随机法

    磁盘存储器

    磁盘寻址的最小单位是扇区
    道密度:沿磁盘半径方向单位长度的磁道数。
    位密度:单位长度磁道上记录二进制的位数。
    平均寻道时间:从一个磁道转移到另一个磁道的平均时间。(全部寻道时间的一半)
    平均等待时间:旋转等待的平均时间。(转一周时间的一半)
    一扇区的传送时间:T=1 / (转速×扇区数)
    存取一个扇区的时间:T=每个扇区位数 / (转速×扇区数)
    平均存取时间=平均寻道时间 + 平均等待时间 + 传输时间
    每个记录面的磁道数:K=[(外直径-内直径)/2]*磁道密度
    盘组格式化容量:C = 记录面数 * K * 每个扇区字节数 * 扇区数
    盘组非格式化容量:CN = 记录面数 * K * 最内圈磁道周长 * 内层位密度

    其他

    WE 为写允许信号:低电平0为写,高电平1为读
    CS为片选信号:低电平0有效
    借位/进位C:1=结果的最高位发生了进位,0=结果的最高位未发生进位
    溢出标志位V:1=溢出,0=没有溢出

    四、指令系统

    指令的寻址方式

    寻址方式 有效地址 访存次数(不计取指令) 优点 缺点
    立即寻址 A是操作数 0 获取操作数最快的方式,不必访问存储器。 A的位数限制了立即数的范围。
    直接寻址 EA=A 1 寻找操作数比较简单,指令执行阶段对主存只访问一次 A的位数限制了操作数的寻址范围;修改A的值才能修改操作数的地址。
    隐含寻址 程序指定 0 有利于缩短指令字长。 需增加存储操作数或隐含地址的硬件。
    间接寻址(一次) EA=(A) 2 与直接寻址相比,扩大了操作数的寻址范围;便于编制程序(方便地完成子程序返回)。 指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长。
    寄存器寻址 EA=Ri 0 无须访存,减少了执行时间(第二快);指令字较短,节省存储空间。 寄存器价格昂贵,计算机中寄存器个数有限。
    寄存器间接寻址(一次) EA=(Ri) 1 比间接寻址少访存一次,速度更快。 指令的执行阶段还需要访问主存。
    基址寻址 EA=A+(BR) 1 扩大操作数的寻址范围。在多道程序中极为有用。可用于编制浮动程序 偏移量(形式地址A)的位数较短。
    变址寻址 EA=A+(IX) 1 扩大操作数的寻址范围。主要用于处理数组问题,适合编制循环程序。**偏移量(变址寄存器IX)**的位数足以表示整个存储空间。
    相对寻址 EA=A+(PC) 1 转移地址不固定,随PC值的变化而变化,有利于编写浮动程序
    堆栈寻址

    在这里插入图片描述

    CISC和RISE

    序号 复杂指令系统计算机(CISC) 精简指令系统计算机(RISC)
    1 指令系统复杂庞大,指令数目一般为200条以上。 选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。
    2 指令的长度不固定,指令格式多,寻址方式多 指令长度固定,指令格式种类少寻址方式种类少
    3 可以访存的指令不受限制 只有取数/存数(Load/Store)指令访问存储器,其余指令的操作都在寄存器内完成。
    4 各种指令使用频度相差很大 CPU中有多个通用寄存器。
    5 各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。 采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期。
    6 控制器大多数采用微程序控制 控制器采用组合逻辑控制,不用微程序控制。
    7 难以用优化编译生成高效的目标代码程序。 采用优化的编译程序

    二地址指令操作数物理位置的三种形式

    寄存器——寄存器型(RR型);
    寄存器——存储器型指令(RS型);
    存储器——存储器型(SS型)。

    五、中央处理器CPU

    CPU基本结构

    在这里插入图片描述

    指令执行方案

    (1)单指令周期
    对所有指令都选用相同的执行时间来完成。
    下一条指令只能在前一条指令执行结束之后才能启动。(串行)
    指令周期取决于执行时间最长的指令的执行时间。

    (2)多指令周期
    对不同类型的指令选用不同的执行步骤来完成。
    下一条指令只能在前一条指令执行结束之后才能启动。(串行)
    可选用不同个数的时钟周期来完成不同指令的执行过程。

    (3)流水线方案
    指令之间可以并行执行的方案。
    追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程。
    通过在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。

    时钟周期:计算机操作的最小单位,由计算机主频确定,是主频的倒数。
    工作脉冲:控制器的最小时间单位,起定时出发作用,一个时钟周期有一个工作脉冲。
    机器周期:即CPU周期,包含若干个时钟周期。
    指令周期:可由多个CPU周期组成。
    存取周期:存储器进行两次独立的存取器操作(连续两次读或写操作)所需最小间隔时间。

    存储字长:存放在一个存储单元中的二进制代码位数
    机器字长:CPU一次能处理数据的位数。
    指令字长:一般去存储字长的整数倍。

    微指令格式

    (1)水平型微指令:直接编码、字段直接编码、字段间接编码和混合编都是。
    特点:一条水平型微指令定义并执行几种并行的基本操作。
    在这里插入图片描述
    (2)垂直型微指令:采用类似机器指令操作码的方式,设置操作码字段μOP
    特点:一条垂直型微指令只能定义并执行一种基本操作。
    在这里插入图片描述
    (3)混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。指令较短,仍便于编写;微程序也不长,执行速度加快。

    优缺点 水平型微指令 垂直型微指令
    优点 微程序短,执行速度快 微指令短、简单、规整,便于编写微程序
    缺点 为指令长,编写微程序较麻烦 微程序长,执行速度慢,工作效率低

    比较:

    比较 水平型微指令 垂直型微指令
    并行操作能力
    效率
    灵活性
    执行速度
    微指令字长
    微程序
    掌握难易 难以掌握 容易掌握(因为与指令类似)

    硬布线控制器、微程序控制器

    比较 硬布线控制器(组合逻辑控制器) 微程序控制器
    工作原理 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即使产生 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可
    执行速度 慢(访问控制存储器)
    规整性 烦琐、不规整 较规整
    应用场合 RISC CPU CISC CPU
    易扩充性 困难(不能修改) 易扩充修改

    微指令基本组成

    控制存储器CM:是微程序控制器的核心部件,用于存放微程序,可用ROM构成。

    微指令寄存器CMDR:用于存放从CM中取出的微指令,位数同指令字长相等。

    微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。

    微地址寄存器CMAR:接受微地址形成部件送来的微地址,为在CM中读取指令作准备

    地址转移逻辑:在有分支转移时形成新的后继地址。

    机器指令与微指令的关系

    每条机器指令编写成一个微程序;
    每一个微程序包含若干条微指令;
    每一条微指令对应一个或几个微操作命令。

    影响流水线性能的因素

    三种:结构相关、数据相关、控制相关
    数据相关:写后读(RAW)、读后写(WAR)、写后写(WAW)
    若发生数据相关冲突:如果在硬件设计上采用向前传送技术加以改进,则可不延迟。

    流水线性能(吞吐率、加速比、效率)

    在这里插入图片描述

    六、总线

    总线是构成计算机系统的互联机构,是多个系统功能部件之间进行数据传送的公共通路。

    集中仲裁方式

    (总线仲裁还有另一种方式:分布仲裁方式)
    (1)链式查询
    有3根控制总线用于总线控制(BS总线忙、BR总线请求、BG总线同意
    总线同意信号BG是串行地从一个I/O接口送到下一个I/O接口。(离总线控制部件最近的设备具有最高的优先级)

    (2)计数器定时查询
    比链式查询多了一组设备地址线,少了一根总线同意先BG。
    特点:
    ①计数从“0”开始,一旦设备的优先次序被固定,设备的优先级就按0、1、2、…的顺序降序排列,固定不变
    ②计数从上一次计数的终止点开始,即使一种循环方法,此时设备使用总线的优先级相等
    ③初始值可由程序设置,优先次序可以改变

    (3)独立请求方式
    每一台设备均有一对总线请求先BRi和总线同一线BGi。
    总线控制部件中有个排队电路,可根据优先次序确定哪一台设备的请求。
    在这里插入图片描述

    总线操作和定时

    1、同步定时方式
    通信双方由统一时标控制数据传送称为同步通信。
    优点:规定明确、统一,模块间的配合简单一致。
    缺点:主、从模块都用同一时限,造成对各不相同速度的部件而言,必须按最慢的部件来设计公共时钟,严重影响总线的工作效率,也给设计带来了局限性,缺乏灵活性。
    适用于:总线长度较短、各部件存取时间比较一致的场合。
    特点:总线传输周期越短,数据线的位数越多,直接影响总线的数据传输率。

    2、异步定时方式
    允许各模块速度不一致,没有公共的时钟标准,不要求所有部件严格的统一操作时间,采用应答方式(又称握手方式)
    应答方式可分为三种类型:不互锁、半互锁、全互锁
    (1)不互锁方式(如:CPU向主存写信息)
    (2)半互锁方式(如:多机系统中,某个CPU需访问共享存储器)
    (3)全互锁方式(如:网络通信中,通信双方)

    总线标准

    1、PCI总线(外部设备互连总线)
    高性能的32位或64位总线,专为高度集成的外围部件、扩充插板和处理器/存储器系统而设计的互联机制。目前常用的PCI适配器有显卡、声卡、网卡等。
    2、USB总线(通用串行总线)
    是一种连接外部设备I/O总线标准,属于设备总线。具有即插即用、热插拔等优点,有很强的连接能力

    总线带宽(单位时间内总线上传输数据的位数)

    总线宽度:一个总线周期中并行传输的字节
    总线带宽 = 总线宽度 * 总线时钟频率

    展开全文
  • for循环各种算法效率

    千次阅读 2013-11-20 10:06:11
    最高效的是将for循环条件语句中的.length属性存入一个局部变量     算法一,使用for in,: ...运行时间结果是最长的,即最没有效率的:(24ms)     算法二,for循环 for (var i=0
    最高效的是将for循环条件语句中的.length属性存入一个局部变量
    

     

     

    算法一,使用for in,:

    var i=0

    for (i in obj){

           document.write("The obj is " + obj[i] +"<br />")

    }

    运行时间结果是最长的,即最没有效率的:(24ms

     

     

    算法二,for循环

    for (var i=0 ; i < obj.length; i++){

           document.write("The obj is " + geo[i] +"<br />")

    }

    运行时间结果,比较有效率(17ms

     

     

    算法三 for循环,将i.length存储为局部变量

    for (var i=0, len=obj.length; i < len; i++){

           document.write("The obj is " + obj[i] +"<br />")

    }

    运行时间结果,最高效。(14ms

     

     

     

    该规则是指:在循环中,将i.length存储为局部变量,可以提高for循环的效率。在使用循环的时候,如果已经知道其结构和内容数据类型,避免使用for in, 除非是在一个不明确的对象里面,需要迭代其内部对象。

    展开全文
  • 并行计算效率对比

    2019-12-31 16:10:25
    //测试各种并行运算方式的运行效率 //OpenMP使用教程:https://blog.csdn.net/dsif1995/article/details/50768970 //intel tbb下载页面:https://github.com/intel/tbb/releases //tbb使用教程:...
    //Qt
    #include <QtCore/QCoreApplication>
    #include <QtConcurrent/QtConcurrent>
    #include <QFuture>
    #include <QList>
    //C++
    #include <iostream>
    //OpenMP
    #include <omp.h>
    //tbb
    #include <tbb/tbb.h>
    //PPL
    #include <ppl.h>
    
    //测试各种并行运算方式的运行效率
    //OpenMP使用教程:https://blog.csdn.net/dsif1995/article/details/50768970
    //intel tbb下载页面:https://github.com/intel/tbb/releases
    //tbb使用教程:https://blog.csdn.net/dwosion/article/details/72724371
    //tbb/ppl基本用法:https://www.cnblogs.com/qicosmos/p/3517166.html
    //QtConcurrent使用教程:https://www.fearlazy.com/index.php/post/95.html
    class Point
    {
    public:
    	Point(const float& x, const float& y, const float& z)
    		:_x(x)
    		, _y(y)
    		, _z(z)
    	{
    
    	}
    	float _x;
    	float _y;
    	float _z;
    };
    
    void Func(Point& point) {
    	point._x += 1;
    	point._y += 2;
    }
    
    int main(int argc, char *argv[])
    {
    	QCoreApplication a(argc, argv);
    
    	QList<Point> pointList;
    	for (int i = 0; i < 1000; i++)
    	{
    		pointList.push_back(Point(0, 0, 0));
    	}
    	for (int k = 0; k < 10000; k++)
    	{
    		//方式一 传统for循环
    		//方式二 为for循环开启OpenMP并行运算
    		//一个for循环10000000点300ms
    		//两个for循环1000*10000点300ms
    		//使用OpenMP并行运算150ms
    		//#pragma omp parallel for
    		/*for (int j = 0; j < 10000000; j++)
    		{
    		pointList[j]._x += 1;
    		pointList[j]._y += 2;
    		}*/
    
    		//方式三 QtConcurrent
    		//一个for循环10000000点80ms
    		//两个for循环1000*10000点7700ms
    		//QFuture<void> f = QtConcurrent::map(pointList, Func);
    		//f.waitForFinished();
    
    		//方式四 intel tbb
    		//intel tbb 10000000点360ms
    		//intel tbb 1000*10000点360ms
    		/*tbb::parallel_do(pointList.begin(), pointList.end(), [](Point& point)
    		{
    		point._x += 1;
    		point._y += 2;
    		});*/
    
    		//方式五 microsoft ppl
    		//microsoft ppl 10000000点80ms
    		//microsoft ppl 1000*10000点100ms
    		//它的效率与开启OpenMP并行运算接近
    		concurrency::parallel_for_each(pointList.begin(), pointList.end(), [&](Point& point) {
    			point._x += 1;
    			point._y += 2;
    		});
    	}
    
    	return a.exec();
    }

     

    展开全文
  • 递归和循环

    千次阅读 2018-04-05 14:35:21
    无论是采用递归还是循环,都需要经历如下三步:首先需要找出计算问题的规律,用数学计算公式表达出来;然后再用代码编程来实现这个数学计算公式;最后采用递归或者循环的方式 多次运行这个数学计算公式,从而得出...
  • 为啥E进制计算机的效率最高?

    万次阅读 2019-03-11 11:30:04
    任何一套计算机技术, 只要有人开发有人用, 它一定是有数学理论基础作支撑的, 比如SQL语言就是基于关系代数和集合论, 俄罗斯曾经研究过3进制计算机也是因为数学证明3进制比2进制理论上效率要高, 因为3比2更接近自然...
  • c++中不用循环计算求和等的方法

    千次阅读 2012-07-02 22:59:26
    如果不用循环,递归等方法计算1-n的和的方法如下: 通过模版在编译期可以计算出来,可以提高效率; #include "stdafx.h" template struct sum {  enum{ result = n + sum::result }; }; ...
  • 根据ISP软件延时计算器得到循环代码 运行_nop_()需要包含库 #include <INTRINS.H> void Delay500ms() //@12.000MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 23; j = 205; k = 120; do ...
  • 2)分析算法的基本操作,一般在循环的最里层; 3)判断算法需要执行基本操作的次数是否只与n有关,如果它还与其他因数有关,则需要分开考虑算法的最好、最坏、平均情况; 4) 建立一个计算算法需要执行的基本操作...
  • POI中的手动公式计算方法

    千次阅读 2011-11-18 09:53:18
    Excel中的公式根据设置,分为手动计算和自动计算。默认好像是自动计算。 在POI操作Excel的时候 1. 如果模板是自动计算的时候,只需要在每个sheet设置再计算的flag就可以了。  HSSFSheet....
  • 循环神经网络(RNN)简介

    万次阅读 2018-09-01 17:05:51
    人工神经网络介绍参考: https://blog.csdn.net/fengbingchun/article/details/50274471  ... 这里在以上两篇基础上整理介绍循环神经网络: 前馈网络可以分为若干”层”,各层按信号传输先后顺序依次排列...
  • RNN(循环神经网络) 为什么要用循环神经网络(RNN)? 循环神经网络(RNN)可以处理什么类型的任务? 多对一问题 一对多问题 多对多问题 循环神经网络结构 单层网络情况 正向传播 反向传播 存在问题 ...
  • //计算 //单片机每秒执行的指令数:频率*1 (例:cc2530频率为)32MHz //8051效率是PC的12分之一 //循环需要执行5条指令 //公式为 32*1024*1024/5/12 = 559240.533 所以写一个for循环 循环次数为559240次
  • 关于提高C语言执行效率的几点

    千次阅读 2015-05-03 13:00:47
    1、以空间换取时间程序的复杂度包含时间复杂度和空间复杂度,而随着计算机...一个简单的例子,计算1~100这些数的和,可以循环100次,也可以直接使用求和公式,在执行效率上,是显而易见的。3、嵌入汇编汇编代码是低级语
  • 递归和循环的区别

    千次阅读 2017-10-09 09:46:45
    原文地址:循环与递归的区别作者:HelloWord 循环(迭代)与递归的区别   1。递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行...
  • 众所周知,MATLAB程序效率最低最有潜力的地方便是循环了。最常见的循环莫过于对矩阵中的每一个元素进行操作,对于编程思维还在C语言或者C++,JAVA的人来说,第一反应就是两层循环,先来个 “for i=1:m”对矩阵的行...
  •  花费了11多的CPU时间,递归效率低下的根本原因是因为重复计算,看那张图就知道了,计算4的时候,1算了3次,2算了2次,这还是数很小的时候,随着N的增长,重复计算基本上是指数级别的增长,效率低下也就可想而知了...
  • 优化递归的效率

    千次阅读 2015-12-24 12:50:18
    函数递归调用是很常见的做法,但是它往往是低效的,本文探讨优化递归效率的思路。 1.尾递归转换成迭代 尾递归是一种简单的递归,它可以用迭代来代替 比如 求阶乘函数的递归表达 int f(int n) {  if(n0)...
  • 算法效率分析

    千次阅读 2012-09-12 23:23:27
    l 确定基本操作的执行次数是否只与输入规模有关,若还与输入的其他特性,则要分别计算算法的最优、最差、平均效率 l 建立基本操作次数的求和公式 l 解求和公式,算复杂度 2.递归算法的效率分析 l 前三步和非...
  • java递归和循环

    万次阅读 2018-12-21 12:56:44
    方案1:使用循环 方案2:使用递归 递归:递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。 StackOverflowError:当应用程序递归太深而发生堆栈溢出时,抛出该错误。 ...
  • 循环和递归的区别

    千次阅读 2014-03-30 03:22:12
    循环(迭代)与递归的区别   1。递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法。 当然,从理论...
  • 视觉注意力的循环神经网络模型

    千次阅读 2017-05-31 21:27:59
    深度学习领域中,处理一张大图的时候,使用卷积神经网络的计算量随着图片像素的增加而线性增加。如果参考人的视觉,有选择地分配注意力,就能选择性地从图片或视频中提取一系列的区域,每次只对提取的区域进行处理,...
  • 一、前言 《剑指Offer》中题10 二、题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。 ...优点:计算效率高,结构简单 缺点:递推理解复杂 方法三:基于矩阵乘法 优点:计...
  • 众所周知,递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的,同时影响效率的。递归是利用系统的堆栈保存函数当中的局部变量来解决问题的。递归就是...
  • 提高matlab执行效率

    千次阅读 2014-11-13 09:20:26
    要提高M文件的执行效率,可采用下述的一些技巧。 1. 尽量避免使用循环结构 ...利用MATLAB提供的用于矢量化操作的函数,把循环矢量化,这样既可以提高编程效率,也可以提高程序的执行效率。下面给出一个
  • 循环卷积(转)

    万次阅读 2017-12-04 09:13:14
    循环卷积我理解是使用DFT(FFT)计算线性卷积时的衍生品。 首先连续时间没有循环卷积概念。 离散时间时,不妨假设x(n)为L点信号, 仅在0~L-1有非零值;h(n)为M点信号,仅在0~M-1有非零值。以x(n)为输入信号通过以h...
  • 贝叶斯公式本质

    千次阅读 2017-03-13 17:10:14
    转载地址:http://mp.weixin.qq.com/s?__biz=MzA3OTgzMzUzOA==&mid=503740283&idx=1&sn=ea4aa313b699f04cd603889571343bd9#rd ...答案是,它们都会用到同一个数学公式——贝叶斯公式。它虽然看起来很简单、很不
  • 贝叶斯公式详解

    万次阅读 2014-12-12 15:17:42
    概率论只不过是把常识用数学公式表达了出来。 ——拉普拉斯 记得读本科的时候,最喜欢到城里的计算机书店里面去闲逛,一逛就是好几个小时;有一次,在书店看到一本书,名叫贝叶斯方法。当时数学系的课程还没有...
  • 作者:jliang ... junliang 20190303 说明:以下所有代码使用版本TensorFlow1.4.0或1.12.0版本 import tensorflow as tf print(tf.__version__)...8. 循环神经网络 ...TensorFlow中实现LSTM结构的循环神经网络的前向...
  • OFDM信号循环谱原理详解及matlab实现

    万次阅读 热门讨论 2018-03-05 18:21:03
    采样简便的FAM算法来计算OFDM信号的循环谱,利用OFDM信号的循环谱的性质可以估计出OFDM信号的载频和码片时宽。FAM算法是在时域平滑算法的基础上,提出的一种基于快速傅立叶变换的时域平滑算法。通过滑动FFT变换可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,652
精华内容 17,860
关键字:

循环效率计算公式