首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我改变llvmlite中的优化级别时没有区别?

为什么当我改变llvmlite中的优化级别时没有区别?
EN

Stack Overflow用户
提问于 2017-07-18 23:50:28
回答 1查看 163关注 0票数 0

我正在尝试在我自己的程序中使用llvmlite的优化过程。我为我的代码定义了以下函数作为pass函数:

代码语言:javascript
复制
def create_pass_manager_builder(opt=3, loop_vectorize=False, slp_vectorize=False):
    pmb = llvm.create_pass_manager_builder()
    pmb.opt_level = opt
    pmb.loop_vectorize = loop_vectorize
    pmb.populate = populate
    pmb.add_dead_code_elimination_pass = add_dead_code_elimination_pass
    pmb.slp_vectorize = slp_vectorize
    pmb.inlining_threshold = _inlining_threshold(opt)
    return pmb

我试着用下面的代码运行它:

代码语言:javascript
复制
module_ref = llvm1.parse_assembly(str(module))
pmb = llvm.create_pass_manager_builder()
pmb.opt_level = 3
pm = llvm.create_module_pass_manager()
pmb.populate(pm)
pm.run(module_ref)

有了这个,我确实对我的代码进行了一些优化。但是,当我将优化级别从3更改为2或0时,对optimization.How没有区别。我可以更改优化级别并查看差异吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 16:08:16

优化本身并不使用优化级别。这取决于你如何构建pass管理器,或者在本例中如何填充函数来完成它。深入一点,我发现在你的例子中,当你只使用模块传递管理器时,你的填充函数将调用这个http://llvm.org/doxygen/PassManagerBuilder_8cpp_source.html#l00402。有一些对optLevel的引用,你可以检查依赖于它的优化是否真的适用于你的代码。如果您优化的代码没有经过这些优化,那么您将看不到任何区别。

另一个问题是,我不确定您是否调用了正确的create_pass_manager_builder函数,该函数实际上在llvmlite中有一些默认定义,并将opt级别固定为2。

代码语言:javascript
复制
pmb = create_pass_manager_builder()

而不是

代码语言:javascript
复制
pmb = llvm.create_pass_manager_builder()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45171678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档