Sur un fichier de 2 GO, après plusieurs lancements pour être *presque* certain que les deux programmes exploitent de la même façon le cache du système, et en flushant le disque avant/après, bla bla,
En essayant plusieurs taille de *buffer* (ici 16384 Ko), j'obtiens:
time ./test /tmp/big_file /tmp/big_file2 16384
./test /tmp/big_file /tmp/big_file2 16384 0.00s user 1.79s system 14% cpu 12.357 total
time python test.py /tmp/big_file /tmp/big_file3 16384
python test.py /tmp/big_file /tmp/big_file3 16384 0.02s user 2.04s system 21% cpu 9.478 total
Avantage python.
Bon, ce benchmark n'a aucun intérêt, et des fois j'obtiens 11s pour le python et 10 pour le c ;)
[^] # Re: Python ?
Posté par Guillaum (site web personnel) . En réponse au journal gcp: un outil de copie à la cp. Évalué à 1.
Sur un fichier de 2 GO, après plusieurs lancements pour être *presque* certain que les deux programmes exploitent de la même façon le cache du système, et en flushant le disque avant/après, bla bla,
En essayant plusieurs taille de *buffer* (ici 16384 Ko), j'obtiens:
time ./test /tmp/big_file /tmp/big_file2 16384
./test /tmp/big_file /tmp/big_file2 16384 0.00s user 1.79s system 14% cpu 12.357 total
time python test.py /tmp/big_file /tmp/big_file3 16384
python test.py /tmp/big_file /tmp/big_file3 16384 0.02s user 2.04s system 21% cpu 9.478 total
Avantage python.
Bon, ce benchmark n'a aucun intérêt, et des fois j'obtiens 11s pour le python et 10 pour le c ;)
C:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
char* file_in = argv[1];
char* file_out = argv[2];
size_t buffsize = atoi(argv[3]) * 1024;
FILE* fr = fopen(file_in, "rb");
FILE* fw = fopen(file_out, "wb");
char *buffer = (char*) malloc(buffsize);
while(1)
{
size_t read = fread(buffer, sizeof(char), buffsize, fr);
if(read == 0)
break;
size_t writed = 0;
while(writed < read)
{
writed += fwrite(buffer + writed, sizeof(char), read - writed, fw);
}
}
free(buffer);
fclose(fr);
fclose(fw);
}
Python :
import sys
file_in, file_out = sys.argv[1:3]
buffsize = int(sys.argv[3]) * 1024
with open(file_in, 'rb') as fr:
with open(file_out, 'wb') as fw:
while True:
data = fr.read(buffsize)
if len(data) == 0:
break
fw.write(data)
Bon, mon code C pue certainement... Compilé avec -march=native -Os -Wall
Sinon, comment on met du code sans pourrir l'indentation sur linuxfr ?