Hello Query Device C++ Sample

This sample demonstrates how to execute an query OpenVINO™ Runtime devices, prints their metrics and default configuration values, using Properties API.

Options

Values

Supported devices

All

Other language realization

Python

The following C++ API is used in the application:

Feature

API

Description

Available Devices

ov::Core::get_available_devices, ov::Core::get_property

Get available devices information and configuration for inference

Basic OpenVINO™ Runtime API is covered by Hello Classification C++ sample.

// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//

#include <cstdlib>
#include <iomanip>
#include <memory>
#include <set>
#include <string>
#include <tuple>
#include <vector>

// clang-format off
#include "openvino/openvino.hpp"
#include "samples/common.hpp"
#include "samples/slog.hpp"
// clang-format on

/**
 * @brief Print IE Parameters
 * @param reference on IE Parameter
 * @return void
 */
void print_any_value(const ov::Any& value) {
    if (value.empty()) {
        slog::info << "EMPTY VALUE" << slog::endl;
    } else {
        std::string stringValue = value.as<std::string>();
        slog::info << (stringValue.empty() ? "\"\"" : stringValue) << slog::endl;
    }
}

int main(int argc, char* argv[]) {
    try {
        // -------- Get OpenVINO runtime version --------
        slog::info << ov::get_openvino_version() << slog::endl;

        // -------- Parsing and validation of input arguments --------
        if (argc != 1) {
            std::cout << "Usage : " << argv[0] << std::endl;
            return EXIT_FAILURE;
        }

        // -------- Step 1. Initialize OpenVINO Runtime Core --------
        ov::Core core;

        // -------- Step 2. Get list of available devices --------
        std::vector<std::string> availableDevices = core.get_available_devices();

        // -------- Step 3. Query and print supported metrics and config keys --------
        slog::info << "Available devices: " << slog::endl;
        for (auto&& device : availableDevices) {
            slog::info << device << slog::endl;

            // Query supported properties and print all of them
            slog::info << "\tSUPPORTED_PROPERTIES: " << slog::endl;
            auto supported_properties = core.get_property(device, ov::supported_properties);
            for (auto&& property : supported_properties) {
                if (property != ov::supported_properties.name()) {
                    slog::info << "\t\t" << (property.is_mutable() ? "Mutable: " : "Immutable: ") << property << " : "
                               << slog::flush;
                    print_any_value(core.get_property(device, property));
                }
            }

            slog::info << slog::endl;
        }
    } catch (const std::exception& ex) {
        std::cerr << std::endl << "Exception occurred: " << ex.what() << std::endl << std::flush;
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

How It Works

The sample queries all available OpenVINO™ Runtime devices, prints their supported metrics and plugin configuration parameters.

Building

To build the sample, please use instructions available at Build the Sample Applications section in OpenVINO™ Toolkit Samples guide.

Running

To see quired information, run the following:

hello_query_device

Sample Output

The application prints all available devices with their supported metrics and default values for configuration parameters:

[ INFO ] OpenVINO Runtime version ......... <version>
[ INFO ] Build ........... <build>
[ INFO ]
[ INFO ] Available devices:
[ INFO ] CPU
[ INFO ]        SUPPORTED_METRICS:
[ INFO ]                AVAILABLE_DEVICES : [  ]
[ INFO ]                FULL_DEVICE_NAME : Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz
[ INFO ]                OPTIMIZATION_CAPABILITIES : [ FP32 FP16 INT8 BIN ]
[ INFO ]                RANGE_FOR_ASYNC_INFER_REQUESTS : { 1, 1, 1 }
[ INFO ]                RANGE_FOR_STREAMS : { 1, 8 }
[ INFO ]                IMPORT_EXPORT_SUPPORT : true
[ INFO ]        SUPPORTED_CONFIG_KEYS (default values):
[ INFO ]                CACHE_DIR : ""
[ INFO ]                CPU_BIND_THREAD : NO
[ INFO ]                CPU_THREADS_NUM : 0
[ INFO ]                CPU_THROUGHPUT_STREAMS : 1
[ INFO ]                DUMP_EXEC_GRAPH_AS_DOT : ""
[ INFO ]                DYN_BATCH_ENABLED : NO
[ INFO ]                DYN_BATCH_LIMIT : 0
[ INFO ]                ENFORCE_BF16 : NO
[ INFO ]                EXCLUSIVE_ASYNC_REQUESTS : NO
[ INFO ]                PERFORMANCE_HINT : ""
[ INFO ]                PERFORMANCE_HINT_NUM_REQUESTS : 0
[ INFO ]                PERF_COUNT : NO
[ INFO ]
[ INFO ] GNA
[ INFO ]        SUPPORTED_METRICS:
[ INFO ]                AVAILABLE_DEVICES : [ GNA_SW_EXACT ]
[ INFO ]                OPTIMAL_NUMBER_OF_INFER_REQUESTS : 1
[ INFO ]                FULL_DEVICE_NAME : GNA_SW_EXACT
[ INFO ]                GNA_LIBRARY_FULL_VERSION : 3.0.0.1455
[ INFO ]                IMPORT_EXPORT_SUPPORT : true
[ INFO ]        SUPPORTED_CONFIG_KEYS (default values):
[ INFO ]                EXCLUSIVE_ASYNC_REQUESTS : NO
[ INFO ]                GNA_COMPACT_MODE : YES
[ INFO ]                GNA_COMPILE_TARGET : ""
[ INFO ]                GNA_DEVICE_MODE : GNA_SW_EXACT
[ INFO ]                GNA_EXEC_TARGET : ""
[ INFO ]                GNA_FIRMWARE_MODEL_IMAGE : ""
[ INFO ]                GNA_FIRMWARE_MODEL_IMAGE_GENERATION : ""
[ INFO ]                GNA_LIB_N_THREADS : 1
[ INFO ]                GNA_PRECISION : I16
[ INFO ]                GNA_PWL_MAX_ERROR_PERCENT : 1.000000
[ INFO ]                GNA_PWL_UNIFORM_DESIGN : NO
[ INFO ]                GNA_SCALE_FACTOR : 1.000000
[ INFO ]                GNA_SCALE_FACTOR_0 : 1.000000
[ INFO ]                LOG_LEVEL : LOG_NONE
[ INFO ]                PERF_COUNT : NO
[ INFO ]                SINGLE_THREAD : YES