Formatted Metadata API
Use the Formatted Metadata API to attach formatted string data to tasks with efficient string formatting capabilities. This API extends the basic Metadata API by providing printf-style formatting functionality.
The Formatted Metadata API is a per-thread function that works in the resumed profiling state only.
API Functions
To add formatted metadata to the current task, use the following primitive:
void __itt_formatted_metadata_add(const __itt_domain *domain,
__itt_string_handle *format_handle,
...);
To add formatted metadata to an overlapped task, use the following primitive:
void __itt_formatted_metadata_add_overlapped(const __itt_domain *domain,
__itt_id taskid,
__itt_string_handle *format_handle,
...);
Parameters of the primitive:
Type |
Parameter |
Description |
|---|---|---|
[in] |
__itt_domain* domain
|
Metadata domain |
[in] |
__itt_id taskid
|
Task ID (required for overlapped variant only) |
[in] |
__itt_string_handle*
format_handle
|
String handle containing the format string with printf-style format specifiers |
[in] |
...
|
Variable arguments corresponding to format specifiers in the format string |
Metadata Visualization and Analysis
Formatted metadata provides several benefits for visualization and analysis in Intel® VTune™ Profiler:
Timeline tooltips: Metadata appears in tooltips when hovering over tasks in the timeline view, providing contextual runtime information.
Bottom-up view grouping: Formatted metadata can be used as a grouping criteria in the bottom-up view, allowing you to organize and analyze tasks based on their metadata values.
Custom grouping: Users can group tasks by their metadata values to identify patterns and performance characteristics across different execution contexts.
Square bracket notation for format specifiers: When you include format specifiers in square brackets (e.g.,
[%s]) within your format string, VTune treats these as special grouping identifiers.
Usage Guidelines
Supported format specifiers:
%s,%ls,%d,%u,%hd,%hu,%ld,%lu,%lld,%llu,%f,%lfRegular tasks: Use
__itt_formatted_metadata_addfor metadata associated with the currently running taskOverlapped tasks: Use
__itt_formatted_metadata_add_overlappedwith a specific task ID for overlapped task instancesLimit to one metadata call per task - making multiple calls to
__itt_formatted_metadata_addfor the same task may result in incorrect processingFor optimal performance, limit the frequency and size of metadata additions
Format specifiers in square brackets (e.g.,
[%s]) create additional grouping options in VTune analysis viewsFunction arguments are processed during the API calls
Maximum length of a string argument is 256 symbols
Usage Example
#include "ittnotify.h"
__itt_domain* domain = __itt_domain_create("FileProcessor");
__itt_string_handle* operation_format = __itt_string_handle_create("Operation: [%s] on file %s");
__itt_string_handle* performance_format = __itt_string_handle_create("Performance: %d bytes in %.2f ms");
void process_file(const char* filename) {
__itt_task_begin(domain, __itt_null, __itt_null, __itt_string_handle_create("process_file"));
__itt_formatted_metadata_add(domain, operation_format, "file_processing", filename);
__itt_task_begin(domain, __itt_null, __itt_null, __itt_string_handle_create("read_file"));
int bytes_read = 1024;
double read_time = 15.5;
__itt_formatted_metadata_add(domain, performance_format, bytes_read, read_time);
__itt_task_end(domain);
__itt_task_begin(domain, __itt_null, __itt_null, __itt_string_handle_create("transform_data"));
__itt_formatted_metadata_add(domain, operation_format, "data_transform", filename);
__itt_task_end(domain);
__itt_task_end(domain);
}
int main() {
process_file("document.txt");
process_file("image.jpg");
return 0;
}