多核应用编程实战1.2.1 在单芯片上支持多线程_多核应用编程实战1.2.1 在单芯片上支持多线程试读-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > 编程 > 多核应用编程实战 > 1.2.1 在单芯片上支持多线程

多核应用编程实战——1.2.1 在单芯片上支持多线程

处理器的核心是芯片上负责执行指令的部分。核心有许多组成部分,我们将在本章稍后详细讨论其中某些部分。处理器的简化原理图见图1-3。 缓存是芯片上保存最近使用数据和指令的部分。查看一下处理器内的硅片(如图1-7所示),可以看到核心和缓存是肉眼可见的两个元件。关于缓存,请参见1.2.3节。 让芯片运行多线程最简单的方式就是多次复制同一核心,如图1-4所示。最早能支持多线程的处理器就得益于这种方法。这也是多核处理器的基本思想。这是一种简单的方法,因为此法只需采用现有处理器的设计并加以复制,两个核心之间以及内核和系统之间的通信涉及的情况较为复杂,但核心(这是处理器最复杂的部分)的变化最小。两个核心共享一个与系统其余部分的接口,这意味着两个核心必须共享对系统的访问。 然而,这并非唯一的方法。另一种方法是使单核执行多个线程的指令,如图1-5所示。对这种设计存在多种改进: 该核心可以用100个时钟周期执行某个软件线程的指令,然后切换到另一个线程执行接下来的100个时钟周期; 该核心每个时钟周期可从两个线程之一提取指令,轮流进行; 该核心每个时钟周期可同时从多个线程各取一条指令; 该核心可在每次软件线程遇到长延迟事件时(如缓存未命中,此时必须从存储器中取数据)切换软件线程。 若两个线程共享一个核心,则每个线程将获得一份资源,份额大小取决于另一线程的活动和可用资源的数量。例如,如果一个线程停下等待内存,那么另一线程就可独占对所有核心资源的访问。然而,如果两个线程要同时发出相同类型的指令,那么对于某些处理器,只有一个线程能成功发出,另一个线程不得不等待下次重试。 多数多核处理器采用多个核心与单核心多线程相结合的方式,最简单的例子就是带两个核心、每个核心支持双线程的处理器,这样整个处理器就能支持4个线程。图1-6显示了此种配置。 处理多线程的能力反映在操作系统中,通常表现为该系统具有许多虚拟CPU。因此,从用户的角度来看,该系统能够运行多个线程。用来形容这种情况的术语为芯片多线程(chip multithreading,简称CMT),即“一个芯片,许多线程”。这一术语强调“许多线程”,而非强调将线程分配到核心的实施细节。 UltraSPARC T2是CMT处理器的最佳示例,有8个复制的核心,每个核心能运行8个线程,使处理器能同时运行64个软件线程。图1-7显示了该处理器的物理布局。 UltraSPARC T2平面布局图显示有许多不同区域向处理器核心提供功能支持,主要环绕于芯片的外边缘。处理器的8个核心结构相同,因而很容易识别。例如,SPARC核心2是SPARC核心0的垂直映像,SPARC核心0又是SPARC核心4的水平映像。另一个明显的结构是由构成二级缓存区的常规结构元形成的网纹图案,此二级缓存区是片上存储器,为所有核心共享,保存最近使用的数据,减少从内存提取数据的次数,也使数据能在多个核心间快速共享。 CMT处理器的实施细节对效果有明显影响,尤其是当多个线程分布在系统上时,认识到这点很重要。通常认为硬件线程是等同的,在当前的处理器设计中,并不存在快速硬件线程和慢速硬件线程之分。某个线程的性能有赖于目前系统正在执行的其他线程,而非设计上某些固定不变的属性。 例如,假设系统中的CPU有两个核心,每个核心可以支持两个线程。当两个线程在该系统上运行时,既可以在同一核心上运行,也可以在不同核心上运行。很可能线程共享同一核心时比其在不同核心上时运行速度慢,这是个显而易见的结果,因为在前一情况下必须资源共享,而在后一情况下则不必与另一线程共享资源。 幸运的是,操作系统的发展体现了内存局部性和处理器资源共享等理念,这样操作系统才能以最佳方式自动分配工作。例如,Solaris操作系统中使用局部性群组(locality group)信息来为处理器调度工作,此类信息告诉操作系统哪些虚拟处理器共享资源。如将工作调度给不共享资源的虚拟处理器,则很可能会获得最佳性能。 另一种情况是,当某个线程被唤醒却无法安排至之前运行该线程的虚拟CPU上,此时让操作系统了解系统的拓扑结构很有用。这样就可将该线程调度到与之前运行该线程的虚拟CPU共享同一局部性群组的某一虚拟CPU上,这比将其调度到与原虚拟处理器不共享任何信息的某个虚拟处理器上要好得多。例如,Linux有亲和性这一概念,即尽量使线程保持在之前运行过它们的虚拟处理器上。 对于含有多个均能支持多线程的处理器的系统来说,这种拓扑信息尤为重要。把线程调度到单处理器不同核心上所造成的性能差异微乎其微,但将线程迁移到不同的处理器上造成的性能差异会很大,尤其是在线程使用的数据仍保留在原处理器内存中的情况下。内存亲和性将在1.3节进一步讨论。 在以下各节中,我们将讨论处理器核心的组成部分。处理器核心关键部分的粗略示意见 图1-8,图中显示了每个指令类型的专用流水线、片上存储器(称为缓存)的专用流水线、用于将虚拟内存地址转换为物理地址的TLB(Translation Look-aside Buffer,转换旁视缓冲器)以及系统互连(这是负责与系统其余部分进行通信的层)。 1.2.2节说明了现代处理器核心中各种“流水线”的动因。1.2.3节、1.2.4节和1.2.5节讲解了缓存和TLB的目的和功能。

展开全文


推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

《多核应用编程实战》其他试读目录

• 第一章:硬件、进程和线程
• 1.1 计算机的内部结构
• 1.2 多核处理器的缘起
• 1.2.1 在单芯片上支持多线程 [当前]
• 1.2.2 通过处理器核心流水线作业提高指令发出率
• 1.2.3 使用缓存保存最近使用的数据
• 1.2.4 用虚拟内存存储数据
• 1.2.5 从虚拟地址转换到物理地址
• 1.3 多处理器系统的特征
• 1.4 源代码到汇编语言的转换
• 1.4.1 32位与64位代码的性能
• 1.4.2 确保内存操作的正确顺序
• 1.4.3 进程和线程的差异
• 1.5 小结
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •