27
27
#include < memory>
28
28
#include < span>
29
29
#include < thread>
30
+ #include < utility>
30
31
#include < vector>
31
32
32
33
#if __has_include(<memory_resource>)
33
- # include < memory_resource>
34
+ # include < memory_resource> // IWYU pragma: keep
34
35
namespace pmr = std::pmr;
35
36
#else
36
37
# define STDEXEC_NO_MONOTONIC_BUFFER_RESOURCE 1
@@ -41,15 +42,15 @@ struct statistics {
41
42
double ops_per_sec;
42
43
};
43
44
44
- statistics compute_perf (
45
+ auto compute_perf (
45
46
std::chrono::steady_clock::time_point start,
46
47
std::chrono::steady_clock::time_point end,
47
- std::size_t total_scheds) {
48
+ std::size_t total_scheds) -> statistics {
48
49
auto dur = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start);
49
50
auto dur_ms = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
50
51
auto dur_dbl = std::chrono::duration_cast<std::chrono::duration<double >>(dur);
51
52
double ops_per_sec = static_cast <double >(total_scheds) / dur_dbl.count ();
52
- return {dur_ms, ops_per_sec};
53
+ return {. total_time_ms = dur_ms, . ops_per_sec = ops_per_sec};
53
54
}
54
55
55
56
struct statistics_all {
@@ -61,12 +62,12 @@ struct statistics_all {
61
62
double stddev;
62
63
};
63
64
64
- statistics_all compute_perf (
65
+ auto compute_perf (
65
66
std::span<const std::chrono::steady_clock::time_point> start,
66
67
std::span<const std::chrono::steady_clock::time_point> end,
67
68
std::size_t i0,
68
69
std::size_t i,
69
- std::size_t total_scheds) {
70
+ std::size_t total_scheds) -> statistics_all {
70
71
double average = 0.0 ;
71
72
double max = 0.0 ;
72
73
double min = std::numeric_limits<double >::max ();
@@ -85,7 +86,13 @@ statistics_all compute_perf(
85
86
variance /= static_cast <double >(i + 1 - i0);
86
87
double stddev = std::sqrt (variance);
87
88
auto stats = compute_perf (start[i], end[i], total_scheds);
88
- statistics_all all{stats.total_time_ms , stats.ops_per_sec , average, max, min, stddev};
89
+ statistics_all all{
90
+ .total_time_ms = stats.total_time_ms ,
91
+ .ops_per_sec = stats.ops_per_sec ,
92
+ .average = average,
93
+ .max = max,
94
+ .min = min,
95
+ .stddev = stddev};
89
96
return all;
90
97
}
91
98
@@ -119,15 +126,15 @@ void my_main(int argc, char** argv, exec::numa_policy policy = exec::get_numa_po
119
126
std::atomic<bool > stop{false };
120
127
#ifndef STDEXEC_NO_MONOTONIC_BUFFER_RESOURCE
121
128
std::size_t buffer_size = 2000 << 20 ;
122
- for (std::size_t i = 0 ; i < static_cast < std::size_t >( nthreads); ++i) {
129
+ for (std::size_t i = 0 ; std::cmp_less (i, nthreads); ++i) {
123
130
exec::numa_allocator<char > alloc (policy.thread_index_to_node (i));
124
131
buffers.push_back (
125
132
std::unique_ptr<char , numa_deleter>{
126
- alloc.allocate (buffer_size), numa_deleter{buffer_size, alloc}
133
+ alloc.allocate (buffer_size), numa_deleter{. size_ = buffer_size, . allocator_ = alloc}
127
134
});
128
135
}
129
136
#endif
130
- for (std::size_t i = 0 ; i < static_cast < std::size_t >( nthreads); ++i) {
137
+ for (std::size_t i = 0 ; std::cmp_less (i, nthreads); ++i) {
131
138
threads.emplace_back (
132
139
RunThread{},
133
140
std::ref (*pool),
0 commit comments