电脑桌面
添加盘古文库-分享文档发现价值到电脑桌面
安装后可以在桌面快捷访问

多处理器范文

来源:莲生三十二作者:开心麻花2025-09-181

多处理器范文(精选12篇)

多处理器 第1篇

关键词:多线程,多处理器,进程,函数

引言

Windows操作系统下的多线程编程方式由来已久,早期的多处理器系统价格昂贵,加之多线程编程时相对复杂,因此应用不广泛。自从Intel和AMD公司相继推出单芯片多核处理器以来,多处理器系统身价骤降,现在以Core2Duo为代表的多处理器系统已经成为当前桌面计算机的主流配置,工控机领域内也有大量的成熟产品面世,从硬件条件上为多线程在测控领域的广泛应用打下了牢固的硬件基础,本文就从这两个方面分别进行论述。

1 基本概念

1.1 处理器系统

处理器系统可分为两种(单处理器和多处理器),仅具有一个中央处理单元(CPU)的计算机系统称为单处理器系统,具有两个或两个以上中央处理单元的计算机系统称为多处理器系统。在当前常见的多处理器系统中,多个CPU有以下几种构成方式:

1)多个物理处理器,从硬件形态上看就是主板上包含多个CPU芯片,这些芯片之间通过专用的超高速总线互联;

2)单个处理器芯片中集成多个处理器核心,每个核中均有独立的处理器逻辑单元,处理器核心间的调度和互联控制也集成在芯片上的,因此本质上相当于多个独立的物理处理器;

3)支持超线程技术的单个处理器,在一个物理处理器上提供多个逻辑处理器,每个逻辑处理器有自己的状态寄存器,但执行引擎和高速缓存是共享的。

1.2 进程和线程

程序、进程和线程都是操作系统的概念,程序是可执行代码和资源的组合,进程是一个正在运行的程序的实例;线程是进程内部的一个执行单元,系统创建好进程后,实际上就启动执行了该进程的主执行线程。在Windows系统中,程序的执行是通过进程进行组织和管理的,实质上程序仅仅是代码的集合,它仅包括程序执行代码和必须的资源,而进程则相当于一个容器,它包含了执行一个程序所需要的必要资源,进程必须包括至少一个线程,后面的内容会更详细的说明有关线程的内容。

1.3 多线程

启动程序过程其实就是创建进程的过程,从本质上来说,进程仅是操作系统为执行程序所建立的资源集合,进程本身不执行任何程序代码,真正执行代码的就是线程,可以简单的把线程理解为正在运行的代码,在一个确定的时刻,线程就像是某个具体的函数正在执行。

一个进程中所包含的线程数量超过一个时,就被称之为“多线程”,在当前的Windows系统中用自带的任务管理器就可以查看当前系统中运行的所有进程和其中的线程数。

2 多线程创建方法

Windows是个多任务操作系统,它可以同时创建多个进程,也支持多线程,这两种方式都能够提高系统的利用率,举例来说,我们打开两个文本文件进行交互编辑,如果采用“记事本”程序,则每个打开的文档都是一个独立的进程;如果采用“Word”进行编辑,则“WinWord”进程只有一个,随着打开文档的增多,线程数会增加,其情景可参见图1中系统截屏所示。

从操作系统角度分析,创建进程所需要的资源远大于创建线程所需的资源;另外,多线程的进程中,每个线程都可以访问本进程的内存地址空间,共享DLL映像,如果可能,采用多线程的编程方式会更有效率,但这并非硬性的原则,具体应用还需要具体分析。

开发应用程序时,Windows提供了专门用于创建线程的的API函数,即CreateThread调用,由于使用该API调用需要设置安全属性、配置线程堆栈等,稍显复杂,在实际开发应用程序时最好使用集成开发环境提供的线程操作函数,如采用VC++的MFC进行开发时,可以使用AfxBeginThread函数,本文根据MFC的开发方式进行描述,相关的函数和编码示例均以MFC应用程序风格展示。

AfxBeginThread是重载函数,MSDN中提供了两种函数原型,分别是:

CWinThread*AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParam,int nPriority=THREAD_PRIORITY_NORMAL,UINTnStackSize=0,DWORD dwCreateFlags=0,LPSECURITY_ATTRIBUTESlpSecurityAttrs=NULL);和CWinThread*AfxBeginThread(CRuntimeClass*pThreadClass,int nPriority=THREAD_PRIORITY_N O R M A L,U I N T n S t a c k S i z e=0,DWORD dwCreateFlags=0,L P S E C U R I T Y_A T T R I B U T E SlpSecurityAttrs=NULL);

两个函数只有最初的参数不同,第一个函数首参数是线程入口指针;第二个参数一个参数指针,该指针的内容可以由编程人员任意设定;第三个参数是用于设置线程调度优先级的,默认值是普通优先级;第四个参数是用于设置线程堆栈长度的,一般情况下采用默认参数即可;第五个参数是一个附件标记,默认值指定线程一旦创建成功则立即提交系统调度执行,如果设置为CREATE_SUSPENDED(宏定义,值为4)则线程创建完毕后就被挂起,直到调用ResumeThread才能够执行;最后一个参数是用于设置安全属性的。

第二个函数的首参数是一个CWinThread类的对象指针,后面的参数与第一个函数含义相同。能够使用动态创建等MFC的特性,可以实现比较复杂的封装。以上两个函数的返回值均是CWinThread对象指针。

更常用的方式是第一种AfxBeginThread函数调用,即提供一个线程函数入口,该函数用于实现线程的主要工作任务,函数原型如下:

UINT MyControllingFunction(LPVOID pParam);

参数是一个指针,未确定具体类型,该指针值就是AfxBeginThread中的pParam参数值。函数的返回值则是线程的退出码。如果开发者将线程函数定义成类的成员函数,则该函数必须定义成Static类型,否则会出现编译错误。

3 应用实例

在多处理器系统中,测控程序合理运用多线程技术,可以花费较少费用解决一些以往难以解决的问题,现举一个实例进行说明。

某型号产品测试设备需要完成对被测产品的控制指令下发,按照技术要求,必须每隔1.25毫秒通过RS422通讯接口发送一帧控制指令,采用多处理器系统,可以设计一个专门的计时线程,用无限循环方式获取系统提供的性能计数,从而计算时间间隔,以纯软件方法实现任意时间间隔,实现方法简要说明如下:

首先建立一个基于D a i l o g的M F C应用程序项目,其中的用户界面控制类CComm422TDlg除了实现与用户之间的交互控制外,还负责在测试工作开始后创建指令发送线程,创建线程和结束线程的操作由成员函数OnOpenclose()实现,主要代码如下:

在以上应用中,如果将该控制程序运行在一个单CPU的系统上,则会导致整个系统反应迟滞,连移动鼠标都不流畅,而在多CPU系统中,则一切操作都很正常,如果通过示波器监测通讯接口的状态,可以发现指令发送间隔稳定在预期值,完全达到设计要求。

在多线程编程中,应该注意线程间的同步问题,特别是当多个线程都对某个变量或某段内存进行数据读写时,如果同步失当,可能会导致灾难性的后果。在某些应用中需要用到同步操作时,可以使用事件对象配合等待函数WaitForSingleObject,或者相应的Windows内核对象,如临界区对象、互斥体对象等来进行同步操作。

4 结语

多处理系统的日益普及,带来多线程技术在测试程序中广泛应用,通过多线程技术的应用,大大提升了处理器的利用效率,降低成本。

参考文献

[1]Rand E Bryant(美).深入理解计算机系统(修订版).中国电力出版社,2007-04

[2]Jeffrey,J(美).Windows核心编程.清华大学出版社,2008-09

[3]潘爱民.Windows内核原理与实现.电子工业出版社,2010-05

[4]侯捷.Win32多线程程序设计.华中科技大学出版社,2002-04

多处理器 第2篇

2013年09月18日家庭医生在线

幼儿期宝宝的皮肤十分娇嫩,一旦出现外伤,无疑比较棘手,稍不留意就可能留下疤痕。尤其是夏天,气温高、出汗多,皮肤外伤更容易出现感染。小伤口虽然可以自行处理,但缺乏一定常识就会步入误区!

一、宝宝伤口处理六大误区

1、使用双氧水来清洁伤口

实际上双氧水可能对于伤口的一些愈合细胞来说是有毒性的。许多父母可能会觉得双氧水在伤口表面的泡泡是在清洁宝宝的伤口,但实际上这对于宝宝的皮肤来说是有害的。如果要清洁宝宝的伤口的话最好使用纯净水或者到药房买一些含盐类的消毒药水。

2、伤口流脓表明它出现炎症

事实上在伤口结痂之前,伤口渗出一些黄色的脓汁是正常的,这表明了身体正在尽量让伤口表面形成一层痂从而保护伤口。但是如果伤口的痂形成以后,还是有脓汁渗出的话就要注意了,这可能就是炎症的症状了。

3、伤口应该暴露在空气中

在伤口或者痂上面使用绷带包裹的话有助于保持其清洁。同时还能够防止宝宝用手指把痂块都抓下来,从而手接触到伤口从而引起炎症等,专家还建议家长最好能够每天更换一次绷带。

4、伤口如果痒的话,表明伤口在愈合虽然伤口周围的皮肤开始聚合的话皮肤会有点氧,但伤口周围皮肤的氧也可能是由于对药膏的过敏或者酵母引起的发炎引起的。

5、把绷带撕下的时候最好动作要快

如果将伤口上的胶布撕下过快的话可能会引起伤口的再次撕裂。你应该慢慢地将胶布顺着毛发生长的方向撕下来,如果胶布很难撕下来的话,你可以尝试用酒精或者水在胶布的周围轻拍,令粘合物有所松散。

6、有些伤口需要很长的时间愈合大部分的伤口基本能够在两周内愈合,一些脸上的伤口能够在五天内就愈合。但如果流脓并且出现肿胀的伤口的话,就需要找医生咨询一下。

二、宝宝常见外伤处理方法

1、擦伤

擦伤是指宝宝摔倒擦破的伤口,仅仅是表皮受伤,所以伤势比较轻微,在家治疗就可以了。对于很浅、面积较小的伤口,可用碘油、酒精(红药水)涂抹伤口周围的皮肤,然后用干净消毒纱布包扎好。如果家里没有碘酒、酒精,可用干净的水清洗伤口,然后涂上抗菌软膏,再贴上创可贴。如果擦伤面积太大、伤口上沾有无法自行清洗掉的沙粒、污物,或受伤部位肿胀、严重疼痛、周边机体组织破碎、血流不止,或受伤位置很重要(如脸部),建议还是带宝宝就医。对于大而深的伤口,更应及时带宝宝去外科做局部清创处理,并注射破伤风针剂。

2、裂伤

原则上24小时之内缝合就可以了,不过,如果是脸部受伤,就要及早缝合。还有,严重的裂伤拖的时间越久,细菌感染的可能性就越高,可能导致病情迟延或者残留伤疤,所以应及时就医。

3、刺伤

如果被钉子、针、玻璃等锐利的物品刺伤,一般会有少量血流出,因为伤口窄、深、细菌不易被排出,所以容易引发炎症。假如被刺伤,无论伤口多小,都有患上破伤风的危险,所以务必要及时就医。在紧急处理刺伤伤口时,需要挤压伤口,这时会有血流出,同时细菌也会被排出。所以,处理刺伤伤口时要把手洗干净,并使用消过毒的器具。如果匆忙用手处理刺伤伤口,反而可能导致细菌入侵、产生炎症。

4、割伤

割伤是刀、剪、玻璃片或锋利的器具造成的损伤。被刀割伤的时候,先用清洁物品止血,再用绷带固定住。当伤口流血不止时,就要用直接压迫法止血,即用手指或者手掌直接压住伤口,依靠压力阻止血流,使伤口处的血液凝成块,或用干净纱布压迫伤口止血。如果是手指出现割伤,而且伤口流血较多,应紧压手指两侧动脉,在施压5~15分钟后,一般便可止血。如果是其他部位割伤,均要加压止血。如果实在止不住血,可用橡皮筋在出血处以上部位扎紧,阻断血流,并立即上医院处理。每次橡皮筋止血扎紧的时间不宜超过15分钟,不然会因为血流阻断时间过长而导致肢体坏死。

5、有瘀血

淤血多是外力导致皮下毛细血管破裂,血液从毛细血管破裂处渗至皮下,所以在完整的皮肤上可以看到一片瘀青,此时外渗至皮下的血液已属异物,而且皮下神经丰富,因此疼痛感明显。如果皮肤上出现瘀血,应赶紧用凉水或冰块冷敷消肿。如果受伤部位是胳膊或腿,那就将胳膊或腿抬起,可助消肿。在发生瘀血24小时后,可以用温水热敷患处,以促进局部血液循环,加速瘀血消散。一般来说,皮下瘀血都能被机体慢慢吸收,时间大约需要2周。

6、抓伤

小宝宝聚集在一起玩耍时,都容易被小伙伴抓伤,如果问题不大,适当消毒处理一下即可,不久就会自然痊愈。需要注意的是,在清洗伤口的时候要用流动的水。如果伤得比较重、同时出现发烧,或者被小动物抓伤,应赶紧就医治疗。

7、砸伤或挤伤

在门缝中被挤伤或被石头等坚硬的东西砸伤时,要注意用冷敷。对于砸伤的伤口来说,绷带缠得过紧只会增加伤痛,没有什么治疗的意义。如果在门缝中被挤伤,而且伤口内部因充血呈现紫色,那就很可能出现了骨折,应尽快就医。

8、被动物咬伤

被狗、猫等动物咬或抓伤后,切忌像被毒蛇咬伤一样对伤口进行挤压,以防病毒以更快的速度进入神经系统。可彻底冲洗,先用肥皂水、清水、洗涤剂或对狂犬病毒有可靠杀灭效果的碘制剂、乙醇等,彻底冲洗伤口至少20分钟。在彻底冲洗后,用2%~3%碘酒或75%酒精涂抹伤口,以清除或杀灭局部的病毒。

多任务处理能力是否应提倡? 第3篇

我们都愿意相信我们可以同时做很多事情,我们的注意力是无限的,但是这只是一个永恒的神话。实际上,我们能做的只不过是注意力在任务之间的快速转移。这将会产生两个不好的后果:第一,我们没有给一件事情足够的注意力,第二,我们降低了应对所有的任务所需注意力的质量。养成处理单一任务的习惯,将会使我们大脑的神经网络向好的方向改变,增加连通性。除此之外,这还被认为有防止老年痴呆的作用。事实证明,已参与过五次注意力控制培训课程的年长成年人的大脑活动模式已经开始显现出更接近于年轻成年人的大脑活动模式的倾向。

我们以为人们将会意识到他们不擅长多任务处理并改掉这个习惯。但是因多巴胺和肾上腺素刺激的反馈回路所造成的认知错觉,会使得多任务处理者认为自己做的很好。部分原因在于公司在工作场合错误地引导与鼓励员工进行多任务处理。很多管理者会给员工强加一些规则,如“你必须要在15分钟答复邮件”,或者“你必须保持聊天窗口开启”,但是这就意味着你要分散注意力,停止正在做的事情,分割前额皮质上的大量资源,而这个前额皮质上专注任务资源的形成则需要成千上万年的磨练。这个专注任务的模式才能够带给我们金字塔、数学、伟大的城市、文学、艺术、音乐、青霉素以及可以飞到月球的火箭等伟大的发明。这些发明在分散的两分钟富余时间中是不可能实现的。

最终赢得生产力效率竞争的公司都是怎样的?它们不仅保证员工的工作时间段,还允许他们有间隔的休息、小憩与锻炼的机会,同时为员工提供一个放松、平静、有序的工作环境。如果你一直处于一个紧张的环境中,总是有人要求你不断去产出,你将不可能拥有深刻的见解。这就是谷歌在总部安置乒乓球台的原因。研究发现,随着每周工作时间的下降,生产率反而升高,明显暗示着适宜的娱乐休闲和再充电的时间对雇主和员工都是有利的。伴随着睡眠的剥夺的过度工作将会导致员工易于犯错,而这些错误将需消耗比过度工作更长的时间去去弥补。(编译:郑丽莎;来源:http://www.strategy-business.com/)

多处理器系统内存读写效率研究 第4篇

1 存储器的层次结构

在理想情况下,编程者总是希望存储容量无限大,而访存速度又是尽量快。解决这个问题的一个较经济的方法就是采用存储器层次结构,其依据是程序访问的局部性原理和内存技术的性能价格比原则。所谓程序的局部性原理,就是认为大部分程序不是均衡的访问所有代码和数据。而内存技术的性能价格比原则是,存储技术越快,价格越低,因此存储读写越快,存储器容量越小。为了解决存储器读写速度与存储器存储大小之间的矛盾,依据程序的局部性理论,计算机的学者们提出了一种较为经济的解决办法,就是存储器的层次结构。如图1所示。

为了匹配CPU的高速计算,越是快速的存储器,离CPU越近,当然,考虑到性价比,存储量也越小。当CPU计算需要访问数据的时候,则在离自己最近的存储器层次读取数据。当相应的存储器层次访问不到相应的数据,则在更远更慢存储量更大的存储层次访问数据,如果依然访问不到,则再往更远的一层访问,以此类推。我们称在相应的存储器层次能访问到目标数据称为命中,不能访问到目标数据称为不命中。由于程序的局部性原理,在低层次离CPU较近的存储器层次命中的概率非常的高。在现代计算机系统中,大部分程序的低层次存储器Cache命中率高达90%以上[3]。

随着CPU性能的提高,存取效率和计算速度之间的不平衡性变得越来越显著,因此存储层次的重要性不断增加。例如,在1980年,微处理器是不带Cache的,但是到了2001年,处理器内部通常带有两级Cache。随着多级存储结构的发展,数据的一致性问题也变得越来越复杂。所谓的数据的一致性问题,就是不同存储器层次数据不一致的问题。举个例子,当CPU要读写数据时,总是操作离自己最近的存储器,而当CPU改变了低层次存储器,比如Cache,中的数据时,由于存储总线的速度较慢,因此大部分的系统结构,都不会立即把Cache中相应的数据块写入高一层的存储器,比如内存。那么在CPU改变Cache后,到Cache把相应数据块写入内存中这段时间。Cache中的数据和内存中的数据时不一致的。这就是多级存储层次中的数据一致性问题

2 多处理器的高速缓存一致性

在多处理器系统中,数据的一致性问题的影响变得更为严重[4]。因为多处理器系统中,并行程序并非像单处理器系统中的“伪并行”运行,而由于多处理器能够同时执行不同的指令流,并行程序变成了“真并行”运行。而此时,数据的不一致性造成的影响会更为严重,而相对的Cache性能成为影响多处理器系统的关键资源[5,6]。

图2反映的是一个在多处理器结构中比较流行的二级Cache的存储器层次结构。和CPU绑定在一起的是L1 Cache,速度极快,接近于CPU速度。而多个处理器,公用二级Cache,也就是L2 Cache。那么当CPU1和CPU2同时读写一块内存时,会造成CPU1中的L1 Cache的数据CPU2中L1 Cache的数据不一致。

举个例子,CPU1修改内存地址为A的数据,由X1变为X2。而此时CPU1发现地址A的数据由于最近读写过,存在于L1 Cache中。那么CPU1会把L1 Cache中地址A的数据由X1修改为X2。假设此时CPU2要读地址A的数据,并且L1 Cache中也存在地址A的数据。而由于存储器层次的数据不一致性,如果CPU L1 Cache中的数据还未来得及写回,会导致L2 Cache的数据与CPU1的数据不同。进而导致CPU2中L1 Cache中地址A上的值还是X1,并未修改为X2。这样就会造成多处理器结构中的高速缓存一致性问题。

一般情况下,如果在一个存储系统中读取的任意一个数据项返回的结果都是最近写入的数值,那么可以认为该存储器是一致的。简单来说,存储器行为包括两个方面,第一个方面叫做高速缓存一致性,它定义了读操作可以返回什么样的数值。第二个方面较存储器的一致性,它定义了写入的数值什么时候才能被读操作返回。第一个性质为了保证程序的顺序,第二个性质定义了所谓的存储器一致性是什么。

为了解决高速缓存一致性问题,处理器的设计人员在硬件上引入了一个协议,称为高速缓存一致性协议来,来解决该问题。采用比较广泛的有两类协议,目录式协议和监听式协议[7]。目录式协议是把所有物理块共享状态存放在一个地点,通过访问目录,来同步数据。监听式就是在每个含有物理存储器中数据块副本的高速缓存还要保留在该数据块的共享状态,但是并不集中保存状态。高速缓存通常放在共享存储总线上,所有高速缓存对总线进行监听,来确定是否含有自己请求数据块的副本。

因此在多处理器同时对同一块内存进行操作的时候,会造成L1 Cache的一致性同步开销和L2 Cache缺失,这与单处理器系统有本质上的不同。因此在多处理器系统中,多处理器对相同内存操作的效率,影响着多线程程序对内存的读写效率。

3 多处理器内存读写代价测试方法

3.1 测试方法和思想

该文测试方法是,设置不同的线程和CPU的绑定关系,使多线程对同一块内存进行读写,通过测量多线程对内存的平均读写延时,来评估多处理器系统内存读写效率。

3.2 测试对象

该文测试方法的测试对象,是多线程程序对相同内存的读写延时。具体的测试指标有两种,一个是在不同线程在不同核上对同一块内存读写延时,一个是不同线程在相同核上对同一块内存操作的读写延时。

3.3 测试流程

测试流程如图3。

1)初始化一块共享内存区域MEM,大小为100K,因为涉及多线程同步操作的问题,防止编译器优化,使用变量修饰符volatile。

2)初始化两个读写线程,为了使测试过程使其他线程的影响变为最小,把两个读写线程设置为高实时优先级。

3)设置具体的线程和处理器的绑定状态,该文测试方法中只有两种情况,一种是不同的线程绑定到不同的处理器上,一种是不同的线程绑定到相同的处理器上。

4)这里开始转入读写线程操作。因为涉及的同步操作,需要保护好操作的临界区,故需要使用互斥锁Mutex保护临界区。

5)记录时间t1。

6)先对共享内存MEM做读操作,然后再对MEM做写操作。

7)记录时间t2,t=t2-t1。

8)解开互斥锁Mutex。

9)检查是否达到测试次数M。M为需要重复的测试次数。求M次测试结果的平均值,并输出结果。

4 多处理器内存读写代价测试结果以及结果分析

进行多次试验,测试机配置为:CPU:Intel(R)Core(TM)Duo CPU E7500,内存:2GB,操作系统:Ubuntu 11.10操作系统内核:Linux 3.0。得出以下测试结果:

表1列出了不同负载下的高实时优先级的测试结果。通信线程数是指服务进程中通信线程的数量,负载数量是指负载客户进程的数量。因为LTP测试方法是测量多个客户进程负载下的平均延时,那么类似于在多客户进程负载下,普通客户进程的通信延时。于是,该文为了与新测试方法进行比较,也测试了低优先级客户进程在负载下的通信延时,测试结果也在表1列出。

由测试结果,可以看出。不同线程绑定在同一个处理器上时,内存读写表现出了较高的效率,绑定在同一个处理器上,延时大概比绑定在不同的处理器上减少4%~5%。而线程绑定在不同处理器上时,也表现出更高的不稳定性,其标准偏差比绑定在同一个处理器上时高81.5%。

5 多处理器架构下并行程序优化建议

从单处理器系统到多处理器系统是一个飞跃,对编程者也是一个挑战。由上述测试结果可见,无论是在相同处理器上还是不同处理器上,多线程在访问共享内存时都会造成较大的性能损失。因此在进行并行程序的编写时,应提高线程的独立性,即减少线程间的数据相关。这样,每个线程的指令流访问独立的数据流,提高程序的并行性。

但是在多线程程序中很难保证每个线程之间的数据不重合。这样必然涉及共享内存的访问和数据访问的同步。由上述测试结果可得,在线程间共享数据较大时,尽量使共享数据的线程绑定在同一个内核上进行,这样不仅内存读写效率提升,而且效率也更加稳定。

6 结束语

相对于单处理器系统,多处理器系统虽然在性能上获得了大幅度的提升,但是也使得硬件和软件结构变得更加复杂。使得以前相对简单的性能问题,由于多处理器的并行,变得比以前复杂。

该文首先分析了存储器的层次结构,引出了在多处理器结构下,高速缓存一致性的问题,指出在多线程同时对共享内存进行操作的时候,会出现线程同步和多处理器数据一致性带来的性能损耗。基于这一点,设计了面向多线程内存读写延时的内存读写效率的测试方法。并通过在Linux平台上的实验,指出了绑定同一个处理器,会使得对共享内存数据访问的效率提高。并基于这个测试结果给出了对并行程序的优化建议。

摘要:通过分析存储器的层次结构,引出了从单处理器系统到多处理器系统存储器层次结构的新问题,即高速缓存一致性的问题。因此,在多线程同时对共享内存进行读写操作时,Cache缺失和多处理器数据不一致会带来的相应的内存读写性能损耗。该文基于这个问题,设计了面向多线程内存读写延时的内存读写效率的测试方法。并通过的实验,指出了绑定同一个处理器,会使得对共享内存数据访问的效率提高。并基于这个测试结果给出了对并行程序的优化建议。

关键词:多处理器系统,内存性能,性能评估

参考文献

[1]Jeffey K,David O,Mark H,et al.The stanford FLASH multiprocessor[C]//Chicago,Illinois,USA:Proceedings of the 21st Annual ACM/IEEE International Symposium on Computer Architecture,1994:302-313.

[2]BROWN A,SELTZER M.Operating system benchmarking in the wake of lmbench:a case study of the performance of netbsd on the Intelx86 architecture[C]∥ACM SIGMETRICS International Conference on the Measurement and Modeling of Computer Systems.NewYork,USA:ACM,1997:214-224.

[3]左琦,黄洋.嵌入式应用环境下的Cache性能分析[J].计算机工程,2006(1).

[4]Fedorova A,Seltzer M,Small C,et al.Throughput-oriented scheduling on chip multithreading systems,Technical ReportTR-17-04[R].Cambridge,USA:Harvard University,2004.

[5]卢宇彤,杨学军,所光.一种面向多核系统的并行计算任务分配方法[J].计算机研究与发展,2009,23(2):359-364.

[6]Kandemir M,Chen G.Locality-aware process scheduling for embedded MPSoCs,2005[C]//Proceedings-Design,Automation and Test inEurope,DATE 05,vⅡ,Munich,Germany,March 7-11,2005.Munich,Germany:IEEE Conference Publications,2005.

数据库数据处理故事多 第5篇

这两天别人总在问我,你们基础出了什么问题,为什么总在导数据。数据没问题,为了做足准备,我们需要将8期版的最全的数据整理到10期数据库中。

背景介绍:问题在于从8期版基础系统到10期版基础系统在数据库设计方面有了很大的变化,例如10期学生表中存放着班级外键,而8期表中是用第三张表来维护关系的。10期的上课班’ 中需要课程和老师的关系,而再8期表中需要多个表才能将其关联起来。 20来张表,各种外键关联,最多的一个表存50多万条数据,怎么做,怎么做快 是摆在我们面前一个迫切需要解决的问题。

故事一:

由于8期表间都是通过第三张表联系起来的。而像1:n的关系10期表基本都是外键之间关联的。

例如,我想在10期表添加学生信息(包括学号,姓名,班级外键等)。我需要先从8期学生表中导出学生信息(不含班级外键)再从班级和学生的第三张表中导出学生和班级的关系,然后一一对比将两个表整合到一张表上去。

这样做是我们最初最天然的想法,当然效率低而且人工核对出错率极高。于是我们改用PlanB。在数据库中建立学生和第三张表的视图,然后将视图导出到excel。

故事二:

建立视图的时候,我们又遇到另一个问题。将两个表联合起来,发现学生总共为22052行,而视图总数为22191 行。如果数据没问题的话,这是不应该出现的。因为按道理来说,学生和班级两个表的n:1关系, 而且表数据无冗余。应该无论做链接还是右链接数据都是一样的。

于是我们用了一个查询语句 select ClassID from BasicClassEntities where ClassID not in(select ClassID from BasicStudentEntities)先原谅我用了这样一条效率低的查询语句。我们查出来有正好139个班级里面没有学生。后来再研究发现原来这里面有100多虚拟行政班( 是为考试留的),也真的有三个班是由于人为失误没有加上关联,

利用表和表之间的关系查询,是真的可以检查错误的,此处就不一一列举了。

故事三:

我想到了之前的一道面试题。于是自己建表实践了一下。如题是:A表有5条数据,B表有8条数据。如果两个表有3条公共数据,那么分别用交叉连接,左右连接能得到多少条数据。vcD4KPHA+yrXR6dK7o7rI5828PC9wPgo8cD5zdHVkZW50ILHtwO+1xMr9vt2hoyAgICAgICAgICAgICAgICAgCiAgICAgICB0ZWFjaGVyse3A77XEyv2+3TwvcD4KCjxwPjxpbWcgc3JjPQ==”www.2cto.com/uploadfile/Collfiles/0601/2015060110063584.png“ width=”260“ height=”132“ alt=”">

通过学生表和教师表分别进行右左连接,如图所示。

实验二:如图 在此基础上,将3条公共数据 改为不是一一对应,现在是有两个ID一样都和学生同一ID一致。

显示结果如下。

看!显示内容如下

故事四:

第一次将整理好的数据excel 复制到数据库中的时候,我们采取的方法是将excel字段和数据库字段设置成一致的然后之间 ctrl+c 再ctrl +v 。结果2万多学生需要10多分钟才能导入进去。于是我们利用数据库自带的导入excel功能,发现即便是50万数据也能瞬间搞定。只是导入后会新生成这样一个表。

然后从表数据到另一个表上 使用语句 insert into BasicStudentEntities select * from BasicStudentEntities$ 也是秒秒钟的事。

多处理器 第6篇

1、污水处理市场前景巨大;

2、全方位、多技术线路水

上海巴安水务有限公司(以下简称:巴安水务)是一家专门从事环保水处理业务,为电力、石化等大型工业项目和自来水厂、污水处理厂等市政项目提供持续创新的智能化、全方位水处理技术经济解决方案。目前公司已在多项技术领域处于行业领先水平,在火电厂凝结水精处理市场中,公司在公开招标中对空冷机组凝结水精处理系统的中标率为42.6%,领先于行业其他企业。2008年-2010年,公司净利润分别为1106.38万元、1994.99万元、3113.51万元,体现了良好的成长性。

污水处理市场空间广阔

国家的高度重视和产业政策的支持推动了市政污水处理行业的快速发展,截至2009年末,我国已建成城市污水处理厂约1100座左右,日处理能力达到8664万吨/天,城市污水处理率达72.3%。

我国市政污水处理与回用行业正处于逐步从达标排放到“低排放”及污水处理回用的发展过程当中,预计未来行业发展前景广阔。据悉,“十二五”和“十三五”时期,我国废水治理投入将分别达到12781亿元和15603亿元,其中用于工业和城镇生活污水的治理投资将分别达到5753亿元和5578亿元。

随着国内水资源日益紧张,市政污水处理和基于污水再利用的再生水市场发展潜力巨大,假定“十二五”期间,新增污水处理能力和再生水日利用能力保持“十一五”期间要求,则需新增日处理10万吨的中型再生水项目至少70个,按照再生水处理系统造价3,000万元,市场容量在21亿元以上;需新增日处理10万吨的中型污水处理厂450个,按照符合污水排放标准的污水处理系统造价1,500万元,市场容量在60亿元以上。

全方位、多技术线路水处理企业

目前,水处理的常规技术已经比较成熟、通用,水处理设备系统集成服务商主要是合理的运用各种技术,然后根据整体设计方案,选择适用的水处理设备,再将各设备集成为成套的水处理系统,以满足各种水处理需求。整体而言,公司的核心竞争优势可以分成两个层面:

(1)自主研发和技术创新能力

巴安水务作为创业型企业,一直都重视自主研发和技术创新,目前公司已经取得了14项专利。公司掌握了所提供的主要水处理系统如凝结水精系统、中水回用系统、市政给水系统、市政污水系统等相关技术,并不断创新,这使得公司在整体系统的设计和理解上具有不断创新的优势。

(2)水处理系统设计资料库齐全

巴安水务成立10多年以来,已经完成了近200个水处理项目,这样帮助公司积累了丰富的技术资料和实例资料。资料库的业务涵盖工业和市政水处理行业,极大地提升了公司系统设计能力和系统改进、创新能力。

除了以上两点核心竞争优势以外,巴中水务的多技术、多产品、多行业的“三多”品牌形象无疑给公司带来了更大的商机。巴中水务利用水处理系统的核心基础技术,整合了几个主要的技术要点,然后再此基础上通过工程实践,搭配组合各种水处理技术,打造出丰富的产品线。这极大地帮助了企业在承揽项目时财务多个水处理系统打包定价策略,为客户提供全套的“交钥匙”服务。

多处理器 第7篇

一直以来,处理器芯片厂商都是通过不断提高主频来提高处理器的性能,随着芯片制程工艺的不断进步,单个芯片上集成的晶体管数已超过数亿,传统处理器体系结构技术面临瓶颈,很难单纯通过提高主频来提升性能。而且在提高主频的同时,带来功耗的迅速提高以及散热等问题非常严重,这些也是直接促使单核转向多核的深层次原因。从应用需求来看,日益复杂的多媒体、科学计算、虚拟化等多个应用领域都呼唤更为强大的计算能力。

在这样的背景下,各主流处理器厂商将产品战略从提高芯片的时钟频率转向多线程和多内核方面。多核处理器是将两个或更多的独立处理器核封装在一个集成电路(IC)芯片中的一种方案。近年来,多核处理器日益普及,这种设计大大增强了处理器的处理能力。

1 多核并行计算

1.1 多核并行计算定义

并行计算是同时使用多种计算资源解决计算问题的过程。多核并行计算是由运行在多个部件上的小任务合作,来求解一个规模很大的复杂计算问题的一种方法。随着多核架构的普及,开发人员把线程技术作为解决方案的核心。并行计算的功能主要有:降低单个问题求解的时间;增加问题求解规模、提高问题求解精度;容错、更高的可用性、提高吞吐率。并行计算面临众多的挑战,包括如何协调、如何控制、如何监视、并行编程、采用多线程解决同一个问题和在并行线程之间的通信与同步机制等。

并行化的主要方法是分而治之,分为任务并行和数据并行。任务并行根据问题的求解过程,把任务分成若干子任务(任务级并行或功能并行)。数据并行根据处理数据的方式,形成多个相对独立的数据区,由不同的处理器分别处理。并行算法的设计步骤可分四步:任务划分、通信、任务组合、处理器映射。首先将给定问题划分成一些小的任务,划分方法可以使用域分解法和功能分解法;其次分析各个任务之间的通信需求,通信可以是局部的和全局的、静态的和动态的、结构化的和非结构化的以及同步的和异步的;然后使用组合方法,在尽可能保持灵活性的同时,减少通信和开发成本;最后将各个任务分配给处理器,使用负载平衡和任务调度技术,力求使用最少的执行时间[1]。

1.2 多核并行计算性能评测

1.2.1 Amdahl定律与Gustafson定律

加速系数定义为:S(p)=使用单处理器执行时间(最佳的顺序算法)/ 使用具有p个处理器所需执行时间。阿姆尔达定律表示为:

S(p) = p / (1 + (p-1)f)

其中S(p)表示加速系数;

p表示处理器的个数;

f表示串行部分所占整个程序执行时间的比例。

阿姆尔达定律认为计算负载固定不变,根据阿姆尔达定律,并行系统所能达到的加速比上限为1/f

Gustafson提出了和阿姆尔达定律不同的假设来证实加速系数是能超越阿姆尔达定律的限制的,Gustafson认为软件中的串行部分是固定的,不会随规模的增大而增大,并假设并行处理部分的执行时间是固定的。Gustafson定律用公式描述为:

S(p) = p + (1-p)fts

其中fts表示串行执行所占的比例;

Gustafson定律中的加速系数几乎跟处理器个数成正比,软件的性能将随着处理个数的增加而增加。

1.2.2 内存受限模型并行计算加速比

内存受限模型[2,3]是Amdahl模型和Gustafson模型的一般形式,进一步放宽了对计算时间不变的限定,认为只要存储空间许可就可以增加问题规模并允许延长执行时间,从而获得了更有实际意义的加速比描述。参数G(p)表示当可利用的内存空间和计算节点都扩大p倍时,程序中并行工作负载增加的倍数。

S(p) =(f+G(p)(1-f))/ (f+G(p)(1-f)/p)

在加速比模型中考虑了cache与主存之间的调度开销,对加速比的分析更加准确,在一定程度上可以解释实验中出现的超线性加速现象,并有助于优化并行系统中cache的使用。

1.2.3 多核并行计算加速比

多核系统中,加速比还受并行开销、锁竞争、负载平衡三个方面因素的影响。加速比与CPU核数成正比,并行计算开销不会影响加速比随CPU核数增加而线性增长的特性。锁竞争导致代码的串行化,其比例取决于程序设计,若采用集中式锁竞争模式,加速比有一个极限值,加速比符合Amdahl定律;若采用分布式锁竞争模式,加速比可以随CPU的增加而线性增长,符合Gustafson定律。

负载均匀度是衡量负载平衡的指标,表示为:

b(p)=各CPU平均使用时间/最大CPU使用时间

设实际并行代码运行时间为tm,串行代码运行时间为ts,

b(p)=ts/(ptm)

S(p)=ts/tm=nb(p)

可见,加速比与负载均匀度成正比,理想情况下,b(p)=1,此时,加速比等于CPU核心数。

2 Visual C# .NET多核编程

比较流行的并行编程环境主要有三类:消息传递、共享存储和数据并行。如MPI、PVM为消息传递类,OpenMP为共享存储类。.NET 4.0引入了若干并行编程新技术,使多核编程更为便捷。主要包括TPL、PLINQ(并行LINQ)和用于并行编程的若干数据结构。并行编程架构如图1所示。

在TPL中,基本的抽象是任务,而不是线程。任务是Task类的实例,可以被取消和等待、可以返回值、可以在其完成时调用另一个任务。当使用Parallel.For和Parallel.ForEach时,甚至Task对象本身也是隐式的。在代码中,只需简单地提供完成所期望工作的委托,其余的都由TPL来负责处理。在默认情况下,TPL使用它自己的任务调度程序,该程序是与.NET ThreadPool集成在一起的。也可以提供自己定制的任务调度程序,使用另外的线程调度机制。在任务和线程之间不存在固定的关系,一个线程可以在任何给定的并行代码块中接连运行几个任务,一个任务也可以定义一个在同一线程或不同线程上运行的子任务。一个任务也可以调用在别处被定义的另一个任务。

TPL可动态调整并发度,以最有效地利用所有可用的处理器。基于TPL的并行代码不仅可以在今天的双核和四核计算机上运行,而且不需要重新编译,就可以自动扩展到即将成为桌面标准的更多核的计算机。

3 并行处理实例

求两个字符串的公共子串算法可以求出两个字符串的最长公共子串。算法的基本思路是:对于长度为m的字符串string1和长度为n的字符串string2,建立n行m列数组mat[n][m]存储串的对应矩阵,若行数对应的字符和列数对应的字符相同,即string2[i]=dtring1[j], 则mat[i][j]=1,否则mat[i][j]=0。沿着平行于主对角线的方向扫描,连续为1 的数组元素对应的子串为两个字符串的公共子串。算法的时间复杂度为O(mn),所需的二维数组为辅助空间,故空间复杂度也为O(mn)。

下面实例通过对不同数目文档进行检测,在双核和四核CPU的计算机上,对任务串行处理需要的时间和并行处理需要的时间进行比较,计算加速比。软件环境为VS 2010。

(1) 求两个字符串公共子串的算法

下面算法求得两个字符串string1和string2中最长公共子串的长度。

算法对不同数目的文档进行检测,检测具有最长公共子串的两个文档。算法串行与并行处理多任务的时间及加速比如表1所示,由加速比可以看出,在任务数目较少的情况下,加速比较低,随着任务数目的增加,加速比有所提升,但达到峰值后,随着任务数目的增加,加速比略有下降。如图2所示。

(2) 改进算法

对于较长的字符串而言,算法所需的额外空间过大,需要进行改进。实际应用中,可以建立m+n长度的一维数组vec取代二维数组mat,记录mat中各对角线的值连续为1的个数。以string2为主序,逐次扫描string1,若对应字符相等,即sriing2[i]=string1[j], 数组元素vec[i-j+m-1]加1,否则vec[i-j+m-1]清0,vec数组的元素值动态地记录了公共子串的长度。改进后,算法的空间复杂度为O(m+n),时间复杂度不变,串的对应矩阵与一维数组的关系如图3所示。

算法描述如下:

改进的求最长公共子串算法表现如表2所示。由执行时间可以看出,在多任务情况下,无论是串行执行,还是并行执行,时间效率均有较大提升。并行加速,加速比能够达到3.8以上,如图4所示。

与原算法相比较,改进后的算法使用辅助空间大大减少,空间效率提高了一个数量级,减少了任务并发调度的锁竞争,更适合多任务并行处理数据。

4 结 语

多任务并行处理技术能充分发挥多核处理器的数据处理能力。传统的算法设计没有考虑到多核处理器结构特点,不能充分发挥多核并行处理能力。本文针对求两个字符串的公共子串算法,提出了一种改进算法。改进后的算法能够有效地提高加速比,提升多核处理器的数据处理能力。

摘要:目前,多核处理器已经越来越普及,但是现有算法并不能有效地并行处理数据,造成硬件资源的浪费。为了提高多核处理器的数据处理能力,针对求两个字符串的公共子串算法,提出一种改进方法,在VS.NET环境使用TPL(任务并行库),调度改进的算法处理数据。实验结果表明,改进后的算法可以充分利用多核处理器并行处理数据的特点,提高并行加速比,大大提高数据处理效率。

关键词:多核,多任务,并行算法,任务并行库,VS.NET

参考文献

[1]陈国良.并行计算的设计与分析[M].2版.北京:高等教育出版社,2002.

[2]Xua X H,Rao L M.Another View on Parallel Speedup[C]//Proc,Su-percomputing,1990:324-333

[3]薛一波,韩承德.Cache对加速比的影响[J].计算机学报,1997,20(1):27-36.

[4]Fullman J D.NP-complete scheduling problrm[J].Journal of Comput-er and Systen,1975,10(3):384-393.

[5]刘轶,张昕.一种面向多核处理器并行系统的启发式任务分配算法[I].计算机研究与发展,2009(6).

[6]袁云,邵时.基于多核处理器并行系统的任务调度算法[J].计算机应用,2008,28(12):280-283.

[7]王顺绪.多核计算机上并行计算的实现与分析[J].淮海工学院学报,2009,18(3):30-32

[8]王文义,王兴启.基于多核处理器的有锁编程与非阻塞算法研究[J].中原工学院学报,2010.

[9]MSDNMSDN Library.NET DevelopmentBeta Versions and Previews.NET Framework Advanced DevelopmentParallel ProgrammingTask Parallel Library Overview[EB].

[10]Amdahl G M.Validity of the single-processor approach to achieving large scale computing capabilities[C]//AFIPS Conference Proceed-ings vol.30(Atlantic City,N.J.,Apr.18-20).AFIPS Press,Re-ston,Va.,1967:483-485.

[11]Gustafson J L.Reevaluating Amdahl's Law[J].CACM,1988,31(5):532-533.

多处理器 第8篇

随着并行技术的不断发展,如何更好地提高处理器的并行处理性能成为处理器设计者们急需解决的热点问题。 传统处理器通过开发指令级并行(Instruction Level Parallelism , ILP )[1]来提高处理器的性能,但由于应用程序自身的ILP很低、 硬件的复杂度及功耗等众多因素的影响导致处理器的性能不高。 因此设计者们把目光纷纷投向更高层次的并行- 线程级并行( Thread Level Parallelism , 简称TLP )[1,2]。

同时多线程最先由美国加州大学的Tullsen等人在1995 年开始研究, 并提出了基本的SMT[3,4]处理器模型。主要原理是通过资源竞争和资源动态共享的方式使所有的执行单元同时活跃,充分利用TLP和ILP来提高处理器的资源利用率。

目前的商用处理器采用的技术主要是同时多线程和片上多处理器技术, 例如Intel的P4 处理器[5]的Hyper - thread技术实现同时执行两个线程, IBM的Power5处理器[6]每个芯片有两个内核, 每个内核可以同时执行两个线程。 SUN的Niagara处理器[7]每个芯片有8 个内核,每个内核可以同时执行4 个线程。 我国的龙芯2 号处理器[8]也采用了超标量与同时多线程技术来设计。

本文在多核处理器[9,10,11]的基础上提出了一种采用同时多线程技术[3,4]的线程调度器[12]设计。 与Niagara处理器相比,本文中的多线程处理器拥有16 个核,每个内核一共具有8 个线程,最大可以同时执行4 个线程,并且可以在高低线程之间快速切换,减少了因为线程中遇到长周期指令所造成的资源浪费,同时也提高了处理器的利用效率。

1 整体硬件结构

时钟共享多线程处理器是一种适用于图形和图像处理的并行阵列机。 该阵列机支持MIMD(Multiple Instruction Stream Multiple Data Stream ) 运行模式、 分布式指令并行模式和流处理运行模式这三种工作模式,同时还具有异步执行、核间通信以及线程间通信的机制。

这种结构的阵列机由16 个处理单元(Processing Element , PE ) 互连构成一个4 × 4 的二维阵列, 还包括1 个前端处理器、4 个协处理器、2 个调度器及2 个存储管理。系统的整体结构如图1 所示。

2 线程调度器功能描述

线程调度器完成的功能描述如下:

( 1 ) 监测预处理模块, 当外部需要给线程加载指令或数据时响应预处理模块;

( 2 ) 当线程发生阻塞时负责切换线程, 并产生PE某一个线程的启动信息, 其中包括启动有效信号、 起始PC值、 启动的线程号;

( 3 ) 线程之间的同步处理, 负责监视需要同步的线程是否同步结束;

( 4 ) 当外部需要重新配置某一个线程的指令或数据时负责停止该线程,产生pe_stop信号;

(5) 给外部提供三个8 位的寄存器, 分别为线程启动信息寄存器、线程结束信息寄存器、线程断点信息寄存器。

3 同时多线程设计方案

同时多线程技术最大的优点在于增加很少的面积,就能够获得很高的资源利用率,即用较小的成本换取较大的并行性能,充分地挖掘了线程级的并行。

本文基于时钟共享多线程处理器提出的线程调度器支持八个线程,最多可以同时执行四个线程。 这四个线程同时执行各自的程序。 每个线程拥有各自独立的取指单元、 译码单元、 指令存储和数据存储。 而其他的资源,如各个执行单元和地址流水线,则是八个线程共享。

在每一个时钟周期的上升沿, 每个PE最多有八条流水线在执行, 且最多可输出四条流水线结果, 这四条流水线产生的结果属于不同的线程组,每个线程组都拥有高低两个线程。 因此在某一组中若有一个线程陷入阻塞状态, 则可以切换至组内的另一线程来执行程序,可以有效隐藏线程由于等待过程所造成的延迟,提高处理器整体的工作效率。

4 线程调度器详细设计

4 . 1 线程管理器的总体结构

该调度器由信息处理模块、 状态控制模块、 寄存器模块、PE控制模块四大部分构成,各模块的连接关系如图2 所示。

线程调度器的工作流程为: 信息处理模块接收来自预处理模块的配置信息、指令、数据及加载结束信号,判断是否需要启动该线程。 线程启动之后状态控制模块中对应的线程状态机发生跳转,同时寄存器模块实时记录该线程的PC值。 当接收到译码模块的阻塞信息时停止当前运行的线程且切换线程,PE控制模块负责产生新线程的启动信息。 当线程运行结束后,信息处理模块负责记录线程的结束信息。

4 . 2 线程调度器的工作模式

线程调度器拥有五种工作模式: 启动模式、 阻塞工作模式、同步模式、断点模式和重配置模式。

启动模式线程接收来自预处理模块的线程启动信息配置要启动的线程,将对应的线程ID号和PC值发送给PE来执行。

阻塞工作模式表示当某一线程遇到阻塞, 则切换到其线程组内的另一线程上来执行。 若是两个都阻塞,则先解除阻塞的线程先执行。

同步模式下对需要同步的几个线程进行等待处理,并判断是否达到同步。 若达到,则解除同步模式,开始正常执行;若没有达到,则继续等待。

断点模式是用来方便处理器进行调试错误的一种工作模式。 当程序计数器PC遇到断点时, 该线程停止工作,保存工作信息以待调试检查。

重配置模式是对线程进行重新配置, 根据上层的需要对线程要执行的程序内容进行添加或更改。

4 . 3 线程状态转移关系

如图3 所示,为线程调度器中线程的状态转移图。

其中各个状态说明如下:

( 1 ) IDLE : 空闲状态。 当线程启动信号有效时( th_start = 1 ) , 则状态跳转到RUN运行状态;

( 2 ) RUN : 运行状态。 当线程位于此状态时, 表示线程正在执行,遇到阻塞或等待跳转到WAIT状态;

( 3 ) BREAK : 断点状态。 当线程的断点数据收集结束( th_break_end = 1 ) 时, 状态跳转到RUN运行状态;

( 4 ) WAIT : 等待状态。 当线程发生重配置( th_recfg = 1 )时, 则状态跳转到IDLE初始状态; 当线程阻塞解除( th_blk_fns = 1 ) 时状态跳转到RUN运行状态;

( 5 ) SYN : 同步状态。 线程位于该状态下, 遇到同步解除(th_syn_fns=1)信号,跳转到READY状态;

( 6 ) READY : 准备状态。 表示线程处于一个随时可以启动的状态,当线程被选中时(th0_hit=1),则状态跳转到RUN运行状态。

5 仿真结果分析和比较

本文采用Xilinx公司的ISE14.4 工具对硬件电路进行了综合, 选用Xilinx公司型号为XC7V2000t-2fhg1761的FPGA,设计电路的最高频率可以到达431.816 MHz。

在完成功能仿真和综合的同时, 本文还进行了简单的性能分析。 测试在8 个PE上进行, 采用图像处理中的边缘检测算法, 分别对32×32、64×64 以及128×64 的图像进行测试,最后得到的结果如表1 所示。 另外根据性能提升计算公式(1)[12]可以得出整体处理器的性能提升百分比如表2 所示。

可以看出, 对于比较小的图像, 过多的线程会导致整体运算速度变慢。 这是因为此时图像整体运算时间比较短,线程切换所造成的延时会在整体时间中占据比较大的比例。 而对于更大的图像,同时多线程技术则对处理器的性能提升影响比较大。 对于多核同时多线程处理器而言,八个线程的线程调度器设计会使处理器得到更高的性能提升,充分体现了同时多线程技术的优点。

6 总结

本文通过对时钟共享多线程处理器架构的深入研究,采用同时多线程技术设计和实现了处理器的核心部件 ——— 线程调度器。 通过在处理器的多个线程上运行图像处理算法,得到处理器的加速比最大为69.25% , 充分提高了多核处理器的性能。 并对所设计的硬件电路进行了全面仿真验证, 综合和仿真结果表明电路的功能正确,工作频率为431.816 MHz,达到了时钟共享多线程处理器的需求。

参考文献

[1]THEO U,BORUT R,JURIJ S.Multithreaded processors[J].The Computer Journal,2002,45(3):320-348.

[2]BRUNIE N,COLLANGE S,DIAMOS G.Simultaneous branch and warp interweaving for sustained GPU performance[C].Computer Architecture(ISCA),2012:49-60.

[3]刘权胜,杨洪斌,吴悦.同时多线程技术[J].计算机工程与设计,2008,29(4):963-967.

[4]EGGERS S J,EMER J S,LEVY H M,et al.Simultaneous multithreading:A platform fornext-generation processors[J].IEEE Micro,1997,17(5):12-19.

[5]张云.解析超线程技术[J].甘肃联合大学学报,2007,21(4):99-101.

[6]Frank Soltis.Power5对i系列意味着什么[J].中国经济和信息化,2004,20(6):A2-A3.

[7]POONACHA K.Niagara:a 32-way multithreaded sparc processor[J].Mirco,IEEE,2005,25(2):21-29.

[8]李祖松,许先超,胡伟武,等.龙芯2号处理器的同时多线程设计[J].计算机学报,2009,32(11):2266-2273.

[9]黄虎才.多态阵列处理器的并行计算研究[D].西安:西安邮电大学,2014.

[10]李涛,杨婷,易学渊.萤火虫2:一种多态并行机的硬件体系结构[J].计算机工程与科学,2014,12(2):191-200.

[11]李涛,肖灵芝.面向图形和图像处理的轻核阵列机结构[J].西安邮电学院学报,2012,17(3):41-47.

多处理器 第9篇

关键词:片上网络,拓扑结构,交换机

1 片上网络模型

So C (System-on-Chip) 设计技术始于20世纪90年代中期, 摩尔定律表明, CMOS的集成度将会连续不断地提高。因此, 提供新的设计方法和工具, 满足日益提高的系统复杂性、优异的性价比和产品上市时间短的需求, 是摆在电子设计自动化业者面前的一个巨大挑战。

为了解决So C日益提高的复杂性问题, 传统的片上总线架构必须不断地改进。这意味每个IP模块的总线接口必须经常修改, 而这会造成新的So C解决方案上市时间延长。此外, 尽管深亚微米技术提高了金属层的数量, 但是典型金属线的阻容延时也随每一代制造工艺而提高。

STNo C拓扑 (Spidergon) 基于三个基本组件:一个标准化的网络接口、一个带少量缓存的高性能虫洞路由器和一个物理通信链路。Spidergon采用类似于OSI的由四个网络层组成的通信协议栈:物理层、数据层、网络层和传输层。

片上网络 (No C) 技术能够降低So C的价格和功耗, 并能提高系统的性能和可伸缩性。No C技术以成本低廉的点对点分组架构取代了传统的总线架构, 分组架构整合了一个类似开放系统互连 (OSI) 的分层网络协议栈。

2 NOC拓扑结构

2.1 规则拓扑。

规则拓扑主要来自于并行计算机互连网络, 可分为两大类:直接网络, 网络内任一交换机节点都与IP核直接相连;间接网络, 网络内一部分交换机节点只与其他交换机节点相连。

2.1.1 直接网络。

流行的直接网络包括有二维网格, 二维环绕和超立方, 而k元n-立方体则是这三种网络的通用形式。其他的直接网络还包括一维线性阵列、环网、全连接、星形网等。

(1) 二维网格。规则的二维网状网络是目前研究中最常用的拓扑结构, 由于二维网格具有结构简单、可扩展性好、便于实现和分析等优点, 因而在No C领域得到了广泛的应用, 如Nostrum[1], AEetereal, So CBus, Hermes等。

(2) 二维环绕。在二维网格中, 如果边界节点与其水平或垂直方向的对称节点连接, 则构成了二维环绕, 如图1所示。

(3) 蜂窝结构 (Honeycomb) 。蜂窝结构如图2所示, 相比其他拓扑结构而言, 蜂窝结构的连线资源比较紧张。

2.1.2 间接网络

(1) 树。树中的内节点是交换机, 叶子是IP核。除了根节点, 每个内节点只与其父节点和若干个子节点相连。

传统K叉树的主要问题是单个父节点尤其是根节点, 容易成为通信瓶颈。Leiser-song[2]于1985年提出的胖树, 一个节点可拥有多个父节点, 可以缓解此问题。

(2) 蝶网。和树一样, 蝶网也是一种对数型的网络。对给定的2x2交叉开关, 线对中各引出一根线简单地交叉就获得了蝶网的基本构造块。n维的蝶网包括N=2n个IP核和n2n-1。个度数为2的交换机节点, 交换机组织成n层, 每层有n/2个交换机。

2.2 非规则拓扑。

根据定制方式的不同, 非规则的拓扑主要分为以下四类:

(1) 专用网络。专用网络指出在相同的性能指标下, 减少了交换机的使用数目, 在功耗和面积上更有优势。

(2) 基于规则拓扑。这类网络, 指在规则网络拓扑的基础上做一些改变, 如在规则拓扑的局部增加或删除一些节点或链路, 从而使定制后的网络失去了规则性。

(3) 分层网络。在分层网络中, 网络的拓扑呈现为两层或多层的层次化结构, 一般包括全局网和局部网两个层次, 分别可以根据需要选用规则拓扑或非规则拓扑。例如全局网采用二维网格, 局部互连采用二叉树。

3 No C拓扑结构研究进展

从网络拓扑的角度出发, 介绍几种有代表性的No C实例, 分析相关的设计和实现技术。

3.1 NoC实例。

SPIN (Scalable Programmable Interconnection Network) 是一个4叉胖树的设计例子。胖树中的内节点具有相同数目的父节点和子节点, 具有良好的可扩展性, 当网络的规模变大时, 网络仍然具有较好的性能。SPIN采用虫孔交换技术, 一个flit的大小为4个字节, 对争组的大小则没有限制, 采用0.13um工艺, 于2003年实现的一个32节点的SPIN网络, 芯片面积为4.6mm2, 聚集带宽为约100Gbps。

瑞典皇家理工学院的NOSTRUM采用名为BPS (Backbone-Platform-System) 的系统级设计方法, 将基于No C的系统划分为架构、平台和系统三个层次, 包括平台设计和应用映射两个步骤。在No C架构层采用二维网格作为基本的拓扑, 因为二维网格具有易于平面布局、节点度稳定和路由算法简单等特点。

Oetagon是一种新颖的规则网络拓扑。Octanon的基本模块是8个节点以由12条双向链路连接组成的带弦环网, 网络内任意节点间的路由距离都是2。多个带弦环网共用相邻边节点, 可以组成更大的、可扩展的网络。

3.2 与拓扑结构相关的设计方法。

能耗是设计No C拓扑结构的一个关键因素。文献[3]采用拓扑级能耗模型, 以二难网络/环绕、高维网格/环绕、层次网格/环绕为例, 探讨了70nm、50nm和35nm等制造工艺对以上No C拓扑难耗的影响, 并指出在不同的制造工艺下, 对应能耗最优的网络拓扑也不同。给定通信任务图、应用特征图或其他形式的No C设计规范以及优化对象和约束条件, No C综合用来生成对应的拓扑结构、路由算法等实现方案[4]。总的来说, No C综合是一个NP问题, 求解空间非常巨大。相对于定制拓扑而言, 网格类的规则拓扑由于结构简单、易于分析, 因而现有大部分工作都将它们作为研究对象。另一种较可行的设计方法是:给定若干个候选拓扑, 并通过综合从中选出一个最优的拓扑。为了提高网络性能, 节省功耗和面积, 更灵活的设计方式则是采用定制拓扑, 通过No C综合生成特定的专用网络[5]。

参考文献

[1]KUMAR S, JANTSCH A, SOININEN J P, et al.A network on chip architecture and design methodology[C]//Proceedings of IEEE Computer Society Annual Symposium on VLSI.Washington DC, USA:IEEE Computer Society, 2002:105-112.

[2]LEISERSON C E.Fat-trees:Universal net-sorks for hardware-efficinet supercomputing[j].IEEE Transactions on-chip micro-network[C]//Proceedings of Design, Automation and Test in Europe Conference and Exhibition.Washington, DC, USA:IEEE Computer Socitey, 2003:70-73.

[3]OGRAS U Y, HU J, MARCULESCU R.Key research problem in Noc design:A holistic perspective[C]//Proceedings of the3rd IEEE/ACM/I-FIP International Conference on Hardware/Soft-ware Codesign and System Synthesis.New York, NY, USA:ACM Press, 2005:69-74.

[4]WANG H, PEH L S, MALIK S.A technology-aware and energy-oriented toplogy exploration for on-chip networks[C]//Proceedings of the Disegn, Automation and Test in Europe Conference.Washington, DC, USA:IEEE Comuter Society, 2005:1238-1243.

多处理器 第10篇

最近一年来, 很多金融行业的数据中心的主流应用平台已经发生明显变化, 应用程序平台逐步从AIX小型机平台转向基于x86构架的Linux平台。从目前来看来, x86及虚拟化的趋势已经不可阻挡, 但其中也出现了一些需要关注的情况:原每台小型机CPU内核数量较少, 但单颗CPU内核性能强劲;而PC服务器CPU内核数量较多, 单颗CPU内核性能较弱, 部分应用程序在移植过程中出现性能差异。这些都是从小型机转向PC服务器不可避免的共性问题。针对这些问题, 本文简单探讨x86构架下多处理器调用的原理及优化使用相关事项。

二、多处理器并行原理

很多应用程序从小型机平台迁移到x86平台后, 会遇到这样的情况:一方面资源使用率不高, 尤其是CPU使用率比较低;另一方面应用程序的吞吐量和处理能力下降, 表现在批量时间明显增加, 访问响应时延上升。很多技术人员怀疑是没有利用好Linux的CPU, 下面将着重讨论操作系统对多处理器并发的支撑及相关原理。

(一) Linux下多处理器的实现

Linux内核中使用SMP技术来解决并行调用多个CPU的问题, SMP的全称是对称多处理 (Symmetrical Multi-Processing) 技术, 是指在一个计算机上汇集了一组处理器 (多CPU) , 各CPU之间共享内存子系统以及总线结构。在这种架构中, 一台电脑不再由单个CPU组成, 而是同时由多个处理器运行操作系统的单一复本, 并共享内存和一台计算机的其他资源。

Linux在内核编译过程中就决定了该操作系统是否支持SMP, Linux2.4之后的版本都较好地支持SMP构架。

1. 可以通过uname-a看到内核是否支持多处理器

testrac1:~#uname-a

L i n u x t e s t r a c 13.0.13-0.27-default#1 SMP Wed Feb15 13:33:49 UTC 2012 (d73692b) x86_64 x86_64 x86_64 GNU/Linux

内核标志中“SMP”, 代表支持SMP

2. 通过查看, 确认是否开启了irqbalance服务

该服务能够在多个CPU之间均衡分配硬件中断, 能够帮助S M P系统达到CPU负载均衡的目的。

testrac1:~#ps-ef|grep irqbalance

root 4441 1 0Sep23?00:10:22/usr/sbin/irqbalance

(二) 两个简单的压力实验

1. 应用程序压力测试

配置:SUSE SP22路12核24逻辑CPU物理服务器64 G内存。选择了一台2路服务器, 操作系统版本是SUSE Linux 11SP2, 对其进行了压力测试, 压力软件使用较为常见的计算π的压力脚本, 运行后结果如图1所示。

从图1可以看到当脚本开始运行时, 4颗CPU使用率都为100%。

2. Oracle数据库压力测试

配置:SUSE SP22路12核24逻辑CPU物理服务器64 G内存

使用脚本:select /*+parallel (a 24) use_nl (a b) */count (9) from pas.YJZB_HY_01 a, pas.YJZB_HY_0A b where a.tjrq=b.tjrq;

可以看到使用了24个并发, 结果如图2所示。

通过对一个简单的SQL开24个并发, 24个逻辑CPU完全被使用, 如图2所示, 整体物理机CPU使用率达99.4%, 几乎所有CPU都满载。

以上2个实验可以证明:无论是对一般的应用调用, 还是Oracle数据库调用, 操作系统层可以提供多处理器的调用。

三、分析应用进程调用原理

既然操作系统支持多CPU调用, 为什么会出现前文所述的情况呢?下文将讨论应用程序如何调用多个处理器。

经常碰到这样的问题:能不能通过系统技术把某一个进程绑定在多个CPU上, 使其能充分使用多个CPU的资源。

对于类似的问题, 要先参考进程的定义, 进程的概念主要有两点:第一, 进程是一个实体, 每一个进程都有它自己的地址空间, 一般情况下, 包括文本区域 (text region) 、数据区域 (data region) 和堆栈 (stack region) ;第二, 进程是一个“执行中的程序”, 程序是一个没有生命的实体, 只有处理器赋予程序生命时, 它才能成为一个活动的实体, 因此称其为进程。

从定义可以看到, 一个进程 (如果没有多线程编程) , 它本身有自己独立的内存空间和堆栈, 操作系统没有方法将其拆分在两个CPU里并同时寻址和处理的。实际上在线程出现之前, 进程本身就是分配资源和独立运行调度的基本单位。如果程序中没有对进程任务通过线程拆分, 进程对于操作系统而言, 就是最小的基本运行单位。这种情况下, 是无法让两个CPU内核同时为这个进程服务的。在下面的章节中, 将详细讨论如何利用并发编程, 充分使用系统资源。

四、如何使程序能充分利用更多的处理器

编写并行程序被公认为是利用多核处理器最主要的方法。先看如下这个例子:利用编程语言自带的功能简单地实现并发编程, 以C语言为例, 在GCC4.1版本支持多线程编译。

编写简单代码如下:一个简单的test () 函数, 然后在main () 里, 用一个for循环把这个test () 函数跑80遍

(一) 一般情况下AIX小型机和SUSE Linux PC服务器对比结果

AIX运行结果如图3所示。

图3开始时间减去结束时间, 可见运行时间大约10秒。

SUSE Linux运行结果如图4所示。

图4开始时间减去结束时间, 运行时间大约27秒。

可以看到在没有开并发的情况下, AIX处理器有着较为明显的优势。

(二) 代码编译过程加入执行并行

在主任务 (for循环前) 指定for循环进行并发。

同时, 编译过程中增加-fopenmp参数:

gcc-fopenmp test_cpu2.c-o test_cpu2

再次进行试验, 结果如图5所示。

图5开始时间减去结束时间, 看到SUSE Linux仅仅使用2秒就完成了任务。

可以看到, 仅仅简单编译过程开启并发程序后, SUSE Linux仅仅使用2秒就完成运行, 效率提高了10倍以上, 运行效率大大超过AIX, 而且代码改造非常简单。除了上述Parallel工具, open MP还提供Reduction工具和Critical工具, 可以解决资源争抢及死锁问题, 理论上可以解决大部分并发编程过程中遇到的问题, 是并发编程中较为简单的工具之一。

正如上面的实验, 编写并行程序被认为是利用多核处理器最主要的方法, 使用编译器自带的open MP工具, 是实现多处理器并发编程的方法之一。

并发编程也称为多处理器编程, 业界有完整的方法论和各种编程工具, 比较有名的是open MP和TBB, 总的指导思想是, 把要运算的数据分成几部分, 把不同的数据送到不同的CPU上运行。可以是一个进程拆分成多个线程分别执行, 也可以是直接派生出几个进程共同处理同一个任务, 通过IPC进行信息交互。

一般来说, 既可以将不同的应用或进程分配给不同的CPU, 提高执行效率;也可以将单个应用进程的特定步骤分解成一个个线程, 每个线程可以并行运行。

五、在系统运维层面对并发程序的一些跟踪手段

虽然应用代码并发的实现方式多样, 但在系统运维层面可以通过如下几个方面进行检查, 分析应用程序的并发性, 给应用开发人员进行参考。

(一) 查看关键压力和关键进程的分解情况

对于每个进程派生出的线程, 每个线程都有一个共同的PID和独有的LWP (线程标示符) 。对于其父进程, 可以通过查询NLWP, 查看此进程总共派生出多少进程, 从而跟进应用程序并发使用的情况。从图6可以看出5592进程派生出4个进程 (NLWP=4) , 他们有同样的进程号5592和各自的线程标示符。

(二) 合理设置并发的多个进程压力, 减少瓶颈进程

仅将任务简单拆分会导致临界资源分配不合理, 进程 (线程) 之间负载不均衡, 通常是瓶颈所在。我们可以通过如下ps命令去查看单个进程的负载情况。

例如:

UID PID PPID LWP C NLWP STIME TTY TIME CMD

jsbank 5025 8966 5025 99 4 13:58 pts/100:00:01./test_cpu2

jsbank 5025 8966 5026 99 4 13:58 pts/100:00:01./test_cpu2

jsbank 5025 8966 5027 99 4 13:58 pts/100:00:01./test_cpu2

jsbank 5025 8966 5028 99 4 13:58 pts/100:00:01./test_cpu2

可以看到5025进程派生的4个线程5025-5028CPU负载都是99%, 属于均衡负载。

(三) taskset–p命令

通过taskset–p命令, 设置指定进程运行在指定CPU上。

(四) 利用Irix模式进行判断

通过top–d1命令i打开Irix mode模式, 可以看到每个进程实际占用每颗CPU的使用率, 从侧面判断程序进程的并发情况及压力分布情况。

六、小结

通过本文的实验及论述可以知道, 主流的Linux操作系统可以提供应用程序及数据库的并发多处理器调用, 但操作系统的原理决定了仅通过操作系统技术是无法将一个高负载的进程平均分到多个CPU上。编写并行程序是利用多核处理器最主要的方法, 通过实验可以看到, 进行简单的并发改造后, 性能提升了数十倍。

多处理器 第11篇

关键词:发电机;转子磁极接头;引线接触电阻;转子在线监测装置;接头多片断裂 文献标识码:A

中图分类号:TM312 文章编号:1009-2374(2016)06-0072-02 DOI:10.13535/j.cnki.11-4406/n.2016.06.036

1 运行状态及问题

某水力发电厂是1948年破土动工,1952年第一台机组投产发电。该厂6号发电机组由哈尔滨电机厂生产,于1975年6月投产发电,水轮机型号为HL220-LJ-410,发电机型号为TS854/190-44。6号机组上次大修为2005年11月23日~2006年1月19日,本次6号发电机组大修是2014年9月开始,在转子磁极接头检查中发现31~32号、25~26号磁极接头有断片现象。因为转子磁极接头断片故障隐蔽性强,发生事故危害性大,为了采取有效措施防止故障形成,及时发现故障,本文对故障产生原因、检查方法、应对策略进行探讨。

2 转子磁极接头断片原因分析

2.1 转子磁极接头结构及工艺

6号发电机转子磁极长接头采用11片厚0.5紫铜片叠压经超音频感应加热焊机进行银铜焊接而成。接头与磁极之间先用铜铆钉铆接,再采用锡焊。磁极长接头一头压紧后钻孔,磁极线圈接头与磁极之间先用铜铆钉铆接,再采用锡焊。另一头连接时每片相互交叉,然后进行锡焊接。施工工艺要求:铆接接头错位不超过接头宽度10%,接触面电流密度符合设计要求,锡焊确保质量,严防焊锡任意流淌,锡焊接头焊接饱满、外观光洁。

2.2 断片原因分析

因施工工艺复杂,施工工艺不符合标准,会造成软连接头多片断裂。采用锡焊时如发生焊锡流淌会使接近线圈处连接线变脆变硬,机组运行中受到机械力、电磁力作用容易断裂。以下原因也可导致转子磁极接头断片:(1)接头接触面有毛刺,导电体弯曲扭转角度不正确均可能造成接头片断裂;(2)软连接头材料有质量问题,达不到长期运行要求;(3)机组运行振动大,磁极连接片因疲劳发生断裂;(4)机组运行时间过长,磁极连接片因老化发生断裂;(5)检修维护超周期或没有按规程执行,机组检修时没有注重接头部位详细检查处理,导致接头长期运行,在长期机械、电磁、热力作用下,出现接头变形、断裂。

3 转子磁极接头断片故障危害性分析

转子磁极接头断片在运行中危害很大,有可能产生严重事故:(1)磁极接头电阻增大,产生高温,烧断连接片,产生瞬时开断高电压,击穿定、转子绝缘,造成发电机保护动作切除机组;(2)磁极接头电阻增大,产生高温,连接片间烧断拉弧,发电机起火;(3)磁极接头全部断开,发电机失磁,机组有过速风险。

例如:某抽水蓄能B电厂5号发电机组(容量300MW)2008年5月发生转子1号磁极、2号磁极间连接片烧损,修复时间用了22天。1996年7月,某电厂5号发电机组(容量75MW)因转子引线在运行中断裂,引起发电机失磁,机组失步后引起阻尼环过热,阻尼环断裂后扫膛,造成定子相间短路,后来发展到三相短路,加上因直流消失,保护不能正确动作,最后5号发电机起火。国内也还有其他大中型电厂发生过同类故障,曾造成机组起火停运。所以转子磁极接头断片是很严重的故障,必须引起高度重视。

4 检查方法

转子磁极接头断片是隐蔽性故障,一般检查手段很难发现此类故障。转子磁极引出连接线使用浸过胶的玻璃丝带包扎,检修停运后也不能直接观察到连接头的状态,只能使用直流电阻测量的方法进行检测。但测量整个转子绕组直流阻数据无法反映单个磁极连接接头的接触状态,因为转子绕组直阻约200多毫欧,而单个磁极连接接头直阻约10微欧,即便单个磁极连接接头直阻增加100倍,对整个转子绕组直阻影响不会超过1%,是在《电力试验预防性规程》允许范围内。在此次6号发电机组大修中,试验人员增加了转子磁极引出接头直流电阻测量试验项目,采取的方法是在每个磁极引出线相同位置上钻孔刺破绝缘,用直流电阻测量仪对转子绕组施加恒定电流,用数字毫伏表在每个磁极接头测量压降,然后比较每个磁极接头直流电阻,对异常值进行比较。表1为该厂6号发电机组转子磁极引线直流电阻:

5 处理方法

拆下断片缺陷的磁极,吊至检修场地,平放在枕木上,按磁极线圈分解工艺将主绝缘、线圈与磁极铁芯脱开,然后处理线圈部分。处理接头时防止导线平面变形过大。清扫干净解开的磁极,用加热装置烫掉接头部分焊锡,用手枪钻头钻开铆钉头,取下旧铆钉,取下原磁极接头。新接头尺寸现场量取制作。换上新的接头,用铆钉铆紧,再采用锡焊。采用此方法将#31磁极拆卸,长头重新更换。拆卸#26、#27磁极,长、短头重新更换,对其他接触电阻偏大的磁极也进行了拆卸,长、短头也进了更换。更换后接头接触电阻经过试验均合格,短接头单个接触电阻不超过2μΩ,长接头单个接触电阻不超过2μΩ。处理后的磁极检查试验均符合要求。

6 采取对策

为了防止转子磁极软连接头断裂,并减少隐患发生和及时发现隐患,根据以上分析可采取如下对策:(1)进行有针对性的重点检查。对于平时机组运行振动大、运行时间久远的机组进行重点关注,在机组检修中应打开绝缘套进行检查,观察连线是否有断裂迹象,材质是否变脆。某厂机组开停机次数统计。(2)机组大修项目要进行转子磁极引出接头、连接引线等部位专项测试。在机组检修的预防性试验中,在转子绕组试验中增加转子磁极引出接头、连接引线等部位的测试。测量磁极之间的直流电阻,进行相互之间的比较,发现数值偏大的部分应立即进行检查。在机组检修时对每个磁极的连接引线进行直流电阻测量,进行横向比较,对于数值偏大的位置应打开绝缘层进行检查,发现有断裂现象的立即进行更换。(3)在机组小修时,对发电机转子部分进行详细检查,检查磁极接头外包绝缘是否有因高温产生的老化情况。(4)发电机转子是一个封闭高速旋转部件,无法对转子采用常规的红外线测温等监测手段,对发电机转子进行温度等的在线监测一直是一个技术难题。随着技术发展,国内部分电厂已采用了转子在线监测装置,我们要关注这方面技术的发展,在适当时机引入技术成熟的产品。(5)合理安排机组运行方式,减少机组开停机频度,避开振动区运行。

7 结语

发电机转子是旋转部件,转子引线、磁极、阻尼环、磁极间连接线在机组运行中受到机械力、电磁力、热力多种力作用,工作条件复杂,又是封闭运行,运行中不能进行有效监测,一旦发生事故,将导致严重后果。对转子磁极连接头断片等转子部件缺陷要引起重视,通过多种手段杜绝事故发生。本文通过该厂6号发电机转子磁极软连接头多片断裂原因分析,叙述了处理方法,提出了加强标准化检修,严格按规定工序作业,确保安装质量;探讨了加强转子磁极引出接头、连接引线等部位专项测试,及时发现异常情况等多项对策,总结了某厂2014年6号发电机组大修的宝贵经验,在发电机组检修工作中可以推广执行。

作者简介:梁燏(1998-),男,湖南益阳人,身份证号:430923199806150812,研究方向:电力系统自动化。

多处理器 第12篇

关键词:FPGA,NiosII,多处理器,SOPC

在复杂的数字系统设计时, 常需要构建多处理器系统, 其实现方法有多种, 而大规模FPGA芯片、单片机IP核以及Nios I软核处理器的出现, 为多处理器系统的实现提供了崭新的思路。

本文将就NiosII多处理器系统设计中的硬件系统组建、资源共享、核间通信、程序编写以及NiosIIIDE环境下的程序编译调试等关键问题做重点介绍。

1 NiosIl多处理器系统硬件构建

NiosII多处理器系统的硬件可用Quartus软件的SOPC Builder编辑器实现, 其步骤如下:

1) 根据需要添加多个Nios II软核CPU、各自的定时器、JTAG_UART、三态桥、片内存储器、EPCS_Controller、Flash、UART、片外SDRAM、PIO、系统ID、Mutex互斥核等基本组件。

2) 定制键盘、液晶驱动等各种自定义模块并添加。

3) 使用连接矩阵对互联关系做必要修改。在多处理器系统中, JTAG_UART接口不能同时连到多个CPU上, 程序存储器和数据存储器与每个CPU的指令主端口和数据主端口都将发生互连, 以便多个CPU可同时从程序存储器中读取程序并运行, 以及实现对RAM数据的共享。

4) 设定多个CPU的复位地址和异常地址。因为多个CPU共用程序存储器, 所以需要为每个CPU划定程序存储空间, 以便CPU上电复位后从指定位置读取程序并开始运行, 复位地址和异常地址的指定将划定程序存储界限。

5) 选择System→Auto-Assign Base Addresses, 为所有外设分配基地址。

6) 选择System→Auto-Assign IRQS为每个外设自动分配中断请求。

7) 执行Generate, 生成系统模块。

8) 在图形编辑器中添加锁相环等外部模块, 构成整个硬件系统。

2 Niosll多处理器系统的资源共享

实现资源共享是提升多处理器系统功能的重要措施, 在NiosII多处理器系统中, 资源共享主要是RAM中数据的共享, 在设计时必须统筹规划多个处理器对RAM中数据的读/写操作。

2.1 存储器共享问题

NiosII系统有Onchip Memory、片外Flash存储器以及片外SDRAM等三类存储器, 其中片外Flash常用来充当程序存储器, SDRAM用来充当数据存储器。对于多核系统, 不同处理器的程序可以放在同一个Flash程序存储器中, 这就需要划分存储器空间地址, 不同处理器的程序应该放在不同区域, 划分方法将在后面软件设计部分进行介绍。

数据存储器共享时, 存储器数据需要通过从端口与处理器的数据主端口连接。为了避免出现同一时间多个处理器对共享数据同时进行读写操作而导致系统崩溃, 可采用握手机制或者Mutex硬件互斥核来防止这种情况发生。

在SOPCBuilder组件列表中, 有一个Mutex组件, 它可以用来对共享数据进行保护。

在进行软件设计时, 必须设定当前处理器在访问共享数据前首先要测试并获取Mutex互斥核, 互斥核可行则获取并使用共享数据, 互斥核不可行则等待, 使用共享数据完毕后当前处理器释放Mutex互斥核, 再由其他处理器获取。

2.2 外设共享问题

NiosII及其硬件抽象层 (HAL) 库均不支持多个处理器对非存储器外设的共享, 但是当不同外设被不同处理器控制时, 其基地址可相同。

3 NiosII多核间通信问题的解决

在NiosII双处理器系统, 可采用FPGA中实现的片上双口RAM和通用IO组件PIO核来实现多核中断通信。除此之外, 核间通信也可以通过互斥硬核、邮箱、通用串行接口总线以及共享存储等途径来实现, 或者利用PIO并口将双核互联, 各自定义自己的接口形式和通信访问协议进行通信。

4 Niosll多处理器系统软件设计

4.1 程序文件存储问题

在多处理器系统中, 每个处理器软件的5个主要代码段需要被链接到存储器中的固定地址, 分别是:text实际的可执行代码;rodata代码段执行时使用的常量;rwdata读/写变量和指针;heap动态分配的存储器;stack函数调用参数和其他临时数据。

一般做法是将每个处理器的所有代码段存放在一个连续的存储区域。多个处理器的对应程序可以放在一个程序存储器中, 可以同时运行。这一点需要通过SOPCBuilder的存储器分区模式实现, 分区模式使用处理器的异常地址, 可以在SOPCBuilder中进行设置, 异常地址用来定义多个处理器之间代码存放的分界。NiosIIIDE负责根据异常地址计算出不同代码段链接的位置。如果2个不同的处理器被链接到同一存储器, 那么每个处理器的异常地址用来决定处理器软件存放的基地址, 其末地址由下一个异常地址或者存储器的末地址决定。

值得注意的是, 异常地址的低6位总是设置为0x20, 因为偏移量0x0是NiosII的复位地址, 所以异常地址必须位于其他位置。偏移量选择为0x20, 原因是它与一条指令的缓存行有关。0x20字节的复位代码初始化指令缓存行, 然后跳转到系统的起始代码处。

4.2 启动地址

在多处理器系统中, 每个处理器必须从自己的存储区域启动。为了从同一个非易失性存储器中的不同区域启动多处理器, 简单地设置每个处理器的复位地址为所期望的启动地址, 在启动地址之间要留出足够的空间存放启动代码。

NiosIIFlash Programmer可将多个处理器的启动代码编程到一个Flash器件中。Flash Programmer根据每个处理器的复位地址计算Flash内的编程地址。

4.3 NiosIIIDE中多处理器系统的运行和调试

在多处理器系统上, 多个debug可同时运行, 每个处理器可单独暂停和恢复, 也可单独设置每个处理器的断点。某个处理器停在一个断点处, 并不影响其他处理器的操作。每个debug通道也可以单独打开和停止。在NiosIIIDE中, 利用mul-tiprocessorcollections功能就可以打开多个处理器的debug通道。

multiprocess orcolle ctions是被连接在一个配置名字下的每个处理器的debug配置组, 使用它的好处是无论何时打开collections, Nios IIIDE都可以打开每个debug通道, 而不用手动打开。multiprocess orcolle ctions的打开和停止不是同时的, 这意味着在collections中的处理器不能在同一个时钟周期开始执行代码。如果需要在较短的时间内启动多个处理器, 则需要构建单独的硬件和软件机制。

5 结语

本文介绍了NiosII多处理器系统的硬件构建、资源共享、核间通信以及软件设计等问题, 对资源共享、多处理器系统程序文件的存储、每个处理器的启动地址以及多处理器的程序运行和调试方法等问题。

参考文献

[1]王卫源, 戴紫彬, 钱育蓉.Nios II多处理器系统方案设计.微计算机信息 (嵌入式与SOC) 2007.

[2]綦声波, 田学文.双Nios II软核在嵌入式系统中的应用.单片机与嵌入式系统应用, 2008.

[3]崔坤, 王滨, 张文明.基于NiosII双核系统的设计与实现.电子技术, 2007.

[4]高兵, 秦俭, 陈莉平, 唐光荣.NiosⅡ多核处理器之间通信技术的研究.电子产品世界, 2007.

多处理器范文

多处理器范文(精选12篇)多处理器 第1篇关键词:多线程,多处理器,进程,函数引言Windows操作系统下的多线程编程方式由来已久,早期的多处理...
点击下载文档文档内容为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部