summaryrefslogtreecommitdiff
path: root/src/Run.h
blob: 810c2e8bea14a0697e697d24a761e5918441eeae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*******************************************************************************
 * Copyright (c) 2006 International Business Machines Corporation.             *
 * All rights reserved. This program and the accompanying materials            *
 * are made available under the terms of the Common Public License v1.0        *
 * which accompanies this distribution, and is available at                    *
 * http://www.opensource.org/licenses/cpl1.0.php                               *
 *                                                                             *
 * Contributors:                                                               *
 *    Douglas M. Pase - initial API and implementation                         *
 *******************************************************************************/


#if !defined(Run_h)
#define Run_h

#include "Thread.h"

#include "Lock.h"
#include "Chain.h"
#include "Types.h"
#include "Experiment.h"
#include "SpinBarrier.h"

class Run: public Thread {
public:
    Run();
    ~Run();
    int run();
    void set( Experiment &e, SpinBarrier* sbp );

    static int64  ops_per_chain() { return _ops_per_chain; }
    static double seconds()       { return _seconds; }

private:
    Experiment*  exp;			// experiment data
    SpinBarrier* bp;			// spin barrier used by all threads

    void mem_check( Chain *m );
    Chain* random_mem_init( Chain *m );
    Chain* forward_mem_init( Chain *m );
    Chain* reverse_mem_init( Chain *m );
    Chain* stream_mem_init( Chain *m );

    static Lock   global_mutex;		// global lock
    static int64  _ops_per_chain;	// total number of operations per chain
    static double _seconds;		// total number of seconds
};


#endif