在处理器上调度作业的算法
Algorithm for scheduling jobs on processors
根据 iehrlich 的评论(顺便说一句,感谢),术语 "scheduling" 可能会产生误导,这可能是一个更合适的描述:给定矩阵 N*N,找到一个行排列将产生最大的对角线和。
我有一组 N 个作业和 N 个处理器。所有处理器可以彼此不同。对于每个(作业,处理器)对,我在该处理器上都有该作业的性能运行。性能以 IPC(每周期指令数)衡量。
我正在尝试找到使 IPC 总和最大化的时间表(1 对 1 分配)。我可以通过遍历所有可能的时间表来做到这一点,O(N!),这是不可行的。
然后我尝试使用 "stable matching" 算法 O(N^2),使用 IPC 对工作负载和处理器的偏好进行排序。它运行得非常快,return 是一个不错的时间表,但不是最佳时间表。
我的问题是:
1) 真希望稳定匹配算法能够return最优分配。有人可以解释为什么它失败了吗?到目前为止,我最好的猜测是不同(作业、处理器)对之间存在联系。我也尝试了 "stable matching with indifference" 算法,但没有成功。 我应该提到算法不会因为我的实现而失败。我正在寻找一个更理论化的答案来解释为什么算法本身不能解决这个问题。
2) 你知道我可以使用的算法吗?甚至存在吗?
稳定匹配是错误算法的原因是,您可能会得到一个匹配,其中一对处理器各自喜欢对方的作业,但其中一个作业更喜欢它所在的处理器。转换会使某人变得更糟,所以这个匹配是稳定的。
但是在您的问题中,我们关心的是全局最优。如果一份工作的改善程度超过了另一份工作的改善程度,你就会想换工作。对于全局最优是一个稳定的匹配是必要的,但还不够。
匈牙利算法实际上是寻找全局最优解的正确算法。
根据 iehrlich 的评论(顺便说一句,感谢),术语 "scheduling" 可能会产生误导,这可能是一个更合适的描述:给定矩阵 N*N,找到一个行排列将产生最大的对角线和。
我有一组 N 个作业和 N 个处理器。所有处理器可以彼此不同。对于每个(作业,处理器)对,我在该处理器上都有该作业的性能运行。性能以 IPC(每周期指令数)衡量。
我正在尝试找到使 IPC 总和最大化的时间表(1 对 1 分配)。我可以通过遍历所有可能的时间表来做到这一点,O(N!),这是不可行的。
然后我尝试使用 "stable matching" 算法 O(N^2),使用 IPC 对工作负载和处理器的偏好进行排序。它运行得非常快,return 是一个不错的时间表,但不是最佳时间表。
我的问题是:
1) 真希望稳定匹配算法能够return最优分配。有人可以解释为什么它失败了吗?到目前为止,我最好的猜测是不同(作业、处理器)对之间存在联系。我也尝试了 "stable matching with indifference" 算法,但没有成功。 我应该提到算法不会因为我的实现而失败。我正在寻找一个更理论化的答案来解释为什么算法本身不能解决这个问题。
2) 你知道我可以使用的算法吗?甚至存在吗?
稳定匹配是错误算法的原因是,您可能会得到一个匹配,其中一对处理器各自喜欢对方的作业,但其中一个作业更喜欢它所在的处理器。转换会使某人变得更糟,所以这个匹配是稳定的。
但是在您的问题中,我们关心的是全局最优。如果一份工作的改善程度超过了另一份工作的改善程度,你就会想换工作。对于全局最优是一个稳定的匹配是必要的,但还不够。
匈牙利算法实际上是寻找全局最优解的正确算法。