在计算机或可编程机器中处理时间值的方法.pdf

上传人:a*** 文档编号:971377 上传时间:2018-03-22 格式:PDF 页数:14 大小:699.16KB
返回 下载 相关 举报
摘要
申请专利号:

CN200910009732.6

申请日:

2009.01.23

公开号:

CN101498951A

公开日:

2009.08.05

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||专利申请权的转移IPC(主分类):G06F 1/04变更事项:申请人变更前权利人:汤姆森许可贸易公司变更后权利人:迪斯尔有限责任公司变更事项:地址变更前权利人:法国布洛涅-比郎库尔变更后权利人:德国汉诺威登记生效日:20110316|||实质审查的生效IPC(主分类):G06F 1/04申请日:20090123|||公开

IPC分类号:

G06F1/04; G06F1/12

主分类号:

G06F1/04

申请人:

汤姆森许可贸易公司

发明人:

爱德华·西蒙斯; 弗朗克·克拉斯; 延斯·布罗克; 斯蒂芬·库布施; 拉尔夫·克勒; 安德烈亚斯·马蒂亚斯·奥斯特

地址:

法国布洛涅-比郎库尔

优先权:

2008.1.30 EP 08101116.5

专利代理机构:

中科专利商标代理有限责任公司

代理人:

王波波

PDF下载: PDF下载
内容摘要

本发明涉及一种在计算机(10、20)或可编程机器中处理时间值的方法。现代计算机(10、20)伴随着具有如时间分辨率、支持的时间范围和时间参考之类的不同属性的不同计时器应运而生。一些是局部计时器,表示如从计算机开机或复位时起对CPU周期进行计数的TSC计数器(11、21)之类的相对时间值。一些是全局计时器,表示绝对或实际时间。计算机中有不同的计时器类,需要执行多种计算以使不同计时器彼此相关。本发明的思想是定义单一的高分辨率计时器结构,其中,用数字来表示时间值,标记阐明了计时器是全局计时器还是局部计时器。本发明实现了非常快的时间值的处理。可以快得多地跟踪与高分辨率计时器相关的全局时间。这意味着如数据传输的分组调度之类的、时间关键的工作的调度的更高精度。

权利要求书

1.  一种在计算机(10、20)或可编程机器中处理时间值的方法,其中,将高精度计时器结构定义为至少包括时间值数字和标记,所述标记阐明了计时器是表示绝对或实际时间的全局计时器,还是表示相对时间的局部计时器。

2.
  根据权利要求1所述的方法,其中,表示绝对或实际时间值的所述全局计时器具有具体日期和时间的意义,并且表示相对时间的所述局部计时器与具体日期和时间没有关联。

3.
  根据权利要求1或2所述的方法,其中,当来自高精度计时器结构的两个时间值作加法时,将时间值相加并将标记以逻辑或运算进行组合,以得到结果值的标记中的条目,其中所述全局计时器标记是显性的,所述局部计时器标记是隐性的。

4.
  根据前述权利要求中任意一项所述的方法,其中,当来自高精度计时器结构的两个时间值作减法时,将时间值相减并将标记以逻辑异或运算进行组合,以得到结果值的标记中的条目,其中所述全局计时器标记是显性的,所述局部计时器标记是隐性的。

5.
  根据前述权利要求中任意一项所述的方法,其中所述时间值数字对应于如下整数值:其具有足以表示来自CPU时间戳计数器TSC的计数器值的比特长度。

6.
  根据权利要求5所述的方法,其中所述整数值是64比特整数。

7.
  一种适于执行根据前述权利要求中任意一项所述的方法的设备。

8.
  一种计算机程序产品,其适于在计算机或可编程机器中运行时,执行根据权利要求1至6中任意一项所述的方法。

说明书

在计算机或可编程机器中处理时间值的方法
技术领域
本发明涉及在计算机或可编程机器中处理时间值的技术领域。计算机或可编程机器通常配置有:具有不同属性的多个不同计时电路或软件功能(计时器),该不同属性特别是精度、所表示的时间范围和时间参考值。
背景技术
时间跟踪和时间计算在计算机和通信系统中是必不可少的。
资源调度通常是基于时间计算。常常非常需要时间测量。例如,当需要在数据网络上将数据分组从一台计算机发送到另一台计算机,以便以优化的方式填充发送器中的发送缓冲器时,计算出精确的传送时间。如果以很高的精确度测量该时间,则甚至可以提高传送速率。另一示例是在计算机上优化程序代码。必须以高精度获知不同代码的执行时间,以便找到优化的代码。
在计算机中处理的计时器数据结构的主要属性是分辨率、参考时间和计时器范围。分辨率表示两个不相等的时间值之间的最小正时间差。参考时间表示启动时间计数时的时间点。范围表示最小与最大可能时间值之间的范围。该范围通常由存储该值的数据结构(或寄存器)的大小限制。然而,在现代计算系统中,不同的时间系统同时处理具有不同分辨率、参考时间和范围的不同类型的计时器。
在许多基于Unix的系统上,用户空间中的主要时间对自1970年1月1日起经过的秒进行计数。时间范围是2^32—1秒。以毫秒对自1900年1月1日起的、MS-Windows的主要应用程序时间进行计数。
然而,硬件支持的、具有高得多的分辨率的一些其他时间系统可用于许多系统上。例如,对从计算机开机起的每个CPU周期进行计数的TSC计数器(时间戳计数器)可用于基于Intel 80x86 CPU的PC平台上。CPU周期时间与对CPU提供时钟的时钟信号的时钟周期对应。虽然个人计算机平台上的TSC计数器实现为64比特寄存器,但可能存在以下缺点:在现代计算机系统中给出高于3GHz的高CPU频率的情况下,TSC计数器会在几年内回绕一圈。当然,每当开机和系统复位之后,对TSC计数器进行复位,因此不太可能到达最大值。例如,以3GHz速度计时的CPU中的TSC计时器可以对最多跨越194年的事件进行计时。
如TSC计数器之类的高分辨率计数器的其他缺点是这样的计数器的局部有效性。如果独立的操作两个或更多个计算系统,则难以对由不同系统的TSC计数器计数的时间进行比较。然而在网络或通信系统中,需要以高时间分辨率监控数据流和处理级。
发明内容
本发明处理如下问题:定义并实现有效的代数(algebra),以由具有如计时器范围、分辨率和参考时间之类不同属性的不同计时器对计时器值进行计算。这些计算特别包括:计算这些计时器值的和以及差值。该代数有助于将具有高精度和减小的计算支出的时钟进行比较。
本发明在于如权利要求1所要求的在计算机或可编程机器中处理时间值的方法。本发明还涉及如权利要求7所要求的执行该方法的设备以及如权利要求8所要求的计算机程序产品。
根据本发明,将高精度计时器数据结构定义为由至少一个时间值数字加上标记构成,该标记阐明了计时器是表示绝对或实际时间的全局计时器还是表示相对时间的局部计时器。如果时间值表示绝对或实际时间值,则计时器将得到全局计时器状态。例如,Unix的主要时间和MS Windows应用程序时间都被归入全局计时器类型。如果时间值表示没有参考绝对或实际时间值的相对经过时间,则计时器具有作为局部计时器的属性,因此,例如,TSC计时器是典型的局部计时器。
高精度计时器类的定义大大有助于减小CPU更新计时器数据结构所需的处理能力。虽然根据传统计时器数据结构,每当更新计时器结构时,必须使与高分辨率和低分辨率有关的结构成员同步,但根据本发明的一种高精度计时器数据结构的定义,提出了具有不同时间标度和不同分辨率的两个计时器系统之间的时间同步的简化方案。
于是,将并入两种不同的时间系统,更有效地执行对具有标记赋值的所述计时器结构的计算(计算时间的和以及差)。由于对计时器值的计算将执行得快得多,所以可以在时间关键的系统上跟踪与高分辨率计时器相关的全局时间。由此,可以实现时间关键的工作的调度(如分组调度)的更高精度。由于网络栈中加强的计时器计算负载,使有效的计时器计算方法变得关键。因此,在高速网络上可以用本发明的方法提高数据分组传送速率。
另外的有利实施例可显见于从属权利要求。为了计算时间差或时间和,特别有利的是:将时间值相减或相加,并将标记结合在逻辑运算中,以得到结果值在标记中的条目。这些逻辑或布尔运算执行得非常快且可以具有硬件支持。
逻辑或(OR)运算对时间值的加法而言是有利的,逻辑异或(XOR)对时间值的减法而言是有利的。
附图说明
在附图中示出了本发明的实施例,以下将说明该实施例。附图示出了配备有多个不同计时器的、通过网络电缆彼此相连的两台计算机。
具体实施方式
图1示出了通过用于数据通信的LAN电缆40彼此相连的两台计算机10、20。计算机可以是例如大功率工作站、普通PC或单芯片PC。计算机10、20所附着的网络可以是高速网络。高速网络不仅在如电影或TV摄影棚之类的视频制造场所中越来越有用,而且在广域分发网络中也越来越有用。典型的示例是10G以太网或无限带宽。这种网络的需求例如但不限于:
·分组化数据传输
·低时延
·同步信息,如所包括的音频-视频时间戳
·视频及有关音频内容的复用
·对抗差错的鲁棒性——比特差错不应对上层可见
·硬件构件块的容易的支持
·元数据(如时间、音频、视频、摄像机参数)的支持
在摄影棚中,专业视频联网表示无压缩地传送视频内容。对于HD质量,在每秒24帧和3*10比特颜色深度的情况下,在2k(2048*1080像素)分辨率下,得到净数据速率为1.59Gbit/s的视频流。在4k分辨率(4096*2160像素)下,得到甚至更高的数据速率。对于HDTV格式1080i/720p,在摄影棚环境(无压缩)下,得到从250到300Mbit/s的数据速率。这就示出了在这种情况下高速联网意味着什么。
为了对事件进行计时和测量时间跨度,现代计算机系统配备有多个不同的计时器、计数器和时钟。现在,将描述一些普通的计时器及限制如下:
首先,在PC中有内置实时时钟(RTC)。该时钟是电池供电的,且在PC处于掉电(power down)模式的情况下也能运行。此处,可以读取数据和时间,但精度不高,仅为大约+/-1秒/天。
在C编程语言中有称作“time()”的函数。为了测量时段,在开始和停止事件之前和之后将调用该函数,计算差值将给出在两事件之间耗费的时间。该计时器的精确度为大约+/-1秒。该计时器可以对最多持续79年的事件进行计时。
对于需要更高精确度的事件,可以使用多媒体计时器。函数名为timeGetTime。以与C运行期函数相同的方式使用该计时器,来调用函数timeGetTime。该计时器具有+/-10毫秒的精确度,且可以处理最多持续49天的事件。
利用处理器块提供了甚至更高的精度。在具有3GHz处理器的系统上,计时器可以测量持续小于1纳秒的事件。该计时器被称作TSC计时器(时间戳计数器),该计时器在3GHz系统上的精确度为+/-0.333纳秒。然而,不能使用高级语言直接访问该计时器。只能使用汇编指令读取时间戳计数器(RDTSC,Read Time Stamp Counter)来调用该计时器。依赖于如何存储时间值,该计时器可以处理能持续非常长时间的事件。例如,如果将时间值存储为32比特值,则该计时器可以测量最多仅运行1.432秒的事件。然而,如果将时间返回为64比特值,则可以对最多跨越194年的事件进行计时。
使用该计时器时应当意识到一个缺点。例如,膝上型计算机使用II处理器,以后会内置Intel Speedstep技术。同样地,AMD处理器Athlon 64或Turion 64使用称作Cool’n’Quiet或PowerNow的技术。虽然当膝上型计算机靠电池而运行时,这些技术对节约电量是有益的,但改变了处理器频率。如果在目标代码运行的同时频率发生变化,则最终的读取将会是冗余的,这是由于没有使用相同的时钟频率来进行初始和最终的读取。该期间内出现的时钟计时单元(clocktick)数将是精确的,但所经过的时间将是未知的。
另一种现有计时器被称作增强型计时器(Etimer),其基于两个Windows* API函数QueryPerformanceCounter和QueryPerformanceFrequency。没有办法获知利用哪个频率来在任何给定的平台上实现这两种函数。但可以确信的是:该计时器的频率在计时过程中绝对不会发生变化。该计时器可以是芯片集计时器、或电源管理计时器、或其他计时器。制作Etimer以满足如下两个目的:其一,其可用作精确到纳秒的高精度计时器;其二,其与Speedstep技术或类似的技术无关。OS将检验系统是否具有内置的高精确性时钟。如果具有,且系统不具有节能机制,则该计时器将利用该时钟,该时钟极可能是处理器时钟。否则,该计时器将使用另一种恒定频率的时钟,如芯片集、BIOS或电源管理计时器。当在应用程序中使用该计时器时,要考虑某些因素。由于Etimer使用系统调用QueryPerformanceCounter和QueryPerformanceFrequency,所以将会引入与系统调用相关联的开销。Etimer还具有与检验机制相关联的另一开销,该检验机制确保所有测量都在相同的处理器上进行。如果开销对于应用程序而言太大,则建议通过调用指令RDTSC来使用处理器时钟。
在基于Unix的系统中有称作Unix时间或POSIX时间的时钟,其对自1970年1月1日协调世界时(UTC)00:00:00起经过的秒进行计数。时间范围是232-1秒。普遍地,UTC的一天精确持续86400秒。PC将基于由实时时钟(如RTC时钟,或如果更精确的时钟可用,则使用更精确的时钟)提供的时间参考值来计算相应的值。更精确的时钟的示例是如GPS时钟、或美国国家标准局(National Bureau of Standards)时钟、或类似的时钟(如来自Braunschweig中的PhysikalischeBundesanstalt的时间服务)。
在MS Windows中,以毫秒对自1900年1月1日起的、可用的主要应用时间进行计数。
在Linux OS中,对于秒,函数调用gettimeofday传递以32比特整数表示的Unix时间值,以及以另一32比特无符号整数表示的微秒数量。这是上述Unix时间的扩展。
在以上各项中,全局范围计时器是实时时钟RTC、及GPS、NBS或PTB时间、Unix主要时间、以及MS Windows主要应用程序时间。所有其他的是不表示绝对或实际时间的局部计时器。
图1所示的两个计算机配备有TSC计时器11和21、RTC计时器12和22、以及Linux计时器13和23。计算机10还连接到外部GPS计时器30,并因此具有更精确的机载实时时钟。现有网络时间协议NTP将用于使计算机20内部的时钟与GPS计时器30同步。
为了以高精确度将不同工作站或PC中的时刻作比较,有利的解决方案是:将如以秒计数的Unix系统时间或以毫秒计数的MS Windows系统时间之类的全局范围计时器,与如TSC计数器之类的一个高分辨率计时器组合起来。一种将(局部范围)高分辨率计时器与全局范围计时器结合在一起的可行解决方案通常实现如下。
在计时器系统的初始化期间,必须使全局时钟(Unix时间)与局部范围时钟(TSC)同步。标准的Unix时间(表示时间点的数据类型)是有符号整数数据类型,传统地为32比特,直接对前述部分中描述的Unix时间数进行编码。其为整数意味着具有一秒的分辨率;因此,许多Unix应用程序将时间仅处理到该分辨率。其为32比特(其中的一个比特是符号比特)意味着覆盖总共约136年的范围。可表示的最早时间是1901-12-13T20:45:52Z,可表示的最晚时间是2038-01-19T03:14:07Z。在2038-01-19T03:14:08Z时,该表示法将会溢出。
在Linux OS中,对于秒,函数调用gettimeofday传递以32比特整数表示的Unix时间值,以及以另一32比特无符号整数表示的微秒数量。
为了将不同计算机中的时间值作比较,必须确定两个计时器之间的比例因子TSC_per_microsecond。这可以例如凭经验来执行。当然,为此,需要获知CPU时钟的频率。在如Linux或MS Windows之类的操作系统中提供了函数调用GetFrequency。例如,MSWindows基于WindowsAPI函数QueryPerformanceCounter和QueryPerformanceFrequency提供了所谓的增强型计时器(Etimer)。当已知频率时,毫秒内的信号周期数反映了值TSC_per_microsecond。在一个实施方式中,在表中针对所有可能的CPU时钟提供TSC_per_microsecond值。在确定了CPU时钟频率之后,将从表中读取对应的TSC_per_microsecond值。这就在确定该值时避免了耗时的计算。
此后,当复位TSC计数器时,在Unix时间中针对秒和微秒设置两个数zeroTSC_seconds和zeroTSC_microseconds。
每当更新计时器数据结构的一个组件的时间值时,必须使与高分辨率(TSC)和低分辨率(秒、微秒)有关的结构成员彼此同步。
给出C++编程语言中计时器类的实施方式如下:
Class Timer{
int32 seconds;
uint32m icroseconds;
int64 TSC;
public:
Timer();
private:
static uint 32 zero TSC_second;
static uint 32 zero TSC_microseconds;
static uint 32 TSC_per_microsecond;
...
}
在每个计时器数据结构更新的情况下,必须执行至少一次加法或减法以及一个缩放(乘法或除法)运算,以使高分辨率与低分辨率部分彼此相关。
只要针对两个计时器对象Timel和Time2通过上述方式提取高分辨率组件(TSC),以下计算步骤对于使每个计时器对象同步而言就是必需的:
0)Timel.TSC=RDTSC
1)Timel.seconds=zeroTSC_seconds+Timel.TSC/1000000/TSC_per_microseconds
2)Timel.microseconds=zeroTSC_microseconds+Timel.TSC/TSC_per_microseconds
3)Timel.seconds+=Timel.microseconds/1000000
4)Timel.microseconds%=Timel.microseconds;
同样的运算对于第二个对象而言也是必需的。
步骤0)与TSC计数器的读数对应。如同所示,根据传统的方法,需要几次加法和除法。仅在类的高分辨率和低分辨率组件的同步之后才可以将两个计时器作比较。然而,在高端通信系统中,通常必须每微秒一次或几次地执行这样的运算,这在时间关键的系统内可能成为问题。因此,希望对时基(time base)的这种同步进行简化。以下提出了使用具有不同分辨率和不同参考点的两个时间系统的更有效方法。根据本发明,将实际计时器数据结构的成员数减少到仅有具有更高分辨率的系统(TSC)的相关成员。静态成员照常跟踪两时间系统之间的偏移和比例因子。
将在计时器系统初始化期间计算并设置这些静态成员。此处,引入称作global_timer标记的布尔型变量,以取代上述其余成员。现在,计时器数据结构变为如下所示的不同的数据结构:
Class Timer{
int64 TSC;
bool global_timer;
public:
Timer();
private:
static uint32 zero TSC_second;
static uint32 zeroTSC_microseconds;
static uint32 TSC_per_microsecond;
}
如果设置为全局时间(即,对于Unix或Linux自01.01.1970起的秒和毫秒,以及对于MS Windows自01.01.1900起的秒和毫秒),则将计时器考虑为全局计时器(代表绝对或实际时间)。由于仅有TSC变量来存储时间,所以必须将秒和毫秒缩放到TSC分辨率,如以下公式所示:TSC=((seconds*1000000+microseconds)*TSC_per_microseconds)。
在这种情况下,必须将global_timer标记设置为真。该运算与根据上述传统方法的两时间系统之间的每次转换耗费大致相同的时间。然而,具有秒和毫秒组件的低分辨率计时器不如基于高分辨率TSC的计时器组使用频繁。此外,低分辨率计时器所需的精确度低于高分辨率计时器的精确度。因此,与精确值的偏离低于以毫秒表示的分辨率,而TSC分辨率下的相同类型的计算更加关键。注意,在两种情况下需要大致相同量的指令。
如果将计时器设置为高分辨率计时器,则TSC计时器数据结构的成员(不是global_timer标记)被设为假。将这种计时器的意义描述为局部计时器(相对计时器)。
在实际系统中,TSC计时器的回绕将在参考时间点(如果如上将其计算出的话)后大约100年发生。如果发生这种情况,则秒和毫秒成员必须仍存在于新数据结构内。然而,取决于计时器的意义(局部或全局,见下文),TSC成员或秒和毫秒成员将会有效。这将导致所提出的方法的一些性能损失,但所提出的方法仍然比传统方法更快速。
除了将类赋值给计时器以外,性能关键(performance critical)的大多数对计数器结构的运算是加法和减法。
在进行了上述对计时器类的每次赋值运算以及加法和减法的情况下,仅有TSC值必须被设置,或被重新计算;这分别表示对TSC成员赋值,或对TSC成员作加法或减法。另外,必须将表示结果值意义的global_timer标记设置如下:
a)在赋值运算(其为编程语言中的运算)时,新计时器继承所赋的值的意义。因此,此处,将从赋值者(assignor)继承全局或局部属性。
b)在两个计时器作加法时,得到的global_timer标记是这两项的标记的逻辑或(OR)运算的结果。
 

操作数1操作数2结果局部局部局部局部全局全局全局局部全局全局全局全局

给出局部和全局计时器值的加法的示例如下:
24:00:00Z+2008-01-25T16:25:00Z=2008-01-26T16:25:00Z
显然,得到全局计数器值。
上表的最后一行中的运算不是在每种环境下都成立。然而在数学上,它是正确的且可以用于一些普通计算。使用该运算的一种情况可以是:一些事件到达的全局平均时间的计算。对于这种计算,必须将多个全局计时器相加,其结果再除以计时器数目。
c)当两个计时器作减法时,得到的global_timer标记是这两项的异或(XOR)运算的结果。
 操作数1操作数2结果全局全局局部局部全局全局全局局部全局局部局部局部

给出一个示例如下:
24:00:00Z-2008-01-25T16:25:00Z=-2008-01-24T16:25:00Z
在这种情况下,来自全局计时器的时间值是负的。乍一看它在物理上不成立。然而,由于性能的原因,在处理器的ALU中,经常使用这些负时间值。此外,利用这些负值进行计算并随后对它们取反会比互换时间参数更快速。
用于计算计时器意义的异或运算以及或运算比用于将一个计时器数据结构转换为另一个的一个整数加法/减法和一个乘法/除法快得多。此外,可以使用一些门,以硬件的方式实现异或运算以及或运算,因此,执行计时器计算的这种方法将比执行传统传统方法快得多。
需要对时间值进行加法、减法或比较的典型应用是:
在数据网络上传送数据分组的往返延迟RTT或单项延迟的计算、配置管理、发动机控制、自动控制技术。
上述说明书、示例和附图完整地描述了本发明组分的制造和使用。在不背离本发明的精神和范围的前提下,可以设计出本发明的多种实施例。本发明在于以下所附的权利要求。可以采用软件手段或硬件手段来实现根据本发明的方法。

在计算机或可编程机器中处理时间值的方法.pdf_第1页
第1页 / 共14页
在计算机或可编程机器中处理时间值的方法.pdf_第2页
第2页 / 共14页
在计算机或可编程机器中处理时间值的方法.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《在计算机或可编程机器中处理时间值的方法.pdf》由会员分享,可在线阅读,更多相关《在计算机或可编程机器中处理时间值的方法.pdf(14页珍藏版)》请在专利查询网上搜索。

本发明涉及一种在计算机(10、20)或可编程机器中处理时间值的方法。现代计算机(10、20)伴随着具有如时间分辨率、支持的时间范围和时间参考之类的不同属性的不同计时器应运而生。一些是局部计时器,表示如从计算机开机或复位时起对CPU周期进行计数的TSC计数器(11、21)之类的相对时间值。一些是全局计时器,表示绝对或实际时间。计算机中有不同的计时器类,需要执行多种计算以使不同计时器彼此相关。本发明的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1