[Rio-pm] Perturbado...
Blabos de Blebe
blabos em gmail.com
Sábado Novembro 24 15:38:24 PST 2007
Boa noite,
Tava sem nada pra fazer, então fiquei alternando entre "O Livro" e um
livro de assembly x86.
Aí bateu aquela curiosidade mórbida de fazer algo tosco...
resolvi fazer em assembly, Perl e C++ um programa idiota que entrasse
num loop grande,
e medir quem era mais rápido com o programa time, no linux.
Eis os códigos fontes:
Em Assembly
<code>
#PURPOSE: This program count from 0 to a big number
# only to make a benchmark
#VARIABLES: the registers have the following uses
# %edi - Count variable.
# %ebx - The maximum number of iterations.
.section .data
max_numb:
.long 2147483647
.section .text
.globl _start
_start:
movl $0, %edi
movl max_numb , %ebx
init_loop:
incl %edi
cmpl %edi, %ebx
jg init_loop
movl $0, %ebx
movl $1, %eax
int $0x80
</code>
Em C++
<code>
int main( int argc , char** argv )
{
for( long i = 0 ; i < 2147483647 ; i++ );;
return 0;
}
</code>
Em Perl
<code>
#!/usr/bin/perl
my $i = 0;
while($i++ < 2147483647){}
</code>
Eu esperava que o programa em assembly fosse terminar primero que os
outros, e que
o loop em Perl fosse brigar com o C++ pelo segundo lugar, pois meus
testes tocos,
com outros códigos vinham caminhando nesse sentido. Por várias vezes,
Perl foi mais
rápida que C++, e em outras, um pouco mais lenta.
Para minha surpresa não foi o que aconteceu. Eu repeti isso umas 3
vezes e o resultado
foi semelhante. Segue a saída do time:
<code>
user em machine:~/docs/asm/code/cap-03$ time ./loop.pl
real 9m21.105s
user 7m49.761s
sys 0m2.888s
user em machine:~/docs/asm/code/cap-03$ time ./loopc
real 0m4.180s
user 0m3.984s
sys 0m0.040s
user em machine:~/docs/asm/code/cap-03$ time ./loop
real 0m1.551s
user 0m1.484s
sys 0m0.004s
user em machine:~/docs/asm/code/cap-03$
</code>
Putz, enquanto os programas em C++ e Assembly demoraram poucos segundos,
o programa em perl demorou quase 10 MINUTOS!!!!
Naturalmente cheguei a conclusão que fiz alguma cagada, ignorando algo
importante
que deve estar na documentação (a qual estou ainda lendo), mas não
descobri o que.
Estou levemente desconfiado que é algo bobo que eu deixei escapar, mas o que?
Não to querendo levantar nenhuma questão sobre performance ou comparação de
linguagens, só achei curioso códigos tão parecidos executarem em tempos tão
diferentes, embora também, uma coisa não tenha nada a ver com a outra.
Gostaria de saber a opinião de vcs a respeito
Obrigado
Mais detalhes sobre a lista de discussão Rio-pm