Почему 64-битная версия приложения намного медленнее, чем 32-битная версия - PullRequest
2 голосов
/ 30 ноября 2011

Чтобы решить проблему с памятью 3G (Ubuntu) (иногда нам требуется больше памяти, чем 3G), я скомпилировал свое приложение в 64-битной среде, чтобы использовать больше памяти.

Но мое 64-битное приложениенамного медленнее, чем 32-битная версия.

32-битная версия построена на 32-битной машине;64-битная версия построена на 64-битной машине;в нашем тесте загрузки обе 32-битные и 64-битные версии работают на 64-битной машине.

Я гуглил, и некоторые люди говорили, что ненужный тип long может сделать 64-битную медленнее, чем 32-битную, потому что:

man g++:

   -m64
       Generate code for a 32-bit or 64-bit environment.  The 32-bit environment
       sets int, long and pointer to 32 bits and generates code that runs on any
       i386 system. The 64-bit environment sets int to 32 bits and long and
       pointer to 64 bits and generates code for AMD's x86-64 architecture. For
       darwin only the -m64 option turns off the -fno-pic and -mdynamic-no-pic
       options.

Итак, я изменил все свои long с на int с, но результат все тот же.

Пожалуйста, сообщите.

Питер

Редактировать:

  • Что касается памяти, то 32 и 64 версии используют одинаковую память, около 1,5 ~ 2,5 ГБ, и на моей машине имеется 9 ГБ физической памяти;
  • Я профилирован с использованием OProfile и для большинства функций64-битная версия собирает больше профилирующих выборок, чем 32-битная;
  • Я не могу думать о каких-либо других узких местах, пожалуйста, сообщите.
  • Мое приложение - сервер, и нагрузочный тест был выполнен под100 клиентских подключений.Сервер выполняет много вычислений, обрабатывая аудиоданные от клиентов.

Ответы [ 2 ]

4 голосов
/ 30 ноября 2011

Профиль вашего приложения.Это скажет вам, где медленный код.

2 голосов
/ 21 ноября 2013
  1. На вопрос «почему» никто не узнает причину без подробностей. Вы должны проанализировать профилированный результат и, если есть какие-либо проблемы с результатом, опубликуйте его как вопрос здесь.

  2. Если вашему приложению не требуется более 4 ГБ ОЗУ (в вашем случае 1,5 ~ 2,5 ГБ), попробуйте x32 . Это новый ABI , который позволяет использовать 32-разрядные указатели в 64-разрядной среде.

...