Koszt CRITICAL_SECTION

Pisanie aplikacji, które są i wydajne i przyjazne użytkownikowi wymaga użycia wielowątkowości. Wiadomo, jeśli będziemy coś liczyć na wątku odpowiedzialnym za rysowanie interfejsu to tego rysowania w tym czasie nie będzie i otrzymamy aplikację, która nie odpowiada. Tak jest np. w przypadku paska menu Start. Wystarczy kliknąć na na “Moje bieżące dokumenty” czy spróbować wyświetlić menu “Połącz z”. Musimy wtedy swoje odczekać. Gdy do tego jeszcze któryś z plików (z bieżących dokumentów) jest poza naszym komputerem to gwarantowane czekanie kilkadziesiąt sekund. W tym czasie pasek startu jest zawieszony w obowiązkach. ;) Tak czy inaczej podczas jednej z takich sytuacji zacząłem się zastanawiać jaki to wielki koszt czasowy jest związany z blokowaniem za pomocą CRITICAL_SECTION. Oto malutki program, który mi posłużył do testów:

	CRITICAL_SECTION cs;
	InitializeCriticalSection(&cs);
	int testValue = 0;
	LARGE_INTEGER lintStart, lintEnd;
	LARGE_INTEGER lintFreq;
	QueryPerformanceFrequency(&lintFreq);
	QueryPerformanceCounter(&lintStart);
	int i;
	for(i=0; i<1000000; i++)
	{
		EnterCriticalSection(&cs);
		testValue = i;
		LeaveCriticalSection(&cs);
	}
	QueryPerformanceCounter(&lintEnd);
	std::cout << boost::format("CPU Freq: %1% Hz")
		% lintFreq.QuadPart << std::endl;
	std::cout << boost::format("Cycles per enter/leave: %1%")
		% (double(lintEnd.QuadPart-lintStart.QuadPart)
		/ double(i)) << std::endl;

No i cóż się okazało? Na moim Core 2 Duo koszt zablokowania sekcji krytycznej i jej zwolnienia to całe 90-100 cykli zegara CPU. Jeśli metodyka pomiaru była prawidłowa to jest to bardzo mały narzut. Wydaje się zatem, że zysk dla użytkownika programu, który nie musi czekać aż łaskawie program skończy jakąś operację, jest o wiele większy niż koszt. Czy zatem programiści od Windows Explorera nie mogliby tego zastosować, aby żyło się nieco łatwiej z ich systemem?

4 rdzenie? Chyba nie dla mnie

Quad CoreKumpel ostatnio podesłał mi linka do bardzo ciekawej analizy dotyczącej wydajności nowych procesorów 4-rdzeniowych. Wynika z niej dość jasno, że warto kupić procesor 4-rdzeniowy tylko w kilku przypadkach. Najważniejsze z nich to rendering 3D czy kompresja video. Inaczej mamy kilku-procentowy spadek wydajności w stosunku do procesora z 2 rdzeniami. Do zadań specjalnych dla wielordzeniowców dorzuciłbym jeszcze jedno, które jest wykorzystywane z powodzeniem u mnie w pracy. Chodzi mi o serwer terminalowy. W pracy mamy serwer z podwójnym Xeonem 4-rdzeniowym - logicznie maszyna ta ma zatem 8 procesorów. Bez większych problemów na takim komputerze przez zdalny pulpit może pracować kilku programistów. Jedyne o co trzeba zadbać to odpowiednia ilość pamięci RAM i szybkie dyski (macierz). Z naszych doświadczeń wynika, że RAMu potrzeba m/w 1-1,5GB na jednego zalogowanego użytkownika (praca z VS 2005). Tak czy inaczej procesory 4-rdzeniowe dla tzw. zwykłych użytkowników nie mają wielkiego sensu. Sam posiadam Core 2 Duo i wiem, że wykorzystuję jego możliwości zaledwie w paru procentach. Inna sprawa, że przyda on się przy renderingach czyli pisaniu raytracera. Wydaje mi się, że jeszcze trochę poczekamy na aplikacje (dla szerszego grona odbiorców) wykorzystujące możliwości 4-rdzeniowców. Póki co nie zamierzam się przesiadać na Core 2 Quad.

Mobilne X-Fi

Dzisiaj parę słów na temat pewnego małego urządzenia, którego stałem się w piątek właścicielem. Nazywa się ono Creative Xmod i jest kartą dźwiękową podłączaną do portu USB.

Creative X-Fi Xmod

Historia nabycia przeze mnie tego urządzenia jest dość krótka. Siedziałem w pracy i słuchałem muzyki z wbudowanej “karty dźwiękowej”. Szumy, trzaski i dźwięki działającej elektroniki doprowadzały mnie do szału. W końcu miarka się przebrała i postanowiłem coś z tym zrobić. Ponieważ nie lubię grzebać w kompie szukałem rozwiązania zewnętrznego. Padło na kartę dźwiękową na USB. Od razu przypomniał mi się news z przed paru(nastu) tygodni na temat zewnętrznej karty Xmod. Creative na swojej stronie przedstawiał, że nowy Xmod ma Crystalizer znany z X-Fi. Tak się składa, że na kompie domowym mam X-Fi, a Crystalizer mam zawsze włączony. Naprawdę to działa - dźwięk nabiera głębi i dynamiki. Nie myśląc zatem zbyt dużo zamówiłem gdzieś na allegro Xmoda, aby mi służył w pracy.
Nie chce się rozpisywać o samym Xmodzie. Jego obsługa jest bajecznie prosta. Chcę tylko napisać, że jestem z niego w 100% zadowolony. Dźwięk jest czysty jak łza, a Crystalizer Xmodowy działa analogicznie do tego ze stacjonarnej wersji X-Fi. Co więcej, jeśli ktoś nie korzysta w ogóle z możliwości jakie daje X-Fi, a jedynie z Crystalizera, to polecam właśnie zakup Xmoda. Przy okazji można oszczędzić, gdyż można go nabyć już za 170 PLN, podczas gdy prawdziwy X-Fi kosztuje >200 PLN. Co ciekawe do działania urządzenia nie są potrzebne sterowniki (co jest plusem, bo drivery nie zajmują zasobów). Ponoć działa nawet pod Linuxem, co sprawdzę przy najbliższej okazji.

PS. Załączone słuchawki są do niczego.