x86 中不同数学函数的性能?

2024-03-28

我正在编写 3D 碰撞,想知道基本数学函数(如 + - * / sqrt pwr 三角函数,如 sin cos tan arcsin)的性能差异。

我听说这取决于许多其他因素,所以我只是想粗略地了解哪一个速度较慢并且需要避免,同时寻找不同的方法来解决问题。我也想知道差异的顺序和大小

Thanks

编辑:我用 VC++ 为 x86 编写。但了解其他架构和总体情况也很好。我主要以单浮点计算来进行实时应用。

问题是有些算法需要 sqrt 或三角函数,但我可以通过其他方法绕过它们。每个都有自己的优势,我想知道是否足以进行权衡。我想要一般知识来解决我自己的问题,谷歌了一下但没有找到任何结果,所以请回答


广义地说,概括一下最近的常见硬件:

  • 加法、减法和乘法速度很快(每个核心每个周期至少能够执行一次操作)。
  • 除法和平方根通常要慢一个数量级(每次运算数十个周期)。对于特定用途,有许多近似算法可用于在一定程度上缩小这种差距。
  • 调用数学库函数(sin, cos, exp, log等)根据您使用的数学库实现以及硬件而有很大差异。在(例如)当前的 i7 上,典型情况是介于每约 20 个周期一次操作和每约 200 个周期一次操作之间,具体取决于实现的质量和所调用的特定函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 中不同数学函数的性能? 的相关文章

随机推荐

  • 我可以在不成为系统管理员的情况下修复“找不到版本 GLIBC_2.14”错误吗?

    我正在尝试运行一个setup pyConda 环境中远程计算机上的文件 我收到以下错误消息 from torch utils cpp extension import BuildExtension CUDAExtension File ho
  • iOS 弹出“此应用内购买已被购买”

    我的 iOS 应用程序遇到问题 当我触摸 购买 按钮购买 IAP 产品时 会出现一个弹出窗口 显示以下消息 此应用内购买已被购买 它将免费恢复 我以前从未遇到过这种弹出窗口 而且我的产品只是不续订订阅 所以我想知道为什么在购买订阅时会出现此
  • Java方法重载+双重调度

    谁能详细解释一下重载方法的原因print Parent parent 在使用时被调用Child我的测试代码中的实例 这里涉及到 Java 中的虚拟方法或方法重载 解析的特殊性吗 有直接参考 Java Lang Spec 的吗 哪个术语描述了
  • 获取 WrappedArray 行值并将其转换为 Scala 中的字符串

    我有一个数据框 如下所示 value WrappedArray LineItem organizationId LineItem lineItemId WrappedArray OrganizationId LineItemId Segme
  • Bootstrap 3.3.2 模态事件多次触发

    引导模态事件 http getbootstrap com javascript modals events多次开火 或者更确切地说 总是比以前多开火一次 我将模态事件包装在一个单击函数中 该函数现在返回模态 id 如何确保该事件始终仅触发一
  • IDE0006 在 Visual Studio 中运行 Xamarin Android 项目时出错

    我刚刚创建了一个新的 Visual Studio for Cross Platform 项目 清理解决方案 重建解决方案 运行 Android 项目 编译花了很长时间 最后模拟器出现了 一段时间后 我收到 Warning IDE0006 错
  • 在 Eclipse 中编码

    我正在尝试使用 Eclipse 编码 UTF 8 来表示波兰语字符 不幸的是 我仍然遇到编码问题 我的设置 Window gt Preferences gt Debug Window gt Preferences gt Workspace
  • 嵌套结构的 boost 序列化不起作用

    我正在尝试序列化包含两种或多种其他类型结构的结构 但序列化好像不行 以下是示例代码 简单数据 hpp include
  • C# 中的并行和工作划分?

    假设我有 10 个核心 当我写的时候 Parallel For 0 100 i state gt Console WriteLine i 问题 每个核心分配数量的公式是什么 是吗100 10 在执行点 每个核心是否已经知道将处理哪些数字 或
  • 使用 tar.gz 下载在 Ubuntu 13.10 上安装 nltk 3.0

    我想在 Ubuntu 13 10 上安装 nltk 3 0 我已经运行 Ubuntu 几个星期了 我第一次使用 Linux 我刚刚下载了 python 3 4 0 3 3 也在 Ubuntu 上 因为它是随操作系统一起安装的 Python
  • 使用 ARC,哪个更好:分配或自动释放初始值设定项?

    使用起来是否更好 更快且更高效 alloc or autorelease初始化器 例如 NSString hello NSString name return NSString alloc initWithFormat Hello name
  • StringIndexOutOfBoundsException 字符串索引超出范围错误

    当我在输入整数后输入字符串 s 时 出现此错误 Exception in thread main java lang StringIndexOutOfBoundsException String index out of range 0 a
  • 覆盖 makefile 中的“CC”和“CXX”变量

    我有一个主 makefile 其中包含通用设置 以及一个子 makefile 其中包含项目特定设置 从我的另一个问题来看覆盖 makefile 中的变量 https stackoverflow com q 18869628 24949 我了
  • 如何在张量流中找到已识别对象的位置(ROI)

    我使用的是tensorflow android示例 它有一个用于ROI位置的占位符 参见tensorflow examples android src Classifier java 但它没有被使用 我希望能够找到分类对象的投资回报率 我查
  • Selenium 失败并显示空异常消息

    我使用 Selenium 2 7 0 和 Python 2 6 我的操作系统是 Mac OS X 10 7 当我尝试实例化 webdriver 对象时 我收到以下消息 selenium common exception WebDriverE
  • 路由错误 没有路由匹配 [PATCH]“/locations”

    我在尝试更新位置项后收到路线错误 我正在使用 before action 来设置位置 id before action set location only show edit update destroy private def set l
  • 显示具有单个 ID 的多条通知消息

    我有几个同时发生的事件 我需要以串行方式向用户显示多条通知消息 理想的情况是 每条通知消息将轮流显示 持续时间约为 2 秒 我能得到的最接近的是使用多个 id 但是 使用多个 id 会产生我不想要的副作用 最终状态栏上会同时显示多条通知消息
  • 如何在退出时杀死所有子进程?

    当node js进程退出时 如何杀死所有子进程 使用child process spawn生成 我认为唯一的方法是保留对ChildProcess返回的对象spawn 并在退出 master 进程时杀死它 一个小例子 var spawn re
  • 如何动态选择要在 Jenkins 构建中使用的 git 分支

    我正在尝试为 Jenkins 构建服务器创建一个新的项目配置 为了简化我想要做的事情 我将仅使用两个组件来描述问题 组分A 该组件的更改会触发该项目在 CI 服务器上的构建 CI 服务器具有静态配置的分支来监视更改和构建 例如 掌握或开发分
  • x86 中不同数学函数的性能?

    我正在编写 3D 碰撞 想知道基本数学函数 如 sqrt pwr 三角函数 如 sin cos tan arcsin 的性能差异 我听说这取决于许多其他因素 所以我只是想粗略地了解哪一个速度较慢并且需要避免 同时寻找不同的方法来解决问题 我