Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама



**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 100руб/мес, Текстовая 50руб/мес.
Показано с 1 по 6 из 6
  1. #1
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,460
    Репутация:
    2021 ±

    Приёмы для исследования кода на Pawn

    В данной статье приведены методы, которые будут использоваться в доказательствах в предстоящем цикле уроков по скриптингу.
    Отдельная тема нужна для того, чтобы не засорять пояснениями другие статьи и при этом развёрнуто описать каждый из приёмов.
    Касаемо pawn.cfg, ключи компилятора записываются в нём в одну строку через пробел (пример: -d0 -O2 -v2).


    1. Получение ассемблерного листинга.
    В папке с компилятором создайте файл "pawn.cfg". В этот файл можно вписать параметры командной строки для компилятора. Впишите в файл "-a" (без кавычек) и сохраните.
    Компилятор при запуске откроет pawn.cfg и, найдя ключ "-a" сгенерирует ассемблерный листинг (*.asm) из файла *.pwn (при этом файл *.amx создан не будет!)
    Также можно дизассемблировать уже готовый файл *.amx, использовав утилиту pawndisasm. Этой утилиты нет в стандартном комплекте сервера SA:MP для Windows (равно как и нет в стандартной сборке Pawn 3.2.3664 - она была бэкпортирована из 3.3.3875), но она есть в модифицированной версии компилятора от Zeex.
    Благодаря этому приёму можно узнать, во что превратится исходный код после компиляции и судить о целесообразности тех или иных вариантов кода.

    2. Профилирование.
    Профилирование (в информатике) - сбор характеристик работы программы.
    Не так давно я выкладывал профайлер для измерения времени выполнения двух отрывков кода на Pawn.
    С его помощью также можно судить о целесообразности разных вариантов кода, сравнив их производительность.

    3. Информация о требованиях к памяти.
    В файле pawn.cfg добавьте ключ "-v2". Это заставит компилятор выводить подробную инфу о требованияк скрипта к памяти: объём заголовка файла *.amx, кода, данных и объём стека/кучи (как общий объём, так и используемый).
    Таким образом, можно узнать, сколько памяти расходуется при использовании разных образцов кода.

    4. Оптимизация генерируемого кода.
    По умолчанию компилятор Pawn никак не оптимизирует генерируемый код.
    Однако, в ситуациях, когда требуется оценить производительность кода, оптимизации иногда могут изменить результаты тестов. Кроме того, код после оптимизации, как правило, более компактный и его легче разбирать в ассемблерных листингах.
    За оптимизацию генерируемых инструкций в компиляторе отвечает ключ -OX:
    -O0 - никаких оптимизаций.
    -O1 - JIT-совместимые оптимизации.
    -O2 - то же самое, что в -O1, но также используются оптимизации, не совместимые с JIT.
    Код, скомпилированный с ключом -O2 не запустится, если использовать плагин JIT для SA:MP, поэтому целесообразно указывать в pawn.cfg ключ -O1.

    5. Удаление отладочной информации.
    Ключ компилятора -dX отвечает за добавление отладочной информации:
    -d0 - не добавлять отладочную информацию.
    -d1 - добавить проверки времени выполнения (например, проверки на выход за пределы массивов).
    -d2 - добавить проверки времени выполнения и символьную информацию (названия функций и переменных).
    -d3 - то же самое, что и -d2, но также отключает оптимизацию генерируемого кода (-O0).
    Указав в pawn.cfg ключ -d0, можно убрать из кода лишние инструкции (break, bounds), что опять же может быть полезно при чтении дизассемблерных листингов.


    Тема будет дополняться.
    Последний раз редактировалось Daniel_Cortez; 11.10.2015 в 00:54. Причина: 5
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  2. 14 пользователя(ей) сказали cпасибо:
    $continue$ (10.10.2015)Alanchick (13.07.2016)Anton Styazhkin (10.10.2015)Londlem (10.10.2015)Nurick (11.10.2015)Quman (10.10.2015)Sp1ke (20.07.2016)Spectrum (09.10.2015)Unreal (10.10.2015)vovandolg (16.04.2016)Zaur_Lumanov (11.10.2015)[ForD] (09.10.2015)^_^ (09.10.2015)
  3. #2
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,460
    Репутация:
    2021 ±
    Добавил пункты 3, 4 и 5. Также дополнил пункт 1 информацией об утилите pawndisasm.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  4. #3
    Аватар для Zaur_Lumanov
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.05.2015
    Адрес
    Москва
    Сообщений
    18
    Репутация:
    8 ±
    Какие могут быть проблемы, при использовании компилятора Zeex?

  5. #4
    Аватар для Unreal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.09.2014
    Сообщений
    117
    Репутация:
    3 ±
    -O1 - JIT-совместимые оптимизации.
    можно по подробнее, я использую JIT plugin, т.е если я и это "поставлю", то будет еще лучше ?

  6. #5
    Аватар для jeraqiv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.06.2015
    Адрес
    Двумерный массив
    Сообщений
    70
    Репутация:
    2 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В данной статье приведены методы, которые будут использоваться в доказательствах в предстоящем цикле уроков по скриптингу.
    Отдельная тема нужна для того, чтобы не засорять пояснениями другие статьи и при этом развёрнуто описать каждый из приёмов.
    Касаемо pawn.cfg, ключи компилятора записываются в нём в одну строку через пробел (пример: -d0 -O2 -v2).


    1. Получение ассемблерного листинга.
    В папке с компилятором создайте файл "pawn.cfg". В этот файл можно вписать параметры командной строки для компилятора. Впишите в файл "-a" (без кавычек) и сохраните.
    Компилятор при запуске откроет pawn.cfg и, найдя ключ "-a" сгенерирует ассемблерный листинг (*.asm) из файла *.pwn (при этом файл *.amx создан не будет!)
    Также можно дизассемблировать уже готовый файл *.amx, использовав утилиту pawndisasm. Этой утилиты нет в стандартном комплекте сервера SA:MP для Windows (равно как и нет в стандартной сборке Pawn 3.2.3664 - она была бэкпортирована из 3.3.3875), но она есть в модифицированной версии компилятора от Zeex.
    Благодаря этому приёму можно узнать, во что превратится исходный код после компиляции и судить о целесообразности тех или иных вариантов кода.

    2. Профилирование.
    Профилирование (в информатике) - сбор характеристик работы программы.
    Не так давно я выкладывал профайлер для измерения времени выполнения двух отрывков кода на Pawn.
    С его помощью также можно судить о целесообразности разных вариантов кода, сравнив их производительность.

    3. Информация о требованиях к памяти.
    В файле pawn.cfg добавьте ключ "-v2". Это заставит компилятор выводить подробную инфу о требованияк скрипта к памяти: объём заголовка файла *.amx, кода, данных и объём стека/кучи (как общий объём, так и используемый).
    Таким образом, можно узнать, сколько памяти расходуется при использовании разных образцов кода.

    4. Оптимизация генерируемого кода.
    По умолчанию компилятор Pawn никак не оптимизирует генерируемый код.
    Однако, в ситуациях, когда требуется оценить производительность кода, оптимизации иногда могут изменить результаты тестов. Кроме того, код после оптимизации, как правило, более компактный и его легче разбирать в ассемблерных листингах.
    За оптимизацию генерируемых инструкций в компиляторе отвечает ключ -OX:
    -O0 - никаких оптимизаций.
    -O1 - JIT-совместимые оптимизации.
    -O2 - то же самое, что в -O1, но также используются оптимизации, не совместимые с JIT.
    Код, скомпилированный с ключом -O2 не запустится, если использовать плагин JIT для SA:MP, поэтому целесообразно указывать в pawn.cfg ключ -O1.

    5. Удаление отладочной информации.
    Ключ компилятора -dX отвечает за добавление отладочной информации:
    -d0 - не добавлять отладочной информации.
    -d1 - проверки времени выполнения (например, проверки на выход за пределы массивов).
    -d2 - проверки времени выполнения с символьной информацией (названия функций и переменных).
    -d3 - то же самое, что и -d2, но также отключает оптимизацию генерируемого кода (-O0).
    Указав в pawn.cfg ключ -d0, можно убрать из кода лишние инструкции (break, bounds), что опять же может быть полезно при чтении дизассемблерных листингов.


    Тема будет пополняться.
    А в какой литературе объясняют подобные вещи? От куда вы это знаете?

  7. #6
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,460
    Репутация:
    2021 ±
    Цитата Сообщение от Unreal Посмотреть сообщение
    можно по подробнее, я использую JIT plugin, т.е если я и это "поставлю", то будет еще лучше ?
    По умолчанию компилятор уже оптимизирует байткод (-O1), поэтому есть смысл либо применять оптимизации, не совместимые с JIT (-O2), либо вообще отключать оптимизацию (-O0).


    Цитата Сообщение от Kladvey Посмотреть сообщение
    А в какой литературе объясняют подобные вещи? От куда вы это знаете?
    Собственные наблюдения. И кто учил вас цитировать такие огромные посты ради всего одной строки в ответе? Листать неудобно же -_-
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  8. 2 пользователя(ей) сказали cпасибо:
    Unreal (11.10.2015)Тузик (11.11.2016)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •