如何找出引入AVX标志的内容
How to find out what introduces AVX flag
我有一个相当大的x64 c ++程序,它是用Visual Studio编译的。我们有两种编译方式 - 一种是使用sln解决方案文件(从IDE或通过msbuild(,另一种是通过VS命令提示符中的Makefile(然后在内部使用Visual Studio的cl.exe和link.exe(。
不知何故,我遇到了通过 Makefile 构建的二进制构建在启用/AVX 指令的情况下生成可执行文件的情况,我不希望这样,所以我想找出如何摆脱它。
我尝试在没有任何参数的情况下编译和链接它(尤其是没有/arch:AVX(。我希望我在 sln 和 Makefile 中编译和链接相同的源代码和库。
找出AVX来源的简单方法是什么?项目包括数十个 h/cpp 文件、大约 40 个自己的库、10 个 Windows 库。你会怎么做?
简单的方法是,找到一台没有AVX的旧PC,在调试器中运行您的应用程序,它将崩溃并出现无效的指令运行时错误,并将捕获到调试器。这样,您将立即找到编译到该指令中的代码。
另一种更难的方法是编写一个 C# 控制台应用,用于反汇编编译的 DLL 或 EXE,并搜索 AVX 指令。你需要Gee.External.Capstone
nuget 包来反汇编,PeNet
包来分析部分。还有这个代码要反汇编。disassembleStreamEx
方法将返回指令流。搜索 X86Instruction Group.AVX 或 X86Instruction Group.AVX2 指令,打印地址,然后使用 WinDBG + PDB 文件将地址转换为源代码位置。
更新:在此之前,请在代码库中搜索包含_mm256_
和*.asm
的文件。如果你幸运的话,你不必做任何其他事情。
- 用于AVX的ln(x)的实现,m256
- 即使使用调试编译标志,表达式也是"optimized out"
- 在 CMake 中为每个目标设置编译器/链接器标志
- 在AVX通道中混洗的最佳方式
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- 在轮班操作后使用携带标志
- 如何找出引入AVX标志的内容
- I2C 文件描述符上的 I2C 总线可写/可读标志
- C ++是否有C ++ 17 OSX 10.13.6的标志
- 每次使用带有LOCK_EX标志的LOCK_NB时,相同的程序/进程都会获取锁
- AVX 指令中寄存器和指针之间的客观差异
- CMake 3.5 中的链接器标志位置
- 如何使用 gnu gcc 标志 -mpc32、-mpc64 和 -mpc80?
- 在 CMake 中添加全局编译标志
- 复制 -nan 表示浮点数,AVX __m256 复制后显示 0
- -Wlifetime 标志的目的是什么?
- Visual Studio 19-17 库兼容性根据 GL 标志
- 如何确定我的处理器有多少个 AVX 寄存器?
- 标志 |= f == s[i],这个语句会做什么?
- Visual Studio 中是否有来自代码块的编译器标志的类似物?