多线程处理器发展

2024-10-13

多线程处理器发展(精选5篇)

多线程处理器发展 篇1

当前我国大部分船舶设备单位嵌入式系统, 所包含的多线程调度基本上是借助软件实现的, 使用操作系统来对线程调度进行管理存在一定缺陷, 如系统进行时间片轮询切换过程中可能消耗大量时间, 导致处理器的实施用户不具备高效率, 另外, 大部分的嵌入式处理器在硬件上都没有设置完善的环境保护机制, 导致多线程程序在运行过程中很容易出现安全隐患, 或者是用户在对多线程编程进行开发的过程中, 需要按照系统函数和编程来对一些复杂问题进行解决, 操作有一定难度。因此, 对多线程调度进行适当的管理具有非常重要的意义。

1 嵌入式的硬件多线程处理器如何设计

当前芯片集成技术以及处理器的设计水平都在不断地发展和进步, 不同的逻辑处理器都能在单一的处理器上进行实现, 这也为硬件的多线程并发运行创造了良好的条件, 针对嵌入式的系统来说, 它的设计必须要充分估计到成本以及复杂程度两方面。在本文当中描述的同时多线程拥有单一的执行内核, 它将传统的处理核心作为基础, 拓展出一个借助硬件逻辑来完成控制的调度管理系统电路, 来完成在硬件层面上的多线程调度作用。

另外, 在处理器中线程调度单元中, 能够将外存中的指令代码按照一定的顺序放置于待执行的线程列当中, 与此同时按照时间片的顺序将其中的指令代码按照次序传送到执行单元当中进行执行。这种处理器的环境之下, 每一个线程都能够受到硬件的控制, 而且能够在自身的时间片当中使用处理器中的资源。在某个特别的时间段当中, 只能有一个单一的线程存在并对资源进行应用。这种形式的处理器具备比较好的处理器内核, 不但降低了设计的复杂性, 它所实现的处理范围比起同等级的处理器来说没有明显的增加, 由此我们可以认为, 借助同时多线程技术可以在最大程度上让操作系统软件不会过多参与, 降低成本, 并且完成单一处理器的芯片系统当中多线程的操作。

对多线程处理器中硬件进行调度控制主要是硬件多线程处理器方面的结构设计以及存储器的资源保护还有指令节拍状态的设计等。

2 如何实现嵌入式的硬件多线程具体执行机制

2.1 多线程机制

对于硬件结构来说, 同时多线程这种技术大部分情况下其处理器都只能存在于处理器的单一核心当中, 执行多线程主要依据的是单位时间片的顺序调度, 实现多种不同的线程方法, 在不同的单位时间片处理器会按照一定次序来完成指令、调整工作时间, 同时保护工作的环境等。

另外, 在处理器进行空间指令的执行流程当中, 一部分内部资源是没有必要一直进行使用的, 像在通用寄存器当中的资源一般只需要在处理器WB节拍以及EX节拍当中才会得到应用。由此我们可以认为, 必须要适当地安排操作的次序, 还要在硬件的结构当中设置一个缓冲寄存器, 在处理器运行当中顺利执行当前的线程, 对下一线程的工作空间进行适当的恢复与保护。

对各个线程运作的空间进行保护的系统主要是由寄存器构成的, 它可以通过在处理器的内部对同等资源进行反复的设定, 将分散资源在页内进行全面实现, 如果处理器需要切换线程就可以通过换页来完成切换。资源分页符需要借助处理器当中的选择器来形成线程号, 在具体的实现过程中怎样能够将操作的过程在最短时间内依次运作完成也是比较重要的问题。

目前在我国的船舶设备研究试验行业当中, 对工作环境进行保护的方式大多都是在多线程的运行环境当中寻求处理器对寄存器以及存储器的保护, 通常依靠这样的两种方法来完成, 其中之一是对页面进行适当管理的方法, 另一个是资源的迅速切换。

2.2 选择线程模块

通过同时多线程这种技术得以实现的线程处理器, 它的每一个硬件线程当中都存在着比较特殊的标志, 依照这些线程号就能够对处理器内部各个硬件的线程进行适当的区分, 在当前获取执行线程号可以借助对控制器进行查询, 获取其最高的三位数。

执行线程的时候, 选择器可以很好地控制线程的执行顺序, 它的主要工作原理如图1。

图1所示的选择器当中存在一个选择线程的阵列, 它输出端所输出的内容是在下一个时间单位片上需要进行运作的线程号;另外, 在控制线程的寄存器当中记录的内容是在当前的运作环境下被成功激活的线程, 借助该寄存器可以很好地提供出一个对处理器进行控制的线程接口。面对当前我国的船舶设备行业的不断发展和进步, 嵌入式的硬件多线程技术也逐渐得到了普及, 特别是在对水声信号进行分析的情况下, 但是需要注意的是, 在不同的环境下它也有不同的利用方式, 这还需要进行更加全面系统的分析。

3 结语

总的来说, 在本文当中进行详细探讨的内容主要是通过硬件的控制来进行多线程调度具体的方式, 在多线程的背景下, 硬件处理器能够拥有非常高效的执行力, 不过想要对其性能进行系统评价, 还需要将多种影响因素进行综合, 以此为依据来进行。

摘要:本文详细探讨了在同时利用多线程技术过程中, 所涉及的硬件多线程设计处理器, 同时借助处理器内的硬件机制对多线程调度进行适当的管理, 试图实现将硬件时间片轮询作为最基本的内容的多线程处理器调度机制, 提升处理器的实施用户所拥有的线程效率, 尽可能的简易化操作, 对多线程工作环境中的线程起到一定保护作用。

关键词:多线程处理器,嵌入式,设计,多线程

参考文献

[1]汪汝.对嵌入式硬件多线程处理器的研究[J].硅谷, 2014 (20) .

[2]张文波, 苑凌娇, 谭小波, 付立冬.嵌入式多线程处理器的执行控制设计方法的研究[J].沈阳理工大学学报, 2012 (04) .

面向多核多线程微处理器的优化 篇2

1、分块矩阵

所谓的分块矩阵值指的是一个矩阵, 它吧矩阵分别根据横竖分割成笑得子矩阵, 接着把每一个子矩阵当成一个元素, 分块矩阵的非零子矩阵如果都在对角线上, 就成为对角矩阵。分块矩阵满足惩罚和加法, 并且哦都市可以变换成约当标准型。设计矩阵惩罚的并行计算的作用是用来提高增加矩阵的惩罚计算率, 它是最为普遍的分块计算。利用多线程的程序进行设计矩阵惩罚有很多种方法, 可以直接按惩罚定义多线程的设计, 结合分块矩阵乘法也可以进行多线程的设计。

按照定义直接进行多线程的变成例如用n阶方阵A×B的乘法, 矩阵A是n个行向量:ai={X1, X2, ……Xn} (1≤j≤n) , B矩阵看着n个列向量b1={y1, y2, ……yn} (1≤j≤n) A×B的结构每个元素就是ai×b1 (1≤j≤n, 1≤j≤n) , 这是用定义进行每个线程的设计, 也就是每一个线程做一个向量的乘法最后得到一个A×B结果的元素, 这样需要n×n的线程。

用定义设计的优点是逻辑简单易懂便操作, 线程之间不需要通信, 因此线程同步的问题是不存在的。但是缺点也非常多, 比如规模增大, 线程数量就会跟着飞速增多, 对于电脑的CPU和操作的系统而言, 大量的线程是难以承受的。因此需要改进数量的线程, 进行多次的n×n个线程可以避免难以承受的情况。

矩阵分块后块内并行计算的多线程设计是把矩阵A作为水平线, 列间作为铅垂线把矩阵分成一些块, 把它成为矩阵A的分块, 例如下面4×4的矩阵A, 被虚线分成4个部分, 每一块都是一个子矩阵 (情况一) :

对于矩阵A和B的线性代数中, 把子矩阵当成矩阵元素, 来设计矩阵乘法。如下:

(情况二)

矩阵分块的重点就是设计块内计算, 合理设置每一个分块的大小以及矩阵的阶数, 也就是决定了并行计算中的线程数。子矩阵的结束也决定了内存的额外开销。这样设计的优点是可以比较精确的控制线程数目, 在整个乘法过程中, 最大线程数是明确的。而难点在于, 要求得乘法结果中的某一个子矩阵的元素, 必须访问A中某一行和B中某一列的全部子矩阵, 如何控制线程同步是这一问题的多线程程序设计所必须解决的问题。此情况下的线程同步需要所有线程执行到某一个点, 再继续执行下一步。如果同步机制设计不好, 会极大地影响效率。

矩阵分块分成了m×n个子矩阵, 然后把每一个矩阵堪称一个元素, 块间的并行设计和第一种情况机会相同, 不同的是每个线程都是定向乘法, 而这一种设计中, 全部都要用子矩阵定向乘法。, 不同的是就和串行算法之间是按照计算矩阵乘法和分块计算矩阵乘法之间的差别类型。块间的并行精算和第一种请款相比, 线程数减少了, 但是线程明显复杂了许多, 同时当矩阵阶数很大的时候, 线程数也会比较大, 运行不稳定, 但是和第二种情况相比, 胯间的并行计算有点事每个线程之间不需要连接和通信, 线程控制简单, 逻辑清晰, 从程序角度比较容易做到。

2、sun将ultra sparc T2处理器开源

Sun把ultra sparc T2处理器的硬件进行了描述理论上任何人都可以用这一技术, 进行描述, 复制, 重建T2处理器。Sun利用大量硬件开发人员、大学。客户社区的下载。

3、多核处理器的出现给软件业带来的机遇

当今对于multi-core (多核) 以及multi-threading的要求越来越高, 提高CPU一共有三种途径:一是增加始终的频率;二是优化处理器的内部结构以及降低平均指令的周期;三是编译器堆成学进行优化, 减少治疗的数量或者降低所生质量的平均指令周期。就现在而言时钟频率的提升空间非常有限, 现在很多开发者已经把视线转秉性技术和编译技术等方面, 同时也非常种猪体系框架的结构方面进行提升。以现在应用市场为里, 处理器的发展不再是硬件的该更新和变化, 而是软件的革命, 多核多线程的处理器对于世界和我国来讲是一个机遇也是一个挑战, 现在大家都将实现转为微机的硬件发展, 焦点是cpu和cpu计算能力的争夺, 也就是传统的串行算法和并行算法之间的争夺战。我国要想应对挑战, 就要陷阱型多核多线的处理器发展和操作系统的更新与开发, 传统的操作系统linux, free bsd, windows等已经成为过去式, 不再是系统未来发展的主流, 几十个核的芯片运行。

4、总结

多线程处理器发展 篇3

随着并行技术的不断发展,如何更好地提高处理器性能成为设计者急需解决的问题。 传统处理器通过开发指令级并行(Instruction Level Parallelism ,ILP) 来提高处理器的性能,但硬件的复杂度及功耗等因素影响了处理器的性能。 因此设计者们纷纷把目光投向更高层次的并行- 线程级并行(Thread Level Parallelism ,TLP), 时钟共享多线程处理器就是在这种背景下产生的。 但微处理器核间与线程间通信的线延迟问题仍是需要解决的核心问题[2,3]。 本文基于时钟共享多线程处理器的功耗和结构复杂度要求,设计了近邻通信和线程间通信两种通信机制[4],并且对设计电路进行了功能仿真和FPGA验证。

1 时钟共享多线程处理器的体系结构

本文提出的时钟共享多线程处理器系统支持多指令多数据(MIMD)、 分布式指令并行和流处理3 种运行模式[5,6]。 它由16 个处理单元(Processing Element ,PE) 互连构成一个4×4 的二维阵列, 还包括1 个前端处理器、4 个协处理器、 2 个调度器及2 个存储管理。 系统整体结构如图1 所示。

2 设计与实现

2 . 1 近邻通信机制设计与实现

近邻通信机制采用邻接共享FIFO实现。 处理单元( PE ) 可访问的存储空间包括本地存储、 近邻共享FIFO 、线程间共享存储。 本地存储分为8 个4 K大小的Bank存储,单个PE的近邻通信结构如图2 所示。

近邻通信的电路在译码模块中完成, 该模块完成指令的解析, 近邻通信数据、 线程间通信数据及本地数据的读取, 判断近邻通信和线程间通信阻塞的产生及解除。 近邻通信机制完成如下功能:

( 1 ) 译码单元将近邻通信数据写入近邻FIFO中。 它首先判断该指令是否属于阻塞以及读取近邻FIFO的状态。 当近邻FIFO不满时,将目标数据直接写入近邻FIFO中,当处于满状态时则发生近邻写阻塞;(2) 译码单元需要从邻接PE的东、西、南、北4 个方向的FIFO中读取数据。 译码单元首先判断该指令是否属于阻塞指令并且是否需要读近邻FIFO, 同时读取近邻FIFO的状态。 当近邻FIFO不空时,将目标数据从近邻FIFO中直接读取到译码单元, 当近邻FIFO处于空时说明当前线程发生了近邻读阻塞。

本处理单元(PE)与4 个邻接PE进行近邻数据通信,东/西/南/北四个方向的近邻通信机制结构、端口数量及接口时序也类似。 本小节以西边第一组的相关接口时序为例进行说明。

如图3 所示,当本地PE的目标地址为近邻通信时,首先使用目标地址的低两位(dec_dst_addr[1:0]) 判断近邻通信的方向, 当目标地址为12h FFC时表明该指令需要向西边对应的FIFO中写数据,当检测到西边FIFO的几乎满信号为1 时, 表明该指令发生了写近邻阻塞( wr_ngb_blk ) , 当前线程不能继续运行, 需要切换线程。 同时将写近邻阻塞标志、写近邻阻塞地址及写近邻阻塞来自于哪个线程发送给存储管理模块。 当检测到西边FIFO的几乎满信号为0 时, 表明该指令可以直接将目标数据写入到对应FIFO中。

如图4 所示,首先使用源地址的低两位(dec_src_addr[1:0]) 判断近邻通信的方向, 如图所示当源地址为12h FFC时,表明该指令需要从邻接PE西边对应的FIFO中读数据,当检测到西边FIFO不空,表明该指令可以直接从西边对应的FIFO中读取数据, 当拍发送读使能(npe_rd_fifo_west_en ) 及线程选择信号( npe_rd_fifo_west_sel ) , 下一拍得到数据(npe_rd_fifo_west_data) 。 当检测到西边FIFO为空时, 表明该指令发生了读近邻阻塞(rd_ngb_blk), 当前线程不能继续运行,需要切换线程。

因为近邻通信的读阻塞和写阻塞判断逻辑类似, 只是条件不同,下面对近邻通信的写阻塞判断逻辑做详细介绍。

如图5 所示, 首先在指令(dec_ins_valid=1) 和指令的阻塞标志都有效(dec_blk_flg=1) 情况下判断指令的目标地址是否为近邻通信地址,然后根据目标地址的低两位( dec_dst_addr [ 1 : 0 ] ) 判断近邻通信的方向, 每个方向有两个FIFO分别对应低线程和高线程; 当目标线程号set_thread_id=0 时判断低线程对应的FIFO是否为几乎满,如果为几乎满则表示该方向对应的低线程发生了近邻通信写阻塞(wr_ngb_blk=1) ,且同时将近邻通信写阻塞标志(wr_ngb_blk_flag)、近邻通信写阻塞地址(wr_blk_ngb_addr)及近邻通信写阻塞来自哪个线程的信号(wr_blk_ngb_from_t)发送给存储管理模块;如果不为满则当前目标数据直接写入到对应方向的FIFO中。 例如指令 “BMULT4092 , 20 , 21 ” , 该指令经过译码解析, 将20 号地址单元中的数据与21 号地址单元中的数据进行乘法运算并将结果送到西边邻接的PE。 此时译码单元需要判断西边FIFO是否为满。 若西边FIFO为满时, 此时该指令就发生了近邻写阻塞;若西边FIFO不为满时,直接将乘法结果写入到西边FIFO中。

2 . 2 线程间通信机制设计与实现

线程间通信是处理单元(PE)线程内部之间的数据交换,每个处理单元(PE)的线程间通信地址都有自己的标志寄存器,用于判断是否发生线程间通信阻塞。 每个线程数据存储地址的0~7 对应0~7 号线程的共享存储。

如图6 所示,首先判断目标地址是否为线程间通信地址,图中dec_dst_addr[11:0]=12 ’d1 表明当前线程需要向1 号线程写数据,其次判断1 号线程对应的写阻塞寄存器(th_low_wr_t1_blk) 的最低位, 为0 时表明目标数据可以直接写入到对应线程的共享存储中, 同时将写线程间阻塞标志(wr_th_blk_flag) 、写线程间阻塞地址(wr_th_blk_addr ) 及写线程间阻塞来源于哪个线程( wr_th_blk_from_t ) 发送给存储管理模块。 为1 表明当前线程发生了写线程间阻塞(wr_th_blk) , 当前线程无法继续运行需要切换线程, 同时将写线程间阻塞标志(wr_th_blk_flag) 、 写线程间阻塞地址(wr_th_blk_addr) 及写线程间阻塞来自于哪个线程(wr_th_blk_from_t) 发送给存储管理模块。

如图7 所示,首先判断源地址是否为线程间通信地址,图中dec_src_addr[11:0]=12 ’d1 表明需要读取1 号线程的数据,其次判断1 号线程对应的读阻塞信息寄存器( th_low_rd_t1_blk ) 是否为2 ’ b11 , 当为2 ’ b11 时表明对应的共享存储中有数据且当拍发送读使能信号( dec_src_rd_en ) , 下一节拍得到对应线程的数据( dec_src_rd_data ) 。 不为2 ’ b11 时表明需要的数据还没有写入到对应的线程共享存储中,则该指令发生读线程间阻塞(rd_th_blk)。

因为线程间通信的读阻塞和写阻塞判断逻辑类似,只是判断的条件不同,因此下面对线程间通信的写阻塞判断逻辑进行详细介绍。

如图8 所示, 首先在指令(dec_ins_valid=1) 和指令的阻塞标志(dec_blk_flg=1) 有效情况下,判断指令的目标地址是否为线程间通信地址, 根据目标地址的低三位( dec_dst_addr [ 2 : 0 ] ) 判断写哪个线程, 根据线程间通信地址对应的阻塞寄存器低位判断当前地址是否有阻塞信息。 如果有阻塞,表明发生写线程间阻塞(wr_th_blk =1) ,同时发送写线程间阻塞标志(wr_th_blk_flag)、写线程间阻塞对应的地址(wr_blk_th_addr) 及写线程间阻塞来自于哪个线程的信号(wr_blk_th_from_t) 给存储管理模块, 如果无阻塞则数据直接写入到对应线程的共享存储中。 例如指令 “BMULT 2,20,21”,该指令经过译码单元解析后判断该指令属于阻塞指令并且属于线程间通信指令,需要写2 号线程的共享存储,此时译码单元首先判断2 号线程对应的阻塞寄存器中的阻塞标志位, 若为高, 表明该共享地址中已经有数据,此时该指令就会发生写线程间阻塞;若为低,表明该共享地址中没有数据,可以直接将乘法写入2 号线程对应的共享存储中。

3 仿真验证及结果分析

仿真验证使用Mentor公司的Modelsim SE 10.1c仿真工具, 根据实际情况编写不同方案下的测试激励,在System Verilog搭建的平台和软件仿真平台上验证时钟共享多线程处理器系统的功能。

3 . 1 近邻通信的功能仿真

测试方案: 为了测试近邻通信的完整性, 分别测试东/西/南/北四个方向的写共享FIFO和读邻接PE的共享FIFO数据至本地PE。 测试汇编程序如图9 所示。

测试说明:选择0 号线程测试近邻通信功能。 首先测试0 号线程分别向东/西/南/北4 个方向对应的共享FIFO中分别写入4 个数据, 等待邻接PE读取。 最后测试本地PE的线程0 从邻接PE东/西/南/北4 个方向的线程0 共享FIFO中分别读取4 个数据至本地PE, 参与相关运算;测试汇编程序如图10 所示。

图10 为近邻通信仿真波形。 邻接PE分别检测本地PE线程0 对应的东/ 西/ 南/ 北4 个方向共享FIFO是否为空, 图中西边读FIFO0 信号不为空(west_rd_fifo0_empty0 = 0 ) , 表明本地PE已经将近邻数据写入到线程0 对应的FIFO中。 邻接PE开始向西边的FIFO发送读使能信号(npe_rd_fifo0_west_en)及读选择信号(npe_rd_fifo0_west_sel ) , 下一拍得到数据( npe_rd_fifo0_west_data ) 。 最后本地PE需要从邻接的4 个方向读取数据, 当检测到邻接4个方向的FIFO不为空时(rd_west_fifo0_empty=0 ,rd_north_fifo0_empty = 0 , rd_east_fifo0_empty = 0 , rd_south_fifo0_empty =0 ) , 表明邻接4 个方向已经准备好数据, 本地PE发送4个方向的读FIFO的使能信号(rd_npe_fifo0_en) 和选择信号(rd_npe_fifo0_sel) , 下一拍得到数据(rd_npe_fifo0_data) 。当数据读完之后4 个方向的rd_fifo0_empty0 变为高电平。

3 . 2 线程间通信的功能仿真

测试方案:选用PE的0、1、2、3 号线程进行测试。 0号线程执行加法运算,将其运算结果传递给2 号线程进行乘法运算;1 号线程执行加法运算, 将其运算结果传递给3 号线程进行乘法运算。 测试线程间共享存储的访问功能。 测试汇编程序如图11 所示。

测试说明: 线程0 执行A+B操作(A=2,B=3) 将运算结果D=5 写到2 号线程的共享存储中; 线程1 执行A+B操作( A = 3 , B = 4 ) , 将运算结果D = 7 写到3 号线程对应的共享存储中;线程2 需要读出线程2 对应共享存储中的数据和21 号地址里边的数据进行乘法运算, 预期的运算结果为5; 而线程3 则需要读出线程3 对应共享存储中的数据和20 号地址里边的数据进行乘法运算, 预期的运算结果为7。

如图12 所示, 线程1 将数据写入到3 号线程对应的共享存储中时,对应的写3 号线程阻塞寄存器的值变为2’b11(th_low_wr_t3_blk=2’b11),当写入3 号线程的共享数据读取后, 阻塞信息寄存器清零(th_low_wr_t3_blk =2 ’ b00 ) ; 3 号线程执行乘法操作, 图中横线位置表示3号线程的乘法结果有效vout=1 且运算结果mulout=7。

综上,处理器单元的近邻通信和线程间通信都是正确的,满足了预期的功能。

4 总结

本文提出了一种时钟共享多线程处理器的数据通信机制, 完成了modelsim的功能仿真、Xilinx ISE14.4 的综合, 工作频率达到431.816 MHz, 在Vertex7-2000T的FPGA开发板实现了验证。 该设计的近邻通信和线程间通信机制减少了片上资源的使用率且降低了数据传输的延迟,有效地提高了处理器的性能。

摘要:多核多线程处理器[1]是并行技术的一个发展方向,基于多核多线程处理器,提出了一种时钟共享多线程处理器。该处理器有近邻通信和线程间通信两种通信机制,近邻通信采用近邻共享FIFO来传递信息,线程间通信通过线程间共享存储来传递信息,这样可以提高处理器的资源利用率和并行执行能力。

关键词:时钟共享多线程,近邻通信,线程间通信

参考文献

[1]屈文新,樊晓桠,张盛兵.多核多线程处理器存储技术研究进展[J].计算机科学.2007(4).

[2]GRATZ P,SANKARALINGAM K,HANSON H,et al.Implementation and evaluation a dynamically routed processor operand network[C].Proceedings of First International Symposium on Networks-on-chip,IEEE Computer Society,2007,23(10):7-17.

[3]黄志钢,盛肖炜.多核处理器结构与核间通信的CMC总线设计[J].沈阳理工大学学报,2012,31(6):70-91.

[4]徐卫志,宋风龙,刘志勇,等.众核处理器片上同步机制和评估方法研究[J].计算机学报,2010,33(10):1777-1787.

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

多线程处理器发展 篇4

关键词:FITS文件,多线程,光谱

1 引言

在天文学研究中,天体的主要信息都存在于光谱中,通过观测所得到的光谱经过一系列处理以数据文件的形式进行存储,现在主要的光谱文件存储格式是FITS格式。对光谱的进一步处理,如分析测量分类等,都需要对FITS文件进行解析。因此如何高效快速地对FITS文件进行分析处理具有很大的意义。目前大部分光谱处理及分析软件都是基于单条FITS文件进行处理,不适于进行快速批量的FITS文件的读取。为了解决这个问题,本文提出了基于多线程的FITS文件的快速处理方法。第1部分介绍了FITS文件的数据结构和一些主要参数;第2部分介绍并分析了当前处理FITS的主要软件;第3部分介绍快速处理FITS文件的方法实现;在第4部分通过对该实现的性能测试给出了实验的结果和结论。

2 FITS文件介绍

FITS(Flexible Image Transport System)是为天文数据传输和交换提供的一种标准格式。它描述了数据定义和数据编码的一般方法[4]。FITS文件是由多个文件头和数据块组成的。一个FITS文件中有七个HDU,每个HDU都包括文件头(ASCII码)和数据记录。下面以第0个HDU为例,给出其文件头和数据记录的主要格式及内容[1]。其中文件头中包含:

Simple: 是否符合文件标准。

BITPIX: 一个数据值的位数,有5种允许的情况,8位,16位,32位二进制整数,浮点数(32和64位,按照IEEE标准)

Spectra classification 光谱分类

这些是主要的文件头的参数,可以看出,跟据文件头定义的标准可以读出很多有关光谱的属性。在FITS文件中,文件头的结束标志为“END”。在文件的数据部分为8位字节流的形式存放。图1为FITS文件7个HDU的结构示意图。

3 当前主要FITS处理软件的分析

随着计算机技术、互联网技术,特别是像软件开发工具的快速发展,天文软件也像其它门类软件一样得到了高速发展。天文软件的开发队伍中既有世界著名的软件公司、专业软件开发人员,也有酷爱软件编程的天文爱好者。现在的天文软件种类繁多,内容几乎涉及天文学的各个领域。

fv是由美国宇航局高能天体物理科学文献研究中心开发的,是适用于多平台的FITS浏览和编辑软件;FITS Tools 是一组用于观察和修改FITS文件的应用程序。利用CFITSIO库函数用C编写,其代码可由用户修改;FTOOLS Package是一个用于FITS光谱分析和测量的大型的软件包,包含了丰富的功能;此外,还有很多处理FITS文件的软件,如FITS IMAGER 2000,FITSX等[2]。这些软件主要是用于FITS文件的读取浏览和FITS的编辑功能。对单条的FITS有很好的编辑功能,其共同的特点就是对单一FITS文件的处理功能强大,集合了很多处理的功能模块,但是不能很好地快速地进行多条FITS文件的并发处理,因而在处理速度和效率上存在着不足。

4 FITS的快速处理方法

4.1 快速FITS读取的设计原理

进行快速FITS处理的基本思想是采用计算机处理的多线程技术。通过多线程技术进行多FITS文件并发读写,将读出的光谱数据进行自动编号并按所需格式进行存储。

从FITS的构成中可知,每个FITS文件中包含一个主HDU,并有六个扩展头组成。在本设计中,主要实现了FITS文件头的读取、数据部分的读取以及把读出的光谱数据按特定格式进行存储。本实现中,所读取的光谱数据统一存放于自定义的浮点格式的.CODE文件中。

在读取文件过程中,文件I/O是最耗费时间的。因此在文件读取和写入过程中,通过建立多个线程,为每个线程分配一个FITS文件,多个线程并发执行,从而加快处理速度。同时使用加锁机制避免各线程的对同一文件写入会引起文件写入的冲突。FITS处理系统的示意如图2所示,线程的工作流程如图3所示。

4.2 快速FITS读取的具体实现:

开发环境为visual studio.net,采用C#进行编码。文件读写所用到的最基本的FileStream类,它打开文件可进行读写字节操作,它是由Stream类抽象而来的,它的许多属性和方法都是从Stream类派生得到的[3]。

由于FITS文件的数据块部分为8位的字节流,所以就恰恰用到了FileStream类的读写字节的方法。但是FileStream类同样存在着一些问题,由于C#在强制类型转换方面的不灵活就导致了FileStream类的Read和Write方法使用并且只能使用字节数组,在读文件数据块中虽然起到了很好的作用,但在文件的其它操作方面增加了转换的复杂度和效率,不是很令人满意。为了解决这个问题,又用了System.IO类具有的几个专门用于文件读写的类。图4是对象的层次示意。

在系统中,为了并发处理的方便,在进行FITS文件的选择方面,可进行多个文件的选择(图5),或者指定文件夹(图6),选定目录下的FITS格式文件及子目录中的FITS文件,进而进行并发读取处理。

5 实验结果及结论

通过对程序运行时间的测试,对比运用多线程和顺序的方法进行读取,实验证明在运用多线程的方法读取FITS文件的效率在读大量文件时要比顺序读取好。在测试中实验运行的硬件环境为Intel P4 2.93GHz,512M内存,软件环境为Win XP SP2。分别读取了1条,10条,50条,100条,200条,640条FITS文件进行运行时间测试,分别测试10次求平均值,得到如(表1)的结果。其中的FITS文件来自于SDSS(Sloan Digital Sky Survey)[5]。

在实现中,多线程可以有效地提高CPU的利用率,但是并非线程数越多越好,线程的调度和线程间的切换也会占用处理时间。所以要解决好线程数目和处理时间的关系,选择一个最为有效的线程数。本实现中,利用测量得出的读取处理时间来确定线程的最有效数目。方法是在运行时依次建立3-10个线程对样本数据进行读取处理,记录运行时间,选择运行时间最少时的线程数目作为有效线程数。其中的处理时间对比见表1。

在表中可以看到随着FITS文件数目的增加建立3条线程的读取方式明显效率和速度都很高。3个线程提高了CPU的利用率,达到了提高处理速度和效率的目的。同时,实验结果表明并非线程数越多越好,线程数目越多,花费在线程切换的时间也就越多。所以在运用多线程来处理的时候要找到一个理想的线程数,既可以提高CPU的利用率,又不至于把太多时间浪费在线程切换上面,最终达到快速处理的目的。当然,对于不同指标的计算机,其最优线程数是不同的。

在此FITS文件处理中,由于文件IO是占用时间最长的,为提高处理速度做了一系列的代码优化,比如为了缩小文件的存储空间,并且为后续处理提供方便,数据的写入格式不用科学计数法而直接采用浮点格式,为提高读取效率而设置较大的缓冲区等。

参考文献

[1]胡新华,邓元勇,王先平.Fits图像处理技术荟萃及在太阳观测中的应用.天文研究与技术,2008.3:55-65.

[2]崔辰州,李文等.FITS数据文件的检索和访问.天文研究与技术,2008.2:116-124

[3]H.M.Deitel,P.J.Deitel,J.A.ListField,T.R.Nieto,C.H.Yaeger,M.Zlakina,C#for Experienced Programmers,2003.

[4]The FITS support office at NASA/GSFC.http://FITS.gsfc.nasa.gov/.

多线程处理器发展 篇5

气象信息系统中,气象数据是其核心和基本的组成部分[1],也是气象信息系统提供服务的主要内容,实时气象数据库系统的建设变得日益重要。

运用电子计算机对各种观测或探测手段所获取的大气状态和现象的资料进行加工和管理称之为气象资料处(Meteorological Data Processing ,MDP)。按时效不同,可把气象资料分为实时资料和非实时资料两种[2]。实时资料处理要求迅速、及时,主要通过电子计算机程序控制,把从资料传输系统接收的资料进行识别、分类、质量检查和编集,再按需要送往各个终端或天气预报用的电子计算机系统。非实时资料常采取事后收集加工的方式,没有严格的时限要求,因而可以加工得更加完善。本文重点研究实时气象资料,它对天气预报、数值预报、气候预测,灾害预防等各项实时气象业务尤为重要。因此各种实时观测资料从通信系统进行收集后,必须得到有效的存储管理,并提供方便、快捷的共享服务。

传统的基于进程的单一线程的资料处理只是在获得单类(单个)资料之后进行操作,任务完后才能使进程响应其他资料处理和用户操作,不能同时综合处理多种实时资料。各类别的资料往往需要安装配置各自对应的处理软硬件系统。资料处理效率低且自动化、集成化不高,耗费大量的时间,占用较多的网络和数据库资源,设备利用率低,不能很好地满足气象数据实时采集与处理要求。

基于多线程技术的实时与非确定时气象资料处理系统能够同时执行多项任务、 实现数据并行处理、 减少后台过程和前台界面的相互影响,使多任务并行执行成为可能。通过研究多线程技术和实时气象资料的特性,针对实时气象资料的特性和资料采集处理性能要求和气象业务需求,提出依据不同的实时气象资料的特点分别采取实时和非确定时的分析处理策略,通过多线程编程技术实现。经过实例结果分析,该方法在处理时间上和CPU使用率上比传统方式有明显改进。

1 处理策略研究

1.1 总体结构

实时资料处理系统与气象通信系统、气象业务平台紧密耦合。实时气象资料一般通过气象部门专用网实时获取,气象数据要为气象业务平台提供支持。资料处理软件运行在处理平台上,通过气象部门内网从资料服务器获得源文件,分析处理完成之后存储到专有数据库中,为气象业务平台提供数据支持。业务平台依靠数据支持为气象部门内部提供专业的服务和产品支持,同时也可通过Internet向外网中的公众提供气象共享信息服务。总体结构如图1所示。

1.2 处理策略与流程

实时气象资料的处理策略在本系统中至关重要,它会影响整个系统的数据处理的性能。根据实时气象资料生成的属性将其分为确定时实时资料和非确定时实时资料。确定时实时资料指的是生成、发布时间一般比较固定的资料,而非确定时实时资料的生成、发布时间就相对随机,这两类资料本文采用不同的处理策略。

确定时间生成发布资料获取时间范围确定。例如自动站报文每隔6分钟生成一次,城市短时天气预报每日发布6时、11时、17时预报各一次。处理这类资料是在规定延迟时间内定时启动程序调用相应线程进行实时处理。

非确定时间生成发布资料的获取的时间比较随机。一般取决于地域、季节、气候等外界因素,资料生成无固定时刻,例如预警信息。在处理这类资料时,系统按照预先设置间隔时间扫描文件。扫描时若有新的待处理资料则主程序给相应的处理程序分配一个线程进行处理。这类资料的处理是在一个相对随机的时间进行,因此称非确定时处理。

采取这样的策略:首先,提高系统的可用性,可以通过设置系统中定时模块满足在资料发布业务时效性规程改变情况下不影响系统的使用;其次,优化了系统资源分配,省略了定时发布资料在不必要时间段内的文件扫描,对于非确定时发布资料可以根据地域、季节、气候等特点设定某些资料的扫描频率。处理策略流程如图2所示。

2 多线程优化

2.1 单一线程的进程

应用程序启动时操作系统为程序分配内存及其他资源,内存和资源的物理分离叫做进程,是程序在计算机上的一次执行活动[3]。线程是进程内部的一条可执行路径,是CPU调度的单位,是进程的一个执行单元。每个进程应至少有一个线程,即主线程。

2.2 多线程的进程

一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效地提高系统内多个程序间并发执行的程度,从而显著提高系统资源的利用率和吞吐量[4]。

一个应用程序可以创建多个线程,多个不同的执行流,并同时运行这些线程。线程机制使系统具有多任务功能,用户可以同时运行多个程序,且每个程序中又可同时运行多个线程[5],这样多个线程并发的在同一进程中。多线程并行效率模型如图3所示。

2.3 .NET下多线程实现

从本质上和结构来说,.NET是一个多线程的环境。CRL内置支持多线程应用,任何 .NET框架下的语言,包括Visual C#在内,实现多线程时不再需要使用Win32API,可直接使用系统类提供的对象和方法。在VS2005中实现多线程非常方便,System.Threading命名空间提供一些使得可以进行多线程编程的类和接口,可以直接使用它建立多线程应用程序。

System.Threading.Thread类是创建并控制线程,其定义了多种方法,其中用Thread. Start()、Thread.Stop()、Thread.Resume()、Thread.Abort()、 Thread. Suspend()、Thread.Join()等方法操纵线程,还可通过Thread.Sleep()、Thread.isAlive()、Thread。

IsBackground()等方法设置线程状态。

System.Threading.Thread.Priority枚举了线程的优先级别,从而决定了线程能够得到多少CPU时间。高优先级的线程通常会比一般优先级的线程得到更多的CPU时间,如果不止一个高优先级的线程,操作系统将在这些线程之间循环分配CPU时间。C#中线程优先级从高到低分为Highest、Above、Normal、Normal、BelowNormal、Lowest 5级[6,7,8]。

3 气象资料处理

资料处理系统定时实时处理测报月报表(A报、B报)、SP和DG、城镇预报、短时天气预报这几类测报和预报产品,非确定时间实时处理预警信号、台风、自动站实时报文这几类测报产品。一般情况下,创建少数几个关键线程,用它来解决某个特定的问题[9] 。本系统创建了9个数据处理子线程,当程序启动时读取ini文件,完成数据库连接设置,定时初始化,资料扫描路径等初始化设置后,创建相应子程序线程。多线程处理流程如图4所示,具体步骤为:(1)应用程序启动后,读取INI初始化,如需更改设置,可在程序运行过程中更改设置,改变的信息写入INI。(2)初始化完毕后,系统创建资料处理线程。(3)线程进入while循环,确定时处理进入休眠—等待状态,非确定时处理线程扫描INI路径下文件进入间隔扫描—休眠状态。 (4)定时唤醒实时处理线程,扫描INI路径下文件。(5)有新文件,分别进入各自处理函数、分析解析文件、处理入库,更新日志,修改已处理文件名。(6)如无新文件,进入历史文件操作函数,处理符合条件的历史文件。(7)程序重复上述工作。(8)终止线程,程序结束。

4 实例与结果分析

气象资料种类繁多,资料格式复杂程度、数据量大小、处理精度差异很大。该系统处理的9类实时气象资料中,采取定时实时处理的几种报文结构复杂,资料处理占用时间和空间资源大,在实际业务中对系统的性能要求较高,特别是实时资料处理的时效性和专有处理设备的利用率两个指标比较重要,以下实例验证分别对这两个关键指标性能进行分析。

试验环境为: Windows XP Professional SP3,.NET Framework 2.0,CPU为Inter(R)Core(TM)2 Duo CPU E7400,内存3.5G,SuSe11企业版+Oracle10g IBM X3800 8866-1RC专用数据库服务器,100M局域网。

4.1 时间效率分析

随机选取某地区同一个站点A报、B报和城镇天气预报报文6个月的资料进行测试分析如表1所示。

该系统采用的多线程并行处理运行时间效率与传统的采用基于进程的单一线程处理对比如图5所示。可以看出:(1)对同一组资料处理,该方法较传统方式节省时间。(2)随着数据量的增加,数据量越大,该方法在时间效率性能越好。

4.2 CPU使用率分析

一个进程的所有线程可同时执行,Win32自动在一个进程的多个线程间进行切换。Windows操作系统能将可利用的 CPU时间分配给当前进程的各个线程[10]。使用同一组待处理数据资料,在进程启动之后100秒内,记录该进程在Windows任务管理器中CPU使用率的90次变化数据。将文中多线程

技术并行处理A报,B报和城镇预报与传统的基于进程的单一线程分别处理A报,B报和城镇预报时CPU使用效率作对比,如图6所示。可以看出:采用多文中方法后,CPU的使用效率有了显著提高。

5 结束语

气象资料的处理在气象业务信息化进程中十分重要,本文提出并实现的基于多线程技术的实时和非确定时气象资料处理比传统采用单一线程的进程处理具有较好的时间效率和CPU的利用率。产品已推广到地市一级的气象业务单位,有效地提高了业务过程的自动化、集成化分析处理性能,改善了业务流程的信息化水平,特别是在处理海量历史数据时性能更优。文中提出的针对实时资料生成特点采取定时实时处理或非确定时处理的策略,对其他行业海量实时数据的处理也具有参考和借鉴作用。

参考文献

[1]赵芳.气象数据库系统的建设[C].信息技术在气象领域应用开发,2006:191.

[2]刘旭,祖雪梅.对气象信息化资料重要性的探析[J].林业勘查设计,2010,3:29-30.

[3]Tobin Titus,Fabio Claudi Ferracchiati,Tejaswi Redkar,et al.C#Threading Handbook[M].New York:Apress,2004:3-13.

[4]Josepb Albabari,Ben Albabari.C#4.0IN A NUTSHELL The De-finitive Reference[M].Sebastopol:O'Reilly Media,Inc,2010:873-878.

[5]张能立,张彬.谈谈在.Net下的多线程编程[J].中国水运:理论版,2006,4(3):104-105.

[6]卜春芬.C#后台处理与多线程技术的应用[J].昆明学院学报,2010,32(3):82-85.

[7]欧阳志鹏,沈富可.基于改进线程池技术服务器程序的设计与实[J].计算机与数字工程,2005,33(10):133-135.

[8]Christian Nagel,Bill Evjen,Jay Glynn,等.C#高级编程[M].李铭,译.北京:清华大学出版社,2008:483-489.

[9]郭辉.多线程效率[J].计算机应用,2008,28(12):143.

上一篇:营销变革论文下一篇:多媒体存储