Есть ли преимущество для разработки на 64-битной ОС? - PullRequest
6 голосов
/ 29 апреля 2009

Я не уверен, что правильно понимаю: 64-разрядная ОС запускает / компилирует код быстрее, чем 32-разрядная ОС в той же системе?

Мы используем 64-битные ОС там, где я нахожусь, и, похоже, это вызывает проблемы совместимости только с устаревшим и проприетарным программным обеспечением. (У нас работает Ubuntu 9.04 Jaunty amd64)

Ответы [ 7 ]

18 голосов
/ 29 апреля 2009

Я ограничу этот ответ x86-32 (IA-32) против x86-64 (AMD64), так как я считаю, что это вопрос, который вы на самом деле задаете.

На уровне процессора есть несколько преимуществ. Первое и наиболее очевидное - это расширение виртуальной памяти для каждого процесса до более широкого диапазона в 48 бит. (64 разрешено в архитектуре, но не обязательно, если память служит.) Это позволяет приложениям использовать намного больше доступной им системной памяти, а также открывает много места для таких вещей, как файлы с отображенной памятью, которые работают виртуальная память, которая не связана с реальной памятью. Это также открывает много места для работы рассматриваемой ОС, так как ей не нужно делить лимит в 4 ГБ для своих данных. Короче говоря, приложения и ОС могут более эффективно использовать ресурсы вашей машины.

Кроме того, архитектура AMD64 решает одну из самых больших проблем IA-32, которая заключается в полном отсутствии регистров. Фактически это удваивает количество доступных регистров, что является огромным преимуществом для некоторых типов кода. (На самом деле это выигрыш почти для ЛЮБОГО кода, но некоторые приложения страдают от увеличения стоимости памяти в 64 бита, и это выравнивается.)

Что касается Windows, MS воспользовалась этой возможностью, чтобы преодолеть целый ряд исторических проблем с совместимостью. Это не чистый отрыв от старого мира, но это начало. Я не верю, что Linux страдает от тех же проблем с самого начала, и у меня нет особой перспективы предложить их 64-битные преимущества.

11 голосов
/ 29 апреля 2009

Как правило, разработка или использование 64-битной операционной системы в любом контексте будет на медленнее , чем в той же 32-битной операционной системе. Поскольку все указатели внезапно становятся в два раза больше, у вас гораздо больше шансов разрушить кэш, и вы можете разместить меньше данных в оперативной памяти. Это значительно замедляет ваше приложение. Обычно вы используете 64-битные системы только тогда, когда вашим приложениям необходимо одновременно обрабатывать более 2–3 ГБ данных - что очень часто встречается в научных вычислениях и в некоторых ситуациях с базами данных, но в остальном крайне редко. Вот почему Apple не рекомендует безоговорочно компилировать приложения PowerPC в 64-битном режиме, например: стоимость из-за ошибок кэша и нехватки памяти достаточно высока, поэтому использование 64-битной системы имеет смысл только тогда, когда вы действительно можете воспользоваться преимуществами 64-битное пространство.

Но x86 против AMD64, о котором вы действительно спрашиваете (поскольку вы обсуждаете Ubuntu), - это особенный зверь. AMD64 не только расширяет все указатели на 64-битные; он исправляет многие, многие недостатки архитектуры x86, удваивает количество GPR, упрощает инструкции для большей совместимости с современными конструкциями ЦП и многое другое. Из-за этого, только на платформах AMD64 , вы часто увидите значительное повышение производительности, перейдя на 64-разрядную.

Есть еще одна область, в которой при разработке программного обеспечения имеет смысл перейти на 64-разрядную версию: вам нужно запускать множество виртуальных машин. Запуск нескольких виртуальных машин может легко преодолеть барьер памяти в 3 ГБ операционной системы, что делает их использование очень болезненным. (Он будет работать из-за технологии под названием PAE, или Paged Addressing Extensions, которую Intel изобрела для преодоления разрыва между 32-разрядными и 64-разрядными системами, но результат медленный, болезненный для работы в качестве разработчика, а не очень хорошо поддерживается в Windows.) Переход на 64-битную ОС может дать огромные преимущества.

6 голосов
/ 29 апреля 2009

(Как отмечают комментаторы, этот ответ несколько общий, некоторые из этих пунктов не относятся к чипам intel / amd.)

Ответ: он меняется по нескольким причинам:

  • С инструкциями большей ширины вы получите большую выразительность (либо большее разнообразие инструкций, либо большую емкость для кодирования данных в эти инструкции напрямую), что может означать уменьшение количества инструкций, проходящих через машина, которая, как правило, выигрывает: так ++ 64 бит здесь.

  • Но иногда более крупные инструкции могут занять больше циклов для декодирования и выполнения, поскольку они могут быть более сложными. Так что возможный - 64 бит здесь.

  • Кроме того, вам необходимо передать эти инструкции в ЦПУ и из него: 64-битные инструкции в два раза больше 32-битных инструкций, что означает увеличение трафика в и из памяти и кешей. Процессоры структурированы таким образом, чтобы уменьшить значительную часть этих затрат, но здесь они незначительны - 64 бита.

  • Больше регистров обычно доступно в более широких наборах команд, что приводит к меньшему трафику данных в стек и / или из него. Итак, ++ 64bit здесь.

  • И, как все без сомнения отметят, у вас есть возможность использовать больше памяти.

  • (почти забыл об этом) собственный "long" или "int" размер может увеличиваться, в зависимости от архитектуры, что означает, что структуры данных, основанные на них, становятся больше. Больше = больше памяти для перемещения, что означает больше возможного ожидания при перемещении данных: - 64 бита, если вы не будете осторожны.

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

3 голосов
/ 29 апреля 2009

У меня есть база данных объемом 5 ГБ, которую нужно конвертировать. В 64-битной системе я просто помещаю все данные в коллекции. В 32-битной системе мне приходилось думать о порядке загрузки и преобразования. Проблема не во времени выполнения, а во времени разработки. Переход на 64-битную версию экономит недели разработки.

Проблемы совместимости: это не ошибка, это особенность. Он показывает вам, кто написал чистое программное обеспечение.

2 голосов
/ 29 апреля 2009

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

1 голос
/ 02 мая 2009

Я ожидаю, что это будет немного медленнее, у меня был такой опыт с FC10. У меня нет реальных причин, но это определенно не проблема размера указателя. (*)

Я догадываюсь, что это просто вопрос менее оптимизированных драйверов или подправленных чипсетов.

Также NTFS-3g была забавна под 64-битной версией, в то время как работала под 32-битной (тот же дистрибутив, то же ядро, тот же раздел, в некоторых случаях он просто «зависал»)

(*) большая часть компиляции связана с диском, а не с процессором. Более того, есть и другие улучшения в архитектуре x86_64, которые исключают этот факт (улучшенный PIC, больше режимов, SSE2 по умолчанию включено, 686 смов по умолчанию включено). Если ваше приложение не делает ничего, кроме случайного перемещения маленьких блоков вокруг.

1 голос
/ 29 апреля 2009

Это ускорит компиляцию, если ваш процесс компиляции связан с памятью, и вы используете 64-битную ОС для увеличения объема памяти, используемого вашей системой.

...