gpt4 book ai didi

c++ - 选择并行化方案要考虑什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:24 24 4
gpt4 key购买 nike

我正在使用 C++ 开发一些代码,用于我在计算动力学方面的研究。我的代码求解稀疏矩阵和密集矩阵,生成网格,并在最琐碎的意义上执行类似的操作。我需要并行化我的代码以减少计算时间,并为此使用了 OpenMP。

但在仔细查看市售代码后,如 ANSYS CFX,我发现该软件中使用的并行化方案是 MPICH2,它是 MPI 的一种实现。

所以你有很多并行化工具/API:

  • OpenMP
  • 理工学院
  • 英特尔线程构建模块
  • 线程
  • 微软PPL

我使用了其中的一些工具,并设法在我的本地计算机上使用每个工具获得 100% 的 CPU 使用率。

我不知道在选择合适的并行化工具时应该注意什么标准。什么样的应用程序需要哪种工具?以上任何一项都可以用于研究目的吗?其中哪些主要用于商业软件?

最佳答案

对于许多此类问题,没有真正明确的答案。你真的不能说什么更好,因为答案总是“视情况而定”。关于您在做什么、您的代码是如何编写的、您的可移植性要求是什么等等。

按照您的列表:

  • OpenMP : 非常标准,我发现它真的易于使用。即使在编写原始代码时没有考虑到并行化,这个库也使逐步方法变得非常容易。我认为它是并行计算的一个很好的切入点,因为它可能让一切变得简单,但它很难调试,性能有限,而且它只是使代码并行(它缺乏并行算法、结构、原语,你不能跨网络完成工作)。
  • Message Passing Interface :从我的角度来看,基于此标准的库最适合跨集群进行大型计算。如果您的计算机很少并且想进行并行计算,那么这是一个不错的选择,众所周知且稳定。这不是(在我看来)本地 并行化的解决方案。如果您正在寻找一种广为人知的广泛使用的网格计算标准,那么 MPI 非常适合您。
  • Intel Threading Building Blocks :这是一个 C++ 库,用于统一跨不同环境(pthreads 或 Windows 的线程模型)的多线程接口(interface)。如果您使用这样的库,您可能需要跨编译器和环境进行移植。此外,使用这个库不会限制你,所以它可以很好地与其他东西(例如 MPI)集成。您应该看看这个库,看看您是否喜欢它,它是一个很好的选择,具有良好的设计、良好的文档记录和广泛的使用。
  • Microsoft Parallel Patterns Library : 这是一个非常大的图书馆。它是很新的,所以我觉得建议别人在没有经过良好测试的情况下使用它是不安全的,而且它是 Microsoft 特定的,所以你必须依赖它的编译器。这就是我所看到的一个很棒的图书馆。它抽象了很多细节,设计精良,并且提供了“并行任务”概念的非常高层次的 View 。再次使用这个库并不会阻止你使用,例如,集群的 MPI(但是 Concurrency Runtime 有它自己的库)。

用什么?我没有答案,只是尝试选择你觉得更舒服的东西(也看看 Boost Threads)。请注意,您可以以某种方式混合使用它们,例如 OpenMP+MPI、MPI+TBB 甚至 MPI+PLL)。我更喜欢 PPL,但如果您正在开发真实世界的应用程序,您可能需要进行长时间的测试才能确定哪个更好。实际上我喜欢 Concurrency Runtime(PPL 的基础),因为它是“水平的”,它为并行计算和许多“垂直”包( Agents ,PPL,TPL )提供了一个基本框架(具有结构和算法) .

也就是说,当您进行并行计算时,您可能需要提高某些 CPU 密集型例程的性能。您可以考虑使用 GPU 来完成这项任务,我认为它会为 short 提供最好的服务大量并行计算(当然我更喜欢 OpenCL 而不是专有的 CUDA 即使 CUDA 性能 may be higher )。其实你甚至可以看看OpenHMPP如果您对此主题感兴趣。

关于c++ - 选择并行化方案要考虑什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902401/

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