首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java中的Spliterator测试并行处理的性能

如何用Java中的Spliterator测试并行处理的性能
EN

Stack Overflow用户
提问于 2015-08-01 09:53:35
回答 2查看 459关注 0票数 3

假设我们被赋予了一个数据结构,它也实现了一个分配器。用于测试使用该分配器的并行处理是否实际上比顺序处理更好的样板代码是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-01 10:00:12

为了测试分配器本身,您可以创建一个顺序的并行流,并以最小的开销简化操作来减少它。例如:

代码语言:javascript
复制
@Benchmark
public sequential(Blackhole bh) {
    bh.consume(StreamSupport.stream(myContainer.spliterator(), false).reduce((a, b) -> a));
}

@Benchmark
public parallel(Blackhole bh) {
    bh.consume(StreamSupport.stream(myContainer.spliterator(), true).reduce((a, b) -> a));
}

通常,更重要的是检查您的并行分配器是否对任何trySplit/tryAdvance/forEachRemaining调用序列正确工作。在测试速度之前,最好彻底测试正确性。

另外,一个好主意可能是创建一个更接近现实生活的测试。考虑如何在生产代码中使用您的数据结构,并创建测试,该测试并行地和顺序地实现这样的实际示例。这样的结果将更适合您的数据结构的用户。

票数 4
EN

Stack Overflow用户

发布于 2015-08-01 13:35:38

虽然Tagir Valeev's answer已经介绍了基本知识,但您应该记住以下几点:

并行处理可能更快有两个原因

  • 由于内存带宽的限制,数据结构的大小限制了单个核心所能处理的内容。
  • 管道中的中间/收集器步骤非常昂贵,以至于并行执行它们会减少并行化开销。

后者已经可以在数据结构小得多的情况下得到回报,甚至可能存在效率低下的分配器行为。

理想情况下,您应该同时测试两者,因为渐近良好的性能并不意味着它在曲线的接近端表现良好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31760533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档