if (permutationVector.has_value() && permutationVector.value().GetSize() > 0)
{
tensorInfo = armnnUtils::Permuted(tensorInfo, permutationVector.value());
- armnnUtils::Permute(tensorInfo.GetShape(),
- permutationVector.value(),
- reinterpret_cast<const T *>(bufferPtr->data.data()),
- data.get());
+ armnnUtils::Permute(tensorInfo.GetShape(), permutationVector.value(),
+ reinterpret_cast<const T*>(bufferPtr->data.data()), data.get(), sizeof(T));
}
else
{
// Swizzles the content of the tensor's permanent storage into a local storage.
std::vector<float> weightTensorSwizzledData(weightTensorInfo.GetNumElements());
armnnUtils::Permute(weightTensorSwizzledInfo.GetShape(), permutationVector,
- weightNode->GetStorage(), weightTensorSwizzledData.data());
+ weightNode->GetStorage(), weightTensorSwizzledData.data(), sizeof(float));
// Create a weight tensor with the newly swizzled data.
ConstTensor weightTensor(weightTensorSwizzledInfo, weightTensorSwizzledData);
// Swizzles the content of the tensor's permanent storage into a local storage.
std::vector<float> weightTensorSwizzledData(weightTensorInfo.GetNumElements());
armnnUtils::Permute(weightTensorSwizzledInfo.GetShape(), permutationVector,
- weightNode->GetStorage(), weightTensorSwizzledData.data());
+ weightNode->GetStorage(), weightTensorSwizzledData.data(), sizeof(float));
// Create a weight tensor with the newly swizzled data.
ConstTensor weightTensor(weightTensorSwizzledInfo, weightTensorSwizzledData);
}
}
- template <typename T>
- void Unroll(const T* srcData, T* dstData)
- {
- const T* const srcEnd = srcData + m_DstShape.GetNumElements();
- T* const dstEnd = dstData + m_DstShape.GetNumElements();
- Unroll(0, srcData, dstData, srcEnd, dstEnd);
- }
-
void Unroll(const void* srcData, void* dstData, size_t dataTypeSize)
{
assert(srcData);
}
private:
- template <typename T>
- void Unroll(size_type dimension, const T* srcData, T* dstData, const T* srcEnd, T* dstEnd)
- {
- assert(srcData);
- assert(dstData);
- assert(srcEnd);
- assert(dstEnd);
- assert(srcData < srcEnd);
- assert(dstData < dstEnd);
-
- if (dimension >= m_DstShape.GetNumDimensions())
- {
- *dstData = *srcData;
- }
- else
- {
- for (size_type i = 0; i < m_DstShape[dimension]; i++)
- {
- Unroll(dimension + 1, srcData, dstData, srcEnd, dstEnd);
-
- srcData += m_SrcStrides[dimension];
- dstData += m_DstStrides[dimension];
- }
- }
- }
-
void Unroll(size_type dimension,
const unsigned char* srcData, unsigned char* dstData,
const unsigned char* srcEnd, unsigned char* dstEnd,
PermuteLoop(dstShape, mappings).Unroll(src, dst, dataTypeSize);
}
-template <typename T>
-void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings, const T* src, T* dst)
-{
- PermuteLoop(dstShape, mappings).Unroll(src, dst);
-}
-
-// Instantiates for types.
-template void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
- const armnn::Half* src, armnn::Half* dst);
-template void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
- const float* src, float* dst);
-template void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
- const uint8_t* src, uint8_t* dst);
-template void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
- const int32_t* src, int32_t* dst);
-template void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
- const bool* src, bool* dst);
-
} // namespace armnnUtils
void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings,
const void* src, void* dst, size_t dataTypeSize);
-template <typename T>
-void Permute(const armnn::TensorShape& dstShape, const armnn::PermutationVector& mappings, const T* src, T* dst);
-
} // namespace armnnUtils
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
}
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp.data(), sizeof(T));
outputData = tmp;
}
ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputData);
boost::multi_array<T, 4> kernel = boost::multi_array<T, 4>(originalKernel);
if (layout == armnn::DataLayout::NHWC)
{
- armnnUtils::Permute(kernelDesc.GetShape(), NCHWToNHWC, originalKernel.data(), kernel.data());
+ armnnUtils::Permute(kernelDesc.GetShape(), NCHWToNHWC, originalKernel.data(), kernel.data(), sizeof(T));
}
AllocateAndCopyDataToITensorHandle(&weightsTensor, &kernel[0][0][0][0]);
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
}
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp.data(), sizeof(T));
outputData = tmp;
}
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
}
auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
if (layout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(outputImage.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputImage.data(), tmp.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputImage.data(), tmp.data(), sizeof(T));
outputImage = tmp;
}
const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
if (layout == armnn::DataLayout::NHWC)
{
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, originalInputData.data(), inputData.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC,
+ originalInputData.data(), inputData.data(), sizeof(T));
}
auto input = MakeTensor<T, 4>(inputTensorInfo, inputData);
std::vector<T> outputImage = originalOutputImage;
if (layout == armnn::DataLayout::NHWC)
{
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, originalOutputImage.data(), outputImage.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC,
+ originalOutputImage.data(), outputImage.data(), sizeof(T));
}
ret.outputExpected = MakeTensor<T, 4>(outputTensorInfo, outputImage);
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
std::vector<float> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
outputData = tmp1;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
std::vector<float> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
outputData = tmp1;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
std::vector<float> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
outputData = tmp1;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
std::vector<float> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(float));
outputData = tmp1;
}
if (layout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
inputData = tmp;
}
if (layout == armnn::DataLayout::NHWC)
{
std::vector<float> tmp(expectedOutputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, expectedOutputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC,
+ expectedOutputData.data(), tmp.data(), sizeof(float));
expectedOutputData = tmp;
}
result.outputExpected = MakeTensor<float, 4>(inputTensorInfo, std::vector<float>(expectedOutputData));
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
std::vector<T> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(T));
outputData = tmp1;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
std::vector<T> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(T));
outputData = tmp1;
}
if (dataLayout == armnn::DataLayout::NHWC)
{
std::vector<T> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(T));
inputData = tmp;
std::vector<T> tmp1(outputData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputData.data(), tmp1.data(), sizeof(T));
outputData = tmp1;
}
outputTensorInfo = armnnUtils::Permuted(outputTensorInfo, NCHWToNHWC);
std::vector<float> inputTmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), inputTmp.data());
+ armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC,
+ inputData.data(), inputTmp.data(), sizeof(float));
inputData = inputTmp;
std::vector<float> outputTmp(outputExpectedData.size());
- armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC, outputExpectedData.data(), outputTmp.data());
+ armnnUtils::Permute(outputTensorInfo.GetShape(), NCHWToNHWC,
+ outputExpectedData.data(), outputTmp.data(), sizeof(float));
outputExpectedData = outputTmp;
}
const ITensorHandle* dst = m_Data.m_Outputs[0];
const PermutationVector& mappings = m_Data.m_Parameters.m_DimMappings;
- armnnUtils::Permute(GetTensorInfo(dst).GetShape(), mappings, GetConstCpuData<T>(src), GetCpuData<T>(dst));
+ armnnUtils::Permute(GetTensorInfo(dst).GetShape(), mappings,
+ GetConstCpuData<void>(src), GetCpuData<void>(dst), sizeof(T));
}
template class RefPermuteWorkload<DataType::Float16>;
const armnn::PermutationVector NHWCToArmNN = { 0, 2, 3, 1 };
armnn::TensorShape dstShape({m_BatchSize, 3, m_Height, m_Width});
std::vector<float> tempImage(result.size());
- armnnUtils::Permute<float>(dstShape, NHWCToArmNN, result.data(), tempImage.data());
+ armnnUtils::Permute(dstShape, NHWCToArmNN, result.data(), tempImage.data(), sizeof(float));
result.swap(tempImage);
}