[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: How fast is LuaJIT supposed to be?
- From: Axel Kittenberger <axkibe@...>
- Date: Fri, 21 Jan 2011 09:48:02 +0100
Ah, a sieve of eratosthenes (there are various ways to get primes). I
suppose you will find a considerable perfomance increase (native and
jit) if you use "candidate" as a local variable you pass as argument
and return value to find_next_candidate() instead of storing it as
"candidate" key in the prime array.
On Fri, Jan 21, 2011 at 8:12 AM, Steve Litt <slitt@troubleshooters.com> wrote:
> On Friday 21 January 2011 01:52:40 Alexander Gladysh wrote:
>> On Fri, Jan 21, 2011 at 09:47, Steve Litt <slitt@troubleshooters.com> wrote:
>> > A few weeks ago I wrote a Lua prime number generator. Today, to test Lua
>> > 5.1.4 vs LuaJIT 1.1.6 I ran the prime numbers between 1 and 50 million,
>> > writing all numbers to /dev/null to minimize I/O time. Lua took typically
>> > around 48 seconds and LuaJIT took around 34 seconds. Is this typical of a
>> > CPU/memory bound process?
>>
>> Why do you try LJ 1.1.6? Try LuaJIT 2! :-)
>
> Is it significantly faster than 1.1.6? I just took the stable one.
>
>>
>> Also, you may want to show us the benchmark code.
>
> Attached. Please don't laugh too hard -- I'd had about 3 days of Lua
> experience when I wrote it. Writing that program so easily and having it run
> so quickly was one of the things that made me decide to look more deeply into
> Lua.
>
> In case your list doesn't allow attachments, I've printed it at the bottom of
> this email.
>
> Thanks
>
> SteveT
>
> Steve Litt
> Recession Relief Package
> http://www.recession-relief.US
> Twitter: http://www.twitter.com/stevelitt
>
> #!/usr/bin/lua
>
> --[[
> Copyright (c) 2010 by Steve Litt
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.
> ]]
>
>
> function mark_multiples(primes)
> local multiple=primes["candidate"]
> while multiple <= primes["upto"] do
> multiple = multiple + primes["candidate"]
> -- print(string.format("dia multiple=%d", multiple))
> primes[multiple] = 0
> end
> end
>
>
> function find_next_candidate(primes)
> primes["candidate"] = primes["candidate"] + 1
> while primes[primes["candidate"]] == 0 do
> primes["candidate"] = primes["candidate"] + 1
> end
>
> end
>
>
> function print_primes(primes)
> for i=1, primearray["upto"] do
> if primearray[i] == 1 then
> print(i)
> end
> end
> end
>
>
> function print_array(primes)
> for i=1, primearray["upto"] do
> print(string.format("%d %d", i, primearray[i]))
> end
> end
>
>
> function mark_all_as_prime(primes)
> for i=1, primearray["upto"] do primearray[i]=1 end
> end
>
>
> function main()
> primearray={
> upto=arg[1] + 0,
> candidate=2,
> maxcandidate=math.sqrt(arg[1])
> }
>
> mark_all_as_prime(primes)
>
> while primearray["maxcandidate"] > primearray["candidate"] do
> mark_multiples(primearray)
> find_next_candidate(primearray)
> end
>
> print_primes(primearray)
> -- print_array(primearray)
> end
>
> main()
>