假设我们被赋予了一个数据结构,它也实现了一个分配器。用于测试使用该分配器的并行处理是否实际上比顺序处理更好的样板代码是什么?
发布于 2015-08-01 10:00:12
为了测试分配器本身,您可以创建一个顺序的并行流,并以最小的开销简化操作来减少它。例如:
@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调用序列正确工作。在测试速度之前,最好彻底测试正确性。
另外,一个好主意可能是创建一个更接近现实生活的测试。考虑如何在生产代码中使用您的数据结构,并创建测试,该测试并行地和顺序地实现这样的实际示例。这样的结果将更适合您的数据结构的用户。
发布于 2015-08-01 13:35:38
虽然Tagir Valeev's answer已经介绍了基本知识,但您应该记住以下几点:
并行处理可能更快有两个原因
后者已经可以在数据结构小得多的情况下得到回报,甚至可能存在效率低下的分配器行为。
理想情况下,您应该同时测试两者,因为渐近良好的性能并不意味着它在曲线的接近端表现良好。
https://stackoverflow.com/questions/31760533
复制相似问题