我应该将哪些C++库用于利用第三方应用程序的大型并行计算数字运算项目

Aer*_*ius 6 c++ python parallel-processing user-interface linear-algebra

介绍

我想就我将要自己开始的新编程项目请求很多建议.对于我想要完成的事情以及我的基本要求,我将非常精确.因此,这将是一个长期的问题.请多多包涵.

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

  1. 现实世界的问题
  2. 模拟问题
  3. 要求和偏好
  4. 附加信息
  5. 建议请求列表

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)编写的脚本进行扩展,以生成和可视化原始数值数据的结果.我希望能够进行并行计算,我需要与几个第三方开源和专有软件进行通信.

要完成所有这些我将需要一大堆现有的库/包/技术等.对于所有相关问题,我知道我可以使用什么,但是我不知道我应该使用什么.最好的解决方案是一如既往地尝试一切,看看最有效的方法.但是,如果任何有经验的用户可以淘汰一些更不可能的候选人,我很乐意收到他或她的建议,建议,赞成/列表:

  1. 粘贴C++和CPython(例如CTypes,SIP,SWIG等)
  2. C++线性代数数字运算库(例如Armadillo,Eigen,PETSc等)
  3. 图形界面开发库(例如Qt,GTK,wxWidgets等)
  4. 软件通信和并行计算(例如MPICH,OpenMPI,OpenMP等)
  5. CPython 2.7.x或CPython 3.x.

注意:我总结了上面的一些选项,但这些只是示例性而非限制.只要它是用C,C++,Fortran或Python编写的,我对所有东西都是开放的.此外,我不希望在一个人的上述所有五个类别中得到答案.让社区的集体知识来处理这个问题.

我感谢所有的贡献者,并祝你在自己的努力中一切顺利.

unx*_*nut 0

可能,gmp。您可以在这里找到更多详细信息:http://gmplib.org/