但我现在有点困惑。
如果 Parallel.For 的每次迭代都产生结果并将其存储为数组的项怎么办。没有竞争条件,也不需要同步。但是缓存行必须与所有线程同步,这会降低性能。(如果我没错的话)。
所以我很感兴趣是否存在性能改进的方法。
但我现在有点困惑。
如果 Parallel.For 的每次迭代都产生结果并将其存储为数组的项怎么办。没有竞争条件,也不需要同步。但是缓存行必须与所有线程同步,这会降低性能。(如果我没错的话)。
所以我很感兴趣是否存在性能改进的方法。
如果 Parallel.For 的每次迭代都产生结果并将其存储为数组的项怎么办。
为了发生错误共享,您需要不同的线程来访问彼此靠近的数组项。
在实践中,您有少量线程(我们称之为 C)处理一个大小为 N 的大型数组,其中 N >> C。这意味着每个线程都有相当多的项目要处理。假设它们可以独立处理,理想的方法是进行连续拆分,因此每个线程都在数组中获得连续的位置。这很好地避免了错误共享。
例如,处理交错的数组元素是没有意义的,因为这确实会导致错误共享。然而,可能并不总是可以使用连续策略,因为有时负载平衡会发挥作用。在这种情况下,您必须查看哪个更有害:偶尔的错误共享或负载平衡不良。讨论很长。我确信底层的 TPL 调度程序设计得足够好,以获得最佳的权衡。