1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
| TarasBer |
2.02.2010 20:55
Сообщение
#1
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Я так понял, что каждое обращение к памяти, встречающееся в программе, долго и упорно обрабатывается системой на предмет залезания не туда, и если действительно было нарушение, вызывается обработчик исключения. Я сделал одну процедуру, у которой основной рабочий цикл (заполнении линии одинаковым, пока что, значением) выглядел так:
Сделал замер скорости. Огорчился. Решил смеха ради добавить одну паразитную команду (она тут закомментирована). Получил резкое ускорение - то есть теперь данные стали выводиться в одно и то же место в памяти. Видимо система запомнила, куда в последний раз обращалась программа и не стала проверять обращение на корректность лишний раз. Как на самом деле обрабатываются обращения к памяти в винде? И можно ли использовать эту информацию для ускорения? Кстати, почему пара deс; jnz работает намного быстрее, чем loop, который специально предназначен для циклов? -------------------- |
![]() ![]() |
| volvo |
3.02.2010 22:37
Сообщение
#2
|
|
Гость |
Цитата В рабочем цикле будет заполняться экранный буфер цветом примитива, с учётом тумана и будет заполняться з-буфер. То есть, я так понимаю (ключевое слово выделено), цикла самого еще нет, а ты уже занимаешься его оптимизацией? Не надо этого делать... Во-первых, так завещал Кнут ("Premature optimization is the root of all evil" ©, если что), а во-вторых, открывай книгу Криса Касперски "Техника оптимизации программ", и читай, что и как надо оптимизировать, а что и как - не надо. И что надо делать, чтобы оптимизация была именно таковой, а не борьбой с ветряными мельницами...Так что, пока разговор ни о чем. Если есть какой-то конкретный кусок кода, который надо оптимизировать, потому что ты точно знаешь, что в нем содержится проблема, и именно он не дает твоей программе работать как положено, а не какой-то наведенный эффект из другой части программы, то давай продолжим... Но для этого тебе надо по меньшей мере прогнать свой код через профилировщик, причем не раз и не два, и на большом количестве повторений. Ну, это все есть у Касперски, я ж не буду сейчас перепечатывать сюда всю книгу... Update: Кстати, ссылка в тему: Зачастую оптимизация противоречит интуиции Сообщение отредактировано: volvo - 4.02.2010 17:07 |
TarasBer Скорость работы с памятью в WinXP 2.02.2010 20:55
volvo Во-первых, не факт, что на всех процессорах будет ... 2.02.2010 22:05
TarasBer > Давай сделаем так: приведи простейшую програм... 2.02.2010 22:42
volvo Вот, посмотри, что у меня получилось:
На более ста... 2.02.2010 23:07
Lapp От типа памяти + кэша должно сильно зависеть. Tar... 3.02.2010 0:16
TarasBer > TarasBer, давно пора забыть про классическую ... 3.02.2010 19:05
volvo А можно озвучить задачу, которую ты пытаешься реши... 3.02.2010 19:35
TarasBer В рабочем цикле будет заполняться экранный буфер ц... 3.02.2010 19:48
TarasBer Я не просто так спросил, если что.
Я бы не стал за... 6.02.2010 14:19
TarasBer И да, тогда перенесите тему в ассемблер, пожалуйст... 6.02.2010 14:48
volvo Ну, и где этот код и результаты его прогонов на ра... 6.02.2010 14:53
TarasBer Результаты скорости меня интересуют, в первую очер... 6.02.2010 15:42
TarasBer Попробовал выводить по 8 байт, при помощи команды ... 9.02.2010 21:37
SKVOZNJAK Так в виндовсе память работает в защищённом режиме... 10.02.2010 1:21![]() ![]() |
|
Текстовая версия | 15.11.2025 15:29 |