总结:我想利用编译器优化和处理器指令集,但仍然有一个可移植的应用程序(在不同的处理器上运行)。通常我确实可以编译 5 次并让用户选择正确的运行。
我的问题是:如何实现自动化,以便在运行时检测处理器并执行正确的可执行文件,而无需用户选择它?
我有一个包含大量低级数学计算的应用程序。这些计算通常会运行很长时间。
我想利用尽可能多的优化,最好也利用(并非总是支持)指令集。另一方面,我希望我的应用程序是可移植且易于使用的(所以我不想编译 5 个不同的版本并让用户选择)。
是否有可能编译我的代码的 5 个不同版本并在执行时动态运行最优化的版本?有 5 个不同的版本,我的意思是不同的指令集和不同的处理器优化。
我不关心应用程序的大小。
目前我在 Linux 上使用 gcc(我的代码是 C++),但我也对 Intel 编译器和 MinGW 感兴趣。编译到 Windows 的编译器。
可执行文件不必能够在不同的操作系统上运行,但理想情况下,自动选择 32 位和 64 位也是可能的。
编辑:请给出明确的指示,最好是小代码示例或解释链接。从我的角度来看,我需要一个 super 通用的解决方案,它适用于我以后的任何随机 C++ 项目。
编辑 我将赏金分配给了 ShuggyCoUk,他有很多指针需要注意。我本来希望将其拆分为多个答案,但这是不可能的。我还没有实现这个,所以问题仍然是“开放的”!请仍然添加和/或改进答案,即使不再提供赏金。
谢谢大家!
最佳答案
是的,这是可能的。将所有不同优化的版本编译为具有公共(public)入口点的不同动态库,并提供加载和运行的可执行 stub 运行时正确的库,通过入口点,取决于配置文件或其他信息。
关于c++ - 针对不同的目标架构进行编译和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296185/