[edytuj # 2] Jeśli ktokolwiek z VMWare może trafić do mnie z kopią VMWare Fusion, byłbym bardziej niż szczęśliwy, mogąc zrobić to samo, co porównanie VirtualBox vs VMWare. Podejrzewam, że hypervisor VMWare będzie lepiej dostrojony do hiperwątkowania (zobacz też moją odpowiedź)
Widzę coś ciekawego. Gdy zwiększam liczbę rdzeni na mojej maszynie wirtualnej z systemem Windows 7 x64, całkowity czas kompilacji zwiększa się zamiast maleć. Kompilacja jest zwykle bardzo dobrze dostosowana do przetwarzania równoległego, ponieważ w środkowej części (mapowanie zależności zależności) można po prostu wywołać instancję kompilatora w każdym pliku .c / .cpp / .cs / cokolwiek, aby zbudować częściowe obiekty do pobrania przez linker nad. Tak więc wyobrażam sobie, że kompilacja bardzo dobrze skalowałaby się z liczbą rdzeni.
Ale widzę:
- 8 rdzeni: 1,89 sek
- 4 rdzenie: 1,33 sek
- 2 rdzenie: 1,24 sek
- 1 rdzeń: 1,15 sek
Czy jest to po prostu artefakt projektowy ze względu na implementację hiperwizora określonego dostawcy (w moim przypadku typ 2: virtualbox) lub coś bardziej wszechobecnego na większej liczbie maszyn wirtualnych, aby uprościć implementacje hiperwizora? Biorąc pod uwagę tak wiele czynników, wydaje mi się, że jestem w stanie argumentować zarówno za, jak i przeciw takiemu zachowaniu - więc jeśli ktoś wie o tym więcej niż ja, chętnie przeczytam twoją odpowiedź.
Dzięki Sid
[ edycja: adresowanie komentarzy ]
@MartinBeckett: Kompilacje na zimno zostały odrzucone.
@MonsterTruck: Nie można znaleźć projektu typu open source do bezpośredniej kompilacji. Byłoby świetnie, ale nie mogę teraz spieprzyć mojego dewelopera env.
@Mr Lister, @philosodad: Mają 8 wątków, używając VirtualBox, więc powinno być mapowanie 1: 1 bez emulacji
@Thorbjorn: Mam 6,5 GB na maszynę wirtualną i niewielki projekt VS2012 - jest mało prawdopodobne, że podmieniam / wyrzucam do kosza plik stronicowania.
@Wszystkie: Jeśli ktoś może wskazać na projekt VS2010 / VS2012 typu open source, może to być lepsze odniesienie do społeczności niż mój (zastrzeżony) projekt VS2012. Wydaje się, że Orchard i DNN wymagają dostrajania środowiska w celu skompilowania w VS2012. Naprawdę chciałbym zobaczyć, czy ktoś z VMWare Fusion też to widzi (dla przedziałów VMWare vs VirtualBox)
Szczegóły testu:
- Sprzęt: Macbook Pro Retina
- Procesor: Core i7 @ 2.3Ghz (czterordzeniowy, hiperwątkowy = 8 rdzeni w menedżerze zadań Windows)
- Pamięć: 16 GB
- Dysk: 256 GB SSD
- System operacyjny: Mac OS X 10.8
- Typ maszyny wirtualnej: VirtualBox 4.1.18 (hypervisor typu 2)
- System operacyjny gościa: Windows 7 x64 SP1
- Kompilator: VS2012 kompiluje rozwiązanie z 3 projektami platformy Azure w języku C #
- Czas kompilacji mierzony jest za pomocą wtyczki VS2012 o nazwie „VSCommands”
- Wszystkie testy przebiegają 5 razy, pierwsze 2 są odrzucane, a ostatnie 3 uśredniane
źródło
Odpowiedzi:
Odpowiedź: Nie zwalnia, zwiększa się wraz z liczbą rdzeni procesora. Projekt użyty w pierwotnym pytaniu był „zbyt mały” (to właściwie mnóstwo rozwoju, ale mały / zoptymalizowany dla kompilatora), aby czerpać korzyści z wielu rdzeni. Wydaje się, że zamiast planować, jak rozłożyć pracę, odradzać wiele procesów kompilatora itp., Na tak małą skalę najlepiej jest młotkować pracę od samego początku.
Jest to oparte na nowym eksperymencie, który przeprowadziłem na podstawie komentarzy do pytania (i mojej osobistej ciekawości). Użyłem większego projektu VS - kodu źródłowego Umbraco CMS, ponieważ jest on duży, open source i można bezpośrednio załadować plik rozwiązania i przebudować (wskazówka: załaduj
umbraco_675b272bb0a3\src\umbraco.sln
w VS2010 / VS2012).TERAZ, to, co widzę, jest tym, czego oczekuję, tj. Kompiluje skalowanie w górę !! Do pewnego momentu, odkąd znajduję:
Na wynos:
Ten ostatni punkt zmusił mnie do monitorowania historii procesora we wszystkich rdzeniach za pomocą „Activity Monitor” (historia procesora), a znalazłem
Na wynos:
Przy jednym rdzeniu VM aktywność wydaje się przeskakiwać przez 4 rdzenie HW. Ma sens, aby równomiernie rozprowadzać ciepło na podstawowych poziomach.
Nawet przy 4 rdzeniach wirtualnych (i 27 wątkach VirtualBox OS X lub ~ 800 wątku OS X łącznie), tylko wątki HW (0,2,4,6) są prawie nasycone, a nieparzyste wątki HW (1,3,5,7) są prawie na poziomie 0%. Bardziej prawdopodobne jest, że program planujący działa pod względem rdzeni sprzętowych, a NIE wątków sprzętowych, więc spekuluję, że 64-bitowe jądro / programista OSX nie jest zoptymalizowany pod kątem taktowania CPU? Lub patrząc na konfigurację rdzenia 8VM, być może zaczyna się od nich przy dużym obciążeniu procesora? Staje się coś śmiesznego ... to osobne pytanie dla niektórych deweloperów Darwina ...
[edytuj]: Chciałbym spróbować tego samego w VMWare Fusion. Są szanse, że nie będzie tak źle. Zastanawiam się, czy prezentują to jako produkt komercyjny
Stopka:
W przypadku, gdy obrazy kiedykolwiek znikną, zestawienie czasu kompilacji jest (tekstowe, brzydkie!)
źródło
Jest tylko jeden możliwy powód, dla którego tak się dzieje, a mianowicie to, że koszty ogólne przekraczają zyski.
Być może emulujesz wiele rdzeni, zamiast przypisywać rzeczywiste rdzenie, a nawet procesy, a nawet wątki z komputera hosta. Wydaje mi się to całkiem prawdopodobne i oczywiście da ci przyspieszenie ujemne.
Inną możliwością jest to, że sam proces nie jest dobrze zrównoleglony, a nawet próba zrównoleglenia kosztuje cię więcej narzutów w komunikacji niż zyskujesz.
źródło
your overhead is exceeding your gains
: To prawda, ale w zasadzie obejmuje wszystko, nie wiedząc, co tak naprawdę powoduje :) ... Używam VirtualBox i mam fizyczne rdzenie, więc zakładam, że mapowanie powinno być 1: 1 bez emulacji. Mam zamiar wyszukać DUŻE oprogramowanie open source VS2012, aby inni też mogli się nim odwołać ... brbNie jesteś sam ...
To samo zdarzyło mi się wcześniej z Javą używającą Maven 3.x do kompilacji na i3. Pozostawienie domyślnego wątku „4” było znacznie wolniejsze, prawie 50% wolniejsze, niż wyraźne zalecenie używania tylko 2 rdzeni.
Myślę, że ma to coś wspólnego z przełączaniem kontekstu hiperwątkowości i nakładaniem się we / wy.
Ma to sens, gdy zaczynasz o tym myśleć. Możesz udowodnić, co powoduje degenerację wyników za pomocą dobrego narzędzia do profilowania całego systemu.
źródło