vgetmantps 与 andpd 获取浮点数尾数的说明

2024-03-03

对于 skylakex(agnerfog 的指令表):

+-----------------------+-------------+-------------------+---------------------+----------------+---------+-----------------------+
|      Instruction      |  Operands   | µops fused domain | µops unfused domain | µops each port | Latency | Reciprocal throughput |
+-----------------------+-------------+-------------------+---------------------+----------------+---------+-----------------------+
| VGETMANTPS/PD         | v,v,v       |                 1 |                   1 | p01/05         |       4 | 0.5-1                 |
| AND/ANDN/OR/ XORPS/PD | x,x / y,y,y |                 1 |                   1 | p015           |       1 | 0.33                  |
+-----------------------+-------------+-------------------+---------------------+----------------+---------+-----------------------+

这是否意味着使用位掩码和逻辑并获取浮点数的尾数比使用 vgetmantps 指令更快?

将数字从 float 转换为 int 再转换回 float 的延迟是多少?


为了实施log(x), you want尾数和指数为float, and vgetmantps / vgetexpps非常适合它。AVX2 中 log2(__m256d) 的高效实现 https://stackoverflow.com/questions/45770089/efficient-implementation-of-log2-m256d-in-avx2。这就是这些指令的用途,并且确实可以加速快速逼近log(2)。 (此外,它可以将有效数标准化为 -0.5 .. +0.5 而不是 1 .. 2.0 或其他整齐的范围,以创建多项式近似的输入log(x+1)管他呢。看its docs http://felixcloutier.com/x86/VGETMANTPS.html.)

如果您只想将尾数作为整数,那么请确保将其他位与其他位相加,然后您就可以在一条指令中完成。

(但请记住,对于 NaN,尾数是 NaN 有效负载,因此如果您需要对 NaN 执行不同的操作,则需要检查指数。)

将数字从 float 转换为 int 再转换回 float 的延迟是多少?

您已经有了 Agner Fog 的说明表(https://agner.org/optimize/ https://agner.org/optimize/)。在 Skylake(SKL 和 SKX)上VCVT(T) PS2DQFMA 端口的延迟为 4c,另一个方向也是如此。

或者您是否询问使用 FP 指令输出的旁路延迟,例如andps作为整数指令的输入?

Agner Fog 的 microarch PDF 提供了一些有关在 vec-int 和 fp 域之间发送数据的旁路延迟的信息,但具体细节不多。

Skylake 的旁路延迟很奇怪:与之前的 uarches 不同,它取决于指令实际选择的端口。andps如果在端口 5 上运行,则 FP 指令之间没有旁路延迟,但如果在 p0 或 p1 上运行,则会有额外的 1c 延迟。

请参阅英特尔优化手册,了解按域+执行端口细分的跨域延迟表。

(更奇怪的是,这种旁路延迟延迟会永远影响该寄存器,即使它已经明确写回物理寄存器并且没有通过旁路网络转发。vpaddd xmm0, xmm1, xmm2如果任一输入来自vmulps。但一些洗牌和其他指令在这两个域中都有效。我尝试这个已经有一段时间了,而且我没有检查我的笔记,所以这个例子可能不完全正确,但它是这样的。)

(英特尔的优化手册没有提到这种永久效果,这种效果会持续到您用新值覆盖架构寄存器为止。因此,在使用整数指令的循环之前创建 FP 常量时要小心。)

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

vgetmantps 与 andpd 获取浮点数尾数的说明 的相关文章

  • 为什么我的代码显示垃圾?

    当我也想打印列表中的每个数字时 我的代码显示垃圾 有什么问题吗 输出应如下所示 给定的数组是 2G 4 PT为什么这是垃圾总数是 7 Code ASSUME CS CODE DS DATA SS STK ORG 0000H DATA SEG
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • 红宝石接球和效率

    catch在 Ruby 中意味着跳出深度嵌套的代码 在 Java 中 例如用Java也可以达到同样的效果try catch用于处理异常 但它被认为是糟糕的解决方案 而且效率非常低 在 Ruby 中 我们有处理异常的方法begin raise
  • 为什么 Web Worker 性能在 30 秒后急剧下降?

    我正在尝试提高在网络工作人员中执行时脚本的性能 它旨在解析浏览器中的大型文本文件而不会崩溃 一切都运行得很好 但我注意到使用网络工作者时大文件的性能存在严重差异 于是我做了一个简单的实验 我在同一输入上运行脚本两次 第一次运行在页面的主线程
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 使用 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 我的程序包含循环
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • SIMD 和 VLIW 指令是一样的吗?

    SIMD 单指令多数据 和 VLIW 超长指令字 到底有什么区别 其中一个是另一个的子集吗 或者它们是两个完全不同的东西 完全不相关且正交 一台机器可以有一个或两个 或者两者都没有 SIMD 指令可以作为扩展添加到 VLIW ISA 但 V
  • 为什么X86中没有NAND、NOR和XNOR指令?

    它们是您可以在计算机上执行的最简单的 指令 之一 它们是我亲自实施的第一个指令 执行 NOT AND x y 会使执行时间和依赖链长度和代码大小加倍 BMI1 引入了 andnot 这是一个有意义的补充 是一个独特的操作 为什么不是这个问题
  • Erlang 中的接受器池和负载平衡?

    From http www erlang org doc man gen tcp html accept 1 http www erlang org doc man gen tcp html accept 1 值得注意的是 accept 调
  • 如何提高包含大量小图像的 UCollectionView 的性能?

    在我的 iOS 应用程序中我有UICollectionView显示大约 1200 个小 35x35 点 图像 图像存储在应用程序包中 我正确地重用了UICollectionViewCell但仍然存在性能问题 具体取决于我处理图像加载的方式
  • 什么是浮点推测以及它与编译器的浮点模型有何不同

    英特尔 C 编译器提供两个控制浮点的选项 fp 推测 快速 安全 严格 关闭 fp model 精确 快速 严格和源 双 扩展 我想我明白 fp model 的作用 但什么是 fp 推测以及它与 fp 模型有何关系 我还没有找到任何解释这一
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 为什么改变对象的 [[prototype]] 会降低性能?

    来自 MDN 文档standard setPrototypeOf功能 https developer mozilla org en US docs Web JavaScript Reference Global Objects Object
  • 为什么同样的算法在 Scala 中运行比在 C# 中慢得多?以及如何让它更快?

    该算法根据序列中每个成员的变体创建序列的所有可能变体 C 代码 static void Main string args var arg new List
  • 使用 MacLaurin 展开的 Fortran Sine 函数的微小差异

    我正在用 Fortran 创建一个程序 它接受以弧度表示的 sin x 的 x 然后是要计算的项数 这是我的程序 Sine value using MacLaurin series program SineApprox implicit n
  • React Native:加载图像后应用程序性能不佳

    加载图像似乎没有问题 但是加载完毕后就出现问题了 在我的应用程序中 我在整个游戏中一张一张地加载卡片图像 一旦我加载了 40 张卡片图像 整个应用程序就会变得很慢 它总是发生在第 40 个图像处 当我在第 40 个图像之后继续加载更多卡片图
  • 在 MySQL 数据库中保持 TEXT 字段唯一的最佳方法

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

随机推荐

  • R - 根据位置将纬度/经度点的巨大数据帧分组

    我是 R 新手 但我听说使用它确实是一个坏主意for循环 我有使用它们的工作代码 但我想改进它 因为它对于大数据来说非常慢 我已经有了一些如何改进算法的想法 但我不知道如何对其进行矢量化 或者在没有for loops 我只是将纬度 经度点分
  • .Net 属性网格。有没有办法让网格以不同的方式操作对象

    据我了解 属性网格被赋予一个对象 它可以通过使用反射提取其属性来操作该对象 我的问题是我有一组在运行时确定的参数 因此我无法静态地组成一个具有属性的类来表示这组参数 我有两个想法来解决这个问题 但这两个想法都很复杂 并且可能会消耗大量时间
  • 如果当天的闹钟时间已过,android会阻止立即触发闹钟服务

    警报管理器的参考资料说 如果指定的触发时间已经过去 则会触发警报 立即地 我在我的应用程序中面临这个问题 这是我的警报管理器代码 Intent myIntent new Intent getActivity DinnerAlarmRecei
  • Emacs:修复某些窗口的高度

    有没有办法像这样固定某个窗口的高度 汇编 缓冲区使用编译窗口高度 有window size fixed http www delorie com gnu docs elisp manual 21 elisp 441 html IDX1477
  • 沙盒解决方案似乎严重受损

    我正在学习 SharePoint 以及您可以部署的不同类型的解决方案 从我正在观看的培训来看 您似乎应该尽可能使用沙盒解决方案 这是因为农场解决方案可能会把事情搞得一团糟 但是 沙盒解决方案不支持我使用 WebPart 执行的两项主要操作
  • 在 .NET 7 中使用过滤器

    自从 NET 6 中发布以来 我一直在使用 Minimal API 为了进行验证 我一直使用手动方法 如下所示 app MapPost api user async FromService IValidator
  • pandas:优化我的代码(groupby()/ apply())

    我有一个形状为 RxC 1 5M x 128 的数据框 我执行以下操作 我基于 6 列执行 groupby 这将创建约 8700 个子组 每个子组的形状为 538 x 122 在每个子组上 我运行 apply 此函数计算子组中每个分类值 P
  • Log4j2的FailoverAppender错误:appender Failover没有与元素Failovers匹配的参数

    当我使用 log4j 2 1 编译 spring 3 2 9 Web 应用程序时 控制台中出现以下错误 2015 02 02 12 08 25 213 ERROR appender Failover has no parameter tha
  • 使用 C# 在 SQL Server 中存储图像 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想将员工的图像及其个人资料详细信息存储在 SQL Server 数据库中 但我有以下保留 我是否应该压缩图像 如果是 请社区为我提供示例代码或
  • Eclipse 视图描述符已删除

    我有一个带有一些自定义视图的 Eclipse 插件项目 但最近每个视图在运行时都有错误 ENTRY org eclipse e4 ui workbench 2 0 2017 07 19 20 24 24 597 MESSAGE Removi
  • XMLhttpRequest > PHP > XMLhttpRequest

    我有另一个问题 XMLhttpRequests 困扰着我 现在所有内容都在数据库中 但我需要这些数据在第一次页面加载或重新加载时更新我的 页面 XHR 在 JavaScript 文件中触发 该文件触发 PHP 脚本 PHP 脚本访问 MyS
  • 如何将额外内容传递给 BroadcastReceiver

    我在将额外内容传递给呼叫并接听它们时遇到问题 为了更清楚我打算做什么 开始通话并为此目的设置附加功能 这就是我当前的代码 Intent dialIntent new Intent Intent ACTION CALL Uri parse t
  • iOS10、Swift 3 和 FCM 委托错误

    我收到错误 Value of type FIRMessaging has no member remoteMessageDelegate on FIRMessaging messaging remoteMessageDelegate sel
  • 如何设置日期时间格式以便 Google 表格将该值识别为日期时间

    我目前正在使用 gspread 将 Google 工作表中的数据检索到 pandas DataFrame 中 为了做到这一点 我只是按照他们的例子https gspread readthedocs io en latest user gui
  • Xcode:创建新项目时出现 pod 安装错误

    首先 我对 iOS 开发和 MAC 真的很陌生 一周只拥有一个 我正在尝试创建一个需要安装 pod 的 iOS 应用程序 我已经安装了 cocopods 等 然后导航到我的项目目录 然后我生成了 pod 文件并添加了所需的依赖项 当它运行
  • 使用 Pygame 检测碰撞点

    我正在用 Pygame 制作游戏 对于这个游戏 我不仅需要能够检测到两个矩形发生碰撞 还需要能够检测到它们之间的碰撞点 我查看了文档 但似乎找不到任何答案 这样的事情可能吗 您可以使用Rect clip https www pygame o
  • MSAL:AADB2C90146:请求中提供的“Openid 配置文件”为访问令牌指定了多个资源,但不受支持”

    当尝试使用时 this clientApplication acquireTokenSilent scopes 尽管收到错误 但我传递了多个作用域 AADB2C90146 范围 https xxx onmicrosoft com xxx u
  • 如何终止正在进行的 Heroku 构建?

    我不小心推送了一个在安装后脚本中执行 npm install 的构建 这导致我的 heroku 应用程序陷入无限安装循环 我搜索了关于如何终止构建的 Heroku 文档 但结果是空白的 我发现的最接近的东西是https help herok
  • 使用 Devise + OmniAuth 的 GitHub OAuth

    我有一份申请http github com rails3book ticketee http github com rails3book ticketee包含 Devise 提供的 OAuth 部分 配置位于config initializ
  • vgetmantps 与 andpd 获取浮点数尾数的说明

    对于 skylakex agnerfog 的指令表 Instruction Operands ops fused domain ops unfused domain ops each port Latency Reciprocal thro