summaryrefslogtreecommitdiffstats
path: root/thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp')
-rw-r--r--thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp63
1 files changed, 63 insertions, 0 deletions
diff --git a/thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp b/thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp
new file mode 100644
index 0000000000..0337611b35
--- /dev/null
+++ b/thirdparty/embree-aarch64/common/algorithms/parallel_for_for.cpp
@@ -0,0 +1,63 @@
+// Copyright 2009-2020 Intel Corporation
+// SPDX-License-Identifier: Apache-2.0
+
+#include "parallel_for_for.h"
+#include "../sys/regression.h"
+
+namespace embree
+{
+ struct parallel_for_for_regression_test : public RegressionTest
+ {
+ parallel_for_for_regression_test(const char* name) : RegressionTest(name) {
+ registerRegressionTest(this);
+ }
+
+ bool run ()
+ {
+ bool passed = true;
+
+ /* create vector with random numbers */
+ size_t sum0 = 0;
+ size_t K = 0;
+ const size_t M = 1000;
+ std::vector<std::vector<size_t>* > array2(M);
+ for (size_t i=0; i<M; i++) {
+ const size_t N = rand() % 1024;
+ K+=N;
+ array2[i] = new std::vector<size_t>(N);
+ for (size_t j=0; j<N; j++)
+ sum0 += (*array2[i])[j] = rand();
+ }
+
+ /* array to test global index */
+ std::vector<atomic<size_t>> verify_k(K);
+ for (size_t i=0; i<K; i++) verify_k[i].store(0);
+
+ /* add all numbers using parallel_for_for */
+ std::atomic<size_t> sum1(0);
+ parallel_for_for( array2, size_t(1), [&](std::vector<size_t>* v, const range<size_t>& r, size_t k) -> size_t
+ {
+ size_t s = 0;
+ for (size_t i=r.begin(); i<r.end(); i++) {
+ s += (*v)[i];
+ verify_k[k++]++;
+ }
+ sum1 += s;
+ return sum1;
+ });
+ passed &= (sum0 == sum1);
+
+ /* check global index */
+ for (size_t i=0; i<K; i++)
+ passed &= (verify_k[i] == 1);
+
+ /* delete vectors again */
+ for (size_t i=0; i<array2.size(); i++)
+ delete array2[i];
+
+ return passed;
+ }
+ };
+
+ parallel_for_for_regression_test parallel_for_for_regression("parallel_for_for_regression_test");
+}