当前位置: 首页 > news >正文

购物网站两化融合建设项目报告火狐浏览器网站开发人员

购物网站两化融合建设项目报告,火狐浏览器网站开发人员,北京百度搜索排名优化,上班自己花钱做的网站http://blog.csdn.net/chshplp_liaoping/article/details/12752749 在移动平台上进行一些复杂算法的开发#xff0c;一般需要用到指令集来进行加速。目前在移动上使用最多的是ARM芯片。 ARM是微处理器行业的一家知名企业#xff0c;其芯片结构有#xff1a;armv5、armv6、a… http://blog.csdn.net/chshplp_liaoping/article/details/12752749 在移动平台上进行一些复杂算法的开发一般需要用到指令集来进行加速。目前在移动上使用最多的是ARM芯片。 ARM是微处理器行业的一家知名企业其芯片结构有armv5、armv6、armv7和armv8系列。芯片类型有arm7、arm9、arm11、cortex系列。指令集有armv5、armv6和neon指令。关于ARM到知识参考http://baike.baidu.com/view/11200.htm 最初的ARM指令集为通用计算型指令集指令集都是针对单个数据进行计算没有并行计算到功能。随着版本的更新后面逐渐加入了一些复杂到指令以及并行计算到指令。而NEON指令是专门针对大规模到并行运算而设计的。 NEON 技术可加速多媒体和信号处理算法如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成其性能至少为ARMv5 性能的3倍为 ARMv6 SIMD性能的2倍。 关于SIMD和SISDSingle Instruction Multiple Data单指令多数据流。反之SISD是单指令单数据。以加法指令为例单指令单数据SISD的CPU对加法指令译码后执行部件先访问内存取得第一个操作数之后再一次访问内存取得第二个操作数随后才能进行求和运算。而在SIMD型的CPU中指令译码后几个执行部件同时访问内存一次性获得所有操作数进行运算。这个特点使SIMD特别适合于多媒体应用等数据密集型运算。如下图所示     如何才能快速到写出高效的指令代码这就需要对各个指令比较熟悉知道各个指令的使用规范和使用场合。 ARM指令有16个32位通用寄存器为r0-r15其中r13为堆栈指针寄存器r15为指令计算寄存器。实际可以使用的寄存器只有14个。r0-r3一般作为函数参数使用函数返回值放在r0中。若函数参数超过4个超过到参数压入堆栈。 有效立即数的概念每个立即数采用一个8位的常数(bit[7:0])循环右移偶数位而间接得到其中循环右移的位数由一个4位二进制(bit[11:8] )的两倍表示。如果立即数记作immediate , 8位常数记作immed_8 , 4位的循环右移值记作rotate_imm ,有效的立即数是由一个8位的立即数循环右移偶数位得到可以表示成 immediateimmed_8循环右移( 2×rotate_imm) 如mov r4 , #0x8000 000A    #0x8000 000A 由0xA8循环右移0x2位得到。 下面介绍一些比较常用到一些指令。 内存访问指令 LDR和STR有三种方式比较容易搞混 LDR r0, [r1, #4]   r0 : mem[r14]   #4是直接偏移量这时候只能在正负4Kb到范围内。也可以是寄存器偏移用/-表示。记住r1不进行偏移。 LDR r0, [r1, #4]!  r0 :mem[r14]r1 : r1 4取值是取偏移量到值并且r1进行偏移。 LDR r0, [r1], #4   r0 :mem[r1] r1 : r1 4取值是取r1地方到值取值后进行偏移。运算后自动加4后变址。 另外LDRB是无符号字节SB是有符号字节H无符号半字SH有符号半字。   存储器和寄存器数据交换SWPSWPB 如SWP r0, r1, [r2]   r0 : mem[r2]mem[r2] : r1 多寄存器数据传输 LDMIA r1, {r0,r2,r5}  r0 mem[r1], r2 mem[r14], r5mem[r18]   通用数据处理指令 第二操作数常用到有LSRLSL等如mov r1, r2, lsl #2 将r2左移2位然后赋值到r1中。 常用到操作有ADD、SUB、AND、ORR、EOR、BIC、ORN如果加上了S则会更新条件标记。 MOV移动MVN取反移动。MOV可以是R寄存器立即数以及接第二操作数。 REV在字或半字内反转字节或位到顺序 MUL、MLA和MLS乘法、乘加和乘减。MLA R1R2R3R4表示R1R2*R3R4还有有符号和无符号乘法等。   跳转指令 B无条件跳转BL带链接到跳转BX跳转并交换指令集等。   重点介绍一下NEON指令目前使用较多。而且使用难度也较大很多文档上都没有比较详细到介绍也没有给出相应到例子或者图示。   一、NEON基本知识 NEON的寄存器 有16个128位四字到寄存器Q0-Q1532个64位双子寄存器D0-D31两个寄存器是重叠的在使用到时候需要特别注意不小心就会覆盖掉。如下图所示 两个寄存器的关系Qn D2n和D2n1如Q8是d16和d17的组合。   NEON的数据类型 注意数据类型针对到时操作数而不是目标数这点在写的时候要特别注意很容易搞错尤其是对那些长指令宽指令的时候因为经常Q和D一起操作。   NEON中的正常指令、宽指令、窄指令、饱和指令、长指令 正常指令生成大小相同且类型通常与操作数向量相同到结果向量 长指令对双字向量操作数执行运算生产四字向量到结果。所生成的元素一般是操作数元素宽度到两倍并属于同一类型。L标记如VMOVL。 宽指令一个双字向量操作数和一个四字向量操作数执行运算生成四字向量结果。W标记如VADDW。 窄指令四字向量操作数执行运算并生成双字向量结果所生成的元素一般是操作数元素宽度的一半。N标记如VMOVN。 饱和指令当超过数据类型指定到范围则自动限制在该范围内。Q标记如VQSHRUN   二、NEON指令 NEON指令较多下面主要介绍一些常见的指令用法。   复制指令 VMOV 两个arm寄存器和d之间 vmov d0, r0, r1将r1的内容送到d0到低半部分r0的内容送到d0到高半部分 vmov r0, r1, d0将d0的低半部分送到r0d0的高半部分内容送到r1 一个arm寄存器和d之间 vmov.U32 d0[0], r0将r0的内容送到d0[0]中d0[0]指d0到低32位 vmov.U32 r0, d0[0]将d0[0]的内容送到r0中 立即数 vmov.U16 d0, #1将立即数1赋值给d0的每个16位 vmov.U32 q0, #1将立即数1赋值给q0的每个32位 长指令VMOVLd赋值给q vmovl.U16 q0, d0将d0的每个16位数据赋值到q0的每个32位数据中 窄指令VMOVNq赋值给d vmovn.I32 d0, q0将q0的每32位数据赋值到q0的每16位数据中 饱和指令VQMOVN等饱和到指定的数据类型  vqmovun.S32 d0, q0将q0到每个32位移动到d0中到每个16位中范围是0-65535          VDUP VDUP.8 d0, r0将r0复制到d0中8位 VDUP.16 q0, r0将r0复制到q0中16位 VDUP.32 q0, d2[0]将d2的一半复制到q0中 VDUP.32 d0, d2[1]将d2的一半复制到d0中 注意是vdup可以将r寄存器中的内容复制到整个neon寄存器中不能将立即数进行vdup立即数只能用vmov   逻辑运算 VADD按位与VBIC位清除VEOR按位异或VORN按位或非VORR按位或   移位指令 VSHL左移、VSHLL左移扩展、VQSHL左移饱和、VQSHLU无符号左移饱和扩展 VSHR右移、VSHRN右移窄、VRSHR右移舍入、VQSHRUN无符号右移饱和舍入   通用算术指令 VABA绝对值累加、VABD绝对值相加、VABS绝对值、VNEG求反、VADD、VADDW、VADDL、VSUB、VSUBL、VSUBW加减 VPADD将两个向量的相邻元素相加 如VPADD.I16 {d2}, d0, d1 VPADDLVPADDL.S16 d0, d1 VMAX最大值VMIN最小值 VMUL、VMULL、VMLA乘加、VMLS乘减、   加载存储指令 VLD和VST 交叉存取的示意图 VREV反转元素指令   VEXT移位指令   VTRN转置指令可以用于矩阵的转置 VZIP指令压缩类似交叉存取 VUZP指令解压操作类似交叉存取   VTBL查表指令从d0d1中查找d3中的索引值如果找到则取出没有找到则为0存入d2中   三、需要注意的地方     load数据的时候第一次load会把数据放在cache里面只要不超过cache的大小下一次load同样数据的时候则会比第一次load要快很多会直接从cache中load数据这样在汇编程序设计的时候是非常需要考虑的问题。      如求取一个图像的均值8*8的窗口先行求和然后列求和出来均值这时候会有两个函数数据会加载两遍如果按照这样去优化的话则优化不了多少。如果换成上面这种思路先做行16行然后再做列这样数据都在cache里面做列的时候load数据会很快。    在做neon乘法指令的时候会有大约2个clock的阻塞时间如果你要立即使用乘法的结果则就会阻塞在这里在写neon指令的时候需要特别注意。乘法的结果不能立即使用可以将一些其他的操作插入到乘法后面而不会有时间的消耗。 如vmul.u16 q1, d3, d4           vadd.u32 q1, q2, q3 此时直接使用乘法的结果q1则会阻塞执行vadd需要再等待2个clock的时间 使用饱和指令的时候如乘法饱和的时候在做乘法后会再去做一次饱和所以时间要比直接做乘法要慢。 如  vmul.u16 q1, d3, d4           vqmul.u32 q1, q2, q3 后一个的时间要比第一个的时间要久。 在对16位数据进行load或者store操作的时候需要注意的是字节移位。比如是16位数据则load 8个16位数据如果指定寄存器进行偏移此时需要特别注意。 例如vld1.64 {d0}, [r0], r1   参考资料 http://blogs.arm.com/software-enablement/277-coding-for-neon-part-4-shifting-left-and-right/ http://blogs.arm.com/software-enablement/161-coding-for-neon-part-1-load-and-stores/ http://blogs.arm.com/software-enablement/684-coding-for-neon-part-5-rearranging-vectors/ 转自http://blog.csdn.net/chshplp_liaoping/article/details/12752749
http://www.zqtcl.cn/news/415641/

相关文章:

  • 如果将域名指向网站东营网站建设收益高
  • 沈阳seo网站推广优化c2c网站的功能
  • 网站设计深圳云南制作网站的公司
  • 广州的网站建设公司对网络平台的优化有哪些建议
  • 培训网站模板免费网站建设投标书
  • 常德市建设局网站用tornado做网站
  • 网站快速排名优化报价现在最流行的网站开发工具
  • 支付公司网站建设会计分录合肥房产信息网官网
  • 镜像网站能否做google排名宝丰网站制作公司
  • 中国公路建设协会网站网站建设 业务培训
  • 原创文章网站开发教程安徽网站建设获客企业
  • 企业网站后台怎么做南京微网站开发
  • 网站seo在线优化广告策划书的格式
  • 网站解析怎么设置三北防护林体系建设网站
  • 长沙高端网站建设公司wordpress分享缩略图
  • 支付网站建设费管理咨询公司取名
  • dw网站制作的一般流程wordpress 分类列表页
  • 重庆技术支持 网站建设公司wordpress挂黑页
  • 2网站建设类似wordpress
  • 特别酷炫网站惠州的服装网站建设
  • 网站右侧悬浮代码网站新闻前置审批
  • 2015网站建设十堰网站优化排名
  • 营销网站的优点番禺人才网最新招聘市场在哪里?
  • 企业网站建站模板自己做网站网站资源哪里来
  • 接入服务商网站备案管理系统技术规范要求郴州网站建设软件定制开发制作
  • 温州做网站公司哪家好购物网站的基本功能
  • 网站建设网站建设教程建设糖果网站的好处有哪些
  • 松原手机网站开发wordpress数据库设计优缺点
  • 惠州建设工程造价管理站网站中国海洋大学站群网站建设
  • 怎么做网站里面的模块太原做网络推广