0

我在阅读并行模式时找到了这篇文章的链接

但我现在有点困惑。

如果 Parallel.For 的每次迭代都产生结果并将其存储为数组的项怎么办。没有竞争条件,也不需要同步。但是缓存行必须与所有线程同步,这会降低性能。(如果我没错的话)。

所以我很感兴趣是否存在性能改进的方法。

4

1 回答 1

2

如果 Parallel.For 的每次迭代都产生结果并将其存储为数组的项怎么办。

为了发生错误共享,您需要不同的线程来访问彼此靠近的数组项。

在实践中,您有少量线程(我们称之为 C)处理一个大小为 N 的大型数组,其中 N >> C。这意味着每个线程都有相当多的项目要处理。假设它们可以独立处理,理想的方法是进行连续拆分,因此每个线程都在数组中获得连续的位置。这很好地避免了错误共享。

例如,处理交错的数组元素是没有意义的,因为这确实会导致错误共享。然而,可能并不总是可以使用连续策略,因为有时负载平衡会发挥作用。在这种情况下,您必须查看哪个更有害:偶尔的错误共享或负载平衡不良。讨论很长。我确信底层的 TPL 调度程序设计得足够好,以获得最佳的权衡。

于 2012-08-31T12:47:26.433 回答