【问题标题】:Cython parallelism under WindowsWindows下的Cython并行性
【发布时间】:2014-05-29 18:26:29
【问题描述】:

据此link 声明,MSVC 是 Windows 64 位的首选。但是,对于免费的 VC++ 2010 Express Edition,或者 Windows SDK,似乎不支持 openmp。这是否意味着,在 Windows 中使用 Cython 进行并行计算没有干净的方法?

感觉好绝望。我想我可以购买零售版 - 如果这是唯一的解决方案。

【问题讨论】:

  • 下载并安装 MSVC2012 或 MSVC2013 的快捷版。它们都支持 OpenMP。
  • @Zboson 谢谢,但 cython 不需要使用与编译 python 相同的运行时版本吗?你能告诉我如何让 cython 使用 VS2013 作为编译器吗?

标签: python openmp cython


【解决方案1】:

编辑:这个答案的旧版本主要适用于 Python 2 和 Python 3 的早期版本,因为它们依赖于真正旧版本的 MSVC。如果可能的话,现在的解决方案是使用更新版本的 Python 及其相应版本的 MSVC。

混合 C 运行时可能会导致不可预知的崩溃。例如,如果一个 C 运行时分配了一个指针,而另一个 C 运行时试图释放它,它就会崩溃。一般来说,这很痛苦,但可以让这种事情正常工作,但如果您能够使用足够新的 Python 版本,则根本不需要混合编译器,因为更新的 MSVC 版本可以满足您的需求。


虽然 Cython 文档不鼓励这样做,但最新版本的 MinGW-w64 应该可以工作。 关于不兼容运行时的警告应该在 MinGW 4.7 之后解决,但仍然要小心。

您可以将 MinGW-w64 与 OpenMP 一起使用(有关如何获取二进制文件,请参阅 this question),因此,理论上,应该可以配置 Cython 以使用它。

MinGW builds 项目是安装编译器的好方法。

您可能还需要配置 distutils 以使用 MinGW,如 this answer 中所述。

【讨论】:

  • 谢谢 lanH。我确实安装了 TDM GCC,但是对 '_imp....' 错误的未定义引用不断弹出,这可能是由于 libpython33.a 文件。然后我发现很难进步,因为我的 Python 文件夹中没有 python33.dll...
  • 你可以试试这些installers,不过我目前使用的是 Anaconda 发行版,因为它与 Cython 一起已经设置为使用 MinGW。这可能是一个更安全的选择。
  • 非常感谢!我没有注意到那些漂亮的安装程序:) 我会试试的。顺便说一句,Anaconda 是否带有 64 位的 Python 3,它是用 mingw-w64 设置的?我不知何故记得在别处读到 anaconda 捆绑的 gcc 不包括 openmp。
  • 您可以运行 Python 3 安装。 Anaconda 确实支持 Python 3。他们在 post 中描述了如何设置它。我认为您对 OpenMP 的看法是正确的。似乎已经对此进行了一些讨论here。看起来解决方案是将 Anaconda 与单独的 MinGW-w64 安装一起使用。
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多