c++ - 针对不同的目标架构进行编译和优化

标签 c++ optimization gcc compilation

总结:我想利用编译器优化和处理器指令集,但仍然有一个可移植的应用程序(在不同的处理器上运行)。通常我确实可以编译 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/

相关文章:

c++ - CMake 在创建简单项目时无法在 Windows 中找到 SFML 目录

c++ - 为什么 std::ranges 算法缺少并行重载(采用执行策略参数)?

c++ - 除了初始化列表之外,是否可以在构造函数体中进行一些计算

mysql - (为什么?)Greatest+Coalesce 方式比使用 or 的单个选择更快

c++ - 添加未使用的内存时性能下降

c - 靶心覆盖率,代码覆盖率为 0%

c++ - 可以定义一个完全通用的 swap() 函数吗?

c++ - 我们如何确认内在矩阵是正确的?

c++ - 如何让 GCC 使用非平凡的 const/dest 实例化一个类实例?

c++ - 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值