汇编——SSE对齐(一. 未对齐情况)

SIMD是(Single Instrument Multi Data),MMX实现了SIMD;SSE是(Streaming SIMD Extension),它取代了MMX;后来AVX(Advanced Vector Extension,高级向量扩展)对SSE进行了扩展。如下代码展示了SSE处理未对齐内存的情况:

; sse_unaligned.asm
extern printf
section .dataspvector1   dd  1.1dd  2.2dd  3.3dd  4.4spvector2   dd  1.1dd  2.2dd  2.2dd  3.3dpvector1   dq  1.1dq  2.2dpvector2   dq  3.3dq  4.4fmt1        db  "Single Precision Vector 1: %f, %f, %f, %f", 10, 0fmt2        db  "Single Precision Vector 2: %f, %f, %f, %f", 10, 0fmt3        db  "Sum of Single Precision Vector 1 and Vector 2: %f, %f, %f %f", 10, 0fmt4        db  "Doule Precision Vector 1: %f, %f", 10, 0fmt5        db  "Doule Precision Vector 2: %f, %f", 10, 0fmt6        db  "Sum of Double Precision Vector 1 and Vector 2: %f, %f", 10, 0section .bssspvector_res resd 4dpvector_res resq 4
section .textglobal main
main:
push rbp
mov rbp, rspmov     rsi, spvector1mov     rdi, fmt1call    printspfpmov     rsi, spvector2mov     rdi, fmt2call    printspfpmovups  xmm0, [spvector1]movups  xmm1, [spvector2]addps   xmm0, xmm1movups  [spvector_res], xmm0mov     rsi, spvector_resmov     rdi, fmt3call    printspfpmov     rsi, dpvector1mov     rdi, fmt4call    printdpfpmov     rsi, dpvector2mov     rdi, fmt5call    printdpfpmovupd  xmm0, [dpvector1]movupd  xmm1, [dpvector2]addpd   xmm0, xmm1movupd  [dpvector_res], xmm0mov     rsi, dpvector_resmov     rdi, fmt6call    printdpfp
leave
retprintspfp:
push rbp
mov rbp, rspmovss       xmm0, [rsi]cvtss2sd    xmm0, xmm0movss       xmm1, [rsi+4]cvtss2sd    xmm1, xmm1movss       xmm2, [rsi+8]cvtss2sd    xmm2, xmm2movss       xmm3, [rsi+12]cvtss2sd    xmm3, xmm3mov         rax, 4call        printf
leave
retprintdpfp:
push rbp
mov rbp, rspmovsd   xmm0, [rsi]movsd   xmm1, [rsi+8]mov     rax, 2call    printf
leave
ret

需要注意的几个指令如下:
movups: 移动未对齐的打包单精度;(u:未对齐unalignedp:打包的packeds:单精度single;)
addps: 打包单精度相加;
movss: 移动标量单精度;(s:标量scalars:单精度single
cvtss2sd: 将标量单精度转换为标量双精度;(d:双精度double

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

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

相关文章

acwing算法提高之图论--floyd算法及其扩展应用

目录 1 介绍2 训练 1 介绍 本专题介绍使用floyd算法求解的题目。 使用floyd算法,可以求解如下问题: 最短路。传递闭包。找图中的距离总和最小的环路。求恰好经过k条边的最短路。 floyd算法的原理讲解:基于动态规划。 状态表示d[k,i,j]&a…

nginx配置代理kibana

一、编辑kibana配置文件,修改server.basePath 配置文件中这行默认是注释掉的,我们取消注释并修改保存 server.basePath: "/elk" 二、重启kibana,root启动记得跟allow参数 nohup ./kibana --allow-root & 三、配置nginx代理…

Vision-Language Models for Vision Tasks: A Survey

论文地址:https://arxiv.org/pdf/2304.00685.pdf 项目地址:https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型,如CLIP,以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

Python selenium 使用Chrome 禁止弹出保存密码弹窗

chrome_optionwebdriver.ChromeOptions()#禁用“保存密码”弹出窗口 chrome_option.add_experimental_option("prefs",{"credentials_enable_service":False,"profile.password_manager_enabled":False})driverwebdriver.Chrome(optionschrome_o…

小组分享内容

目录 1.网络爬虫的作用(人话): 2.使用的工具 3.不使用程序进行网页信息的获取的操作步骤 4.如何使用程序来进行上述操作 1.打开浏览器 2.输入网址 3.发送请求 4.获取响应 5.判断响应是否成功 6.获取响应里需要的内容 7.记得最后关…

2_3.Linux系统中的日志管理

# 1.journald # 服务名称:systemd-journald.service journalctl 默认日志存放路径: /run/log (1) journalctl命令的用法 journalctl -n 3 ##日志的最新3条--since "2020-05-01 11:00:00" ##显示11:00后的日…

基于STM32的汽车防窒息系统

文章目录 基于STM32的汽车防窒息系统系统简介材料展示视频制作硬件连接原理图PCB实物图GSM模块使用GSM模块代码 SGP30模块SGP30模块代码 步进电机驱动步进电机代码 其他模块主逻辑代码 总结 基于STM32的汽车防窒息系统 系统简介 随着社会的发展目前汽车的流行,汽车大…

GPT带我学-设计模式11-组合模式

设计模式类型 结构型设计模式 使用场景 将对象组合成树状结构来表现"部分-整体"的层次结构。这种模式能够使得客户端对单个对象和组合对象的使用具有一致性。这句话太抽象了,拿一个实际的网站菜单树例子来说。 例子:网页菜单树 一个网站的…

C++经典面试题目(十八)

1、请解释虚函数表的概念,并说明其在多态中的应用。 虚函数表(Vtable)是用于实现多态的一种机制,它是一个存储虚函数地址的表。每个含有虚函数的类都会有一个对应的虚函数表,其中存放着该类的虚函数的地址。当对象被创…

【CSS】伪元素

伪元素 常见的伪元素 ::first-line::first-letter::before 在元素第一个子元素前增加内容::after 在元素最后一个子元素后增加内容 为了区分伪类和伪元素,建议伪元素都使用2个冒号::first-line可以针对首行文本设置属性::first-letter可以针首字母设置属性::before…

【技巧】如何解除Excel“打开密码”?

给Excel表格设置“打开密码”,可以保护表格不被他人随意打开,那如果后续不需要保护了,不想每次打开Excel都需要输密码,要怎么去除“打开密码”呢? 今天分享3个方法,最后一个方法记得收藏起来,以…

基于51单片机的智能报警系统Proteus仿真

地址:https://pan.baidu.com/s/10dhkyV5O629UpFHHV67LpQ 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectroni…

源码|并发一枝花之CopyOnWriteArrayList

CopyOnWriteArrayList的设计思想非常简单,但在设计层面有一些小问题需要注意。 JDK版本:oracle java 1.8.0_102 本来不想写的,但是github上CopyOnWriteArrayList的code results也有165k,为了流量还是写一写吧。 实现 看两个方法你…

LVS、HAProxy

集群:将很多个机器组织到一起,作为一个整体对外提供服务。集群在扩展性、性能方面都可以做到很灵活。集群的分类:负载均衡集群:Load Balance。高可用集群:High Available。高性能集群:High Performance Com…

Python学习从0到1 day20 第二阶段 面向对象 ② 封装

缘分 朝生暮死犹如露水 —— 24.4.1 学习目标: 1.理解封装的概念 2.掌握私有成员的使用 一、面向对象三大特性: 面向对象编程,是许多编程语言都支持的一种编程思想 简单理解是:基于模板(类)去创建实体&…

请解释一下Velocity模板引擎的基本工作原理是什么?在Velocity中,如何定义和使用变量?

请解释一下Velocity模板引擎的基本工作原理是什么? Velocity模板引擎的基本工作原理可以概括为将数据模型与模板文件相结合,通过解析模板中的指令和占位符,将数据模型的内容填充到模板中,最终生成所需的文本输出。 具体来说&…

一个基于大数据的派单管理系统

通常需要处理大量的订单数据,并确保这些数据能够在各个相关部门之间高效、准确地传递。这样的系统不仅有助于提高派单效率,还能优化资源配置,减少不必要的浪费。以下是一个包含所需元素的系统设计方案概述: 数据结构 订单号&…

枚举---算法

1、定义 枚举算法:也称之为穷举算法,这种算法就是在解决问题的时候去使用所有的方式去解决这个问题,会通过推理去考虑事件发生的每一种可能,最后推导出结果。优点:简单粗暴,它暴力的枚举所有可能&#xff…

Mysql故障和优化

一、MySQL故障 二、MySQL优化 1.硬件优化: 2.数据库设计与规划 1.提前估计数据量,使用什么存储引擎 2.数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性 3.增加多台服务器,以达到稳定、高效的效果。主从同步、…

Flask Response生成流式数据api;iter_lines,iter_content遍历区别

1、Flask Response生成流式数据api 注意return与def generate():是同级的 from flask import Flask, Responseapp Flask(__name__)app.route(/stream) def stream_data():def generate():for i in range(5):time.sleep(1)yield f"Data chunk {i}\0" # 在每个数据…