当前位置: 主页 > 科技导读 >火影忍者560_多核程序设计技术有什么好书 知乎 >

火影忍者560_多核程序设计技术有什么好书 知乎

多核程序设计技术有什么好书 知乎


多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。多核技术的开发源于工程师们认识到,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,先前的处理器产品就是如此。本回答被提问者采纳
C#多核编程.如何利用cup多核计算
使用Parallel

ConcurrentBag results = new ConcurrentBag();
Parallel.ForEach(GetMains(),
new ParallelOptions { MaxDegreeOfParallelism = 4 },
item =>
{
if (item.pid == pid)
{
results.Add(item);
}
});
求论文关于linux在多核方面的支持,linux是如何支持多核的,在多核的硬件平台下,如何编程来适应多核呢
LinuxSMP上任务调度、共享内存及几种程序设计模型的实现*
(部分内容)

李晓明
wangtao@ieee.org, lxm@pku.edu.cn
北京大学计算机科学技术系网络与分布式系统实验室
北京 100871

摘要本文以在SMP体系结构上的Linux操作系统(Linux Kernel 2.4.13)为考察对象
,分析了任务创建、调度、及任务如何共享内存的机制,考察了线程库LinuxThreads以
及代表共享存储程序设计模型的Omni OpenMP和代表消息传递程序设计模型的MPICH。得
出以下结论:1)在Linux操作系统中,线程是在多个处理器上分配执行的;2)LinuxThr
eads目前尚未利用最新的Linux Kernel中对线程提供的支持,依然实现得不彻底;3)Om
ni OpenMP在Linux操作系统中是通过LinuxThreads实现的,因此行为也就与LinuxThread
s相似;4)MPICH 1.2.2.3版本在共享存储的节点中,通过配置文件的设置,能够直接利
用共享内存完成消息通信,而无需在其中特别加入支持共享存储的安排。

关键词Linux,SMP,调度,共享存储程序设计模型,MPI程序设计,机群

1引言
近来,随着微处理器技术的不断发展以及对称多处理器(SMP,SymmetricMultiprocesso
r)技术的成熟,基于微处理器的SMP体系结构越来越得到人们的广泛应用。这种SMP体系
结构大多含有2-16个微处理器,系统采用总线连接,共享内存储器。这种体系结构也是
组建更复杂的SMP-Cluster(基于SMP的机群系统)或是SMP-MPP(基于SMP的大规模并行
处理机)的基础。认识清楚操作系统对这种体系结构的支持,以及在相应的操作系统中
,并发程序环境的实现,可以使我们更好地以这种系统为基础,进行开发工作,进而,
这也是弄清楚SMP-Cluster或SMP-MPP的节点内(一个SMP系统)并行处理和节点间(多个
SMP系统之间)并行处理两种并行处理层次之间关系的基础,这都是有很大的实际意义的
。目前,支持这种SMP体系结构的操作系统很多,其中比较经济又得到广泛应用的就是Li
nux操作系统。为了简洁,下文中将SMP体系结构下的Linux操作系统简称为Linux SMP。
从应用角度来讲,我们需要弄清楚并发程序环境对Linux SMP的支持,才能写出适合于在
Linux SMP上运行的程序。在SMP系统中,线程概念,又是支持共享内存并发程序设计模
型的一个基础支持,因此,我们还需要考察Linux SMP系统对线程概念本身所做的支持。
当我们继续深入到操作系统的核心,我们就需要了解在Linux SMP中,任务的创建机制、
在多个处理器环境中的调度机制,以及共享内存储器机制。只有分析了这些,才能说对L
inux SMP中的任务并发机制有一个较清楚的认识。
本文就从在Linux SMP上对任务的创建、调度出发,考察Linux SMP中对共享内存存储器
的支持机制,讨论在Linux操作系统中,进程和线程之间的关系,进而分析一种支持Posi
x Threads规范的用户级线程库-LinuxThreads中线程的创建机制;还要分析两种并发程
序环境模型OpenMP和MPI在Linux上的具体实现的并发机制。希望通过这些分析,使读者
能够了解Linux操作系统在SMP上的支持,以及各种并发程序环境实现的原理,以更好地
应用这些系统进行系统开发,或者在此基础上进一步进行研究工作。
本文的分析基于一台含有2个Intel Pentium III 550微处理器的计算机,操作系统采用L
inux 操作系统的一个发行版Redhat 7.2,内核升级为Linux Kernel 2.4.13。LinuxThre
ads采用的是Redhat 7.2发行版本自带的glibc-2.4的版本,OpenMP采用的是Omni 1.3s,
MPI使用的是MPICH 1.2.2.3。
下面,我们就分为Linux SMP上的任务调度与共享内存机制、Linux SMP中线程的实现、L
inux SMP中的并发程序模型三个部分来进行我们的分析。

2Linux SMP上的任务调度与共享内存机制
2.1Linux内核中任务的基本数据结构-任务的结构定义task_struct
2.2任务的调度
2.3Linux SMP中任务共享内存储器的机制

3Linux SMP中线程的实现
3.1Linux操作系统中对用户线程的支持
3.2LinuxThreads线程库的实现

4Linux SMP中的并发程序模型
4.1Omni OpenMP在Linux SMP上的实现
4.2MPICH在Linux SMP上的实现

5结论与总结
本文分析了Linux SMP系统中的任务创建、调度、及任务间如何共享内存储器的机制,对
内核中的任务在Linux SMP系统下的行为有一个较清楚的认识。本文又分析了Linux SMP
对线程的支持,得出在Linux操作系统中,线程组实际上就是相互共享内存的任务组,因
此也就可以在SMP的多个CPU上分配线程。本文接着考察了Posix Threads规范在Linux上
的一个实现LinuxThreads,进一步证实了线程和任务的关系,并认识到LinuxThreads目
前尚未利用最新的Linux Kernel 2.4中对线程提供的支持。
本文又分析了2种典型的并发程序设计模型-共享存储程序设计模型和消息传递程序设计
模型-在Linux SMP上的代表Omni OpenMP和MPICH。通过分析Omni OpenMP的具体实现机
制,了解到Omni OpenMP在Linux SMP中是通过LinuxThreads实现的,因此它生成的线程
在Linux SMP中的调度机制及对SMP的支持与LinuxThreads是相同的。通过对MPICH的分析
可以看到,在基于Intel x86体系结构下的Linux SMP系统中,MPICH可以使用System V
IPC里面的共享内存机制来进行通信,进而得出在Intel X86体系结构下的由Linux SMP组
建的机群系统中,在SysV IPC共享内存机制的限制能够满足的情况下,就可以直接使用M
PICH进行程序设计,而无需在其中加入特别的支持共享存储的安排。要注意的是,当我
们进行MPI编程时,就要安排任务,使通信频繁的任务尽量安排到同一个节点内,使它们
通过共享内存进行通信。
通过本文的分析,我们可以知道,在Linux操作系统下,线程是可以在SMP的多个处理器
上进行分配的。这样,当我们在Linux SMP上编写多线程程序的时候(用LinuxThreads线
程库或者OpenMP),就可以放心地将程序的执行分为几个线程,使它们能够真正地并行
工作。我们还认识到,在Linux SMP上的MPICH,的确可以利用共享内存完成消息通信,
这就使我们对由SMP组成的多节点系统上的MPI消息通信行为有了一个更深刻的认识,我
们可以直接利用这种共享内存消息通信机制,去掉在MPI程序中加入例如Posix Threads
或OpenMP等共享存储程序设计模型因素的考虑,使编程的思维过程更加统一,同时也避
免了不必要的开销。
分析中我们看到,在LinuxThreads中,尚未利用到Linux Kernel最新内核中对线程概念
提供的支持,LinuxThreads下一个版本中应该会使用到这些支持。或者,当我们编写新
的线程库的时候,就要注意利用Linux内核提供的这些支持,以更好地符合线程的概念。

我们还看到,在MPICH1.2.2.3中,对共享内存的支持是通过SysV IPC中的共享内存机制
实现的,这种机制存在着分配的内存大小受系统限制等问题。其实我们可以使用其它方
法来提供对共享内存的支持,这样就可以避开SysV IPC共享内存机制的限制。
6致谢
本文的写作过程中,北京大学计算机科学技术系98级本科生王宇同学找到并整理了关于I
ntel x86体系结构的SMP硬件启动的资料,和从Linux SMP系统在单个CPU上启动一直到激
活其它多个CPU的过程,这里提出感谢。北京大学计算机科学技术系网络与分布式系统实
验室01级硕士研究生袁俊同学提出的一些问题,也对本文的写作有一些借鉴意义,这里
也表示感谢。

参考文献
[1]陈莉君编著,《Linux操作系统内核分析》,人民邮电出版社,2000
[2]Intel Co., Intel MultiProcessor Specification, Version 1.4, May 1997
[3]K.Wall, M.Watson, M.Whitis等(王勇、王一川、林花军、甘泉译),《GNU/L
inux编程指南》,清华大学出版社,2000
[4]马季兰、冯秀芳等,《操作系统原理*与Linux系统》,人民邮电出版社,1999追问

骚年 这才2600字啊, 能否给力点啊。追答

几篇文章,发到你邮箱,我邮箱:xwz88888@
查收一下吧,可以的话,选满意回答!有5000字论文的原创者,那都是高手,会贪你这50个积分?
多核编程与单核编程的区别?


多于单核的好处是可以真正地同时处理多件事情,如果程序想要在多核CPU上获得更好的性能的话用多线程技术是必需的。但是采用多线程涉及到线程间数据同步的问题,程序员必须在线程间协调好对数据的访问和处理。不过我觉得多核编程与单核编程的区别并不是指线程同步问题,因为单核编程同样可以使用多线程,同样需要面对线程同步的问题。同样的代码不经过特别优化,均可以在多核CPU和单核CPU上运行得很好,只不过运行效率不同罢了。所以我觉得多核编程和单核编程的区别在于对多线程技术需求的迫切程度。如果程序针对多核环境来编程,那么必然要采用多线程技术,以获得更好的性能;如果程序只针对单核环境,那么对多线程并不是那么敏感,但如果它采用了多线程,一旦在多核环境运行,它也能获得性能的提升。资源独占锁。由于资源有限,而同时运行的程序无限,因此存在冲突。快要用“锁”解决问题。
单进程/线程,不需要。
多进程/线程,需要。本回答被网友采纳


上一篇:
下一篇:

中国科学技术馆|科技馆|中国科技馆
科技内涵|科技企业|科技园区|科技导读|网站地图