如何同时使用 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 的并行和串行版本?的主要内容,如果未能解决你的问题,请参考以下文章