cython:顺序运行prange(分析/调试)

时间:2016-09-23 15:09:37

标签: python python-3.x debugging parallel-processing cython

我有一个非常大的代码库,主要是用Cython编写的。与此同时,我开始通过" prange" s取代" range" s来开始并行化。 (到目前为止,或多或少是随意的,因为我仍然需要对我从中获益的地方以及不是那么多的地方产生直觉。)

在分析/调试时,我还没有找到答案的一个大问题:

有没有办法在全球或本地级别关闭并行化(即按顺序运行" prange"?)

全局切换最方便,但即使有本地解决方案,至少应该允许我自己实现全局切换。

以防万一相关:我使用的是Python 3(目前是3.4.5)。

1 个答案:

答案 0 :(得分:2)

至少有三种非常简单的方法:

  1. prange采用num_threads参数。设置等于1.这为您提供了本地控制。

  2. 如果您在没有OpenMP的情况下进行编译,它仍然可以运行,但不能并行运行。从setup.py中删除extra_compile_args=['-fopenmp']extra_link_args=['-fopenmp'](或等效内容)。 (OpenMP是根据#pragmas实现的,因此在没有编译器支持的情况下会被忽略。这使您可以轻松进行全局切换。

  3. OpenMP defines an environmental variable for the maximum number of threads OMP_NUM_THREADS。在您的操作系统中将其设置为1,然后运行您的cython程序。这提供了一个全局开关(无需重新编译)