Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright Contributors to the OpenVDB Project | ||
2 | // SPDX-License-Identifier: MPL-2.0 | ||
3 | |||
4 | #include <openvdb/Exceptions.h> | ||
5 | #include <openvdb/util/CpuTimer.h> | ||
6 | #include <openvdb/util/PagedArray.h> | ||
7 | #include <openvdb/util/Formats.h> | ||
8 | |||
9 | #include <gtest/gtest.h> | ||
10 | |||
11 | #include <tbb/enumerable_thread_specific.h> | ||
12 | #include <tbb/parallel_for.h> | ||
13 | #include <tbb/blocked_range.h> | ||
14 | |||
15 | #include <chrono> | ||
16 | #include <iostream> | ||
17 | |||
18 | //#define BENCHMARK_PAGED_ARRAY | ||
19 | |||
20 | // For benchmark comparisons | ||
21 | #ifdef BENCHMARK_PAGED_ARRAY | ||
22 | #include <deque> // for std::deque | ||
23 | #include <vector> // for std::vector | ||
24 | #include <tbb/tbb.h> // for tbb::concurrent_vector | ||
25 | #endif | ||
26 | |||
27 | 3 | class TestUtil: public ::testing::Test | |
28 | { | ||
29 | public: | ||
30 | using RangeT = tbb::blocked_range<size_t>; | ||
31 | |||
32 | // Multi-threading ArrayT::ValueBuffer::push_back | ||
33 | template<typename ArrayT> | ||
34 | 3 | struct BufferPushBack { | |
35 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | BufferPushBack(ArrayT& array) : mBuffer(array) {} |
36 | void parallel(size_t size) { | ||
37 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | tbb::parallel_for(RangeT(size_t(0), size, 256*mBuffer.pageSize()), *this); |
38 | } | ||
39 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | void serial(size_t size) { (*this)(RangeT(size_t(0), size)); } |
40 | 4 | void operator()(const RangeT& r) const { | |
41 |
2/2✓ Branch 0 taken 512000 times.
✓ Branch 1 taken 2 times.
|
1024004 | for (size_t i=r.begin(), n=r.end(); i!=n; ++i) mBuffer.push_back(i); |
42 | 4 | } | |
43 | mutable typename ArrayT::ValueBuffer mBuffer;//local instance | ||
44 | }; | ||
45 | |||
46 | // Thread Local Storage version of BufferPushBack | ||
47 | template<typename ArrayT> | ||
48 | struct TLS_BufferPushBack { | ||
49 | using PoolT = tbb::enumerable_thread_specific<typename ArrayT::ValueBuffer>; | ||
50 | 1 | TLS_BufferPushBack(ArrayT &array) : mArray(&array), mPool(nullptr) {} | |
51 | 1 | void parallel(size_t size) { | |
52 | 2 | typename ArrayT::ValueBuffer exemplar(*mArray);//dummy used for initialization | |
53 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
1 | mPool = new PoolT(exemplar);//thread local storage pool of ValueBuffers |
54 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tbb::parallel_for(RangeT(size_t(0), size, 256*mArray->pageSize()), *this); |
55 |
4/6✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
3 | for (auto i=mPool->begin(); i!=mPool->end(); ++i) i->flush(); |
56 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | delete mPool; |
57 | 1 | } | |
58 | 1 | void operator()(const RangeT& r) const { | |
59 | 1 | typename PoolT::reference buffer = mPool->local(); | |
60 |
2/2✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
|
256001 | for (size_t i=r.begin(), n=r.end(); i!=n; ++i) buffer.push_back(i); |
61 | 1 | } | |
62 | ArrayT *mArray; | ||
63 | PoolT *mPool; | ||
64 | }; | ||
65 | }; | ||
66 | |||
67 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestUtil, testFormats) |
68 | { | ||
69 | {// TODO: add unit tests for printBytes | ||
70 | } | ||
71 | {// TODO: add a unit tests for printNumber | ||
72 | } | ||
73 | {// test long format printTime | ||
74 | const int width = 4, precision = 1, verbose = 1; | ||
75 | const int days = 1; | ||
76 | const int hours = 3; | ||
77 | const int minutes = 59; | ||
78 | const int seconds = 12; | ||
79 | const double milliseconds = 347.6; | ||
80 | const double mseconds = milliseconds + (seconds + (minutes + (hours + days*24)*60)*60)*1000.0; | ||
81 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | std::ostringstream ostr1, ostr2; |
82 |
5/22✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
1 | EXPECT_EQ(4, openvdb::util::printTime(ostr2, mseconds, "Completed in ", "", width, precision, verbose )); |
83 | ostr1 << std::setprecision(precision) << std::setiosflags(std::ios::fixed); | ||
84 |
3/6✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
|
3 | ostr1 << "Completed in " << days << " day, " << hours << " hours, " << minutes << " minutes, " |
85 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | << seconds << " seconds and " << std::setw(width) << milliseconds << " milliseconds (" << mseconds << "ms)"; |
86 | //std::cerr << ostr2.str() << std::endl; | ||
87 |
1/14✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_EQ(ostr1.str(), ostr2.str()); |
88 | } | ||
89 | {// test compact format printTime | ||
90 | const int width = 4, precision = 1, verbose = 0; | ||
91 | const int days = 1; | ||
92 | const int hours = 3; | ||
93 | const int minutes = 59; | ||
94 | const int seconds = 12; | ||
95 | const double milliseconds = 347.6; | ||
96 | const double mseconds = milliseconds + (seconds + (minutes + (hours + days*24)*60)*60)*1000.0; | ||
97 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
2 | std::ostringstream ostr1, ostr2; |
98 |
5/22✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
1 | EXPECT_EQ(4, openvdb::util::printTime(ostr2, mseconds, "Completed in ", "", width, precision, verbose )); |
99 | ostr1 << std::setprecision(precision) << std::setiosflags(std::ios::fixed); | ||
100 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | ostr1 << "Completed in " << days << "d " << hours << "h " << minutes << "m " |
101 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
2 | << std::setw(width) << (seconds + milliseconds/1000.0) << "s"; |
102 | //std::cerr << ostr2.str() << std::endl; | ||
103 |
1/14✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
|
1 | EXPECT_EQ(ostr1.str(), ostr2.str()); |
104 | } | ||
105 | 1 | } | |
106 | |||
107 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | TEST_F(TestUtil, testCpuTimer) |
108 | { | ||
109 | // std::this_thread::sleep_for() only guarantees that the time slept is no less | ||
110 | // than the requested time, which can be inaccurate, particularly on Windows, | ||
111 | // so use this more accurate, but non-asynchronous implementation for unit testing | ||
112 | 5 | auto sleep_for = [&](int ms) -> void | |
113 | { | ||
114 | 5 | auto start = std::chrono::steady_clock::now(); | |
115 | while (true) { | ||
116 | auto duration = std::chrono::duration_cast<std::chrono::milliseconds>( | ||
117 | 817715 | std::chrono::steady_clock::now() - start); | |
118 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 817710 times.
|
817715 | if (duration.count() > ms) return; |
119 | 817710 | } | |
120 | }; | ||
121 | |||
122 | const int expected = 159, tolerance = 20;//milliseconds | ||
123 | { | ||
124 | openvdb::util::CpuTimer timer; | ||
125 | 1 | sleep_for(expected); | |
126 | 1 | const int actual1 = static_cast<int>(timer.milliseconds()); | |
127 |
1/14✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_NEAR(expected, actual1, tolerance); |
128 | 1 | sleep_for(expected); | |
129 | 1 | const int actual2 = static_cast<int>(timer.milliseconds()); | |
130 |
1/14✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_NEAR(2*expected, actual2, tolerance); |
131 | } | ||
132 | { | ||
133 | openvdb::util::CpuTimer timer; | ||
134 | 1 | sleep_for(expected); | |
135 | 1 | auto t1 = timer.restart(); | |
136 | 1 | sleep_for(expected); | |
137 | 1 | sleep_for(expected); | |
138 | 1 | auto t2 = timer.restart(); | |
139 |
1/14✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1 | EXPECT_NEAR(2*t1, t2, tolerance); |
140 | } | ||
141 | 1 | } | |
142 | |||
143 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | TEST_F(TestUtil, testPagedArray) |
144 | { | ||
145 | #ifdef BENCHMARK_PAGED_ARRAY | ||
146 | const size_t problemSize = 2560000; | ||
147 | openvdb::util::CpuTimer timer; | ||
148 | std::cerr << "\nProblem size for benchmark: " << problemSize << std::endl; | ||
149 | #else | ||
150 | 1 | const size_t problemSize = 256000; | |
151 | #endif | ||
152 | |||
153 | {//serial PagedArray::push_back (check return value) | ||
154 | 1 | openvdb::util::PagedArray<int> d; | |
155 | |||
156 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(d.isEmpty()); |
157 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.size()); |
158 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(10), d.log2PageSize()); |
159 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
160 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.pageCount()); |
161 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.capacity()); |
162 | |||
163 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(size_t(0), d.push_back_unsafe(10)); |
164 |
2/16✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
1 | EXPECT_EQ(10, d[0]); |
165 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!d.isEmpty()); |
166 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1), d.size()); |
167 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1), d.pageCount()); |
168 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageSize(), d.capacity()); |
169 | |||
170 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(size_t(1), d.push_back_unsafe(1)); |
171 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(2), d.size()); |
172 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1), d.pageCount()); |
173 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageSize(), d.capacity()); |
174 | |||
175 |
5/20✓ Branch 0 taken 1022 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 1022 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 1022 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1022 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
|
1023 | for (size_t i=2; i<d.pageSize(); ++i) EXPECT_EQ(i, d.push_back_unsafe(int(i))); |
176 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageSize(), d.size()); |
177 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1), d.pageCount()); |
178 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageSize(), d.capacity()); |
179 | |||
180 |
3/16✓ Branch 0 taken 1022 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1022 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
2045 | for (int i=2, n=int(d.size()); i<n; ++i) EXPECT_EQ(i, d[i]); |
181 | |||
182 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(d.pageSize(), d.push_back_unsafe(1)); |
183 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageSize()+1, d.size()); |
184 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(2), d.pageCount()); |
185 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(2*d.pageSize(), d.capacity()); |
186 | } | ||
187 | {//serial PagedArray::push_back_unsafe | ||
188 | #ifdef BENCHMARK_PAGED_ARRAY | ||
189 | timer.start("2: Serial PagedArray::push_back_unsafe with default page size"); | ||
190 | #endif | ||
191 | 1 | openvdb::util::PagedArray<size_t> d; | |
192 |
3/4✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 256000 times.
✗ Branch 4 not taken.
|
256001 | for (size_t i=0; i<problemSize; ++i) d.push_back_unsafe(i); |
193 | #ifdef BENCHMARK_PAGED_ARRAY | ||
194 | timer.stop(); | ||
195 | #endif | ||
196 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
197 |
3/16✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 256000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
512001 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, d[i]); |
198 | } | ||
199 | #ifdef BENCHMARK_PAGED_ARRAY | ||
200 | {//benchmark against a std::vector | ||
201 | timer.start("5: Serial std::vector::push_back"); | ||
202 | std::vector<size_t> v; | ||
203 | for (size_t i=0; i<problemSize; ++i) v.push_back(i); | ||
204 | timer.stop(); | ||
205 | EXPECT_EQ(problemSize, v.size()); | ||
206 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, v[i]); | ||
207 | } | ||
208 | {//benchmark against a std::deque | ||
209 | timer.start("6: Serial std::deque::push_back"); | ||
210 | std::deque<size_t> d; | ||
211 | for (size_t i=0; i<problemSize; ++i) d.push_back(i); | ||
212 | timer.stop(); | ||
213 | EXPECT_EQ(problemSize, d.size()); | ||
214 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, d[i]); | ||
215 | EXPECT_EQ(problemSize, d.size()); | ||
216 | |||
217 | std::deque<int> d2; | ||
218 | EXPECT_EQ(size_t(0), d2.size()); | ||
219 | d2.resize(1234); | ||
220 | EXPECT_EQ(size_t(1234), d2.size()); | ||
221 | } | ||
222 | {//benchmark against a tbb::concurrent_vector::push_back | ||
223 | timer.start("7: Serial tbb::concurrent_vector::push_back"); | ||
224 | tbb::concurrent_vector<size_t> v; | ||
225 | for (size_t i=0; i<problemSize; ++i) v.push_back(i); | ||
226 | timer.stop(); | ||
227 | EXPECT_EQ(problemSize, v.size()); | ||
228 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, v[i]); | ||
229 | |||
230 | v.clear(); | ||
231 | timer.start("8: Parallel tbb::concurrent_vector::push_back"); | ||
232 | using ArrayT = openvdb::util::PagedArray<size_t>; | ||
233 | tbb::parallel_for(tbb::blocked_range<size_t>(0, problemSize, ArrayT::pageSize()), | ||
234 | [&v](const tbb::blocked_range<size_t> &range){ | ||
235 | for (size_t i=range.begin(); i!=range.end(); ++i) v.push_back(i);}); | ||
236 | timer.stop(); | ||
237 | tbb::parallel_sort(v.begin(), v.end()); | ||
238 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, v[i]); | ||
239 | } | ||
240 | #endif | ||
241 | |||
242 | {//serial PagedArray::ValueBuffer::push_back | ||
243 | using ArrayT = openvdb::util::PagedArray<size_t, 3UL>; | ||
244 | 1 | ArrayT d; | |
245 | |||
246 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.size()); |
247 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.resize(problemSize); |
248 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
249 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
250 | // pageCount - 1 = max index >> log2PageSize | ||
251 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((problemSize-1)>>d.log2PageSize(), d.pageCount()-1); |
252 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
253 | |||
254 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.clear(); |
255 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.size()); |
256 | #ifdef BENCHMARK_PAGED_ARRAY | ||
257 | timer.start("9: Serial PagedArray::ValueBuffer::push_back"); | ||
258 | #endif | ||
259 | BufferPushBack<ArrayT> tmp(d); | ||
260 | tmp.serial(problemSize); | ||
261 | |||
262 | #ifdef BENCHMARK_PAGED_ARRAY | ||
263 | timer.stop(); | ||
264 | #endif | ||
265 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
266 |
3/16✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 256000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
512001 | for (size_t i=0; i<problemSize; ++i) EXPECT_EQ(i, d[i]); |
267 | |||
268 | 1 | size_t unsorted = 0; | |
269 |
2/2✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
|
256001 | for (size_t i=0, n=d.size(); i<n; ++i) unsorted += i != d[i]; |
270 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), unsorted); |
271 | |||
272 | #ifdef BENCHMARK_PAGED_ARRAY | ||
273 | timer.start("parallel sort"); | ||
274 | #endif | ||
275 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.sort(); |
276 | #ifdef BENCHMARK_PAGED_ARRAY | ||
277 | timer.stop(); | ||
278 | #endif | ||
279 |
3/16✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 256000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
512001 | for (size_t i=0, n=d.size(); i<n; ++i) EXPECT_EQ(i, d[i]); |
280 | |||
281 | |||
282 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
283 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
284 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d.size()-1)>>d.log2PageSize(), d.pageCount()-1); |
285 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
286 | |||
287 | |||
288 | } | ||
289 | {//parallel PagedArray::ValueBuffer::push_back | ||
290 | using ArrayT = openvdb::util::PagedArray<size_t>; | ||
291 | 1 | ArrayT d; | |
292 | #ifdef BENCHMARK_PAGED_ARRAY | ||
293 | timer.start("10: Parallel PagedArray::ValueBuffer::push_back"); | ||
294 | #endif | ||
295 | BufferPushBack<ArrayT> tmp(d); | ||
296 | tmp.parallel(problemSize); | ||
297 | #ifdef BENCHMARK_PAGED_ARRAY | ||
298 | timer.stop(); | ||
299 | #endif | ||
300 | |||
301 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
302 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
303 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d.size()-1)>>d.log2PageSize(), d.pageCount()-1); |
304 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
305 | |||
306 | // Test sorting | ||
307 | #ifdef BENCHMARK_PAGED_ARRAY | ||
308 | timer.start("parallel sort"); | ||
309 | #endif | ||
310 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.sort(); |
311 | #ifdef BENCHMARK_PAGED_ARRAY | ||
312 | timer.stop(); | ||
313 | #endif | ||
314 |
3/16✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 256000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
512001 | for (size_t i=0; i<d.size(); ++i) EXPECT_EQ(i, d[i]); |
315 | |||
316 | #ifdef BENCHMARK_PAGED_ARRAY | ||
317 | timer.start("parallel inverse sort"); | ||
318 | #endif | ||
319 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.invSort(); |
320 | #ifdef BENCHMARK_PAGED_ARRAY | ||
321 | timer.stop(); | ||
322 | #endif | ||
323 |
4/18✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✓ Branch 4 taken 256000 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 256000 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
256001 | for (size_t i=0, n=d.size()-1; i<=n; ++i) EXPECT_EQ(n-i, d[i]); |
324 | |||
325 |
3/18✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
|
1 | EXPECT_EQ(problemSize, d.push_back_unsafe(1)); |
326 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize+1, d.size()); |
327 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
328 | // pageCount - 1 = max index >> log2PageSize | ||
329 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)+(problemSize>>d.log2PageSize()), d.pageCount()); |
330 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
331 | |||
332 | // test PagedArray::fill | ||
333 | 1 | const size_t v = 13; | |
334 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.fill(v); |
335 |
3/16✓ Branch 0 taken 257024 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 257024 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
514049 | for (size_t i=0, n=d.capacity(); i<n; ++i) EXPECT_EQ(v, d[i]); |
336 | } | ||
337 | {//test PagedArray::ValueBuffer::flush | ||
338 | using ArrayT = openvdb::util::PagedArray<size_t>; | ||
339 | 1 | ArrayT d; | |
340 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.size()); |
341 | { | ||
342 | //ArrayT::ValueBuffer vc(d); | ||
343 | 1 | auto vc = d.getBuffer(); | |
344 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vc.push_back(1); |
345 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | vc.push_back(2); |
346 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d.size()); |
347 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | vc.flush(); |
348 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(2), d.size()); |
349 |
2/16✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
1 | EXPECT_EQ(size_t(1), d[0]); |
350 |
2/16✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
1 | EXPECT_EQ(size_t(2), d[1]); |
351 | } | ||
352 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(2), d.size()); |
353 |
2/16✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
1 | EXPECT_EQ(size_t(1), d[0]); |
354 |
2/16✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
|
1 | EXPECT_EQ(size_t(2), d[1]); |
355 | } | ||
356 | {//thread-local-storage PagedArray::ValueBuffer::push_back followed by parallel sort | ||
357 | using ArrayT = openvdb::util::PagedArray<size_t>; | ||
358 | 1 | ArrayT d; | |
359 | |||
360 | #ifdef BENCHMARK_PAGED_ARRAY | ||
361 | timer.start("11: Parallel TLS PagedArray::ValueBuffer::push_back"); | ||
362 | #endif | ||
363 | {// for some reason this: | ||
364 | TLS_BufferPushBack<ArrayT> tmp(d); | ||
365 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | tmp.parallel(problemSize); |
366 | }// is faster than: | ||
367 | //ArrayT::ValueBuffer exemplar(d);//dummy used for initialization | ||
368 | ///tbb::enumerable_thread_specific<ArrayT::ValueBuffer> pool(exemplar);//thread local storage pool of ValueBuffers | ||
369 | //tbb::parallel_for(tbb::blocked_range<size_t>(0, problemSize, d.pageSize()), | ||
370 | // [&pool](const tbb::blocked_range<size_t> &range){ | ||
371 | // ArrayT::ValueBuffer &buffer = pool.local(); | ||
372 | // for (size_t i=range.begin(); i!=range.end(); ++i) buffer.push_back(i);}); | ||
373 | //for (auto i=pool.begin(); i!=pool.end(); ++i) i->flush(); | ||
374 | #ifdef BENCHMARK_PAGED_ARRAY | ||
375 | timer.stop(); | ||
376 | #endif | ||
377 | //std::cerr << "Number of threads for TLS = " << (buffer.end()-buffer.begin()) << std::endl; | ||
378 | //d.print(); | ||
379 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
380 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
381 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d.size()-1)>>d.log2PageSize(), d.pageCount()-1); |
382 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
383 | |||
384 | // Not guaranteed to pass | ||
385 | //size_t unsorted = 0; | ||
386 | //for (size_t i=0, n=d.size(); i<n; ++i) unsorted += i != d[i]; | ||
387 | //EXPECT_TRUE( unsorted > 0 ); | ||
388 | |||
389 | #ifdef BENCHMARK_PAGED_ARRAY | ||
390 | timer.start("parallel sort"); | ||
391 | #endif | ||
392 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.sort(); |
393 | #ifdef BENCHMARK_PAGED_ARRAY | ||
394 | timer.stop(); | ||
395 | #endif | ||
396 |
3/16✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 256000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
512001 | for (size_t i=0, n=d.size(); i<n; ++i) EXPECT_EQ(i, d[i]); |
397 | } | ||
398 | {//parallel PagedArray::merge followed by parallel sort | ||
399 | using ArrayT = openvdb::util::PagedArray<size_t>; | ||
400 |
1/2✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | ArrayT d, d2; |
401 | |||
402 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
1 | tbb::parallel_for(tbb::blocked_range<size_t>(0, problemSize, d.pageSize()), |
403 | 128 | [&d](const tbb::blocked_range<size_t> &range){ | |
404 | 256 | ArrayT::ValueBuffer buffer(d); | |
405 |
3/4✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 128 times.
✓ Branch 3 taken 256000 times.
✗ Branch 4 not taken.
|
256256 | for (size_t i=range.begin(); i!=range.end(); ++i) buffer.push_back(i);}); |
406 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d.size()); |
407 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d.log2PageSize(), d.pageSize()); |
408 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d.size()-1)>>d.log2PageSize(), d.pageCount()-1); |
409 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d.pageCount()*d.pageSize(), d.capacity()); |
410 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!d.isPartiallyFull()); |
411 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.push_back_unsafe(problemSize); |
412 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(d.isPartiallyFull()); |
413 | |||
414 |
2/4✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
|
1 | tbb::parallel_for(tbb::blocked_range<size_t>(problemSize+1, 2*problemSize+1, d2.pageSize()), |
415 | 128 | [&d2](const tbb::blocked_range<size_t> &range){ | |
416 | 256 | ArrayT::ValueBuffer buffer(d2); | |
417 |
3/4✓ Branch 0 taken 256000 times.
✓ Branch 1 taken 128 times.
✓ Branch 3 taken 256000 times.
✗ Branch 4 not taken.
|
256256 | for (size_t i=range.begin(); i!=range.end(); ++i) buffer.push_back(i);}); |
418 | //for (size_t i=d.size(), n=i+problemSize; i<n; ++i) d2.push_back(i); | ||
419 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(!d2.isPartiallyFull()); |
420 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(problemSize, d2.size()); |
421 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(1)<<d2.log2PageSize(), d2.pageSize()); |
422 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d2.size()-1)>>d2.log2PageSize(), d2.pageCount()-1); |
423 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(d2.pageCount()*d2.pageSize(), d2.capacity()); |
424 | |||
425 | //d.print(); | ||
426 | //d2.print(); | ||
427 | #ifdef BENCHMARK_PAGED_ARRAY | ||
428 | timer.start("parallel PagedArray::merge"); | ||
429 | #endif | ||
430 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.merge(d2); |
431 | #ifdef BENCHMARK_PAGED_ARRAY | ||
432 | timer.stop(); | ||
433 | #endif | ||
434 |
1/16✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
1 | EXPECT_TRUE(d.isPartiallyFull()); |
435 | |||
436 | //d.print(); | ||
437 | //d2.print(); | ||
438 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(2*problemSize+1, d.size()); |
439 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ((d.size()-1)>>d.log2PageSize(), d.pageCount()-1); |
440 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d2.size()); |
441 |
2/16✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1 | EXPECT_EQ(size_t(0), d2.pageCount()); |
442 | |||
443 | #ifdef BENCHMARK_PAGED_ARRAY | ||
444 | timer.start("parallel sort of merged array"); | ||
445 | #endif | ||
446 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | d.sort(); |
447 | #ifdef BENCHMARK_PAGED_ARRAY | ||
448 | timer.stop(); | ||
449 | #endif | ||
450 |
3/16✓ Branch 0 taken 512001 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 512001 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
1024003 | for (size_t i=0, n=d.size(); i<n; ++i) EXPECT_EQ(i, d[i]); |
451 | } | ||
452 | {//examples in doxygen | ||
453 | {// 1 | ||
454 | 1 | openvdb::util::PagedArray<int> array; | |
455 |
3/4✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 100000 times.
✗ Branch 4 not taken.
|
100001 | for (int i=0; i<100000; ++i) array.push_back_unsafe(i); |
456 |
3/16✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 100000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
200001 | for (int i=0; i<100000; ++i) EXPECT_EQ(i, array[i]); |
457 | } | ||
458 | {//2A | ||
459 | 1 | openvdb::util::PagedArray<int> array; | |
460 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | openvdb::util::PagedArray<int>::ValueBuffer buffer(array); |
461 |
3/4✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 100000 times.
✗ Branch 4 not taken.
|
100001 | for (int i=0; i<100000; ++i) buffer.push_back(i); |
462 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | buffer.flush(); |
463 |
3/16✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 100000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
200001 | for (int i=0; i<100000; ++i) EXPECT_EQ(i, array[i]); |
464 | } | ||
465 | {//2B | ||
466 | 1 | openvdb::util::PagedArray<int> array; | |
467 | {//local scope of a single thread | ||
468 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | openvdb::util::PagedArray<int>::ValueBuffer buffer(array); |
469 |
3/4✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✓ Branch 3 taken 100000 times.
✗ Branch 4 not taken.
|
100001 | for (int i=0; i<100000; ++i) buffer.push_back(i); |
470 | } | ||
471 |
3/16✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 100000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
200001 | for (int i=0; i<100000; ++i) EXPECT_EQ(i, array[i]); |
472 | } | ||
473 | {//3A | ||
474 | 1 | openvdb::util::PagedArray<int> array; | |
475 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | array.resize(100000); |
476 |
2/2✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
|
100001 | for (int i=0; i<100000; ++i) array[i] = i; |
477 |
3/16✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 100000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
200001 | for (int i=0; i<100000; ++i) EXPECT_EQ(i, array[i]); |
478 | } | ||
479 | {//3B | ||
480 | using ArrayT = openvdb::util::PagedArray<int>; | ||
481 | 1 | ArrayT array; | |
482 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
1 | array.resize(100000); |
483 |
2/2✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
|
100001 | for (ArrayT::Iterator i=array.begin(); i!=array.end(); ++i) *i = int(i.pos()); |
484 |
3/16✓ Branch 0 taken 100000 times.
✓ Branch 1 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 100000 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
200001 | for (int i=0; i<100000; ++i) EXPECT_EQ(i, array[i]); |
485 | } | ||
486 | } | ||
487 | 1 | } | |
488 |