PHP benchmark
<? | |
function simple() { | |
$a = 0; | |
for ($i = 0; $i < 1000000; $i++) | |
$a++; | |
$thisisanotherlongname = 0; | |
for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++) | |
$thisisanotherlongname++; | |
} | |
/****/ | |
function simplecall() { | |
for ($i = 0; $i < 1000000; $i++) | |
strlen("hallo"); | |
} | |
/****/ | |
function hallo($a) { | |
} | |
function simpleucall() { | |
for ($i = 0; $i < 1000000; $i++) | |
hallo("hallo"); | |
} | |
/****/ | |
function simpleudcall() { | |
for ($i = 0; $i < 1000000; $i++) | |
hallo2("hallo"); | |
} | |
function hallo2($a) { | |
} | |
/****/ | |
function mandel() { | |
$w1=50; | |
$h1=150; | |
$recen=-.45; | |
$imcen=0.0; | |
$r=0.7; | |
$s=0; $rec=0; $imc=0; $re=0; $im=0; $re2=0; $im2=0; | |
$x=0; $y=0; $w2=0; $h2=0; $color=0; | |
$s=2*$r/$w1; | |
$w2=40; | |
$h2=12; | |
for ($y=0 ; $y<=$w1; $y=$y+1) { | |
$imc=$s*($y-$h2)+$imcen; | |
for ($x=0 ; $x<=$h1; $x=$x+1) { | |
$rec=$s*($x-$w2)+$recen; | |
$re=$rec; | |
$im=$imc; | |
$color=1000; | |
$re2=$re*$re; | |
$im2=$im*$im; | |
while( ((($re2+$im2)<1000000) && $color>0)) { | |
$im=$re*$im*2+$imc; | |
$re=$re2-$im2+$rec; | |
$re2=$re*$re; | |
$im2=$im*$im; | |
$color=$color-1; | |
} | |
if ( $color==0 ) { | |
print "_"; | |
} else { | |
print "#"; | |
} | |
} | |
print "<br>"; | |
} | |
} | |
/****/ | |
function mandel2() { | |
$b = " .:,;!/>)|&IH%*#"; | |
//float r, i, z, Z, t, c, C; | |
for ($y=30; printf("\n"), $C = $y*0.1 - 1.5, $y--;){ | |
for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){ | |
for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++) | |
if ($z*$z + $Z*$Z > 500000) break; | |
echo $b[$k%16]; | |
} | |
} | |
} | |
/****/ | |
function Ack($m, $n){ | |
if($m == 0) return $n+1; | |
if($n == 0) return Ack($m-1, 1); | |
return Ack($m - 1, Ack($m, ($n - 1))); | |
} | |
function ackermann($n) { | |
$r = Ack(3,$n); | |
print "Ack(3,$n): $r\n"; | |
} | |
/****/ | |
function ary($n) { | |
for ($i=0; $i<$n; $i++) { | |
$X[$i] = $i; | |
} | |
for ($i=$n-1; $i>=0; $i--) { | |
$Y[$i] = $X[$i]; | |
} | |
$last = $n-1; | |
print "{$Y[$last]}\n"; | |
} | |
/****/ | |
function ary2($n) { | |
for ($i=0; $i<$n;) { | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
$X[$i] = $i; ++$i; | |
} | |
for ($i=$n-1; $i>=0;) { | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
$Y[$i] = $X[$i]; --$i; | |
} | |
$last = $n-1; | |
print "{$Y[$last]}\n"; | |
} | |
/****/ | |
function ary3($n) { | |
for ($i=0; $i<$n; $i++) { | |
$X[$i] = $i + 1; | |
$Y[$i] = 0; | |
} | |
for ($k=0; $k<1000; $k++) { | |
for ($i=$n-1; $i>=0; $i--) { | |
$Y[$i] += $X[$i]; | |
} | |
} | |
$last = $n-1; | |
print "{$Y[0]} {$Y[$last]}\n"; | |
} | |
/****/ | |
function fibo_r($n){ | |
return(($n < 2) ? 1 : fibo_r($n - 2) + fibo_r($n - 1)); | |
} | |
function fibo($n) { | |
$r = fibo_r($n); | |
print "$r\n"; | |
} | |
/****/ | |
function hash1($n) { | |
for ($i = 1; $i <= $n; $i++) { | |
$X[dechex($i)] = $i; | |
} | |
$c = 0; | |
for ($i = $n; $i > 0; $i--) { | |
if ($X[dechex($i)]) { $c++; } | |
} | |
print "$c\n"; | |
} | |
/****/ | |
function hash2($n) { | |
for ($i = 0; $i < $n; $i++) { | |
$hash1["foo_$i"] = $i; | |
$hash2["foo_$i"] = 0; | |
} | |
for ($i = $n; $i > 0; $i--) { | |
foreach($hash1 as $key => $value) $hash2[$key] += $value; | |
} | |
$first = "foo_0"; | |
$last = "foo_".($n-1); | |
print "{$hash1[$first]} {$hash1[$last]} {$hash2[$first]} {$hash2[$last]}\n"; | |
} | |
/****/ | |
function gen_random ($n) { | |
global $LAST; | |
return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM ); | |
} | |
function heapsort_r($n, &$ra) { | |
$l = ($n >> 1) + 1; | |
$ir = $n; | |
while (1) { | |
if ($l > 1) { | |
$rra = $ra[--$l]; | |
} else { | |
$rra = $ra[$ir]; | |
$ra[$ir] = $ra[1]; | |
if (--$ir == 1) { | |
$ra[1] = $rra; | |
return; | |
} | |
} | |
$i = $l; | |
$j = $l << 1; | |
while ($j <= $ir) { | |
if (($j < $ir) && ($ra[$j] < $ra[$j+1])) { | |
$j++; | |
} | |
if ($rra < $ra[$j]) { | |
$ra[$i] = $ra[$j]; | |
$j += ($i = $j); | |
} else { | |
$j = $ir + 1; | |
} | |
} | |
$ra[$i] = $rra; | |
} | |
} | |
function heapsort($N) { | |
global $LAST; | |
define("IM", 139968); | |
define("IA", 3877); | |
define("IC", 29573); | |
$LAST = 42; | |
for ($i=1; $i<=$N; $i++) { | |
$ary[$i] = gen_random(1); | |
} | |
heapsort_r($N, $ary); | |
printf("%.10f\n", $ary[$N]); | |
} | |
/****/ | |
function mkmatrix ($rows, $cols) { | |
$count = 1; | |
$mx = array(); | |
for ($i=0; $i<$rows; $i++) { | |
for ($j=0; $j<$cols; $j++) { | |
$mx[$i][$j] = $count++; | |
} | |
} | |
return($mx); | |
} | |
function mmult ($rows, $cols, $m1, $m2) { | |
$m3 = array(); | |
for ($i=0; $i<$rows; $i++) { | |
for ($j=0; $j<$cols; $j++) { | |
$x = 0; | |
for ($k=0; $k<$cols; $k++) { | |
$x += $m1[$i][$k] * $m2[$k][$j]; | |
} | |
$m3[$i][$j] = $x; | |
} | |
} | |
return($m3); | |
} | |
function matrix($n) { | |
$SIZE = 30; | |
$m1 = mkmatrix($SIZE, $SIZE); | |
$m2 = mkmatrix($SIZE, $SIZE); | |
while ($n--) { | |
$mm = mmult($SIZE, $SIZE, $m1, $m2); | |
} | |
print "{$mm[0][0]} {$mm[2][3]} {$mm[3][2]} {$mm[4][4]}\n"; | |
} | |
/****/ | |
function nestedloop($n) { | |
$x = 0; | |
for ($a=0; $a<$n; $a++) | |
for ($b=0; $b<$n; $b++) | |
for ($c=0; $c<$n; $c++) | |
for ($d=0; $d<$n; $d++) | |
for ($e=0; $e<$n; $e++) | |
for ($f=0; $f<$n; $f++) | |
$x++; | |
print "$x\n"; | |
} | |
/****/ | |
function sieve($n) { | |
$count = 0; | |
while ($n-- > 0) { | |
$count = 0; | |
$flags = range (0,8192); | |
for ($i=2; $i<8193; $i++) { | |
if ($flags[$i] > 0) { | |
for ($k=$i+$i; $k <= 8192; $k+=$i) { | |
$flags[$k] = 0; | |
} | |
$count++; | |
} | |
} | |
} | |
print "Count: $count\n"; | |
} | |
/****/ | |
function strcat($n) { | |
$str = ""; | |
while ($n-- > 0) { | |
$str .= "hello\n"; | |
} | |
$len = strlen($str); | |
print "$len\n"; | |
} | |
/*****/ | |
function getmicrotime() | |
{ | |
return microtime(true); | |
} | |
function start_test() | |
{ | |
ob_start(); | |
return getmicrotime(); | |
} | |
function end_test($start, $name) | |
{ | |
global $total; | |
$end = getmicrotime(); | |
ob_end_clean(); | |
$total += $end-$start; | |
$num = number_format($end-$start,3); | |
$pad = str_repeat(" ", 24-strlen($name)-strlen($num)); | |
echo $name.$pad.$num."\n"; | |
ob_start(); | |
return getmicrotime(); | |
} | |
function total() | |
{ | |
global $total; | |
$pad = str_repeat("-", 24); | |
echo $pad."\n"; | |
$num = number_format($total,3); | |
$pad = str_repeat(" ", 24-strlen("Total")-strlen($num)); | |
echo "Total".$pad.$num."\n"; | |
} | |
$t0 = $t = start_test(); | |
simple(); | |
$t = end_test($t, "simple"); | |
simplecall(); | |
$t = end_test($t, "simplecall"); | |
simpleucall(); | |
$t = end_test($t, "simpleucall"); | |
simpleudcall(); | |
$t = end_test($t, "simpleudcall"); | |
mandel(); | |
$t = end_test($t, "mandel"); | |
mandel2(); | |
$t = end_test($t, "mandel2"); | |
ackermann(7); | |
$t = end_test($t, "ackermann(7)"); | |
ary(50000); | |
$t = end_test($t, "ary(50000)"); | |
ary2(50000); | |
$t = end_test($t, "ary2(50000)"); | |
ary3(2000); | |
$t = end_test($t, "ary3(2000)"); | |
fibo(30); | |
$t = end_test($t, "fibo(30)"); | |
hash1(50000); | |
$t = end_test($t, "hash1(50000)"); | |
hash2(500); | |
$t = end_test($t, "hash2(500)"); | |
heapsort(20000); | |
$t = end_test($t, "heapsort(20000)"); | |
matrix(20); | |
$t = end_test($t, "matrix(20)"); | |
nestedloop(12); | |
$t = end_test($t, "nestedloop(12)"); | |
sieve(30); | |
$t = end_test($t, "sieve(30)"); | |
strcat(200000); | |
$t = end_test($t, "strcat(200000)"); | |
total(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment