function FullScores($ratios) { $score = array(); foreach ($ratios as $k => $s) { // calculate GeometricMean just to use for sort $score[$k] = array(GeometricMean($s), Percentiles($s)); } uasort($score, 'CompareGeometricMean'); $labels = array(); $stats = array(); foreach ($score as $k => $test) { $labels[] = $k; $gm[] = $test[0]; $stats[] = $test[1]; } return array($labels, $gm, $stats); }
function FullScores($SLangs, $ratios) { $score = array(); foreach ($ratios as $k => $s) { $score[$k] = Percentiles($s); } uasort($score, 'CompareMedian'); $labels = array(); $stats = array(); $allowed = array(); $count = 0; $max = 15; foreach ($score as $k => $test) { if (isset($SLangs[$k])) { $labels[] = $k; $stats[] = $test; $allowed[$k] = 1; $count++; } if ($count == $max) { break; } } return array($score, $labels, $stats, $allowed); }
function HeadToHeadData($FileName, $Tests, $Langs, $Incl, $Excl, $L1, $L2, $HasHeading = TRUE) { $measurements = array(); $lines = file($FileName); $prefixL1 = ',' . $L1 . ','; $prefixL2 = ',' . $L2 . ','; $rowsL1 = array(); $rowsL2 = array(); foreach ($lines as $line) { $isLang1 = strpos($line, $prefixL1); if ($isLang1 || strpos($line, $prefixL2)) { $row = explode(',', $line); $test = $row[DATA_TEST]; // do we need to check $test here? // if (isset($Incl[$test])){ if (isset($previous) && $previous != $test) { // assume ndata.csv is sorted by test AccumulateComparableRows(BestRows($rowsL1), BestRows($rowsL2), $measurements); $rowsL1 = array(); $rowsL2 = array(); } $previous = $test; $key = $test . $row[DATA_LANG] . $row[DATA_ID]; settype($row[DATA_ID], 'integer'); // $L1 and $L2 have already been checked if (!isset($Excl[$key])) { settype($row[DATA_STATUS], 'integer'); settype($row[DATA_TESTVALUE], 'integer'); settype($row[DATA_TIME], 'double'); settype($row[DATA_GZ], 'double'); settype($row[DATA_MEMORY], 'double'); if ($isLang1) { $rowsL1[] = $row; } else { $rowsL2[] = $row; } } // } } } AccumulateComparableRows(BestRows($rowsL1), BestRows($rowsL2), $measurements); // collect values for chart and stats $ratios = array(); $times = array(); $mismatches = array(); foreach ($measurements as $v) { $test = $v[0][DATA_TEST]; if ($test != NULL && $Tests[$test][TEST_WEIGHT] <= 0 || $v[DATA_TIME] == NO_VALUE) { continue; } $ratios[] = $v[DATA_TIME]; // Too many confuse default memory use with program memory use if ($test == 'binarytrees' || $test == 'regexdna' || $test == 'revcomp' || $test == 'knucleotide') { $ratios[] = $v[DATA_MEMORY]; } else { $ratios[] = 0.0; } $ratios[] = $v[DATA_GZ]; $times[] = $v[DATA_TIME]; $mismatches[$test] = isMulticore($v[0][DATA_LOAD]) != isMulticore($v[1][DATA_LOAD]); } // sort by x times faster uasort($measurements, 'CompareTimeRatio'); $sorted = array(); foreach ($measurements as $rows) { $test = isset($rows[0]) ? $rows[0][DATA_TEST] : $rows[1][DATA_TEST]; $sorted[$test] = $rows; } foreach ($Tests as $k => $v) { if (!isset($sorted[$k])) { $sorted[$k] = array(); } } $stats = Percentiles($times); return array($sorted, $ratios, $stats, $mismatches); }