我正在尝试创建我的第一个多线程应用程序,一个可扩展到多核技术的应用程序。它的灵感来自事件驱动的尖峰神经网络的概念。
设计有点像这样:算法的数据结构以类实例的形式存储在内存中的 1 个位置。可以在这种结构上执行的任务的一个例子是神经元脉冲:它将修改神经元和连接的神经元中的几个值,并识别可能需要执行的任何 future 任务。将要执行的任务添加到一个队列中。有几个线程的唯一功能是从队列中拉出任务,执行任务,然后重复冲洗。对值的任何更新都可以按任何顺序执行,只要它们被执行即可。这种并行性导致的小而罕见的错误对系统性能的统计影响微乎其微。
此设计不使用共享内存以外的任何内存(除了可能用于计算的少量专用内存)。我最近看了一些讲座,演讲者暗示在多核和 GPU 应用程序中使用共享内存非常慢。尽管我对为什么会出现这种情况有一些想法,但我想从对此类事情有经验的人那里找出答案,并且可能会被引导到有用的资源来帮助我。
最佳答案
由于 CPU 缓存一致性协议(protocol),从多核系统中的多个线程访问共享状态可能会很慢。也就是说,共享状态的每一次变化都必须反射(reflect)在所有核心的缓存行中。
http://msdn.microsoft.com/en-us/magazine/cc163715.aspx#S2很好地解释了为什么从多个线程访问共享数据会很慢,以及可以采取什么措施。
关于multithreading - 大规模多线程设计的共享内存缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360828/