Files
rocm-systems/rocclr/runtime/device/gpu/gpucounters.hpp
T

124 baris
3.9 KiB
C++
Mentah Pandangan Normal Riwayat

2014-07-04 16:17:05 -04:00
//
// Copyright (c) 2009 Advanced Micro Devices, Inc. All rights reserved.
//
#ifndef GPUCOUNTERS_HPP_
#define GPUCOUNTERS_HPP_
#include "top.hpp"
#include "device/device.hpp"
#include "device/gpu/gpudevice.hpp"
namespace gpu {
class VirtualGPU;
class CalCounterReference : public amd::ReferenceCountedObject {
public:
//! Default constructor
CalCounterReference(VirtualGPU& gpu, //!< Virtual GPU device object
gslQueryObject gslCounter)
: gpu_(gpu), counter_(gslCounter), results_(NULL) {}
//! Get CAL counter
gslQueryObject gslCounter() const { return counter_; }
//! Returns the virtual GPU device
const VirtualGPU& gpu() const { return gpu_; }
//! Increases the results array for this CAL counter(container)
bool growResultArray(uint maxIndex //!< the maximum HW counter index in the CAL counter
);
//! Returns the CAL counter results
uint64_t* results() const { return results_; }
protected:
//! Default destructor
~CalCounterReference();
private:
//! Disable copy constructor
CalCounterReference(const CalCounterReference&);
//! Disable operator=
CalCounterReference& operator=(const CalCounterReference&);
VirtualGPU& gpu_; //!< The virtual GPU device object
gslQueryObject counter_; //!< GSL object counter
uint64_t* results_; //!< CAL counter results
2014-07-04 16:17:05 -04:00
};
//! Performance counter implementation on GPU
class PerfCounter : public device::PerfCounter {
public:
//! The performance counter info
struct Info : public amd::EmbeddedObject {
uint blockIndex_; //!< Index of the block to configure
uint counterIndex_; //!< Index of the hardware counter
uint eventIndex_; //!< Event you wish to count with the counter
};
//! The PerfCounter flags
enum Flags { BeginIssued = 0x00000001, EndIssued = 0x00000002, ResultReady = 0x00000004 };
//! Constructor for the GPU PerfCounter object
PerfCounter(const Device& device, //!< A GPU device object
const VirtualGPU& gpu, //!< Virtual GPU device object
cl_uint blockIndex, //!< HW block index
cl_uint counterIndex, //!< Counter index within the block
cl_uint eventIndex) //!< Event index for profiling
: gpuDevice_(device),
gpu_(gpu),
calRef_(NULL),
flags_(0),
counter_(0),
index_(0) {
info_.blockIndex_ = blockIndex;
info_.counterIndex_ = counterIndex;
info_.eventIndex_ = eventIndex;
}
//! Destructor for the GPU PerfCounter object
virtual ~PerfCounter();
//! Creates the current object
bool create(CalCounterReference* calRef //!< Reference counter
);
//! Returns the specific information about the counter
uint64_t getInfo(uint64_t infoType //!< The type of returned information
) const;
//! Returns the GPU device, associated with the current object
const Device& dev() const { return gpuDevice_; }
//! Returns the virtual GPU device
const VirtualGPU& gpu() const { return gpu_; }
//! Returns the CAL performance counter descriptor
const Info* info() const { return &info_; }
//! Returns the Info structure for performance counter
gslQueryObject gslCounter() const { return counter_; }
private:
//! Disable default copy constructor
PerfCounter(const PerfCounter&);
//! Disable default operator=
PerfCounter& operator=(const PerfCounter&);
const Device& gpuDevice_; //!< The backend device
const VirtualGPU& gpu_; //!< The virtual GPU device object
CalCounterReference* calRef_; //!< Reference counter
uint flags_; //!< The perfcounter object state
Info info_; //!< The info structure for perfcounter
gslQueryObject counter_; //!< GSL counter object
uint index_; //!< Counter index in the CAL container
2014-07-04 16:17:05 -04:00
};
} // namespace gpu
2014-07-04 16:17:05 -04:00
#endif // GPUCOUNTERS_HPP_