Skip to content

Instantly share code, notes, and snippets.

@rybakit
Last active May 25, 2016 07:11
Show Gist options
  • Save rybakit/43a8857c19ea6834ceea77fd383337c3 to your computer and use it in GitHub Desktop.
Save rybakit/43a8857c19ea6834ceea77fd383337c3 to your computer and use it in GitHub Desktop.
empty_loop 0.076
unpack_i16 2.097 2.021
ord_i16 0.925 0.849
unpack_u16 2.051 1.975
ord_u16 0.740 0.664
------------------------
Total 5.889
php -v
PHP 7.0.5 (cli) (built: Apr 23 2016 10:48:01) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
<?php
function unpack_i16($n, $buffer) {
for ($i = 0; $i < $n; ++$i) {
$num = \unpack('n', $buffer[0].$buffer[1])[1];
}
}
function ord_i16($n, $buffer) {
for ($i = 0; $i < $n; ++$i) {
$hi = \ord($buffer[0]);
$lo = \ord($buffer[1]);
if ($hi & 128) {
$num = - (0x010000 - (($hi << 8) | $lo));
continue;
}
$num = $hi << 8 | $lo;
}
}
function unpack_u16($n, $buffer) {
for ($i = 0; $i < $n; ++$i) {
$num = \unpack('s', $buffer[1].$buffer[0])[1];
}
}
function ord_u16($n, $buffer) {
for ($i = 0; $i < $n; ++$i) {
$hi = \ord($buffer[0]);
$lo = \ord($buffer[1]);
$num = $hi << 8 | $lo;
}
}
function empty_loop($n) {
for ($i = 0; $i < $n; ++$i) {
}
}
function getmicrotime()
{
$t = gettimeofday();
return ($t['sec'] + $t['usec'] / 1000000);
}
function start_test()
{
ob_start();
return getmicrotime();
}
function end_test($start, $name, $overhead = null)
{
global $total;
global $last_time;
$end = getmicrotime();
ob_end_clean();
$last_time = $end-$start;
$total += $last_time;
$num = number_format($last_time,3);
$pad = str_repeat(" ", 24-strlen($name)-strlen($num));
if (is_null($overhead)) {
echo $name.$pad.$num."\n";
} else {
$num2 = number_format($last_time - $overhead,3);
echo $name.$pad.$num." ".$num2."\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";
}
const N = 9000000;
const BUFFER = "\xff\x7f";
$t0 = $t = start_test();
empty_loop(N);
$t = end_test($t, 'empty_loop');
$overhead = $last_time;
unpack_i16(N, BUFFER);
$t = end_test($t, 'unpack_i16', $overhead);
ord_i16(N, BUFFER);
$t = end_test($t, 'ord_i16', $overhead);
unpack_u16(N, BUFFER);
$t = end_test($t, 'unpack_u16', $overhead);
ord_u16(N, BUFFER);
$t = end_test($t, 'ord_u16', $overhead);
total();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment