在四核机器上,我正在考虑C#/ .NET算法的并行化,它涉及让多个线程同时读取小型int []数组.到目前为止,它似乎运行得相当好,但我不确定在哪里指定数组上的并发读取在.NET中是线程安全的.有什么指针吗?
然后,我也想知道这种方法是否真的有效?有没有你最好实际复制每个线程的输入数据,以便没有任何并发读取,每个阵列(可能?)有机会在亲和CPU附近缓存?
关于多核CPU的最佳实践的任何想法?
我不认为并发读取存在问题.但是,如果存在并发写入,则可能会出现问题.
不可变数据本质上是线程安全的.
在您的情况下,对数组的并发读取将是线程安全的.
至于算法的有效性,根据数组的大小,如果它适合缓存,那么你可能会看到出色的性能提升,因为多核有效地"对抗"CPU中的缓存.如果他们正在努力用相同的信息填充缓存,他们将分享意味着更多的缓存命中和更好的性能.
假设您的阵列适合缓存...