Async处理长向量失效?并行积分任务的性能测试疑问
关于Async并行积分器的性能测试复盘
最近我基于C++的async实现了一个并行积分器,核心想验证的点是:如果把输入向量拆成4个子向量并行处理,积分任务的耗时能不能降到单线程版本的1/4。
时间测量的小插曲
一开始在时间统计上栽了跟头,后来才搞明白——std::chrono::steady_clock()测量的是实际流逝时间(墙钟时间),不是CPU时间。把这个点搞清楚后,时间测量的问题就顺利解决了。
不同向量规模的测试表现
我针对不同长度的向量做了对比测试,结果如下:
- 当向量比较短(元素数量小于10^5)时,单线程直接积分的速度反而更快。这其实是合理的,因为
async的.get()调用、线程调度这些操作本身会产生额外开销,短向量场景下这些开销反而盖过了并行计算的收益。 - 但尴尬的是,遇到长向量场景时,
async并没有像预期那样发挥并行加速的作用,目前还在排查这个问题。
内容的提问来源于stack exchange,提问作者Bagnarol
相关产品推荐
相关产品推荐

