Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在多核心系统中访问共享内存_C_Multithreading_Multicore - Fatal编程技术网

C 如何在多核心系统中访问共享内存

C 如何在多核心系统中访问共享内存,c,multithreading,multicore,C,Multithreading,Multicore,在多核系统中,例如2、4、8核,我们通常使用互斥量和信号量来访问共享内存。然而,我可以预见,这些方法将导致未来多核系统的高开销。对于未来的许多核心系统来说,有没有其他更好的方法来访问共享内存。就是这样一种方法。1)只锁定正在访问的内存部分,而不是整个表!这是在一个大哈希表的帮助下完成的。桌子越大,锁定机构越精细 2) 如果可以,只锁定写入,而不锁定读取(这要求在更新“以前的值”时读取“以前的值”不会出现问题,这通常是一个有效的情况)。我不确定您希望在未来走多远。但从长远来看,我们现在所知道的共享

在多核系统中,例如2、4、8核,我们通常使用互斥量和信号量来访问共享内存。然而,我可以预见,这些方法将导致未来多核系统的高开销。对于未来的许多核心系统来说,有没有其他更好的方法来访问共享内存。

就是这样一种方法。

1)只锁定正在访问的内存部分,而不是整个表!这是在一个大哈希表的帮助下完成的。桌子越大,锁定机构越精细


2) 如果可以,只锁定写入,而不锁定读取(这要求在更新“以前的值”时读取“以前的值”不会出现问题,这通常是一个有效的情况)。

我不确定您希望在未来走多远。但从长远来看,我们现在所知道的共享内存(任何内核都可以访问的单个地址空间)是不可伸缩的。因此,编程模型将不得不在某个时刻发生变化,使程序员的生活变得更加艰难,就像我们使用多核时那样

但就目前而言(也许再过10年),你可以摆脱事务性内存和其他硬件/软件把戏

我之所以说共享内存从长远来看是不可伸缩的,仅仅是因为物理原因。(类似于单芯/高频击中屏障的方式)

简而言之,晶体管不能缩小到原子大小(除非有新技术),信号的传播速度也不能超过光速。因此,内存将变得越来越慢(相对于处理器而言),在某个时候,共享内存变得不可行


我们现在已经可以在多套接字系统上看到NUMA的这种效果。大型超级计算机既不是共享内存,也不是缓存一致性。

在任何多处理器/核心/线程化应用程序同步中,访问最低级别的共享内存取决于总线锁。这种锁可能会导致数百个(CPU)等待状态,因为它还包括锁定那些具有包括DMA在内的总线主控设备的I/O总线。从理论上讲,当程序员确信被锁定的内存区域不会受到任何I/O总线的影响时,可以设想一种可以调用的中级锁。这样的锁会快得多,因为它只需要将CPU缓存与主存同步,主存的速度很快,至少与最慢的I/O总线的延迟相比是如此。程序员是否有能力决定何时使用哪个总线锁,这给它的主流可行性增加了令人担忧的影响。这样的锁还可能需要自己的专用外部引脚来与其他处理器同步

在多处理器Opteron系统中,每个处理器都有自己的内存,它成为所有已安装处理器都可以“看到”的整个内存的一部分。一个处理器试图访问一个连接到另一个处理器的内存,它将通过高速互连总线(称为超级传输)透明地完成对负责该内存的处理器(NUMA概念)的访问,尽管速度较慢。只要处理器及其核心使用物理连接到它的内存,处理速度就会很快。此外,许多处理器配备了多条外部内存总线,以增加其总体内存带宽

理论上,在Opteron系统上,可以使用HyperTransport互连实现中级锁定


对于任何可预见的未来,通过实施有效的算法(以及相关的数据结构),实现尽可能少、时间尽可能短的锁定的经典方法仍然适用。

但是它很慢,不是吗?最快的实现是什么?此页面可能还提供了更多信息:@metallicprade-目前速度较慢,但部分原因似乎是内核数量较少,但是,考虑到锁定方法的问题,以及它有多新,这可能仍然是目前最好的方法。有一篇关于超级计算机的好文章把它放在了上下文中。但我认为它不具有可扩展性。它的主要目的是简化编程,避免锁可能出现的错误。