常见 C++ 优化技术列表 [关闭]

2024-01-29

我可以提供一份常见 C++ 优化实践的详细列表吗?

我所说的优化是指您必须修改源代码才能更快地运行程序,而不是更改编译器设置。


我会回应其他人所说的:更好的算法将在性能提升方面获胜。

也就是说,我从事图像处理工作,作为一个问题领域可能会更棘手。例如,很多年前我有一段代码,如下所示:

void FlipBuffer(unsigned char *start, unsigned char *end)
{
    unsigned char temp;

    while (start <= end) {
        temp = _bitRev[*start];
        *start++ = _bitRev[*end];
        *end-- = temp;
    }
 }

它将 1 位帧缓冲区旋转 180 度。 _bitRev 是一个 256 字节的反转位表。这段代码几乎是你能得到的最严格的。它在 8MHz 68K 激光打印机控制器上运行,打印一张 legal 尺寸的纸张大约需要 2.5 秒。为了不向您透露细节,客户无法忍受 2.5 秒。解决方案是与此相同的算法。不同之处在于

  1. 我使用了 128K 表并按字而不是字节进行操作(68K 对字更满意)
  2. 我使用达夫的设备将循环展开到适合短分支的程度
  3. 我进行了优化以跳过空白单词
  4. 我最终在汇编中重写了它,以利用 sobgtr 指令(减一并分支到更大),并在正确的位置具有“自由”后增量和预减量。

所以 5x:没有算法改变。

关键是您还需要了解您的问题域以及瓶颈的含义。在图像处理中,算法仍然是王道,但如果您的循环正在执行额外的工作,请将其工作量乘以几百万,这就是您付出的代价。

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

常见 C++ 优化技术列表 [关闭] 的相关文章

  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • 如何让 Swagger 插件在自托管服务堆栈中工作

    我已经用 github 上提供的示例重新提出了这个问题 并为任何想要自己运行代码的人提供了一个下拉框下载链接 Swagger 无法在自托管 ServiceStack 服务上工作 https stackoverflow com questio
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 如何使用 LINQ2SQL 连接两个不同上下文的表?

    我的应用程序中有 2 个数据上下文 不同的数据库 并且需要能够通过上下文 B 中的表的右连接来查询上下文 A 中的表 我该如何在 LINQ2SQL 中执行此操作 Why 我们正在使用 SaaS 产品来跟踪我们的时间 项目等 并希望向该产品发
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • 从 USB 可移动存储读取文件

    在我的应用程序中 我想从 USB 可移动存储读取文件 我有一个 txt 我想阅读它 void read UsbManager manager UsbManager getSystemService Context USB SERVICE H
  • 我们如何处理快速增长得非常大的交集表?

    例如 我们有表A和表B 它们之间存在多对多关系 表 C 是一个交集表 存储 A id 和 B id 以及表示两者之间关系的值 或者作为一个具体的例子 想象一下 stackexchange 有一个用户帐户 一个论坛和一个业力分数 或者 一个学
  • 如何在 1.6 中禁用 JTable 中的所有排序代码

    我有一个 JTable 扩展 自 Java 1 3 1 4 以来一直在项目中使用 它提供了列重新排序和通过单击列进行排序等功能 我们正在升级到 Java 1 6 新的 JTable 会停止旧的排序代码的工作 要使所有内容都适合新的 JTab
  • 使用 DirectShow.NET 的音频同步问题

    我已经在 DirectShow NET 论坛上启动了一个主题 这里是链接http sourceforge net projects directshownet forums forum 460697 topic 5194414 index
  • mat-paginator 更改 mat-paginator-range-label 的放置

    我有一个简单的mat table with mat paginator By default design it looks like this 我想更改范围标签的放置并将其放在导航按钮之间 如下所示 基本上 我需要移动div mat pa
  • 如果执行的 JavaScript 进入无限循环,Android WebView 将进入不可恢复状态

    如果执行的 JavaScript 代码陷入无限循环 Android WebView 小部件似乎会进入不可恢复的状态 例如这个网页就会导致这个问题 Failure Test 只需使用 WebView 在任何 Android 浏览器中输入以下
  • R 连接到 sqlite

    我无法从 R 连接到 sqlite Sqlite3 安装在 Linux 服务器上并且能够创建 修改 但 R 未连接 library dplyr library RSQLite gt db lt src sqlite my db sqlite
  • 后台线程上的领域通知令牌

    我试图在后台线程上获取领域数据并添加通知块 iOS Swift 基本示例 func initNotificationToken DispatchQueue global qos background async let realm try
  • React-leaflet:添加 TopoJSON 层

    我刚刚开始使用 React leaflet 库并获得了一个要加载 geoJSON 层的地图 但是我想使用 TopoJSON 层 我知道这样的纯传单是可能的 https gist github com rclark 5779673 https
  • Visual Studio 解决方案中建议的项目数量

    我们正在开始开发新的应用程序 其中包括大约 12 名开发人员在 MS Visual Studio 中使用 C 开发的 30 50 个项目 我正在致力于应用程序模块的组件化 以支持架构并实现并行工作 我们争论 我们应该有多少种解决方案 有人声
  • ORM 和层

    很抱歉这一点在这里到处都是 但我感觉就像一只狗在追我的尾巴 此时我很困惑 我试图找到开发 3 层解决方案 IL BL DL 的最简洁方法 其中 DL 使用 ORM 来抽象对数据库的访问 在我见过的所有地方 人们都使用 LinqToSQL 或
  • Java 游戏引擎 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我最近一直在研究游戏开发 我的第一个编程语言是 Java 在玩过许多用 C 开发的令人惊叹的游戏后 我想知道为什么 Java 在游戏行
  • 如何在Github上托管gem并使用它?

    我已将私有 gem 文件添加到新存储库中here https github com praveenitmec testgem但是当我尝试将它添加到我的 gem 文件中时 gem test gem git gt https github co
  • jQuery 禁用链接

    任何人都知道如何禁用 jquery 中的链接而不使用return false 具体来说 我想要做的是禁用某个项目的链接 使用 jquery 执行单击它会触发一些内容 然后重新启用该链接 以便再次单击它时它会默认工作 谢谢 戴夫 UPDATE
  • 有关 python ImportError 的更多信息,没有命名的模块

    遵循建议here https stackoverflow com questions 338768 python importerror no module named 我的包 或包含我的模块的目录 位于 C Python34 Lib si
  • 如何从 C# 导入和使用非托管 C++ 类?

    我有一个本机 C dll 一些头文件和导入库 有没有办法在 C 中实例化 dll 中定义的对象 我知道的两种方法是 将 C 代码包装到 COM 中 使用 DLLImport 和外部 C 函数 C CLI 是您的朋友 不过 您会遇到一个问题
  • Python 日志记录:传播低于当前记录器级别的消息

    我想记录特定记录器名称 特定级别及更高级别的消息 例如INFO及以上 到特定的日志处理程序 例如文件处理程序 同时仍然将所有日志消息发送到控制台 Python 的版本是 2 7 到目前为止我尝试的是创建两个记录器 根记录器 命名记录器 对于
  • 忽略来自 Google Closure 中一个文件的编译器警告

    我在一个相当大的 Closure 项目中使用外部库 Phonegap 不幸的是 Phonegap 生成了大量编译器警告 所有 危险使用 这足以让我在编译器输出中搜索有关我自己的代码的警告变得非常烦人 有没有一种方法可以仅消除一个文件中的警告
  • 每当使用除法时,C 程序中的计算结果总是为 0

    我使用两个不同的变量来除以来自的变量int and double 当我使用类似以下内容时 这些工作正常 int cost cost 40 cost cost 400 20 2 为此 该方法工作正常 我得到了正确的结果 即4 但是当我使用变量
  • 常见 C++ 优化技术列表 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的