我每年都在计算一些计算量相对较大的数据。我已经使用 numba(效果很好)来减少运行迭代来计算数据所花费的时间。然而,鉴于我有 20 年的独立数据,我想将它们分成 5 x 4 个组,可以在 4 个不同的 CPU 内核上运行。
def compute_matrices(self):
for year in self.years:
self.xs[year].compute_matrix()
在上面的代码片段中,该函数是包含属性 year 和 xs 的类中的一个方法。
year
只是一个整数年份,而 xs
是一个横截面对象,其中包含 xs.data 和 compute_matrix() 方法。将其拆分到多个核心的最简单方法是什么?
最佳答案
因此,您可以查看以下几点:
NumbaPro: https://store.continuum.io/cshop/accelerate/ 。这基本上是类固醇上的 Numba,为多核和多核架构提供支持。不幸的是它并不便宜。
数字表达式: https://code.google.com/p/numexpr/ 。这是一个用于实现超线程的 numpy 数组的表达式求值器。
Numexpr-Numba(实验性): https://github.com/gdementen/numexpr-numba 。顾名思义,这是使用 Numba 后端的 Numexpr。
很多答案将取决于您的 compute_matrix
方法中做了什么。
最快(就开发时间而言)的解决方案可能是使用 multiprocessing
库拆分计算。应该注意的是,如果您的 compute_matrix
函数没有副作用,那么使用多处理会更容易。
关于python - 在python中的多个cpu核心上运行简单循环(处理不同数据)的最简单方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22878108/