lua-users home
lua-l archive

Re: Trace compilation from embedded LuaJIT

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Wednesday 03, Douglas Creager wrote:
> Hi all,
> 
> I have a quick question about how much hot JIT action you'll get when
> embedding LuaJIT within another application. My understanding is that
> LuaJIT's heuristics look for hot traces by identifying loops within the
> Lua code. But what happens if the loop is in the host C application? So
> for instance, I've got a data processing app where I'm allowing the user
> to do some custom processing by providing a Lua function. That's going to
> be a hot function, since I'm processing many many records, so I'd like to
> have that function trace-compiled down into machine code. [As an aside,
> this is a good use case for a possible lua_pushcdata function on the C
> side of things, to get a nice FFI cdata object into the Lua code from the
> host app. But I digress.]
> 
> Are there any constructs that would let me accomplish this? In stock Lua
> I'd just call the user's customization function using lua_pcall, but then
> there's no Lua loop to cause LuaJIT to start recording traces.
> 
> I've also tried using a coroutine, where I pass in each record using
> lua_resume:
> 
> while true do
> local more, record = coroutine.yield()
> if not more then return end
> process(record)
> end
> 
> This gives me a loop, which will be executed once per record. But
> unfortunately coroutine.yield is NYI, so I don't get a nice tasty compiled
> trace.
> 
> Any other things I can try? Or is this too far outside of LuaJIT's
> intended use cases?
How about moving the data processing loop into Lua (for both the custom Lua 
callbacks and any other C callbacks).
while true do
 local record = get_next_record()
 if not record then return end
 -- call call all c/lua per-record callbacks
 for i=1,#callbacks do
 callbacks[i](record)
 end
 -- cleanup record
 cleanup_record(record)
end
If you are worried about the speed when not using LuaJIT, then have another 
version of that loop written in C.
-- 
Robert G. Jakabosky

AltStyle によって変換されたページ (->オリジナル) /