Что является более важным ЦП или ОЗУ для компиляции большого программного обеспечения, например, начальной загрузки gcc?

11

Я надеюсь купить новый компьютер в ближайшее время, и я хочу машину для лучшей производительности для быстрого времени компиляции.

Так стоит ли мне приобретать четырехъядерный процессор с максимальной частотой ГГц, который я могу себе позволить, или я должен вместо этого инвестировать в более высокую скорость ОЗУ?

Какая у вас рекомендация для какого типа оперативной памяти мне выбрать?

Производительность графики не имеет значения, сборка программного обеспечения и выполнение математического моделирования.

Дима
источник

Ответы:

8

Я бы сказал, нет. Скорее получите быстрый SSD жесткий диск . Конечно, вам нужен надлежащий процессор и объем оперативной памяти, но да ...

Svish
источник
2
Ну, я не получил SSD, вместо этого я получил 32 ГБ ОЗУ и скомпилировал все в ОЗУ на tmpfs .... даже быстрее, чем SSD =)
Дима
1
Ну, вот такая же идея: р
Свиш
2
Я не согласен. Я получил SSD-накопитель для моего ноутбука, и это мало повлияло на скорость компиляции. С другой стороны, приобретение нового компьютера с почти трехкратной частотой процессора и всего 4 ГБ против 6 ГБ на машине с SSD позволило компилировать почти в 3 раза быстрее. anandtech.com/show/2829/25 не обнаруживает заметного улучшения скорости работы компилятора с помощью SSD, в то время как blog.hypercomplex.co.uk/index.php/2010/06/… обнаруживает улучшение на 23%. Мне кажется логичным, что если у вас достаточно памяти, компиляция требует очень мало использования диска.
Крис Дракон
1
Другая мысль заключается в том, что некоторые компиляторы могут использовать для компиляции много временных файлов, а не память, и в этом случае SSD или ramdisk помогут наиболее эффективно. Однако я бы не ожидал, что современные компиляторы будут разрабатываться таким образом, когда память дешева и велика, а система обрабатывает ее разбиение на страницы, когда она заканчивается. Используя XCode 3.2.6 (на основе gcc 3 или 4), SSD имел мало преимуществ.
Крис Дракон
SSD имеет большое значение для крупных проектов / решений, которые активно используют копирование / перемещение файлов. Лично я не использовал стиль RAM tmpfs, но слышал об этом много хорошего. Для небольших проектов это, вероятно, хорошо. Для огромных? Этого может быть недостаточно.
kayleeFrye_onDeck
4

Вероятно, оперативная память даст вам большую отдачу. Компиляция, особенно для больших приложений, требует очень много операций ввода-вывода, а наличие большего объема ОЗУ означает, что вы можете сэкономить больше времени подкачки на диск и с диска. Большинство современных процессоров, особенно если вы используете дешевый четырехъядерный процессор, обеспечат достаточную мощность процессора для вашей компиляции, но наличие оперативной памяти поможет с возвратом данных назад и вперед.

Во-вторых, это зависит от математического моделирования и процессов сборки. Они распараллеливаются? Если нет, то добавление большего количества ядер на самом деле ничего не даст для его ускорения, хотя новые чипы Intel (Core i7) довольно быстры для каждого ядра.

Джимми
источник
1
какое отношение компиляция имеет к диску?
Араш
2

Я бы сказал, получить загрузки ОЗУ и использовать RAM-диски для временного хранения. Это резко увеличит скорость компиляции. С быстрым многоядерным процессором тоже все будет в порядке, но я думаю, что вы получите больше пользы от большого количества оперативной памяти. Взгляните на эту статью для некоторых идей. Вот еще немного информации и немного больше здесь . Я думаю, что использование RAM будет быстрее, чем использование SSD, но я могу ошибаться.

AndrejaKo
источник
2

Для ваших вычислений ваш процессор, безусловно, самый важный.

Компиляция будет нагружать как ваш процессор, так и оперативную память.

Я думаю, что наиболее экономически эффективным решением было бы получить лучший процессор, который вы можете себе позволить, и предпочтительно Quad Core. Поскольку оперативная память такая же дешевая, как и она (DDR3 теперь такая же дешевая, как и DDR2), вы можете легко подключить столько оперативной памяти, сколько вам нужно, за небольшую монету (16 ГБ памяти DDR3 за 180 долларов на newegg ... Я понимаю, что это излишне, просто пытаюсь продемонстрировать, насколько это дешево). Поэтому я бы вложил столько, сколько смогу, в качественный процессор, насколько это возможно.

Flynismo
источник
Тратить больше денег на более быстрый процессор - хороший совет. Но не тратить больше денег, чтобы получить больше ядер. GCC выполняет всю свою компиляцию в одном потоке, поэтому он никогда не использует более одного ядра.
Исаак Рабинович
1
@Isaac Да, но система сборки обычно может порождать несколько заданий gcc одновременно, например, makeс помощью -jопции. Кроме того, я считаю, что llvm может или сможет скомпилировать один файл, используя несколько потоков.
Ponkadoodle
@Wallacoloo Хорошо, иногда вы можете получить немного больше скорости, если у вас есть файлы, которые параллельны в графе зависимостей. Тем не менее, я считаю, что дополнительные ядра являются довольно незначительным фактором, когда речь идет об ускорении сборки. Трудно сказать, так как дополнительные ядра являются стандартной особенностью новых процессоров , которые делают скорость вещь просто тактировании быстрее. Если вы хотите продемонстрировать, что я не прав, попробуйте сделать большую компиляцию с и без -j.
Исаак Рабинович
2
@IsaacRabinovitch На самом деле для больших кодовых баз это имеет большое значение . На нашей кодовой базе время компиляции сокращается почти линейно с distcc( make -j8(локально) до make -j30(распределено по сети))
Алекс
0

Графика может помочь, потому что видеокарта с процессором может снизить нагрузку на основной процессор. Мощность процессора, вероятно, важнее, чем ОЗУ, но чем лучше, тем лучше.

jer.salamon
источник
Хороший вопрос - только если процесс может использовать ядра CUDA, чего большинство не делает.
NoBugs
0

из-за физических ограничений сами ядра не будут становиться намного быстрее в ближайшее время, поэтому, если вы не планируете переходить на пользовательский кремний, инвестирование в более быстрые процессоры не решит вашу проблему, если распараллеливание не принесет существенных изменений, но в любом случае многие программы вряд ли получат более 4 ядер. Я знаю это, потому что я очень часто собираю всю свою систему и много раз смотрю статистику ресурсов. Более того, даже если разработчики хотели увеличить распараллеливание, иногда нужно сделать это хорошим способом. Инвестирование в ЦП полезно либо для повышения производительности услуг, либо если вы выполняете вычисления в первую очередь на основе данных; даже если это повлияет на поведение при выполнении позже; если ваши компиляции следуют некоторым из этих шаблонов, то это может быть труднее обсуждать, но это некоторые особые случаи для процесса сборки; именно поэтому, например, в графических вычислениях большее количество ядер все еще имеет значение. Кроме того, они делают все возможное, чтобы максимально увеличить количество операций ввода-вывода, это может включать диски, оперативные памяти и материнские платы.

Джеферсон Лемос
источник