<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Multiprocessing</id>
	<title>Multiprocessing - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Multiprocessing"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Multiprocessing&amp;action=history"/>
	<updated>2026-04-04T15:05:53Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Multiprocessing&amp;diff=312&amp;oldid=prev</id>
		<title>180.119.238.180：创建页面，内容为“多处理器（Multiprocessing）涉及计算机中的多个CPU。 多处理器可以通过多种方式在硬件中实现。  == SMP (对称多处理) ==  理论上，SMP 意味着所有cpu都是相同的。 实际上，cpu之间可能存在较小的变化 (例如，同一系列cpu的不同修订)，但是操作系统软件通常可以忽略这些差异。 SMP是软件支持的最简单的多处理形式。 SMP包括具有在单独的芯片中实现的cpu…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Multiprocessing&amp;diff=312&amp;oldid=prev"/>
		<updated>2022-01-25T06:20:21Z</updated>

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