0

我正在开发一个必须非常非常快的程序。

我会用 C++ 来做,因为它必须做很多逻辑运算,比如 XOR、AND 甚至计算二进制数中 1 的数量,我认为_asm{}在代码的某些部分使用它是个好主意更快地完成这些操作。它们有时会被执行数百万次。

但我不知道它是否真的会有所作为并且值得付出努力。

请如果有人在我之前尝试过,我将非常感谢您对该主题的了解。

非常感谢。

4

4 回答 4

4

当处理器时钟为每秒几十亿次时,一百万次操作通常不是什么大问题。

所以用简单的 C/C++ 编写代码。测试一下。剖析它。如果它真的太慢并且配置文件显示一个热点,则将该点的优化调到最大并再次测试。如果还是太慢,反汇编优化后的代码,看看你觉得能不能比编译器做得更好。如果您认为是这样,请继续插入您的_asm {}. 准备好让这个精心制作的代码运行得更慢。它发生了很多。如果您确实实现了所需的加速,请将汇编器放入#ifdefs 中,以便在发布下一个处理器版本时可以将其卡住。阅读:汇编代码的编写和维护成本非常高,几乎总是一个坏主意。

于 2012-07-03T02:00:46.897 回答
1

根据我的经验,只有当您可以使用 SSE 功能,或者确实是诸如 popcount 或 crc 之类的特定新指令时,做一个小汇编程序才真正有帮助

从我提升到不可读的项目;

normal code to ASM =  10% faster, 50 times more unreadable code
suited code to SSE = 500% faster, 75 times more unreadable code

所以我建议先做你的应用程序,找出它实际上慢的地方,只有当所有其他方法都失败时才尝试一些 asm/sse。

于 2012-07-03T12:36:02.260 回答
0

这不是一个好主意。它不会显着提高速度,但会扼杀您直接为 X64 处理器编译的能力,这损害您的性能。如果您真的想使用 Asm,请查看支持 x86/x64 的Asmjit 。

于 2012-07-03T01:50:18.567 回答
0

现代编译器会将您的 C++ 代码简化为针对您编译它的目标机器的相当简洁的汇编指令。

我想说,对于大多数程序来说,从纯粹的性能角度来看,这不值得投资。

这可能是一个很好的学习机会,可以更深入地了解底层硬件!

于 2012-07-03T01:52:18.330 回答