相关疑难解决方法(0)

设计建议:llvm多个运行时上下文

我的应用程序需要在同一个(单线程)进程中运行许多单独的上下文.他们都共享一个LLVMContext.

该过程将运行许多上下文(在线程意义上); 也就是说,每个基于boost::context(仍在库,预先批准的库)的延续对象中运行一个函数,这意味着每个上下文都可以产生,但它们基本上在相同的单线程进程中运行.每个应该基本上独立于另一个运行,更重要的是,每个中的编译错误不应该影响其他的执行.

这些上下文中的每一个都将动态调用跨多个转换单元(TU)的代码.一些翻译单元可以在许多这些上下文中共享.新的或修改的翻译单元中的编译错误不应影响其他上下文.

澄清编辑: 例如,TU A可能在两个上下文之间共享,上下文X和Y.仅仅为了拥有完整的图片,假设X也将运行来自其他翻译单元的代码,即B和D,同时Y也会有C.在某些时候,X决定对A进行修改,因此它创建一个新的TU A.1,它是A的副本,并在那里应用修改,因此这些不会影响上下文Y.希望这个例子清楚说明要求.

我最初的冲动是llvm::Module为每个上下文关联一个,但由于它在LLVM中未定义,在处于中间编译状态的模块中会发生什么,我决定llvm::Module为每个翻译单元添加一个(因为这个原因,请参阅此问题),以及副本我之前解释过的写入策略,当翻译单元的修改本地发生在上下文时,以避免修改影响其他上下文.

我遇到的主要双重问题是:

  • 如何将上下文中的不同模块链接在一起,以便将它们作为统一库调用?我正在使用C++ api.我特别警惕这个影响这个功能的讨厌的旧bug.如果我将所有模块的所有权转移到JIT,这个bug会不会影响我ExecutionEngine::addModule()

  • 一旦翻译单元上的修改强制更新其中一个模块,需要执行哪些步骤?我是否需要删除/删除旧模块对象并创建一个新模块?有没有我读过的回收政策?

我对此的第二个问题是:

  • 有多少ExecutionEngine我需要?整个申请一个?每个上下文一个?每个模块一个?

希望问题的范围不要过于庞大.

c++ llvm

62
推荐指数
1
解决办法
1887
查看次数

标签 统计

c++ ×1

llvm ×1