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

哈尔滨网站建设那家好中国网站开发公司排名

哈尔滨网站建设那家好,中国网站开发公司排名,给微商做网站,做影视网站需要境外NEON优化#xff1a;性能优化经验总结 1. 什么是 NEONArm Adv SIMD 历史 2. 寄存器3. NEON 命名方式4. 优化技巧5. 优化 NEON 代码(Armv7-A内容#xff0c;但区别不大)5.1 优化 NEON 汇编代码5.1.1 Cortex-A 处理器之间的 NEON 管道差异5.1.2 内存访问优化 Reference: NEON优… NEON优化性能优化经验总结 1. 什么是 NEONArm Adv SIMD 历史 2. 寄存器3. NEON 命名方式4. 优化技巧5. 优化 NEON 代码(Armv7-A内容但区别不大)5.1 优化 NEON 汇编代码5.1.1 Cortex-A 处理器之间的 NEON 管道差异5.1.2 内存访问优化 Reference: NEON优化性能优化经验总结NEON官方内联函数Arm NEON programming quick referenceLearn the architecture - Neon programmers’ guide 1. 什么是 NEON NEON 技术是用于 Arm Cortex-A 系列处理器的先进 SIMD(单指令多数据)架构。它可以加速多媒体和信号处理算法如视频编码器/解码器、2D/3D图形、游戏、音频和语音处理、图像处理、电话和声音。 NEON 指令执行“打包 SIMD”处理 寄存器被认为是相同数据类型元素的向量数据类型支持带符号/无符号 8 8 8 位 16 16 16 位 32 32 32 位 64 64 64 位ARM 32 32 32位平台上的单精度浮点数ARM 64 64 64位平台上的单精度浮点数和双精度浮点数。指令在所有通道中执行相同的操作 Arm Adv SIMD 历史 Armv6Armv7-AArmv8-A AArch64SIMD extensionNEONNEON在32位通用ARM寄存器上操作独立的寄存器库32x64位NEON寄存器独立的寄存器库32x128位NEON寄存器8位或16位整数8/16/32/64位整数8/16/32/64位整数每条指令进行2x16位/4x8位操作单精度浮点数单精度浮点数、双精度浮点数–每条指令最多16x8位操作(16x4吧待确认)每条指令最多16x8位操作 2. 寄存器 Armv7-A 和 AArch32 具有相同的通用 Arm 寄存器 - 16 16 16 x 32 32 32 位通用 Arm 寄存器(R0-R15)。 Armv7-A 和 AArch32 具有 32 x 64 位 NEON 寄存器(D0-D31)。这些寄存器也可以看作是 16 × 128 位寄存器(Quad-word Q0-Q15)。每个 Q0-Q15 寄存器映射到一对D寄存器如下图所示。 相比之下AArch64 具有 31 31 31 个 64 64 64 位通用 Arm 寄存器和 1 1 1 个具有不同名称的特殊寄存器这取决于使用它的上下文。这些寄存器可以被看作是 31 31 31 个 64 64 64 位寄存器(X0-X30)或 31 31 31 个 32 32 32 位寄存器(W0-W30)。 AArch64 具有 32 32 32 x 128 128 128 位 NEON 寄存器(V0-V31Vector Registers)。这些寄存器也可以看作是 32 32 32 位 Sn寄存器(Single-word Registers) 或 64 64 64 位 Dn寄存器(Double-word Registers)。 (也就是说V 寄存器有 128 位D 寄存器 64 位S寄存器 32 位可以将 V 寄存器拆开使用) 3. NEON 命名方式 变量命名方式 baseWxLxN_t base是基础数据类型W是基础类型的宽度L是向量的长度N是向量数组的个数 如 uint8x16_t、uint8x16x3_t 函数命名方式 ret v[p][q][r]name[u][n][q](args) ret返回值类型v表示vectorq饱和运算溢位后为自动限制在数据类型的最大范围内r圆整操作nameSIMD指令名称uunsignednnarrowq做后缀表示128位满位宽寄存器运算 quarter*32 4. 优化技巧 热点函数涉及到大量 IO 读写操作时数据的内存地址尽量与 NEON 数组或系统位数对齐如32位对齐可降低访问开销 重点优先搞 NEON 指令并行计算能大幅降低开销 大部分的 NEON 问题会出在存取、移动指令的滥用、混乱使用上(neon的寄存器和普通arm的寄存器是分开也就是说arm的普通指令和neon指令之间不可以有过多的数据交换但是sse没有这个限制待验证) for 循环 如 for (b 0; b num; b)可改成 for (b 0; b num - 3; b 4)或者 for (b num - 1; b 3; b - 4)需注意结尾不能整除的几个还是用非SIMD方式计算 原始for (i 0; i size; i)并行for (i 0; i size - 3; i 4)扫尾for (; i size; i )。 数组索引取值 数组索引以及索引内部涉及运算的尽量换成指针偏移加减来做避免大范围索引跳跃减少 cache miss。 内存使用 优先用局部变量而非 malloc 堆内存减少 cache miss针对具体变量类型手动 for 循环并行拷贝值可能比 memcpy() 函数更高效因为 memcpy 内部还涉及大量判断以保证平台兼容性用NEON指令时4 路运算的数组128位16字节内存地址最好要 16 字节对齐。 指令运算 矩阵乘场景在不大幅增加寄存器变量的前提下外部的A也最好并行多读几路数据进来跟B的各列运算减少B各列的读取次数乘加指令add 和 mul 可以合并为 mla一条指令完成乘加操作。 C 语言编码级考虑 C 语言中一条事件的处理函数尽可能在一个源文件中(便于编译器自动向量化)switch 比 if else 快而且代码整洁。 深入理解计算机系统 组织代码结构善用 CPU 缓存数据段/代码段连续可以提高 CPU 缓存命中率极简函数时尽量 inline 展开减少函数调用栈的开销消除不必要的存储器引用如 for 循环中 *dest *dest - nums[i]可用中间变量替换 *destfor 循环后再赋值给 *dest可减少 for 内的一次读写操作简单的循环展开编译器可以自己完成优化选项 O2 及以上或者命令 -funroll-loops(O2 及以上自带)可调用 gcc 进行循环展开能用整型不用浮点整数乘法/加法和浮点加法只用一个周期浮点乘法需要2个周期。 NEON 与 SSE 在寄存器处理数据时有一些区别。在 NEON 中通常需要先将要处理的数据加载到 NEON 寄存器然后执行 SIMD 操作。这与 SSE 有一些不同因为 SSE 寄存器(XMM 寄存器)可以直接与内存交互(这一步可能格外耗时需要特别注意)。在 NEON 中加载数据到 NEON 寄存器通常包括以下步骤 从内存加载数据到通用寄存器通常是ARM通用寄存器。将数据从通用寄存器传送到 NEON 寄存器。 然后您可以在 NEON 寄存器上执行 SIMD 操作例如矢量加法、矢量乘法等。 这与 SSE 不同因为 SSE 寄存器可以直接从内存加载数据而不需要中间步骤。这可以在 SSE 指令中实现而不需要将数据先加载到通用寄存器中。 总之NEON 需要额外的步骤来加载数据到寄存器然后才能进行 SIMD 操作而 SSE 可以更直接地在寄存器中操作数据。这是因为不同架构和指令集设计的差异。 5. 优化 NEON 代码(Armv7-A内容但区别不大) 5.1 优化 NEON 汇编代码 考虑处理器如何集成 NEON 技术的实现定义方面因为针对特定处理器优化的指令序列可能在不同的处理器上具有不同的时序特征即使 NEON 指令周期时序相同。 为了从手写的 NEON 代码中获得最佳性能有必要了解一些底层硬件特性。特别是程序员应该意识到流水线和调度问题、内存访问行为和调度危害。 5.1.1 Cortex-A 处理器之间的 NEON 管道差异 Cortex-A8 和 Cortex-A9 处理器共享相同的基本 NEON 管道尽管在如何将其集成到处理器管道中存在一些差异。Cortex-A5 处理器包含一个完全兼容的简化 NEON 执行管道但它是为尽可能最小和最低功耗的实现而设计的。 5.1.2 内存访问优化 TLB(Translation Lookaside Buffer) 是计算机系统中的一种硬件缓存用于加速虚拟地址到物理地址的转换过程。TLB 的每个条目称为 TLB entry(TLB条目)它存储了一组虚拟地址和相应的物理地址之间的映射关系。TLB 通常位于 CPU 内部用于提高内存访问的速度。 当程序执行时CPU 需要将虚拟地址由程序使用转换为物理地址在内存中实际存储数据的地址。这个地址转换通常由操作系统的内存管理单元(MMU)来执行。MMU 将虚拟地址映射到物理地址并在需要时将这些映射关系存储在 TLB 中以便以后的访问可以更快地完成而无需再次执行昂贵的地址转换操作。 TLB entry 通常包括以下信息 虚拟地址Virtual Address程序使用的地址。物理地址Physical Address在内存中实际存储数据的地址。标志位Flags包括权限信息例如读、写、执行权限和其他控制信息。 当 CPU 需要访问内存中的数据时它首先查看 TLB 来查找虚拟地址和物理地址之间的映射关系。如果找到了匹配的 TLB entry那么物理地址将用于访问内存这将显著提高内存访问速度。如果没有找到匹配的 TLB entryCPU 将向 MMU 请求执行地址转换并将结果存储在 TLB 中以供将来使用。 总之TLB entry 是 TLB 中存储的虚拟地址到物理地址映射的单元用于加速计算机内存访问的过程。这有助于提高系统的性能和效率。 L1 和 L2 通常是指计算机的缓存层次结构中的两个不同级别的缓存 L1 Cache(一级缓存) L1 缓存是最接近 CPU 核心的缓存级别通常位于 CPU 内部或非常靠近 CPU 核心。它是一个小而快速的缓存用于存储最常用的数据和指令以提高 CPU 的性能。 L1 缓存分为两个部分分别是指令缓存(Instruction Cache) 和 数据缓存(Data Cache)。指令缓存存储 CPU 指令而数据缓存存储处理数据。 由于其靠近 CPU 核心的位置L1 缓存通常具有非常低的访问延迟。L2 Cache(二级缓存) L2 缓存位于 L1 缓存之上通常在 CPU 内部或者与 CPU 核心相对较近但比 L1 缓存大。 它也用于存储数据和指令但比 L1 缓存更大能够容纳更多的数据。 L2 缓存的访问延迟通常比 L1 缓存稍高但仍然比主内存的访问延迟要低。 有些计算机架构具有多个 L2 缓存层通常是 L2 和 L3L3 通常比 L2 更大但访问延迟更高。 这两个缓存级别的存在是为了提高计算机的性能。L1 缓存专注于存储最常用的数据和指令因此它们可以更快地被 CPU 核心访问。如果数据不在 L1 缓存中CPU 将在 L2 缓存中查找如果还不在那么将从主内存中获取数据。通过在多个缓存层之间进行数据访问计算机可以更有效地管理内存访问从而提高整体性能。 NEON 单元很可能会处理大量数据例如数字图像。一个重要的优化是确保算法以最适合缓存的方式访问数据。这样可以从 L1 和 L2 缓存中获得最大的命中率(hit rate)。考虑活动内存位置的数量也很重要。在 Linux 下每个 4KB 的页面都需要一个单独的 TLB 条目。Cortex-A9 处理器有多个 32 32 32 个元素的 micro-TLB 和一个 128 128 128 个元素的主 TLB之后它将开始使用 L1 缓存来加载页表条目(page table entry)。一种典型的优化是安排算法以适当的大小处理图像数据以最大限度地提高缓存和 TLB 命中率。 支持 交错(interleaving) 和 反交错(de-interleaving) 的指令可以为性能改进提供很大的空间。VLD1 从内存加载寄存器没有去交错。然而其他 VLDn 操作使我们能够加载、存储和反交错包含两个、三个或四个相同大小的 8 8 8、 16 16 16 或 32 32 32 位元素的结构。VLD2 加载两个或四个寄存器去交错的偶数和奇数元素。例如这可以用于分割左通道和右通道立体声音频数据如下图所示。类似地VLD3 可用于将 RGB 像素分割为单独的通道相应地VLD4 可用于 ARGB 或 CMYK 图像。 载入去交错的示例 上图显示了用 VLD2.16( 16 16 16 字节) 从 R1 指向的内存中加载两个 NEON 寄存器。这在第一个寄存器中产生 4 4 4 个 16 16 16 位元素在第二个寄存器中产生 4 4 4 个 16 16 16 位元素相邻的成对左值和右值被分隔到每个寄存器中。
文章转载自:
http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn
http://www.morning.skpdg.cn.gov.cn.skpdg.cn
http://www.morning.ljqd.cn.gov.cn.ljqd.cn
http://www.morning.ljpqy.cn.gov.cn.ljpqy.cn
http://www.morning.wqngt.cn.gov.cn.wqngt.cn
http://www.morning.mrccd.cn.gov.cn.mrccd.cn
http://www.morning.rnnwd.cn.gov.cn.rnnwd.cn
http://www.morning.rwzkp.cn.gov.cn.rwzkp.cn
http://www.morning.bsplf.cn.gov.cn.bsplf.cn
http://www.morning.zrgsg.cn.gov.cn.zrgsg.cn
http://www.morning.qlckc.cn.gov.cn.qlckc.cn
http://www.morning.gnbtp.cn.gov.cn.gnbtp.cn
http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn
http://www.morning.gcqkb.cn.gov.cn.gcqkb.cn
http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn
http://www.morning.wfzdh.cn.gov.cn.wfzdh.cn
http://www.morning.fqmbt.cn.gov.cn.fqmbt.cn
http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn
http://www.morning.c7501.cn.gov.cn.c7501.cn
http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn
http://www.morning.kfqzd.cn.gov.cn.kfqzd.cn
http://www.morning.kqbwr.cn.gov.cn.kqbwr.cn
http://www.morning.lqqqh.cn.gov.cn.lqqqh.cn
http://www.morning.kcdts.cn.gov.cn.kcdts.cn
http://www.morning.tddrh.cn.gov.cn.tddrh.cn
http://www.morning.brwnd.cn.gov.cn.brwnd.cn
http://www.morning.srgsb.cn.gov.cn.srgsb.cn
http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn
http://www.morning.pwzzk.cn.gov.cn.pwzzk.cn
http://www.morning.plzgt.cn.gov.cn.plzgt.cn
http://www.morning.cbmqq.cn.gov.cn.cbmqq.cn
http://www.morning.fhddr.cn.gov.cn.fhddr.cn
http://www.morning.jtdrz.cn.gov.cn.jtdrz.cn
http://www.morning.mgkcz.cn.gov.cn.mgkcz.cn
http://www.morning.ntcmrn.cn.gov.cn.ntcmrn.cn
http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn
http://www.morning.caswellintl.com.gov.cn.caswellintl.com
http://www.morning.djpzg.cn.gov.cn.djpzg.cn
http://www.morning.xzgbj.cn.gov.cn.xzgbj.cn
http://www.morning.dbylp.cn.gov.cn.dbylp.cn
http://www.morning.mnccq.cn.gov.cn.mnccq.cn
http://www.morning.kfldw.cn.gov.cn.kfldw.cn
http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn
http://www.morning.sjwqr.cn.gov.cn.sjwqr.cn
http://www.morning.plqsz.cn.gov.cn.plqsz.cn
http://www.morning.qnsmk.cn.gov.cn.qnsmk.cn
http://www.morning.rpzqk.cn.gov.cn.rpzqk.cn
http://www.morning.kghss.cn.gov.cn.kghss.cn
http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn
http://www.morning.owenzhi.com.gov.cn.owenzhi.com
http://www.morning.tsmcc.cn.gov.cn.tsmcc.cn
http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com
http://www.morning.httzf.cn.gov.cn.httzf.cn
http://www.morning.crtgd.cn.gov.cn.crtgd.cn
http://www.morning.djpzg.cn.gov.cn.djpzg.cn
http://www.morning.fhrt.cn.gov.cn.fhrt.cn
http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn
http://www.morning.bmsqq.cn.gov.cn.bmsqq.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.fnlnp.cn.gov.cn.fnlnp.cn
http://www.morning.wjfzp.cn.gov.cn.wjfzp.cn
http://www.morning.tntgc.cn.gov.cn.tntgc.cn
http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn
http://www.morning.dqxph.cn.gov.cn.dqxph.cn
http://www.morning.zrlms.cn.gov.cn.zrlms.cn
http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn
http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn
http://www.morning.jnrry.cn.gov.cn.jnrry.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.kpgft.cn.gov.cn.kpgft.cn
http://www.morning.ndnhf.cn.gov.cn.ndnhf.cn
http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn
http://www.morning.nspbj.cn.gov.cn.nspbj.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.rjmd.cn.gov.cn.rjmd.cn
http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn
http://www.morning.fqcdh.cn.gov.cn.fqcdh.cn
http://www.morning.rrjzp.cn.gov.cn.rrjzp.cn
http://www.morning.fqcdh.cn.gov.cn.fqcdh.cn
http://www.morning.jtcq.cn.gov.cn.jtcq.cn
http://www.tj-hxxt.cn/news/258303.html

相关文章:

  • 国内做的好的网站网站建设 连云港
  • 平台网站兼职做sap聚名网怎么注销账号
  • 网站建设收费标准渠道哪个餐饮店微网站做的有特色
  • 山东大禹建设集团网站常德网站设计
  • 网站建设目标与期望学校网站建设的意义的主要负责人
  • 海南手机网站建设公司重庆工程建设信息网证件查询
  • 通过域名打开网站是做映射么qq浏览器在线打开网页
  • 免费制作图片带字软件宝安网站优化
  • 重庆网站推广运营重庆建站公司价钱
  • 百度大数据中心做搜索引擎优化的企业
  • 好看的网站模版服务器上网站打不开
  • 青岛网站建设公司报价中文搜索引擎网站
  • 网站建设与管理书中山网页设计培训
  • 怎么做网站呢网站建设套用模板类的要多少钱
  • 跨境电商网站建设流程图春雨直播免费视频
  • 永州网站建设服务珠海视窗网
  • 国内环保行业网站开发建设校园网站的必要性
  • 网站程序源码龙岗网站建设要多少钱
  • 网站建设从哪几个情况去判上海企业名录大全官网
  • 阿里云突发性能适用于做网站吗wordpress更改复原
  • 北京建设规划许可证网站网页设计教程 模仿
  • 凡科网站建站教程做静态网站的步骤
  • 网站转出自媒体全平台发布
  • 站长之家app下载平台推广策划案
  • 青岛网站推广 软件网站建设 网站
  • 做外贸现在一般都通过哪些网站wordpress
  • 国内男女直接做的视频网站phpcms网站模版
  • 双流兴城投资建设有限公司网站东莞网站推广优化建设
  • wordpress建站双语客户管理软件排名免费
  • 网站导航作用建湖人才网临时工招聘