在C++程序中使用_asm代码会有所不同吗?

Does using _asm code in a C++ program makes the difference

本文关键字:代码 有所不同 asm 程序 C++      更新时间:2023-10-16

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

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

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

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

多谢。

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

因此,用简单的 C/C++ 编写代码。 测试它。 剖析它。 如果确实太慢并且配置文件显示热点,请将该点的优化调到最大值,然后再次测试。 如果它仍然太慢,请反汇编优化的代码,看看您是否认为您可以比编译器做得更好。 如果您这么认为,请继续插入您的_asm {}。 准备好让这个精心手工制作的代码运行得更慢。这种情况经常发生。 如果您确实实现了所需的加速,请将汇编程序置于 #ifdef 秒中,以便在发出下一个处理器版本时可以将其丢弃。阅读:汇编代码的编写和维护成本如此之高,以至于它几乎总是一个坏主意。

根据我的经验,只有当您可以使用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。

这不是

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

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

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

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