gpt4 book ai didi

c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:49 26 4
gpt4 key购买 nike

简介

我想在一个新的编程项目上寻求很多建议,我将自己开始。我将非常精确地完成我想完成的工作以及我的基本要求。因此,这将是一个漫长的问题。请多多包涵。

我将把问题分为五个部分:

  • 实际问题
  • 模拟问题
  • 要求和首选项
  • 附加信息
  • 建议请求列表

  • 1.实际问题

    摩天大楼和大型桥梁承受着动态风荷载。这意味着,如果设计不当,它们可能会因风振而折叠(这实际上发生在1940年: http://www.youtube.com/watch?v=3mclp9QmCGs)。为了正确设计这种结构,需要有效的数字运算软件来进行分析和模拟。

    2.模拟问题

    存在众多能够模拟流体流动或结构力学的软件。许多已经开发了30多年,并且它们都是成熟可靠的技术。因此,编写一个能够从头开始同时模拟流体流动和结构力学的多物理程序是不明智的。首先,您需要多年的发展才能达到成熟,要进入一个依赖特定软件已有30多年的世界是非常困难的。但是更重要的是...为什么可以重用时重新创建?与采用单一方法不同,我更喜欢采用分区方法,在该方法中可以重用现有的仿真软件。

    在分区方法中,我将使用软件X来模拟流程,而我将使用软件Y来模拟结构。然后,我将编写自己的耦合算法,该算法在X和Y之间建立通信,并使用它们来模拟多种物理问题(例如,风引起的摩天大楼或桥梁的振动)。我使用X和Y而不是实际软件名称的原因是因为X和Y应该是黑盒。我的耦合算法决不依赖于X和Y的实现。该算法仅取决于X和Y的输出。这样,最终用户可以选择X或Y可供使用的哪个,或者哪个可供选择。 X或Y都能胜任最终用户想要实现的目标。

    因为我想使用黑盒分区方法,所以软件X对Y一无所知,反之亦然。但是,如何在不了解周围气流的情况下模拟桥梁的变形,又如何在不了解其变形的情况下知道结构以哪种方式干扰周围气流呢?答案很简单:从猜测开始,然后使用迭代方法收敛到正确的解决方案。然而,这种方法在计算上非常昂贵。为了降低计算成本,可以使用非常有效的技术以巧妙的方式编写耦合算法,这里不再赘述。我只想说一点,就是需要一些繁重的线性代数数运算。

    3.要求和首选项

    我需要做的是:
  • 建立第三方开源或专有软件
  • 之间的通信
  • 执行一些重数运算(线性代数)
  • 可视化结果(2D/3D绘制和动画)
  • 提供交互式分析和开发环境
  • 创建直观的图形用户界面

  • 我希望我的软件是:
  • 开源
  • 跨平台
  • 可通过脚本和/或共享库扩展

  • 我将要使用的是:
  • C++用于大量运算
  • 用于编程逻辑的CPython
  • NumPy/SciPy在CPython中进行一些数字运算
  • Matplotlib,用于在CPython中可视化结果

  • 4.附加信息

    事实:
  • 一个人的项目开始时,如果
  • 成功,则发展为公司
  • 主操作系统是基于KDE的Linux发行版

  • 商业模式:
  • 免费软件和基本文档。
  • 付费服务和详尽的文档。

  • 5.建议请求列表

    我想通过编写许多单独执行微小任务的函数来完成C++中的所有数字运算。程序逻辑将包含在CPython程序包中,该程序包执行整个模拟,同时依赖C++函数执行数字运算。 C++/CPython算法将使用用CPython编写的脚本(使用NumPy,SciPy,SymPy和Matplotlib)进行扩展,以从原始数值数据生成和可视化结果。我希望能够进行并行计算,并且需要与多个第三方开源和专有软件进行通信。

    要完成所有这些工作,我将需要一大堆现有的库/程序包/技术等。对于所有相关问题,我知道我可以使用什么,但是我不知道我应该使用什么。最好的解决方案是一如既往地尝试一切,看看最有效的方法。但是,如果有经验的用户可以淘汰一些不太可能的候选人,我很乐意在以下方面收到他或她的建议,建议,赞成/反对名单:
  • 粘合C++和CPython(例如CType,SIP,SWIG等)
  • C++线性代数数字运算库(例如Armadillo,Eigen,PETSc等)
  • 图形界面开发库(例如Qt,GTK,wxWidgets等)
  • 软件通信和并行计算(例如MPICH,OpenMPI,OpenMP等)
  • CPython 2.7.x或CPython 3.x

  • 注意:我已经总结了上面的一些选项,但是这些仅是示例性的,而不是限制。只要它是用C,C++,Fortran或Python编写的,我都会接受所有内容。我也不希望上面列出的所有五个类别中的任何一个答案。让社区的集体知识来照顾这一点。

    我感谢所有贡献者,并祝您一切顺利。

    最佳答案

    您提到的是并行性,但没有提到如何使该项目并行。这比选择几个库要复杂得多。前进之前,需要考虑几个主要注意事项。

    您简要提到了预期的平台,但是您还必须考虑模拟将在单台计算机/节点上还是在多台计算机上运行。考虑到您正在对建筑物进行迭代模拟,您可能会需要比任何一台计算机都能提供的计算能力大得多的计算能力。这意味着,除非您想使用混合多进程,多线程方法,否则您将被限制为并行的多进程模型。然后,OpenCL和MPI是实现的每个选项。 (注意:MPICH和OpenMPI只是MPI的实现,您的代码应该与它们无关。)MPI传递的消息是一个很好的并行化通用模型,但是对于那些不习惯使用并行代码的人来说,这可能会非常困难。我的个人经验是使用MPI和一些混合编程,因此对于您选择的并行模型,我不能说太多。

    并行模型问题产生的一个问题是,它直接影响了仿真软件。我不能完全确定您打算如何从模拟中分离算法。如果您打算让代码 fork ​​的单独过程来运行仿真,则跨平台支持会遇到问题,因为您可能无法以这种方式运行任意仿真。如果您打算在软件中运行仿真,则并行模型必须始终保持一致。尽管这给黑匣子策略带来了限制,但它可能使整个事情变得更加可行。

    关于适用的库,已经有很多论述。对于没有说过的特定库,我没有更多要说的。请记住,与运行模拟时一样,必须解决许多相同的问题。

    TLDR:不应忽视并行性。在对库进行决策之前,您需要知道将使用哪种并行模型。

    关于c++ - 我应该将哪个C++库用于利用第三方应用程序的大型并行计算数字处理项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628441/

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