[Dъvida] Teste de velocidade Loop. -
vinewood - 26.01.2011
Olб,
Apenas queria saber se esse simples teste de velocidade de execuзгo de loops(macro`s) й valido, se ele estб correto.
pawn Код:
#include <a_samp>
#define maxloop (1000000)
#define Loop(%0,%1) \
for(new %0 = 0; %0 != %1; ++%0)
#define Reloop(%0,%1) \
for(new %0 = %1; %0 != -1; --%0)
new NTest1 = 4;
new TestTimer1;
new NTest2 = 4;
new TestTimer2;
public OnFilterScriptInit()
{
TestTimer1 = SetTimer("Timer",2000,true);
TestTimer2 = SetTimer("Timer2",2000,true);
return 1;
}
forward Timer();
public Timer()
{
new gc = GetTickCount();
new a[11];
Loop(x,maxloop)
{
Loop(z,11)
{
a[z] = (x*z);
}
if(a[0] == a[0] && x == x)
{
a[0]=(x*x);
a[1]=((x+x)/5)+(a[5]*a[6]);
}
}
printf("Resultado Loop: %d ,Repetido: %d mil vezes",(GetTickCount() - gc),maxloop);
NTest1--;
if(NTest1 == 0) KillTimer(TestTimer1);
return 1;
}
forward Timer2();
public Timer2()
{
new gc = GetTickCount();
new a[11];
Reloop(x,maxloop)
{
Reloop(z,10)
{
a[z] = (x*z);
}
if(a[0] == a[0] && x == x)
{
a[0]=(x*x);
a[1]=((x+x)/5)+(a[5]*a[6]);
}
}
printf("Resultado Reloop: %d ,Repetido: %d mil vezes",(GetTickCount() - gc),maxloop);
NTest2--;
if(NTest2 == 0) KillTimer(TestTimer2);
return 1;
}
Resultados:
pawn Код:
[20:59:16] Resultado Loop, Tempo: 1480 ,Repetido: 1000000 mil vezes
[20:59:19] Resultado Loop, Tempo: 1508 ,Repetido: 1000000 mil vezes
[20:59:22] Resultado Loop, Tempo: 1483 ,Repetido: 1000000 mil vezes
[20:59:25] Resultado Loop, Tempo: 1481 ,Repetido: 1000000 mil vezes
[20:59:28] Resultado Reloop, Tempo: 1323 ,Repetido: 1000000 mil vezes
[20:59:31] Resultado Reloop, Tempo: 1280 ,Repetido: 1000000 mil vezes
[20:59:34] Resultado Reloop, Tempo: 1304 ,Repetido: 1000000 mil vezes
[20:59:37] Resultado Reloop, Tempo: 1316 ,Repetido: 1000000 mil vezes
Re: [Dъvida] Teste de velocidade Loop. -
zSuYaNw - 26.01.2011
pawn Код:
#include <a_samp>
#define maxloop (1000000)
#define Loop(%0,%1) \
for(new %0 = 0; %0 != %1; ++%0)
#define Reloop(%0,%1) \
for(new %0 = %1; %0 != -1; --%0)
new NTest1 = 4;
new NTest2 = 4;
public OnFilterScriptInit()
{
Timer();
Timer2();
return 1;
}
forward Timer();
public Timer()
{
new gc = GetTickCount();
new a[11];
Loop(x,maxloop)
{
Loop(z,11)
{
a[z] = (x*z);
}
if(a[0] == a[0] && x == x)
{
a[0]=(x*x);
a[1]=((x+x)/5)+(a[5]*a[6]);
}
}
printf("Resultado Loop: %d ,Repetido: %d mil vezes",(GetTickCount() - gc),maxloop);
NTest1--;
return 1;
}
forward Timer2();
public Timer2()
{
new gc = GetTickCount();
new a[11];
Reloop(x,maxloop)
{
Reloop(z,10)
{
a[z] = (x*z);
}
if(a[0] == a[0] && x == x)
{
a[0]=(x*x);
a[1]=((x+x)/5)+(a[5]*a[6]);
}
}
printf("Resultado Reloop: %d ,Repetido: %d mil vezes",(GetTickCount() - gc),maxloop);
NTest2--;
return 1;
}
Tenta assim.
Respuesta: [Dъvida] Teste de velocidade Loop. -
ipsBruno - 26.01.2011
Para executar o testa entre 2 circuitos realmente nгo й necessбrio colocar tantas vбriavels e pilhas,pois conformo o desempenho de seu computador elas podem vбriar a forma de execuзгo a atrasar o cуdigo,assim sendo um teste fail.
Aqui:
pawn Код:
#include <a_samp>
#define maxloop (1000000)
#define Loop(%0,%1) \
for(new %0 = 0; %0 != %1; ++%0)
#define Reloop(%0,%1) \
for(new %0 = %1; %0 != -1; --%0)
public OnFilterScriptInit()
{
new Tick;
Tick = GetTickCount();
Loop(x,maxloop * 4) { }
printf("Resultado Loop: %d ,Repetido: %d mil vezes",GetTickCount() - Tick,maxloop);
Tick = GetTickCount();
Reloop(x,maxloop * 4) { }
printf("Resultado Reloop: %d ,Repetido: %d mil vezes",GetTickCount() - Tick,maxloop);
return 1;
}
Ah enquanto ao sistema estб correto,porйm ao inves de usar != use '>' ou '<' й muito mais leve na hora do processo.
E este seu sistema de loop,nгo й nada otimizado e sim uma simples definiзгo,tente fazer uma lista encadeada interna,й o melhor que se pode fazer em pawn
Re: [Dъvida] Teste de velocidade Loop. -
vinewood - 26.01.2011
@Garfield obrigado por tentar, mas teu forte й lasanha e cochilo na poltrona ( 0

L na brincadeira).
@Drakins valeu no inicio do pawn achava que < & > era mais rбpido mesmo, mas por costume dos outros cуdigos em que analizava sempre aparecia com mais freqькncia != entгo decidi sempre ultilizar tal(Desculpa fajuta), vou seguir teu conselho de usar uma lista encadeada, aproveitando o Post talvez alguem possa resolver essa minha outra questгo:
https://sampforum.blast.hk/showthread.php?tid=216259
Respuesta: [Dъvida] Teste de velocidade Loop. -
ipsBruno - 26.01.2011
Mas no caso de uma Lista encadeada serб necessбrio utilizar array multi dimensionais...
Entгo assim como Foreach em PHP,ou qualquer outras linguagem vocк precisa de 2 arrays
1: Value - Array para armazenar o valor do Iterator
2: Circuito/Loop - Array do circuito, estilizada para percorrer o Loop
Seria basicamente isto:
pawn Код:
#define Loop(%0,%1,%2,%3) for(new %1,%2; %0[%1] != %3; %2 = %0[++%1])
Agora use:
pawn Код:
new Array[10] = {02,185,1581,1510,11,8515,151};
Loop(Array,x,y,sizeof(Array))
{
printf("Iterator: %d | Value: %d | Exception: %d",x,y,sizeof(Array));
}
E veja,ele imprimi o valor do circuito e o valor da array equivalente ao nъmero do circuito representado pela array x.
Antes que me esqueзa o '%3' й excessгo,digamos que vocк queria que o Loop nгo percorra o nъmero tal.
No caso eu coloquei como sizeof porque nгo precisei de nenhum excessгo,era apenas um teste.