Re: Оптимизация кода -
OstGot - 18.08.2015
Привет. Вот я задумался по поводу быстродействия функций и макросов. Недавно мне предложили заменить функцию
pawn Код:
GetSpeed(Float:vX, Float:vY, Float:vZ) return floatround(VectorSize(vX, vY, vZ) * 179.28625);
Макросом
pawn Код:
#define GetSpeed(%0,%1,%2) floatround(VectorSize(%0, %1, %2) * 179.28625)
Аргументировав это тем, что на вызов функции нужно хоть малое, но время. По началу я особо и не задумался, а взял и заменил. Но вот сейчас мне кажется немного не правильной эта точка зрения, ведь если например я 50 раз использую макрос, в итоге это будет 50 раз повторяющийся один и тот же код.
А вот насчёт функций мне так не кажется. Если я прав, то эта функция просто вызовется 50 раз, а код будет написан только в 1 месте.. и это как-бы должно быть лучше.
Хотя с другой стороны моя функция ничего толком и не делает, кроме как вызывает пару других и умножает полученное число, и никаких больших условий в ней нет.
Так собственно вопрос: что было бы лучше в данной ситуации, и в каких лучше одно, а в каких другое, либо же что из этого использовать не нужно вообще?
Re: Оптимизация кода -
White_116 - 18.08.2015
Последовательность вызовов через stock:
Function->GetSpeed->floatround
Последовательность вызовов через #define:
Function->floatround
В первом случае у тебя будет прослойка, лишний вызов функции, соответственно лишние инструкции. Лишние инструкции обрабатываются и теряется процессорное время, но это не смертельно и жить можно как с ещё одним новым волоском бороды.
Re: Оптимизация кода -
xJester - 18.08.2015
Можно вообще обойтись без своих функций, но удобно ли это?
Re: Оптимизация кода -
IIOl - 20.08.2015
Quote:
Originally Posted by xJester
Можно вообще обойтись без своих функций, но удобно ли это?
|
Можно, но это вам надо? Функции упрощают нам жизнь и отказываться от них - все равно, что выстрелить себе в ногу! К примеру, native функции быстрее Pawn кода, одну функцию можно использовать много раз и не писать одно и то же. Используя самописные функции, мы экономим не только время при скриптинге, но и ресурсы. Это их малая особенность =)
Re: Оптимизация кода -
ea8de1 - 28.08.2015
Хах.. Заметил в логе такие строки:
Код:
[18:42:35] [jit] Invalid or unsupported instruction at address 00003f20:
[18:42:35] [jit] => jrel 0
Что это могло бы значить?
P.s. jit-плагин подключается раньше остальных:
P.s.s. При спавне теперь не крашит, но всё же эти две строчки не могут быть просто так (что за адрес
00003f20 ?).
UPD. И еще.. разве jit несовместим с crashdetect?
Re: Оптимизация кода -
White_116 - 28.08.2015
Quote:
Originally Posted by ea8de1
Хах.. Заметил в логе такие строки:
Код:
[18:42:35] [jit] Invalid or unsupported instruction at address 00003f20:
[18:42:35] [jit] => jrel 0
Что это могло бы значить?
|
Возможно отсутствует поддержка инструкций процессором, либо самим jit.
Резонно попробовать подключить плагин в конце и проверить.
Quote:
Originally Posted by ea8de1
UPD. И еще.. разве jit несовместим с crashdetect?
|
Код преобразуется и crashdetect теряется.
Re: Оптимизация кода -
ea8de1 - 28.08.2015
Quote:
Originally Posted by White_116
Возможно отсутствует поддержка инструкций процессором, либо самим jit.
Резонно попробовать подключить плагин в конце и проверить.
|
Попробовал и в конце, и посередке) все равно выводит эти 2 строчки в лог, как на винде так и на линуксе (vps).
Может кто-нибудь еще с этим сталкивался?
UPD. jit.inc подключен
после a_samp.inc. Хотя скорее всего это не имеет значения...
Re: Оптимизация кода -
OKStyle - 28.08.2015
jit.inc вообще подключать не надо, если не собираешься пользоваться теми функциями. С crashdetect совместимы только конкретные версии. Я писал исследования по этому поводу - погугли.
Re: Оптимизация кода -
ea8de1 - 28.08.2015
Убрал jit.inc, но те два сообщения всё равно выводятся. А так пока что вроде всё нормально
Re: Оптимизация кода -
Diman777 - 15.01.2016
Есть такой примерчик:
pawn Код:
#undef MAX_PLAYERS
#define MAX_PLAYERS (20)
new pk_num_current[MAX_PLAYERS char]; //20 байт
new bool:pk_stand[MAX_PLAYERS char]; //20 байт
new pk_num_current[MAX_PLAYERS]; //80 байт
Дело обстоит так, что я могу обойтись одной переменной, но выходит, что выгодней использовать две переменные, которые в памяти будут хранить по
20 байт (итого:
40 байт), правильно понимаю?
Re: Оптимизация кода -
x_O - 15.01.2016
Подскажите, что из основного нагружает процессор, а что оперативку? Мой сервер при онлайне 350 игроков, неимоверно использует процессор (2.4 ГГц) на полную катушку, при этом потребление оперативной памяти варьируется в пределах разумного (~500 мб).
Код достаточно чистый и оптимизированный. Нет глупых ошибок, которые мог бы допустить новичок, когда он не понимает что делает, к примеру создав хорошую нагрузку каким-нибудь не правильным использованием цикла с сохранением всех данных по 100500 раз. Задействовал Jit и foreach. Дало свои плоды, но ситуацию не исправило.
Re: Оптимизация кода -
Stepashka - 15.01.2016
Quote:
Originally Posted by x_O
Подскажите, что из основного нагружает процессор, а что оперативку? Мой сервер при онлайне 350 игроков, неимоверно использует процессор (2.4 ГГц) на полную катушку, при этом потребление оперативной памяти варьируется в пределах разумного (~500 мб).
Код достаточно чистый и оптимизированный. Нет глупых ошибок, которые мог бы допустить новичок, когда он не понимает что делает, к примеру создав хорошую нагрузку каким-нибудь не правильным использованием цикла с сохранением всех данных по 100500 раз. Задействовал Jit и foreach. Дало свои плоды, но ситуацию не исправило.
|
Процессор используют арифметика, плагины и алгоритмы.
Память выделяется только под созданные переменные.
Re: Оптимизация кода -
x_O - 15.01.2016
Quote:
Originally Posted by Stepashka
Процессор используют арифметика, плагины и алгоритмы.
Память выделяется только под созданные переменные.
|
В таком случае возможно ли, что львиную долю нагрузки на процессор дает Streamer от Инкогнито? Использую достаточно много объектов, иконок и прочее. Однако все запредельные нагрузки исключительно при высоком онлайне.
Re: Оптимизация кода -
Stepashka - 15.01.2016
Quote:
Originally Posted by x_O
В таком случае возможно ли, что львиную долю нагрузки на процессор дает Streamer от Инкогнито? Использую достаточно много объектов, иконок и прочее. Однако все запредельные нагрузки исключительно при высоком онлайне.
|
Может.
Re: Оптимизация кода -
Romz - 15.01.2016
Quote:
Originally Posted by x_O
В таком случае возможно ли, что львиную долю нагрузки на процессор дает Streamer от Инкогнито? Использую достаточно много объектов, иконок и прочее. Однако все запредельные нагрузки исключительно при высоком онлайне.
|
На сколько много объектов? При 50 тысячях не заметил сильной нагрузки.
Re: Оптимизация кода -
eakwarp - 15.01.2016
Quote:
Originally Posted by x_O
В таком случае возможно ли, что львиную долю нагрузки на процессор дает Streamer от Инкогнито? Использую достаточно много объектов, иконок и прочее. Однако все запредельные нагрузки исключительно при высоком онлайне.
|
На данный момент более 100 тысяч. Особых проблем не обнаружено. Хотя поговаривают, что проблемы есть при использовании объектов в виртуальных мирах.
Re: Оптимизация кода -
White_116 - 15.01.2016
Сортировка стримера.
Вычисления в циклах.
Постоянные вычисления при обновлении игрока.
Сделай профилирование.
Re: Оптимизация кода -
cm666 - 15.01.2016
Quote:
Originally Posted by x_O
В таком случае возможно ли, что львиную долю нагрузки на процессор дает Streamer от Инкогнито? Использую достаточно много объектов, иконок и прочее. Однако все запредельные нагрузки исключительно при высоком онлайне.
|
Сколько объектов ? И сколько в разных мирах ?
Quote:
Originally Posted by Kolstin
На сколько много объектов? При 50 тысячях не заметил сильной нагрузки.
|
Плагин по дефолту настроен ?
Re: Оптимизация кода -
x_O - 15.01.2016
Объектов 5000. По сравнению с вашими цифрами, это конечно капля воды в море. Все объекты установлены по дефолту в виртуальных мирах и интерьерах (-1). Плагин настроен по стандарту.
Делаю профилирование, но оно не помогает выявить проблемное место, об это я написал в соседней теме:
http://forum.sa-mp.com/showpost.php?...7&postcount=38
Про foreach: какой лучше использовать? Этот
https://sampforum.blast.hk/showthread.php?tid=570868 или этот
http://pastebin.com/s7PNAXZt и какие используете вы?
Re: Оптимизация кода -
cm666 - 16.01.2016
Quote:
Originally Posted by x_O
|
У тебя паблики fresh и speed нагрузку дают. Ну возможно нагрузка из за записей в файл. Такое может быть из за медленного винта.