[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Simplex noise (2D and 3D) with the LuaJIT FFI
- From: Steven Johnson <steve@...>
- Date: Tue, 22 Feb 2011 22:20:46 -0600
On Tue, Feb 22, 2011 at 7:54 PM, Mike Pall <firstname.lastname@example.org> wrote:
> Well, storing and reloading from FFI types only to force a
> truncation is almost never a win.
I had a nagging suspicion about this, especially at that "This by
itself was already pretty fast with LuaJIT" phase. An apparent victory
with ctypes and I went stumbling down the wrong road. Looking for
nails to pound with my shiny new hammer. :)
> I've cleaned up the 2D case and improved it a bit. It's about 50%
> faster now. See the attached file.
Many thanks! And obviously these improvements lend themselves to the
3D case as well.
I'm kicking myself for missing that Perms12 lookup table. :)
> Umm, this doesn't make sense:
> if jit.status("be") then ...
> You probably meant ffi.abi("be")?
> Also, type punning through a union violates the strict aliasing
> rules. Depends a lot on the surrounding context whether it does
> what you intended it to do (usually it doesn't).
Good to know, and it was indeed making me a bit uneasy.
> As you can see from the code, there's a simpler (and portable) way
> to do it: local a = rshift(floor(y0 - x0), 31)
Good to know as well. I'm going to bludgeon myself unconscious with
all the self-kicking. :(
Also, since I brought up "register coalescing too complex", what will
that account for when it's no longer NYI? Or considered otherwise, are
there specific constructs to avoid now, if it can be helped?