Intel® ISA Extensions
Use hardware-based isolation and memory encryption to provide more code protection in your solutions.
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.

TSC Problem

faball
Beginner
563 Views

Ciao,

I have a strange situation on my systems with Intel Celeron M 600MHz processor.

In my routine I must calculate the elapsed time between an operation and another.

...

LARGE_INTEGER ini, fin, delta;

ini.QuadPart=RDTSC();

WorkDuringEverAbout15000tick();

fin.QuadPart=RDTSC();

delta.QuadPart=fin.QuadPart-ini.QuadPart;

...

I Use my RDTSC function for calculate delta time:

__inline __int64 RDTSC()

{

LARGE_INTEGER lint;

__asm {

push eax

push edx

_emit 0x0F ;RDTSC - get beginning timestamp to edx:eax

_emit 0x31

mov lint.HighPart,edx ;save beginning timestamp (1 cycle)

mov lint.LowPart,eax

pop edx

pop eax

}

return lint.QuadPart;

}

...where...

typedef union _LARGE_INTEGER {

struct {

DWORD LowPart;

LONG HighPart;

};

struct {

DWORD LowPart;

LONG HighPart;

} u;

__int64 QuadPart;

} LARGE_INTEGER;

almost always the delta time returned is exactly about 15000 but in one case at day I catch about 4294979655.

Now I've changed the code as below:

...

LARGE_INTEGER ini, fin, delta;

ini.QuadPart=RDTSC();

WorkDuringEverAbout15000tick();

fin.QuadPart=RDTSC();

delta.QuadPart=fin.QuadPart-ini.QuadPart;

if(delta.QuadPart>20000)

printf("ini[0x%.8X-0x%.8X] fin[0x%.8X-0x%.8X]\n", ini.HighPart, ini.LowPart, fin.HighPart, fin.LowPart);

...

I see on the video:

ini[0x00000005-0xFFFFCFB6] fin[0x00000006-0xFFFFFFFD]

It is as if the photograph of the upper part is made one second after that of the lower...isn't it?

Or I've made a mistake???

Regards

0 Kudos
0 Replies
Reply