Skip to content

Commit 1918bbf

Browse files
committed
Added DomOrd growth tests
1 parent 4fae15b commit 1918bbf

2 files changed

Lines changed: 276 additions & 20 deletions

File tree

test/performance/dom_ord_pwmap_perf.cpp

Lines changed: 273 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ using SBG::LIB::Exp;
3434
using SBG::LIB::Map;
3535
using SBG::LIB::PWMap;
3636

37+
////////////////////////////////////////////////////////////////////////////////
38+
// Set operations --------------------------------------------------------------
39+
////////////////////////////////////////////////////////////////////////////////
40+
3741
TEST(DomOrdPWPerf, OrdDifference)
3842
{
3943
int N = 10000;
@@ -85,7 +89,133 @@ TEST(DomOrdPWPerf, OrdDisjointUnion)
8589
SUCCEED();
8690
}
8791

88-
TEST(DomOrdPWPerf, OrdRestrict)
92+
////////////////////////////////////////////////////////////////////////////////
93+
// PWMap operations ------------------------------------------------------------
94+
////////////////////////////////////////////////////////////////////////////////
95+
96+
class DomOrdPWPerf : public ::testing::TestWithParam<SBG::LIB::NAT> {
97+
protected:
98+
std::pair<PWMap, PWMap> quadraticTest(SBG::LIB::NAT map_sz) {
99+
SBG::LIB::NAT inter_sz = 100;
100+
SBG::LIB::NAT set_sz = 1;
101+
102+
Interval second_dim(0, 1, inter_sz - 1);
103+
PWMap pw1 = SBG::LIB::PW_FACT.createPWMap();
104+
PWMap pw2 = SBG::LIB::PW_FACT.createPWMap();
105+
for (unsigned int j = 0; j < map_sz; ++j) {
106+
Set dom1 = SBG::LIB::SET_FACT.createSet();
107+
Set dom2 = SBG::LIB::SET_FACT.createSet();
108+
SBG::LIB::NAT off = j*set_sz*inter_sz;
109+
for (unsigned int h = 0; h < set_sz; ++h) {
110+
Interval i1(off + (h*inter_sz), 1, off + (h + 1)*inter_sz - 1);
111+
SetPiece mdi1;
112+
mdi1.emplaceBack(i1);
113+
mdi1.emplaceBack(second_dim);
114+
dom1.emplaceBack(mdi1);
115+
116+
SBG::LIB::NAT off2 = off + inter_sz/2;
117+
Interval i2(off2 + (h*inter_sz), 1, off2 + (h + 1)*inter_sz - 1);
118+
SetPiece mdi2;
119+
mdi2.emplaceBack(i2);
120+
mdi2.emplaceBack(second_dim);
121+
dom2.emplaceBack(mdi2);
122+
}
123+
124+
LExp id;
125+
Exp multidim_id(1, id);
126+
127+
pw1.emplaceBack(Map(dom1, multidim_id));
128+
pw2.emplaceBack(Map(dom2, multidim_id));
129+
}
130+
131+
return {pw1, pw2};
132+
}
133+
};
134+
135+
TEST_P(DomOrdPWPerf, DomOrdEq)
136+
{
137+
SBG::Eval::setSetFactory(1);
138+
SBG::Eval::setPWFactory(2);
139+
140+
SBG::LIB::NAT map_sz = GetParam();
141+
bool result = false;
142+
if (map_sz < 10000) {
143+
auto [pw1, pw2] = quadraticTest(map_sz);
144+
145+
auto start = std::chrono::high_resolution_clock::now();
146+
result = pw1 == pw2;
147+
auto end = std::chrono::high_resolution_clock::now();
148+
auto curr_time = std::chrono::duration_cast<std::chrono::milliseconds>(
149+
end - start);
150+
std::cout << curr_time.count() << "\n";
151+
}
152+
153+
EXPECT_EQ(result, false);
154+
}
155+
156+
TEST_P(DomOrdPWPerf, DomOrdPlus)
157+
{
158+
SBG::Eval::setSetFactory(1);
159+
SBG::Eval::setPWFactory(2);
160+
161+
SBG::LIB::NAT map_sz = GetParam();
162+
auto [pw1, pw2] = quadraticTest(map_sz);
163+
164+
auto start = std::chrono::high_resolution_clock::now();
165+
pw1 + pw2;
166+
auto end = std::chrono::high_resolution_clock::now();
167+
auto curr_time = std::chrono::duration_cast<std::chrono::milliseconds>(
168+
end - start);
169+
std::cout << curr_time.count() << "\n";
170+
171+
SUCCEED();
172+
}
173+
174+
INSTANTIATE_TEST_SUITE_P(
175+
DomOrdPWGrowth,
176+
DomOrdPWPerf,
177+
::testing::Values(1000, 10000, 20000)
178+
);
179+
180+
TEST(DomOrdPWPerfOld, DomOrdDom)
181+
{
182+
SBG::LIB::NAT inter_sz = 100;
183+
SBG::LIB::NAT set_sz = 10;
184+
SBG::LIB::NAT map_sz = 1000;
185+
186+
SBG::Eval::setSetFactory(1);
187+
SBG::Eval::setPWFactory(2);
188+
189+
PWMap pw = SBG::LIB::PW_FACT.createPWMap();
190+
for (unsigned int k = 0; k < map_sz; ++k) {
191+
LExp le1(1, k);
192+
Exp exp;
193+
exp.emplaceBack(le1);
194+
exp.emplaceBack(le1);
195+
exp.emplaceBack(le1);
196+
SBG::LIB::NAT map_offset = k*inter_sz*set_sz;
197+
Set s = SBG::LIB::SET_FACT.createSet();
198+
for (unsigned int j = 0; j < set_sz; ++j) {
199+
Interval i1(map_offset + (j*inter_sz) + 1, 1, map_offset + (j+1)*inter_sz);
200+
SetPiece mdi;
201+
mdi.emplaceBack(i1);
202+
mdi.emplaceBack(i1);
203+
mdi.emplaceBack(i1);
204+
s.emplaceBack(mdi);
205+
}
206+
pw.emplaceBack(Map(s, exp));
207+
}
208+
209+
auto start = std::chrono::high_resolution_clock::now();
210+
pw.dom();
211+
auto end = std::chrono::high_resolution_clock::now();
212+
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
213+
std::cout << "PWL MAP ORDERED DOM TEST elapsed time: " << elapsed.count() << "ms\n";
214+
215+
SUCCEED();
216+
}
217+
218+
TEST(DomOrdPWPerfOld, DomOrdRestrict)
89219
{
90220
unsigned int inter_sz = 100;
91221
unsigned int set_sz = 10;
@@ -127,44 +257,175 @@ TEST(DomOrdPWPerf, OrdRestrict)
127257
SUCCEED();
128258
}
129259

130-
TEST(DomOrdPWPerf, OrdDom)
260+
// image
261+
262+
// preImage
263+
264+
// inverse
265+
266+
// composition
267+
268+
// mapInf
269+
270+
// fixedPoints
271+
272+
// concatenation
273+
274+
TEST(DomOrdPWPerfOld, DomOrdCombine)
131275
{
132-
SBG::LIB::NAT inter_sz = 100;
133-
SBG::LIB::NAT set_sz = 10;
134-
SBG::LIB::NAT map_sz = 1000;
276+
unsigned int inter_sz = 10000;
277+
unsigned int set_sz = 10;
278+
unsigned int map_sz = 100;
135279

136280
SBG::Eval::setSetFactory(1);
137281
SBG::Eval::setPWFactory(2);
138282

139283
PWMap pw = SBG::LIB::PW_FACT.createPWMap();
284+
PWMap pw2 = SBG::LIB::PW_FACT.createPWMap();
285+
for (unsigned int k = map_sz * 25 / 100; k < map_sz * 75 / 100; ++k) {
286+
LExp le1(1, k);
287+
Exp exp;
288+
exp.emplaceBack(le1);
289+
exp.emplaceBack(le1);
290+
exp.emplaceBack(le1);
291+
Set s1 = SBG::LIB::SET_FACT.createSet();
292+
int map_offset = k * inter_sz * set_sz;
293+
for (unsigned int j = 0; j < set_sz; ++j) {
294+
Interval i1(map_offset + (j*inter_sz) + 1, 1, map_offset + (j+1)*inter_sz);
295+
SBG::LIB::MultiDimInter mdi;
296+
mdi.emplaceBack(i1);
297+
mdi.emplaceBack(i1);
298+
mdi.emplaceBack(i1);
299+
s1.emplaceBack(mdi);
300+
}
301+
pw.emplaceBack(Map(s1, exp));
302+
303+
}
304+
140305
for (unsigned int k = 0; k < map_sz; ++k) {
141306
LExp le1(1, k);
142307
Exp exp;
143308
exp.emplaceBack(le1);
144309
exp.emplaceBack(le1);
145310
exp.emplaceBack(le1);
146-
SBG::LIB::NAT map_offset = k*inter_sz*set_sz;
147-
Set s = SBG::LIB::SET_FACT.createSet();
311+
Set s1 = SBG::LIB::SET_FACT.createSet();
312+
int map_offset = k * inter_sz * set_sz;
313+
map_offset += map_offset/2;
148314
for (unsigned int j = 0; j < set_sz; ++j) {
149315
Interval i1(map_offset + (j*inter_sz) + 1, 1, map_offset + (j+1)*inter_sz);
150-
SetPiece mdi;
316+
SBG::LIB::MultiDimInter mdi;
151317
mdi.emplaceBack(i1);
152318
mdi.emplaceBack(i1);
153319
mdi.emplaceBack(i1);
154-
s.emplaceBack(mdi);
320+
s1.emplaceBack(mdi);
155321
}
156-
pw.emplaceBack(Map(s, exp));
322+
pw2.emplaceBack(Map(s1, exp));
323+
157324
}
158325

159326
auto start = std::chrono::high_resolution_clock::now();
160-
pw.dom();
327+
pw.combine(pw2);
161328
auto end = std::chrono::high_resolution_clock::now();
162329
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
163-
std::cout << "PWL MAP ORDERED DOM TEST elapsed time: " << elapsed.count() << "ms\n";
330+
std::cout << "PWL MAP ORDERED COMBINE TEST elapsed time: " << elapsed.count() << "ms\n";
331+
332+
SUCCEED();
333+
}
334+
335+
// reduce
336+
337+
// minAdj
338+
339+
TEST(DomOrdPWPerfOld, DomOrdFirstInvSet)
340+
{
341+
unsigned int inter_sz = 10000;
342+
unsigned int set_sz = 100;
343+
unsigned int map_sz = 100;
344+
345+
SBG::Eval::setSetFactory(1);
346+
SBG::Eval::setPWFactory(0);
347+
348+
Set s = SBG::LIB::SET_FACT.createSet();
349+
PWMap pw = SBG::LIB::PW_FACT.createPWMap();
350+
for (unsigned int k = 0; k < map_sz; ++k) {
351+
LExp le1(1, k);
352+
Exp exp;
353+
exp.emplaceBack(le1);
354+
exp.emplaceBack(le1);
355+
exp.emplaceBack(le1);
356+
Set s1 = SBG::LIB::SET_FACT.createSet();
357+
int map_offset = k * inter_sz * set_sz;
358+
for (unsigned int j = 0; j < set_sz; ++j) {
359+
Interval i1(map_offset + (j*inter_sz) + 1, 1, map_offset + (j+1)*inter_sz);
360+
SBG::LIB::MultiDimInter mdi;
361+
mdi.emplaceBack(i1);
362+
mdi.emplaceBack(i1);
363+
mdi.emplaceBack(i1);
364+
s1.emplaceBack(mdi);
365+
}
366+
if(k > map_sz * 25 / 100 && k%2==0 && k < map_sz * 75 / 100 )
367+
s=s.cup(s1);
368+
pw.emplaceBack(Map(s1, exp));
369+
370+
}
371+
372+
auto start = std::chrono::high_resolution_clock::now();
373+
pw.firstInv(s);
374+
auto end = std::chrono::high_resolution_clock::now();
375+
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
376+
std::cout << "PWL MAP ORDERED FIRSTINV WITH SET TEST elapsed time: " << elapsed.count() << "ms\n";
164377

165378
SUCCEED();
166379
}
167380

381+
// equalImage
382+
383+
TEST(DomOrdPWPerf, DomOrdLessImage)
384+
{
385+
unsigned int inter_sz = 100;
386+
unsigned int set_sz = 10;
387+
unsigned int map_sz = 10000;
388+
389+
SBG::Eval::setSetFactory(1);
390+
SBG::Eval::setPWFactory(2);
391+
392+
PWMap pw = SBG::LIB::PW_FACT.createPWMap();
393+
for (unsigned int k = 0; k < map_sz; ++k) {
394+
LExp le1(1, k);
395+
Exp exp;
396+
exp.emplaceBack(le1);
397+
exp.emplaceBack(le1);
398+
exp.emplaceBack(le1);
399+
Set s1 = SBG::LIB::SET_FACT.createSet();
400+
int map_offset = k * inter_sz * set_sz;
401+
for (unsigned int j = 0; j < set_sz; ++j) {
402+
Interval i1(map_offset + (j*inter_sz) + 1, 1, map_offset + (j+1)*inter_sz);
403+
SBG::LIB::MultiDimInter mdi;
404+
mdi.emplaceBack(i1);
405+
mdi.emplaceBack(i1);
406+
mdi.emplaceBack(i1);
407+
s1.emplaceBack(mdi);
408+
}
409+
pw.emplaceBack(Map(s1, exp));
410+
411+
}
412+
413+
PWMap sum = pw+pw;
414+
auto start = std::chrono::high_resolution_clock::now();
415+
pw.lessImage(sum);
416+
auto end = std::chrono::high_resolution_clock::now();
417+
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
418+
std::cout << "PWL MAP ORDERED MINMAP TEST elapsed time: " << elapsed.count() << "ms\n";
419+
420+
SUCCEED();
421+
}
422+
423+
// sharedImage
424+
425+
// offsetDom
426+
427+
// compact
428+
168429
} // namespace Internal
169430

170431
} // namespace Test

test/performance/pw_map_perf.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,6 @@ TEST(PWMapPerf, UnordFirstInvSet)
612612
pw.emplaceBack(Map(s1, exp));
613613

614614
}
615-
616615

617616
auto start = std::chrono::high_resolution_clock::now();
618617
pw.firstInv(s);
@@ -623,7 +622,6 @@ TEST(PWMapPerf, UnordFirstInvSet)
623622
SUCCEED();
624623
}
625624

626-
627625
TEST(PWMapPerf, OrdFirstInvSet)
628626
{
629627
unsigned int inter_sz = 10000;
@@ -657,7 +655,6 @@ TEST(PWMapPerf, OrdFirstInvSet)
657655

658656
}
659657

660-
661658
auto start = std::chrono::high_resolution_clock::now();
662659
pw.firstInv(s);
663660
auto end = std::chrono::high_resolution_clock::now();
@@ -667,8 +664,6 @@ TEST(PWMapPerf, OrdFirstInvSet)
667664
SUCCEED();
668665
}
669666

670-
671-
672667
TEST(PWMapPerf, UnordCompact)
673668
{
674669
unsigned int inter_sz = 100;
@@ -864,9 +859,9 @@ TEST(PWMapPerf, UnordAdd)
864859

865860
TEST(PWMapPerf, OrdAdd)
866861
{
867-
unsigned int inter_sz = 10000;
868-
unsigned int set_sz = 100;
869-
unsigned int map_sz = 200;
862+
unsigned int inter_sz = 100;
863+
unsigned int set_sz = 10;
864+
unsigned int map_sz = 10;
870865

871866
SBG::Eval::setSetFactory(1);
872867
SBG::Eval::setPWFactory(1);

0 commit comments

Comments
 (0)