0

我需要高性能合并并遇到:Jatin Chhugani 等人在多核 SIMD CPU 架构上进行排序的有效实现

他们的目标是从 1 个 CPU 中获得最大的性能,他们的解决方案之一是在 SIMD 级别上使用双调排序网络。为了隐藏 min/max 和 shuffle 操作的延迟,他们同时执行 4 个排序网络(尽管我认为它们的意思是交错的。)。这使得性能提高了 3.25 倍。

我的问题有点放松,我有多对需要处理(独立读取)的数组,所以我可以简单地运行多个进程,从而轻松获得更高的吞吐量。

虽然如果我超额订阅可用内核的进程数量,这是否也隐藏了延迟?但在更高的水平上诱导?或者我们是在超线程领域涉足,我永远不会超过 2 个进程在 CPU 内核中共享相同功能单元的限制?

我当然可以尝试,但更改现有代码相当复杂,我想先听听理论。

4

2 回答 2

2

我已经对此进行了一些实验,HT 的好处似乎是微不足道的 - 一方面你看到隐藏延迟的一些小改进,但另一方面你对缓存使用和 FSB 带宽的压力加倍(并且加倍内存争用也是如此)。在某些情况下,我看到了一点点收益,在其他情况下,性能略有下降——这完全取决于内存访问模式和缓存占用,但从我所看到的情况来看,HT 总体上并没有太大帮助。

话虽如此,就内存访问模式而言,可能存在代码没有特别优化的情况,HT 可能会为您买些东西,但如果您没有优化缓存/内存层次结构的使用,那么 SSE无论如何,优化可能还为时过早。

于 2014-11-19T13:53:12.093 回答
1

不,线程不是解决管道气泡的有效解决方案。粒度不合适:上下文切换需要数百个周期,而由于双音排序的幼稚实现导致的停顿是 2-4 个周期片段。

话虽如此,尚不清楚您的用例是什么,或者瓶颈将出现在哪里,因此多处理可能会有所帮助。只有一种方法可以找出答案。

于 2014-11-19T10:15:01.520 回答