aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsabella Gottardi <isabella.gottardi@arm.com>2020-03-11 18:04:20 +0000
committerIsabella Gottardi <isabella.gottardi@arm.com>2020-03-19 18:25:33 +0000
commita0687eef149fbf57bb6db0621ec65724f550b1ed (patch)
treeb11b19403f5e4117eecf315072375a5d3ea84647
parentea54a01f6bd30f013cbe88ae1751985bc86b6af5 (diff)
downloadarmnn-a0687eef149fbf57bb6db0621ec65724f550b1ed.tar.gz
MLECO-755: ArmNN: Add file format external profiling option
* Added new m_FileFormat variable in ExternalProfilingOptions * Added new profiling option to ExecuteNetwork * Added check for file format in ProfilingConnectionFactory * Added test in profiling tests Change-Id: I0e9cb8ecac919dc0ed03dcf77324a65621f07ae7 Signed-off-by: Isabella Gottardi <isabella.gottardi@arm.com>
-rw-r--r--include/armnn/IRuntime.hpp2
-rw-r--r--src/profiling/ProfilingConnectionFactory.cpp6
-rw-r--r--src/profiling/test/ProfilingTests.cpp37
-rw-r--r--tests/ExecuteNetwork/ExecuteNetwork.cpp15
4 files changed, 55 insertions, 5 deletions
diff --git a/include/armnn/IRuntime.hpp b/include/armnn/IRuntime.hpp
index 712355bb3a..8391ed3b15 100644
--- a/include/armnn/IRuntime.hpp
+++ b/include/armnn/IRuntime.hpp
@@ -65,6 +65,7 @@ public:
, m_IncomingCaptureFile("")
, m_FileOnly(false)
, m_CapturePeriod(LOWEST_CAPTURE_PERIOD)
+ , m_FileFormat("binary")
{}
bool m_EnableProfiling;
@@ -72,6 +73,7 @@ public:
std::string m_IncomingCaptureFile;
bool m_FileOnly;
uint32_t m_CapturePeriod;
+ std::string m_FileFormat;
};
ExternalProfilingOptions m_ProfilingOptions;
diff --git a/src/profiling/ProfilingConnectionFactory.cpp b/src/profiling/ProfilingConnectionFactory.cpp
index 4af81a024e..1d264def57 100644
--- a/src/profiling/ProfilingConnectionFactory.cpp
+++ b/src/profiling/ProfilingConnectionFactory.cpp
@@ -18,6 +18,12 @@ namespace profiling
std::unique_ptr<IProfilingConnection> ProfilingConnectionFactory::GetProfilingConnection(
const Runtime::CreationOptions::ExternalProfilingOptions& options) const
{
+ // Before proceed to create the IProfilingConnection, check if the file format is supported
+ if (!(options.m_FileFormat == "binary"))
+ {
+ throw armnn::UnimplementedException("Unsupported profiling file format, only binary is supported");
+ }
+
// We can create 3 different types of IProfilingConnection.
// 1: If no relevant options are specified then a SocketProfilingConnection is returned.
// 2: If both incoming and outgoing capture files are specified then a SocketProfilingConnection decorated by a
diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp
index 29c5299bd3..a631cb2356 100644
--- a/src/profiling/test/ProfilingTests.cpp
+++ b/src/profiling/test/ProfilingTests.cpp
@@ -3448,4 +3448,41 @@ BOOST_AUTO_TEST_CASE(CheckRegisterCounters)
BOOST_TEST(93 == readValue);
}
+BOOST_AUTO_TEST_CASE(CheckFileFormat) {
+ // Locally reduce log level to "Warning", as this test needs to parse a warning message from the standard output
+ LogLevelSwapper logLevelSwapper(armnn::LogSeverity::Warning);
+
+ // Create profiling options.
+ armnn::Runtime::CreationOptions::ExternalProfilingOptions options;
+ options.m_EnableProfiling = true;
+ // Check the default value set to binary
+ BOOST_CHECK(options.m_FileFormat == "binary");
+
+ // Change file format to an unsupported value
+ options.m_FileFormat = "json";
+ // Enable the profiling service
+ armnn::profiling::ProfilingService profilingService;
+ profilingService.ResetExternalProfilingOptions(options, true);
+ // Start the command handler and the send thread
+ profilingService.Update();
+ BOOST_CHECK(profilingService.GetCurrentState()==ProfilingState::NotConnected);
+
+ // Redirect the output to a local stream so that we can parse the warning message
+ std::stringstream ss;
+ StreamRedirector streamRedirector(std::cout, ss.rdbuf());
+
+ // When Update is called and the current state is ProfilingState::NotConnected
+ // an exception will be raised from GetProfilingConnection and displayed as warning in the output local stream
+ profilingService.Update();
+
+ streamRedirector.CancelRedirect();
+
+ // Check that the expected error has occurred and logged to the standard output
+ if (!boost::contains(ss.str(), "Unsupported profiling file format, only binary is supported"))
+ {
+ std::cout << ss.str();
+ BOOST_FAIL("Expected string not found.");
+ }
+}
+
BOOST_AUTO_TEST_SUITE_END()
diff --git a/tests/ExecuteNetwork/ExecuteNetwork.cpp b/tests/ExecuteNetwork/ExecuteNetwork.cpp
index 3c0301010d..3a63fffeae 100644
--- a/tests/ExecuteNetwork/ExecuteNetwork.cpp
+++ b/tests/ExecuteNetwork/ExecuteNetwork.cpp
@@ -33,6 +33,7 @@ int main(int argc, const char* argv[])
std::string outgoingCaptureFile;
std::string incomingCaptureFile;
uint32_t counterCapturePeriod;
+ std::string fileFormat;
double thresholdTime = 0.0;
@@ -114,6 +115,8 @@ int main(int argc, const char* argv[])
"If enabled then the 'file-only' test mode of external profiling will be enabled")
("counter-capture-period,u", po::value<uint32_t>(&counterCapturePeriod)->default_value(150u),
"If profiling is enabled in 'file-only' mode this is the capture period that will be used in the test")
+ ("file-format,ff", po::value(&fileFormat),
+ "If profiling is enabled specifies the output file format")
("parse-unsupported", po::bool_switch()->default_value(false),
"Add unsupported operators as stand-in layers (where supported by parser)");
}
@@ -187,13 +190,14 @@ int main(int argc, const char* argv[])
// Create runtime
armnn::IRuntime::CreationOptions options;
- options.m_EnableGpuProfiling = enableProfiling;
- options.m_DynamicBackendsPath = dynamicBackendsPath;
- options.m_ProfilingOptions.m_EnableProfiling = enableExternalProfiling;
+ options.m_EnableGpuProfiling = enableProfiling;
+ options.m_DynamicBackendsPath = dynamicBackendsPath;
+ options.m_ProfilingOptions.m_EnableProfiling = enableExternalProfiling;
options.m_ProfilingOptions.m_IncomingCaptureFile = incomingCaptureFile;
options.m_ProfilingOptions.m_OutgoingCaptureFile = outgoingCaptureFile;
- options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
- options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
+ options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileFormat = fileFormat;
std::shared_ptr<armnn::IRuntime> runtime(armnn::IRuntime::Create(options));
const std::string executableName("ExecuteNetwork");
@@ -271,6 +275,7 @@ int main(int argc, const char* argv[])
options.m_ProfilingOptions.m_OutgoingCaptureFile = outgoingCaptureFile;
options.m_ProfilingOptions.m_FileOnly = fileOnlyExternalProfiling;
options.m_ProfilingOptions.m_CapturePeriod = counterCapturePeriod;
+ options.m_ProfilingOptions.m_FileFormat = fileFormat;
std::shared_ptr<armnn::IRuntime> runtime(armnn::IRuntime::Create(options));
return RunTest(modelFormat, inputTensorShapes, computeDevices, dynamicBackendsPath, modelPath, inputNames,