x265中量化函数neon汇编实现分析

// uint32_t quant_c(const int16_t* coef, const int32_t quantScale, int32_t* deltaU, int16_t* qCoef, int qBits, int add, int numCoeff)
function x265_quant_neon
    mov             w9, #1  //x9的低32位 = 1
    lsl             w9, w9, w4 //w9 = 1 << qBits;
    dup             v0.2s, w9 //16bits为单位 = w9 2s ? 
    neg             w9, w4 //w4 = 0 - w9
    dup             v1.4s, w9 //v1, 4字节signed = w9
    add             w9, w9, #8 //w8 += 8
    dup             v2.4s, w9 //v2 4字节signed = w9
    dup             v3.4s, w5 //v3 4字节signed = w5 参数add
    
    mov                w11, w1 //w11 = w1 //w11 = quantScale

    lsr             w6, w6, #2 //w6 = w6 >> 2 numCoeff 参数, 一组4个系数
    eor             v4.16b, v4.16b, v4.16b //v4 = 0
    eor             w10, w10, w10 //w10 = 0;
    eor             v17.16b, v17.16b, v17.16b //v17 = 0

.loop_quant:

    ld1             {v18.4h}, [x0], #8 //coef 加载 4个系数,到v18的低64位
    //ld1             {v7.4s}, [x1], #16
    dup             v7.4s, w11 //v7 4字节为单位的signed = quantScale
    sxtl            v6.4s, v18.4h //v18 本来是16bits extern 到 32bits 存入v6

    cmlt            v5.4s, v6.4s, #0 //v5的值小于寄存器v6的值,判断v6 系数是否 > 0

    abs             v6.4s, v6.4s //求绝对值


    mul             v6.4s, v6.4s, v7.4s //系数 = 系数 * qscale  int tmplevel = abs(level) * quantScale;

    add             v7.4s, v6.4s, v3.4s //得到的结果加上偏移, tmplevel += add
    sshl            v7.4s, v7.4s, v1.4s //逻辑左移 qBits 位 

    mls             v6.4s, v7.4s, v0.s[0] //level << qBits  level <<= qBits 存入v6
    sshl            v16.4s, v6.4s, v2.4s //level << qBits >> qBits8 左移 -qBits8 >> 右移qBits8
    st1             {v16.4s}, [x2], #16 //deltaU[blockpos] = ((tmplevel - (level << qBits)) >> qBits8); 数据存入deltaU

    // numsig
    cmeq            v16.4s, v7.4s, v17.4s //v7和v17做比较,结果存储到v16, v17 = 0在这里 
    add             v4.4s, v4.4s, v16.4s //系数个数累加 
    add             w10, w10, #4 //处理了四个系数 

    // level *= sign
    eor             v16.16b, v7.16b, v5.16b //符号位通过异或  这里是相当于取反
    sub             v16.4s, v16.4s, v5.4s // 然后加1
    sqxtn           v5.4h, v16.4s //v16 4字节宽,缩小到2字节, 存储到v5
    st1             {v5.4h}, [x3], #8 //存入量化后的系数,数组 

    subs            w6, w6, #1 //w6 = w6 - 1  处理完一组4个系数
    b.ne             .loop_quant

    addv            s4, v4.4s
    mov             w9, v4.s[0]
    add             w0, w10, w9
    ret
endfunc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员的心智与成长

程序员的心智与成长 工作思考 有效控制情绪&#xff0c;在沟通时使用适当的表情包以传达善意。无论线上还是线下&#xff0c;都应避免争吵。只有和气相处&#xff0c;我们才能推动工作的进展。在讨论具体问题之前&#xff0c;先进行一些预备性的交流。情绪应放在第一位&#…

C#利用BufferedStream缓冲功能来增加IO操作性能

BufferedStream是C#中用于提供缓冲功能的流之一&#xff0c;它可以增加IO操作的性能&#xff0c;特别是在处理大量小型数据时。以下是BufferedStream的一些重要特性和用法&#xff1a; 1. **构造函数**&#xff1a;BufferedStream有多个重载的构造函数&#xff0c;其中最常用的…

K8s拉取habor镜像

目录 在daemon.json中添加仓库地址 重新加载daemon.json并重启docker 在目标node节点添加域名 验证目标node是否能正常登录镜像仓库 创建pod资源 加载yml文件 验证 查看pod的ip与端口号 在daemon.json中添加仓库地址 此处需要在创建资源对象所在的节点进行添加 路径&a…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十 简单视频浮雕画效果 一、简单介绍 二、简单视频浮雕画效果实现原理 三、简单视频浮雕画效果…

HistoricActivityInstance和HistoricProcessInstance区别

1、HistoricActvityInstance和HistoricProcessInstance区别 1.act_hi_actinst表保存每个流程实例processInstance经历的所有活动&#xff0c;即走过的审批节点历程&#xff0c; //查询该"流程定义"下所有流程实例经历的所有流程活动//结果是listList<HistoricAct…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

废品回收小程序推动回收行业的发展趋势

回收在全球都是一个重要行业&#xff0c;它为全球的环保作出了重要贡献。 随着科技的不断发展创新&#xff0c;废品回收的方式也逐渐多样&#xff0c;全新的线上回收小程序也逐渐出现在大众的生活中&#xff0c;在当下的手机时代&#xff0c;线上回收也为大众提供了更加便利的…

35-4 fastjson漏洞复现

环境准备:35-2 fastjson反序列化漏洞介绍 及漏洞环境搭建-CSDN博客 fastjson_tool.jar下载:fastjson_rce_tool: fastjson命令执行自动化利用工具, remote code execute,JNDI服务利用工具 RMI/LDAP (gitee.com) 一、攻击机kali开启nc监听6666端口(或其他端口也行,只要不…

如何使用pgvector为RDS PostgreSQL构建专属ChatBot?

背景 越来越多的企业和个人希望能够利用LLM和生成式人工智能来构建专注于其特定领域的具备AI能力的产品。目前&#xff0c;大语言模型在处理通用问题方面表现较好&#xff0c;但由于训练语料和大模型的生成限制&#xff0c;对于专业知识和时效性方面存在一些局限。在信息时代&…

TCP_NODELAY在延迟敏感的场景下适合设置

结论先行 在TCP发送报文有时比较短&#xff0c;但又对延迟比较敏感的场景&#xff0c;例如&#xff0c;应用控制信令&#xff0c;非常适合启用TCP_NODELAY套接字选项。 现象 发送者在TCP链路上连续发送两条请求&#xff0c;第一条请求立即发送出去了&#xff0c;而第二条要等…

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型&#xff0c;包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…

学习java第四十天

类图中各个类的作用&#xff1a; AliasRegistry&#xff1a;定义对alias的简单增删改等操作 SimpleAliasRegistry&#xff1a;主要使用map作为alias的缓存&#xff0c;并对接口AliasRegistry进行实现 SingletonBeanRegistry&#xff1a;定义对单例的注册及获取 BeanFactory&…

面试: 单例模式

目录 一、饿汉单例&#xff08;实现Serializable&#xff09; 1、破坏单例的三种情况 &#xff08;1&#xff09;反射破坏单例 &#xff08;2&#xff09;反序列化破坏单例 &#xff08;3&#xff09;Unsafe破坏单例 2、饿汉单例&#xff08;利用枚举实现&#xff09; 二…

CSS导读 (元素显示模式)

&#xff08;大家好&#xff0c;今天我们将继续来学习CSS的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 三、CSS的元素显示模式 3.1 什么是元素显示模式 3.2 块元素 3.3 行内元素 3.4 行内块元素 3.5 元素…

UNIAPP二维码展示页亮度调至最亮返回恢复进入前亮度

onLoad(params) {let num plus.screen.getBrightness().toString(); //转字符串是要存到stoage中number类型会存储失败plus.storage.setItem("pmld", num)plus.screen.setBrightness(1); //设置屏幕亮度&#xff0c;范围0-1 }onUnload() {let platformuni.getSystem…

创建自定义 通知栏

//创建前台服务方式/*** description* author* time*/ class MyForegroundService : Service() {companion object {private var instance: MyForegroundService? nullfun getInstance(): MyForegroundService? {return instance}}private val NOTIFICATION_ID 1private va…

【保姆级讲解Element UI】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

结合fastapi-users与Langserve轻松实现大语言接口用户认证

在做大模型开发的过程中&#xff0c;相信很多小伙伴都是对大模型开发感兴趣&#xff0c;却对 fastapi 这个框架并不熟悉&#xff0c;但是&#xff0c;实际开发的项目确需要用户鉴权&#xff0c;这时候就会很头疼&#xff0c;查阅官方文档发现&#xff0c;官方虽然有例子&#x…

uni-app的地图定位与距离测算功能的实现

文章目录 一、引言二、uni-app地图定位实现三、距离测算技术四、完整代码五、结论本文着重探讨了如何在uni-app中实现地图定位,以及如何计算当前定位与目标位置之间的距离。 一、引言 在移动应用开发中,地图定位与距离测算是常见的功能需求。无论是出行导航、位置签到,还是…

学习笔记之——3DGS-SLAM系列代码解读

最近对一系列基于3D Gaussian Splatting&#xff08;3DGS&#xff09;SLAM的工作的源码进行了测试与解读。为此写下本博客mark一下所有的源码解读以及对应的代码配置与测试记录~ 其中工作1~5的原理解读见博客&#xff1a; 学习笔记之——3D Gaussian Splatting及其在SLAM与自动…