IVGCVSW-5787 Add/Update Execute() implementations in RefActivationWorkload

 * Added multithreaded StridedSliceEndToEndTest

Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I4579db7b5959e0a22256f1bda00238c22e611dec
diff --git a/src/backends/reference/workloads/RefTransposeConvolution2dWorkload.cpp b/src/backends/reference/workloads/RefTransposeConvolution2dWorkload.cpp
index 2ab7604..6341228 100644
--- a/src/backends/reference/workloads/RefTransposeConvolution2dWorkload.cpp
+++ b/src/backends/reference/workloads/RefTransposeConvolution2dWorkload.cpp
@@ -33,35 +33,32 @@
     }
 }
 
-void RefTransposeConvolution2dWorkload::PostAllocationConfigure()
+void RefTransposeConvolution2dWorkload::Execute() const
 {
-    // set up input decoder
-    const ITensorHandle* input  = m_Data.m_Inputs[0];
-    const TensorInfo& inputInfo = GetTensorInfo(input);
-
-    m_InputShape   = inputInfo.GetShape();
-    m_InputDecoder = MakeDecoder<float>(inputInfo);
-
-    // set up output encoder
-    ITensorHandle* output        = m_Data.m_Outputs[0];
-    const TensorInfo& outputInfo = GetTensorInfo(output);
-
-    m_OutputShape   = outputInfo.GetShape();
-    m_OutputEncoder = MakeEncoder<float>(outputInfo);
+    Execute(m_Data.m_Inputs, m_Data.m_Outputs);
 }
 
-void RefTransposeConvolution2dWorkload::Execute() const
+void RefTransposeConvolution2dWorkload::ExecuteAsync(WorkingMemDescriptor &workingMemDescriptor)
+{
+    Execute(workingMemDescriptor.m_Inputs, workingMemDescriptor.m_Outputs);
+}
+
+void RefTransposeConvolution2dWorkload::Execute(std::vector<ITensorHandle*> inputs,
+                                                std::vector<ITensorHandle*> outputs) const
 {
     ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefTransposeConvolution2dWorkload_Execute");
 
-    m_InputDecoder->Reset(m_Data.m_Inputs[0]->Map());
-    m_OutputEncoder->Reset(m_Data.m_Outputs[0]->Map());
+    const TensorInfo& inputInfo = GetTensorInfo(inputs[0]);
+    const TensorInfo& outputInfo = GetTensorInfo(outputs[0]);
+
+    std::unique_ptr<Decoder<float>> inputDecoder = MakeDecoder<float>(inputInfo, inputs[0]->Map());
+    std::unique_ptr<Encoder<float>> outputEncoder = MakeEncoder<float>(outputInfo, outputs[0]->Map());
 
     TransposeConvolution2dImpl(m_Data.m_Parameters,
-                               m_InputShape,
-                               *m_InputDecoder,
-                               m_OutputShape,
-                               *m_OutputEncoder,
+                               inputInfo.GetShape(),
+                               *inputDecoder,
+                               outputInfo.GetShape(),
+                               *outputEncoder,
                                m_WeightsShape,
                                *m_WeightsDecoder,
                                m_BiasesDecoder.get());