为什么将 mod 与 int64_t 操作数一起使用会使该函数慢 150%?

2024-03-26

The max_rem函数计算最大余数(a+1)^n + (a-1)^n除以时离开 for n = 1, 2, 3.... The main calls max_rem在每一个a from 3 to 999。完整代码:

#include <inttypes.h>
#include <stdio.h>

int max_rem(int a) {
    int max_r = 0;
    int m = a * a; // <-------- offending line
    int r1 = a+1, r2 = a-1;
    for(int n = 1; n <= a*a; n++) {
        r1 = (r1 * (a + 1)) % m;
        r2 = (r2 * (a - 1)) % m;
        int r = (r1 + r2) % m;
        if(max_r < r) 
            max_r = r;
    }
    return max_r;
}

int main() {
    int64_t sum = 0;
    for(int a = 3; a < 1000; a++)
        sum += max_rem(a);

    printf("%ld\n", sum);
}

如果我将第 6 行更改为:

int m = a * a;

to

int64_t m = a * a;

整个计算变成了关于慢 150%。我都尝试过gcc 5.3 and clang 3.6.

With int:

$ gcc -std=c99 -O3 -Wall -o 120 120.c
$ time(./120)

real    0m3.823s
user    0m3.816s
sys     0m0.000s

with int64_t:

$ time(./120)

real    0m9.861s
user    0m9.836s
sys     0m0.000s

是的,我正在64位系统。为什么会发生这种情况?

我一直假设使用int64_t更安全、更便携,是“编写 C 的现代方式”®,并且不会损害 64 位系统上数字代码的性能。这个假设是错误的吗?

EDIT: 只是为了明确:即使你做出改变,减速仍然持续every变量为int64_t。所以这不是混合的问题int and int64_t.


我一直认为使用 int64_t 更安全、更便携,是“编写 C 的现代方式”®,并且不会损害 64 位系统上数字代码的性能。这个假设是错误的吗?

对我来说似乎是这样。您可以在以下位置找到指令时间英特尔软件优化参考手册 http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf(附录 C,第 645 页表 C-17 通用说明):



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

为什么将 mod 与 int64_t 操作数一起使用会使该函数慢 150%? 的相关文章

  • 如何使用 ASP.NET MVC 进行 HTTP 调用?

    我正在尝试做的事情 我试图练习进行 HTTP 调用 如果这就是它的名字 来自一个简单的 ASP NET MVC Web 应用程序 为此 我尝试从以下位置获取天气详细信息打开天气地图 http openweathermap org appid
  • 为什么在 C# 中成员初始值设定项中不允许这样做,但在 VB.Net Me 中允许

    我正在将 VB Net 应用程序转换为 C 并注意到在 VB Net 代码中 有一个私有成员变量 它是使用Me像这样 Private m ClassA As New MyCollection Of ClassA Me 当我将其转换为 C 代
  • 同步执行异步函数

    我对此主题进行了大量搜索 并且阅读了本网站上有关此主题的大部分帖子 但是我仍然感到困惑 我需要一个直接的答案 这是我的情况 我有一个已建立的 Winform 应用程序 但无法使其全部 异步 我现在被迫使用一个全部编写为异步函数的外部库 在我
  • 将指针转换为浮点数?

    我有一个unsigned char 通常 这指向一块数据 但在某些情况下 指针就是数据 即 铸造一个int的价值unsigned char 指针 unsigned char intData unsigned char myInteger 反
  • 隐式方法组转换陷阱

    我想知道为什么给定代码的输出 在 LinqPad 中执行 void Main Compare1 Action Main Dump Compare2 Main Dump bool Compare1 Delegate x return x Ac
  • 泛型与接口的实际优势

    在这种情况下 使用泛型与接口的实际优势是什么 void MyMethod IFoo f void MyMethod
  • 具有多重继承的类的 sizeof

    首先 我知道 sizeof 取决于机器和编译器的实现 我使用的是 Windows 8 1 x64 gcc 5 3 0 没有标志传递给编译器 我从大学讲座中得到了以下代码 include
  • 使用成员作为实现者来实现接口

    我有实现 IA 的 A 类 现在我需要创建也应该实现 IA 的类 B B 类有 A 类的实例作为成员 有什么方法可以定义A的实例实现B类中的IA吗 interfase IA void method1 void method2 void me
  • 在不使用 Thread.Sleep c# 的情况下延迟发送电子邮件

    我有一个 for 循环 它循环并每个循环发送一封电子邮件 现在我正在使用 thread sleep 但我希望用户仍然能够与程序交互 只需取消该循环即可 是否可以在不使用 thread sleep 的情况下做到这一点 您是否在 UI 线程上运
  • 如何用C++解析复杂的字符串?

    我试图弄清楚如何使用 解析这个字符串sstream 和C 其格式为 string int int 我需要能够将包含 IP 地址的字符串的第一部分分配给 std string 以下是该字符串的示例 std string 127 0 0 1 1
  • 简单的文档管理系统和API [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用互斥锁来阻止临界区外部的执行

    我不确定我的术语是否正确 但这里是 我有一个由多个线程使用的函数来写入数据 在注释中使用伪代码来说明我想要的内容 these are initiated in the constructor int data std atomic
  • 如何从代码隐藏中向我的 div 添加点击事件?

    如何从代码隐藏中向我的 div 添加点击事件 当我点击 div 时 会出现一个消息框 其中显示 您想删除它吗 并在框中显示 是 或 否 全部来自后面的代码 while reader Read System Web UI HtmlContro
  • 如何解释“错误C2018:未知字符'0x40'?[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 在编译一些代码时 我收到以下信息 错误 C2018 未知字符 0x40 我想知道如何解决这样的问题 这是我要开始的地方
  • 在 try catch 块中返回到 catch 内是否不好?这是很好的做法

    在 try catch 块中从 C 中的 catch 块返回值是不好的做法吗 try Some code return 1 catch return 0 哪种使用 try catch 的方法是好的做法 不需要 只要返回的值是你想要的 你可以
  • 实体框架代理创建

    我们可以通过使用来停止在上下文构造函数中创建代理 this Configuration ProxyCreationEnabled false 在 EF 4 1 中创建代理有哪些优点和缺点 代理对于两个功能是必需的 延迟加载 导航属性在第一次
  • 致命错误 C1001:编译器中发生内部错误(编译器文件“msc1.cpp”,第 1325 行)

    当我编译代码时 错误指向以下类 该错误在两行上突出显示 如下所示 tm validFrom tm validUntil struct t SslCertData final struct t Contact TCHAR Organizati
  • FakeItEasy 代理方法调用实际实现

    我正在尝试将对假对象的调用代理到实际的实现 这样做的原因是我希望能够使用 Machine Specifications 的 WasToldTo 和 WhenToldTo 它们仅适用于接口类型的伪造 因此 我正在执行以下操作来代理对我的真实对
  • 什么时候使用静态库需要头文件?

    如果我在 Linux 中用 C 创建一个静态库并生成 a 文件 我 或其他人 如何使用该库 例如 我的库定义了一个类 我认为仅仅提供 a 文件是不够的 还需要提供头文件 我如何知道 a 文件必须提供哪些头文件 例如 我是否需要提供我的库代码
  • 如何将 char 转换为 unsigned int?

    我有一个字符数组 它实际上用作字节数组 而不是用于存储文本 在数组中 有两个特定字节表示我需要存储到无符号 int 值中的数值 下面的代码解释了设置 char bytes bytes 2 bytes 0 0x0C For the sake

随机推荐

  • ListView 行标记 ala GMail

    我有兴趣创建一个 ListView 其中每一行都按照 GMail 3 0 中的方式进行标记 这会很好地分离左右 ListFragment 其他示例还包括 2 3 4 上的 Google 日历 例如颜色标记位于 ListView 的左侧 请参
  • 如何在带有 Boost Spirit 的 AST 中使用只有一个属性的类?

    我想使用 Boost Spirit 将文件解析为 AST 我的 AST 的根源是一个只有一个属性的类 typedef boost variant
  • 根据搜索条件查找列名和行名

    我有以下 Excel 电子表格 A B C D E F G 1 Q1 Q2 Q3 Q4 Search criteria 60 2 Asset 1 15 85 90 70 Column name Q4 3 Asset 2 40 80 45 6
  • Laravel getQueryString() 不带 &

    我正在尝试将包含部分 URL 的变量输出到我的页面上的 Javascript 中 当我这样做时 它会改变任何 into amp 这会破坏 URL 我尝试过使用str replace html entity decode htmlspecia
  • 如何使 C# Powershell Invoke 成员线程安全

    我有这项服务 当收到请求时 运行 powershell 命令并返回结果 这是调用者类代码 public class PowerShellScript public PowerShellScript public Object Invoke
  • 如何在面向 python 2.5.1 的项目目录中包含和使用 .eggs/pkg_resources

    我有 python egg 文件 它们存储在某些 py 代码的相对位置 问题是 我的目标是 python 2 5 1 计算机 这要求我的项目自包含在一个文件夹中 数十万台运行 Sugar 的 OLPC XO 8 2 1 版本笔记本电脑 这意
  • 将 Java Web 应用程序与 SAML SSO 集成

    我有一个 Restful Java Web 应用程序 将部署到许多不同的环境 在我的控制范围之外 这些环境将使用 SAML 2 0 SSO 解决方案 我的应用程序 我认为是 服务提供商 需要存储用户生成的状态 并使用内部业务逻辑来确定允许哪
  • 管理MapView的缓存

    我制作了一个基于 Google Maps API 的应用程序 问题是我的应用程序是为了在野外 没有网络的地方使用而设计的 因此 我想管理缓存 以确保在旅途中保存特定的图块并可用 我想在数据库中重定向它们 但任何方法都可以 目前 除了尝试重新
  • Facebook Javascript SDK:getLoginStatus 没有响应

    按照指示这一页 https developers facebook com docs javascript quickstart v2 5 我将 SDK 片段包含到我的页面中 但由于我没有任何 Facebook 应用程序 并且我只是尝试在我
  • Jest 和 Webpack - 意外的令牌导入

    我很难设置我的测试套件 我有一个 React Redux Webpack 项目 正在尝试添加 Jest 我可以运行测试 但是我无法import任何东西到我的测试文件中 例如 当尝试导入我的 redux 操作时 我收到以下错误 Users n
  • 如何在 Android 中处理来电后从之前的状态恢复 Activity?

    我正在创建从服务器下载 4 5 张图像并显示为图库的应用程序 在正常情况下工作正常 但是当有来电或设备处于睡眠模式时 我的活动从 onResume 之后开始加载数据 我无法从以前的活动状态加载数据 恢复活动 有什么解决办法吗 Thanks
  • 从文本块中提取电子邮件地址

    如何创建包含在文本块中的电子邮件地址数组 我试过了 addrs text scan map e e 1 1 但 毫不奇怪 它不能可靠地工作 对于一个 稍微 更好的正则表达式怎么样 b A Z0 9 A Z0 9 A Z 2 4 b 你可以在
  • 将 Python PuDB 调试器与 pytest 结合使用

    在我选择的测试库之前unittest 它与我最喜欢的调试器 PuDB 一起工作 不是PDB 使用 PuDB 与unittest 我粘贴import pudb pudb set trace 代码行之间 然后我执行了python m unitt
  • 使用直接显示从 DVD 抓取图像

    有人知道使用 DirectShow 和 C 从 DVD 抓取图像的方法吗 使用 DVD 渲染器时不支持样本采集器 并且如果我使用 GetCurrentImage VMR9 无窗口控件的一部分 它似乎不起作用 查看 directshow 示例
  • ASP.NET MVC 中 ViewModel 验证的最佳实践

    我在用DataAnnotations验证我的ViewModel在客户端jquery validate unobtrusive并在服务器端ASP NET MVC应用 不久前 我发现我可以这样编写验证 Required ErrorMessage
  • Apache Nutch 2.1 不同批次 ID(空)

    我使用 Apache Nutch 2 1 爬行了几个网站 爬行时 我在很多页面上看到以下消息 前任 跳绳http www domainname com news subcategory 111111 index html http www
  • 为什么我收到 Maven 错误:“无法确定资源 X 是否存在于 http://maven.glassfish.org/content/groups/glassfish”?

    每当我们执行我们的site在 Maven 中 我们会在控制台日志中看到一长串与依赖相关的错误 这些错误似乎是在构建的依赖关系报告创建部分期间生成的 所有错误似乎都是在根据资源检查资源时生成的http maven glassfish org
  • TableView 单元格中的 If 语句不起作用

    我正在从 plist 中调用数据 复制到文档 该数据的值为 0 或 1 具体取决于我是否想要选择复选框 cell m 文件中的代码如下 但我似乎无法让它改变是否选择复选框 主视图代码 import ffguideViewController
  • 如何使用jquery序列化进行文件上传

    所以我有一个表单 我使用 jquery 序列化函数通过 ajax 提交表单 serialized Forms serialize ajax type POST cache false url blah data serialized suc
  • 为什么将 mod 与 int64_t 操作数一起使用会使该函数慢 150%?

    The max rem函数计算最大余数 a 1 n a 1 n除以时离开a for n 1 2 3 The main calls max rem在每一个a from 3 to 999 完整代码 include