【问题标题】:Does OpenMP hints bypass the vectorisation legality check in llvmOpenMP 提示是否绕过 llvm 中的矢量化合法性检查
【发布时间】:2018-01-19 08:30:24
【问题描述】:

我目前正在研究如何在 llvm 中实际识别“#pragma omp for simd”。据我所知,clang 将解析它并在 IR 中设置元数据以指示此力矢量化提示,随后的优化通道将读取它并将标记的循环矢量化。因此,即使编译器认为这样做可能不安全,循环也应该向量化?

所以我的假设是,这种力矢量化提示应该绕过矢量化合法性和成本模型检查。但是,在 LoopVectorize.cpp 中,我看不到这是如何完成的。所有循环都将被发送到 LVL.canVectorize() 的合法性检查,如果此条件不符合,它会直接返回 false 而不实际到达矢量化阶段。

我对使用力矢量化提示的假设有什么问题吗?

提前致谢, T

【问题讨论】:

  • 可能是一个有趣的问题。不过,如果能看到一些代码就好了。

标签: clang llvm openmp vectorization


【解决方案1】:

虽然 llvm 已经公布了在实现 omp simd 方面超越 gcc 的目标,但我自己并没有看到太多。在过去的 2 年里,我没有看到他们的高级文档有任何更新。虽然它可能被粗略地描述为“如果你知道如何进行矢量化”,但我认为没有人认为它会覆盖已证明的依赖关系。如果它的行为类似于挂起成本模型并忽略可能但未经证实的依赖关系的自动矢量化,我不会感到惊讶。

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 1970-01-01
    • 2013-11-22
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多