故事是这样的:我需要一个 Python 的 MPI 包装器。
我知道有mpi4py http://code.google.com/p/mpi4py/。对于当前的工作,我(大部分)使用 Python 和 Windows,我想使用 Microsoft HPC Cluster Pack,可以访问一些运行 Win 2008 Server 的相当“强大”的机器。顺便提一下,除了 Win 经验之外,我确实有一些关于 MPI 和其他东西的 *nix 经验,但这对于这个问题来说是相当没有意义的。
当我遇到Visual Studio 的 Python 工具 http://pytools.codeplex.com/。这是一些非常棒的东西。任何 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 tarball,将其解压并更改了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 源文件中注释掉这些,但我认为这不是正确的路径。
提前致谢!