簡體   English   中英

如何找出是什么引入了 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 的舊電腦,在調試器中運行你的應用程序,它會因無效指令運行時錯誤而崩潰,並會陷入調試器。 通過這種方式,您將立即找出編譯為該指令的代碼。

另一種更難的方法是編寫一個 C# 控制台應用程序,反匯編已編譯的 DLL 或 EXE,並搜索 AVX 指令。 你需要Gee.External.Capstone nuget 包來反匯編, PeNet包來解析成部分。 還有這段代碼要反匯編 disassembleStreamEx方法將返回指令流。 搜索 X86InstructionGroup.AVX 或 X86InstructionGroup.AVX2 指令,打印地址,然后使用例如 WinDBG + PDB 文件將地址轉換為源代碼位置。

更新:在此之前,請在代碼庫中搜索包含_mm256_*.asm文件的文件。 如果你很幸運,你將不必做任何其他事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM