Skip to content
Snippets Groups Projects
PyWrapDeviceStats.cpp 1.74 KiB
Newer Older
#include "PyWrapCommand.h"

#include "../Cuda/CWrappers.h"
#include "../Cuda/CudaDeviceStats.h"


const char PyWrapDeviceStats::docString[] = "DeviceStatsArray = HIP.DeviceStats()\n\n"\
	"This will return the statistics of each Cuda capable device installed.\n"\
	"\tDeviceStatsArray -- this is an array of structs, one struct per device.\n"\
	"The struct has these fields: name, major, minor, constMem, sharedMem, totalMem, tccDriver, mpCount, threadsPerMP, warpSize, maxThreads.\n";


PyObject* PyWrapDeviceStats::execute(PyObject* self, PyObject* args)
{
	if ( !PyArg_ParseTuple(args, "") )
		return nullptr;

	DevStats* devStats;
	int numDevices = deviceStats(&devStats);

	PyObject* py_stats = PyList_New(numDevices);
	for ( int device = 0; device<numDevices; ++device )
	{
		DevStats& dev = devStats[device];

		PyObject* dict = PyDict_New();
		PyDict_SetItemString(dict, "name", PyStr_FromString(dev.name.c_str()));
		PyDict_SetItemString(dict, "major", PyLong_FromLong(dev.major));
		PyDict_SetItemString(dict, "minor", PyLong_FromLong(dev.minor));
		PyDict_SetItemString(dict, "constMem", PyLong_FromUnsignedLongLong(dev.constMem));
		PyDict_SetItemString(dict, "sharedMem", PyLong_FromUnsignedLongLong(dev.sharedMem));
		PyDict_SetItemString(dict, "totalMem", PyLong_FromUnsignedLongLong(dev.totalMem));
		PyDict_SetItemString(dict, "tccDriver", PyBool_FromLong(dev.tccDriver));
		PyDict_SetItemString(dict, "mpCount", PyLong_FromLong(dev.mpCount));
		PyDict_SetItemString(dict, "threadsPerMP", PyLong_FromLong(dev.threadsPerMP));
		PyDict_SetItemString(dict, "warpSize", PyLong_FromLong(dev.warpSize));
		PyDict_SetItemString(dict, "maxThreads", PyLong_FromLong(dev.maxThreads));

		PyList_SetItem(py_stats, device, dict);
	}

	delete[] devStats;

	return py_stats;
}