Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5
  1. #1
    Аватар для alfazlo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±

    Помогите, в погоне за ms

    в погоне за лишней микросекундой написал примитивный итератор, хочу чтоб потестили вы на своих компах, а то у меня комп говно
    Сравнение по параметрам add\remove\iterate между foreach, вариантом от Tracker1 и своего неюзабельного, vectoral проигрывает по всем параметрам поэтому тестить не имеет смысла.
    incude: foreach
    plugins: с jit.dll и без него
    PHP код:
    #include <a_samp>
    #include <foreach>
     
    new AzIterId;
    #define AzIterInit:%0[%1] %0[%1], %0Size = -1
    #define AzIterAdd(%0,%1) %0[++%0Size]=%1  
    #define AzIterDel(%0,%1);; \
    for(new AZIterTempVar = %0Size<= AZIterTempVarAZIterTempVar--) \
    {if(%
    0[AZIterTempVar] == %1){\
    %
    0[AZIterTempVar] = %0[%0Size--]; break;}} 
    #define AzIterSize(%0) %0Size

    #define PROFILING_ITERS 10000
    #define ARR_ITERS 1000
    #define ARR_ITER_DEL 300
    #define tforeach(%0) for(new _i, %0=Players[_i]; _i <players; %0=Players[++_i])    

    new AzIterInit:it1[ARR_ITERS], AzIterInit:it2[ARR_ITERS];
    new 
    Players[ARR_ITERS], playersPlayers1[ARR_ITERS], players1;
    new 
    idticktick1, var, iter1iter2iter3;
    new 
    Iterator:pforeach<ARR_ITERS>, Iterator:pforeach1<ARR_ITERS>; 

    main()
    {
    printf("=============Array Size %d\n"ARR_ITERS); 
    print(
    "=============Test speed [add]\n");             
    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    Iter_Add(pforeachi);

    tick1 GetTickCount(); 
    printf("Foreach add ====== %d",tick1-tick);

    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    Players[players++]=i;
    }    
    tick1 GetTickCount(); 
    printf("Tracker1 add ===== %d",tick1-tick);

    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    AzIterAdd(it1,i);
    }  
    tick1 GetTickCount();  
    printf("MyIterator add === %d",tick1-tick);
        
    print(
    "\n=============Test speed [remove]\n");                     
    tick GetTickCount();
    for(new 
    0;ARR_ITER_DELi++)
    {
    id random(ARR_ITERS);
    Iter_Remove(pforeachid);
    }    
    tick1 GetTickCount(); 
    printf("Foreach remove ====== %d",tick1-tick);

    tick GetTickCount();
    for(new 
    0;ARR_ITER_DELi++)
    {
    id random(ARR_ITERS);        
                    for(new 
    j=0;j<players;j++)
            {
                if(
    Players[j]==id)
                {
                    
    Players[j]=Players[--players];
                    
    Players[players]=-1;
                    break;
                }
            }
    }                                 
    tick1 GetTickCount(); 
    printf("Tracker1 remove ===== %d",tick1-tick);


    tick GetTickCount();
    for(new 
    0;ARR_ITER_DELi++)
    {
    id random(ARR_ITERS);        
    AzIterDel(it1id);
    }     
    tick1 GetTickCount(); 
    printf("MyIterator remove === %d",tick1-tick);

    print(
    "\n=================New=================\n");


    print(
    "=============Test speed [add]");            
    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    Iter_Add(pforeach1i);

    tick1 GetTickCount(); 
    printf("Foreach add ====== %d",tick1-tick);

    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    Players1[players1++]=i;
    }    
    tick1 GetTickCount(); 
    printf("Tracker1 add ===== %d",tick1-tick);

    tick GetTickCount();
    for(new 
    0;ARR_ITERSi++)
    {
    AzIterAdd(it2,i);
    }
    tick1 GetTickCount();    
    printf("MyIterator add === %d",tick1-tick);

    //=======================

    for(new 0;ARR_ITER_DELi++)
    {
    id random(ARR_ITERS);                
    Iter_Remove(pforeach1id);   
    for(new 
    j=0;j<players1;j++)
    {
        if(
    Players1[j]==id)
        {
        
    Players1[j]=Players1[--players1];
        
    Players1[players1]=-1;
        break;
        }
    }
    AzIterDel(it2id);
    }    

    print(
    "\n=============Test Iterate"); 
    printf("=============Connected player %d\n=============Remove random player %d\n=============Profiling iters %d\n",ARR_ITERSARR_ITER_DEL,PROFILING_ITERS);

    tick GetTickCount();
     for(new 
    i=0;i<PROFILING_ITERS;i++){
            foreach(new var:
    pforeach1){
            
    iter1++;
                    }
     }
    tick1 GetTickCount();    
    printf("Foreach Iterate ====== %d == iterate %d",tick1-tickiter1);

    tick GetTickCount();
     for(new 
    i=0;i<PROFILING_ITERS;i++){
            
    tforeach(x)
            {
                
    iter2++
                
    #pragma unused x
            
    }
     }
    tick1 GetTickCount();    
    printf("Tracker1 Iterate ===== %d == iterate %d",tick1-tickiter2);

    tick GetTickCount();
     for(new 
    i=0;i<PROFILING_ITERS;i++){
             for(new var, 
    AzIterId it2Size<= AzIterIdAzIterId--){
            
    #emit const.alt it2
        #emit lidx
        #emit stor.s.pri var
            
    iter3++;
        }       
     }
    tick1 GetTickCount();    
    printf("MyIterator Iterate === %d == iterate %d",tick1-tickiter3);

    print(
    "=================END=================");

    Плз результаты из server_log.txt, или скрин консоли в тему...
    Последний раз редактировалось alfazlo; 22.03.2015 в 23:53.

  2. #2
    Аватар для alfazlo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    Помогите чет мб?
    http://rghost.ru/8z45vhQDn вот скомпилировал все просто запустить и все

  3. #3
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Вам действительно важны микросекунды? Не космический же корабль изобретаем.

    И да, зачем просить других проверить скорость, если у некоторых совершенно другой процессор и может показывать совершенно другие резултьаты?

  4. #4
    Аватар для alfazlo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    Вам действительно важны микросекунды? Не космический же корабль изобретаем.

    И да, зачем просить других проверить скорость, если у некоторых совершенно другой процессор и может показывать совершенно другие резултьаты?
    как раз мне и важно что покажут другие процессоры. А так я просто люблю оптимизировать все)

  5. #5
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
     Результаты

    Intel Core i3-4030U, 1.9 GHz

  6. Пользователь сказал cпасибо:
    alfazlo (24.03.2015)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •