| 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.
Код запуска скрипта:
Может кто чего подскажет?
|
 |
|
|