![]() |
|
|
![]()
|
|
| ChihPih |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 3.12.2006 Репутация: нет Всего: 22 |
Привет всем.
Реализовал на асм алгоритм последовательной сортировки - получилось. Потом реализовал на Borland C++. Решил сравнить, что быстрее - мой код или сгенерированный код borland'овским компилятором. Оказалось, что мой медленее почти на 3 сек. Мерил, сортровкой массива из 100000 элементов целого типа. Вот код на асм:
Вот код на C++:
Подскажите, пожалуйста, как можно еще код на асме оптимизировать? |
||||
|
|||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
|
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Что-то у тебя много условных переходов в ассемблерной проге, в то время как в сишной проге только один if.
Попробуй на асме чисто повторить сишную программу Добавлено через 2 минуты и 27 секунд А не, вроде с переходами все нормально Добавлено через 9 минут и 24 секунды Мож ещё edx использовать не под хранение ук-ля на массив, а для хранения минимального эл-та Тогда
упростится до
Ну или как-то так -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
ChihPih, а для чего оптимизировать алгоритм пузырьковой сортировки? Есть сортировки и более быстрые -- разберись с ними
|
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Человек наверно учится, решил начать с простого. В принципе и тут есть что пооптимизировать.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
ksili, все уже до нас украдено (Операция "Ы" и другие приключения Шурика) смотрите здесь
(fasm) Подскажите алго сортировки unicode строк |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Там конечно топикстартеру будет интересно почитать. Но здесь он ещё догадался сделать прогу в Билдере для сравнения, что было очень полезно. По ссылке я таких сравнений не заметил.
Жаль нету хороших бесплатных профайлеров. Так бы я ему посоветовал -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Обмен значений через стек операция медленная и неэффективная. Особенно, если стек не в кэше.
Ещё одно лишнее обращение к памяти. Храни счётчик в отдельном регистре. У тебя как минимум свободны ещё 3 регистра, почему их не задейстсовать? Вообще, на будущее имей ввиду, что любая оптимизация должна быть направлена на минизацию обращений к памяти и повышение эффективности работы кэша(как данных, так и команд). Потому что любая команда выполняется за доли процента по сравнению со временем которое требуется на получение данных из оперативной памяти. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| airyashov |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 2 Всего: 6 |
del
Это сообщение отредактировал(а) airyashov - 26.1.2009, 08:35 -------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
ChihPih, может ты сначала сортируешь массив на асме, а потом тот же уже отсортированный массив сортируешь на С?
Или у тебя два разных массива или вообще две разных программы? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| ChihPih |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 3.12.2006 Репутация: нет Всего: 22 |
1. Ведь не с проста я поднял тему в этом разделе! 2. Даже более быстрый алгоритм можно сделать медленным
Поправил, вот, что получилось(теперь на 2 секунды отстает):
Пробовал в esi помещать count, но получалось еще медленней?!
Вот как я сравнивал(тоже на 6 борланде):
И, кстати, может вы забыли в опциях проекта release поставить(нажать)? Еще пару вопросов появилось: 1. Насколько я знаю eax, ebx, ecx и edx - регистры общего назначения. А esi, edi, ebp, esp - служебные, то есть через ebp+esp по стеку "погулять". А вот esi и edi для чего, я так и не понял. 2. Можно ли esi, edi, ebp, esp использовать так же как и eax .. edx, то есть записывать в них, что угодно и т.д. и т.п.? |
||||||||||||
|
|||||||||||||
| ChihPih |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 3.12.2006 Репутация: нет Всего: 22 |
Сам разобрался. |
|||
|
||||
| ChihPih |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 3.12.2006 Репутация: нет Всего: 22 |
Вот поправил код, получилось довольно не плохо! Отставание сократилось до долей секунды.
Спасибо всем за помощь! Это сообщение отредактировал(а) ChihPih - 13.1.2009, 23:20 |
|||
|
||||
| Mikl_ |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 8 Всего: 14 |
ChihPih, в ассемблере обычно разворачивают for-цикл
т.е. вместо
используют
|
||||
|
|||||
| ChihPih |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 3.12.2006 Репутация: нет Всего: 22 |
Спасибо за совет, учту на будущее.
|
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |