如何精确计算出一个算法的CPU运行时间?
2005-12-27 09:25
525 查看
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=211457
你需要多精确?
GetTickCount可以到18-20ms进度
timeGetTime可以到1ms精度
……
当然这些都不是C or c++ 标准支持的。
那么就要祭出最牛奔的方法,
直接读取CPU开机以来执行的机器周期数,
一条汇编指令:RDTSC (就是 ReaD TimeStamp Count)
精度可以达到ns级别。(准确地说精度是1 / 你的CPU的时钟频率,这也是极限)
long HighStart,LowStart,HighEnd,LowEnd;
long numhigh,numlow;
__asm
{
RDTSC
mov HighStart, edx
mov LowStart, eax
// put your time-consuming code here ……
RDTSC
mov HighEnd, edx
mov LowEnd, eax
//获取两次计数器值得差
sub eax, LowStart
cmp eax, 0
jg L1
neg eax
jmp L2
L1: mov numlow, eax
L2: sbb edx, HighStart
mov numhigh, edx
}
__int64 timer =(numhigh<<32) + numlow; //得出最终结果
你需要多精确?
GetTickCount可以到18-20ms进度
timeGetTime可以到1ms精度
……
当然这些都不是C or c++ 标准支持的。
那么就要祭出最牛奔的方法,
直接读取CPU开机以来执行的机器周期数,
一条汇编指令:RDTSC (就是 ReaD TimeStamp Count)
精度可以达到ns级别。(准确地说精度是1 / 你的CPU的时钟频率,这也是极限)
long HighStart,LowStart,HighEnd,LowEnd;
long numhigh,numlow;
__asm
{
RDTSC
mov HighStart, edx
mov LowStart, eax
// put your time-consuming code here ……
RDTSC
mov HighEnd, edx
mov LowEnd, eax
//获取两次计数器值得差
sub eax, LowStart
cmp eax, 0
jg L1
neg eax
jmp L2
L1: mov numlow, eax
L2: sbb edx, HighStart
mov numhigh, edx
}
__int64 timer =(numhigh<<32) + numlow; //得出最终结果
相关文章推荐
- 11如何精确计算出一个算法的CPU运行时间?
- 如何精确计算出一个算法的CPU运行时间
- 如何精确计算出一个算法的CPU运行时间
- VC计算算法的CPU运行时间
- C++计算一个程序运行时间,精确到毫秒
- 如何计算一个算法的时间复杂度
- 如何计算一个算法的时间复杂度
- C#精确计算算法运行时间
- C语言如何计算算法运行时间
- 如何精确计算一个方法执行的时间-如博客园的提交评论提交耗时xxx毫秒?
- 如何计算一个算法的时间复杂度和空间复杂度
- 如何计算一个算法的时间复杂度
- 一个c++中计算算法运行时间的程序
- 如何精确计算程序运行时间——精确获取时间(QueryPerformanceCounter)
- 如何测量一个程序的CPU时间/程序的运行时间
- C#如何利用Stopwatch比较精确的测试算法运算时间
- 饥饿和公平 原文地址 By Jakob Jenkov 翻译 Simon-SZ 校对:方腾飞 如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。而该线
- 计算一个程序的运行时间
- 如何将所有的进程运行在一个指定的CPU上
- 如何来求取一个算法的时间复杂度?