iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Linux多核并行编程关键技术是什么
  • 121
分享到

Linux多核并行编程关键技术是什么

2023-06-06 02:06:24 121人浏览 泡泡鱼
摘要

本篇内容主要讲解“linux多核并行编程关键技术是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux多核并行编程关键技术是什么”吧!  多核并行编程的背景  在摩尔定律失效之前,提升处

本篇内容主要讲解“linux多核并行编程关键技术是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux多核并行编程关键技术是什么”吧!

  多核并行编程的背景

  在摩尔定律失效之前,提升处理器性能通过主频提升、硬件超线程等技术就能满足应用需要。随着主频提升慢慢接近撞上光速这道墙,摩尔定律开始逐渐失效,多核集成为处理器性能提升的主流手段。现在市面上已经很难看到单核的处理器,就是这一发展趋势的佐证。要充分发挥多核丰富的计算资源优势,多核下的并行编程就不可避免,Linux kernel就是一典型的多核并行编程场景。但多核下的并行编程却挑战多多。

  多核并行编程的挑战

  目前主流的计算机都是冯诺依曼架构,即共享内存的计算模型,这种过程计算模型对并行计算并不友好。下图是一种典型的计算机硬件体系架构。

Linux多核并行编程关键技术是什么

  这种架构中,有如下设计特点:

  ·多个CPU核改善处理器的计算处理能力;

  ·多级cache改善CPU访问主存的效率;

  ·各个CPU都有本地内存(NUMA(非一致性内存访问)),进一步改善CPU访问主存的效率;

  ·store buffer模块改善cache write由于应答延迟而造成的写停顿问题;

  ·invalidate queue模块改善使无效应答的时延,把使无效命令放入queue后就立即发送应答;

  外设DMA支持直接访问主存,改善CPU使用效率;

  这些硬件体系设计特点也引入很多问题,最大的问题就是cache一致性问题和乱序执行问题。

  cache一致性问题由cache一致性协议MESI解决,MESI由硬件保证,对软件来说是透明的。MESI协议保证所有CPU对单个cache line中单个变量修改的顺序保持一致,但不保证不同变量的修改在所有CPU上看到的是相同顺序。这就造成了乱序。不仅如此,乱序的原因还有很多:

  ·store buffer引起的延迟处理,会造成乱序;

  ·invalidate queue引起的延迟处理,会造成乱序;

  ·编译优化,会造成乱序;

  ·分支预测、多流水线等CPU硬件优化技术,会造成乱序;

  ·外设DMA,会造成数据乱序;

  这种情况造成,就连简单的++运算操作的原子性都无法保证。这些问题必须采用多核并行编程新的技术手段来解决。

  多核并行编程关键技术

  锁技术

  Linux kernel提供了多种机制,如自旋锁、信号量、互斥量、读写锁、顺序锁等。各种锁的简单比较如下,具体实现和使用细节这里就不展开了,可以参考《Linux内核设计与实现》等书的相关章节。

  ·自旋锁,不休眠,无进程上下文切换开销,可以用在中断上下文和临界区小的场合;

  ·信号量,会休眠,支持同时多个并发体进入临界区,可以用在可能休眠或者长的临界区的场合;

  ·互斥量,类似与信号量,但只支持同时只有一个并发体进入临界区;

  ·读写锁,支持读并发,写写/读写间互斥,读会延迟写,对读友好,适用读侧重场合;

  ·顺序锁,支持读并发,写写/读写间互斥,写会延迟读,对写友好,适用写侧重场合;

  锁技术虽然能有效地提供并行执行下的竞态保护,但锁的并行可扩展性很差,无法充分发挥多核的性能优势。锁的粒度太粗会限制扩展性,粒度太细会导致巨大的系统开销,而且设计难度大,容易造成死锁。除了并发可扩展性差和死锁外,锁还会引入很多其他问题,如锁惊群、活锁、饥饿、不公平锁、优先级反转等。不过也有一些技术手段或指导原则能解决或减轻这些问题的风险。

  ·按统一的顺序使用锁(锁的层次),解决死锁问题;

  ·指数后退,解决活锁/饥饿问题;

  ·范围锁(树状锁),解决锁惊群问题;

  ·优先级继承,解决优先级反转问题 ;

  原子技术

  原子技术主要是解决cache不一致性和乱序执行对原子访问的破坏问题。主要的原子原语有:

  ACCESS_ONECE():只限制编译器对内存访问的优化;

  barrier():只限制编译器的乱序优化;

  smb_wmb():写内存屏障,刷新store buffer,同时限制编译器和CPU的乱序优化;

  smb_rmb():读内存屏障,刷新invalidate queue,同时限制编译器和CPU的乱序优化;

  smb_mb():读写内存屏障,同时刷新store buffer和invalidate queue,同时限制编译器和CPU的乱序优化;

  atomic_inc()/atomic_read()等:整型原子操作;

  多提一句的是,atomic_inc()原语为了保证原子性,需要对cache进行刷新,而缓存行在多核体系下传播相当耗时,其多核下的并行可扩展性差。

  无锁技术

  上一小节中所提到的原子技术,是无锁技术中的一种,除此之外,无锁技术还包括RCU、Hazard pointer等。值得一提的是,这些无锁技术都基于内存屏障实现的。

  Hazard pointer主要用于对象的生命周期管理,类似引用计数,但比引用计数有更好的并行可扩展性;

  RCU适用的场景很多,其可以替代:读写锁、引用计数、垃圾回收器、等待事物结束等,而且有更好的并行扩展性。但RCU也有一些不适用的场景,如写侧重;临界区长;临界区内休眠等场景。

  不过,所有的无锁原语也只能解决读端的并行可扩展性问题,写端的并行可扩展性只能通过数据分割技术来解决。

  数据分割技术

  分割数据结构,减少共享数据,是解决并行可扩展性的根本办法。对分割友好(即并行友好)的数据结构有:

  ·数组

  ·哈希表

  ·基树(Radix Tree)/稀疏数组

  ·跳跃列表(skip list)

  使用这些便于分割的数据结构,有利于我们通过数据分割来改善并行可扩展性。

  除了使用合适的数据结构外,合理的分割指导规则也很重要:

  ·读写分割:以读为主的数据与以写为主的数据分开;

  ·路径分割:按独立的代码执行路径来分割数据;

  ·专项分割:把经常更新的数据绑定到指定的CPU/线程中;

  ·所有权分割:按CPU/线程个数对数据结构进行分割,把数据分割到per-cpu/per-thread中;

  4种分割规则中,所有权分割是分割最彻底的。

到此,相信大家对“Linux多核并行编程关键技术是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: Linux多核并行编程关键技术是什么

本文链接: https://www.lsjlt.com/news/245744.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux多核并行编程关键技术是什么
    本篇内容主要讲解“Linux多核并行编程关键技术是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux多核并行编程关键技术是什么”吧!  多核并行编程的背景  在摩尔定律失效之前,提升处...
    99+
    2023-06-06
  • 云服务器关键技术是什么技术
    云服务器(Cloud Host)是一种提供高性能计算服务的服务器,它通常具有以下关键技术: 数据库技术:云服务器使用大型关系数据库,可以存储大量的数据,并提供查询、更新等功能。 负载均衡技术:云服务器通常使用多台服务器进行负载均衡,可以...
    99+
    2023-10-27
    关键技术 服务器 技术
  • 网站CDN的关键技术是什么
    网站CDN(内容分发网络)的关键技术包括: 负载均衡:CDN通过在不同地理位置部署服务器节点,能够将用户请求分发到最近的服务器,...
    99+
    2024-05-08
    CDN
  • 云服务器关键技术是什么
    云服务器(Cloud Host)是一种常见的虚拟服务器,它可以通过互联网连接到许多大型计算机。云服务器的关键技术包括高可用性(High Availability)、负载均衡(Load Balancing)、高性能计算(High Perfor...
    99+
    2023-10-26
    关键技术 服务器
  • Python 并发编程的关键挑战是什么?
    Python 是一种高级编程语言,它在数据处理、科学计算、人工智能等领域广泛应用。Python 语言的一个优点就是它天生就支持并发编程。Python 中有多种方式来实现并发编程,包括多线程、多进程和协程等。但是,Python 并发编程也存...
    99+
    2023-09-26
    并发 spring 自然语言处理
  • Java开发技术:掌握容器编程算法的关键是什么?
    在Java开发中,容器是一个非常重要的概念。Java中的容器可以理解为一种数据结构,用于存储和管理一组对象。在Java中,常见的容器有List、Set、Map等。掌握容器编程算法是Java开发的必备技能之一,因为它能够帮助我们更好地管理和...
    99+
    2023-08-08
    容器 编程算法 开发技术
  • 云服务器的关键技术是什么
    云服务器(Cloud Distributed Server)是一种用于在云端托管计算资源的软件,提供了高可靠性、高可扩展性、高安全性、高灵活性和高可控性等特性。以下是云服务器的主要关键技术: 可靠性:云服务器的关键技术之一是其可靠性。可...
    99+
    2023-10-26
    关键技术 服务器
  • 云服务器的关键技术是什么呢
    云服务器的关键技术主要有以下几个方面: 负载均衡(L2/L3):L2和L3是负载均衡系统的两个级别,L2负责把用户的请求分配给L3系统的处理器(CPU),L3系统负责处理和分配请求,使得所有请求都能被L2和L3所处理。负载均衡技术可以有...
    99+
    2023-10-26
    什么呢 关键技术 服务器
  • 云服务器关键技术是什么意思
    云服务器(Cloud Host)是一种使用虚拟化技术构建的服务器,它将计算资源分布到多个云计算数据中心,从而使用户可以根据业务需求来快速创建和配置应用程序和服务。云服务器通常采用虚拟化技术来实现资源的动态分配和管理,同时提供高可用性、高性能...
    99+
    2023-10-27
    关键技术 服务器
  • 物联网的四个关键技术是什么
    这篇“物联网的四个关键技术是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“物联网的四个关键技术是什么”文章吧。四个关键技...
    99+
    2023-07-05
  • 深入源码解析 ReentrantLock、AQS:掌握 Java 并发编程关键技术
    前言Lock重入锁synchronizedReentrantLock ReentrantReadWriteLock 读写锁ReentrantLock 实现原理AQSAQS 内部实现Node 内部结构Node 变更过程添加节...
    99+
    2023-08-16
    java 开发语言 数据库
  • PHP开发技术与异步编程:为什么自然语言处理是关键?
    PHP是一种广泛使用的服务器端编程语言,它被用于创建动态Web页面、Web应用程序以及企业级应用程序。在PHP开发中,异步编程是一个非常重要的概念,它可以帮助我们在处理高并发和大数据量的情况下提高应用程序的性能和可扩展性。而自然语言处理技...
    99+
    2023-07-05
    开发技术 异步编程 自然语言处理
  • 多线程编程揭秘:操作系统中的并行处理技术
    多线程编程是一种并发编程技术,允许程序同时执行多个任务。这种技术可以提高程序的性能,特别是在需要处理大量数据或执行复杂计算的情况下。 在多线程编程中,程序被划分为多个线程,每个线程可以独立地执行自己的任务。线程之间共享程序的内存空間,但...
    99+
    2024-02-24
    多线程编程 并发编程 操作系统 并行处理
  • 什么是linux多线程编程
    本篇内容介绍了“什么是linux多线程编程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!线程分类线程按照其调度者可以分为用户级线程和核心级线...
    99+
    2023-06-09
  • 云服务器的关键技术是什么意思
    云服务器(Cloud Distributed Server)是一种用于在云端托管计算资源的软件,这些资源可以是本地硬件资源,也可以是互联网上的互联网资源。这些资源通常是由大型的互联网提供商或云计算服务提供商提供的。 云服务器的关键技术包括...
    99+
    2023-10-26
    关键技术 服务器
  • 为什么 PHP、Spring、Bash 和 Linux 是现代应用程序开发的关键技术?
    现代应用程序开发涵盖了许多不同的技术和工具,但其中一些特定的技术已经成为了几乎所有应用程序开发的关键技术。在本文中,我们将探讨 PHP、Spring、Bash 和 Linux 为什么是现代应用程序开发的关键技术,并且演示一些相关的代码。 P...
    99+
    2023-07-30
    spring bash linux
  • Linux容器技术与进程虚拟化技术是什么
    Linux容器技术是一种操作系统层面的虚拟化技术,它通过利用Linux内核的命名空间和cgroups等功能,将应用程序及其依赖的库、...
    99+
    2024-04-28
    Linux
  • Python 异步编程:关键字是什么?
    随着计算机技术的不断发展,人们对于计算机性能的要求也越来越高。然而,单线程的编程模式很难满足这种要求,因为它只能串行地执行代码,无法充分利用多核处理器的性能。因此,人们开始寻求一种更加高效的编程模式,即异步编程。 Python 作为一门高...
    99+
    2023-10-02
    异步编程 关键字 教程
  • 云服务器的关键技术是什么意思啊
    云服务器的关键技术有很多,以下是其中一些: 虚拟化技术:云服务器可以被看作是一个虚拟的物理服务器,可以通过一个公共的资源池来访问和管理资源。它通常使用虚拟机(VM)技术来实现。 云安全技术:云服务器的安全性通常依赖于云安全解决方案。云安...
    99+
    2023-10-27
    关键技术 服务器
  • Java Socket编程关键代码是什么
    本篇内容介绍了“Java Socket编程关键代码是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package sterni...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作