在C++程序中使用_asm代码会有所不同吗?
Does using _asm code in a C++ program makes the difference
我正在开发一个必须非常非常快的程序。
我将在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++代码简化为您编译的目标机器的相当简洁的汇编指令。
我想说的是,对于大多数程序来说,从纯粹的性能角度来看,这是不值得投资的。
这可能是一个很好的学习机会,可以更深入地了解底层硬件!
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么括号在这个简单的代码中会有所不同
- 为什么对于几乎相同的代码,矢量化的行为会有所不同
- 为什么如果使用优化(-O2、-O3),此代码的行为会有所不同
- 在C++程序中使用_asm代码会有所不同吗?