多核系统中三种典型锁竞争的加速比分析

news/2025/6/6 7:52:33
多核系统中三种典型锁竞争的加速比分析
目录
1.1      引言... 1
1.2      任务粒度因子与锁粒度因子... 2
1.3      固定式锁竞争中的加速比分析... 3
1.4      随机锁竞争中的加速比分析... 3
1.5      分布式锁竞争的加速比分析... 4
1.6      结论... 5
1.7      参考文献:... 5
1.1 引言
在多核系统中,衡量程序性能的一个重要指标就是加速比,加速比定义如下:
S(n) 单处理器上最优串行化算法计算时间 / 使用n个处理器并行计算时间
众所周知,关于加速比有一个阿姆达尔定律,说的是加速比方面的事情,即加速比S(n)和串行部分所占比例f有关,而与CPU核数n无关,也就是说
                               
当处理器个数n趋近于无穷大时,有以下等式。
                                                  
阿姆达尔定律的提出让整个软件界灰心了许多年,因为只要串行比例为5%,那么不论增加多少处理器,加速比最多也只能达到20。
若干年后一个叫Gustafson的人提出了和阿姆达尔定律不同的意见,得到了一个新的加速比公式如下:
                               
其中的K是一个常数,表示串行执行时间所占的比例。
按照Gustafson定律,加速比显然和CPU核数n是成正比的,CPU核数越大,加速比也越大。
Gustafson定律的前提条件假设串行化代码的规模是固定的,计算规模是随CPU核数增加而增加的。实际情况中,共享资源访问的计算量和程序的计算规模是成正比的,如果共享资源通过锁保护操作而变成串行化执行的话,那么串行化代码的规模将随程序规模的增加而线性增加,这样将导致不符合Gustafson定律的前提条件,而是符合阿姆达尔定律的前提条件。最终得出的加速比将是按照阿姆达尔定律计算出结果。
因此如何消除锁竞争造成的串行化执行就成了程序员需要解决的问题,下面就来先看一下几种不同类型的锁竞争形式对加速比指标的具体影响,在锁竞争的情况中,任务粒度因子和锁粒度因子是影响加速比的重要因素之一,因此需要先看一下任务粒度因子和锁粒度因子的概念。
1.2 任务粒度因子与锁粒度因子
在一个有锁保护操作的程序中,每个任务中的计算可以分为如下图所示的几部分:
图1:任务内的计算分类
其中
ts - 表示锁内计算时间,大小由共享资源的操作时间决定,与共享资源类型有关,并且与程序员的程序设计有关。
tl - 表示 Lock操作和Unlock操作耗费的时间,如果CPU核的速度固定,那么它为一常量。
tp - 表示锁外可并行计算部分耗费的时间,大小与具体的应用类型及程序员的分解有关
为了形象地表示出各段计算间的比例关系,引入两个概念:任务粒度因子和锁粒度因子。
1.        任务粒度因子
任务粒度因子主要是用来反映一个任务的计算量大小,由tl是常量,因此把任务内的有效计算和tl的比值叫做任务粒度因子,记为:
     
2.        锁粒度因子
锁粒度因子反映了一个任务内锁操作的粒度关系,用锁内计算和tl的比值来表示锁粒度因子,记为:
1.3 固定式锁竞争中的加速比分析
在一个固定式锁竞争情况中,是由若干个同时创建的对等任务竞争同一把锁,在这种固定式竞争环境中,假设每个任务都执行一次锁内操作,锁竞争一定会发生并因锁竞争而导致任务排队串行执行锁操作及锁内计算。固定式锁竞争属于实际情况中的常见现象,比如使用前面提到过的OpenMP来创建任务,如果在任务中使用了锁操作的话,那么它就是一种固定式锁竞争。
固定式锁竞争的情况在这篇文章:多核编程中的锁竞争难题里做过分析,如果用前面的任务粒度因子和锁粒度因子代入的话,可以得到固定式锁竞争的加速比如下:
1.4 随机锁竞争中的加速比分析
在实际情况中,除了上节讲过的固定式锁竞争情况外,锁竞争还有一种随机竞争的形式,在多核编程中的任务随机竞争模式的概率分析 一文中对随机锁竞争做过分析。
在随机锁竞争中,各个对等任务运行锁计算的时间是随机的。比如在服务器软件中,各个任务创建后,每个任务都在循环地做同样的计算,而各个任务的运行时间受网络客户端的影响,其处理时间不是固定的,而是随机的,这样将导致各个任务在竞争同一把锁时出现随机竞争现象。
随机锁竞争情况下的加速比期望值如下:
 
 
n        随机锁竞争最坏情况下的加速比
上面计算出的加速比是期望值,在最坏情况下,实际上有 的概率所有的任务都处于锁内计算状态,在这种最坏情况下,只有一个任务在运行,因此加速比为1,如果考虑锁计算开销,那么加速比为
在最坏的情况下,加速比将小于1。
1.5 分布式锁竞争的加速比分析
在一个分布式锁竞争环境中,有多个任务竞争多把不同的锁,不妨设有m个任务竞争r把不同的锁。
如果任务数量m足够大的话,那么运行锁外计算的任务数量将会大于CPU核数,导致每个CPU核上都有任务在运行,此时的多CPU效率为
 
可以看出这种情况下的加速比和CPU核数成正比,并和任务粒度因子有关,任务粒度因子越大,那么加速比也越大。此时加速比和锁粒度没有任何关系。这是分布式锁竞争和普通锁竞争的最大区别。
如果任务数量m不够大,运行锁外计算的任务数量小于CPU核数的话,那么需要计算在有多少个进行锁竞争的任务在运行。

为方便起见 ,令k为运行锁内计算的任务数量,那么这k个任务在竞争r把锁,假设有

鈥?鈥濆簲鐢ㄧ▼搴忎腑鐨勬湇鍔″櫒閿欒銆?hr width=100% size=1 color=silver>
鍙傛暟鏃犳晥銆?/i>
璇存槑: 鎵ц褰撳墠 Web 璇锋眰鏈熼棿锛屽嚭鐜版湭澶勭悊鐨勫紓甯搞€傝妫€鏌ュ爢鏍堣窡韪俊鎭紝浠ヤ簡瑙f湁鍏宠閿欒浠ュ強浠g爜涓鑷撮敊璇殑鍑哄鐨勮缁嗕俊鎭€?

寮傚父璇︾粏淇℃伅: System.ArgumentException: 鍙傛暟鏃犳晥銆?br>
婧愰敊璇?

鍙湁鍦ㄨ皟璇曟ā寮忎笅杩涜缂栬瘧鏃讹紝鐢熸垚姝ゆ湭澶勭悊寮傚父鐨勬簮浠g爜鎵嶄細鏄剧ず鍑烘潵銆傝嫢瑕佸惎鐢ㄦ鍔熻兘锛岃鎵ц浠ヤ笅姝ラ涔嬩竴锛岀劧鍚庤姹?URL:

1. 鍦ㄤ骇鐢熼敊璇殑鏂囦欢鐨勯《閮ㄦ坊鍔犱竴鏉♀€淒ebug=true鈥濇寚浠ゃ€備緥濡?

<%@ Page Language="C" Debug="true" %>

鎴?

2. 灏嗕互涓嬬殑鑺傛坊鍔犲埌搴旂敤绋嬪簭鐨勯厤缃枃浠朵腑:







璇锋敞鎰忥紝绗簩涓楠ゅ皢浣跨粰瀹氬簲鐢ㄧ▼搴忎腑鐨勬墍鏈夋枃浠跺湪璋冭瘯妯″紡涓嬭繘琛岀紪璇戯紱绗竴涓楠や粎浣胯鐗瑰畾鏂囦欢鍦ㄨ皟璇曟ā寮忎笅杩涜缂栬瘧銆?br>
閲嶈浜嬮」: 浠ヨ皟璇曟ā寮忚繍琛屽簲鐢ㄧ▼搴忎竴瀹氫細浜х敓鍐呭瓨/鎬ц兘绯荤粺寮€閿€銆傚湪閮ㄧ讲鍒扮敓浜ф柟妗堜箣鍓嶏紝搴旂‘淇濆簲鐢ㄧ▼搴忚皟璇曞凡绂佺敤銆?/code>

鍫嗘爤璺熻釜:

[ArgumentException: 鍙傛暟鏃犳晥銆俔   System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData) +388134   System.Drawing.Image.FromStream(Stream stream) +8   Dottext.Admin.UploadWord.SaveFile(HttpPostedFile File) +32   Dottext.Admin.UploadWord.Page_Load(Object sender, EventArgs e) +76   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +15   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +34   System.Web.UI.Control.OnLoad(EventArgs e) +99   System.Web.UI.Control.LoadRecursive() +47   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1061


鐗堟湰淇℃伅: Microsoft .NET Framework 鐗堟湰:2.0.50727.832; ASP.NET 鐗堟湰:2.0.50727.832
文章来源:https://blog.csdn.net/zhaowei001/article/details/2273268
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-3785463.html

相关文章

.NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控

Tip: 此篇已加入.NET Core微服务基础系列文章索引 一、关于App.MetricsInfluxDBGrafana 1.1 App.Metrics App.Metrics是一款开源的支持.NET Core的监控插件&#xff0c;它还可以支持跑在.NET Framework上的应用程序&#xff08;版本 > 4.5.2&#xff09;。官方文档地址&…

Java 线程的生命周期及其状态转换

这里写代码片 在线程中&#xff0c;线程主要有5中状态。 来一张图详细看一下&#xff1a; 说明&#xff1a; 单箭头只能单向转换。 双箭头能双向转换。 详解5中状态 1、新建状态&#xff08;New&#xff09; 创建一个线程对象后&#xff0c;该线程对象就处于新建状态。 …

多核编程中的任务随机竞争模式的概率分析

多核编程中的任务随机竞争模式的概率分析前一篇多核编程中的任务分组竞争模式中谈到了让任务分组竞争以解决多核CPU遇到的锁竞争导致的饥饿问题。但是并不是任意的共享数据都能够设计成进行分组竞争的模式&#xff0c;比如最常用的需要用于查找的数据结构&#xff0c;当数据结构…

Java 多线程同步、死锁问题

/** * author StormWangxhu * version 创建时间&#xff1a;2017年11月8日 下午15:19:46 * */ 1、同步代码块 当多个线程使用同一个共享资源时&#xff0c;可以将处理共享资源的代码放在一个使用synchronized关键字来修饰的代码块中&#xff0c;这个代码块被称作同步代码块。…

地理处理模型、案例、教程、培训低价发送

地理处理模型、案例、教程、培训低价发送 模型价格 模型名称价格&#xff08;元&#xff09;描述最大值提取50针对栅格数据&#xff0c;例如气温&#xff0c;降水&#xff0c;水文分析河网提取50针对DEM数据空文件删除100删除某一文件夹或数据库里的记录个数为0的矢量文件CAD拓…

OpenMP创建线程中的锁及原子操作性能比较

OpenMP创建线程中的锁及原子操作性能比较相关文档连接&#xff1a;多核编程中的任务随机竞争模式的概率分析 多核编程中的任务分组竞争模式 多核编程中的负载平衡难题 多核编程中的锁竞争难题 多核编程的几个难题及其应对策略&#xff08;难题一&#xff09;OpenMP并…

Java 网络编程初探(一)

/** * author StormWangxhu * version 创建时间&#xff1a;2017年11月9日 上午10:31:53 * */ 学习目标&#xff1a; 1、了解TCP/IP协议的特点。 2、掌握IP地址和端口号的作用。 3、掌握InetAddress对象的使用。 4、掌握UDP和TCP的通信方式。 1、1、网络通信协议 1、定义…

windows 2000中的专业词语

GC---------全局编录OM--------操作主机DC---------域控制器PDC-------主域控制器AD---------活动目录

多核编程中的任务分组竞争模式

多核编程中的任务分组竞争模式在多核编程中&#xff0c;锁竞争导致的CPU饥饿现象是引起多核CPU性能无法发挥的最重要原因之一&#xff0c;在多核编程中的锁竞争难题一文中已经讲过锁竞争对性能的影响&#xff0c;如何消解锁竞争导致的CPU饥饿现象成了迫切需要解决的问题。目前业…

二十种坚决不能混吃的食物

面对美味佳肴&#xff0c;你是否会想到&#xff0c;有些食物是不能混吃的。否则&#xff0c;你非但不能获得品尝美味的享受&#xff0c;反而会影响健康&#xff0c;甚至危及生命。专家提醒你&#xff0c;以下这20种食物是坚决不能混吃的。1.猪肉*菱角——肚子痛2.牛肉*栗子——…