Skip to content

Commit a2199c1

Browse files
committed
Add arangodb
1 parent 50c483f commit a2199c1

File tree

8 files changed

+176
-73
lines changed

8 files changed

+176
-73
lines changed

future/bench/complex.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1+
#include <bind/blob.hpp>
2+
13
#include <cstddef>
24

35
#include <benchmark/benchmark.h>
46

57
namespace bench {
68

7-
template <std::size_t Size>
8-
struct Blob {
9-
std::byte buffer[Size];
10-
};
11-
129
template <typename Library, size_t N>
1310
void ComplexBlob(benchmark::State& state) {
1411
for (auto _ : state) {

future/bind/arangodb/future.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,39 @@ void ArangoDB::Contention(benchmark::State& state) {
198198
consumer.join();
199199
}
200200

201+
template <typename T>
202+
void ArangoDB::ComplexBenchmark() {
203+
auto fs = detail::adb::FsGen<T>();
204+
std::ignore = arangodb::futures::collectAll(fs.begin(), fs.end()).get();
205+
fs = detail::adb::FsGen<T>();
206+
std::ignore = arangodb::futures::collectAll /*should be Any, but we don't have it*/ (fs.begin(), fs.end()).get();
207+
fs = detail::adb::FsGen<T>();
208+
for (auto& f : fs) {
209+
f = std::move(f).thenValue([](T&& t) {
210+
return std::move(t);
211+
});
212+
}
213+
fs = detail::adb::FsGen<T>();
214+
for (auto& f : fs) {
215+
f = std::move(f).thenValue([](T&& t) {
216+
return arangodb::futures::makeFuture(T{std::move(t)});
217+
});
218+
}
219+
}
220+
221+
template void ArangoDB::ComplexBenchmark<arangodb::futures::Unit>();
222+
template void ArangoDB::ComplexBenchmark<Blob<2>>();
223+
template void ArangoDB::ComplexBenchmark<Blob<4>>();
224+
template void ArangoDB::ComplexBenchmark<Blob<8>>();
225+
template void ArangoDB::ComplexBenchmark<Blob<16>>();
226+
template void ArangoDB::ComplexBenchmark<Blob<32>>();
227+
template void ArangoDB::ComplexBenchmark<Blob<64>>();
228+
template void ArangoDB::ComplexBenchmark<Blob<128>>();
229+
template void ArangoDB::ComplexBenchmark<Blob<256>>();
230+
template void ArangoDB::ComplexBenchmark<Blob<512>>();
231+
template void ArangoDB::ComplexBenchmark<Blob<1024>>();
232+
template void ArangoDB::ComplexBenchmark<Blob<2048>>();
233+
template void ArangoDB::ComplexBenchmark<Blob<4096>>();
234+
template void ArangoDB::ComplexBenchmark<Blob<8192>>();
235+
201236
} // namespace bench

future/bind/arangodb/future.hpp

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <arangodb/futures/function2.hpp>
4+
#include <bind/blob.hpp>
45

56
#include <queue>
67
#include <vector>
@@ -82,24 +83,19 @@ struct ArangoDB {
8283
static void Contention(benchmark::State& state);
8384
};
8485

85-
template <typename T>
86-
void ArangoDB::ComplexBenchmark() {
87-
auto fs = detail::adb::FsGen<T>();
88-
std::ignore = arangodb::futures::collectAll(fs.begin(), fs.end()).value();
89-
fs = detail::adb::FsGen<T>();
90-
std::ignore = arangodb::futures::collectAll /*should be Any, but we don't have it*/ (fs.begin(), fs.end()).value();
91-
fs = detail::adb::FsGen<T>();
92-
for (auto& f : fs) {
93-
f = std::move(f).thenValue([](T&& t) {
94-
return std::move(t);
95-
});
96-
}
97-
fs = detail::adb::FsGen<T>();
98-
for (auto& f : fs) {
99-
f = std::move(f).thenValue([](T&& t) {
100-
return arangodb::futures::makeFuture(T{std::move(t)});
101-
});
102-
}
103-
}
86+
extern template void ArangoDB::ComplexBenchmark<arangodb::futures::Unit>();
87+
extern template void ArangoDB::ComplexBenchmark<Blob<2>>();
88+
extern template void ArangoDB::ComplexBenchmark<Blob<4>>();
89+
extern template void ArangoDB::ComplexBenchmark<Blob<8>>();
90+
extern template void ArangoDB::ComplexBenchmark<Blob<16>>();
91+
extern template void ArangoDB::ComplexBenchmark<Blob<32>>();
92+
extern template void ArangoDB::ComplexBenchmark<Blob<64>>();
93+
extern template void ArangoDB::ComplexBenchmark<Blob<128>>();
94+
extern template void ArangoDB::ComplexBenchmark<Blob<256>>();
95+
extern template void ArangoDB::ComplexBenchmark<Blob<512>>();
96+
extern template void ArangoDB::ComplexBenchmark<Blob<1024>>();
97+
extern template void ArangoDB::ComplexBenchmark<Blob<2048>>();
98+
extern template void ArangoDB::ComplexBenchmark<Blob<4096>>();
99+
extern template void ArangoDB::ComplexBenchmark<Blob<8192>>();
104100

105101
} // namespace bench

future/bind/blob.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#pragma once
2+
3+
#include <cstddef>
4+
5+
namespace bench {
6+
7+
template <std::size_t Size>
8+
struct Blob {
9+
std::byte buffer[Size];
10+
};
11+
12+
} // namespace bench

future/bind/folly/future.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,4 +188,39 @@ void Folly::Contention(benchmark::State& state) {
188188
consumer.join();
189189
}
190190

191+
template <typename T>
192+
void Folly::ComplexBenchmark() {
193+
auto fs = detail::fy::FsGen<T>();
194+
std::ignore = folly::collectAll(fs.begin(), fs.end()).value();
195+
fs = detail::fy::FsGen<T>();
196+
std::ignore = folly::collectAny(fs.begin(), fs.end()).value();
197+
fs = detail::fy::FsGen<T>();
198+
for (auto& f : fs) {
199+
f = std::move(f).thenValueInline([](T&& t) {
200+
return std::move(t);
201+
});
202+
}
203+
fs = detail::fy::FsGen<T>();
204+
for (auto& f : fs) {
205+
f = std::move(f).thenValueInline([](T&& t) {
206+
return folly::makeFuture(T{std::move(t)});
207+
});
208+
}
209+
}
210+
211+
template void Folly::ComplexBenchmark<folly::Unit>();
212+
template void Folly::ComplexBenchmark<Blob<2>>();
213+
template void Folly::ComplexBenchmark<Blob<4>>();
214+
template void Folly::ComplexBenchmark<Blob<8>>();
215+
template void Folly::ComplexBenchmark<Blob<16>>();
216+
template void Folly::ComplexBenchmark<Blob<32>>();
217+
template void Folly::ComplexBenchmark<Blob<64>>();
218+
template void Folly::ComplexBenchmark<Blob<128>>();
219+
template void Folly::ComplexBenchmark<Blob<256>>();
220+
template void Folly::ComplexBenchmark<Blob<512>>();
221+
template void Folly::ComplexBenchmark<Blob<1024>>();
222+
template void Folly::ComplexBenchmark<Blob<2048>>();
223+
template void Folly::ComplexBenchmark<Blob<4096>>();
224+
template void Folly::ComplexBenchmark<Blob<8192>>();
225+
191226
} // namespace bench

future/bind/folly/future.hpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <bind/blob.hpp>
4+
35
#include <vector>
46

57
#include <benchmark/benchmark.h>
@@ -77,24 +79,19 @@ struct Folly {
7779
static void Contention(benchmark::State& state);
7880
};
7981

80-
template <typename T>
81-
void Folly::ComplexBenchmark() {
82-
auto fs = detail::fy::FsGen<T>();
83-
std::ignore = folly::collectAll(fs.begin(), fs.end()).value();
84-
fs = detail::fy::FsGen<T>();
85-
std::ignore = folly::collectAny(fs.begin(), fs.end()).value();
86-
fs = detail::fy::FsGen<T>();
87-
for (auto& f : fs) {
88-
f = std::move(f).thenValueInline([](T&& t) {
89-
return std::move(t);
90-
});
91-
}
92-
fs = detail::fy::FsGen<T>();
93-
for (auto& f : fs) {
94-
f = std::move(f).thenValueInline([](T&& t) {
95-
return folly::makeFuture(T{std::move(t)});
96-
});
97-
}
98-
}
82+
extern template void Folly::ComplexBenchmark<folly::Unit>();
83+
extern template void Folly::ComplexBenchmark<Blob<2>>();
84+
extern template void Folly::ComplexBenchmark<Blob<4>>();
85+
extern template void Folly::ComplexBenchmark<Blob<8>>();
86+
extern template void Folly::ComplexBenchmark<Blob<16>>();
87+
extern template void Folly::ComplexBenchmark<Blob<32>>();
88+
extern template void Folly::ComplexBenchmark<Blob<64>>();
89+
extern template void Folly::ComplexBenchmark<Blob<128>>();
90+
extern template void Folly::ComplexBenchmark<Blob<256>>();
91+
extern template void Folly::ComplexBenchmark<Blob<512>>();
92+
extern template void Folly::ComplexBenchmark<Blob<1024>>();
93+
extern template void Folly::ComplexBenchmark<Blob<2048>>();
94+
extern template void Folly::ComplexBenchmark<Blob<4096>>();
95+
extern template void Folly::ComplexBenchmark<Blob<8192>>();
9996

10097
} // namespace bench

future/bind/yaclib/future.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,50 @@ void YACLib::Contention(benchmark::State& state) {
196196
consumer.join();
197197
}
198198

199+
template <typename T>
200+
void YACLib::ComplexBenchmark() {
201+
auto fs = detail::yb::FsGen<T>();
202+
(void)WhenAll(fs.begin(), fs.end()).Get().Ok();
203+
fs = detail::yb::FsGen<T>();
204+
(void)WhenAny(fs.begin(), fs.end()).Get().Ok();
205+
fs = detail::yb::FsGen<T>();
206+
for (auto& f : fs) {
207+
if constexpr (std::is_void_v<T>) {
208+
f = std::move(f).ThenInline([] {
209+
});
210+
} else {
211+
f = std::move(f).ThenInline([](T&& t) {
212+
return std::move(t);
213+
});
214+
}
215+
}
216+
fs = detail::yb::FsGen<T>();
217+
for (auto& f : fs) {
218+
if constexpr (std::is_void_v<T>) {
219+
f = std::move(f).ThenInline([](yaclib::Result<T>&& /*TODO(MBkkt) remove this*/) {
220+
return yaclib::MakeFuture();
221+
});
222+
} else {
223+
f = std::move(f).ThenInline([](T&& t) {
224+
return yaclib::MakeFuture(std::move(t));
225+
});
226+
}
227+
}
228+
}
229+
230+
template void YACLib::ComplexBenchmark<void>();
231+
template void YACLib::ComplexBenchmark<Blob<2>>();
232+
template void YACLib::ComplexBenchmark<Blob<4>>();
233+
template void YACLib::ComplexBenchmark<Blob<8>>();
234+
template void YACLib::ComplexBenchmark<Blob<16>>();
235+
template void YACLib::ComplexBenchmark<Blob<32>>();
236+
template void YACLib::ComplexBenchmark<Blob<64>>();
237+
template void YACLib::ComplexBenchmark<Blob<128>>();
238+
template void YACLib::ComplexBenchmark<Blob<256>>();
239+
template void YACLib::ComplexBenchmark<Blob<512>>();
240+
template void YACLib::ComplexBenchmark<Blob<1024>>();
241+
template void YACLib::ComplexBenchmark<Blob<2048>>();
242+
template void YACLib::ComplexBenchmark<Blob<4096>>();
243+
template void YACLib::ComplexBenchmark<Blob<8192>>();
244+
199245
} // namespace bench

future/bind/yaclib/future.hpp

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <bind/blob.hpp>
34
#include <bind/yaclib/intrusive_list.hpp>
45
#include <yaclib/algo/when_all.hpp>
56
#include <yaclib/algo/when_any.hpp>
@@ -106,35 +107,19 @@ struct YACLib {
106107
static void Contention(benchmark::State& state);
107108
};
108109

109-
template <typename T>
110-
void YACLib::ComplexBenchmark() {
111-
auto fs = detail::yb::FsGen<T>();
112-
(void)WhenAll(fs.begin(), fs.end()).Get().Ok();
113-
fs = detail::yb::FsGen<T>();
114-
(void)WhenAny(fs.begin(), fs.end()).Get().Ok();
115-
fs = detail::yb::FsGen<T>();
116-
for (auto& f : fs) {
117-
if constexpr (std::is_void_v<T>) {
118-
f = std::move(f).ThenInline([] {
119-
});
120-
} else {
121-
f = std::move(f).ThenInline([](T&& t) {
122-
return std::move(t);
123-
});
124-
}
125-
}
126-
fs = detail::yb::FsGen<T>();
127-
for (auto& f : fs) {
128-
if constexpr (std::is_void_v<T>) {
129-
f = std::move(f).ThenInline([](yaclib::Result<T>&& /*TODO(MBkkt) remove this*/) {
130-
return yaclib::MakeFuture();
131-
});
132-
} else {
133-
f = std::move(f).ThenInline([](T&& t) {
134-
return yaclib::MakeFuture(std::move(t));
135-
});
136-
}
137-
}
138-
}
110+
extern template void YACLib::ComplexBenchmark<void>();
111+
extern template void YACLib::ComplexBenchmark<Blob<2>>();
112+
extern template void YACLib::ComplexBenchmark<Blob<4>>();
113+
extern template void YACLib::ComplexBenchmark<Blob<8>>();
114+
extern template void YACLib::ComplexBenchmark<Blob<16>>();
115+
extern template void YACLib::ComplexBenchmark<Blob<32>>();
116+
extern template void YACLib::ComplexBenchmark<Blob<64>>();
117+
extern template void YACLib::ComplexBenchmark<Blob<128>>();
118+
extern template void YACLib::ComplexBenchmark<Blob<256>>();
119+
extern template void YACLib::ComplexBenchmark<Blob<512>>();
120+
extern template void YACLib::ComplexBenchmark<Blob<1024>>();
121+
extern template void YACLib::ComplexBenchmark<Blob<2048>>();
122+
extern template void YACLib::ComplexBenchmark<Blob<4096>>();
123+
extern template void YACLib::ComplexBenchmark<Blob<8192>>();
139124

140125
} // namespace bench

0 commit comments

Comments
 (0)