提问人:MK-3PP 提问时间:11/14/2023 最后编辑:Mark RotteveelMK-3PP 更新时间:11/16/2023 访问量:78
在内部链接使用不同 OpenMP 运行时的第三方库是否安全?[关闭]
Is it safe to link 3rd party libraries that use different OpenMP runtimes internally? [closed]
问:
我们的 C++ 应用程序链接了多个第三方库。我们无法修改这些。有些使用英特尔的,有些则Microsoft的。libiomp5md.dll
vcomp140.dll
我最近更新了其中一个库,它似乎已经通过使用 Visual C++ 中的新编译器开关切换到 LLVM 的 OpenMP 运行时,从而链接到 .-openmp:llvm
libomp140.x86_64.dll
自从切换到 LLVM 的 OpenMP 运行时后,当启动我们的应用程序时,我得到了一个控制台窗口,说明:
OMP:错误 #15:正在初始化libomp140.x86_64.dll,但已找到 libiomp5md.dll 已初始化。
OMP:提示 这意味着 OpenMP 运行时的多个副本具有 已链接到程序中。这很危险,因为它会降解 性能或导致不正确的结果。最好的办法是 确保只有单个 OpenMP 运行时链接到进程中, 例如,避免在任何库中静态链接 OpenMP 运行时。 作为不安全、不受支持、未记录的解决方法,您可以将 环境变量 KMP_DUPLICATE_LIB_OK=TRUE 以允许程序 继续执行,但这可能会导致崩溃或静默产生 结果不正确。有关详细信息,请参阅 http://openmp.llvm.org/
但是,我在 http://openmp.llvm.org/ 上没有找到有关该主题的信息。
那么,假设应用程序使用使用不同 OpenMP 运行时的独立第三方库,这是否是一个问题?
其他上下文:
- 如果我们最终每个 OpenMP 运行时都有一个线程池,那很好。他们会时不时地为硬件而争吵,没什么大不了的。
- 这个警告对我来说是新的,因为 LLVM OpenMP 运行时通过更新的第三方库删除了。在混合使用英特尔和Microsoft运行时时,我们没有看到这样的警告。这并不意味着这样做一开始就是安全的。也许Microsoft的OpenMP运行时从未检测到该冲突,或者没有发出明显的警告。
答: 暂无答案
评论