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