I wrote some code to measure cpu cycles per byte. I'm getting negative cpb but dont know why ... It shows me that cpb = -0.855553 cycles/byte
My pseudocode:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
uint64_t rdtsc(){
    unsigned int lo,hi;
    __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;
}
int main()
{
    long double inputsSize = 1024;
    long double counter = 1;
    long double cpuCycleStart = rdtsc();
        while(counter < 3s)
            function(args);
    long double cpuCycleEnd = rdtsc();
        long double cpb = ((cpuCycleEnd - cpuCycleStart) / (counter *  inputsSize));
    printf("%Lf cycles/byte\n", cpb);
    return 0;
}
EDIT, IMPROVED CODE, RESULTS ARE THE SAME (NEGATIVE):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned long rdtsc( void )
    {
        unsigned long lo, hi;
        asm( "rdtsc" : "=a" (lo), "=d" (hi) );
        return( lo );
    }
int main()
{
    long double counter;
    long double inputsSize = 1024;
    char *buff = createInput(inputsSize);
    long double cpuCycleStart = rdtsc();
        countDownTime(3.0);
    for(counter=1; !secondsElapsed; counter++)
            function(args);
    long cpuCycleEnd = rdtsc();
        long double cpb = ((cpuCycleEnd - cpuCycleStart) / (counter *  inputsSize));
    printf("%Lf cycles/byte\n", cpb);
    return 0;
}
Its really strange. Wrote testing code:
printf("\n%lu cpuCycleEnd \n%lu cpuCycleStart \n", cpuCycleEnd, cpuCycleStart);
    printf("\n%lu counter\n%lu inputsSize \n\n", counter, inputsSize);
        long double cpb = (((long double)cpuCycleEnd - (long double)cpuCycleStart) / ((long double)counter *  (long double)inputsSize));
    printf("%Lf cycles/byte\n", cpb);
which shows:
30534991 cpuCycleEnd 
1139165971 cpuCycleStart 
1273029 counter
1024 inputsSize 
-0.850450 cycles/byte
any ideas?
 
    