线程性能

随着多核处理器变得越来越常见,软件开发人员就需要构建多线程应用程序 ,从而利用更多的处理能力来实现更高的性能。借助并行线程的强大功能,您可 以将整个工作划分为多项单独的任务,并以并行模式执行这些任务。

但是,线程经常需要相互通信才能完成任务;而且根据算法或数据访问的要 求,有时还需要同步线程的行为。例如,应该以互斥的方式授予线程对同一数据 的同时写访问权限,以避免数据损坏。

同步操作通常是通过使用共享的同步对象来完成的。对于获得该对象的线程 ,将授予其对敏感代码或数据的共享或独占访问权限。当不再需要访问权限时, 该线程将放弃所有权,而其他线程就可以尝试获取访问权限。根据所使用的同步 类型,同时请求所有权可能会使多个线程能够同时访问共享资源,也可能会阻止 某些线程,直到共享对象从上一次获取中释放为止。具体的示例包括:C/C++ 中 使用 EnterCriticalSection 和 LeaveCriticalSection 访问例程的关键部分, C/C++ 中的 WaitForSingleObject 函数,以及 C# 中的锁定语句和 Monitor 类 。

选择同步机制时必须谨慎,因为不恰当的线程同步不但不能提高性能,反而 会降低性能,这与多线程的目标背道而驰。因此,能否检测由于锁争用没有进展 而导致线程被阻止的情况,就显得愈加重要。

Visual Studio 2010 中的性能工具包含一种新的分析方法“资源争用分析” ,此方法有助于检测线程间的并发争用。在 John Robbins 的 Wintellect 博客 文章中,您可以看到对此功能的精彩简介,其网址为: wintellect.com/CS/blogs/jrobbins/archive/2009/10/19/vs-2010-beta-2- concurrency-resource-profiling-in-depth-first-look.aspx。

在本文中,我将演练一个争用分析调查,并讲解可以使用 Visual Studio 2010 IDE 和命令行工具收集的数据。此外,还将向您展示如何在 Visual Studio 2010 中分析数据,您会看到,在执行争用调查时,如何从一个分析视图 切换到另一个分析视图。然后,我会修改代码,并将修改过的应用程序的分析结 果与原来的分析结果进行比较,验证所做的修改确实减少了争用的数量。

从问题开始

作为示例,我将使用 Hazim Shafi 在其博客文章“性能模式 1:识别锁争用 ”(blogs.msdn.com/hshafi/archive/2009/06/19/performance-pattern-1- identifying-lock-contention.aspx) 中使用的同一个矩阵乘法应用程序。尽管 代码示例是用 C++ 编写的,但是我讨论的概念同样适用于托管代码。

示例矩阵乘法应用程序使用多个线程对两个矩阵执行乘法操作。每个线程都 将承担一部分工作,并运行以下代码段:

for (i = myid*PerProcessorChunk;
    i < (myid+1)*PerProcessorChunk;
    i++) {
  EnterCriticalSection(&mmlock);
  for (j=0; j<SIZE; j++) {
   for (k=0; k<SIZE; k++) {
    C[i][j] += A[i][k]*B[k][j];
   }
  }
  LeaveCriticalSection(&mmlock);
}

每个线程都有自己的 ID (myid),并且负责使用矩阵 A 和 B 作为输入,来 计算结果矩阵 C 中的行数(一行或多行)。深入的代码检测表明,没有发生真 正引起歧义的写共享,每个线程都写入 C 的不同行。然而,开发人员还是决定 使用关键部分来保证对矩阵的赋值。我要感谢开发人员的这个决定,因为这给了 我一个好机会,来展示新的 Visual Studio 2010 性能工具能够轻松发现冗余的 同步。

时间: 2024-11-08 17:23:19

线程性能的相关文章

Linux操作系统线程库性能测试与分析

NPTL 成为 glibc "正选" 线程库后,它的性能如何受到很多人的关注.本文就针对 NPTL 与 LinuxThreads 的性能比较,以及超线程.内核可抢占等特性对线程性能的影响进行了全面评测. 一. 前言 在 Linux 2.6.x 内核中,调度性能的改进是其中最引人注目的一部分 [1].NPTL(Native Posix Thread Library)[2] 使用内核的新特性重写了 Linux 的线程库,取代历史悠久而备受争议的 LinuxThreads [3] 成为 gl

Linux性能优化导读

前 言 为什么性能很重要? 如果你曾经坐等计算机完成工作(同时还伴随着敲打桌面.诅咒和好奇:"啥事儿要花这么长的时间?"),你就会知道有个速度快且性能优化良好的计算机系统是多么重要.尽管不是所有的性能问题都能轻易得到解决,但是,了解系统工作缓慢的原因,就意味着有可能采用不同的解决方法:修复软件问题,升级慢速硬件,或者干脆直接把计算机扔出窗外.幸运的是,大多数操作系统,尤其是Linux,都提供了工具用于检测机器运行缓慢的原因.使用一些基础工具,就可以确定系统中哪里速度慢,并修复那些运行效

性能值得期待,AMD Ryzen 5/Ryzen 3处理器模拟测试

AMD在三月初发布了锐龙Ryzen 7处理器,强劲的性能与极佳的性价比受到了玩家大量的好评,市场的反应也相当火,三款产品卖得都相当好,不过首批的Ryzen 7毕竟是高端的八核,售价2499元起步受众还是比较少的,目前来说对Intel的影响有限,而下个月要发售锐龙 AMD Ryzen 5处理器才是直刺要害.想要看实时播报更快收到消息的网友,可以多留意下小超哥(weixin:9501417)朋友圈. 性能值得期待,AMD Ryzen 5/Ryzen 3处理器模拟测试 性能值得期待,AMD Ryzen

使用sysbench来测试MySQL性能的详细教程_Mysql

sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. 目前sysbench代码托管在launchpad上,项目地址:https://launchpad.net/sysbench(原来的官网 http://sysbench.sourceforge.net 已经不可用),源码采用bazaar管理. 一. 下载源码包安装epel包后以便安装bzr客户端: rpm -Uvh http://dl.fedoraproject.org/pub/epe

以操作系统的角度述说线程与进程

原文:http://blog.csdn.net/luoweifu/article/details/46595285 作者:luoweifu 转载请标名出处 什么是线程 什么是线程?线程与进程与有什么关系?这是一个非常抽象的问题,也是一个特别广的话题,涉及到非常多的知识.我不能确保能把它讲的话,也不能确保讲的内容全部都正确.即使这样,我也希望尽可能地把他讲通俗一点,讲的明白一点,因为这是个一直困扰我很久的,扑朔迷离的知识领域,希望通过我的理解揭开它一层一层神秘的面纱.   任务调度 线程是什么?要

如何使用VisualVM进行性能分析及调优

概述 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件.网络.数据库的连接未 释放,未优化的算法等.随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃.为了找 出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化. VisualVM 是一款免费的性能分析工具.它通过 jvmstat.JMX.SA(Serviceability Agent)以及 Attach API 等 多种方式从程序运行时获得实时数

Win8/Win8.1硬盘占用100%问题修复方法

  Win8和Win8.1系统的用户可能有的时候发现了一个100%问题. 有的时候在任务管理器中发现硬盘使用率过高,甚至会达到100%. 这是怎么回事呢? 您并没有运行太多的应用程序呀.. 我经过研究,原来是系统中的一个SuperFetch的造成的,停用SuperFetch就解决了. 如何关闭SuperFetch? Windows8/Windows 8.1的SuperFetch超级预读服务主要是为企业应用与大型协作软件而设计的,个人用户没有必要开启.大型企业使用的企业策略管理等专业软件,数据库启

一文详解英伟达刚发布的 Tesla V100 究竟牛在哪?

众所周知,目前无论是语音识别,还是虚拟个人助理的训练:路线探测,还是自动驾驶系统的研发,在这些人工智能领域,数据科学家们正在面对越来越复杂的 AI 挑战.而为了更好地实现这些颇具未来感的强大功能,就必须在实践中引入一些指数级的更加复杂的深度学习模型. 另一方面,HPC(高性能计算)在现代科学研究中一直起着至关重要的作用.无论是预测天气,新药物的研究,或是探索未来能源,科研人员每天都需要利用大型计算系统对现实世界做各种各样的仿真和预测.而通过引入 AI 技术,HPC 就可以显著提升科研人员进行大数

VisualVM一款免费集成了多个JDK命令行可视化工具

本文主要介绍如何使用 VisualVM 进行性能分析及调优. 开发大型 Java 应用程序的过程中难免遇到内存泄露.性能瓶颈等问题,比如文件.网络.数据库的连接未释放,未优化的算法等.随着应用程序的持续运行,可能会造成整个http://www.aliyun.com/zixun/aggregation/32593.html">系统运行效率下降,严重的则会造成系统崩溃.为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程序的性能进行分析和优化. VisualVM 是一款