Why `memmove` function has significant difference in two different computers?

Viewed 82

I've tried to run the following C code from two different computers.

#include <string.h>

int a[100000];
int main(){
    for(int sz = 100000; sz > 1; sz --){
        memmove(a, a+1, 4*(sz - 1));
    }
}

Computer A uses 800ms, while computer B uses 6200ms. The running time of B is always far more than A.

Environment

compile command

Shell is bash. And the -O gcc command doesn't influence runtime.

gcc myfile.c -o mybin 
time ./mybin

Computer A

gcc 9.3.0

glibc: ldd (Ubuntu GLIBC 2.31-0ubuntu9) 2.31

uname_result(system='Linux', release='5.4.0-100-generic', machine='x86_64')

CPU: Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz

Computer B

gcc 9.3.0

glibc: ldd (Ubuntu GLIBC 2.31-0ubuntu9.2) 2.31

uname_result(system='Linux', release='4.4.0-210-generic', machine='x86_64')

CPU: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz

Question

Then I run the following file on same virtual machines, with different kernal version(4.4.210-0404210-generic x86_64 and 5.4.0-113-generic x86_64) with gcc 9.3.0. Two test cost less than 500ms.

#include <string.h>
#include <time.h>
#include <stdio.h>

#define TICK(X) clock_t X = clock()
#define TOCK(X) printf("time %s: %g sec.\n", (#X), (double)(clock() - (X)) / CLOCKS_PER_SEC)

int a[100000];
int main(){
    TICK(timer);
    for(int sz = 100000; sz > 100; sz --){
        memmove(a, a+1, 4*(sz - 1));
    }
    TOCK(timer);
}

How can I find the cause?

0 Answers
Related