【发布时间】:2014-05-26 19:12:49
【问题描述】:
我正在使用英特尔至强融核协处理器,它有多达 240 个线程,并且我正在努力将用于特定应用程序的线程数最小化(或最大限度地提高性能),同时保持在最佳执行时间的百分比范围内。例如,如果我有以下测量结果:
- 线程 |执行时间
- 240 100 秒
- 200 105 秒
- 150 107 秒
- 120 109 秒
- 100 120 秒
我想选择 120 到 150 之间的线程数,因为那里的“性能曲线”似乎稳定下来,并且执行时间的减少并不显着(在这种情况下,大约是最佳测量时间的 15%。我使用穷举搜索算法(测量 1 到 240 个线程)来做到这一点,但我的问题是线程数较少(显然取决于问题的大小)需要很长时间。
为了尝试减少测量次数,我开发了一种“二分搜索”算法。基本上我有一个上限和下限(从 0 和 240 个线程开始),我取中间的值并在 240 处测量它。我得到两个值之间的百分比差异,如果它在 15% 以内(这个值是在分析详尽搜索的结果后选择)我分配了一个新的下限或上限。如果差异大于 15%,那么这是一个新的下限 (120-240),如果它更小,那么它是一个新的上限 (0-120),如果我得到更好的执行时间,我将其存储为最佳执行时间。
该算法的问题在于,首先这不一定是执行时间的排序数组,并且对于某些问题大小,详尽的搜索结果显示了两个不同的最小值,因此例如在一个中,我在 80 处获得了最佳性能线程和 170,我希望能够返回 80,而不是 170 线程作为搜索的结果。但是,对于只有一个最小值的其他情况,该算法找到了一个非常接近预期值的值。
如果有人有更好的想法或知道可以帮助我的现有搜索算法或启发式算法,我将不胜感激。
【问题讨论】:
-
当 240 个线程为您提供最佳性能时,为什么要减少线程数?您还有其他绩效衡量标准吗?当你找到一个最优值(在这种情况下,无论最优意味着什么),你将如何处理它?
-
如您所知,二分搜索将确定一个(可能是多个)局部最小值。要获得曲线的大致形状,请以 10 为增量从 240 个线程测量到 10 个线程(最多 24 个运行)。当跑步时间变得痛苦时停止,比如当跑步时间是迄今为止最佳时间的 3 倍时。
-
@NicoSchertler,使用 240 个线程并不总能提供最佳性能。减少线程数量的原因是为了能够在其他计算中使用其他线程,甚至是为了降低能耗。这只是衡量性能的第一步,之后我将分析减少线程数的影响。
标签: multithreading algorithm search execution-time xeon-phi