使用Intel® Fortran编译器编译Coarray程序

Coarray是在Fortran 2008中实现标准化的一种数据共享概念, 它通过使用同一个程序的多个拷贝来实现并行处理。这里的每一个拷贝,也被称image,同时拥有普通局部变量和叫做coarray的共享变量。一个共享变量既可以是一个数组也可以是一个标量,它的存储空间会跨越一个程序对应的所有image。在这种分区全局地址空间(Partitioned Global Address Space – PGAS)模式中,每一个image既可以像访问局部变量一样访问某个共享变量的自有部分,还可以访问位于别的image中的该变量其它部分。

 

Intel编译器支持在使用共享内存的多核或多处理机系统上运行coarray程序。通过使用可选的许可证coarray程序也可以运行在使用分布式内存的Linux*操作系统或Windows*操作系统的集群上。这些程序还可以运行在使用Intel®集成众核(Intel® MIC架构)的Linux系统上。

 

在使用Intel® Fortran编译器编译使用coarray的代码时必须使用/Qcoarray (Windows* OS) 或 –coarray(Linux* OS)编译选项打开编译器对coarray语法的支持,否则编译器会无法识别代码中和coarray相关的语法和特性而产生编译错误。

 

对于下列的编译选项,在一个给定的编译命令行中仅有一个选项有效。如果同时指定了多个选项,那么只有最后一个指定的选项有效。该规则的一个例外是使用single关键字的[Q]coarray选项;当使用该选项时,无论在命令行中的位置如何它都将被优先使用。

 

  • 使用 [Q]coarray选项并不加任何关键字:等同于在一个节点(共享内存)上运行程序。
  • 使用[Q]coarray选项加上shared关键字:使用底层的Intel® MPI并行库在共享内存的多核或多处理器单个节点上运行程序。
  • 使用[Q]coarray选项加上distributed关键字:需要安装Intel® Cluster Toolkit许可证并使用底层的Intel MPI并行库在多节点环境(多CPU分布式内存系统)运行程序。
  • 使用-coarray=coprocessor (Linux* OS):第一个image在主机上运行,其它image在主机或者目标协处理器上运行。此时使用一个配置文件来制定在何处运行这些image。配置文件通过编译选项-coarray-config-file=filename来指定。
  • 使用[Q]coarray加上single关键字:生成一个不被复制的可执行文件,即运行时只生成一个image(这与使用其它coarray关键字时程序的自我复制特性正好相反)。该用法主要用于程序调试。

 

运行一个使用Intel®编译器生成的coarray的程序不需要特别的步骤,你只需简单的执行相应的可执行文件即可。底层的并行是通过使用Intel® MPI库来实现的。安装Intel®编译器时会自动安装在共享内存系统上运行所需的Intel® MPI运行时库文件。Intel® Cluster Toolkit会安装需要在分布式内存的系统上运行所需的Intel® MPI运行时库文件。Intel® Fortran 编译器不支持使用其它的MPI实现或与OpenMP同时使用coarray。

 

缺省情况下coarray程序执行时创建的image数目 等于当前系统的执行单元数目。用户可以在主程序文件的编译命令行中使用[Q]coarray-num-images选项来修改数目。另一种更改执行时image数目的方式是通过使用环境变量FOR_COARRAY_NUM_IMAGES。

 

Windows* 操作系统上的例子

 

/Qcoarray:shared /Qcoarray-num-images:8:在共享内存系统中创建8个image运行coarray程序

/Qcoarray:shared /Qcoarray-config-file:filename:在共享内存系统中使用MPI配置文件filename运行coarray程序

/Qcoarray:distributed /Qcoarray-config-file:filename:在分布式内存系统中使用Intel MPI配置文件filename运行coarray程序(需要安装Intel Cluster Toolkit许可证)

 

Linux*操作系统上的例子

 

-coarray=shared -Qcoarray-num-images=8:在共享内存系统中创建8个image运行coarray程序

-coarray=distributed -coarray-num-images=8:在分布式内存系统中创建8个image运行coarray程序(需要安装Intel Cluster Toolkit许可证)

-coarray=coprocessor -coarray-config-file=filename:运行一个coarray程序,第一个image在主机处理器上执行,其它的image根据命令行指定的Intel® MPI配置文件filename的内容在主机处理器或者基于Intel®集成众核架构(Intel® MIC架构)的协处理器上执行。

 

更多关于如何使用Intel® Fortran编译器编译,运行coarray程序的信息请参见Intel® Fortran编译器14.0用户参考手册的相关内容。

有关编译器优化的更完整信息,请参阅优化通知