我有一个用 IDL(交互式数据语言)编写的项目,用于通过同化一堆不同的数据输入来生成电离层的近实时模型。IDL 不是一种很好的语言来编写它,但这主要是因为遗留代码。尽管 IDL 中的对象环境相对有限,但该项目是用 OO 风格编写的。
该项目的下一代范围要大得多,并且需要更多的计算任务。IDL 对多线程的支持有限,不支持在分布式内存系统上并行运行。最初的计划是用 C++ 编写下一代代码,使用 MPI 进行并行化,但是我最近开始学习 Python,并且对易用性以及快速开发和维护代码的能力印象深刻。我现在正在考虑用 Python 编写这个项目的高级部分,并在需要时/如果需要改进核心数字处理部分的优化,则使用 C 扩展。
由于我是 Python 新手,因此我不会立即明白 Python 与 C 版本相比可能会慢的地方(而且在我了解它的特性之前,我也可能在 Python 中做一些次优的事情)。这意味着我会考虑基本上计划整个项目,就好像它是用 Python 完成一样,编写代码,配置文件和反复优化,直到我无法再做任何改进,然后寻找用最慢的部分替换最慢的部分C 扩展。
这是一个好方法吗?有人对开发此类项目有任何提示吗?我将寻求尽可能多地利用现有的优化良好的库(例如 scaLAPACK),这也可以减少为数字运算滚动我自己的基于 C 的扩展的需要。