我每年都在计算一些计算量相对较大的数据。我已经使用 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() 方法。

将其拆分到多个核心的最简单方法是什么?
  • 如果有一个 Numba 风格的装饰器,它可以自动分解循环并在不同的过程中运行它们并将结果粘合在一起,那就太好了。这存在吗?
  • 使用 Python.multiprocessing 是我最好的选择吗?
  • 最佳答案

    因此,您可以查看以下几点:

    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/

    10-12 23:05