我正在编写一个python代码,需要在任意一组点上多次计算2D样条曲线。代码如下:
spline = scipy.interpolate.RectBivariateSpline(...)
for i in range(1000000):
x_points, y_points = data.get_output_points(i)
vals = spline.ev(x_points, y_points)
""" do stuff with vals """
输出点没有重叠。由于data.get_output_points
使用了大量内存,所以我想使用线程或某种共享内存来并行化它。天真地,我尝试生成10个线程,并给它们每个循环的1/10。但是,这并没有给我任何速度超过运行一个线程。在
我分析了代码,它将所有的时间花在fitpack2.py:674(\__call__)
,这是_BivariateSplineBase
求值函数。似乎我遇到了一些GIL问题,这会妨碍线程独立运行。在
我该如何避开GIL问题并将其并行化?有没有一种方法可以调用fitpack
的并行化例程,或者我可以使用不同的样条函数?我的输入网格是统一的和过采样的,但我的输出点可以在任何地方。我尝试过使用RegularGridInterpolator
(linear interpolation),它有足够好的性能,虽然不是很理想,但是它使用线程的并行性很差。在
编辑:我所说的天真线程并行化是什么意思:
^{pr2}$
在python中有多种并行处理方法可以避免GIL:
更多信息请参见here
是的,你是在敲吉尔的脖子。在
相关问题 更多 >
编程相关推荐