Back to index

php5  5.3.10
bench.php
Go to the documentation of this file.
00001 <?php
00002 if (function_exists("date_default_timezone_set")) {
00003        date_default_timezone_set("UTC");
00004 }
00005 
00006 date_default_timezone_set('UTC');
00007 function simple() {
00008   $a = 0;
00009   for ($i = 0; $i < 1000000; $i++) 
00010     $a++;
00011 
00012   $thisisanotherlongname = 0;
00013   for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++) 
00014     $thisisanotherlongname++;
00015 }
00016 
00017 /****/
00018 
00019 function simplecall() {
00020   for ($i = 0; $i < 1000000; $i++) 
00021     strlen("hallo");
00022 }
00023 
00024 /****/
00025 
00026 function hallo($a) {
00027 }
00028 
00029 function simpleucall() {
00030   for ($i = 0; $i < 1000000; $i++) 
00031     hallo("hallo");
00032 }
00033 
00034 /****/
00035 
00036 function simpleudcall() {
00037   for ($i = 0; $i < 1000000; $i++) 
00038     hallo2("hallo");
00039 }
00040 
00041 function hallo2($a) {
00042 }
00043 
00044 /****/
00045 
00046 function mandel() {
00047   $w1=50;
00048   $h1=150;
00049   $recen=-.45;
00050   $imcen=0.0;
00051   $r=0.7;
00052   $s=0;  $rec=0;  $imc=0;  $re=0;  $im=0;  $re2=0;  $im2=0;
00053   $x=0;  $y=0;  $w2=0;  $h2=0;  $color=0;
00054   $s=2*$r/$w1;
00055   $w2=40;
00056   $h2=12;
00057   for ($y=0 ; $y<=$w1; $y=$y+1) {
00058     $imc=$s*($y-$h2)+$imcen;
00059     for ($x=0 ; $x<=$h1; $x=$x+1) {
00060       $rec=$s*($x-$w2)+$recen;
00061       $re=$rec;
00062       $im=$imc;
00063       $color=1000;
00064       $re2=$re*$re;
00065       $im2=$im*$im;
00066       while( ((($re2+$im2)<1000000) && $color>0)) {
00067         $im=$re*$im*2+$imc;
00068         $re=$re2-$im2+$rec;
00069         $re2=$re*$re;
00070         $im2=$im*$im;
00071         $color=$color-1;
00072       }
00073       if ( $color==0 ) {
00074         print "_";
00075       } else {
00076         print "#";
00077       }
00078     }
00079     print "<br>";
00080     flush();
00081   }
00082 }
00083 
00084 /****/
00085 
00086 function mandel2() {
00087   $b = " .:,;!/>)|&IH%*#";
00088   //float r, i, z, Z, t, c, C;
00089   for ($y=30; printf("\n"), $C = $y*0.1 - 1.5, $y--;){
00090     for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){
00091       for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++)
00092         if ($z*$z + $Z*$Z > 500000) break;
00093       echo $b[$k%16];
00094     }
00095   }
00096 }
00097 
00098 /****/
00099 
00100 function Ack($m, $n){
00101   if($m == 0) return $n+1;
00102   if($n == 0) return Ack($m-1, 1);
00103   return Ack($m - 1, Ack($m, ($n - 1)));
00104 }
00105 
00106 function ackermann($n) {
00107   $r = Ack(3,$n);
00108   print "Ack(3,$n): $r\n";
00109 }
00110 
00111 /****/
00112 
00113 function ary($n) {
00114   for ($i=0; $i<$n; $i++) {
00115     $X[$i] = $i;
00116   }
00117   for ($i=$n-1; $i>=0; $i--) {
00118     $Y[$i] = $X[$i];
00119   }
00120   $last = $n-1;
00121   print "$Y[$last]\n";
00122 }
00123 
00124 /****/
00125 
00126 function ary2($n) {
00127   for ($i=0; $i<$n;) {
00128     $X[$i] = $i; ++$i;
00129     $X[$i] = $i; ++$i;
00130     $X[$i] = $i; ++$i;
00131     $X[$i] = $i; ++$i;
00132     $X[$i] = $i; ++$i;
00133 
00134     $X[$i] = $i; ++$i;
00135     $X[$i] = $i; ++$i;
00136     $X[$i] = $i; ++$i;
00137     $X[$i] = $i; ++$i;
00138     $X[$i] = $i; ++$i;
00139   }
00140   for ($i=$n-1; $i>=0;) {
00141     $Y[$i] = $X[$i]; --$i;
00142     $Y[$i] = $X[$i]; --$i;
00143     $Y[$i] = $X[$i]; --$i;
00144     $Y[$i] = $X[$i]; --$i;
00145     $Y[$i] = $X[$i]; --$i;
00146 
00147     $Y[$i] = $X[$i]; --$i;
00148     $Y[$i] = $X[$i]; --$i;
00149     $Y[$i] = $X[$i]; --$i;
00150     $Y[$i] = $X[$i]; --$i;
00151     $Y[$i] = $X[$i]; --$i;
00152   }
00153   $last = $n-1;
00154   print "$Y[$last]\n";
00155 }
00156 
00157 /****/
00158 
00159 function ary3($n) {
00160   for ($i=0; $i<$n; $i++) {
00161     $X[$i] = $i + 1;
00162     $Y[$i] = 0;
00163   }
00164   for ($k=0; $k<1000; $k++) {
00165     for ($i=$n-1; $i>=0; $i--) {
00166       $Y[$i] += $X[$i];
00167     }
00168   }
00169   $last = $n-1;
00170   print "$Y[0] $Y[$last]\n";
00171 }
00172 
00173 /****/
00174 
00175 function fibo_r($n){
00176     return(($n < 2) ? 1 : fibo_r($n - 2) + fibo_r($n - 1));
00177 }
00178 
00179 function fibo($n) {
00180   $r = fibo_r($n);
00181   print "$r\n";
00182 }
00183 
00184 /****/
00185 
00186 function hash1($n) {
00187   for ($i = 1; $i <= $n; $i++) {
00188     $X[dechex($i)] = $i;
00189   }
00190   $c = 0;
00191   for ($i = $n; $i > 0; $i--) {
00192     if ($X[dechex($i)]) { $c++; }
00193   }
00194   print "$c\n";
00195 }
00196 
00197 /****/
00198 
00199 function hash2($n) {
00200   for ($i = 0; $i < $n; $i++) {
00201     $hash1["foo_$i"] = $i;
00202     $hash2["foo_$i"] = 0;
00203   }
00204   for ($i = $n; $i > 0; $i--) {
00205     foreach($hash1 as $key => $value) $hash2[$key] += $value;
00206   }
00207   $first = "foo_0";
00208   $last  = "foo_".($n-1);
00209   print "$hash1[$first] $hash1[$last] $hash2[$first] $hash2[$last]\n";
00210 }
00211 
00212 /****/
00213 
00214 function gen_random ($n) {
00215     global $LAST;
00216     return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM );
00217 }
00218 
00219 function heapsort_r($n, &$ra) {
00220     $l = ($n >> 1) + 1;
00221     $ir = $n;
00222 
00223     while (1) {
00224        if ($l > 1) {
00225            $rra = $ra[--$l];
00226        } else {
00227            $rra = $ra[$ir];
00228            $ra[$ir] = $ra[1];
00229            if (--$ir == 1) {
00230               $ra[1] = $rra;
00231               return;
00232            }
00233        }
00234        $i = $l;
00235        $j = $l << 1;
00236        while ($j <= $ir) {
00237            if (($j < $ir) && ($ra[$j] < $ra[$j+1])) {
00238               $j++;
00239            }
00240            if ($rra < $ra[$j]) {
00241               $ra[$i] = $ra[$j];
00242               $j += ($i = $j);
00243            } else {
00244               $j = $ir + 1;
00245            }
00246        }
00247        $ra[$i] = $rra;
00248     }
00249 }
00250 
00251 function heapsort($N) {
00252   global $LAST;
00253 
00254   define("IM", 139968);
00255   define("IA", 3877);
00256   define("IC", 29573);
00257 
00258   $LAST = 42;
00259   for ($i=1; $i<=$N; $i++) {
00260     $ary[$i] = gen_random(1);
00261   }
00262   heapsort_r($N, $ary);
00263   printf("%.10f\n", $ary[$N]);
00264 }
00265 
00266 /****/
00267 
00268 function mkmatrix ($rows, $cols) {
00269     $count = 1;
00270     $mx = array();
00271     for ($i=0; $i<$rows; $i++) {
00272        for ($j=0; $j<$cols; $j++) {
00273            $mx[$i][$j] = $count++;
00274        }
00275     }
00276     return($mx);
00277 }
00278 
00279 function mmult ($rows, $cols, $m1, $m2) {
00280     $m3 = array();
00281     for ($i=0; $i<$rows; $i++) {
00282        for ($j=0; $j<$cols; $j++) {
00283            $x = 0;
00284            for ($k=0; $k<$cols; $k++) {
00285               $x += $m1[$i][$k] * $m2[$k][$j];
00286            }
00287            $m3[$i][$j] = $x;
00288        }
00289     }
00290     return($m3);
00291 }
00292 
00293 function matrix($n) {
00294   $SIZE = 30;
00295   $m1 = mkmatrix($SIZE, $SIZE);
00296   $m2 = mkmatrix($SIZE, $SIZE);
00297   while ($n--) {
00298     $mm = mmult($SIZE, $SIZE, $m1, $m2);
00299   }
00300   print "{$mm[0][0]} {$mm[2][3]} {$mm[3][2]} {$mm[4][4]}\n";
00301 }
00302 
00303 /****/
00304 
00305 function nestedloop($n) {
00306   $x = 0;
00307   for ($a=0; $a<$n; $a++)
00308     for ($b=0; $b<$n; $b++)
00309       for ($c=0; $c<$n; $c++)
00310         for ($d=0; $d<$n; $d++)
00311           for ($e=0; $e<$n; $e++)
00312             for ($f=0; $f<$n; $f++)
00313              $x++;
00314   print "$x\n";
00315 }
00316 
00317 /****/
00318 
00319 function sieve($n) {
00320   $count = 0;
00321   while ($n-- > 0) {
00322     $count = 0;
00323     $flags = range (0,8192);
00324     for ($i=2; $i<8193; $i++) {
00325       if ($flags[$i] > 0) {
00326         for ($k=$i+$i; $k <= 8192; $k+=$i) {
00327           $flags[$k] = 0;
00328         }
00329         $count++;
00330       }
00331     }
00332   }
00333   print "Count: $count\n";
00334 }
00335 
00336 /****/
00337 
00338 function strcat($n) {
00339   $str = "";
00340   while ($n-- > 0) {
00341     $str .= "hello\n";
00342   }
00343   $len = strlen($str);
00344   print "$len\n";
00345 }
00346 
00347 /*****/
00348 
00349 function getmicrotime()
00350 {
00351   $t = gettimeofday();
00352   return ($t['sec'] + $t['usec'] / 1000000);
00353 }
00354 
00355 function start_test()
00356 {
00357        ob_start();
00358   return getmicrotime();
00359 }
00360 
00361 function end_test($start, $name)
00362 {
00363   global $total;
00364   $end = getmicrotime();
00365   ob_end_clean();
00366   $total += $end-$start;
00367   $num = number_format($end-$start,3);
00368   $pad = str_repeat(" ", 24-strlen($name)-strlen($num));
00369 
00370   echo $name.$pad.$num."\n";
00371        ob_start();
00372   return getmicrotime();
00373 }
00374 
00375 function total()
00376 {
00377   global $total;
00378   $pad = str_repeat("-", 24);
00379   echo $pad."\n";
00380   $num = number_format($total,3);
00381   $pad = str_repeat(" ", 24-strlen("Total")-strlen($num));
00382   echo "Total".$pad.$num."\n";
00383 }
00384 
00385 $t0 = $t = start_test();
00386 simple();
00387 $t = end_test($t, "simple");
00388 simplecall();
00389 $t = end_test($t, "simplecall");
00390 simpleucall();
00391 $t = end_test($t, "simpleucall");
00392 simpleudcall();
00393 $t = end_test($t, "simpleudcall");
00394 mandel();
00395 $t = end_test($t, "mandel");
00396 mandel2();
00397 $t = end_test($t, "mandel2");
00398 ackermann(7);
00399 $t = end_test($t, "ackermann(7)");
00400 ary(50000);
00401 $t = end_test($t, "ary(50000)");
00402 ary2(50000);
00403 $t = end_test($t, "ary2(50000)");
00404 ary3(2000);
00405 $t = end_test($t, "ary3(2000)");
00406 fibo(30);
00407 $t = end_test($t, "fibo(30)");
00408 hash1(50000);
00409 $t = end_test($t, "hash1(50000)");
00410 hash2(500);
00411 $t = end_test($t, "hash2(500)");
00412 heapsort(20000);
00413 $t = end_test($t, "heapsort(20000)");
00414 matrix(20);
00415 $t = end_test($t, "matrix(20)");
00416 nestedloop(12);
00417 $t = end_test($t, "nestedloop(12)");
00418 sieve(30);
00419 $t = end_test($t, "sieve(30)");
00420 strcat(200000);
00421 $t = end_test($t, "strcat(200000)");
00422 total($t0, "Total");
00423 ?>