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?