Add support for rocJPEG API tracing (#116)
- Add rocDecode API Tracing support using domain `rocjpeg_api` in ROCPROFSYS_ROCM_DOMAINS.
- Modify existing `videodecode` and `jpegdecode` ctests to verify API tracing
- Print Perfetto values for easy debugging in verbose mode
- Convert CMake error to a warning and skip building the "decode" examples if requirements are not found
[ROCm/rocprofiler-systems commit: 3bea1d8eac]
This commit is contained in:
@@ -65,6 +65,16 @@ if(EXISTS "${ROCmVersion_DIR}/share/rocjpeg/images")
|
||||
|
||||
file(GLOB_RECURSE image_files "${ROCmVersion_DIR}/share/rocjpeg/images/*")
|
||||
file(COPY ${image_files} DESTINATION ${CMAKE_BINARY_DIR}/images)
|
||||
set(NUM_COPIES 20)
|
||||
|
||||
# Loop over each file and make additional copies
|
||||
foreach(file ${image_files})
|
||||
get_filename_component(filename ${file} NAME)
|
||||
foreach(i RANGE 1 ${NUM_COPIES})
|
||||
file(COPY ${file}
|
||||
DESTINATION ${CMAKE_BINARY_DIR}/images/${filename}_copy${i}.jpg)
|
||||
endforeach()
|
||||
endforeach()
|
||||
else()
|
||||
message(
|
||||
AUTHOR_WARNING
|
||||
|
||||
@@ -49,7 +49,7 @@ function(videodecode_message _MSG_TYPE)
|
||||
endfunction()
|
||||
|
||||
# Find RocDecode
|
||||
find_package(rocDecode REQUIRED)
|
||||
find_package(rocDecode QUIET)
|
||||
if(NOT ROCDECODE_FOUND)
|
||||
videodecode_message(AUTHOR_WARNING "${PROJECT_NAME} skipped. Missing RocDecode...")
|
||||
return()
|
||||
|
||||
@@ -100,6 +100,8 @@ ROCPROFSYS_DEFINE_CATEGORY(category, rocm_scratch_memory, ROCPROFSYS_CATEGORY_RO
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_page_migration, ROCPROFSYS_CATEGORY_ROCM_PAGE_MIGRATION, "rocm_page_migration", "ROCm memory page migration")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_counter_collection, ROCPROFSYS_CATEGORY_ROCM_COUNTER_COLLECTION, "rocm_counter_collection", "ROCm device counter collection")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_marker_api, ROCPROFSYS_CATEGORY_ROCM_MARKER_API, "rocm_marker_api", "ROCTx labels")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_rocdecode_api, ROCPROFSYS_CATEGORY_ROCM_ROCDECODE_API, "rocm_rocdecode_api", "ROCm RocDecode API")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_rocjpeg_api, ROCPROFSYS_CATEGORY_ROCM_ROCJPEG_API, "rocm_rocjpeg_api", "ROCm RocJPEG API")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi, ROCPROFSYS_CATEGORY_ROCM_SMI, "rocm_smi", "rocm-smi data")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_busy, ROCPROFSYS_CATEGORY_ROCM_SMI_BUSY, "device_busy", "Busy percentage of a GPU device")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_temp, ROCPROFSYS_CATEGORY_ROCM_SMI_TEMP, "device_temp", "Temperature of a GPU device")
|
||||
@@ -107,7 +109,6 @@ ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_power, ROCPROFSYS_CATEGORY_ROCM_SM
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_memory_usage, ROCPROFSYS_CATEGORY_ROCM_SMI_MEMORY_USAGE, "device_memory_usage", "Memory usage of a GPU device")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_vcn_activity, ROCPROFSYS_CATEGORY_ROCM_SMI_VCN_ACTIVITY, "device_vcn_activity", "VCN Activity of a GPU device")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_smi_jpeg_activity, ROCPROFSYS_CATEGORY_ROCM_SMI_JPEG_ACTIVITY, "device_jpeg_activity", "JPEG Activity of a GPU device")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_rocdecode_api, ROCPROFSYS_CATEGORY_ROCM_ROCDECODE_API, "rocm_rocdecode_api", "ROCm ROCDecode API")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, rocm_rccl, ROCPROFSYS_CATEGORY_ROCM_RCCL, "rccl", "ROCm Communication Collectives Library (RCCL) regions")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, pthread, ROCPROFSYS_CATEGORY_PTHREAD, "pthread", "POSIX threading functions")
|
||||
ROCPROFSYS_DEFINE_CATEGORY(category, kokkos, ROCPROFSYS_CATEGORY_KOKKOS, "kokkos", "KokkosTools regions")
|
||||
@@ -166,6 +167,8 @@ using name = perfetto_category<Tp...>;
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_page_migration), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_counter_collection), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_marker_api), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_rocdecode_api), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_rocjpeg_api), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_busy), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_temp), \
|
||||
@@ -173,7 +176,6 @@ using name = perfetto_category<Tp...>;
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_memory_usage), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_vcn_activity), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_smi_jpeg_activity), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_rocdecode_api), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::rocm_rccl), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::pthread), \
|
||||
ROCPROFSYS_PERFETTO_CATEGORY(category::kokkos), \
|
||||
|
||||
@@ -1885,7 +1885,9 @@ get_use_vaapi_tracing()
|
||||
std::string domains = static_cast<tim::tsettings<std::string>&>(*_v->second).get();
|
||||
auto domain_list = tim::delimit(domains, " ,;:\t\n");
|
||||
return std::find(domain_list.begin(), domain_list.end(), "rocdecode_api") !=
|
||||
domain_list.end();
|
||||
domain_list.end() ||
|
||||
std::find(domain_list.begin(), domain_list.end(), "rocjpeg_api") !=
|
||||
domain_list.end(); // Check rocdecode_api or rocjpeg_api is present
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
|
||||
@@ -360,9 +360,10 @@ get_callback_domains()
|
||||
ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_CODE_OBJECT,
|
||||
# if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 6) || \
|
||||
# if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 7) || \
|
||||
ROCPROFILER_VERSION_MAJOR >= 1
|
||||
ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API,
|
||||
# endif
|
||||
};
|
||||
|
||||
@@ -406,13 +407,6 @@ get_callback_domains()
|
||||
{
|
||||
_data.emplace(ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API);
|
||||
}
|
||||
# if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 6) || \
|
||||
ROCPROFILER_VERSION_MAJOR >= 1
|
||||
else if(itr == "rocdecode_api")
|
||||
{
|
||||
_data.emplace(ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API);
|
||||
}
|
||||
# endif
|
||||
else
|
||||
{
|
||||
for(size_t idx = 0; idx < callback_tracing_info.size(); ++idx)
|
||||
|
||||
+2
-1
@@ -52,12 +52,13 @@ extern "C"
|
||||
ROCPROFSYS_CATEGORY_ROCM_PAGE_MIGRATION,
|
||||
ROCPROFSYS_CATEGORY_ROCM_COUNTER_COLLECTION,
|
||||
ROCPROFSYS_CATEGORY_ROCM_MARKER_API,
|
||||
ROCPROFSYS_CATEGORY_ROCM_ROCDECODE_API,
|
||||
ROCPROFSYS_CATEGORY_ROCM_ROCJPEG_API,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_BUSY,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_TEMP,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_POWER,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_MEMORY_USAGE,
|
||||
ROCPROFSYS_CATEGORY_ROCM_ROCDECODE_API,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_VCN_ACTIVITY,
|
||||
ROCPROFSYS_CATEGORY_ROCM_SMI_JPEG_ACTIVITY,
|
||||
ROCPROFSYS_CATEGORY_ROCM_RCCL,
|
||||
|
||||
@@ -497,7 +497,7 @@ tool_tracing_callback(rocprofiler_callback_tracing_record_t record,
|
||||
user_data, ts);
|
||||
break;
|
||||
}
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 6) || \
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 7) || \
|
||||
ROCPROFILER_VERSION_MAJOR >= 1
|
||||
case ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API:
|
||||
{
|
||||
@@ -505,6 +505,12 @@ tool_tracing_callback(rocprofiler_callback_tracing_record_t record,
|
||||
user_data, ts);
|
||||
break;
|
||||
}
|
||||
case ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API:
|
||||
{
|
||||
tool_tracing_callback_start(category::rocm_rocjpeg_api{}, record,
|
||||
user_data, ts);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case ROCPROFILER_CALLBACK_TRACING_NONE:
|
||||
case ROCPROFILER_CALLBACK_TRACING_LAST:
|
||||
@@ -576,7 +582,7 @@ tool_tracing_callback(rocprofiler_callback_tracing_record_t record,
|
||||
ts, _bt_data);
|
||||
break;
|
||||
}
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 6) || \
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 7) || \
|
||||
ROCPROFILER_VERSION_MAJOR >= 1
|
||||
case ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API:
|
||||
{
|
||||
@@ -584,6 +590,12 @@ tool_tracing_callback(rocprofiler_callback_tracing_record_t record,
|
||||
user_data, ts, _bt_data);
|
||||
break;
|
||||
}
|
||||
case ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API:
|
||||
{
|
||||
tool_tracing_callback_stop(category::rocm_rocjpeg_api{}, record,
|
||||
user_data, ts, _bt_data);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case ROCPROFILER_CALLBACK_TRACING_NONE:
|
||||
case ROCPROFILER_CALLBACK_TRACING_LAST:
|
||||
@@ -1016,9 +1028,10 @@ tool_init(rocprofiler_client_finalize_t fini_func, void* user_data)
|
||||
ROCPROFILER_CALLBACK_TRACING_HSA_FINALIZE_EXT_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_HIP_RUNTIME_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_HIP_COMPILER_API,
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 6) || \
|
||||
#if(ROCPROFILER_VERSION_MAJOR == 0 && ROCPROFILER_VERSION_MINOR >= 7) || \
|
||||
ROCPROFILER_VERSION_MAJOR >= 1
|
||||
ROCPROFILER_CALLBACK_TRACING_ROCDECODE_API,
|
||||
ROCPROFILER_CALLBACK_TRACING_ROCJPEG_API,
|
||||
#endif
|
||||
ROCPROFILER_CALLBACK_TRACING_MARKER_CORE_API
|
||||
})
|
||||
|
||||
@@ -4,10 +4,15 @@
|
||||
#
|
||||
# -------------------------------------------------------------------------------------- #
|
||||
|
||||
set(_decode_environment
|
||||
set(_video_decode_environment
|
||||
"${_base_environment}"
|
||||
"ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,kernel_dispatch,memory_copy,rocdecode_api"
|
||||
"ROCPROFSYS_ROCM_SMI_METRICS=busy,temp,power,vcn_activity,jpeg_activity,mem_usage"
|
||||
"ROCPROFSYS_ROCM_SMI_METRICS=busy,temp,power,vcn_activity,mem_usage"
|
||||
"ROCPROFSYS_SAMPLING_CPUS=none")
|
||||
set(_jpeg_decode_environment
|
||||
"${_base_environment}"
|
||||
"ROCPROFSYS_ROCM_DOMAINS=hip_runtime_api,kernel_dispatch,memory_copy,rocjpeg_api"
|
||||
"ROCPROFSYS_ROCM_SMI_METRICS=busy,temp,power,jpeg_activity,mem_usage"
|
||||
"ROCPROFSYS_SAMPLING_CPUS=none")
|
||||
|
||||
rocprofiler_systems_add_test(
|
||||
@@ -15,7 +20,7 @@ rocprofiler_systems_add_test(
|
||||
NAME video-decode
|
||||
TARGET videodecode
|
||||
GPU ON
|
||||
ENVIRONMENT "${_decode_environment}"
|
||||
ENVIRONMENT "${_video_decode_environment}"
|
||||
RUN_ARGS -i ${PROJECT_BINARY_DIR}/videos -t 1
|
||||
LABELS "decode")
|
||||
|
||||
@@ -24,26 +29,42 @@ rocprofiler_systems_add_validation_test(
|
||||
PERFETTO_METRIC "rocm_rocdecode_api"
|
||||
PERFETTO_FILE "perfetto-trace.proto"
|
||||
LABELS "decode"
|
||||
ARGS -l rocDecCreateVideoParser -c 2 -d 1 --counter-names "VCN Activity")
|
||||
ARGS -l
|
||||
rocDecCreateVideoParser
|
||||
-c
|
||||
2
|
||||
-d
|
||||
1
|
||||
--counter-names
|
||||
"VCN Activity"
|
||||
-p)
|
||||
|
||||
# -------------------------------------------------------------------------------------- #
|
||||
#
|
||||
# image decode tests
|
||||
# jpeg decode tests
|
||||
#
|
||||
# -------------------------------------------------------------------------------------- #
|
||||
|
||||
rocprofiler_systems_add_test(
|
||||
SKIP_BASELINE SKIP_RUNTIME SKIP_REWRITE
|
||||
NAME image-decode
|
||||
NAME jpeg-decode
|
||||
TARGET jpegdecode
|
||||
GPU ON
|
||||
ENVIRONMENT "${_decode_environment}"
|
||||
ENVIRONMENT "${_jpeg_decode_environment}"
|
||||
RUN_ARGS -i ${PROJECT_BINARY_DIR}/images -b 32
|
||||
LABELS "decode")
|
||||
|
||||
rocprofiler_systems_add_validation_test(
|
||||
NAME image-decode-sampling
|
||||
PERFETTO_METRIC "host"
|
||||
NAME jpeg-decode-sampling
|
||||
PERFETTO_METRIC "rocm_rocjpeg_api"
|
||||
PERFETTO_FILE "perfetto-trace.proto"
|
||||
LABELS "decode"
|
||||
ARGS -l jpegdecode -c 1 -d 0 --counter-names "JPEG Activity")
|
||||
ARGS -l
|
||||
rocJpegCreate
|
||||
-c
|
||||
1
|
||||
-d
|
||||
1
|
||||
--counter-names
|
||||
"JPEG Activity"
|
||||
-p)
|
||||
|
||||
@@ -191,6 +191,8 @@ if __name__ == "__main__":
|
||||
total_value = 0
|
||||
for row in sum_counter_values:
|
||||
total_value = row.total_value if row.total_value is not None else -1
|
||||
if args.print:
|
||||
print(f"Total value of {counter_name} is {total_value}")
|
||||
if total_value <= 0:
|
||||
ret = 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user