Снижение производительности F # на x64 target? - PullRequest
4 голосов
/ 23 августа 2011

Недавно меня удивило поведение компилятора F # при использовании цели x64 по сравнению с x86.Одно и то же приложение работает со следующими целями в разное время:

x86:            68ms
Any CPU/x64:    160ms

Для меня это странные результаты.Результаты отличаются почти в два раза.Я предположил, что на 64-битном процессоре, 64-битной операционной системе 64-битное приложение будет работать быстрее, чем 32-битное.

Итак, вопрос: что не так?Проблема в компиляторе или это моя ошибка где-то?

Среда: Core 2 Duo и Windows 7 x64.Приложение F #: синтаксический анализатор языков FsYacc / FsLex..Net 4 Framework.

Ответы [ 2 ]

2 голосов
/ 23 августа 2011

Это может произойти для программ, которые используют много структур данных с большим количеством указателей, поскольку указатель составляет 8 байт в 64-разрядной версии, тогда как в 32-разрядной - 4 байта.Узким местом в коде погони за указателями является отсутствие кеша.В пределе, когда 100% вашего кода гонятся за указателями, вы получите вдвое больше пропусков кэша на 64-битной, чем на 32-битной, отсюда и 2-кратное замедление.

Однако для других типов программ64-разрядная может быть быстрее, чем 32-разрядная, по крайней мере, на x86 / x64.x64 имеет в два раза больше регистров общего назначения, чем 32-битные x86, более новые инструкции, такие как SSE / SSE2, гарантированно будут доступны на x64, но не на 32-битных x86, и с большим адресным пространством вы можете делать различные компромиссы между скоростью и пространством, напримеркак сохранение вместо повторного вычисления значений или отображения памяти в большие файлы.

0 голосов
/ 23 августа 2011

Вы пытались использовать Int64 вместо Int32 в своем приложении?Вы пробовали перейти на 8-битный набор символов?Как эти вещи влияют на производительность?

Вы используете обычный жесткий диск или SSD?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...