现代CPU会跳过零乘法吗?

2023-11-27

我想知道当两个数字中至少有一个为零时,当前的CPU是否避免将两个数字相乘。谢谢


这根据 CPU 和(在某些情况下)操作数的类型而有很大差异。

较旧/较简单的 CPU 通常使用如下乘法算法:

integer operator*(integer const &other) {
    unsigned temp1 = other.value;
    unsigned temp2 = value;
    unsigned answer = 0;

    while (temp1 != 0) {
        if (temp1 & 1) 
            answer += temp2;
        temp2 <<= 1;
        temp1 >>=1;
    }
    return integer(answer);
}

由于循环仅在当/如果时执行temp1 != 0,循环显然不会执行如果temp1开始时为 0(但如此处所写,不会尝试对其他操作数为 0 进行任何优化)。

然而,这从根本上来说是一次一位的算法。例如,当乘以 32 位操作数时,如果每个位被设置的机会为 50:50,我们预计平均大约有 16 次迭代。

较新的高端 CPU 通常一次至少使用两位,甚至可能更多。它通常不会使用单个硬件执行多次迭代,而是通常为乘法的每个阶段使用单独的(尽管本质上相同)硬件来管道化操作(尽管这些通常不会在正常的流水线图上显示为单独的阶段)对于处理器)。

这意味着无论操作数如何,执行都将具有相同的延迟(和吞吐量)。平均而言,它稍微改善了延迟并大大改善了吞吐量,但确实导致每个操作都以相同的速度发生,而不管操作数如何。

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

现代CPU会跳过零乘法吗? 的相关文章

  • 如何仅使用位移位和加法进行乘法和除法?

    如何仅使用位移位和加法进行乘法和除法 要以加法和移位的方式进行乘法 您需要将其中一个数字分解为 2 的幂 如下所示 21 5 10101 2 101 2 Initial step 10101 2 1 2 2 0 2 1 1 2 0 1010
  • XNA 的 CPU 使用率高

    我今天刚刚注意到 当我编译并运行一款新的 XNA 4 0 游戏时 其中一个 CPU 线程以 100 的速度运行 并且帧速率下降到 54 FPS 奇怪的是 有时它可以在 60 FPS 下运行 但随后就会下降到 54 FPS 我以前没有注意到这
  • 如何简单地将数据帧的两列相乘? [复制]

    这个问题在这里已经有答案了 我的输入是 a lt c 1 2 3 4 b lt c 1 2 4 8 df lt data frame cbind a b 我的输出应该是 a lt c 1 2 3 4 b lt c 1 2 4 8 d lt
  • 执行长字传输到 CPU 需要多少个周期和大小

    该任务针对架构 ColdFire 处理器 MCF5271 我不明白执行到 CPU 的长字传输或字传输需要多少个周期以及什么大小的周期 我正在阅读图表 但不明白其中有何联系 非常感谢任何评论 我附上了两个例子和答案 数据总线大小 https
  • BigInteger 时间最优化的乘法

    你好 我想以最及时的优化方式乘以 2 个大整数 我目前正在使用 karatsuba 算法 任何人都可以建议更优化的方法或算法来做到这一点 Thanks public static BigInteger karatsuba BigIntege
  • 如何使用C获取Linux中的CPU数量?

    Linux 中是否有 API 可以获取可用 CPU 的数量 我的意思是 不使用 proc cpuinfo 或任何其他系统节点文件 我使用 sched h 找到了这个实现 int GetCPUCount cpu set t cs CPU ZE
  • 如何使用 bash 命令创建 CPU 峰值

    我想在 Linux 机器上创建接近 100 的负载 它是四核系统 我希望所有核心都全速运行 理想情况下 CPU 负载将持续指定的时间 然后停止 我希望 bash 有一些技巧 我在想某种无限循环 I use stress http linux
  • Tensorflow 相同的代码,但从 CPU 设备到 GPU 设备得到不同的结果

    我正在尝试实现一个程序来测试 GPU 设备上的 Tensorflow 性能 数据测试是MNIST数据 使用多层感知器 神经网络 进行监督训练 我跟着这个简单的例子 http gist github com nishidy 8176548ec
  • 警告:“将‘D’的乘法及其转置括起来,以确保结果是埃尔米特式的。”

    正如您在上面的屏幕截图中看到的 我的 Matlab m 文件代码中有以下表达式 K P D D P 其中 P 是一个 nxn 矩阵 D 是一个 nx1 列向量 n 4 如果重要的话 为什么我会收到此警告消息 如果我在那里使用或不使用括号会发
  • Django 开发服务器 CPU 密集型 - 如何分析?

    我注意到本地 windows7 机器上的 django 开发服务器 版本 1 1 1 正在使用大量 CPU 根据任务管理器的 python exe 条目 约为 30 即使处于空闲状态 即没有请求到来进 出 是否有一种既定的方法来分析可能造成
  • 查看x86架构中的cpu缓存内容

    如何查看或转储基于 x86 的架构的 cpu 缓存内容 每次进行缓存刷新时 我如何才能看到刷新了什么 在哪里 你不能 真的 CPU 缓存被设计为对于 CPU 上运行的代码是透明的 它具有加快代码执行速度的效果 但 CPU 管理有关缓存的所有
  • 阿迪和苏比之间到底是什么“关系”?

    我应该回答这个问题 经过一番研究后发现 add 和 sub 具有相同的操作码 仅在功能领域有所不同 这是答案还是其他什么 Update Nios II CPU 手册中提供了它 subi subtract immediate Operatio
  • JQ:如何将被识别为字符串的值相乘?

    我正在尝试从交换网络套接字获取一些贸易信息 在我从套接字获取的 JSON 中 值 p 和 q 都用双引号括起来 当我尝试将两个值相乘时 它表示我正在尝试将两个字符串相乘 因此 我通过 tonumber 过滤器传递这些字符串 并且错误消息发生
  • 如何根据CPU能力实现渲染器

    我想知道在 JavaScript 中实现渲染器的最佳方法是什么 这里真正重要的并不是渲染的内容部分 我更想知道何时以及如何有效地运行渲染器代码 目前 我有window setInterval renderFunc 1000 20 每 50
  • python 进程占用 100% CPU

    我正在尝试运行 python 应用程序并根据指定的时间间隔执行操作 下面的代码持续消耗 100 的 CPU def action print print hello there interval 5 next run 0 while Tru
  • C++ 中的 CPUID 实现

    我想知道这里是否有人有一些可以从任何托管 net 语言引用的 C CPUID 实现的好示例 另外 如果情况并非如此 我是否应该注意 X86 和 X64 之间的某些实现差异 我想使用 CPUID 来获取运行我的软件的机器上的信息 崩溃报告等
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • 就 size_t 而言,“目标平台上最大可能对象的大小”是多少

    我正在阅读有关的文章size t在 C C 中http web archive org web 20081006073410 http www embedded com columns programmingpointers 2009001
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 汇编语言程序中连续两次相乘

    我正在使用 8086 模拟器以及 DOSBOX 和 MASM 我知道当我们将 8 位与 8 位相乘时 答案将是 16 位 al 8 bit ax 当我们将 16 位与 16 位相乘时 答案将是 32 位 ax 16 bit dx ax 但如

随机推荐

  • 在字符串内包含引号?

    我正在尝试将引号包含在字符串中以添加到文本框 我正在使用此代码 t AppendText Dim Choice count As String Your New Name is pt1 pt2 vbNewLine 但它不起作用 我希望它像这
  • 从大型数据集中随机采样

    我从一个大型数据库中提取了研究人群 为了进行比较 我想选择一个具有相似特征的对照组 我想要匹配的两个标准是年龄和性别 为我提供用于匹配目的的数字的查询是 select sex age 10 as decades COUNT as count
  • URL/子域重写 (htaccess)

    假设我有以下文件 http www example com images folder image jpg 我想把它放在 http s1 example com folder image jpg 我如何进行 htaccess 重写以将其指向
  • GAE交易失败和幂等性

    Google App Engine 文档包含以下段落 注意 如果您的应用程序在提交时收到异常 交易失败并不总是意味着交易失败 你 可以接收DatastoreTimeoutException ConcurrentModificationExc
  • Linq2SQL 处理具有唯一约束的表上的插入/删除

    我有一个如下所示的表 TABLE Foo Guid Id PK int A FK int B FK int C FK 以及对 A B 和 C 的唯一约束 现在举例来说 您插入带有新 PK 的行 其中 A 1 B 1 C 1 SubmitCh
  • 在单个谱系中变基多个分支的最简单方法

    我有两个分支位于上游 主控之上 一个分支以另一个为祖先 因此它们形成一条线 U1 upstream master A B fixes C D features 随后 upstream master 继续前进 U1 U2 upstream m
  • 使用 Flex 编写可重入词法分析器

    我是弯曲的新手 我正在尝试使用 Flex 编写一个简单的可重入词法分析器 扫描器 词法分析器定义如下 我遇到编译错误 如下所示 yyg 问题 可重入 l Definitions digit 0 9 letter a zA Z alphanu
  • 没有打印语句就不会执行代码[重复]

    这个问题在这里已经有答案了 我一直在制作一个倒计时程序 我想出了这个 package main import java awt FlowLayout import java awt event ActionEvent import java
  • 无法在 Azure DevOps 管道中激活 conda

    在 conda 构建的 python 项目上测试 azure devops 管道 jobs job pre build setup displayName Pre Build Setup pool vmImage ubuntu 18 04
  • 析构函数有符合标准的名称吗?

    根据标准 类析构函数是否有迂腐意义上的名称 回想一下 构造函数明确没有名称 12 1 1 构造函数没有名字 A 使用特殊声明符语法 可选序列 后面是函数说明符 7 1 2 通过构造函数的类名 随后使用参数列表 声明或定义构造函数 在这样的声
  • 如何拦截粘贴到 NSTextView 中以删除不支持的格式?

    我正在尝试创建一个简单的基于 NSTextView 的窗口 以进行简单的所见即所得编辑 但是 我只想允许某些类型的格式 例如粗体 斜体 下划线和单个标题类型 但没有颜色或不同的字体 问题是 如果我只是使用 NSTextView 有人可以在另
  • iOS 推送通知 - 更新徽章而不发出警报?

    有没有办法在不显示警报或打开应用程序的情况下更新徽章中的数字 我正在编写一个应用程序 它应该始终在图标徽章中显示当前未读消息的数量 但我想这样做而不向用户显示任何警报 我正在为 iOS 5 0 进行开发 编辑 为了更清楚 我正在询问一种方法
  • Java String.replaceAll 正则表达式

    使用 java 删除输入字符串 如 MY CORP My Name 的 MY CORP 部分的正则表达式是什么String replaceAll方法 这样我只能获取 My Name 部分 I tried public static Stri
  • OpenCV:如何从以太网摄像头捕获帧

    我之前对 USB 网络摄像头进行了编程 其唯一目的是从摄像头获取实时帧并显示在窗口中 我使用 cvCaptureFromCAM 来实现此目的 它对于 USB 摄像头效果很好 请参见下面的代码 我想知道如何从千兆以太网摄像头捕获帧 我想我需要
  • C++ 中的重写删除应如何表现?

    我遇到的问题是 据我所知 删除运算符应该是静态函数 但有时编译器 VC 似乎将其视为动态函数 Given class Base public void operator new size t size allocate from custo
  • PHP:使用自动加载器时如何获取所有类

    我正在使用 Composer 生成自动加载器 autoload psr 4 SomeNamespace src SomeDir 我需要创建实现特定接口的所有类的实例 这相当容易但是 当不使用自动加载器时get declared classe
  • Jquery 使用数组中的数据创建选择标签

    我需要访问数据库并更新选择标签的选项 我的代码在这里 window load function getJSON http localhost ABC web app dev php doctorFillOption function dat
  • Silverlight:组合框中的默认值

    我想在组合框中显示默认文本 例如 选择一个人 消息 你能帮我一下吗 请注意 我正在使用域上下文中的数据绑定 谢谢 为了实现这一点 我使用了派生的ExtendedComboBox扩展内置类ComboBox班级 您可以在以下位置找到该类的源代码
  • HL7 FHIR 在 asp.net web api 中序列化为 json

    我正在使用 HL7 Fhirnuget由 Ewout Kramer 创建的软件包 0 9 3 我将其与 ASP NET Web API 绑定在一起 但不幸的是内置的 JSON 序列化无法正确生成 JSON 它包含很多这样的内容
  • 现代CPU会跳过零乘法吗?

    我想知道当两个数字中至少有一个为零时 当前的CPU是否避免将两个数字相乘 谢谢 这根据 CPU 和 在某些情况下 操作数的类型而有很大差异 较旧 较简单的 CPU 通常使用如下乘法算法 integer operator integer co