所以故事是这样的:我需要一个用于 Python 的 MPI 包装器。
我知道有mpi4py。对于目前我(主要)使用 Python 和 Windows 的工作,我想使用 Microsoft HPC Cluster Pack,可以访问一些运行 Win 2008 Server 的非常“强大”的机器。顺便提一下,除了 Win-experience,我在 MPI 和其他东西方面确实有一点 *nix 经验,但这对于这个问题来说是非常有争议的。
当我遇到Python Tools for Visual Studio时,我重新对 mpi4py 产生了兴趣。这是一些非常棒的东西。任何喜欢 Visual Studio 和 Python 的人都应该尝试一下。干得好,调试器很棒。
PTVS 的文档页面表明 mpi4py 的安装很容易……对于 ActiveState Python 来说,这似乎是真的。但是,如果您不使用 ActiveState 的 Python 而是使用来自 python.org 的“普通”Python 发行版,那么您似乎有点不走运。
我的开发机器是带有 Win7 64 位和 Python 2.6 的笔记本电脑,有 64 位和 32 位两种版本。我已经安装了 MS HPC Pack 2008 R2 MS MPI 和 SDK。我有 Visual Studio 2008 和 2010,一切都尽职尽责地修补了。
没有二进制安装程序,并且知道 Unix MPI 如何对其链接的 MPI 版本非常挑剔,我想构建自己的 mpi4py。mpi4py 基本上依赖于将 python 调用绑定到 MPI 库的 MPI .dll(实际上是 .pyd)。
mpi4py 的 easy_installing 和该库的构建失败 - 无法指向 MPI 库。好的,没问题,我下载了 mpi4py 压缩包,解压缩并更改了mpi.cfg文件,使其指向正确的文件夹:
# Microsoft MPI example
# ---------------------
[msmpi]
define_macros = MS_MPI=1
mpi_dir = $CCP_HOME
include_dirs = %(mpi_dir)s\Inc
libraries = msmpi
library_dirs = %(mpi_dir)s\lib\i386
MS MPI 安装程序注册一个环境变量 CCP_HOME 指向包的确切安装位置。“CCP”这个名字必须是从它被称为 Microsoft Compute Cluster Pack 的时候遗留下来的)。必须将此传递给原始的 mpi4py 开发人员。
在此之后,编译通过正常,但我无法链接 - 有三个未解决的外部:
MPI.obj : error LNK2019: unresolved external symbol _MPI_Type_create_f90_integer@8 referenced in ...
MPI.obj : error LNK2019: unresolved external symbol _MPI_Type_create_f90_real@12 ...
MPI.obj : error LNK2019: unresolved external symbol _MPI_Type_create_f90_complex@12 ...
似乎 HPC 2008 R2 中的 MS MPI msmpi.lib 没有实现这些,所以我无法构建 MPI.pyd。
我可以尝试在 mpi4py C 源文件中注释掉这些,但我认为这不是正确的路径。
提前致谢!