x86 上成功的未对齐访问的实际效果是什么?

2023-11-25

我总是听说未对齐的访问很糟糕,因为它们会导致运行时错误并使程序崩溃或减慢内存访问速度。然而,我找不到任何关于它们会减慢速度的实际数据。

假设我在 x86 上并且有一些(但未知)未对齐访问的份额 - 实际上可能的最严重的减速是什么?在不消除所有未对齐访问并比较两个版本代码的运行时间的情况下如何估计它?


这取决于指令,对于大多数 x86 SSE 加载/存储指令(不包括未对齐的变体),它将导致错误,这意味着它可能会使您的程序崩溃或导致异常处理程序的大量往返(这意味着几乎或所有性能都会丢失)。未对齐的加载/存储变体以双倍的周期 IIRC 运行,因为它们执行部分读/写,因此需要 2 个周期才能执行该操作(除非您很幸运并且它在缓存中,这大大减少了惩罚)。

对于一般的 x86 加载/存储指令,代价是速度,因为需要更多周期来执行读取或写入。不对齐还可能影响缓存,导致缓存行分裂和缓存边界跨越。它还可以防止读取和写入的原子性(这对于 x86 的所有对齐读/写都是保证的,障碍和传播是另一回事,但在未对齐的数据上使用 LOCK'ed 指令可能会导致异常或大大增加本已巨大的惩罚锁产生),这是并发编程的禁忌。

英特尔 x86 和 x64 优化手册详细介绍了上述每个问题、其副作用以及解决方法。

Agner Fog 的优化手册应该有您正在寻找的原始循环吞吐量的确切数字。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 上成功的未对齐访问的实际效果是什么? 的相关文章

  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • c# 通过内存地址调用方法

    我正在尝试在 C 中的指定内存地址调用函数 以下是我在 C 中的操作方法 typedef void do int i auto doActor do 0xAAAABEEF doActor 1 如果可能的话 如何在 C 中复制这种行为 对 C
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • Gradle 构建错误:内存不足

    当我使用 gradle 构建时 它失败并显示以下信息 OpenJDK 64 Bit Server VM warning INFO os commit memory 0x0000000788800000 89128960 0 failed e
  • 使用 FileInputStream 时如何确定理想的缓冲区大小?

    我有一个从文件创建 MessageDigest 哈希 的方法 我需要对很多文件 gt 100 000 执行此操作 用于读取文件的缓冲区应该设置多大才能最大限度地提高性能 大多数人都熟悉基本代码 为了以防万一 我将在这里重复一遍 Messag
  • * 到底有多慢?

    大家都表示 选择器非常慢 但它到底有多慢呢 我总是试图避免它 但有时它非常有用 例如 h1 margin top 1em 简单来说 通用选择器 速度只与页面上的元素一样慢 Since 从右到左匹配浏览器获取每个元素并将其与所有候选规则进行匹
  • 使用 g++ 5.3.1 编译的程序运行速度比使用 g++ 4.8.4 编译的相同程序慢 3 倍,相同的命令

    最近 我开始使用 Ubuntu 16 04 和 g 5 3 1 并检查我的程序是否运行慢3倍 在此之前我使用过 Ubuntu 14 04 g 4 8 4 我用相同的命令构建它 CFLAGS std c 11 Wall O3 我的程序包含循环
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 为什么列表理解在数组相乘方面比 numpy 快得多?

    最近我回答了THIS https stackoverflow com questions 31596979 multiplication between 2 lists 31597029 31597029想要两个列表相乘的问题 一些用户建议
  • 如何检查设备是否“快”足够

    我找不到更好的措辞来回答我的问题 在我的应用程序中的某个时刻 我设置了一些非常密集的动画 事实是 在高端设备上 动画运行流畅且赏心悦目 另一方面 我测试的一款低端设备在制作动画时的性能非常糟糕 为了将用户体验放在第一位 我想在计算能力足够的
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • 汇编器8086将32位数字除以16位数字

    我尝试将 32 位数字除以 16 位数字 例如 10000000h 除以 2000h 根据我尝试做的设计除以 右 4 位数字除以除数 然后左 4 位数字除以除数 这是我的代码 DATA num dd 10000000h divisor dw
  • 为什么 Collections.counter 这么慢?

    我正在尝试解决罗莎琳德的基本问题 即计算给定序列中的核苷酸 并在列表中返回结果 对于那些不熟悉生物信息学的人来说 它只是计算字符串中 4 个不同字符 A C G T 出现的次数 我期望collections Counter是最快的方法 首先
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • Python if 与 try- except

    我想知道为什么下面程序中的 try except 比 if 慢 def tryway try while True alist pop except IndexError pass def ifway while True if alist
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

    我想让 TEXT 字段的值在我的 MySQL 表中唯一 经过小型研究 我发现由于性能问题 每个人都不鼓励在 TEXT 字段上使用 UNIQUE INDEX 我现在想用的是 1 创建另一个字段来包含 TEXT 值的哈希值 md5 text v
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php

随机推荐

  • 在 Eclipse 中自动将项目构建成 JAR

    我有一个 Eclipse 项目 我想将我的 Java 项目自动构建到 JAR 中 我知道我可以选择将项目导出到 JAR 中 如果我右键单击 但我真正想要的是 像 Eclipse 一样自动构建项目 class文件并将其放入目标文件夹中 它还应
  • 在项目之间共享变量

    我对一些项目有一个解决方案 其中一个项目是我定义为 main 的项目 他的类也有一个 main 方法 在这个类中 我定义了一些公共和静态属性 我想要的是从其他项目文件访问此属性 例如 项目A namespace Cobra public s
  • MediaElement 支持哪些格式?

    在 C 中 什么格式MediaElement支持 以下是支持的格式编解码器的汇总列表MediaElement 无论文件扩展名如何 都支持这些编码 Source https msdn microsoft com en us library c
  • 如何在 Spring Boot Embedded tomcat 中为外部静态 HTML 文件提供服务?

    我是 Spring 框架和 Spring Boot 的新手 我实现了一个非常简单的 RESTful Spring Boot Web 应用程序 您可以在另一个问题中看到几乎完整的源代码 Spring Boot 如何外部化 JDBC 数据源配置
  • java.awt.Desktop 类

    我正在使用适用于 Android 的 Google API 由于适用于 Android 的 Google API G Suite Quickstart 引用了他们的 java 示例 因此我正在尝试实现此功能 GoogleAuthorizat
  • PHP 增加一半

    我有一个简单的问题 可能很容易回答 我已经搜索过 但不确定我是否搜索正确或什么 不管怎样 使用PHP 我怎样才能将增量减半呢 例如 我知道我可以使用以下循环
  • 选择 2 个带有国旗的国家/地区下拉列表

    有人有一个易于使用的国家 地区下拉列表示例 带有国旗 用于Select2 我即将实施一个基于this建议 但我宁愿避免重新发明轮子 我正在研究类似的问题 这就是我的解决方法 function function var isoCountrie
  • DownloadManager 发送 STATUS_SUCCESSFUL 下载失败

    好的 我正在下载文件 图像 下载完成后 我想发送一条带有图像本地 URI 的消息 但有 20 的时间我会得到这样的信息 6 01 18 46 39 900 INFO DownloadManager 412 Initiating reques
  • 使用 JavaScript 遍历 JSON 对象树的所有节点

    我想遍历 JSON 对象树 但找不到任何库 看起来并不困难 但感觉就像重新发明轮子 在 XML 中 有很多教程展示如何使用 DOM 遍历 XML 树 如果你认为 jQuery 是一种overkill对于这样一个原始的任务 你可以这样做 yo
  • 如何创建一个将数字转换为双射十六进制的函数?

    也许我的数学不够好 但我在将数字转换为纯字母顺序时遇到问题双射十六进制就像 Microsoft Excel OpenOffice Calc 的做法一样 这是我的代码的一个版本 但没有提供我需要的输出 var toHexvg function
  • 如何在 Django 模板中使用 Jquery/Ajax 正确刷新 div

    我尝试过实施该解决方案here 但我似乎无法让它正常工作 我有一个 div 它是使用 Django 模板内的循环填充的 就在其下方 有一个输入框 我可以在其中输入一些文本 然后单击 提交 Submit 操作应该触发一个 Jquery 脚本
  • Spring安全Java配置

    我正在尝试使用 JavaConfig 而不是 Spring Security 的 XML 配置 我想用 PreAuthorization用于声明访问权限 我的 Spring 安全配置如下所示 Configuration EnableWebS
  • 在 Django 管理中编辑组对象时将用户对象分配给组

    在用户对象 编辑用户 的默认 Django 管理视图中 可以编辑用户的组成员身份 如果我也想反过来怎么办 IE 在群组编辑页面中 可以选择属于正在编辑的群组的用户 正如我所看到的 Django 没有从 Group 到 User 对象的 Ma
  • 将外键作为主键可以吗?

    我有两张桌子 用户 用户名 密码 个人资料 个人资料 ID 性别 出生日期 目前我正在使用这种方法 每个配置文件记录都有一个名为 userId 的字段 如下所示外键它链接到用户表 当用户注册时 会自动创建他的个人资料记录 我对我朋友的建议感
  • Symfony2 中的路由:可选参数 en 四个 url 用于一个路由

    在我的 Symfony2 应用程序中 我希望通过一条路由可以实现四个 url 很多其他的东西 报告 20 负数 很多其他的东西 报告 40 正数 很多其他的东西 报告 无号码 很多其他的东西 报告 没有数字 也没有 我的路线目前如下所示 r
  • WPF ListView 始终显示完整项目

    我有一个带有多个 ListView 控件的应用程序 其中要求 ListView 中的项目必须完全可见 列表中永远不应该显示部分 ListViewItem 如果用户在最终显示部分项目的位置释放 ScrollViewer 则列表应 捕捉 并自行
  • 如何使用 Apple SDK 以编程方式检测并连接到 Wifi 网络

    我想知道如何以编程方式检测并连接到 Wifi 网络 就像 Apple Store 中的 WifiFoFum 应用程序一样 该应用程序已获得批准并最近更新 因此必须有合法的方式来执行此操作 如果有人知道任何方法 请发布一个代码片段 即使它是一
  • CustomValidator ServerValidate 方法不触发

    我已经放了一个CustomValidator在我的表格上 我还没有设置它ControlToValidate财产 在其ServerValidate事件我写了以下内容 protected void CustomValidator1 Server
  • 从 ListView 中删除所选项目

    如何从列表视图中删除选定的项目 foreach ListViewItem eachItem in listView1 SelectedItems listView1 Items Remove eachItem 其中 listView1 是列
  • x86 上成功的未对齐访问的实际效果是什么?

    我总是听说未对齐的访问很糟糕 因为它们会导致运行时错误并使程序崩溃或减慢内存访问速度 然而 我找不到任何关于它们会减慢速度的实际数据 假设我在 x86 上并且有一些 但未知 未对齐访问的份额 实际上可能的最严重的减速是什么 在不消除所有未对