multithreading - 大规模多线程设计的共享内存缺陷

标签 multithreading memory-management parallel-processing shared-memory

我正在尝试创建我的第一个多线程应用程序,一个可扩展到多核技术的应用程序。它的灵感来自事件驱动的尖峰神经网络的概念。

设计有点像这样:算法的数据结构以类实例的形式存储在内存中的 1 个位置。可以在这种结构上执行的任务的一个例子是神经元脉冲:它将修改神经元和连接的神经元中的几个值,并识别可能需要执行的任何 future 任务。将要执行的任务添加到一个队列中。有几个线程的唯一功能是从队列中拉出任务,执行任务,然后重复冲洗。对值的任何更新都可以按任何顺序执行,只要它们被执行即可。这种并行性导致的小而罕见的错误对系统性能的统计影响微乎其微。

此设计不使用共享内存以外的任何内存(除了可能用于计算的少量专用内存)。我最近看了一些讲座,演讲者暗示在多核和 GPU 应用程序中使用共享内存非常慢。尽管我对为什么会出现这种情况有一些想法,但我想从对此类事情有经验的人那里找出答案,并且可能会被引导到有用的资源来帮助我。

最佳答案

由于 CPU 缓存一致性协议(protocol),从多核系统中的多个线程访问共享状态可能会很慢。也就是说,共享状态的每一次变化都必须反射(reflect)在所有核心的缓存行中。

http://msdn.microsoft.com/en-us/magazine/cc163715.aspx#S2很好地解释了为什么从多个线程访问共享数据会很慢,以及可以采取什么措施。

关于multithreading - 大规模多线程设计的共享内存缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360828/

相关文章:

ios - 从未释放的分层 TableView 内存

c++ - SIMD XOR 运算不如 Integer XOR 有效?

go - 以下实现是否使我的代码并行?

c - 从线程返回参数(结构)

java - 线程同步

c++ - 多线程和堆损坏

C++动态审查工具

java - 悲观锁无法使用 spring data jpa

objective-c - 释放后将对象设置为 nil -- TT_RELEASE_SAFELY

c - 在不同机器上具有不同输出的并行代码