在多核系统(例如2,4,8核)中,我们通常使用互斥锁和信号量来访问共享内存。但是,我可以预见,这些方法会为未来具有多个内核的系统带来很高的开销。有没有其他方法可以更好地为将来的许多核心系统访问共享内存。在许多核心系统中如何访问共享内存
回答
我不确定将来你想走多远。但是从长远来看,我们现在所知道的共享内存(任何内核都可以访问的单个地址空间)是不可扩展的。因此,编程模型将不得不在某些时候改变,让程序员的生活变得更加艰难,就像我们进入多核时一样。
但是现在(也许再过10年),你可以逃避事务内存和其他硬件/软件技巧。
从长远来看,我说共享内存不可扩展的原因仅仅是由于物理原因。 (类似于单核/高频如何击中障碍)
总之,晶体管不能缩小到小于原子的大小(禁止使用新技术),并且信号传播速度不能超过光速。因此,内存将变得越来越慢(相对于处理器),并且在某些时候,共享内存变得不可行。
我们现在可以在多套接字系统上看到NUMA的效果。大型超级计算机既不共享内存,也不兼容缓存。
Transactional memory就是这样一种方法。
1)只锁定你正在访问的内存部分,而不是整个表!这是在大型哈希表的帮助下完成的。桌子越大,锁定机制越好。 2)如果可以,只锁定写入,而不是读取(这要求在更新时读取“先前值”时没有问题,这通常是有效的情况)。
在任何多处理器/内核/线程应用程序同步中访问最低级别的共享内存取决于总线锁定。这样的锁可能会导致数百个(CPU)等待状态,因为它还包含锁定那些具有总线主控设备(包括DMA)的I/O总线。理论上可以设想一个中级锁,当程序员确定存储区被锁定时不会受到任何I/O总线的影响时,可以调用该锁。这样的锁定会更快,因为它只需要将CPU缓存与主存储器同步快速,至少与最慢的I/O总线的延迟相比。一般来说,程序员是否有能力决定何时使用哪种总线锁定令其令人担忧的主要可行性影响。这种锁也可能需要其自己的专用外部引脚与其他处理器同步。
在多处理器Opteron系统中,每个处理器都有自己的内存,它成为所有安装的处理器可以“看到”的整个内存的一部分。试图访问内存的处理器将被连接到另一个处理器上,透明地通过高速互连总线(称为HyperTransport)向负责该内存的处理器(NUMA概念)完成访问(尽管速度更慢)。只要处理器及其内核与物理连接的内存一起工作,处理速度就会很快。另外,许多处理器都配备了几条外部存储器总线,以增加其整体存储器带宽。
在Opteron系统上可以使用HyperTransport互连来实现理论中级锁定。
至于任何可预见的未来,锁定尽可能少且时间尽可能短的经典方法是,通过实现锁定到位时使用的高效算法(以及相关的数据结构)仍然成立。
- 1. 在Android上访问系统共享库
- 2. OpenCL-共享内存访问
- 3. 如何在Linux系统中创建/访问共享文件夹?
- 4. 在Ubuntu系统上共享核心的进程
- 5. 共享内存,MPI和排队系统
- 6. GPU访问系统内存
- 7. 如何在多个内核和多个GPU中共享全局内存?
- 8. 如何完全在多核系统上预留核心?
- 9. 从操作系统内核访问GPU内存
- 10. 核心数据中的许多关系
- 11. gdb核心无法访问内存
- 12. 备份/共享核心数据存储
- 13. unix-like操作系统如何实现IPC共享内存?
- 14. 如何访问系统公共目录
- 15. 访问控制共享内存
- 16. Multicores:同时访问共享内存
- 17. 无法访问共享内存
- 18. 原子访问共享内存
- 19. 如何跨多个EJB共享Java缓存系统(JCS)资源
- 20. Solr字段类型如何在多个核心之间共享?
- 21. 如何确定我的操作系统是共享内存的多平台
- 22. 如何最好地同步在内核和用户空间之间共享的内存访问,在Windows中
- 23. 要从服务访问共享SharedPreference在android系统
- 24. 访问核心数据中的多对多关系
- 25. 在系统调用中访问Linux内核的SuperBlock对象
- 26. 如何共享访问protractor.ExpectedConditions
- 27. cakephp3如何共享一个核心到多个站点
- 28. 如何在Java多线程中共享缓存内存?
- 29. 如何将muti核心CPU转换为单核心系统
- 30. 高效的多线程共享访问内存缓冲区
但它很慢,不是吗?那里最快的实施是什么? – MetallicPriest
此页面也可能有助于获得更多信息:http://www.haskell.org/haskellwiki/Software_transactional_memory –
@MetallicPriest - 它目前速度较慢,但这似乎部分归因于核心数量较少,但是,锁定方法,以及它是多么新,它仍然可能是目前最好的方法。 –