1 /*
2 * Copyright (c) 2019-2021, The OSKAR Developers.
3 * See the LICENSE file at the top-level directory of this distribution.
4 */
5
6 #include "log/oskar_log.h"
7 #include "settings/oskar_option_parser.h"
8 #include "utility/oskar_device.h"
9 #include "utility/oskar_get_error_string.h"
10 #include "utility/oskar_version_string.h"
11
12 #include <cstdlib>
13
main(int argc,char ** argv)14 int main(int argc, char** argv)
15 {
16 oskar::OptionParser opt("oskar_system_info", oskar_version_string());
17 opt.set_description("Display information about compute devices "
18 "on the system");
19 if (!opt.check_options(argc, argv)) return EXIT_FAILURE;
20 oskar_Log* log = 0;
21 oskar_log_set_term_priority(log, OSKAR_LOG_STATUS);
22
23 oskar_Device** devices = 0;
24 int error = 0, num_devices = 0, platform = 0;
25 oskar_device_set_require_double_precision(0);
26
27 // Log relevant environment variables.
28 oskar_log_section(log, 'M', "Environment variables");
29 oskar_log_value(log, 'M', 1, "OSKAR_PLATFORM",
30 "%s", getenv("OSKAR_PLATFORM"));
31 oskar_log_value(log, 'M', 1, "OSKAR_CL_DEVICE_VENDOR",
32 "%s", getenv("OSKAR_CL_DEVICE_VENDOR"));
33 oskar_log_value(log, 'M', 1, "OSKAR_CL_DEVICE_TYPE",
34 "%s", getenv("OSKAR_CL_DEVICE_TYPE"));
35
36 // Create CUDA device information list.
37 oskar_device_count("CUDA", &platform);
38 devices = oskar_device_create_list(platform, &num_devices);
39 oskar_device_check_error_cuda(&error);
40 oskar_log_section(log, 'M', "CUDA devices (%d)", num_devices);
41 if (error)
42 {
43 oskar_log_error(log, "Could not determine CUDA device information (%s)",
44 oskar_get_error_string(error));
45 }
46 for (int i = 0; i < num_devices; ++i)
47 {
48 oskar_device_log_details(devices[i], log);
49 oskar_device_free(devices[i]);
50 }
51 free(devices);
52
53 // Create OpenCL device information list.
54 oskar_device_count("OpenCL", &platform);
55 devices = oskar_device_create_list(platform, &num_devices);
56 oskar_log_section(log, 'M', "OpenCL devices (%d)", num_devices);
57 for (int i = 0; i < num_devices; ++i)
58 {
59 oskar_device_log_details(devices[i], log);
60 oskar_device_free(devices[i]);
61 }
62 free(devices);
63
64 return error ? EXIT_FAILURE : EXIT_SUCCESS;
65 }
66