Co jest ważniejsze dla procesora lub pamięci RAM przy kompilowaniu dużego oprogramowania, np. Bootstrapping gcc?

11

Chcę wkrótce kupić nowy komputer i chcę maszynę o najlepszej wydajności, która zapewni szybkie czasy kompilacji.

Czy powinienem więc dbać o czterordzeniowy procesor o najwyższej częstotliwości, na jaką mnie stać, czy powinienem raczej inwestować w szybszą pamięć RAM?

Jakie jest twoje zalecenie dla jakiego rodzaju pamięci RAM powinienem wybrać?

Wydajność grafiki nie ma znaczenia, kompilacja oprogramowania i przeprowadzanie symulacji matematycznych.

Dima
źródło

Odpowiedzi:

8

Nie powiedziałbym ani jednego. Zamiast tego uzyskaj szybki dysk twardy SSD . Oczywiście potrzebujesz również odpowiedniego procesora i ilości pamięci RAM, ale tak ...

Svish
źródło
2
Cóż, nie dostałem dysku SSD, zamiast tego dostałem 32 GB pamięci RAM i skompilowałem wszystko w pamięci RAM na tmpfs .... nawet szybciej niż SSD =)
Dima
1
Cóż, to taki sam pomysł: p
Svish
2
Nie zgadzam się. Mam dysk SSD do laptopa i nie miało to większego wpływu na szybkość kompilacji. Z drugiej strony, uzyskanie nowego komputera z prawie trzykrotnie większą szybkością procesora i tylko 4 GB w porównaniu z 6 GB na maszynie SSD spowodowało, że kompilacja była prawie 3 razy szybsza. anandtech.com/show/2829/25 nie znajduje zauważalnej poprawy prędkości kompilatora w przypadku dysku SSD, podczas gdy blog.hypercomplex.co.uk/index.php/2010/06/… znajduje 23% poprawę. Wydaje mi się logiczne, że jeśli masz wystarczającą ilość pamięci, kompilacja wymaga bardzo małego użycia dysku.
Chris Dragon,
1
Inna myśl jest możliwa, że ​​niektóre kompilatory używają do kompilacji wielu plików tymczasowych, a nie pamięci, w którym to przypadku najbardziej pomógłby dysk SSD lub ramdysk. Jednak nie spodziewałbym się, że współczesne kompilatory zostaną tak zaprojektowane, ponieważ pamięć jest tania i duża, a system obsługuje przywoływanie jej na dysk, gdy zaczyna brakować. Używając XCode 3.2.6 (opartego na gcc 3 lub 4), SSD miało niewielką korzyść.
Chris Dragon,
Dysk SSD stanowi znaczącą różnicę w przypadku dużych projektów / rozwiązań, które mocno wykorzystują kopiowanie / przenoszenie plików. Osobiście nie korzystałem z pamięci RAM w stylu tmpfs, ale słyszałem o tym dobre rzeczy. W przypadku mniejszych projektów prawdopodobnie jest w porządku. Dla wielkich? To może być niewystarczające.
kayleeFrye_onDeck
4

Prawdopodobnie RAM da ci większy huk za grosze. Kompilowanie, szczególnie dużych aplikacji, wymaga dużej ilości operacji we / wy, a posiadanie większej ilości pamięci RAM oznacza, że ​​można zaoszczędzić więcej czasu stronicowania na dysk iz dysku. Większość procesorów dzisiaj, szczególnie jeśli korzystasz z taniego czterordzeniowego procesora, zapewni mnóstwo mocy procesora do kompilacji, ale posiadanie pamięci RAM pomoże w przesyłaniu danych tam iz powrotem.

Druga myśl zależy od symulacji matematycznych i procesów budowania. Czy można je zrównoleglać? Jeśli nie, dodanie większej liczby rdzeni tak naprawdę nic nie przyspieszy, chociaż nowe układy Intela (Core i7) są dość szybkie w przeliczeniu na rdzeń.

Jimmy
źródło
1
co kompilacja ma wspólnego z dyskiem?
Arash,
2

Powiedziałbym, że pobiera mnóstwo pamięci RAM i używa ramdysków do tymczasowego przechowywania. To znacznie zwiększy szybkość kompilacji. Szybki wielordzeniowy procesor też byłby w porządku, ale myślę, że bardziej skorzystałbyś z wielu pamięci RAM. W tym artykule znajdziesz kilka pomysłów. Oto trochę więcej informacji i trochę więcej tutaj . Myślę, że korzystanie z pamięci RAM będzie szybsze niż korzystanie z SSD, ale mogę się mylić.

AndrejaKo
źródło
2

W obliczeniach procesor jest zdecydowanie najważniejszy.

Kompilacja obciąży zarówno procesor, jak i pamięć RAM.

Myślę, że najbardziej opłacalnym rozwiązaniem byłoby uzyskanie najlepszego procesora, na jaki Cię stać, a najlepiej czterordzeniowego. Pamięć RAM jest tak tania, jak jest (DDR3 jest teraz tak tania jak DDR2), więc możesz łatwo podłączyć tyle pamięci RAM, ile potrzebujesz na małą monetę (16 GB pamięci DDR3 za 180 USD na nowy ... Rozumiem, że to przesada, próbuję tylko pokazać, jak tanio to jest). Zainwestowałbym więc tyle, ile mogę sobie pozwolić na wysokiej jakości procesor.

Flynismo
źródło
Wydawanie większej ilości pieniędzy na szybszy procesor to dobra rada. Ale nie wydaje więcej pieniędzy, aby uzyskać więcej rdzeni. GCC wykonuje całą swoją kompilację w jednym wątku, więc nigdy nie używa więcej niż jednego rdzenia.
Isaac Rabinovitch
1
@Isaac Tak, ale system kompilacji może zwykle spawnować wiele zadań gcc jednocześnie, np. makeZ -jopcją. Ponadto wierzę, że llvm może lub będzie w stanie skompilować pojedynczy plik przy użyciu wielu wątków.
Ponkadoodle
@Wallacoloo OK, czasem można uzyskać trochę więcej prędkości, gdy pliki są równoległe na wykresie zależności. Mimo to uważam, że dodatkowe rdzenie są dość drobnym czynnikiem, jeśli chodzi o przyspieszenie kompilacji. Trudno powiedzieć, ponieważ dodatkowe rdzenie są standardową funkcją w nowszych procesorach, które przyspieszają wszystko przez szybsze taktowanie. Jeśli chcesz wykazać, że się mylę, spróbuj wykonać dużą kompilację zi bez -j.
Isaac Rabinovitch
2
@IsaacRabinovitch Właściwie na dużych bazach kodu to ma znaczenie dużo . W naszej bazie kodu czas kompilacji jest skrócony prawie liniowo distcc( make -j8(lokalnie) do make -j30((dystrybuowane przez sieć))
Alex
0

Cóż, grafika może pomóc, ponieważ karta graficzna z procesorem może zmniejszyć obciążenie głównego procesora. Moc procesora jest prawdopodobnie ważniejsza niż pamięć RAM, ale im lepsze oba, tym lepiej.

jer.salamon
źródło
Dobra uwaga - tylko jeśli proces może wykorzystywać rdzenie CUDA, czego większość nie.
NoBugs,
0

ze względu na ograniczenia fizyczne, same rdzenie nie będą w najbliższym czasie znacznie szybsze, więc jeśli nie planujesz przejścia na niestandardowe inwestycje w krzem, szybsze procesory nie rozwiążą twojego problemu, chyba że równoległość naprawdę zrobi jakąś różnicę, ale tak czy inaczej wiele programów prawie nie przekracza 4 rdzeni , Wiem o tym, ponieważ bardzo często kompiluję cały system i wiele razy szukam statystyk zasobów. Co więcej, nawet jeśli programiści chcieli zwiększyć paralelizację, czasem trudno jest zrobić to w dobry sposób. Inwestowanie w procesory jest dobre, aby zwiększyć wydajność usług lub jeśli wykonujesz obliczenia w pierwszej kolejności na podstawie danych; nawet jeśli wpłynie to później na zachowanie wykonawcze; jeśli twoje kompilacje są zgodne z niektórymi z tych wzorców, może być trudniej omówić, ale są to szczególne przypadki procesu kompilacji; dlatego na przykład w grafice więcej rdzeni wciąż robi różnicę. Inne niż to, co można zrobić, aby maksymalnie zwiększyć liczbę operacji we / wy, może to obejmować dyski, pamięci RAM i płyty główne

Jefferson Lemos
źródło