visualstudio2010中调试基于任务

visualstudio2010中调试基于任务

ID:29466576

大小:88.87 KB

页数:11页

时间:2018-12-20

visualstudio2010中调试基于任务_第1页
visualstudio2010中调试基于任务_第2页
visualstudio2010中调试基于任务_第3页
visualstudio2010中调试基于任务_第4页
visualstudio2010中调试基于任务_第5页
资源描述:

《visualstudio2010中调试基于任务》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、VisualStudio2010中调试基于任务本文来自MSDN杂志DanielMoth和StephenToub下载示例代码如果您询问任何一个CPU或GPU硬件厂商,他们都会告诉您未来属于众核技术时代。处理器内核的速度不会像过去四十年那样以指数速度增长,而新的计算机会配备更多内核。因此,应用程序开发人员过去年复一年所依赖的"免费"性能改进将不复存在。为了重新获得由越来越好的硬件所提供的"免费午餐",并通过新的对性能敏感的特性来增强应用程序性能,您需要借助并行性来发挥多内核的优势。在VisualStudio2010所提供的VisualC++10和Microsoft.N

2、ETFramework4中,Microsoft将引入新的库和运行时,从而显著简化在基本代码中表达并行性的过程,同时还支持使用新工具对并行应用程序进行性能分析和调试。在本文中,您将了解VisualStudioVisualStudio2010中调试基于任务本文来自MSDN杂志DanielMoth和StephenToub下载示例代码如果您询问任何一个CPU或GPU硬件厂商,他们都会告诉您未来属于众核技术时代。处理器内核的速度不会像过去四十年那样以指数速度增长,而新的计算机会配备更多内核。因此,应用程序开发人员过去年复一年所依赖的"免费"性能改进将不复存在。为了重新获得由

3、越来越好的硬件所提供的"免费午餐",并通过新的对性能敏感的特性来增强应用程序性能,您需要借助并行性来发挥多内核的优势。在VisualStudio2010所提供的VisualC++10和Microsoft.NETFramework4中,Microsoft将引入新的库和运行时,从而显著简化在基本代码中表达并行性的过程,同时还支持使用新工具对并行应用程序进行性能分析和调试。在本文中,您将了解VisualStudio2010中的调试支持,其中很多内容都以基于任务的编程模型为中心进行讲述。基于任务编程的需要将并行性融入应用程序是为了利用多个内核。单一的顺序工作一次仅在一个内

4、核上运行。要使应用程序使用多个内核,需要让多项工作启用多个线程,以便对该工作进行并行处理。这样,假如只有一项工作,那么要想通过多核执行实现并行加速,就需要将该单一工作划分为可并发运行的多个单元。最简单的方案是静态划分:将工作划分为固定数目、固定大小的单元。您当然不想针对执行该工作的每种硬件配置都编写代码,并且,随着应用程序在更大型和性能更佳的计算机上运行,预先确定固定数目的单元将会抑制应用程序的扩展性。相反,您可根据计算机的具体情况,在运行时动态选择单元数目。例如,您可按一个内核处理一个单元对工作进行划分。这样,如果所有单元所需的处理时间相等,并且每个单元使用一个

5、线程,您就能够使计算机满负荷工作。但是,这种方法仍然差强人意。在实际环境中划分工作负荷时,很少能够保证每个单元都占用同样的处理时间,尤其在您将一些外部因素(如可能在计算机上同时运行并消耗部分计算机资源的其他工作负荷)考虑在内时。在这种情况下,每个内核一个单元的划分最终可能会造成不均匀的工作分配:某些线程将先于其他线程完成其单元的处理,从而造成负荷不平衡,而某些内核在其他内核完成时处于空闲状态。为解决这一问题,您需要对工作进行深度划分,将工作负荷划分为可行的最小单元,以便计算机的所有资源都能参与工作负荷的处理,直到处理完成。如果执行一个工作单元引起零开销,则刚刚提出

6、的解决方法将较为理想,但很少有实际环境中的操作会引起零开销。根据过去的经验,线程一直是用于执行这样一个工作单元的机制:为每个工作单元创建一个线程,让其执行,然后终止该线程。遗憾的是,线程相对来说是重型的,以这种方式使用它们所产生的开销可能会禁止我们所讲的深度划分类型。您所需要的是一种用于执行这些已划分的单元以将开销降到最低程度的更轻型机制-一种可使您更放心地进行深度划分的机制。通过这种方法,您不是为每个单元创建一个线程,而是利用一个计划程序来计划在它所管理的线程上执行的各个单元,从而在保持单元数目尽可能少的同时仍能确保实现最大吞吐量。我们刚刚介绍的是一个线程池,它

7、将线程管理成本在计划给它的所有工作项中分摊,从而将与单个工作项关联的开销降到最低。在Windows中,可通过从Kernel32.dll导出的QueueUserWorkItem函数访问这种线程池。(WindowsVista还引入了新的线程池功能。)在.NETFramework4中,可通过System.Threading.ThreadPool类访问这种线程池。虽然前面提到的API能以相对很小的开销实现分解,但它们主要是针对"即发即弃"工作。例如,.NETFramework4ThreadPool类没有提供任何一致的机制用于异常处理、工作取消、等待工作完成、在工作完成时接

8、收通知等等

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。