在一些科学环境中,你经常离不开FORTRAN,因为大多数开发人员只知道这个习语,并且有很多遗留代码和相关经验.坦率地说,高性能编程没有很多其他跨平台选项(C++可以完成任务,但语法,零启动数组和指针与某些人不兼容).
所以,让我们假设一个新项目,必须使用Fortran 90的,但我想建立最先进的软件架构出来的,同时与最新的编译器兼容(英特尔ifort,而且还包括Sun/HP/IBM编译)
所以我想要强加一些众所周知的常识,但在我的环境中还不是标准:
implicit none
等#ifdef DEBUG
),带有更多检查和所有可能的英特尔编译器检查(数组边界,子程序接口等)所有这一切的目标是拥有值得信赖,可维护和模块化的代码.然而,在许多遗留代码中,可重用性不是一个重要的目标.
我四处搜寻有关面向对象的Fortran编程契约式引用(断言/前提条件的/ etc.),发现只有丑陋的和过时的文件,通过人与没有大规模参与项目进行语法和文章,和死了的项目.
有关此主题的任何好的URL,建议,参考文件/书籍?
我的unix/windows C++应用程序已经使用MPI进行了并行化:作业被分割为N cpus,并且每个块都是并行执行,非常高效,非常好的速度缩放,工作正确完成.
但是在每个过程中都会重复一些数据,并且由于技术原因,这些数据不能轻易地通过MPI(...)进行分割.例如:
在4 CPU工作中,这意味着至少有20Gb的RAM负载,大部分内存"浪费",这很糟糕.
我正在考虑使用共享内存来减少总体负载,每台计算机只会加载一次"静态"块.
所以,主要问题是:
是否有任何标准的MPI方式在节点上共享内存? 某种现成的+免费图书馆?
boost.interprocess
和使用MPI调用来分发本地共享内存标识符.任何性能损失或特别问题要警惕?
该作业将在PBS(或SGE)排队系统中执行,如果进程不干净退出,我想知道这些是否会清理特定于节点的共享内存.