[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Messages posted by: MageSlayer
Forum Index » Profile for MageSlayer » Messages posted by MageSlayer
Author Message
Strijar wrote:
MageSlayer wrote:Мне пока неясно как можно вызывать из хостового приложения локальную функцию.
Можно по-подробнее?


А вам этого достаточно?


Да. По сути сейчас так и работает.

Strijar wrote:
Ну надо будет ее "регистрировать" типа:



Функция register пишется на Си, задача принять функцию и получить на нее reference, по которому уже можно будет вызывать. Хотя не факт, что это получиться на много быстрей.

Кстати, по-моему это идея.
Надо будет потестить.
Спасибо.
ids wrote:Я вызываю функции Lua из С++. Использовал toLua++. Все последней версии.

Ок. По-изучаю исходники toLua++.

ids wrote:
Пример "простой" функции:


Пример "более сложной" функции:


Собственно я имел ввиду затрату на вызов функции, а не общее время исполнения функции, но все равно спасибо
ids wrote:Я протестировал для своего приложения - вызов "пустой" функции Lua занимает 6-ть микросекунд. Далее, когда вызываю более "сложные" функции - время доходит до 1-ой миллисекунды.


6 микросекунд - это интересно.
Это был вызов глобальной функции через lua_getglobal/lua_pcall?
Какая версия луа? luajit?

Я так понимаю, что функция при первом использовании/сохранении в глобальную таблицу компилируется в байт-код.
Как тогда вызов более "сложных" функций может на это влиять?

Strijar wrote:Вызов функции которая описана как локальная быстрей глобальной в 1.48 раз

Мне пока неясно как можно вызывать из хостового приложения локальную функцию.
Можно по-подробнее?
ids wrote:Обычно производительность оценивается временем выполнения одного цикла работы приложения (управление техпроцессом и т.д.), поэтому отимизировать вызов функций необходимо после оптимизации алгоритма.


Это понятно.
В том-то и дело, что замеры хостовых функций показывают, что тормозит запуск Луа функций (lua_getglobal/lua_pcall), а не функции, которые Луа вызывает.
Вот я и пытаюсь понянь, это действительно проблема или это я просто чего-то делаю не так.

Думаю, если кто-нибудь выложит свои замеры сколько "стоит" вызов пустой луа функции, то можно уже как-то анализировать дальше.
Привет всем

Недавно столкнулся с проблемой:
вызов предварительно-загруженной функции луа из хостового языка занимает примерно 0.5-2 миллисекунды.
А таких вызовов в секунду должно быть как можно больше

Каждая такая функция "живет" в отдельном экземпляре луа. Сама функция по-сути просто дергает функции, опубликованные из хостового языка.

Сам вызов функции луа выглядит как - lua_getglobal/lua_pcall.
Вопрос: можно как-нибудь _значительно_ уменьшить это оверхед?
Может какие-нибудь твики для сборки самой библиотеки луа?

Тестилось под Линуксом, Lua 5.1.
LuaJit 2.0beta5 показывает примерно то же время.
Я уже разобрался. Если посмотреть lua_type(L,-1) и там оказалась таблица это навело на мысль о том, работает все правильно, просто я пытаюсь неправильно снять результат со стека Lua.

Проблема в итоге решилась очень просто.
Этот код выглядит правильно пока не заглянешь внутрь plua_getObject.


В общем, в plua_getObject при отрицательных значениях индекса стека происходит обращение не к тому элементу. Если код заменить на:

... то объект успешно снимается со стека.
Похоже что, это баг в pLua.
Хай

Использую pLua.
Пытаюсь заставить работать элементарный пример на Lua


Объект R нормально создается функцией Obj из FreePascal. То есть биндинг ObjC для Lua сделан правильно. Нормально отрабатывает вызов функции Name.
А вот когда дело доходит до возрата самого объекта - вываливается AV.

Код запуска скрипта:


Может кто чего подскажет?
 
Forum Index » Profile for MageSlayer » Messages posted by MageSlayer
Go to:   
Powered by JForum 2.1.9 © JForum Team