Python cython:按顺序运行prange(分析/调试)
我有一个相当大的代码库,主要是用Cython编写的。同时,我已经开始将它并行化,用“prange”代替“range”。(到目前为止,或多或少都是随机的,因为我仍然需要培养一种直觉,即我从中真正获益的地方和获益不多的地方。) 分析/调试时出现了一个我还没有找到答案的大问题: 是否有办法在全局或本地级别关闭并行化(即按顺序运行“prange”? 全局开关是最方便的,但即使有一个本地解决方案,至少应该允许我自己实现一个全局开关Python cython:按顺序运行prange(分析/调试),python,python-3.x,debugging,parallel-processing,cython,Python,Python 3.x,Debugging,Parallel Processing,Cython,我有一个相当大的代码库,主要是用Cython编写的。同时,我已经开始将它并行化,用“prange”代替“range”。(到目前为止,或多或少都是随机的,因为我仍然需要培养一种直觉,即我从中真正获益的地方和获益不多的地方。) 分析/调试时出现了一个我还没有找到答案的大问题: 是否有办法在全局或本地级别关闭并行化(即按顺序运行“prange”? 全局开关是最方便的,但即使有一个本地解决方案,至少应该允许我自己实现一个全局开关 以防万一:我正在使用Python 3(目前为3.4.5)。至少有三种非常简
以防万一:我正在使用Python 3(目前为3.4.5)。至少有三种非常简单的方法:
prange
接受一个num\u threads
参数。将其设置为1。这使您可以进行本地控制extra\u compile\u args=['-fopenmp']
和extra\u link\u args=['-fopenmp']
(或等效文件)。(OpenMP是根据#pragmas
实现的,因此在没有编译器支持的情况下会被忽略)。这为您提供了一个简单的全局切换OMP\u NUM\u线程
。在操作系统中将其设置为1,然后运行cython程序。这将提供一个全局开关(无需重新编译)至少有三种非常简单的方法:
prange
接受一个num\u threads
参数。将其设置为1。这使您可以进行本地控制extra\u compile\u args=['-fopenmp']
和extra\u link\u args=['-fopenmp']
(或等效文件)。(OpenMP是根据#pragmas
实现的,因此在没有编译器支持的情况下会被忽略)。这为您提供了一个简单的全局切换OMP\u NUM\u线程
。在操作系统中将其设置为1,然后运行cython程序。这将提供一个全局开关(无需重新编译)