#include <stdio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>

int64_t delta[10000];

uint64_t rte_rdtsc(void)
{
	union {
		uint64_t tsc_64;
		struct {
			uint32_t lo_32;
			uint32_t hi_32;
		};
	} tsc;

	asm volatile("rdtsc" :
		     "=a" (tsc.lo_32),
		     "=d" (tsc.hi_32));
	return tsc.tsc_64;
}

int main(void)
{
  int i,j;
 int  f[2560],t[2560];
  int64_t start, stop, delta_m, delta_cur, dur;
  delta[0] = 0LL;
  
  for(j=1; j <10000; j++)
  {
	start = rte_rdtsc();
	for(i=0; i<1000;i++)
	{
	      memcpy(t, f, sizeof(t));
	}
        stop = rte_rdtsc();
	delta[j] = stop - start;	
  }
  
  delta_m =0;
  
  for(j = 2; j< 10000; j++)
  {
      delta_cur = delta[j]- delta[j-1];
      if( delta_cur > delta_m) 
      {
	  dur = delta[j]; 
	  delta_m = delta_cur; 
      }
      printf( "duration: %ld ",  delta[j]);
      printf( "delta: %ld \n",  delta_cur);
  }
  printf("duration max: %ld ", dur);
  printf("delta max: %ld \n", delta_m);
}

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
