CPU Frequency MicroSecond time
AMD X2 64 dual core 2,2GHz overclocked to 2.6GHz
Manchester, socket 939, 90nm
XP32bitSP3
1007 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1010 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1009 NanoSeconds 1 MilliSeconds
1004 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1004 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1008 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1007 NanoSeconds 1 MilliSeconds
1012 NanoSeconds 2 MilliSeconds
1011 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1007 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1010 NanoSeconds 0 MilliSeconds
Averages 1028 NanoSeconds 1 Milliseconds
2600 MHz
Right ! Good work.
Manchester, socket 939, 90nm
XP32bitSP3
1007 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1010 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1009 NanoSeconds 1 MilliSeconds
1004 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1004 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1008 NanoSeconds 1 MilliSeconds
1006 NanoSeconds 1 MilliSeconds
1007 NanoSeconds 1 MilliSeconds
1012 NanoSeconds 2 MilliSeconds
1011 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1007 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1005 NanoSeconds 1 MilliSeconds
1010 NanoSeconds 0 MilliSeconds
Averages 1028 NanoSeconds 1 Milliseconds
2600 MHz
Right ! Good work.
hmm!
I got a Phenom X3 (3 cores) at it's factory 2.1GHz although it slightly fluctuates near it my a MHz or two (using CPU-Z).
The nanosec seems to be all over the place with up to 300 difference?
Not sure what you mean by "Still need to make it work on x64, replacing the quads should do the trick."
RDTSC and QPC are both 64bit on both x86 and x64.
I got a Phenom X3 (3 cores) at it's factory 2.1GHz although it slightly fluctuates near it my a MHz or two (using CPU-Z).
The nanosec seems to be all over the place with up to 300 difference?
Not sure what you mean by "Still need to make it work on x64, replacing the quads should do the trick."
RDTSC and QPC are both 64bit on both x86 and x64.
Code: Select all
2100 MHz 2203 NanoSeconds 3 MilliSeconds
2100 MHz 2051 NanoSeconds 2 MilliSeconds
2100 MHz 2020 NanoSeconds 2 MilliSeconds
2100 MHz 2059 NanoSeconds 2 MilliSeconds
2100 MHz 2032 NanoSeconds 2 MilliSeconds
2100 MHz 2045 NanoSeconds 2 MilliSeconds
2100 MHz 2047 NanoSeconds 2 MilliSeconds
2100 MHz 2053 NanoSeconds 2 MilliSeconds
2100 MHz 2071 NanoSeconds 3 MilliSeconds
2100 MHz 2195 NanoSeconds 2 MilliSeconds
...
2100 MHz 2050 NanoSeconds 2 MilliSeconds
2100 MHz 2044 NanoSeconds 2 MilliSeconds
2100 MHz 2216 NanoSeconds 2 MilliSeconds
2100 MHz 2238 NanoSeconds 2 MilliSeconds
2100 MHz 2039 NanoSeconds 2 MilliSeconds
2100 MHz 2044 NanoSeconds 2 MilliSeconds
2100 MHz 2061 NanoSeconds 2 MilliSeconds
2100 MHz 2034 NanoSeconds 2 MilliSeconds
2100 MHz 2186 NanoSeconds 2 MilliSeconds
...
2100 MHz 2066 NanoSeconds 2 MilliSeconds
2100 MHz 2028 NanoSeconds 2 MilliSeconds
2100 MHz 2063 NanoSeconds 2 MilliSeconds
2100 MHz 2205 NanoSeconds 2 MilliSeconds
2100 MHz 2027 NanoSeconds 2 MilliSeconds
2100 MHz 2048 NanoSeconds 3 MilliSeconds
2100 MHz 2151 NanoSeconds 2 MilliSeconds
2100 MHz 2057 NanoSeconds 2 MilliSeconds
2100 MHz 2201 NanoSeconds 2 MilliSeconds
...
2100 MHz 2045 NanoSeconds 2 MilliSeconds
2100 MHz 2055 NanoSeconds 2 MilliSeconds
2100 MHz 2114 NanoSeconds 2 MilliSeconds
2100 MHz 2304 NanoSeconds 2 MilliSeconds
2100 MHz 2048 NanoSeconds 2 MilliSeconds
2100 MHz 2026 NanoSeconds 2 MilliSeconds
2100 MHz 2052 NanoSeconds 2 MilliSeconds
2100 MHz 2212 NanoSeconds 2 MilliSeconds
2100 MHz 2040 NanoSeconds 2 MilliSeconds
2100 MHz 2048 NanoSeconds 2 MilliSeconds
...
2100 MHz 2206 NanoSeconds 2 MilliSeconds
2100 MHz 2027 NanoSeconds 2 MilliSeconds
2100 MHz 2022 NanoSeconds 2 MilliSeconds
2100 MHz 2087 NanoSeconds 2 MilliSeconds
2100 MHz 2185 NanoSeconds 2 MilliSeconds
2100 MHz 2119 NanoSeconds 2 MilliSeconds
2100 MHz 2047 NanoSeconds 3 MilliSeconds
2100 MHz 2226 NanoSeconds 2 MilliSeconds
2100 MHz 2026 NanoSeconds 2 MilliSeconds
2100 MHz 2252 NanoSeconds 3 MilliSeconds
...
2100 MHz 2129 NanoSeconds 2 MilliSeconds
2100 MHz 2224 NanoSeconds 3 MilliSeconds
2100 MHz 2044 NanoSeconds 2 MilliSeconds
2100 MHz 2026 NanoSeconds 2 MilliSeconds
2100 MHz 2083 NanoSeconds 2 MilliSeconds
Averages 2110 NanoSeconds 2 Milliseconds
That was with the debugger off! 
Also, quad (.q) is 64 bit on both x64 and x86, long (.l) is 32bit on both x64 and x86,
integer (.i) is 32bit on x86 and 64bit on x64.
Don't take my word for it, it's in the manual
With RDTSC and QPC if you only get the lowest 32bit your just getting the smaller part of the number.
On really fast CPU's the TSC counter moves so fast that it changed even some of the higher 32bits several times per ms.
Take a peek at some of my older posts, do a search with my name and um "random" and "dice" under Tips'N'Tricks, there is a procedure that in asm that gets the RDTSC,
the result of that asm call stores the counter in EAX and um ECX I think (or was it EDX?) since it's a 64bit value.

Also, quad (.q) is 64 bit on both x64 and x86, long (.l) is 32bit on both x64 and x86,
integer (.i) is 32bit on x86 and 64bit on x64.
Don't take my word for it, it's in the manual

With RDTSC and QPC if you only get the lowest 32bit your just getting the smaller part of the number.
On really fast CPU's the TSC counter moves so fast that it changed even some of the higher 32bits several times per ms.
Take a peek at some of my older posts, do a search with my name and um "random" and "dice" under Tips'N'Tricks, there is a procedure that in asm that gets the RDTSC,
the result of that asm call stores the counter in EAX and um ECX I think (or was it EDX?) since it's a 64bit value.
Code: Select all
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1024 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1008 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1013 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1008 NanoSeconds 1 MilliSeconds
MHz 1003 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1003 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1003 NanoSeconds 1 MilliSeconds
MHz 1008 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 0 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1003 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1007 NanoSeconds 2 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1008 NanoSeconds 1 MilliSeconds
MHz 1003 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1006 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1007 NanoSeconds 1 MilliSeconds
MHz 1004 NanoSeconds 1 MilliSeconds
MHz 1005 NanoSeconds 1 MilliSeconds
MHz 1012 NanoSeconds 1 MilliSeconds
Intel Core2Quad @ 3.15 GHz
Thank you!
that looks good.
I guess another test would be to run the whole process at real time priority. I've noticed that when you enable the millisecond test the results come out more mixed though when you turn it off they appear more accurate but with larger fluctuations, perhaps BeginTimePeriod raises processes priority.
Also I'm still puzzled over Rescator results did he run his test with a debugger on or with a delay to 2 nanoseconds or a loop of 2000 or is it just broken! If the delay is set to 1 it should come out as 1000 nanoseconds not 2000.
If it could be considered stable enough to use, it does have a distinct disadvantage on multicore systems in that you're essentially locking it to a single core which requires that you'd have to design an app around that limitation and spawn a worker thread to run the main app so it can take advantage of the cores. I don't think it'll work the other way round.
I guess another test would be to run the whole process at real time priority. I've noticed that when you enable the millisecond test the results come out more mixed though when you turn it off they appear more accurate but with larger fluctuations, perhaps BeginTimePeriod raises processes priority.
Also I'm still puzzled over Rescator results did he run his test with a debugger on or with a delay to 2 nanoseconds or a loop of 2000 or is it just broken! If the delay is set to 1 it should come out as 1000 nanoseconds not 2000.
If it could be considered stable enough to use, it does have a distinct disadvantage on multicore systems in that you're essentially locking it to a single core which requires that you'd have to design an app around that limitation and spawn a worker thread to run the main app so it can take advantage of the cores. I don't think it'll work the other way round.
idle, your gonna love or hate this.
Just because you doubted I ran again, and yes I compiled without the debugger from the menu.
And this time I used the source from the first post, my previous test was using your 2nd one that you've now removed.
Scroll careful down and you'll see 1120, you'll see up to a 1530 nanosec, and scroll carefully further and you'll have a really nice surprise indeed
*watches idle tear out what little hair he has left*
Just because you doubted I ran again, and yes I compiled without the debugger from the menu.
And this time I used the source from the first post, my previous test was using your 2nd one that you've now removed.
Scroll careful down and you'll see 1120, you'll see up to a 1530 nanosec, and scroll carefully further and you'll have a really nice surprise indeed

*watches idle tear out what little hair he has left*

Code: Select all
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1018 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1018 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1120 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1033 NanoSeconds 2 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1044 NanoSeconds 1 MilliSeconds
2100 MHz 1032 NanoSeconds 2 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1022 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1024 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1017 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1025 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1026 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1038 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1005 NanoSeconds 1 MilliSeconds
2100 MHz 1022 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1066 NanoSeconds 1 MilliSeconds
2100 MHz 1040 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1016 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1026 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1017 NanoSeconds 1 MilliSeconds
2100 MHz 1018 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1020 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1026 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1027 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1025 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1028 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1022 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1034 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1016 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1025 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1123 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1033 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1005 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1022 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1022 NanoSeconds 2 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1015 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1013 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1020 NanoSeconds 1 MilliSeconds
2100 MHz 1020 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1010 NanoSeconds 1 MilliSeconds
2100 MHz 1032 NanoSeconds 1 MilliSeconds
2100 MHz 1014 NanoSeconds 1 MilliSeconds
2100 MHz 1083 NanoSeconds 1 MilliSeconds
2100 MHz 1513 NanoSeconds 2 MilliSeconds
2100 MHz 1421 NanoSeconds 1 MilliSeconds
2100 MHz 1158 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1247 NanoSeconds 1 MilliSeconds
2100 MHz 1011 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 2 MilliSeconds
2100 MHz 1012 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1090 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1087 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1030 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 1095 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1037 NanoSeconds 1 MilliSeconds
2100 MHz 1117 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1006 NanoSeconds 1 MilliSeconds
2100 MHz 1023 NanoSeconds 1 MilliSeconds
2100 MHz 1021 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 33985 NanoSeconds 34 MilliSeconds
2100 MHz 1007 NanoSeconds 1 MilliSeconds
2100 MHz 1019 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 1017 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1125 NanoSeconds 1 MilliSeconds
2100 MHz 1020 NanoSeconds 1 MilliSeconds
2100 MHz 1008 NanoSeconds 1 MilliSeconds
2100 MHz 1009 NanoSeconds 1 MilliSeconds
2100 MHz 1069 NanoSeconds 1 MilliSeconds
Averages 1045 NanoSeconds 1 Milliseconds
I can't believe I didn't check this earlier...
whatever "Nanoseconds" you are displaying, are not nanoseconds.
Check this out: http://www.google.com/#q=1+millisecond+in+nanoseconds
Or this: http://en.wikipedia.org/wiki/Orders_of_ ... %28time%29
"1,000,000,000 nanoseconds: 1 second"
So you have to redo some stuff...
Just as a quick example I used your source, tossed out the thread stuff as it tended to crash now and again here. (something with the asm in it probably)
I got rid of the delay procedure to reduce timing overhead.
Something interesting is that if I try for a 1ns delay, I never get much lower than 5000 something, which means QPC has quite a bit overhead (as has been noted by many coders before), timeGetTime_() has less overhead, and getTickCounts_() even less than that, obviously those have less accuracy.
You will never be able to get 1ns delays on any current computers I guess, due to the fact that a 2.1GHz is only able to do (on average I assume) 2.1 cycles per nanosecond, and QPC and even fetching RDTSC etc. uses more than 2.1 cycles.
What your source seems to display is microseconds rather than nanoseconds.
1 sec / 1000 = 1 millisecond
1 millisecond / 1000 = 1 microsecond
1 microsecond / 1000 = 1 nanosecond
Setting the ns=1000000 to ns=1 here results in an average of 5205 nanoseconds. And since my cores are 2.1GHz each that means I'd need over 1THz to get close to 1ns timings.
PS! Even commenting out the Delay(0) only shaves off down to an average of 3987.
PPS! Oh and on my system the QPC have a precision of 14MHz. (it uses a high precision clock crystal on the motherboard I assume)
whatever "Nanoseconds" you are displaying, are not nanoseconds.
Check this out: http://www.google.com/#q=1+millisecond+in+nanoseconds
Or this: http://en.wikipedia.org/wiki/Orders_of_ ... %28time%29
"1,000,000,000 nanoseconds: 1 second"
So you have to redo some stuff...
Just as a quick example I used your source, tossed out the thread stuff as it tended to crash now and again here. (something with the asm in it probably)
I got rid of the delay procedure to reduce timing overhead.
Something interesting is that if I try for a 1ns delay, I never get much lower than 5000 something, which means QPC has quite a bit overhead (as has been noted by many coders before), timeGetTime_() has less overhead, and getTickCounts_() even less than that, obviously those have less accuracy.
You will never be able to get 1ns delays on any current computers I guess, due to the fact that a 2.1GHz is only able to do (on average I assume) 2.1 cycles per nanosecond, and QPC and even fetching RDTSC etc. uses more than 2.1 cycles.
What your source seems to display is microseconds rather than nanoseconds.
1 sec / 1000 = 1 millisecond
1 millisecond / 1000 = 1 microsecond
1 microsecond / 1000 = 1 nanosecond
Setting the ns=1000000 to ns=1 here results in an average of 5205 nanoseconds. And since my cores are 2.1GHz each that means I'd need over 1THz to get close to 1ns timings.

PS! Even commenting out the Delay(0) only shaves off down to an average of 3987.
PPS! Oh and on my system the QPC have a precision of 14MHz. (it uses a high precision clock crystal on the motherboard I assume)
Code: Select all
EnableExplicit
#CompareMilliSeconds = 1
Global mod.d,nano.d,freq.q
CompilerIf #CompareMilliSeconds
Global timecaps.TIMECAPS
timeGetDevCaps_(@timecaps, SizeOf(TIMECAPS))
timeBeginPeriod_(timecaps\wPeriodMin)
CompilerEndIf
Global sum1.q,sum2.q,ct.i,elt.q,mst.l,men.l,el.l,avg1.q,avg2.q,sta.q,sto.q
;We use a double modifier as that is faster than double division.
;1 nanosec = 1000000000 = 1GHz, QPF = counts per sec.
QueryPerformanceFrequency_(@freq)
mod=freq/1000000000
nano=1000000000/freq
OpenConsole()
Delay(100)
;Global mfreq = InitTimer(500)
;PrintN(Str(mfreq) + " MHz")
Define te.q, tn.q, mtime.q, ns.i
Repeat
ns=1000000 ;Should be ~1000000 nano seconds or 1ms
mtime=ns*mod ;convert from ns to QPC frequency.
QueryPerformanceCounter_(@sta)
CompilerIf #CompareMilliSeconds
mst = timeGetTime_()
CompilerEndIf
;Wait ns nanoseconds, not using a procedure as that would add overhead.
QueryPerformanceCounter_(@te)
Repeat
Delay(0) ;contextswitch, delay varies.
QueryPerformanceCounter_(@tn)
Until (tn-te)>=mtime ;We need to subtrack endtime by start time to avoid sign wrapping issues,
;just like we need to do with timeGetTime_(), ElapsedMilliseconds(), GetTickCount_() etc.
QueryPerformanceCounter_(@sto)
CompilerIf #CompareMilliSeconds
men=timeGetTime_()
CompilerEndIf
elt = (sto - sta)*nano ;convert from QPC frequency to ns
CompilerIf #CompareMilliSeconds
el = men - mst
PrintN(Str(elt) + " NanoSeconds " + Str(el) + " MilliSeconds")
CompilerElse
PrintN(Str(elt) + " NanoSeconds ")
CompilerEndIf
ct+1
sum1 + elt
sum2 + el
Until Inkey()
avg1 = sum1 / ct
CompilerIf #CompareMilliSeconds
avg2 = sum2 / ct
PrintN("Averages " + Str(avg1) + " NanoSeconds " + Str(avg2) + " Milliseconds")
CompilerElse
PrintN("Averages " + Str(avg1) + " NanoSeconds ")
CompilerEndIf
Input()
CompilerIf #CompareMilliSeconds
timeEndPeriod_(timecaps\wPeriodMin)
CompilerEndIf

Whatever caused the 35000 Mircoseconds it wasn't the fault of the timer, something else caused it as evidenced by the Milliseconds. possibly your email client or the AV sniffing the ether.
The jumps are relative so it's not a fault of the timer, it's simply the result of multitasking, It's still reporting the elapsed time with a reasonable accuracy.
Right I will have a look at your second post.