aboutsummaryrefslogtreecommitdiff
path: root/tests/benchmark_new
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmark_new')
-rw-r--r--tests/benchmark_new/CL/ActivationLayer.cpp61
-rw-r--r--tests/benchmark_new/CL/ConvolutionLayer.cpp63
-rw-r--r--tests/benchmark_new/CL/FullyConnectedLayer.cpp63
-rw-r--r--tests/benchmark_new/CL/GEMM.cpp57
-rw-r--r--tests/benchmark_new/CL/NormalizationLayer.cpp56
-rw-r--r--tests/benchmark_new/CL/PoolingLayer.cpp63
-rw-r--r--tests/benchmark_new/CL/SYSTEM/AlexNet.cpp67
-rw-r--r--tests/benchmark_new/CL/SYSTEM/LeNet5.cpp60
-rw-r--r--tests/benchmark_new/DEMO/Demo.cpp162
-rw-r--r--tests/benchmark_new/NEON/ActivationLayer.cpp61
-rw-r--r--tests/benchmark_new/NEON/ConvolutionLayer.cpp63
-rw-r--r--tests/benchmark_new/NEON/DirectConvolutionLayer.cpp51
-rw-r--r--tests/benchmark_new/NEON/FullyConnectedLayer.cpp63
-rw-r--r--tests/benchmark_new/NEON/GEMM.cpp59
-rw-r--r--tests/benchmark_new/NEON/NormalizationLayer.cpp56
-rw-r--r--tests/benchmark_new/NEON/PoolingLayer.cpp63
-rw-r--r--tests/benchmark_new/NEON/SYSTEM/AlexNet.cpp67
-rw-r--r--tests/benchmark_new/NEON/SYSTEM/LeNet5.cpp60
-rw-r--r--tests/benchmark_new/main.cpp213
19 files changed, 1408 insertions, 0 deletions
diff --git a/tests/benchmark_new/CL/ActivationLayer.cpp b/tests/benchmark_new/CL/ActivationLayer.cpp
new file mode 100644
index 0000000000..2ab23d292f
--- /dev/null
+++ b/tests/benchmark_new/CL/ActivationLayer.cpp
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLActivationLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/ActivationLayerDataset.h"
+#include "tests/fixtures_new/ActivationLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLActivationLayerFixture = ActivationLayerFixture<CLTensor, CLActivationLayer, cl::CLAccessor>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetActivationLayer, CLActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetActivationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5ActivationLayer, CLActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5ActivationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetActivationLayer, CLActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetActivationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/ConvolutionLayer.cpp b/tests/benchmark_new/CL/ConvolutionLayer.cpp
new file mode 100644
index 0000000000..b0faf4ac0f
--- /dev/null
+++ b/tests/benchmark_new/CL/ConvolutionLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLConvolutionLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetConvolutionLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetConvolutionLayerDataset.h"
+#include "tests/datasets_new/LeNet5ConvolutionLayerDataset.h"
+#include "tests/fixtures_new/ConvolutionLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLConvolutionLayerFixture = ConvolutionLayerFixture<CLTensor, CLConvolutionLayer, cl::CLAccessor>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetConvolutionLayer, CLConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetConvolutionLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5ConvolutionLayer, CLConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5ConvolutionLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetConvolutionLayer, CLConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetConvolutionLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/FullyConnectedLayer.cpp b/tests/benchmark_new/CL/FullyConnectedLayer.cpp
new file mode 100644
index 0000000000..3c8d450498
--- /dev/null
+++ b/tests/benchmark_new/CL/FullyConnectedLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITCLSS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONCLCTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLFullyConnectedLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetFullyConnectedLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetFullyConnectedLayerDataset.h"
+#include "tests/datasets_new/LeNet5FullyConnectedLayerDataset.h"
+#include "tests/fixtures_new/FullyConnectedLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLFullyConnectedLayerFixture = FullyConnectedLayerFixture<CLTensor, CLFullyConnectedLayer, cl::CLAccessor>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetFullyConnectedLayer, CLFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetFullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5FullyConnectedLayer, CLFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5FullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetFullyConnectedLayer, CLFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetFullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/GEMM.cpp b/tests/benchmark_new/CL/GEMM.cpp
new file mode 100644
index 0000000000..d75db500a0
--- /dev/null
+++ b/tests/benchmark_new/CL/GEMM.cpp
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLGEMM.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/GoogLeNetGEMMDataset.h"
+#include "tests/fixtures_new/GEMMFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+namespace
+{
+auto data_types = framework::dataset::make("Data type",
+{
+#if ARM_COMPUTE_ENABLE_FP16
+ DataType::FP16,
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
+ DataType::F32
+});
+} // namespace
+
+using CLGEMMFixture = GEMMFixture<CLTensor, CLGEMM>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetGEMM, CLGEMMFixture, framework::dataset::combine(datasets::GoogLeNetGEMMDataset(), std::move(data_types)));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/NormalizationLayer.cpp b/tests/benchmark_new/CL/NormalizationLayer.cpp
new file mode 100644
index 0000000000..95e78c4a18
--- /dev/null
+++ b/tests/benchmark_new/CL/NormalizationLayer.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITCLSS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONCLCTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLNormalizationLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/NormalizationLayerDataset.h"
+#include "tests/fixtures_new/NormalizationLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLNormalizationLayerFixture = NormalizationLayerFixture<CLTensor, CLNormalizationLayer, cl::CLAccessor>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetNormalizationLayer, CLNormalizationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetNormalizationLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetNormalizationLayer, CLNormalizationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetNormalizationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/PoolingLayer.cpp b/tests/benchmark_new/CL/PoolingLayer.cpp
new file mode 100644
index 0000000000..1f2229cb10
--- /dev/null
+++ b/tests/benchmark_new/CL/PoolingLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLPoolingLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetPoolingLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetPoolingLayerDataset.h"
+#include "tests/datasets_new/LeNet5PoolingLayerDataset.h"
+#include "tests/fixtures_new/PoolingLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLPoolingLayerFixture = PoolingLayerFixture<CLTensor, CLPoolingLayer, cl::CLAccessor>;
+
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetPoolingLayer, CLPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetPoolingLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5PoolingLayer, CLPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5PoolingLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetPoolingLayer, CLPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetPoolingLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/SYSTEM/AlexNet.cpp b/tests/benchmark_new/CL/SYSTEM/AlexNet.cpp
new file mode 100644
index 0000000000..a0673b94df
--- /dev/null
+++ b/tests/benchmark_new/CL/SYSTEM/AlexNet.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLSubTensor.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLActivationLayer.h"
+#include "arm_compute/runtime/CL/functions/CLConvolutionLayer.h"
+#include "arm_compute/runtime/CL/functions/CLFullyConnectedLayer.h"
+#include "arm_compute/runtime/CL/functions/CLNormalizationLayer.h"
+#include "arm_compute/runtime/CL/functions/CLPoolingLayer.h"
+#include "arm_compute/runtime/CL/functions/CLSoftmaxLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/ActivationLayerDataset.h"
+#include "tests/fixtures_new/AlexNetFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLAlexNetFixture = AlexNetFixture<ICLTensor,
+ CLTensor,
+ CLSubTensor,
+ cl::CLAccessor,
+ CLActivationLayer,
+ CLConvolutionLayer,
+ CLFullyConnectedLayer,
+ CLNormalizationLayer,
+ CLPoolingLayer,
+ CLSoftmaxLayer>;
+
+TEST_SUITE(SYSTEM_TEST)
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNet, CLAlexNetFixture,
+ framework::dataset::combine(framework::dataset::make("Data type", DataType::F32),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/CL/SYSTEM/LeNet5.cpp b/tests/benchmark_new/CL/SYSTEM/LeNet5.cpp
new file mode 100644
index 0000000000..0ee7c0177a
--- /dev/null
+++ b/tests/benchmark_new/CL/SYSTEM/LeNet5.cpp
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/CL/CLTensor.h"
+#include "arm_compute/runtime/CL/CLTensorAllocator.h"
+#include "arm_compute/runtime/CL/functions/CLActivationLayer.h"
+#include "arm_compute/runtime/CL/functions/CLConvolutionLayer.h"
+#include "arm_compute/runtime/CL/functions/CLFullyConnectedLayer.h"
+#include "arm_compute/runtime/CL/functions/CLPoolingLayer.h"
+#include "arm_compute/runtime/CL/functions/CLSoftmaxLayer.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/CL/CLAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/fixtures_new/LeNet5Fixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using CLLeNet5Fixture = LeNet5Fixture<CLTensor,
+ cl::CLAccessor,
+ CLActivationLayer,
+ CLConvolutionLayer,
+ CLFullyConnectedLayer,
+ CLPoolingLayer,
+ CLSoftmaxLayer>;
+
+TEST_SUITE(SYSTEM_TEST)
+TEST_SUITE(CL)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5, CLLeNet5Fixture,
+ framework::dataset::make("Batches", { 1, 4, 8 }));
+
+TEST_SUITE_END()
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/DEMO/Demo.cpp b/tests/benchmark_new/DEMO/Demo.cpp
new file mode 100644
index 0000000000..27254bbded
--- /dev/null
+++ b/tests/benchmark_new/DEMO/Demo.cpp
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "framework/Macros.h"
+#include "tests/DatasetManager.h"
+
+#include <vector>
+
+namespace arm_compute
+{
+namespace test
+{
+TEST_SUITE(DEMO)
+
+#if 0
+TEST_CASE(NoArgs)
+{
+ ARM_COMPUTE_EXPECT_EQUAL(6, 5);
+}
+
+DATA_TEST_CASE(And, framework::dataset::make("Foo", { 5, 7, 9 }), int num)
+{
+ ARM_COMPUTE_EXPECT_EQUAL(6, num);
+}
+
+DATA_TEST_CASE(And2, framework::dataset::zip(framework::dataset::make("Foo", 2), framework::dataset::make("Bar", 3.f)), int num, float count)
+{
+}
+
+DATA_TEST_CASE(And3, framework::DatasetManager::get().shapesDataset(), arm_compute::TensorShape num)
+{
+}
+
+DATA_TEST_CASE(And4, framework::dataset::zip(framework::dataset::make("Zip", std::vector<int> { 2, 3, 4 }), framework::dataset::make("Bar", std::vector<int> { -2, -3, -4 })), int num, float count)
+{
+ ARM_COMPUTE_ASSERT_EQUAL(num, count);
+}
+
+DATA_TEST_CASE(And5, framework::dataset::make("Foo", { 2, 3, 4 }), int num)
+{
+}
+
+DATA_TEST_CASE(And6, framework::dataset::combine(framework::dataset::make("Foo", std::vector<int> { 2, 3, 4 }), framework::dataset::make("Bar", std::vector<int> { -2, -3, -4 })), int num, int count)
+{
+ ARM_COMPUTE_EXPECT_EQUAL(num, count);
+}
+
+DATA_TEST_CASE(And7, framework::dataset::combine(framework::dataset::combine(framework::dataset::make("Foo", std::vector<int> { 2, 3, 4 }), framework::dataset::make("Bar", std::vector<int> { -2, -3, -4 })),
+ framework::dataset::make("FooBar", std::vector<int> { 5, 6 })),
+ int num,
+ int count, int asd)
+{
+}
+
+DATA_TEST_CASE(And8, framework::dataset::concat(framework::dataset::make("Foo", std::vector<int> { 2, 3, 4 }), framework::dataset::make("Bar", std::vector<int> { -2, -3, -4 })), int num)
+{
+}
+
+class MyFixture : public framework::Fixture
+{
+public:
+ MyFixture()
+ {
+ std::cout << "Created fixture!!!\n";
+ }
+
+ MyFixture(const MyFixture &) = default;
+ MyFixture(MyFixture &&) = default;
+ MyFixture &operator=(const MyFixture &) = default;
+ MyFixture &operator=(MyFixture &&) = default;
+
+ void setup()
+ {
+ std::cout << "Set up fixture!!!\n";
+ }
+
+ void run()
+ {
+ std::cout << "Run fixture\n";
+ }
+
+ void teardown()
+ {
+ std::cout << "Tear down fixture!!!\n";
+ }
+
+ ~MyFixture()
+ {
+ std::cout << "Destroyed fixture!!!\n";
+ }
+};
+
+class MyDataFixture : public framework::Fixture
+{
+public:
+ MyDataFixture()
+ {
+ std::cout << "Created data fixture!!!\n";
+ }
+
+ MyDataFixture(const MyDataFixture &) = default;
+ MyDataFixture(MyDataFixture &&) = default;
+ MyDataFixture &operator=(const MyDataFixture &) = default;
+ MyDataFixture &operator=(MyDataFixture &&) = default;
+
+ void setup(int num)
+ {
+ _num = num;
+ std::cout << "Set up fixture with num = " << _num << "\n";
+ }
+
+ void run()
+ {
+ std::cout << "Run fixture\n";
+ }
+
+ ~MyDataFixture()
+ {
+ std::cout << "Destroyed data fixture!!!\n";
+ }
+
+protected:
+ int _num{};
+};
+
+FIXTURE_TEST_CASE(And11, MyFixture)
+{
+ std::cout << "Running fixture test!!!\n";
+}
+
+FIXTURE_DATA_TEST_CASE(And12, MyDataFixture, framework::dataset::make("Foo", { 2, 3, 4 }))
+{
+ std::cout << "Running fixture test with value " << _num << "!!!\n";
+}
+
+REGISTER_FIXTURE_TEST_CASE(And13, MyFixture);
+REGISTER_FIXTURE_DATA_TEST_CASE(And14, MyDataFixture, framework::dataset::make("Foo", { 2, 3, 4 }));
+#endif /* 0 */
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/ActivationLayer.cpp b/tests/benchmark_new/NEON/ActivationLayer.cpp
new file mode 100644
index 0000000000..75e98c4ccb
--- /dev/null
+++ b/tests/benchmark_new/NEON/ActivationLayer.cpp
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEActivationLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/ActivationLayerDataset.h"
+#include "tests/fixtures_new/ActivationLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEActivationLayerFixture = ActivationLayerFixture<Tensor, NEActivationLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetActivationLayer, NEActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetActivationLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5ActivationLayer, NEActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5ActivationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetActivationLayer, NEActivationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetActivationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/ConvolutionLayer.cpp b/tests/benchmark_new/NEON/ConvolutionLayer.cpp
new file mode 100644
index 0000000000..57d046e9a5
--- /dev/null
+++ b/tests/benchmark_new/NEON/ConvolutionLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEConvolutionLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetConvolutionLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetConvolutionLayerDataset.h"
+#include "tests/datasets_new/LeNet5ConvolutionLayerDataset.h"
+#include "tests/fixtures_new/ConvolutionLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEConvolutionLayerFixture = ConvolutionLayerFixture<Tensor, NEConvolutionLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetConvolutionLayer, NEConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetConvolutionLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5ConvolutionLayer, NEConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5ConvolutionLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetConvolutionLayer, NEConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetConvolutionLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/DirectConvolutionLayer.cpp b/tests/benchmark_new/NEON/DirectConvolutionLayer.cpp
new file mode 100644
index 0000000000..a63cbae8e5
--- /dev/null
+++ b/tests/benchmark_new/NEON/DirectConvolutionLayer.cpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEDirectConvolutionLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/DirectConvolutionLayerDataset.h"
+#include "tests/fixtures_new/ConvolutionLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEDirectConvolutionLayerFixture = ConvolutionLayerFixture<Tensor, NEDirectConvolutionLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(DirectConvolutionLayer, NEDirectConvolutionLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::DirectConvolutionLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/FullyConnectedLayer.cpp b/tests/benchmark_new/NEON/FullyConnectedLayer.cpp
new file mode 100644
index 0000000000..75815ad363
--- /dev/null
+++ b/tests/benchmark_new/NEON/FullyConnectedLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetFullyConnectedLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetFullyConnectedLayerDataset.h"
+#include "tests/datasets_new/LeNet5FullyConnectedLayerDataset.h"
+#include "tests/fixtures_new/FullyConnectedLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEFullyConnectedLayerFixture = FullyConnectedLayerFixture<Tensor, NEFullyConnectedLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetFullyConnectedLayer, NEFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetFullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5FullyConnectedLayer, NEFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5FullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetFullyConnectedLayer, NEFullyConnectedLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetFullyConnectedLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/GEMM.cpp b/tests/benchmark_new/NEON/GEMM.cpp
new file mode 100644
index 0000000000..2ba9a71664
--- /dev/null
+++ b/tests/benchmark_new/NEON/GEMM.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEGEMM.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/GoogLeNetGEMMDataset.h"
+#include "tests/fixtures_new/GEMMFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+namespace
+{
+auto data_types = framework::dataset::make("Data type",
+{
+#if ARM_COMPUTE_ENABLE_FP16
+ DataType::F16,
+#endif /* ARM_COMPUTE_ENABLE_FP16 */
+ DataType::F32,
+ DataType::QS8
+});
+} // namespace
+
+using NEGEMMFixture = GEMMFixture<Tensor, NEGEMM>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetGEMM, NEGEMMFixture, framework::dataset::combine(datasets::GoogLeNetGEMMDataset(), std::move(data_types)));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/NormalizationLayer.cpp b/tests/benchmark_new/NEON/NormalizationLayer.cpp
new file mode 100644
index 0000000000..d9f1323620
--- /dev/null
+++ b/tests/benchmark_new/NEON/NormalizationLayer.cpp
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NENormalizationLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/NormalizationLayerDataset.h"
+#include "tests/fixtures_new/NormalizationLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NENormalizationLayerFixture = NormalizationLayerFixture<Tensor, NENormalizationLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetNormalizationLayer, NENormalizationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetNormalizationLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetNormalizationLayer, NENormalizationLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetNormalizationLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/PoolingLayer.cpp b/tests/benchmark_new/NEON/PoolingLayer.cpp
new file mode 100644
index 0000000000..fdaadd0493
--- /dev/null
+++ b/tests/benchmark_new/NEON/PoolingLayer.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEPoolingLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/AlexNetPoolingLayerDataset.h"
+#include "tests/datasets_new/GoogLeNetPoolingLayerDataset.h"
+#include "tests/datasets_new/LeNet5PoolingLayerDataset.h"
+#include "tests/fixtures_new/PoolingLayerFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEPoolingLayerFixture = PoolingLayerFixture<Tensor, NEPoolingLayer, neon::NEAccessor>;
+
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNetPoolingLayer, NEPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::AlexNetPoolingLayerDataset(),
+ framework::dataset::make("Data type", { DataType::F32, DataType::QS8 })),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5PoolingLayer, NEPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::LeNet5PoolingLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+REGISTER_FIXTURE_DATA_TEST_CASE(GoogLeNetPoolingLayer, NEPoolingLayerFixture,
+ framework::dataset::combine(framework::dataset::combine(datasets::GoogLeNetPoolingLayerDataset(),
+ framework::dataset::make("Data type", DataType::F32)),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/SYSTEM/AlexNet.cpp b/tests/benchmark_new/NEON/SYSTEM/AlexNet.cpp
new file mode 100644
index 0000000000..2a50bc9d85
--- /dev/null
+++ b/tests/benchmark_new/NEON/SYSTEM/AlexNet.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEActivationLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEConvolutionLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h"
+#include "arm_compute/runtime/NEON/functions/NENormalizationLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEPoolingLayer.h"
+#include "arm_compute/runtime/NEON/functions/NESoftmaxLayer.h"
+#include "arm_compute/runtime/SubTensor.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/datasets_new/ActivationLayerDataset.h"
+#include "tests/fixtures_new/AlexNetFixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NEAlexNetFixture = AlexNetFixture<ITensor,
+ Tensor,
+ SubTensor,
+ neon::NEAccessor,
+ NEActivationLayer,
+ NEConvolutionLayer,
+ NEFullyConnectedLayer,
+ NENormalizationLayer,
+ NEPoolingLayer,
+ NESoftmaxLayer>;
+
+TEST_SUITE(SYSTEM_TEST)
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(AlexNet, NEAlexNetFixture,
+ framework::dataset::combine(framework::dataset::make("Data type", { DataType::F32, DataType::QS8 }),
+ framework::dataset::make("Batches", { 1, 4, 8 })));
+
+TEST_SUITE_END()
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/NEON/SYSTEM/LeNet5.cpp b/tests/benchmark_new/NEON/SYSTEM/LeNet5.cpp
new file mode 100644
index 0000000000..3957ce76b9
--- /dev/null
+++ b/tests/benchmark_new/NEON/SYSTEM/LeNet5.cpp
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "arm_compute/core/TensorShape.h"
+#include "arm_compute/core/Types.h"
+#include "arm_compute/runtime/NEON/functions/NEActivationLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEConvolutionLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEFullyConnectedLayer.h"
+#include "arm_compute/runtime/NEON/functions/NEPoolingLayer.h"
+#include "arm_compute/runtime/NEON/functions/NESoftmaxLayer.h"
+#include "arm_compute/runtime/Tensor.h"
+#include "arm_compute/runtime/TensorAllocator.h"
+#include "framework/Macros.h"
+#include "framework/datasets/Datasets.h"
+#include "tests/NEON/NEAccessor.h"
+#include "tests/TypePrinter.h"
+#include "tests/fixtures_new/LeNet5Fixture.h"
+
+namespace arm_compute
+{
+namespace test
+{
+using NELeNet5Fixture = LeNet5Fixture<Tensor,
+ neon::NEAccessor,
+ NEActivationLayer,
+ NEConvolutionLayer,
+ NEFullyConnectedLayer,
+ NEPoolingLayer,
+ NESoftmaxLayer>;
+
+TEST_SUITE(SYSTEM_TEST)
+TEST_SUITE(NEON)
+
+REGISTER_FIXTURE_DATA_TEST_CASE(LeNet5, NELeNet5Fixture,
+ framework::dataset::make("Batches", { 1, 4, 8 }));
+
+TEST_SUITE_END()
+TEST_SUITE_END()
+} // namespace test
+} // namespace arm_compute
diff --git a/tests/benchmark_new/main.cpp b/tests/benchmark_new/main.cpp
new file mode 100644
index 0000000000..2db5fc8cef
--- /dev/null
+++ b/tests/benchmark_new/main.cpp
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2017 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#include "framework/Macros.h"
+#include "framework/command_line/CommandLineOptions.h"
+#include "framework/command_line/CommandLineParser.h"
+#include "framework/instruments/Instruments.h"
+#include "framework/printers/Printers.h"
+#include "support/ToolchainSupport.h"
+#include "tests/DatasetManager.h"
+#include "tests/TensorLibrary.h"
+
+#ifdef OPENCL
+#include "arm_compute/runtime/CL/CLScheduler.h"
+#endif /* OPENCL */
+#include "arm_compute/runtime/Scheduler.h"
+
+#include <fstream>
+#include <initializer_list>
+#include <iostream>
+#include <memory>
+#include <random>
+#include <utility>
+
+using namespace arm_compute;
+using namespace arm_compute::test;
+
+namespace arm_compute
+{
+namespace test
+{
+std::unique_ptr<TensorLibrary> library;
+} // namespace test
+} // namespace arm_compute
+
+int main(int argc, char **argv)
+{
+#ifdef OPENCL
+ CLScheduler::get().default_init();
+#endif /* OPENCL */
+
+ framework::Framework &framework = framework::Framework::get();
+
+ framework::CommandLineParser parser;
+
+ std::set<framework::InstrumentType> allowed_instruments
+ {
+ framework::InstrumentType::ALL,
+ framework::InstrumentType::NONE,
+ };
+
+ for(const auto &type : framework.available_instruments())
+ {
+ allowed_instruments.insert(type);
+ }
+
+ std::set<DatasetManager::DatasetMode> allowed_modes
+ {
+ DatasetManager::DatasetMode::PRECOMMIT,
+ DatasetManager::DatasetMode::NIGHTLY,
+ DatasetManager::DatasetMode::ALL
+ };
+
+ std::set<framework::LogFormat> supported_log_formats
+ {
+ framework::LogFormat::NONE,
+ framework::LogFormat::PRETTY,
+ framework::LogFormat::JSON,
+ };
+
+ auto help = parser.add_option<framework::ToggleOption>("help");
+ help->set_help("Show this help message");
+ auto dataset_mode = parser.add_option<framework::EnumOption<DatasetManager::DatasetMode>>("mode", allowed_modes, DatasetManager::DatasetMode::ALL);
+ dataset_mode->set_help("For managed datasets select which group to use");
+ auto instruments = parser.add_option<framework::EnumListOption<framework::InstrumentType>>("instruments", allowed_instruments, std::initializer_list<framework::InstrumentType> { framework::InstrumentType::ALL });
+ instruments->set_help("Set the profiling instruments to use");
+ auto iterations = parser.add_option<framework::SimpleOption<int>>("iterations", 1);
+ iterations->set_help("Number of iterations per test case");
+ auto threads = parser.add_option<framework::SimpleOption<int>>("threads", 1);
+ threads->set_help("Number of threads to use");
+ auto log_format = parser.add_option<framework::EnumOption<framework::LogFormat>>("log-format", supported_log_formats, framework::LogFormat::PRETTY);
+ log_format->set_help("Output format for measurements and failures");
+ auto filter = parser.add_option<framework::SimpleOption<std::string>>("filter", ".*");
+ filter->set_help("Regular expression to select test cases");
+ auto filter_id = parser.add_option<framework::SimpleOption<std::string>>("filter-id", ".*");
+ filter_id->set_help("Regular expression to select test cases by id");
+ auto log_file = parser.add_option<framework::SimpleOption<std::string>>("log-file");
+ log_file->set_help("Write output to file instead of to the console");
+ auto throw_errors = parser.add_option<framework::ToggleOption>("throw-errors");
+ throw_errors->set_help("Don't catch errors (useful for debugging)");
+ auto seed = parser.add_option<framework::SimpleOption<std::random_device::result_type>>("seed", std::random_device()());
+ seed->set_help("Global seed for random number generation");
+ auto color_output = parser.add_option<framework::ToggleOption>("color-output", true);
+ color_output->set_help("Produce colored output on the console");
+ auto list_tests = parser.add_option<framework::ToggleOption>("list-tests", false);
+ list_tests->set_help("List all test names");
+ auto assets = parser.add_positional_option<framework::SimpleOption<std::string>>("assets");
+ assets->set_help("Path to the assets directory");
+ assets->set_required(true);
+
+ try
+ {
+ parser.parse(argc, argv);
+
+ if(help->is_set() && help->value())
+ {
+ parser.print_help(argv[0]);
+ return 0;
+ }
+
+ if(!parser.validate())
+ {
+ return 1;
+ }
+
+ std::unique_ptr<framework::Printer> printer;
+ std::ofstream log_stream;
+
+ switch(log_format->value())
+ {
+ case framework::LogFormat::JSON:
+ printer = support::cpp14::make_unique<framework::JSONPrinter>();
+ break;
+ case framework::LogFormat::NONE:
+ break;
+ case framework::LogFormat::PRETTY:
+ default:
+ {
+ auto pretty_printer = support::cpp14::make_unique<framework::PrettyPrinter>();
+ pretty_printer->set_color_output(color_output->value());
+ printer = std::move(pretty_printer);
+ break;
+ }
+ }
+
+ if(printer != nullptr)
+ {
+ if(log_file->is_set())
+ {
+ log_stream.open(log_file->value());
+ printer->set_stream(log_stream);
+ }
+ }
+
+ DatasetManager::get().set_mode(dataset_mode->value());
+ library = support::cpp14::make_unique<TensorLibrary>(assets->value(), seed->value());
+ Scheduler::get().set_num_threads(threads->value());
+
+ printer->print_global_header();
+ printer->print_entry("Seed", support::cpp11::to_string(seed->value()));
+ printer->print_entry("Iterations", support::cpp11::to_string(iterations->value()));
+ printer->print_entry("Threads", support::cpp11::to_string(threads->value()));
+ {
+ using support::cpp11::to_string;
+ printer->print_entry("Dataset mode", to_string(dataset_mode->value()));
+ }
+
+ framework.init(instruments->value(), iterations->value(), filter->value(), filter_id->value());
+ framework.set_printer(printer.get());
+ framework.set_throw_errors(throw_errors->value());
+
+ bool success = true;
+
+ if(list_tests->value())
+ {
+ for(const auto &id : framework.test_ids())
+ {
+ std::cout << "[" << id.first << "] " << id.second << "\n";
+ }
+ }
+ else
+ {
+ success = framework.run();
+ }
+
+ printer->print_global_footer();
+
+ return (success ? 0 : 1);
+ }
+ catch(const std::exception &error)
+ {
+ std::cerr << error.what() << "\n";
+
+ if(throw_errors->value())
+ {
+ throw;
+ }
+
+ return 1;
+ }
+
+ return 0;
+}