0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-27 11:18:51 +02:00

ircd:🆑 Add interface for plat/dev info dump w/ console cmd.

This commit is contained in:
Jason Volk 2021-05-01 14:29:38 -07:00
parent 8233cf1db3
commit d0c9a16770
3 changed files with 68 additions and 6 deletions

View file

@ -35,6 +35,10 @@ namespace ircd::cl
string_view reflect_error(const int code) noexcept;
void log_dev_info(const uint platform_id, const uint device_id);
void log_dev_info(const uint platform_id);
void log_dev_info();
void flush();
void sync();
}

View file

@ -21,7 +21,6 @@ namespace ircd::cl
template<class T = string_view, class F, class id0, class id1, class param> static T info(F&&, const id0 &, const id1 &, const param &, const mutable_buffer &);
static uint query_warp_size(cl_context, cl_device_id);
static void dump_device_info(const uint i, const uint j);
}
// Runtime state
@ -234,9 +233,7 @@ ircd::cl::init::init()
throw_on_error(err);
// Dump device details to infolog
for(size_t i(0); i < platforms; ++i)
for(size_t j(0); j < devices[i]; ++j)
dump_device_info(i, j);
log_dev_info();
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
@ -306,9 +303,35 @@ noexcept
}
void
ircd::cl::dump_device_info(const uint i,
const uint j)
ircd::cl::log_dev_info()
{
for(size_t i(0); i < platforms; ++i)
log_dev_info(i);
}
void
ircd::cl::log_dev_info(const uint i)
{
if(unlikely(i >= PLATFORM_MAX))
throw std::out_of_range
{
"Invalid platform identifier."
};
for(size_t j(0); j < devices[i]; ++j)
log_dev_info(i, j);
}
void
ircd::cl::log_dev_info(const uint i,
const uint j)
{
if(unlikely(i >= PLATFORM_MAX || j >= DEVICE_MAX))
throw std::out_of_range
{
"Invalid platform or device identifier."
};
const auto &dev
{
device[i][j]

View file

@ -17298,6 +17298,41 @@ console_cmd__app__signal(opt &out, const string_view &line)
return true;
}
//
// cl
//
bool
console_cmd__cl__info(opt &out, const string_view &line)
{
const params param{line, " ",
{
"platform", "device",
}};
const int platform
{
param.at("platform", -1)
};
const int device
{
param.at("device", -1)
};
if(platform >= 0 && device >= 0)
cl::log_dev_info(platform, device);
else if(platform >= 0)
cl::log_dev_info(platform);
else
cl::log_dev_info();
out
<< "OpenCL information written to logger."
<< std::endl;
return true;
}
//
// gpt
//