当前位置:
首页
文章
后端
详情

第一章 理解高性能程序(6) - 多核

多核

        功率极限问题最终是可以克服的。冷却是一种方法。或者是降低CPU频率的同时引入可并行工作的处理器核心,增加更多的通用处理器、支持向量处理的单指令多数据(SIMD, Single instruction multiple data),或增加不需要一直供电的器件。通过这些方法,晶体管的密度不会再增加,从而避免芯片过热的问题。

        当一块芯片上有多个CPU核,被称为对称多处理器(SMP, symmetric multiprocessing)CPU,所有的核都能访问在同一块芯片上的各自的数据。相对地,在非一致内存访问(NUMA, non-uniform memory access)系统上,多个物理上独立的CPU拥有他们独有的内部缓存。这些内部缓存对其内部CPU的内存访问速度比外部CPU要快得多。另一个问题是CPU之间的缓存一致性,需要通过复杂的缓存一致性协议解决,对性能也会造成损失,在Qt应用程序的场景,我们通常遇到的是SMP处理器,我们将在本书忽略NUMA系统。

        在多核芯片上,处理资源被分为核心和非核心两种类型。核心资源需要复制一份给其他核心,非核心资源不需要复制,但必须在核心间共享。例如,顶级缓存(如L3, L2视具体处理器而定)是非核心独占的,需要在各个处理器之间共享。

        一个经常遇到的概念超线程(hyper threading)是另一个用于提高CPU并行性从而提升资源利用率的思想。支持超线程的处理器每个物理核有两个逻辑核,每个逻辑核保持其独立的内部状态。处理器的全局状态(如运行、中断、停机)会复制一份给每个逻辑核,计算资源则在逻辑核之间共享。这样设计的意图是可以借用被阻塞的逻辑核的计算资源,从而提高流水线的资源利用率,防止流水线阻塞。操作系统以物理核的方式使用逻辑核,只有以超线程的方式优化才能使整个系统的性能得以提升。

        严格地说,图形处理单元(GPU, graphical processing units)并不是一种多核系统,但处理器通常会与GPU一起集成在主板上,我们也在此提一下GPU。GPU由许多可以做大规模并行计算的非常简单的处理单元组成。通常,GPU用来做图形加速处理,但GPU也能用来做通用计算的加速,比如深度学习应用中的神经网络的训练。在Qt应用场景中,我们通常只使用GPU的图形功能。

免责申明:本站发布的内容(图片、视频和文字)以转载和分享为主,文章观点不代表本站立场,如涉及侵权请联系站长邮箱:xbc-online@qq.com进行反馈,一经查实,将立刻删除涉嫌侵权内容。

同类热门文章

深入了解C++中的new操作符:使用具体实例学习

C++中的new操作符是动态分配内存的主要手段之一。在程序运行时,我们可能需要动态地创建和销毁对象,而new就是为此提供了便利。但是,使用new也常常会引发一些问题,如内存泄漏、空指针等等。因此,本文将通过具体的示例,深入介绍C++中的new操作符,帮助读者更好地掌握其使用。


深入了解C++中的new操作符:使用具体实例学习

怎么用Java反射获取包下所有类? 详细代码实例操作

Java的反射机制就是在运行状态下,对于任何一个类,它能知道这个类的所有属性和方法;对于任何一个对象,都能调用这个对象的任意一个方法。本篇文章将通过具体的代码示例,展示如何通过Java反射来获取包下的所有类。


怎么用Java反射获取包下所有类? 详细代码实例操作

员工线上学习考试系统

有点播,直播,在线支付,三级分销等功能,可以对学员学习情况的监督监控,有源码,可二次开发。支持外网和局域网私有化部署,经过测试源码完整可用!1、视频点播:视频播放,图文资料,课件下载,章节试学,限时免

员工线上学习考试系统

了解Java中的volati关键字的作用 以及具体使用方法

本篇文章将和大家分享一下Java当中的volatile关键字,下面将为各位小伙伴讲述volatile关键字的作用以及它的具体使用方法。


了解Java中的volati关键字的作用 以及具体使用方法

Java Map 所有的值转为String类型

可以使用 Java 8 中的 Map.replaceAll() 方法将所有的值转为 String 类型: 上面的代码会将 map 中所有的值都转为 String 类型。 HashMap 是 Java

Java Map 所有的值转为String类型