【发布时间】:2016-10-02 15:33:44
【问题描述】:
我想将 C++ 程序编译为中间代码。然后,我想用当前处理器的所有资源编译中间代码。
第一步是使用优化 (-O2) 编译 C++ 程序,运行链接器并完成大部分编译过程。此步骤必须独立于操作系统和架构。
第二步是针对当前计算机的操作系统和处理器编译第一步的结果,没有原始源代码,带有处理器的优化和特殊指令(-march=native)。第二步应该很快并且对软件的要求最少。
我可以吗?怎么做?
编辑:
我想这样做,因为我想分发一个独立于平台的程序,它可以使用处理器的所有资源,而不需要原始源代码,而不是为每个平台和操作系统分发一个编译。如果第二步又快又简单就好了。
相同架构的处理器可能具有不同的功能。 X86 处理器可能有 SSE1、SSE2 或其他,它们可以是 32 位或 64 位。如果我为通用 X86 编译,它将缺少 SSE 优化。多年后,处理器将具有新功能,并且需要针对新处理器编译程序。
【问题讨论】:
-
听起来像是 clang/LLVM 的工作?
-
我们需要更多的输入来提供有用的建议。我们在谈论哪些处理器和操作系统?为什么要延迟最后一个编译步骤?
-
如果你想发布平台无关的程序,看看java虚拟机。如果要支持不同版本的 x86,请为每个版本编译二进制文件。 (或者,您可以只提供对时间最关键的函数的不同版本。)今天为明天的 x86 扩展提供代码是不可能的。您将不得不为此更新您的代码。如果您关心您未来的程序性能,请忘记 sse,并确保您的代码可以使用尽可能多的处理器内核。
标签: c++ optimization compiler-construction cross-platform intermediate-language