gpt4 book ai didi

fortran - OpenMP 和 MKL 线程

转载 作者:行者123 更新时间:2023-12-03 02:05:51 27 4
gpt4 key购买 nike

我有一个 Fortran 代码,它使用 MKL 中的 DGESVD 并使用 Intel 编译器在 8 个内核上运行。该代码通过 OpenMP 加速。我还知道 OpenMP 和 MKL 有自己的设置来设置线程数(omp_num_threadsmkl_num_threads)。我想知道最佳线程数。我是否应该在调用 LAPACK 例程之前设置 OMP_NUM_THREADS=1 ? OpenMP 线程数会影响 MKL 线程数吗?

最佳答案

MKL 还使用 OpenMP 作为其多线程驱动程序。这意味着 OpenMP 线程的数量确实会影响 MKL 线程的数量,但影响方式非常复杂。

首先,作为 OpenMP 代码,MKL 也由通常的 OpenMP 方法控制来设置线程数,例如OMP_NUM_THREADS 并调用 omp_set_num_threads。但它还提供了 MKL_NUM_THREADS 和 mkl_set_num_threads() 形式的覆盖配置机制。这允许用户代码和 MKL 例程中拥有不同数量的线程。

配置了所需的线程数后,还应该了解 MKL 在嵌套并行情况下的行为方式。也就是说,如果从用户代码中的事件并行区域内调用,MKL 默认情况下将以单线程运行。 MKL 提供了可以覆盖此行为的 MKL_DYNAMIC 开关,但它要求对用户代码使用与 MKL 相同的 OpenMP 编译器(请阅读 - 您必须使用 Intel 的编译器),因为不能保证两者之间的兼容性不同的 OpenMP 运行时。

一般来说,在调用 MKL 之前不需要将线程数设置为 1,因为这会使其成为单线程,除非通过显式配置来覆盖 MKL 线程数。当启用嵌套并行性时,从并行区域内部调用它时应该小心。

有关控制 MKL 中线程数量的更多信息,请参阅 MKL 的用户指南:

关于fortran - OpenMP 和 MKL 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com