我需要高性能的合并,并且正在实现:通过 Jatin Chhugani等 p>
他们的目标是从1个CPU中获得最大的性能,他们解决方案的一部分是在SIMD级别上使用bitonic排序网络。为了隐藏最小/最大和随机播放操作的延迟,他们同时执行4个排序网络(虽然我认为它们意味着交错。)。这使得性能提高了3.25倍。
我的问题有点放松,我有多对需要处理的数组(独立读取),因此我可以简单地运行多个进程,从而轻松获得更高的吞吐量。
虽然如果我将可用内核的进程数量超额预订,这是否也会隐藏延迟?但诱导在更高的水平?或者我们是否已经在超线程领域徘徊,我将永远不会超过在CPU核心中共享相同功能单元的2个进程的限制?
我当然可以尝试,但改变现有的代码是相当复杂的,我想先听听理论。
答案 0 :(得分:2)
不,线程不是管道泡沫的有效解决方案。粒度不合适:上下文切换需要数百个周期,而由天生的bitonic排序实现的停顿类型是2-4个循环。
话虽如此,但不清楚您的用例是什么,或者瓶颈会在哪里出现,因此多处理可能会有所帮助。只有一种方法可以找到答案。
答案 1 :(得分:2)
我已经做了一些实验,HT的好处似乎很少 - 一方面你看到隐藏延迟的一些小改进,但另一方面你加倍缓存使用的压力和FSB带宽(也是内存争用的两倍)。在某些情况下,我看到了一个微小的收益,在其他情况下,性能略有下降 - 这一切都取决于内存访问模式和缓存占用空间,但从我所看到的HT并没有真正帮助太多整体。
话虽如此,对于代码而言,就内存访问模式而言,可能存在特别优化的代码,HT可能会为您买些东西,但如果您没有优化使用然后,缓存/内存层次结构然后SSE优化可能为时过早。