多核系统的多线程并行计算分析
时间:2025-04-29
时间:2025-04-29
有关多线程的一些期刊文章,和大家分享一下,希望有所帮助
第9卷第2期
2009年6月
Vol 9,No 2南京工业职业技术学院学报
Jun ,2009
JournalofNanjingInstituteofIndustryTechnology
文章编号:1671-4644(2009)02-0051-03
多核系统的多线程并行计算分析
朱葛俊,张 力,盛昀瑶
(常州机电职业技术学院 信息工程系,江苏 常州 213164)
摘 要:基于多核系统下编程环境的变化,比较了各类编程语言对并行计算的支持情况,并利用多线程实现了多核系统下定积分计算,结果表明在多核环境下多线程技术有良好的应用价值。关键词:多核系统;并行计算;多线程;定积分中图分类号:TP311 11 文献标识码:A
多核处理器的出现已彻底颠覆了计算行业长期以来的一个规则,即要提高软件性能就需要开发新一代硬件。在此之前,提高硬件性能大多依靠提高处理器的时钟速度,这是整个计算史上处理器演进的一大特点,然而近两年来这种情况正在改变。
功耗和散热问题引起了越来越多的关注,原本的处理器工程离开了提高处理器速度的轨道,而转向通过增加每块芯片上执行内核的数量来提高并行处理能力。随着多核架构的持续演进,开发人员需要把线程技术作为解决方案的核心(而不仅仅是一种可使用的特性)来进行优化,而线程制作、同步和锁定、线程粒度、调度和进程管理等相关问题将随着时间的推移日益突出,而且对并行可扩充性的规划将会
[1]
变得越发重要。
对于内核数量日益增多的系统,最重要的开发策略就是使可靠的线程实践走向常规化和制度化。可靠的线程实践不仅可带来解决方案性能的短期提升,还能随着所需线程数量
[2]
的增加,在未来优化上述解决方案的线程设计。
进程来构建并发程序的另外一个缺陷就是:进程间的通讯通常都比较低效。
1 1 2 线程(Thread)
定义:线程有时也被称为轻量进程(lightweightproces-ses),指运行中的程序的调度单位。线程必须存在于某个进程中。在基于线程的并发过程中,计算任务被分解成同一个进程间的多个线程来执行,线程间的调度由操作系统内核来进行。由于多个线程都存在于同一进程空间中,它们共享该进程的进程空间,所以它们自己的通讯可以通过进程中的共享资源来进行。基于线程的并发过程中的一个缺陷就是:当一个线程不慎破坏了某个数据时,会同时影响到进程间的其
[3]
他线程使用该数据。
到底应该使用多进程还是多线程的形式来编写程序是最
让开发人员感到困惑的问题之一,本文觉得需要根据具体的应用来决定,但通常情况下使用多线程进行多核编程比使用多进程有更大的优势,这是因为:
(1)线程的创建和上下文切换的开销比进程小得多。(2)线程间通信的方式多,而且简单也更有效率,不需要繁琐的IPC通信。
(3)多线程有庞大的基础库作为支持。
(4)多线程的程序比多进程的程序更容易理解和修改。1 2 编程动机的变化
除了编程形式,使用多线程编程的动机也发生了改变。以往,对于程序员来说,使用多线程的主要原因是为了提高用户体验:如在长时间的计算中提高UI、I/O或者网络的响应速度。而在多核时代编写应用程序却要求充分利用多个计算核心,缩短计算时间或者在相同的时间段内计算更多任务。如在碰撞计算中利用多线程的方式把粒子碰撞检测的计算分散到多个CPU内核可以大大缩减计算时间;也可以利用多核做更细致的检测计算,从而能够模拟更加真实的碰撞。同时,软件开发人员对于编程语言的选择也要更加谨慎。无论开发何种项目,相对于C/C++/Fortran等编译型语言,C#/Java/Python等脚本语言也许是更好的选择。原因在
1 多线程编程的介绍
1 1 编程形式的变化
在多核系统中,为了能够充分地利用多核性能,必须以
分块的思维设计程序、以多进程或多线程的形式来编写程序。现代操作系统中为构建并发程序提供了一般提供了两种机制:
1 1 1 进程(Process)
定义:进程是程序在内存中的一次运行。进程是系统对资源分配的最小单位。一个进程可以包含多个线程。在基于进程的并发过程中,我们将一个计算任务分解成多个独立的进程来执行,它们之间的调度由操作系统内核来进行。由于进程都拥有独立的进程空间,所以如果一旦它们想和外界通讯,就必须使用某种显示的进程间通讯(IPC:inter-processcommunication)机制,这是基于进程来设计并发程序的一个缺陷:进程间的通讯会增加程序构建过程中的复杂性;基于
收稿日期:
2009-03-25
基金项目:江苏省教育厅 青蓝工程 资助项目
:(男,,,
有关多线程的一些期刊文章,和大家分享一下,希望有所帮助
52
南京工业职业技术学院学报 第9卷第2期
[5]
这样,每个矩形面积的和就近似等于该积分的值。
如图1所示:梯形积分 每一竖条都拥有固定宽度的
于脚本语言比较高级,一般都提供了对多线程的原生支持;如C#的System.Threading.Thread、Java的http://ng.Thread及Python的Threading.Thread。相形之下,编译型语言往往都是通过平台相关的库来提供多线程支持,如Win32SDK、POSIXthreads等。没有统一的标准,造成使用C/C++编写多线程程序需要 …… 此处隐藏:4027字,全部文档内容请下载后查看。喜欢就下载吧 ……