/mobile Handheld Friendly website

 performance measurements

Each table row shows performance measurements for this C++ g++ program with a particular command-line input value N.

 N  CPU secs Elapsed secs Memory KB Code B ≈ CPU Load
12Make Error  892   

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.

 notes

gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8)

 binary-trees C++ g++ #6 program source code

/* The Computer Language Benchmarks Game
 * http://benchmarksgame.alioth.debian.org/
 *
 * contributed by Jon Harrop
 * modified by Alex Mizrahi
 * modified by Andreas Schäfer
 * very minor omp tweak by The Anh Tran
 */

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>

#include <boost/pool/object_pool.hpp>


const size_t	LINE_SIZE = 64;


struct Node 
{
    Node *l, *r;
    int i;
    
    Node(int i2) : l(0), r(0), i(i2) 
    {}
    Node(Node *l2, int i2, Node *r2) : l(l2), r(r2), i(i2) 
    {}

    int check() const 
    {
        if (l)
            return l->check() + i - r->check();
        else return i;
    }
};

typedef boost::object_pool<Node> NodePool;


Node *make(int i, int d, NodePool &store) 
{
    if (d > 0) 
	    return store.construct(	make(2*i-1, d-1, store), 
	    						i, 
	    						make(2*i, d-1, store)	);
   	return store.construct(i);
}

int GetThreadCount()
{
	cpu_set_t cs;
	CPU_ZERO(&cs);
	sched_getaffinity(0, sizeof(cs), &cs);

	int count = 0;
	for (int i = 0; i < 8; i++)
	{
		if (CPU_ISSET(i, &cs))
			count++;
	}
	return count;
}

int main(int argc, char *argv[]) 
{
    int min_depth = 4;
    int max_depth = std::max(min_depth+2,
                             (argc == 2 ? atoi(argv[1]) : 10));
    int stretch_depth = max_depth+1;

	// Alloc then dealloc stretchdepth tree
    {
        NodePool store;
        Node *c = make(0, stretch_depth, store);
        std::cout << "stretch tree of depth " << stretch_depth << "\t "
                  << "check: " << c->check() << std::endl;
    }

    NodePool long_lived_store;
    Node *long_lived_tree = make(0, max_depth, long_lived_store);

	// buffer to store output of each thread
	char *outputstr = (char*)malloc(LINE_SIZE * (max_depth +1) * sizeof(char));

	#pragma omp parallel for default(shared) num_threads(GetThreadCount()) schedule(dynamic, 1)
    for (int d = min_depth; d <= max_depth; d += 2) 
    {
        int iterations = 1 << (max_depth - d + min_depth);
        int c = 0;

        for (int i = 1; i <= iterations; ++i) 
        {
            NodePool store;
            Node *a = make(i, d, store), *b = make(-i, d, store);
            c += a->check() + b->check();
        }

		// each thread write to separate location
		sprintf(outputstr + LINE_SIZE * d, "%d\t trees of depth %d\t check: %d\n", (2 * iterations), d, c);
	}

	// print all results
	for (int d = min_depth; d <= max_depth; d += 2) 
		printf("%s", outputstr + (d * LINE_SIZE) );
	free(outputstr);

    std::cout << "long lived tree of depth " << max_depth << "\t "
              << "check: " << (long_lived_tree->check()) << "\n";

    return 0;
}

 make, command-line, and program output logs

Mon, 28 Oct 2013 22:02:14 GMT

MAKE:
/usr/bin/g++ -c -pipe -O3 -fomit-frame-pointer -march=native  -fopenmp binarytrees.gpp-6.c++ -o binarytrees.gpp-6.c++.o &&  \
        /usr/bin/g++ binarytrees.gpp-6.c++.o -o binarytrees.gpp-6.gpp_run -fopenmp 
binarytrees.gpp-6.c++.o: In function `_GLOBAL__sub_I__Z4makeiiRN5boost11object_poolI4NodeNS_33default_user_allocator_new_deleteEEE':
binarytrees.gpp-6.c++:(.text.startup+0x2ac): undefined reference to `boost::system::generic_category()'
binarytrees.gpp-6.c++:(.text.startup+0x2b6): undefined reference to `boost::system::generic_category()'
binarytrees.gpp-6.c++:(.text.startup+0x2c0): undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status
make: [binarytrees.gpp-6.gpp_run] Error 1 (ignored)
rm binarytrees.gpp-6.c++
1.46s to complete and log all make actions

COMMAND LINE:
./binarytrees.gpp-6.gpp_run 12

MAKE ERROR 

Revised BSD license

  Home   Conclusions   License   Play