查看“Multiprocessing”的源代码
←
Multiprocessing
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
多处理器(Multiprocessing)涉及计算机中的多个CPU。 多处理器可以通过多种方式在硬件中实现。 == SMP (对称多处理) == 理论上,[[SMP]] 意味着所有cpu都是相同的。 实际上,cpu之间可能存在较小的变化 (例如,同一系列cpu的不同修订),但是操作系统软件通常可以忽略这些差异。 SMP是软件支持的最简单的多处理形式。 SMP包括具有在单独的芯片中实现的cpu的系统,具有在同一芯片 (多核) 中实现的cpu的系统以及组合 (例如具有2个单独的四核芯片的系统,总共具有8个物理cpu)。 == SMT (Simultaneous Multithreading) == 通常,CPU执行一个指令流,其中在任何时候,CPU的某些部分可能是繁忙的,而CPU的其他部分可能是空闲的 (例如,在执行整数指令时,CPU的执行浮点计算的部分可能是未使用的),并且在某些情况下整个CPU可能处于空闲状态 (例如,当CPU需要等到数据从RAM到达后才能继续时)。 [[SMT]] 背后的想法是执行不止一个指令流,这通过减少部分CPU闲置的机会来提高整体性能。 从操作系统的角度来看,SMT看起来很像SMP,除了性能特征。 对于SMT,单个物理CPU执行多个 “线程” (或逻辑CPU),并且一个线程/逻辑CPU的性能受同一物理CPU/内核中其他线程/逻辑CPU所做的工作影响 (因为物理CPU的资源是共享的)。 对于80x86架构,英特尔是第一个实现SMT (被英特尔称为 “超线程”) 的制造商。 当英特尔首次推出超线程时,由于性能问题,它得到了一些负面的宣传; 部分原因是它的实现方式,部分原因是许多软件不是为它设计的 (单线程),操作系统调度程序也没有为此进行优化。 英特尔暂时停止使用SMT/超线程; 但是从那时起,软件就赶上来了,后来的cpu (Atom,Core i7) 显示出SMT的显着性能提高 (在多线程负载上,性能提高了约30%)。 AMD 2017年发布的Ryzen平台首次将SMT引入,而非Intel CPU。 == AMP (非对称多处理) == [[AMP]] 意味着至少有一个cpu是不同的。 例如,嵌入式系统可能具有用于数字信号处理的ARM CPU和专用CPU。 AMP在台式机/服务器计算机中很少见,但是由于英特尔计划将流处理器 (“Larrabee”,主要用作图形的GPGPU,因此将来可能会发生变化,物理和HPC) 在与通用80x86 cpu相同的系统中 (甚至可能在同一多核芯片中)。 可能,在将来的某个时候,通用80x86操作系统可能需要具有2个调度器-一个用于传统的80x86 cpu,另一个用于流处理器。 == NUMA (Non-Uniform Memory Access 非均匀内存存取) == 对于SMP,访问资源 (例如RAM) 所花费的时间对于所有cpu都是相同的。 对于 [[NUMA]],情况并非如此,并且某些cpu可能能够比其他cpu更快地访问资源。 “NUMA” 这个名字具有误导性,因为RAM不是唯一受影响的资源- 与其他cpu相比,某些cpu完全有可能更快地访问其他设备 (例如硬盘,视频,以太网等)。 NUMA的示例是AMD opteron和Intel Core i7处理器; 您可能有2个四核CPU和2组RAM芯片,其中每个四核CPU直接连接到一组RAM芯片。 在这种情况下,CPU要访问未直接连接到它的RAM,它需要要求其他四核CPU代表其访问RAM (这会导致额外的延迟)。 对于NUMA系统,资源通常被拆分为 “NUMA域”。 对于上面的示例,有2个NUMA域,每个NUMA域由一个四核CPU和一组RAM芯片组成。 每个NUMA域可以不包含任何或更多个cpu,不包含任何或更多个RAM字节,也不包含任何或更多个I/O集线器 (例如PCI主机桥)。 与NUMA相对的是UMA (Uniform Memory Access)。 UMA的一个示例是具有一对Pentium III CPU的计算机,或具有一个多核Opteron CPU的计算机。 UMA可以被认为是只有一个NUMA域的NUMA特例。 乍一看,这可能没有太大意义,直到您考虑为恰好在UMA计算机上运行的NUMA设计的操作系统。 可以针对NUMA优化操作系统。 例如,调度程序,内存管理和设备管理可能都经过优化,以尝试最大程度地减少一个CPU访问 “远程” (较慢) 资源的需求。 === ccNUMA (Cache Coherent Non-Uniform Memory Access 高速缓存相干非均匀内存访问) === 大多数NUMA系统都是 “cache coherent”,这意味着由一个CPU完成的事情会考虑其他CPU中缓存的状态。 缓存一致性使编写软件变得容易得多,因为 (不包括性能特征) 它与SMP并没有太大不同。 一些 (非常罕见的) 系统不是缓存一致的,这可能意味着软件必须显式管理缓存,以确保cpu不能处理陈旧的数据 (自那以后被其他cpu修改的数据); 或者这可能意味着cpu具有只有它们才能访问的 “本地RAM”,其他cpu根本无法访问它的地方 (在这种情况下,计算机的行为非常类似于通过非常快速的网络连接的单独计算机)。 === NUMA Ratio === 计算机的NUMA比率是衡量CPU访问 “关闭” (快速) RAM的速度与CPU访问 “远程” (较慢) RAM的速度相比的度量。 例如,如果NUMA比率2.0,则CPU访问 “远程” RAM需要两倍的时间。 NUMA Ratio为1.0是不可能的; 因为这表明 “关闭” RAM和 “远程” RAM之间没有区别,因此该系统实际上根本不是NUMA。 对于大多数NUMA 80x86系统,NUMA比率非常低 (约1.2),并且操作系统可以将这些系统视为UMA,而不会出现严重的性能问题。 == 拓扑 == 因此,操作系统可以做出关于资源使用的有效决策 (例如,为了提高性能; 或降低功耗、热量和/或噪声),它需要了解不同资源之间的关系。 这涉及映射计算机的拓扑结构,以便操作系统在做出决策时可以参考此映射。 该映射可以包括每个NUMA域的内容 (cpu及其id的数量,RAM区域的数量以及它们在物理地址空间中的大小和位置,I/O集线器的数量及其标识等),加上性能数据 (例如,可用于确定从任何CPU访问RAM中的特定位置、特定I/O集线器和/或另一个CPU的相对成本的表; 和/或关于CPU之间的高速缓存共享的信息)。 == 另见 == === 论坛帖 === [[Category:OS theory]] [[Category:Multiprocessing]]
返回至“
Multiprocessing
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息