gpt4 book ai didi

multithreading - 关于启动大型多线程编程项目的建议

转载 作者:行者123 更新时间:2023-12-04 01:16:06 25 4
gpt4 key购买 nike

我的公司目前正在运行一个第三方模拟程序(自然灾害风险建模),该程序从磁盘中提取千兆字节的数据,然后运行几天以产生结果。我很快将被要求将其重写为多线程应用程序,以便它在数小时而不是数天内运行。我预计有大约 6 个月的时间来完成转换,并将单独工作。

我们有一个 24-proc 的盒子来运行它。我将可以访问原始程序的源代码(我认为是用 C++ 编写的),但此时我对它的设计方式知之甚少。

我需要关于如何解决这个问题的建议。我是一位经验丰富的程序员(约 30 年,目前使用 C# 3.5),但没有多处理器/多线程经验。如果合适的话,我愿意并且渴望学习一门新的语言。我正在寻找有关语言、学习资源、书籍、架构指南的建议。等等

要求:Windows 操作系统。具有大量支持和良好学习资源的商业级编译器。不需要花哨的 GUI - 它可能会从配置文件运行并将结果放入 SQL Server 数据库。

编辑:当前的应用程序是 C++,但我几乎肯定不会使用该语言进行重写。我删除了某人添加的 C++ 标签。

最佳答案

数值过程模拟通常在单个离散问题网格(例如 surface of the Earthclouds of gas and dust )上运行,这通常排除 simple task farming或并发方法。这是因为划分为一组表示物理空间区域的处理器的网格不是一组独立的任务。每个子网格边缘的网格单元需要根据存储在其他处理器上的网格单元的值进行更新,这些处理器在逻辑空间上是相邻的。

high-performance computing , 模拟通常是 parallelised使用 MPIOpenMP . MPI 是一个消息传递库,具有多种语言的绑定(bind),包括 C, C++, Fortran , Python , 和 C# . OpenMP 是一种用于共享内存多处理的 API。一般来说,MPI 比 OpenMP 更难编码,更具侵入性,但也更灵活。 OpenMP 需要在处理器之间共享内存区域,因此不适合许多架构。 Hybrid schemes也是可能的。

这种类型的编程有其自身的特殊挑战。以及race conditions , deadlocks , livelocks ,以及 concurrent programming 的所有其他乐趣,您需要考虑 topology你的处理器网格 - 你如何选择在你的物理处理器之间分割你的逻辑网格。这很重要,因为您的并行 speedup是处理器之间通信量的函数,它本身是分解网格的总边长的函数。随着您添加更多处理器,此表面积会增加,从而增加 communication overhead 的数量。 .增加granularity最终会变得令人望而却步。

另一个重要的考虑因素是可以并行化的代码比例。 Amdahl's law然后决定了理论上可达到的最大加速。在开始编写任何代码之前,您应该能够估计这一点。

这两个事实将共同限制您可以运行的最大处理器数量。甜蜜点可能比你想象的要低得多。

我推荐这本书High Performance Computing ,如果你能捕获它。特别是关于性能基准测试和调优的章节是无价的。

来自 Lawerence Livermore National Laboratory 的介绍是关于并行计算的优秀在线概述,涵盖了主要问题。 .

关于multithreading - 关于启动大型多线程编程项目的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1902136/

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