前言
我似乎对 Intels MKL 用户指南给出的在线程应用程序中使用 MKL 的最佳实践建议缺乏基本的了解。那么让我们一起来澄清一下。
措辞和问题
特别是有两种不同的方法来优化数字代码。OpenMP 或消息传递接口 (MPI) - 以及两者的组合。在我看来,MKL 在内部开箱即用地解决了 OpenMP。英特尔建议不要将 OpenMP 并行化与借助 MPI 的手动并行化(例如,更高级别的域分解)相结合(参见此处)。
我现在对在具有许多物理计算单元的多处理器环境(读取集群)中做什么感到困惑。我对这个话题的第一种方法是:
- 使用 MPI,对问题进行域分解,将小块分配到集群中的所有 CPU,并在
MKL without OpenMP那里使用顺序 MKL (= )。
我特别问自己,当仅依赖MKL with OpenMP集群中的多线程 MKL (= ) 时,如何以不同的方式完成:如果矩阵向量积中的一个矩阵太大而无法放入一个计算节点的内存中怎么办?它会被 MKL 自动分布在所有计算节点上吗?