c++ - C/C++ 的 JIT 优化器

标签 c++ c optimization branch jit

我在阅读有关 JIT 相对于预编译的优势的文章,其中提到的其中一项是 JIT 可以根据实际运行时数据调整分支预测。自从我在大学里编写编译器以来已经有很长一段时间了,但在我看来,在大多数情况下(没有明确的 goto),预编译代码也可以实现类似的东西。

考虑以下代码:

   test x
   jne L2:
L1: ...
   jmp L3:
L2: ...
L3:

如果我们有一些运行时工具可以查看“jne L2”为真的次数,它可以物理交换 L1: block 和 L2: block 中的所有指令。当然,它必须知道在交换期间两个 block 内都没有线程,但这些都是细节...

   test x
   jeq L1:
L2: ...
   jmp L3:
L1: ...
L3:

我知道当程序代码加载到只读内存中时也存在问题等,但这是一个想法。

所以我的问题是,这样的 JIT 优化对于 C/C++ 是否可行,或者我是否遗漏了一些无法做到这一点的根本原因?是否有针对 C/C++ 的 JIT 优化器?

最佳答案

据我所知,没有适用于 C++ 的 JIT 编译器;但是,GCC 确实支持反馈定向优化 (FDO),它可以使用运行时分析来优化分支预测等。

参见 GCC options以“-fprofile”开头(提示:“-fprofile-use”使用生成的运行时配置文件来执行优化,而“-fprofile-generate”用于生成运行时配置文件)。

关于c++ - C/C++ 的 JIT 优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376751/

相关文章:

Java抽象方法: is this bad practice?

c++ - 在同一项目中混合使用 C++ 风格

c++ - 从 'QTableWidgetItem* const' 到 'QChar' 的转换......或者 QString......是不明确的

c - 在宏中使用枚举整数值来格式化字符串

c - C 中数组的索引操作

java - Java 中的超大型斐波那契数列

go - 如何分配内存以映射指向golang中的 slice

c++ - malloc - 运行时内存指针类型分配

c++ - 是否有独立于操作系统的方式来轮询 TOTAL 和/或 USED 视频内存?

c - 如何从C函数中返回字符数组