PDA

Просмотр полной версии : [Вопрос] Помогите, в погоне за ms



alfazlo
22.03.2015, 23:49
в погоне за лишней микросекундой написал примитивный итератор, хочу чтоб потестили вы на своих компах, а то у меня комп говно
Сравнение по параметрам add\remove\iterate между foreach, вариантом от Tracker1 и своего неюзабельного, vectoral проигрывает по всем параметрам поэтому тестить не имеет смысла.
incude: foreach
plugins: с jit.dll и без него


#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; 0 <= AZIterTempVar; AZIterTempVar--) \
{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], players, Players1[ARR_ITERS], players1;
new id, tick, tick1, var, iter1, iter2, iter3;
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 i = 0;i < ARR_ITERS; i++)
{
Iter_Add(pforeach, i);
}
tick1 = GetTickCount();
printf("Foreach add ====== %d",tick1-tick);

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

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

print("\n=============Test speed [remove]\n");
tick = GetTickCount();
for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
Iter_Remove(pforeach, id);
}
tick1 = GetTickCount();
printf("Foreach remove ====== %d",tick1-tick);

tick = GetTickCount();
for(new i = 0;i < ARR_ITER_DEL; i++)
{
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 i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
AzIterDel(it1, id);
}
tick1 = GetTickCount();
printf("MyIterator remove === %d",tick1-tick);

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


print("=============Test speed [add]");
tick = GetTickCount();
for(new i = 0;i < ARR_ITERS; i++)
{
Iter_Add(pforeach1, i);
}
tick1 = GetTickCount();
printf("Foreach add ====== %d",tick1-tick);

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

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

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

for(new i = 0;i < ARR_ITER_DEL; i++)
{
id = random(ARR_ITERS);
Iter_Remove(pforeach1, id);
for(new j=0;j<players1;j++)
{
if(Players1[j]==id)
{
Players1[j]=Players1[--players1];
Players1[players1]=-1;
break;
}
}
AzIterDel(it2, id);
}

print("\n=============Test Iterate");
printf("=============Connected player %d\n=============Remove random player %d\n=============Profiling iters %d\n",ARR_ITERS, ARR_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-tick, iter1);

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-tick, iter2);

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

print("=================END=================");
}
Плз результаты из server_log.txt, или скрин консоли в тему...

alfazlo
24.03.2015, 22:12
Помогите чет мб?
http://rghost.ru/8z45vhQDn вот скомпилировал все просто запустить и все

L0ndl3m
24.03.2015, 22:28
Вам действительно важны микросекунды? Не космический же корабль изобретаем.

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

alfazlo
24.03.2015, 22:34
Вам действительно важны микросекунды? Не космический же корабль изобретаем.

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

L0ndl3m
24.03.2015, 23:13
http://i.gyazo.com/548f9019b22e4c6d6f7fb5d682408446.png
Intel Core i3-4030U, 1.9 GHz