回答有点取决于您的硬件和应用程序/工作负载的性质。您使用多节点集群(最典型)还是大型共享内存机器?假设您是集群用户,您将不得不使用 MPI 或 Fortran coarray 来实现(更有可能)分布式内存跨节点并行和节点间共享内存并行 (SMP)。
共享内存并行性可以使您的加速与节点上的内核数量成正比(使用 Xeon 时最高可达 32 倍),或者使用协处理器时甚至更高。分布式内存并行性可以为您提供与节点数量成比例的加速。如今,为了获得合理的性能,必须使用两种类型(或实际上所有 3 种类型)的并行性。你可能认为它像一个层次结构:1.MPI 或 coarray 在顶部,2.something 用于中间的共享内存线程,3.最内层的矢量化。
好吧,从您的问题来看,听起来您主要是在谈论 SMP 多核线程并行级别。这就是 -parallel 自动并行化的表现。不要指望自动标准杆有很大的魔力。如果您想获得更好的可扩展并行性,您必须尝试 fortran OpenMP 或 MPI-for-shared memory。在大多数情况下,我会推荐 OpenMP;它通常更容易编程和更高的性能。但。这取决于你,你真的应该考虑更多——考虑所有 3 个并行级别。如果您计划解决所有 3 个级别,那么最佳组合(因为您是一个快乐的 intel fortran 用户)可能是 1. MPI 用于 1 级 + 2. OpenMP 用于 SMP 级 + 3. AutoVectorization 由 OpenMP 4.0 pragma simd 引导在 3 级。我不是 coarray 方面的专家,但它可能是 1.MPI 的不错替代品。
如果您不处理经典的集群硬件,我的回答确实意义不大。