/mobile Handheld Friendly website
Ubuntu : Intel® Q6600® one core |
Each table row shows performance measurements for this C gcc program with a particular command-line input value N.
| N | CPU secs | Elapsed secs | Memory KB | Code B | ≈ CPU Load |
|---|---|---|---|---|---|
| 12 | 0.07 | 0.07 | ? | 706 | 11% 0% 13% 100% |
| 16 | 1.51 | 1.51 | 4,584 | 706 | 0% 0% 1% 100% |
| 20 | 32.84 | 32.86 | 66,096 | 706 | 0% 0% 0% 100% |
Read the ↓ make, command line, and program output logs to see how this program was run.
Read binary-trees benchmark to see what this program should do.
gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
/* The Computer Language Benchmarks Game * http://benchmarksgame.alioth.debian.org/ contributed by Kevin Carson compilation: gcc -O3 -fomit-frame-pointer -funroll-loops -static binary-trees.c -lm icc -O3 -ip -unroll -static binary-trees.c -lm */ #include <malloc.h> #include <math.h> #include <stdio.h> #include <stdlib.h> typedef struct tn { struct tn* left; struct tn* right; long item; } treeNode; treeNode* NewTreeNode(treeNode* left, treeNode* right, long item) { treeNode* new; new = (treeNode*)malloc(sizeof(treeNode)); new->left = left; new->right = right; new->item = item; return new; } /* NewTreeNode() */ long ItemCheck(treeNode* tree) { if (tree->left == NULL) return tree->item; else return tree->item + ItemCheck(tree->left) - ItemCheck(tree->right); } /* ItemCheck() */ treeNode* BottomUpTree(long item, unsigned depth) { if (depth > 0) return NewTreeNode ( BottomUpTree(2 * item - 1, depth - 1), BottomUpTree(2 * item, depth - 1), item ); else return NewTreeNode(NULL, NULL, item); } /* BottomUpTree() */ void DeleteTree(treeNode* tree) { if (tree->left != NULL) { DeleteTree(tree->left); DeleteTree(tree->right); } free(tree); } /* DeleteTree() */ int main(int argc, char* argv[]) { unsigned N, depth, minDepth, maxDepth, stretchDepth; treeNode *stretchTree, *longLivedTree, *tempTree; N = atol(argv[1]); minDepth = 4; if ((minDepth + 2) > N) maxDepth = minDepth + 2; else maxDepth = N; stretchDepth = maxDepth + 1; stretchTree = BottomUpTree(0, stretchDepth); printf ( "stretch tree of depth %u\t check: %li\n", stretchDepth, ItemCheck(stretchTree) ); DeleteTree(stretchTree); longLivedTree = BottomUpTree(0, maxDepth); for (depth = minDepth; depth <= maxDepth; depth += 2) { long i, iterations, check; iterations = pow(2, maxDepth - depth + minDepth); check = 0; for (i = 1; i <= iterations; i++) { tempTree = BottomUpTree(i, depth); check += ItemCheck(tempTree); DeleteTree(tempTree); tempTree = BottomUpTree(-i, depth); check += ItemCheck(tempTree); DeleteTree(tempTree); } /* for(i = 1...) */ printf ( "%li\t trees of depth %u\t check: %li\n", iterations * 2, depth, check ); } /* for(depth = minDepth...) */ printf ( "long lived tree of depth %u\t check: %li\n", maxDepth, ItemCheck(longLivedTree) ); return 0; } /* main() */
Sat, 27 Apr 2013 19:09:37 GMT MAKE: /usr/bin/gcc -pipe -Wall -O3 -fomit-frame-pointer -march=native -std=c99 -pthread binarytrees.c -o binarytrees.gcc_run -lm rm binarytrees.c 0.22s to complete and log all make actions COMMAND LINE: ./binarytrees.gcc_run 20 PROGRAM OUTPUT: stretch tree of depth 21 check: -1 2097152 trees of depth 4 check: -2097152 524288 trees of depth 6 check: -524288 131072 trees of depth 8 check: -131072 32768 trees of depth 10 check: -32768 8192 trees of depth 12 check: -8192 2048 trees of depth 14 check: -2048 512 trees of depth 16 check: -512 128 trees of depth 18 check: -128 32 trees of depth 20 check: -32 long lived tree of depth 20 check: -1