Download samples/extensions/src/profilerhost_util/Eval.cpp from MNghia/soft_gripper_envs: direct link, hf CLI and curl.
- Browser
- Download file 15.3 kB
-
https://huggingface.co/MNghia/soft_gripper_envs/resolve/main/samples/extensions/src/profilerhost_util/Eval.cpp
- Command line
-
hf download hf://MNghia/soft_gripper_envs/samples/extensions/src/profilerhost_util/Eval.cpp
-
curl -L -o Eval.cpp https://huggingface.co/MNghia/soft_gripper_envs/resolve/main/samples/extensions/src/profilerhost_util/Eval.cpp
15.3 kB
| namespace NV { | |
| namespace Metric { | |
| namespace Eval { | |
| std::string GetHwUnit(const std::string& metricName) | |
| { | |
| return metricName.substr(0, metricName.find("__", 0)); | |
| } | |
| bool GetMetricGpuValue( std::string chipName, | |
| const std::vector<uint8_t>& counterDataImage, | |
| const std::vector<std::string>& metricNames, | |
| std::vector<MetricNameValue>& metricNameValueMap, | |
| const uint8_t* pCounterAvailabilityImage) | |
| { | |
| if (!counterDataImage.size()) | |
| { | |
| std::cout << "Counter Data Image is empty!\n"; | |
| return false; | |
| } | |
| NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize_Params calculateScratchBufferSizeParam = {NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize_Params_STRUCT_SIZE}; | |
| calculateScratchBufferSizeParam.pChipName = chipName.c_str(); | |
| calculateScratchBufferSizeParam.pCounterAvailabilityImage = pCounterAvailabilityImage; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize(&calculateScratchBufferSizeParam)); | |
| std::vector<uint8_t> scratchBuffer(calculateScratchBufferSizeParam.scratchBufferSize); | |
| NVPW_CUDA_MetricsEvaluator_Initialize_Params metricEvaluatorInitializeParams = {NVPW_CUDA_MetricsEvaluator_Initialize_Params_STRUCT_SIZE}; | |
| metricEvaluatorInitializeParams.scratchBufferSize = scratchBuffer.size(); | |
| metricEvaluatorInitializeParams.pScratchBuffer = scratchBuffer.data(); | |
| metricEvaluatorInitializeParams.pChipName = chipName.c_str(); | |
| metricEvaluatorInitializeParams.pCounterAvailabilityImage = pCounterAvailabilityImage; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CUDA_MetricsEvaluator_Initialize(&metricEvaluatorInitializeParams)); | |
| NVPW_MetricsEvaluator* metricEvaluator = metricEvaluatorInitializeParams.pMetricsEvaluator; | |
| NVPW_CounterData_GetNumRanges_Params getNumRangesParams = { NVPW_CounterData_GetNumRanges_Params_STRUCT_SIZE }; | |
| getNumRangesParams.pCounterDataImage = counterDataImage.data(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CounterData_GetNumRanges(&getNumRangesParams)); | |
| bool isolated = true; | |
| bool keepInstances = true; | |
| for (size_t metricIndex = 0; metricIndex < metricNames.size(); ++metricIndex) | |
| { | |
| std::string reqName; | |
| NV::Metric::Parser::ParseMetricNameString(metricNames[metricIndex], &reqName, &isolated, &keepInstances); | |
| NVPW_MetricEvalRequest metricEvalRequest; | |
| NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest_Params convertMetricToEvalRequest = {NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest_Params_STRUCT_SIZE}; | |
| convertMetricToEvalRequest.pMetricsEvaluator = metricEvaluator; | |
| convertMetricToEvalRequest.pMetricName = reqName.c_str(); | |
| convertMetricToEvalRequest.pMetricEvalRequest = &metricEvalRequest; | |
| convertMetricToEvalRequest.metricEvalRequestStructSize = NVPW_MetricEvalRequest_STRUCT_SIZE; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest(&convertMetricToEvalRequest)); | |
| MetricNameValue metricNameValue; | |
| metricNameValue.numRanges = getNumRangesParams.numRanges; | |
| metricNameValue.metricName = metricNames[metricIndex]; | |
| for (size_t rangeIndex = 0; rangeIndex < getNumRangesParams.numRanges; ++rangeIndex) | |
| { | |
| NVPW_Profiler_CounterData_GetRangeDescriptions_Params getRangeDescParams = { NVPW_Profiler_CounterData_GetRangeDescriptions_Params_STRUCT_SIZE }; | |
| getRangeDescParams.pCounterDataImage = counterDataImage.data(); | |
| getRangeDescParams.rangeIndex = rangeIndex; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_Profiler_CounterData_GetRangeDescriptions(&getRangeDescParams)); | |
| std::vector<const char*> descriptionPtrs(getRangeDescParams.numDescriptions); | |
| getRangeDescParams.ppDescriptions = descriptionPtrs.data(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_Profiler_CounterData_GetRangeDescriptions(&getRangeDescParams)); | |
| std::string rangeName; | |
| for (size_t descriptionIndex = 0; descriptionIndex < getRangeDescParams.numDescriptions; ++descriptionIndex) | |
| { | |
| if (descriptionIndex) | |
| { | |
| rangeName += "/"; | |
| } | |
| rangeName += descriptionPtrs[descriptionIndex]; | |
| } | |
| NVPW_MetricsEvaluator_SetDeviceAttributes_Params setDeviceAttribParams = { NVPW_MetricsEvaluator_SetDeviceAttributes_Params_STRUCT_SIZE }; | |
| setDeviceAttribParams.pMetricsEvaluator = metricEvaluator; | |
| setDeviceAttribParams.pCounterDataImage = counterDataImage.data(); | |
| setDeviceAttribParams.counterDataImageSize = counterDataImage.size(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_SetDeviceAttributes(&setDeviceAttribParams)); | |
| double metricValue = 0.0; | |
| NVPW_MetricsEvaluator_EvaluateToGpuValues_Params evaluateToGpuValuesParams = { NVPW_MetricsEvaluator_EvaluateToGpuValues_Params_STRUCT_SIZE }; | |
| evaluateToGpuValuesParams.pMetricsEvaluator = metricEvaluator; | |
| evaluateToGpuValuesParams.pMetricEvalRequests = &metricEvalRequest; | |
| evaluateToGpuValuesParams.numMetricEvalRequests = 1; | |
| evaluateToGpuValuesParams.metricEvalRequestStructSize = NVPW_MetricEvalRequest_STRUCT_SIZE; | |
| evaluateToGpuValuesParams.metricEvalRequestStrideSize = sizeof(NVPW_MetricEvalRequest); | |
| evaluateToGpuValuesParams.pCounterDataImage = counterDataImage.data(); | |
| evaluateToGpuValuesParams.counterDataImageSize = counterDataImage.size(); | |
| evaluateToGpuValuesParams.rangeIndex = rangeIndex; | |
| evaluateToGpuValuesParams.isolated = true; | |
| evaluateToGpuValuesParams.pMetricValues = &metricValue; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_EvaluateToGpuValues(&evaluateToGpuValuesParams)); | |
| metricNameValue.rangeNameMetricValueMap.push_back(std::make_pair(rangeName, metricValue)); | |
| } | |
| metricNameValueMap.push_back(metricNameValue); | |
| } | |
| NVPW_MetricsEvaluator_Destroy_Params metricEvaluatorDestroyParams = { NVPW_MetricsEvaluator_Destroy_Params_STRUCT_SIZE }; | |
| metricEvaluatorDestroyParams.pMetricsEvaluator = metricEvaluator; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_Destroy(&metricEvaluatorDestroyParams)); | |
| return true; | |
| } | |
| bool PrintMetricValues( std::string chipName, | |
| const std::vector<uint8_t>& counterDataImage, | |
| const std::vector<std::string>& metricNames, | |
| const uint8_t* pCounterAvailabilityImage) | |
| { | |
| if (!counterDataImage.size()) | |
| { | |
| std::cout << "Counter Data Image is empty!\n"; | |
| return false; | |
| } | |
| NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize_Params calculateScratchBufferSizeParam = {NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize_Params_STRUCT_SIZE}; | |
| calculateScratchBufferSizeParam.pChipName = chipName.c_str(); | |
| calculateScratchBufferSizeParam.pCounterAvailabilityImage = pCounterAvailabilityImage; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CUDA_MetricsEvaluator_CalculateScratchBufferSize(&calculateScratchBufferSizeParam)); | |
| std::vector<uint8_t> scratchBuffer(calculateScratchBufferSizeParam.scratchBufferSize); | |
| NVPW_CUDA_MetricsEvaluator_Initialize_Params metricEvaluatorInitializeParams = {NVPW_CUDA_MetricsEvaluator_Initialize_Params_STRUCT_SIZE}; | |
| metricEvaluatorInitializeParams.scratchBufferSize = scratchBuffer.size(); | |
| metricEvaluatorInitializeParams.pScratchBuffer = scratchBuffer.data(); | |
| metricEvaluatorInitializeParams.pChipName = chipName.c_str(); | |
| metricEvaluatorInitializeParams.pCounterAvailabilityImage = pCounterAvailabilityImage; | |
| metricEvaluatorInitializeParams.pCounterDataImage = counterDataImage.data(); | |
| metricEvaluatorInitializeParams.counterDataImageSize = counterDataImage.size(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CUDA_MetricsEvaluator_Initialize(&metricEvaluatorInitializeParams)); | |
| NVPW_MetricsEvaluator* metricEvaluator = metricEvaluatorInitializeParams.pMetricsEvaluator; | |
| NVPW_CounterData_GetNumRanges_Params getNumRangesParams = { NVPW_CounterData_GetNumRanges_Params_STRUCT_SIZE }; | |
| getNumRangesParams.pCounterDataImage = counterDataImage.data(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_CounterData_GetNumRanges(&getNumRangesParams)); | |
| std::cout << "\n" << std::setw(40) << std::left << "Range Name" | |
| << std::setw(100) << std::left << "Metric Name" | |
| << "Metric Value" << std::endl; | |
| std::cout << std::setfill('-') << std::setw(160) << "" << std::setfill(' ') << std::endl; | |
| std::string reqName; | |
| bool isolated = true; | |
| bool keepInstances = true; | |
| for (std::string metricName : metricNames) | |
| { | |
| NV::Metric::Parser::ParseMetricNameString(metricName, &reqName, &isolated, &keepInstances); | |
| NVPW_MetricEvalRequest metricEvalRequest; | |
| NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest_Params convertMetricToEvalRequest = {NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest_Params_STRUCT_SIZE}; | |
| convertMetricToEvalRequest.pMetricsEvaluator = metricEvaluator; | |
| convertMetricToEvalRequest.pMetricName = reqName.c_str(); | |
| convertMetricToEvalRequest.pMetricEvalRequest = &metricEvalRequest; | |
| convertMetricToEvalRequest.metricEvalRequestStructSize = NVPW_MetricEvalRequest_STRUCT_SIZE; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_ConvertMetricNameToMetricEvalRequest(&convertMetricToEvalRequest)); | |
| for (size_t rangeIndex = 0; rangeIndex < getNumRangesParams.numRanges; ++rangeIndex) | |
| { | |
| NVPW_Profiler_CounterData_GetRangeDescriptions_Params getRangeDescParams = { NVPW_Profiler_CounterData_GetRangeDescriptions_Params_STRUCT_SIZE }; | |
| getRangeDescParams.pCounterDataImage = counterDataImage.data(); | |
| getRangeDescParams.rangeIndex = rangeIndex; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_Profiler_CounterData_GetRangeDescriptions(&getRangeDescParams)); | |
| std::vector<const char*> descriptionPtrs(getRangeDescParams.numDescriptions); | |
| getRangeDescParams.ppDescriptions = descriptionPtrs.data(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_Profiler_CounterData_GetRangeDescriptions(&getRangeDescParams)); | |
| std::string rangeName; | |
| for (size_t descriptionIndex = 0; descriptionIndex < getRangeDescParams.numDescriptions; ++descriptionIndex) | |
| { | |
| if (descriptionIndex) | |
| { | |
| rangeName += "/"; | |
| } | |
| rangeName += descriptionPtrs[descriptionIndex]; | |
| } | |
| NVPW_MetricsEvaluator_SetDeviceAttributes_Params setDeviceAttribParams = { NVPW_MetricsEvaluator_SetDeviceAttributes_Params_STRUCT_SIZE }; | |
| setDeviceAttribParams.pMetricsEvaluator = metricEvaluator; | |
| setDeviceAttribParams.pCounterDataImage = counterDataImage.data(); | |
| setDeviceAttribParams.counterDataImageSize = counterDataImage.size(); | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_SetDeviceAttributes(&setDeviceAttribParams)); | |
| double metricValue; | |
| NVPW_MetricsEvaluator_EvaluateToGpuValues_Params evaluateToGpuValuesParams = { NVPW_MetricsEvaluator_EvaluateToGpuValues_Params_STRUCT_SIZE }; | |
| evaluateToGpuValuesParams.pMetricsEvaluator = metricEvaluator; | |
| evaluateToGpuValuesParams.pMetricEvalRequests = &metricEvalRequest; | |
| evaluateToGpuValuesParams.numMetricEvalRequests = 1; | |
| evaluateToGpuValuesParams.metricEvalRequestStructSize = NVPW_MetricEvalRequest_STRUCT_SIZE; | |
| evaluateToGpuValuesParams.metricEvalRequestStrideSize = sizeof(NVPW_MetricEvalRequest); | |
| evaluateToGpuValuesParams.pCounterDataImage = counterDataImage.data(); | |
| evaluateToGpuValuesParams.counterDataImageSize = counterDataImage.size(); | |
| evaluateToGpuValuesParams.rangeIndex = rangeIndex; | |
| evaluateToGpuValuesParams.isolated = true; | |
| evaluateToGpuValuesParams.pMetricValues = &metricValue; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_EvaluateToGpuValues(&evaluateToGpuValuesParams)); | |
| std::cout << std::setw(40) << std::left << rangeName << std::setw(100) | |
| << std::left << metricName << metricValue << std::endl; | |
| } | |
| } | |
| NVPW_MetricsEvaluator_Destroy_Params metricEvaluatorDestroyParams = { NVPW_MetricsEvaluator_Destroy_Params_STRUCT_SIZE }; | |
| metricEvaluatorDestroyParams.pMetricsEvaluator = metricEvaluator; | |
| RETURN_IF_NVPW_ERROR(false, NVPW_MetricsEvaluator_Destroy(&metricEvaluatorDestroyParams)); | |
| return true; | |
| } | |
| } | |
| } | |
| } | |