Difference between revisions of "LSL NSieve Benchmark"
Jump to navigation
Jump to search
m (lsl code tagging) |
m (<lsl> tag to <source>) |
||
(5 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
< | {{LSL Header}}{{DEFAULTSORT:NSieve}} | ||
<source lang="lsl2"> | |||
// | // | ||
// The Great Computer Language Shootout | // The Great Computer Language Shootout | ||
Line 92: | Line 93: | ||
} | } | ||
} | } | ||
</ | </source> | ||
== LSL2 Optimized == | |||
This version was optimized for the LSL2 VM, it might run faster under Mono then the unoptimized version. In LSLEditor, it runs about 20% faster. | |||
<source lang="lsl2">// | |||
// The Great Computer Language Shootout | |||
// http://shootout.alioth.debian.org/ | |||
// | |||
// contributed by Isaac Gouy | |||
// modified by Babbage Linden | |||
// optimized for LSL2 by Strife Onizuka, Apr 14 2008 | |||
// | |||
test() | |||
{ | |||
integer m = 128; | |||
string bytes = "11"; | |||
integer i = 2; | |||
for(; i <= m; i = i << 1) | |||
{ | |||
bytes += bytes; | |||
} | |||
bytes = llGetSubString(bytes , 0, m); | |||
integer count = 0; | |||
for (i = 2; i <= m; ++i) | |||
{ | |||
if(llGetSubString(bytes, i, i) == "1") | |||
{ | |||
integer k = i; | |||
while((k += i) <= m) | |||
{ | |||
bytes = llInsertString(llDeleteSubString(bytes, k, k), k, "0"); | |||
} | |||
++count; | |||
} | |||
} | |||
llSay(0, "Primes up to " + (string)m + " " + (string)count); | |||
} | |||
time() | |||
{ | |||
llResetTime(); | |||
llSay(0, "Starting tests..."); | |||
test(); | |||
llSay(0, "Finished tests in " + (string)llGetTime() + "s"); | |||
} | |||
default | |||
{ | |||
state_entry() | |||
{ | |||
time(); | |||
} | |||
touch_start(integer num) | |||
{ | |||
time(); | |||
} | |||
} | |||
</source> | |||
{{LSLC|Library}} | |||
{{LSLC|Benchmark}} |
Latest revision as of 10:03, 25 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
//
// The Great Computer Language Shootout
// http://shootout.alioth.debian.org/
//
// contributed by Isaac Gouy
// modified by Babbage Linden
//
string setByteArray(integer numbytes)
{
string result = "";
integer i;
for(i = 0; i < numbytes; ++i)
{
result += "1";
}
result += "1";
return result;
}
string replace(string s, integer index, string char)
{
string result = "";
if(index >= 1)
{
result += llGetSubString(s, 0, index - 1);
}
result += char;
if(index < (llStringLength(s) - 1))
{
result += llGetSubString(s, index + 1, -1);
}
return result;
}
integer get(string s, integer index)
{
return llGetSubString(s, index, index) == "1";
}
string set(string s, integer index)
{
return replace(s, index, "1");
}
string unset(string s, integer index)
{
return replace(s, index, "0");
}
test()
{
integer m = 128;
string bytes = setByteArray(m);
integer count = 0;
integer i;
for (i=2; i <= m; i++)
{
if(get(bytes, i))
{
integer k;
for(k=i+i; k <= m; k+=i)
{
bytes = unset(bytes, k);
}
count++;
}
}
llSay(0, "Primes up to " + (string)m + " " + (string)count);
}
time()
{
llResetTime();
llSay(0, "Starting tests...");
test();
llSay(0, "Finished tests in " + (string)llGetTime() + "s");
}
default
{
state_entry()
{
time();
}
touch_start(integer num)
{
time();
}
}
LSL2 Optimized
This version was optimized for the LSL2 VM, it might run faster under Mono then the unoptimized version. In LSLEditor, it runs about 20% faster.
//
// The Great Computer Language Shootout
// http://shootout.alioth.debian.org/
//
// contributed by Isaac Gouy
// modified by Babbage Linden
// optimized for LSL2 by Strife Onizuka, Apr 14 2008
//
test()
{
integer m = 128;
string bytes = "11";
integer i = 2;
for(; i <= m; i = i << 1)
{
bytes += bytes;
}
bytes = llGetSubString(bytes , 0, m);
integer count = 0;
for (i = 2; i <= m; ++i)
{
if(llGetSubString(bytes, i, i) == "1")
{
integer k = i;
while((k += i) <= m)
{
bytes = llInsertString(llDeleteSubString(bytes, k, k), k, "0");
}
++count;
}
}
llSay(0, "Primes up to " + (string)m + " " + (string)count);
}
time()
{
llResetTime();
llSay(0, "Starting tests...");
test();
llSay(0, "Finished tests in " + (string)llGetTime() + "s");
}
default
{
state_entry()
{
time();
}
touch_start(integer num)
{
time();
}
}