![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
babe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.9.2007 Репутация: нет Всего: нет |
Добрый день,
При поиске в некотором массиве сравнение индекса для некоторой задачи можно записать: если(индекс > 0) либо если(индекс <> 0). Результат будет правильным и в том и в другом случае. Вопрос в том- в каком случае сравнение произойдет быстрее и будет ли это быстрее, то есть есть ли принципиальная разница что лучше использовать- видимо обоснованием будет каким образом происходит сравнение на больше? Можно ли где-нибудь прочитать каким образом сравниваются больше и меньше? как это происходит внутри языков? Заранее большое спасибо! |
|||
|
||||
Gaudi |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 18.3.2007 Репутация: нет Всего: нет |
asm код, полученной в IDA 5.2
если
то
jle(of 8e) и jz(of 84) выполнятся одинаково ?_быстро_? ps: компилировал в vc2008 express с опциями по-умолчанию |
||||||||
|
|||||||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
конпелятор msvc не перестаем меня радовать обычно для проверки на равенство нулю юзают test eax,eax\jz xxx а для сравнения с нулем cmp xxx,0\jxx zzz test eax,eax короче и может гдето быстрее впрочем с таким компилятором об оптимизации такого рода можно не думать, и так и так *плохо* компилит |
|||
|
||||
MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
GoldFinch, а разве MSVC++ не лучший в мире компилер по оптимизации ? чот я слышал такой расклад:
1) MSVC++. 2) Intel. 3) g++ Gaudi, попробуйти ещё интеловским скомпилить. И вообще вы в каком режиме компилили, с оптимизацией ? -------------------- MaXL |
|||
|
||||
alexanderwdark |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
ICC 11, конечно, гораздо разумнее компилирует, чем MSVC.
|
||||
|
|||||
Coder |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 733 Регистрация: 13.12.2004 Репутация: нет Всего: 11 |
Кстати, Delphi 7 использует инструкцию test.
Присоединённый файл ( Кол-во скачиваний: 11 ) ![]() |
|||
|
||||
alexanderwdark |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
В последних версиях компилятор в делфи очень даже разумный. Не раз видел отличный высокоуровневый код, например компрессоров на чистом делфи, дающий более высокую производительность, чем оптимизированный сишный. |
|||
|
||||
Gaudi |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 18.3.2007 Репутация: нет Всего: нет |
Тот же Си код, но с оптимизацией по скорости (/O2)
Ни байта лишнего кода! Тогда вот для этого
msvc с теми же опциями дает
Intell c++ compiler'a под рукой нету |
||||||
|
|||||||
alexanderwdark |
|
||||||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 20.2.2009 Репутация: нет Всего: нет |
Немного измел код для того, чтобы оптимизатор не ингорировал код, не имеющий эффекта (поскольку в исходном результат переменной b не используется нигде после присванивания)
MSVC 9 (maximize speed mode)
Intel CPP11 Maximize Speed + Hi-level
C Builder 2007:
FreePascal 2.2.2 с оптимизацией
и без
Это сообщение отредактировал(а) alexanderwdark - 6.3.2009, 16:19 |
||||||||||||
|
|||||||||||||
Sefko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 5.3.2009 Репутация: нет Всего: 1 |
Забавно все это читать новичку.
Интересно не столько то, что такой вопрос появился а разделе "Алгоритмы", сколько стиль ответов, по всему видно, знающих людей. Смотрим профиль вопрошающей, на предмет выяснения языка программирования, который интересен ей. Что видим? Четыре предыдущих сообщения babe относились к JavaScript. . |
|||
|
||||
babe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 11.9.2007 Репутация: нет Всего: нет |
Четыре предыдущих сообщения( смотри дату) не дают возможности сделать вывод о том, что меня интересует
![]() меня интересует КАК обрабатывается сравнение на больше - то есть можно ли где то почитать вразумительно реализацию этого внутри компилятора- любого. Кажется в разделе оговаривается не привязываться к конкретному языку, но если уж так это принципиально- решение задачи видится на php. Но конечно количество ответов и их содержимое меня впечатлило!))) Идея практическая понятна- большое спасибо- но хотелось бы слегка теории- так сказать изнутри. Если не затруднит. Большое спасибо всем, кто откликнулся и потратил свое время!!! |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 16 Всего: 69 |
напишите два варианта кода. один с <, второй с <>. замерьте время выполнения. что выполняется быстрее - то и происходит быстрее. |
|||
|
||||
Sefko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 5.3.2009 Репутация: нет Всего: 1 |
Тут вот какое дело. 1. Вообще-то именно в такой постановке (реализация внутри любого компилятора) вопрос не имеет смысла. 2. Для большинства компиляторов - во всяком случае, для компиляторов с языка C++ - вопрос вряд ли актуален с практической точки зрения. Не удастся как-то ускорить выполнение на таких мелочах. Так что тут имеет смысл разве что теоретический интерес к качеству транслятора. 3. Кроме компиляторов бывают еще интерпретаторы. Вот для них этот вопрос, пожалуй, более актуальный. Тут бывают всякие чудеса. 4. Реализация исполнения скриптов осуществляется таки интерпретаторами. Например, "JavaScript-код включается в HTML-код страницы и исполняется интерпретатором, встроенным в браузер". 5. Написать скрипт, который будет достаточно бодро исполняться на НЕИЗВЕСТНО каком компьютере НЕИЗВЕСТНО каким интерпретатором - задача не очень простая. А именно такая задача и стоит, если делается какое-то сетевое приложение. И вряд ли (ну, мне так кажется) решению этой задачи могут помочь ассемблерные коды, изготовленные разными трансляторами с языка C++. Подлянка состоит в том, что даже такие разумные советы, как данный здесь на ветке - измерить физическое время, - как-то трудно осуществимы. Не из-за этих ли обстоятельств и появилась "теоретическая" постановка вопроса? 6. И, тем не менее, все обсуждение сконцентрировалось вокруг анализа ассемблерных кодов. Ну, вот сочетание всего этого мне и показалось забавным. Не обессудьте - не смог удержаться от эмоциональной реплики по такому случаю. Это сообщение отредактировал(а) Sefko - 6.3.2009, 19:39 |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
zim22, замер времени выполнения такой кратковременной операции - весьма нетривиальная задача
если компилятор оптимизирует код, то результирующий код будет зависеть от контекста в котором происходит сравнение в общем случае, если разница и будет, то проверка на ноль выполняется быстрее и\или записывается короче, чем сравнение с нулем. на любой платформе Добавлено через 14 минут и 10 секунд
любой компилятор\интерпретатор компилирует высокоуровневый код языка в некоторый низкоуровневый код сравнение двух чисел производится их вычитанием друг из друга, больше\меньше\равно соответствует положительному\отрицательному\нулевому результату этого вычитания проверка числа на ноль может быть вынесена в отдельную инструкцию, требующую 1 операнд и не выполняющую никаких арифметических\логических действий |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 4 Всего: 36 |
GoldFinch,
конпелятор msvc не перестаем меня радовать Возрадуйся ещё больше, когда откроется тебе Знамение, что такое конструкции mov [ebp+var_8], eax cmp [ebp+var_8], 0 конпелятор использует только в дебаге. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |