如何同时使用 MKL 的并行和串行版本?

Posted

技术标签:

【中文标题】如何同时使用 MKL 的并行和串行版本?【英文标题】:How to use simultaneous of parallel and serial version of MKL? 【发布时间】:2013-07-10 06:09:51 【问题描述】:

MKL 的串行和并行版本在两个不同的库中实现。库的功能具有相同的名称。所以你不能直接加载这两个库并分别调用每个函数,而不会在编译时发生冲突。

我想开发一个函数的包装器(例如 OpenGL 扩展牧马人库 (GLEW)),它将为每个相同的函数提供相应的扩展,并且扩展的函数将从适当的库中加载并行或顺序函数. 这是一个好主意吗?你能建议点别的吗?

非常感谢。

【问题讨论】:

【参考方案1】:

我建议你始终使用 MKL 的并行版本,并控制 MKL 函数使用的#thread。

MKL 提供void mkl_set_num_threads( int nt ) 更改#thread MKL 函数可以随时使用。

设置为1时,等于序列号。

【讨论】:

这适用于现在,但我不是很满意。我有一个进程,它已经在高级别并行化。在低级别(在进程线程中)我调用 MKL 库的函数(在串行模式下)。我用两种不同的实现做了同样的例子,一种是单个 CPU 上的并行 MKL,另一种是串行 MKL。两种实现的比较在时间上存在差异,串行实现更快。这是正常的,因为由于线程库的控制功能,并行 MKL 会产生开销...

以上是关于如何同时使用 MKL 的并行和串行版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 omp 并行中使特定部件串行?

将 gfortran 与英特尔 MKL 链接

并行 fortran 程序将在某个时间休眠

并行代码比串行代码慢(值函数迭代示例)

串行输入输出和并行输入输出的区别解析

Quartz定时任务的并行与串行