Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
1

Причины снижения скорости при переходе с 32 битной системы на 64

22.07.2018, 02:16. Показов 1134. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Наблюдается падение скорости почти в два раза.
Какие могут быть причины снижения скорости при переходе на х64?
Первое что приходит в голову - это то что кэш процессора забивается метаинформацией которая состоит из указателей в куче (размер указателей ведь увеличивается на х64) соответственно при доступе к самим данным должно быть больше промахов по кэшу. Какие ещё есть варианты?
Пробовал протестировать кэш мисы через performance profiler в студии, но репорт мне генерировать отказались...)

Хочу добавить что метаинформация в памяти расположена вплотную с данными и таких блоков идущих друг за другом много
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2018, 02:16
Ответы с готовыми решениями:

Ошибка при переходе с 32-битной на 64-битную систему
Буквально вчера хотел перейти на 64 bit систему (windows 7), но во время установки выбило ошибку. ...

Компиляция и сборка из 64-битной системы для 32-битной системы
Скажите, как скомпилировать и собрать приложение из 64 битной системы, что бы оно работало в 32...

Увеличение скорости при переходе с 3G на 4G
Есть модем Huawei E171, поддерживает только 3G, максимальная скорость приема в Коннект Менеджере...

Измерение скорости снижения напряжения
Здравствуйте! Разрабатываю зарядное устройство для аккумуляторов. Есть проблема. По моему...

12
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 707
22.07.2018, 08:39 2
Undisputed, это у Вас всегда или при определённом коде?
0
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
22.07.2018, 09:38 3
Undisputed, не корректно утверждать, что любая 64х битная программа работает медленнее или быстрее своей 32х битной версии. Можно говорить лишь о каком-то конкретном фрагменте кода. Я бы сперва с помощью замеров времени выполнения локализовал подозрительные участки, а затем бы уже думал о причинах и возможностях исправления. Возможно, вы перешли на 64х битную версию по причине значительного увеличения объема обрабатываемых данных. Увеличение объема данных, в свою очередь, привело к нелинейному увеличению времени выполнения какого-то функционала.
1
Эксперт С++
3574 / 2828 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
22.07.2018, 10:02 4
О чем может идти речь, если вы ни строчки кода не привели.
Как напишите, так и будет работать.
Если вы всю жизнь писали под х32, то естественно этот код будет тупить в 64 битной среде и его нужно оптимизировать под х64.
0
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
22.07.2018, 10:40  [ТС] 5
Sasha38,
В определённом коде.

Ygg,
А я не утверждал что любая программа... Весь функционал это просто обращение к данным, которые хранятся описанным мною способом... отсюда и соответствующие мысли...

_lunar_,
То что как написано так и работает - понятно, меня просто интересовало то что может есть какие то общие принципы перехода с 32 на 64, которые я не учёл. Если выложить код - придётся многое обьяснить что зачем и почему, поэтому к вопросу я подошёл абстрактно, предоставив при этом общую картину хранения данных...
0
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
22.07.2018, 10:52 6
По-моему, в два раза - это слишком много. Или вы не совсем корректно сравниваете, или код какой-то очень специфичный. По хорошему нужно сравнивать работу релизов со схожими опциями компиляции и с общим набором входных данных.
0
Эксперт С++
3574 / 2828 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 22
22.07.2018, 11:38 7
Цитата Сообщение от Undisputed Посмотреть сообщение
есть какие то общие принципы перехода с 32 на 64, которые я не учёл
без кода сложно что-то вам подсказать.
ну к примеру: скорее всего вы используете в коде такие типы как int (unsigned int). Использование в качестве индекса типа int, размерность которого отличается от размерности указателя, приводит к тому, что в двоичном коде будут присутствовать дополнительные команды преобразования данных (в 64-битном коде размер указателей стал равен 64-битам, а размер типа int остался 32-битным). Поэтому в х64 лучше использовать memsize типы, например size_t. Скомпилируйте одинаковый код с типами int и size_t, и сравните ассемблерный мнемокод.
если у вас в коде происходят векторные вычисления, то здесь можно использовать intrinsic функции (чтобы явно задействовать 128 битные инструкции), и принудительно выравнивайте их на 16 байт __declspec(align(16)).
2
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
22.07.2018, 11:42  [ТС] 8
Ygg,
Все именно так и делается)

Добавлено через 3 минуты
_lunar_,
Использую size_t.

В общем думаю нужен хороший профилировщик
Думал может есть основные принципы перехода поэтому спросил
Тогда не будем гадать )

Добавлено через 15 секунд
Спасибо за участие
0
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 707
22.07.2018, 12:02 9
Undisputed, код покажите, мы не экстрасенсы.
0
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
22.07.2018, 12:38 10
Цитата Сообщение от Undisputed Посмотреть сообщение
В общем думаю нужен хороший профилировщик
QueryPerformanceCounter в нужном месте - вполне достаточное средство.
А из граблей, на которые лично наступал пожалуй вспоминается только два явных случая:
1) дефолтное выравнивание данных в структурах,
2) подключение различных библиотек для разных платформ.
Оба этих случая могут приводить к неожиданным последствиям.
0
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
22.07.2018, 13:09  [ТС] 11
Цитата Сообщение от Ygg Посмотреть сообщение
дефолтное выравнивание данных в структурах
То есть? Чем дефолтное выравнивание данных в структурах может снизить производительность? Оно ж наоборот, для ускорения.
0
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
22.07.2018, 13:49 12
Цитата Сообщение от Undisputed Посмотреть сообщение
То есть? Чем дефолтное выравнивание данных в структурах может снизить производительность? Оно ж наоборот, для ускорения.
Я говорил не о снижении производительности. Вообще, никогда не сталкивался со значительным снижением производительности при переходе на 64 бита. Ошибки из-за выравнивания, в отличие от некоторых других, не выявляются при переходе от 32 к 64 на момент компиляции, а проявляются уже при работе программы. Например, если есть сохранение в файл или передача по сети, то изменение структуры приводит к несовместимости 32х битных и 64х битных приложений в связке. Изменение размеров структур может привести к тому, что структуры перестанут помещаться куда-либо, куда они успешно помещались при 32х битах. Без понятия, каким ещё боком это может вылезти и повлиять на скорость работы, но иногда оно вылазит.
0
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
22.07.2018, 13:58  [ТС] 13
Цитата Сообщение от Ygg Посмотреть сообщение
Без понятия, каким ещё боком это может вылезти и повлиять на скорость работы, но иногда оно вылазит.
Не, с выравниванием у меня все ок. Я думаю проблемы могут возникнуть в том что в кэше просто будет меньше места если данные в основном такого типа который увеличивается при переходе на x64 версию программы.
0
22.07.2018, 13:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2018, 13:58
Помогаю со студенческими работами здесь

Непонятна причина снижения скорости беспроводного соединения
Имею два ПК подключенных к точке доступа Интернет -один по кабелю, второй по Wi-Fi через адаптер....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru