【问题标题】:How can I JIT compile code to run across OSes and for bare metal? [closed]我如何 JIT 编译代码以跨操作系统和裸机运行? [关闭]
【发布时间】:2020-12-29 10:50:44
【问题描述】:

我希望在跨平台的面向用户的应用程序中进行一些实时数据处理,我需要对动态生成的代码进行某种即时或即时编译来获得我需要的性能。我想使用同一个库为裸机微控制器生成代码,但微控制器不需要 JIT 任何东西。可嵌入动态代码执行的最佳解决方案是什么?

  • 我查看了嵌入 Clang+LLVM 并即时编译生成的 C 代码,但无法让 Clang 从内存中编译 C。
  • 通过wasmer 的WebAssembly 比LLVM 更容易使用,但我相信它需要系统库和可执行内存。
  • 我将其嵌入到 C++ 中,但嵌入式编译器可以使用任何具有 C API 的语言编写。
  • 性能很重要。我希望在不占用桌面 CPU 时间超过 ~10% 的情况下进行实时处理,并且显然不会使我的微控制器过载。
  • 如果需要,我可以选择可以运行嵌入式 Linux 的微控制器,只要它几乎可以立即启动。

【问题讨论】:

  • 如果是微控制器,它不会运行 linux。不完全/真的。
  • 我认为你混淆了 clang/llvm 开始做什么以及它真正能做什么。
  • 有一些成熟的 Lisp-2 实现可以动态编译到目标汇编器。也许这会满足您的要求。
  • 动态生成代码以实时编译,比通过一组预编译、优化的算法进行预编译或 if-then-elsing 的未完美优化代码要慢。除非您大量重用动态生成的代码,否则一代会大量使用这一代,这使得它不是动态的。
  • 我需要生成一个函数并在紧密循环中运行数千百万次。缓慢的编译时间是可以接受的。

标签: embedded llvm code-generation jit webassembly


【解决方案1】:

我认为使用 C++ API 生成和运行 LLVM IR 将是最好的解决方案,除非提供其他选项。虽然代码生成可能是低级的,但它支持所有相关平台,可以交叉编译,并且具有卓越的性能。

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2015-05-06
    • 2012-08-02
    • 2015-06-21
    • 2018-05-17
    • 2022-10-15
    • 2015-02-22
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多