【问题标题】:Distributing memory equally (or as fair as possible)平均分配内存(或尽可能公平)
【发布时间】:2015-01-13 20:41:49
【问题描述】:

我正在使用 Python、MPI 和 FFTW 进行一些并行编程。我需要在 N 个进程之间平均分配长度为 G 的向量(或尽可能接近相等)。这导致了以下数学问题:

给定两个整数 G,N,其中 G>N,我想找到 N 个整数的集合 S,其总和等于 G,并且“所有整数都尽可能大”。

例子:

G = 14, N = 3 --> S = {5, 5, 4}

G = 15, N = 3 --> S = {5, 5, 5}

G = 16, N = 3 --> S = {6, 5, 5}

计算 S 的算法在 FFTW 中由函数 fftw_mpi_local_size 实现。不过,我希望能够自己计算这个,使用 Python。也就是说,我正在寻找一种算法来解决我的问题,或者更好的是现有的 Python 函数来完成这项工作。

【问题讨论】:

    标签: python algorithm math parallel-processing


    【解决方案1】:

    我这样做的方法是找到在N 元素之间均匀分布的最小值,您可以使用整数除法来做到这一点。然后使用% 找到余数,并将1 添加到该数量的元素中。

    def makeValues(G,N):
        val = G//N
        rem = G%N
        return [val]*(N-rem) + [val+1]*rem
    
    >>> makeValues(14,3)
    [4, 5, 5]
    >>> makeValues(15,3)
    [5, 5, 5]
    >>> makeValues(16,3)
    [5, 5, 6]
    

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 2014-03-09
      • 1970-01-01
      • 2016-01-01
      • 2013-01-14
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多