Aktualizacja teraz osiągnąć lepsze niż 1,7x SpeedUp na podwójnej maszynie rdzenia.
Pomyślałem, że spróbuję napisać równoległy sorter, który działał w .NET 2.0 (myślę, sprawdź mnie na tym) i że nie używa niczego innego niż ThreadPool
.
Oto wyniki sortowania tablicy 2000000 element:
Time Parallel Time Sequential
------------- ---------------
2854 ms 5052 ms
2846 ms 4947 ms
2794 ms 4940 ms
... ...
2815 ms 4894 ms
2981 ms 4991 ms
2832 ms 5053 ms
Avg: 2818 ms Avg: 4969 ms
Std: 66 ms Std: 65 ms
Spd: 1.76x
mam przyspieszenie 1.76x - dość bliskie optymalnemu 2x miałem nadzieję - w tym środowisku:
- 2 000 000 losowych obiektów
- Sortowanie obiektów przez delegata porównania, który porównuje dwie właściwości:
DateTime
.
- kompilator JIT Mono wersja 2.4.2.3
- Max OS X 10.5.8 na 2,4 GHz Intel Core 2 Duo
Tym razem użyłem Ben Watson's QuickSort in C#.I zmienił QuickSort
wewnętrzną pętlę od:
QuickSortSequential:
QuickSortSequential (beg, l - 1);
QuickSortSequential (l + 1, end);
do:
QuickSortParallel:
ManualResetEvent fin2 = new ManualResetEvent (false);
ThreadPool.QueueUserWorkItem (delegate {
QuickSortParallel (l + 1, end);
fin2.Set();
});
QuickSortParallel (beg, l - 1);
fin2.WaitOne (1000000);
fin2.Close();
(. Właściwie w kodzie zrobić trochę równoważenie obciążenia, które nie wydają się pomóc)
mam Okazało się, że uruchomienie tej równoległej wersji opłaca się tylko wtedy, gdy w tablicy znajduje się więcej niż 25 000 elementów (chociaż minimum 50 000 wydaje się pozwolić na większy oddech procesora).
Zrobiłem tyle ulepszeń, ile mogę wymyślić na mojej małej maszynie dwurdzeniowej. Chciałbym wypróbować kilka pomysłów na potwora w 8-way. Również ta praca została wykonana na małym 13-calowym MacBooku z systemem Mono Ciekawi mnie, jak inni radzą sobie na normalnej instalacji .NET 2.0. go oczyścić, jeśli jest jakiś interes.
Jeśli sortowanie powinno być stabilne (jednakowe elementy zachowują pierwotną kolejność) lub jeśli porównania są kosztowne (mniej porównań), algorytm [mergesort] (http://www.martinstoeckli.ch/csharp/parallel_mergesort.html) jest dobry alternatywa dla quicksort. – martinstoeckli