Tam Sürümünü Görmek İçin : hız testi 2-thread priority
aşağıdaki kodun mantığını şu adresteki türkçe kaynakdan aldım.
http://rapidshare.de/files/878407/ILERI_WIN32.rar.html
hız oranları bende %2-4 civarı değişiyor.
#include <windows.h>
#include <iostream>
#include <ctime>
#define TEST_COUNT 10
using namespace std;
inline void job(char* message,long& timePass)
{
double x;
timePass = clock();
for (int i = 1; i < 5000; ++i)
for (int j = 1; j < 5000; ++j)
{
x=(i+j)/(i*j);//herhangi bir işlem yapmak
};
timePass -= clock();
cout<<message<<-timePass<<endl;
}
int main(void)
{
long timeSlow,timeFast;
double averageTimeRate;
for ( int i=0 ; i <TEST_COUNT ;i++)
{
//bu proses icin en dusuk oncelik
SetPriorityClass(GetCurrentProcess(), IDLE_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_LOWEST);
//test
job("idle_priority_class and thread_priority_lowest = ",timeSlow);
//bu proses icin en yuksek oncelik
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
//test
job("highest_priority_class and thread_priority_highest = ",timeFast);
//oran
averageTimeRate+=(double)timeSlow/timeFast;
cout<<i+1<<". rate : "<<(double)timeSlow/timeFast<<endl<<endl;
}
cout<<"average rate : "<<averageTimeRate/TEST_COUNT;
}
Volkan Uzun
15/05/2005, 19:48
thread icin zamani bu sekilde olcmek yaniltici olabilir, yanlis hatirlamiyorsam thread icin zaman olcme apisi olabilir.
dediğin ölçme yöntemini bilmiyorum.
birde, hız farkının daha yüksek olmasını beklerdim.
% 3-4 çok da anlamlı değil,
belki çok daha fazla proses çalışıyor olsaydı, değişik çıkardı :garip:
@mr1yh1
Bu sekilde bir olcum ne kadar saglikli bilemiyorum. Sizin de bahsettiginiz gibi ayni anda kac tane process calisiyor ve bu processlerden kac tanesi ayni priority ye sahip gibi degiskenlere bagli olarak farkli farkli sonuclar elde edilecektir. Bence yukardaki kodu dusuk ve yuksek priority olarak ikiye ayirip ayni anda calistirmak daha iyi bir fikir verebilir. Boylelikle priority leri disinda her bakimdan ayni iki process in cpu time icin yarismasi daha saglikli gozlemlenebilir.
Volkan Uzun
15/05/2005, 22:07
evet cok daha fazla processde daha net sonuc alabilirsin.,kodu cok incelemedim ama soyle dusun:
function thread()
{
start_timer();
a();
b();
c();
end_timer()
}
simdi bu thread dusuk oncelikli olsuin, calismaya basladi, a functionu bittikten sonra b ye gecmeden scheduler, daha oncelikli bir thread e calisma hakkini verdi. bu oncelikli thread isini bitirip dondugunde senin function threadin tekrar basladi ve isini bitirdi. sen simdi sadece cpu tickleirn isayarsan bu butun zamanin kendi functionin icin oldugun sanarsin .
----------
yukardaki yazdigin programda sonuclari daha iyi degerlendirmek adina aslinda sunuda vermelisin
normalde bu islem kac saniyede bitti ? zaten 1 sn suren bir islemde hizlanmayi olcmek zor olsa gerek.
ayrica threadlarin oncelikleri ile oynamak sadece zaman acisisinda degil atomic islem ypamak acisindada kullanilabilir
Euclides
16/05/2005, 11:39
ayrica threadlarin oncelikleri ile oynamak sadece zaman acisisinda degil atomic islem ypamak acisindada kullanilabilir
+1
aynen katılıyorum
@mr1yh1:
şu kodu incele...
...mythread...
{
while(1)
global_x ++;
}
...
...
//Test_Loop
DWORD back_up,delta;
SuspenThread(hThread);
delta=back_up-x;
back_up=x;
x=0;
printf("%lu\n",delta);
ResumeThread(hThread);
devamlı değişen bir deltamız var ;)
bir thread'ın hızı ölçmeye çalışmak pek mantıklı değil açıkcası. Zaten CPU hızı sabit... Thread'ın anlık hızı CPU hızını eşit. Ortalama hız bu denkelemle bulunabilir fakat bulunsada ne işe yarar ?
(CPU Hızı /Sigma(x=0'dan Thread adetine)(QuantumX))Quantum_MyThread
Ayrıca uyuglamanı hızlandırmak istiyorsan buna bir göz at...
bak:
High-Performance Memory-Based Web Servers: Kernel and User-Space Performance (http://sysinternals.com/files/webserver.pdf) by P. Joubert, R. King, R. Neves, M. Russinovich, and J. Tracey, Proceedings of the 2001 USENIX Anual Technical Conference, Boston, MA, June 28, 2001
bir thread'ın hızı ölçmeye çalışmak pek mantıklı değil açıkcası. Zaten CPU hızı sabit... Thread'ın anlık hızı CPU hızını eşit. Ortalama hız bu denkelemle bulunabilir fakat bulunsada ne işe yarar ?
(CPU Hızı /Sigma(x=0'dan Thread adetine)(QuantumX))Quantum_MyThread
galiba amacım yanlış anlaşıldı, tek bir thread'in hızını ölçmeye çalışmıyorum.
Bunun bir işe yaramıyacağını biliyorum, çünkü benim makinamda o anda çalışan iş parçacığı sayısı ve öncelikleri bir başkasınınkine uymaz..
Benim göstermek istediğim şey,
bir programın farklı kısımları farklı hassasiyette ve hızda çalışma gereği duyabilir.
Bu kısımların farklı önceliklere sahip olacak şekilde ayarlanması durumunda performans ne kadar etkilenir.
mesela bir video editör , videoyu seyertirirken çok zorlanmıyor.
ama dönüştürme işlemleri çok zaman alıyor.
bu ikisinin aynı işlem önceliği ile çalıştırılması yerine böyle bir ayar yapılırsa kazanç ne olur onu denedim :)
@sanalprogramcı
mutex tarzı yapılar , thread önceliğinden mi yararlanıyor ?
Beirli bir zaman dilimi icerisinde mutlaka tamamlanmasi gereken process ler disinda trhread onceligini arttirmanin bir faydasini gormuyorum. Aksi taktirde ayni anda bir suru top priority thread olacagi icin priority denen olayin bir manasi kalmayacak.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.