24.09., 9:00 - 11:00: Due to updates GitLab will be unavailable for some minutes between 09:00 and 11:00.

nvmlSensorBase.h 2.98 KB
Newer Older
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
//================================================================================
// Name        : nvmlSensorBase.h
// Author      : Weronika Filinger, EPCC @ The University of Edinburgh
// Contact     :
// Copyright   : 
// Description : Sensor base class for nvml plugin.
//================================================================================

//================================================================================
// This file is part of DCDB (DataCenter DataBase)
// Copyright (C) 2019 Leibniz Supercomputing Centre
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
//================================================================================

/**
 * @defgroup nvml nvml plugin
 * @ingroup  pusherplugins
 *
32
 * Collect data from the nvml interface.e
33 34 35 36 37 38 39
 */

#ifndef NVML_NVMLSENSORBASE_H_
#define NVML_NVMLSENSORBASE_H_

#include "sensorbase.h"

40 41 42
enum GPU_FEATURE {
	GPU_ENERGY              = 0,
	GPU_POWER               = 1,
Weronika's avatar
Weronika committed
43
	GPU_TEMP		= 2,
44
};
45 46

/**
47 48
 * @brief 
 *
49 50 51 52
 *
 * @ingroup nvml
 */
class nvmlSensorBase : public SensorBase {
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
	public:
		nvmlSensorBase(const std::string& name) :
			SensorBase(name), _featureType(static_cast<GPU_FEATURE>(999)) {
			}

		nvmlSensorBase(const nvmlSensorBase &other)
			: SensorBase(other),
			_featureType(other._featureType) {}


		virtual ~nvmlSensorBase() {}

		int getFeatureType() const {
			return _featureType;
		}

		void setFeatureType(int featureType){
			_featureType = static_cast<GPU_FEATURE>(featureType);

		} 


		nvmlSensorBase& operator=(const nvmlSensorBase& other) {
			SensorBase::operator=(other);
			_featureType = other._featureType;

			return *this;
		}

		/*
		 * TODO
		 * Getters and Setters for plugin specific attributes
		 */




		void printConfig(LOG_LEVEL ll, LOGGER& lg, unsigned leadingSpaces=16) {
			/*
			 * TODO
			 * Log attributes here for debug reasons
			 */

			std::string leading(leadingSpaces, ' ');
			std::string feature("unknown");
			switch (_featureType) {
				case GPU_ENERGY:
					feature = "GPU_ENERGY";
					break;
				case GPU_POWER:
					feature = "GPU_POWER";
					break;
Weronika's avatar
Weronika committed
105 106 107
				case GPU_TEMP:
					feature = "GPU_TEMP";
					break;
108 109 110 111 112 113 114 115 116 117
			}  
			LOG_VAR(ll) << leading << "    Feature type:  " << feature;    
		}

	protected:
		GPU_FEATURE _featureType;
		/*
		 * TODO
		 * Add plugin specific attributes here
		 */
118 119 120 121

};

#endif /* NVML_NVMLSENSORBASE_H_ */