[Include] Teste de Velocidade Preciso
#1

Ultimamente, tenho feitos meus testes com BENCH MARK, mas como й em execuзхes por milissegundo andei notando uma falta de precisгo testes retornados, por este motivo criei minha prуpria BENCH que traz mais informaзхes sobre o processamento do cуdigo, assim podem analisar qual cуdigo й mais rбpido



O que ele processa:

Ele faz por tempo mйdio, dessa maneira a qualidade da mediзгo й bastante alta. Sгo 333 testes com o mesmo cуdigo para pegar da forma mais preciso possнvel o tempo.

Ele pega o tempo mбximo e mнnimo. Para vocк poder analisar os picos e declнnios no tempo de seu cуdigo. Lembrando que isto pode ser por causa do seu processador em casos de picos muito altos.


Ele processa o nъmero total de segundos (como padrгo) para calcular quanto tempo cada cуdigo levou para ser executado. Este й um bom parвmetro, pois em casos de diferenзas absurdas o resultado do cуdigo mais rбpido sempre serб menor.


Ele tambйm processa o nъmero de execuзхes por milissegundos, dessa maneira vocк tem uma mйdia de quantas execuзхes foram feitas em um ъnico millissegundo e poderб checar qual cуdigo conseguiu se reproduzir mais





Modo de uso:



pawn Код:
//

TESTS(333);
// O CУDIGO VAI AQUI
PROCESSAR();
RESULTADO("Nome do cуdigo");
Em TESTS й possнvel estipular a quantidade de processamento que vocк quer exigir, por padrгo й 333. Valores muito grandes ou muito pequenos podem atrapalhar no cбlculo dos valores devido ao limite do Pawn. Deixe entre 100 e 5000, й uma mйdia boa

Quanto maior melhor, porem em valores exagerados pode travar seu samp_server, use com cudiado





Cуdigo da Include:


pawn Код:
#define CONT@CONT GetTickCount()


#define TESTS(%0);          { /*esquentar o processador */ for(new uashushua; uashushua != 9990000; uashushua++) {} /* testar o cуdigo */  new testes___@ [666], mMmEDIA;  new j__@; new TTTiem =   CONT@CONT;  for(new i__@; i__@ != 333; ++i__@ ) { j__@=0;testes___@[i__@] = CONT@CONT;for(; j__@ != %0; ++j__@ ) {
#define PROCESSAR();        }testes___@[i__@] = CONT@CONT - testes___@[i__@];mMmEDIA += testes___@[i__@];}mMmEDIA /= (333);new mmMin = cellmax, mMax = 0;for(new aaa_@_teste; aaa_@_teste != 666; aaa_@_teste++) {
#define RESULTADO(%0);      if(mmMin > testes___@[aaa_@_teste]) mmMin = testes___@[aaa_@_teste]; if(mMax < testes___@[aaa_@_teste]) mMax = testes___@[aaa_@_teste];}printf("Resultados para: "#%0" \n\t\n\t Nъmeros de execuзгo a cada milissegundo: %.5f \n\t Tempo mнnimo: %dms  Tempo mбximo: %dms e Tempo mйdio: %dms\n\t Tempo Final: %d milissegundos\n\n",  float((j__@) / (mMmEDIA > 0 ? mMmEDIA : 1))/1000,mmMin, mMax,mMmEDIA,  CONT@CONT - TTTiem);}


Problemas: Darб loose indentation em alguns casos, basta ignorar ou usar pragma tabsize






Dica importante:


Em Pawn, hб um bug que o primeiro cуdigo se torna mais lento que o segundo. Isto porque й necessбrio criar e alocar novos endereзos e dados na memуria, o que o cуdigo posterior nгo via precisar. Por este motivo, antes dos testes, eu pessoalmente te aconselho a colocar um teste nulo

pawn Код:
TESTS(100);
    PROCESSAR();
    RESULTADO("");

Em cуdigos muito grande o processamento vai demorar mais. Muito mais. Portanto aconselho-te abaixo o valor do STRESS em TESTS.

Outra coisa importante й o seguinte, quando maior for o valor colocado em TESTS, mais o cуdigo poderб ser analisado e com isto, vocк pode obter uma mйdia excelente dos resultados obtidos, pois a mйdia fica mais precisa.



Autoria:

Bruno da Silva desenvolvedor, e William Luigi idealizador.

[iPs]TeaM
Reply
#2

ahah agr sim vou testar as coisas direito

Bom trabalho ae de vc's 2

Parabens!
Reply
#3

Woooool Good Job!
Reply
#4

Paraben! Muito bom trabalho !
Reply
#5

Exemplo de um teste de velocidade:


pawn Код:
new var1 = 2;
    new var2 = 3;
   
    TESTS(2000);
    if(var1 != var2) {}
    PROCESSAR();
    RESULTADO("var1 != var2");

    TESTS(2000);
    if(var1 ^ var2) {}
    PROCESSAR();
    RESULTADO("var1 ^ var2");
   

    TESTS(2000);
    if(var1 != var2) {}
    PROCESSAR();
    RESULTADO("var1 != var2");

    TESTS(2000);
    if(var1 ^ var2) {}
    PROCESSAR();
    RESULTADO("var1 ^ var2");


var1 ^ var2 contra var1 != var2


Resultados:

pawn Код:
[13:52:42] Resultados para: var1 != var2
   
     Nъmeros de execuзгo a cada milissegundo: 26.31500
     Tempo mнnimo: 54ms  Tempo mбximo: 173ms e Tempo mйdio: 76ms
     Tempo Final: 25.3080 segundos


[13:53:03] Resultados para: var1 ^ var2
   
     Nъmeros de execuзгo a cada milissegundo: 31.25000
     Tempo mнnimo: 58ms  Tempo mбximo: 110ms e Tempo mйdio: 64ms
     Tempo Final: 21.3120 segundos


[13:53:22] Resultados para: var1 != var2
   
     Nъmeros de execuзгo a cada milissegundo: 35.08700
     Tempo mнnimo: 54ms  Tempo mбximo: 90ms e Tempo mйdio: 57ms
     Tempo Final: 18.9810 segundos


[13:53:43] Resultados para: var1 ^ var2
   
     Nъmeros de execuзгo a cada milissegundo: 31.74600
     Tempo mнnimo: 59ms  Tempo mбximo: 94ms e Tempo mйdio: 63ms
     Tempo Final: 20.9790 segundos
Como podem ter notado. O Operador XOR reproduz atй 5 execuзхes a mais que o operador de equivalкncia.

Enquanto XOR tem uma media de 63 ~ 65. != Oscila entre 60 e 70.
Reply
#6

Nice, +REP.
Reply
#7

Vocк usou um nъmero meio besta para os testes nй? (entendedores entenderгo)

@Tуpico

Muito bom!
agr sim vou testar as coisas direitoІ
Reply
#8

Sйrio?

Agora poderei testar a velocidade dos meus cуdigos. AHEUAEHUAEHAE

Bom trabalho ( de novo, nй? ) Bruno.
Reply
#9

Quote:
Originally Posted by Juniiro3
Посмотреть сообщение
Vocк usou um nъmero meio besta para os testes nй? (entendedores entenderгo)

@Tуpico

Muito bom!
agr sim vou testar as coisas direitoІ
Eu iria colocar 666 mas iria precisar de uma array muito grande para fazer as mйdias. O que й o bom deste sistema, pois ele calcula atravйs de milhares de execuзгo, sendo o mбximo preciso possнvel nos cбlculos.

Lembrando que quando maior o valor de estresse para o processador, mais lento ficarб o cуdigo e menos execuзхes por segundos serгo feitas
Reply
#10

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Eu iria colocar 666 mas iria precisar de uma array muito grande para fazer as mйdias. O que й o bom deste sistema, pois ele calcula atravйs de milhares de execuзгo, sendo o mбximo preciso possнvel nos cбlculos.

Lembrando que quando maior o valor de estresse para o processador, mais lento ficarб o cуdigo e menos execuзхes por segundos serгo feitas
ele tbm e preciso a calcular includes de salvamento de dados?

ou melhor usar a velha maneira manual?
Reply
#11

Sim, calcula tudo.
Reply
#12

Muito bom, parceiro
Reply
#13

Obviamente, testes como

!var

contra

var == 0


sгo tгo parecidos que й impossнvel ter algo preciso, o processador quando sobrecarrega oscila muito. Nestes casos de velocidades parecidas, sу com uma analise detalhada de como o cуdigo em AMX estarб fazendo as instruзхes em ASM.

Caso alguйm tiver dъvidas assim, bota o cуdigo aqui que eu faзo uma analise no cуdigo.
Reply
#14

Po fera so posta coisa foda , Valeu estava presisando de um desses ... estava cansado pra procurar kk.
Reply
#15

Valeu shitt, qualquer coisa sobre o projeto sу pedir.

Abraзos
Reply
#16

Gostei bastante, bruno acho que vocк deveria participar mais na board inglesa lб nas discussхes
Reply
#17

Quote:
Originally Posted by BlueX
View Post
Gostei bastante, bruno acho que vocк deveria participar mais na board inglesa lб nas discussхes
Verdade deveria mesmo.
Reply
#18

Quote:
Originally Posted by BlueX
View Post
Gostei bastante, bruno acho que vocк deveria participar mais na board inglesa lб nas discussхes
eu ja em outro tуpico tinha referido isso, ele rapaz tem uma capacidade fantбstica, mas n e so ele o Willian_Luigi tambйm
Reply
#19

Atualizei para mostrar em milissegundos, assim fica mais preciso que segundos os resultados


Nгo falo inglкs, sу leio

O Will faz faculdade, o rapaz й quase um Doutor Eu pena to concluindo Ensino Mйdio.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)