/home/users/khuck/src/hpx-lsu/hpx/util/apex.hpp

Line% of fetchesSource
1  
//  Copyright (c) 2007-2016 Hartmut Kaiser
2  
//
3  
//  Distributed under the Boost Software License, Version 1.0. (See accompanying
4  
//  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5  
6  
#pragma once // prevent multiple inclusions of this header file.
7  
8  
#include <hpx/config.hpp>
9  
#include <hpx/runtime/get_locality_id.hpp>
10  
#include <hpx/util/thread_description.hpp>
11  
#include <hpx/runtime/get_num_localities.hpp>
12  
#include <hpx/runtime/startup_function.hpp>
13  
14  
#ifdef HPX_HAVE_APEX
15  
#include "apex_api.hpp"
16  
#endif
17  
18  
namespace hpx { namespace util
19  
{
20  
#ifdef HPX_HAVE_APEX
21  
    static void hpx_util_apex_init_startup(void)
22  
    {
23  
        apex::init(nullptr, hpx::get_locality_id(),
24  
            hpx::get_initial_num_localities());
25  
    }
26  
27  
    inline void apex_init()
28  
    {
29  
        hpx_util_apex_init_startup();
30  
        //hpx::register_pre_startup_function(&hpx_util_apex_init_startup);
31  
    }
32  
33  
    inline void apex_finalize()
34  
    {
35  
        apex::finalize();
36  
    }
37  
38  
    struct apex_wrapper
39  
    {
40  
        apex_wrapper(thread_description const& name)
41  
          : name_(name), stopped(false), profiler_(nullptr)
42  
        {
43  
            if (name_.kind() == thread_description::data_type_description)
44  
            {
45  
                profiler_ = apex::start(name_.get_description());
46  
            }
47  
            else
48  
            {
49  
                profiler_ = apex::start(
50  
                    apex_function_address(name_.get_address()));
51  
            }
52  
        }
53  
        ~apex_wrapper()
54  
        {
55  
            stop();
56  
        }
57  
58  
        void stop() {
59  
            if(!stopped) {
60  
                stopped = true;
61  
                apex::stop(profiler_);
62  
            }
63  
        }
64  
65  
        void yield() {
66  
            if(!stopped) {
67  
                stopped = true;
68  
                apex::yield(profiler_);
69  
            }
70  
        }
71  
72  
        thread_description name_;
73  
        bool stopped;
74  
        apex::profiler * profiler_;
75  
    };
76  
77  
    struct apex_wrapper_init
78  
    {
79  
        apex_wrapper_init(int argc, char **argv)
80  
        {
81  
            //apex::init(nullptr, hpx::get_locality_id(),
82  
            //    hpx::get_initial_num_localities());
83  
            hpx::register_pre_startup_function(&hpx_util_apex_init_startup);
84  
        }
85  
        ~apex_wrapper_init()
86  
        {
87  
            apex::finalize();
88  
        }
89  
    };
90  
#else
91  
    inline void apex_init() {}
92  
    inline void apex_finalize() {}
93  
94  
    struct apex_wrapper
95  
    {
96  
        apex_wrapper(thread_description const& name) {}
97  
        ~apex_wrapper() {}
98  
    };
99  
100  
    struct apex_wrapper_init
101  
    {
102  
        apex_wrapper_init(int argc, char **argv) {}
103  
        ~apex_wrapper_init() {}
104  
    };
105  
#endif
106  
}}
107  
108  

Copyright (c) 2006-2012 Rogue Wave Software, Inc. All Rights Reserved.
Patents pending.