论文部分内容阅读
随着计算机技术的发展,信号接收设备大量运用于计算机进行设备控制、数据处理和人机交互。在接收设备完成天线信号接收、模数转换和解调处理后,人机交互和后续数据处理显示工作由计算机应用软件来完成。通常设备要求体积小、功耗低,编写的软件需充分发挥CPU性能,以提升设备效率。本文结合多通道接收设备,讨论多线程技术在利用CPU资源方面的应用。
设备情况
多通道接收設备用于0.1~30 MHz频率范围内的短波无线电信号的接收和解调。接收设备采用CPCI总线化设计,可满足固定台、站等不同场合下的应用。接收设备可独立完成常规信号的解调,同时将解调的基带I/Q和语音数据通过总线传输到上位机,实现上层网控处理。
多通道接收设备由CPCI主控单元、8块接收板卡和CPCI机箱组成,如图1所示。
接收设备主控单元采用CPCI主板,该产品是一款基于第三代低压Intel i7双核四线程(TDP 25 W、主频2.5 GHz)的CPCI刀片式计算机。接收板卡包括信道电路、本振电路、信号处理电路和音频功放电路。无线电信号经过接收板卡处理后,转换为基带I/Q和语音数据,再由驱动以中断的形式通知操作系统,将数据传至应用层软件。应用软件把收到的数据处理后显示为波形图、频谱图,同时将数据以文件形式保存至硬盘,并通过网络分发到后端台位。
问题现象
由底层上传的8路音频数据最大采样率为153.6 kbps,采用拉格朗日插值法实现任意可变采样率时,运算量非常大,应用软件出现卡顿现象,任务管理器的CPU使用约为28 %,并且CPU的线程1已接近满载,如图2所示。将数据存储后用cooledit软件打开时,发现保存在硬盘中的文件数据出现不连续,如图3所示,直接影响到后续的分析处理结果。
原因分析
监视CPU使用情况,发现随着使用路数的增加,CPU线程1的使用率随之增加,但其他三路占用率变化不大。理想状况下,每块接收板卡的中断到来后,应用软件立即接收数据并及时进行处理。但是当多路接收板卡同时工作时,由于各个接收板卡的硬件是相互独立的,不同板卡产生中断的时间间隔不确定,有可能非常接近。当应用软件正在处理其中一块接收卡数据时,另一块接收卡产生中断,造成数据阻塞。大量的阻塞发生后,导致CPU某一路占用度过高,影响系统的整体性能,造成数据处理和保存的异常。
解决办法
由于数据处理需要占用部分CPU资源,当8路接收卡的数据处理都是在主线程中完成时,无法充分利用CPU资源,因此采用多线程技术的应用程序可以更好地利用系统资源。该方法主要优势在于充分利用了CPU的空闲时间片,用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。
为此,在软件中给8路接收卡的数据处理部分创建独立的线程,并将未处理的数据缓存到数据池中,在各个线程中进行数据处理与保存到硬盘的操作。使用AfxBeginThread函数创建线程,在线程中使用WaitForSingleObject等待事件被触发,处理完数据后调用ResetEvent复位事件信号,退出软件时调用AfxEndThread函数结束线程。经过调整后的软件运行时的CPU使用效率得到提升,资源分配均匀,如图4所示;未出现卡顿现象,保存在文件中的数据连续,如图5所示。
通过对比增加数据处理多线程前后的CPU使用情况,可以明显看到效率的提高和资源利用更加均衡。应用软件的多线程实现多路接收信号的并行处理与保存时,可提升CPU的处理效率,避免中断影响数据处理和文件保存,保证了数据的连续性和有效性。
设备情况
多通道接收設备用于0.1~30 MHz频率范围内的短波无线电信号的接收和解调。接收设备采用CPCI总线化设计,可满足固定台、站等不同场合下的应用。接收设备可独立完成常规信号的解调,同时将解调的基带I/Q和语音数据通过总线传输到上位机,实现上层网控处理。
多通道接收设备由CPCI主控单元、8块接收板卡和CPCI机箱组成,如图1所示。
接收设备主控单元采用CPCI主板,该产品是一款基于第三代低压Intel i7双核四线程(TDP 25 W、主频2.5 GHz)的CPCI刀片式计算机。接收板卡包括信道电路、本振电路、信号处理电路和音频功放电路。无线电信号经过接收板卡处理后,转换为基带I/Q和语音数据,再由驱动以中断的形式通知操作系统,将数据传至应用层软件。应用软件把收到的数据处理后显示为波形图、频谱图,同时将数据以文件形式保存至硬盘,并通过网络分发到后端台位。
问题现象
由底层上传的8路音频数据最大采样率为153.6 kbps,采用拉格朗日插值法实现任意可变采样率时,运算量非常大,应用软件出现卡顿现象,任务管理器的CPU使用约为28 %,并且CPU的线程1已接近满载,如图2所示。将数据存储后用cooledit软件打开时,发现保存在硬盘中的文件数据出现不连续,如图3所示,直接影响到后续的分析处理结果。
原因分析
监视CPU使用情况,发现随着使用路数的增加,CPU线程1的使用率随之增加,但其他三路占用率变化不大。理想状况下,每块接收板卡的中断到来后,应用软件立即接收数据并及时进行处理。但是当多路接收板卡同时工作时,由于各个接收板卡的硬件是相互独立的,不同板卡产生中断的时间间隔不确定,有可能非常接近。当应用软件正在处理其中一块接收卡数据时,另一块接收卡产生中断,造成数据阻塞。大量的阻塞发生后,导致CPU某一路占用度过高,影响系统的整体性能,造成数据处理和保存的异常。
解决办法
由于数据处理需要占用部分CPU资源,当8路接收卡的数据处理都是在主线程中完成时,无法充分利用CPU资源,因此采用多线程技术的应用程序可以更好地利用系统资源。该方法主要优势在于充分利用了CPU的空闲时间片,用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。
为此,在软件中给8路接收卡的数据处理部分创建独立的线程,并将未处理的数据缓存到数据池中,在各个线程中进行数据处理与保存到硬盘的操作。使用AfxBeginThread函数创建线程,在线程中使用WaitForSingleObject等待事件被触发,处理完数据后调用ResetEvent复位事件信号,退出软件时调用AfxEndThread函数结束线程。经过调整后的软件运行时的CPU使用效率得到提升,资源分配均匀,如图4所示;未出现卡顿现象,保存在文件中的数据连续,如图5所示。
通过对比增加数据处理多线程前后的CPU使用情况,可以明显看到效率的提高和资源利用更加均衡。应用软件的多线程实现多路接收信号的并行处理与保存时,可提升CPU的处理效率,避免中断影响数据处理和文件保存,保证了数据的连续性和有效性。