Skip to content

Commit 7556e32

Browse files
committed
perf(spsc): optimize out atomic read&write
1 parent 5e3e9ed commit 7556e32

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

implementations/lib/spsc/bounded_spsc.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ template <typename data_t> class Spsc {
166166
}
167167
}
168168

169-
awrite_sync(&data, this->_last_buf[this->_self_rank] % this->_capacity,
169+
write_sync(&data, this->_last_buf[this->_self_rank] % this->_capacity,
170170
this->_self_rank, this->_data_win);
171171
awrite_sync(&new_last, 0, this->_self_rank, this->_enqueuer_local_last_win);
172172
if (new_last % 10 == 0) {
@@ -193,7 +193,7 @@ template <typename data_t> class Spsc {
193193
for (int i = 0; i < size; ++i) {
194194
const uint64_t disp =
195195
(this->_last_buf[this->_self_rank] + i) % this->_capacity;
196-
awrite_async(data.data() + i, disp, this->_self_rank, this->_data_win);
196+
write_async(data.data() + i, disp, this->_self_rank, this->_data_win);
197197
}
198198
flush(this->_self_rank, this->_data_win);
199199
awrite_sync(&new_last, this->_self_rank, this->_dequeuer_rank,
@@ -215,7 +215,7 @@ template <typename data_t> class Spsc {
215215
}
216216

217217
data_t data;
218-
aread_sync(&data, this->_first_buf[this->_self_rank] % this->_capacity,
218+
read_sync(&data, this->_first_buf[this->_self_rank] % this->_capacity,
219219
this->_self_rank, this->_data_win);
220220

221221
*output = data;
@@ -241,13 +241,13 @@ template <typename data_t> class Spsc {
241241
[this->_cached_size[enqueuer_rank] - 1];
242242
--this->_cached_size[enqueuer_rank];
243243
} else {
244-
aread_async(output, this->_first_buf[enqueuer_rank] % this->_capacity,
244+
read_async(output, this->_first_buf[enqueuer_rank] % this->_capacity,
245245
enqueuer_rank, this->_data_win);
246246
int nreads = std::min(this->_batch_size,
247247
this->_last_buf[enqueuer_rank] - new_first);
248248
this->_cached_size[enqueuer_rank] = nreads;
249249
for (int i = 0; i < nreads; ++i) {
250-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
250+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
251251
(new_first + i) % this->_capacity, enqueuer_rank,
252252
this->_data_win);
253253
}
@@ -278,7 +278,7 @@ template <typename data_t> class Spsc {
278278
this->_first_buf[enqueuer_rank]);
279279
this->_cached_size[enqueuer_rank] = nreads;
280280
for (int i = 0; i < nreads; ++i) {
281-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
281+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
282282
(this->_first_buf[enqueuer_rank] + i) % this->_capacity,
283283
enqueuer_rank, this->_data_win);
284284
}

implementations/lib/spsc/bounded_spsc_2.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ template <typename data_t> class Spsc_2 {
147147
}
148148
}
149149

150-
awrite_sync(&data, this->_last_buf[this->_self_rank] % this->_capacity,
151-
this->_self_rank, this->_data_win);
150+
write_sync(&data, this->_last_buf[this->_self_rank] % this->_capacity,
151+
this->_self_rank, this->_data_win);
152152
awrite_sync(&new_last, 0, this->_self_rank, this->_last_win);
153153
if (new_last % 10 == 0) {
154154
awrite_sync(&new_last, this->_self_rank, this->_dequeuer_rank,
@@ -174,7 +174,7 @@ template <typename data_t> class Spsc_2 {
174174
for (int i = 0; i < size; ++i) {
175175
const uint64_t disp =
176176
(this->_last_buf[this->_self_rank] + i) % this->_capacity;
177-
awrite_async(data.data() + i, disp, this->_self_rank, this->_data_win);
177+
write_async(data.data() + i, disp, this->_self_rank, this->_data_win);
178178
}
179179
flush(this->_self_rank, this->_data_win);
180180
awrite_sync(&new_last, this->_self_rank, this->_dequeuer_rank,
@@ -196,8 +196,8 @@ template <typename data_t> class Spsc_2 {
196196
}
197197

198198
data_t data;
199-
aread_sync(&data, this->_first_buf[this->_self_rank] % this->_capacity,
200-
this->_self_rank, this->_data_win);
199+
read_sync(&data, this->_first_buf[this->_self_rank] % this->_capacity,
200+
this->_self_rank, this->_data_win);
201201

202202
*output = data;
203203
return true;
@@ -222,15 +222,15 @@ template <typename data_t> class Spsc_2 {
222222
[this->_cached_size[enqueuer_rank] - 1];
223223
--this->_cached_size[enqueuer_rank];
224224
} else {
225-
aread_async(output, this->_first_buf[enqueuer_rank] % this->_capacity,
226-
enqueuer_rank, this->_data_win);
225+
read_async(output, this->_first_buf[enqueuer_rank] % this->_capacity,
226+
enqueuer_rank, this->_data_win);
227227
int nreads = std::min(this->_batch_size,
228228
this->_last_buf[enqueuer_rank] - new_first);
229229
this->_cached_size[enqueuer_rank] = nreads;
230230
for (int i = 0; i < nreads; ++i) {
231-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
232-
(new_first + i) % this->_capacity, enqueuer_rank,
233-
this->_data_win);
231+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
232+
(new_first + i) % this->_capacity, enqueuer_rank,
233+
this->_data_win);
234234
}
235235
flush(enqueuer_rank, this->_data_win);
236236
}
@@ -259,9 +259,9 @@ template <typename data_t> class Spsc_2 {
259259
this->_first_buf[enqueuer_rank]);
260260
this->_cached_size[enqueuer_rank] = nreads;
261261
for (int i = 0; i < nreads; ++i) {
262-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
263-
(this->_first_buf[enqueuer_rank] + i) % this->_capacity,
264-
enqueuer_rank, this->_data_win);
262+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
263+
(this->_first_buf[enqueuer_rank] + i) % this->_capacity,
264+
enqueuer_rank, this->_data_win);
265265
}
266266
flush(enqueuer_rank, this->_data_win);
267267
}

implementations/lib/spsc/hosted_bounded_spsc.hpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,10 @@ template <typename data_t> class HostedBoundedSpsc {
169169
}
170170
}
171171

172-
awrite_sync(&data,
173-
start_offset(this->_self_rank) +
174-
this->_last_buf[this->_self_rank] % this->_capacity,
175-
this->_dequeuer_rank, this->_data_win);
172+
write_sync(&data,
173+
start_offset(this->_self_rank) +
174+
this->_last_buf[this->_self_rank] % this->_capacity,
175+
this->_dequeuer_rank, this->_data_win);
176176
awrite_sync(&new_last, 0, this->_self_rank, this->_enqueuer_local_last_win);
177177
if (new_last % 10 == 0) {
178178
awrite_sync(&new_last, this->_self_rank, this->_dequeuer_rank,
@@ -198,8 +198,8 @@ template <typename data_t> class HostedBoundedSpsc {
198198
for (int i = 0; i < size; ++i) {
199199
const uint64_t disp =
200200
(this->_last_buf[this->_self_rank] + i) % this->_capacity;
201-
awrite_async(data.data() + i, start_offset(this->_self_rank) + disp,
202-
this->_dequeuer_rank, this->_data_win);
201+
write_async(data.data() + i, start_offset(this->_self_rank) + disp,
202+
this->_dequeuer_rank, this->_data_win);
203203
}
204204
flush(this->_dequeuer_rank, this->_data_win);
205205
awrite_sync(&new_last, this->_self_rank, this->_dequeuer_rank,
@@ -221,10 +221,10 @@ template <typename data_t> class HostedBoundedSpsc {
221221
}
222222

223223
data_t data;
224-
aread_sync(&data,
225-
start_offset(this->_self_rank) +
226-
this->_first_buf[this->_self_rank] % this->_capacity,
227-
this->_dequeuer_rank, this->_data_win);
224+
read_sync(&data,
225+
start_offset(this->_self_rank) +
226+
this->_first_buf[this->_self_rank] % this->_capacity,
227+
this->_dequeuer_rank, this->_data_win);
228228

229229
*output = data;
230230
return true;
@@ -249,18 +249,18 @@ template <typename data_t> class HostedBoundedSpsc {
249249
[this->_cached_size[enqueuer_rank] - 1];
250250
--this->_cached_size[enqueuer_rank];
251251
} else {
252-
aread_async(output,
253-
start_offset(enqueuer_rank) +
254-
this->_first_buf[enqueuer_rank] % this->_capacity,
255-
this->_dequeuer_rank, this->_data_win);
252+
read_async(output,
253+
start_offset(enqueuer_rank) +
254+
this->_first_buf[enqueuer_rank] % this->_capacity,
255+
this->_dequeuer_rank, this->_data_win);
256256
int nreads = std::min(this->_batch_size,
257257
this->_last_buf[enqueuer_rank] - new_first);
258258
this->_cached_size[enqueuer_rank] = nreads;
259259
for (int i = 0; i < nreads; ++i) {
260-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
261-
start_offset(enqueuer_rank) +
262-
(new_first + i) % this->_capacity,
263-
this->_dequeuer_rank, this->_data_win);
260+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
261+
start_offset(enqueuer_rank) +
262+
(new_first + i) % this->_capacity,
263+
this->_dequeuer_rank, this->_data_win);
264264
}
265265
flush(this->_dequeuer_rank, this->_data_win);
266266
}
@@ -289,10 +289,10 @@ template <typename data_t> class HostedBoundedSpsc {
289289
this->_first_buf[enqueuer_rank]);
290290
this->_cached_size[enqueuer_rank] = nreads;
291291
for (int i = 0; i < nreads; ++i) {
292-
aread_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
293-
start_offset(enqueuer_rank) +
294-
(this->_first_buf[enqueuer_rank] + i) % this->_capacity,
295-
this->_dequeuer_rank, this->_data_win);
292+
read_async(this->_cached_data[enqueuer_rank] + nreads - i - 1,
293+
start_offset(enqueuer_rank) +
294+
(this->_first_buf[enqueuer_rank] + i) % this->_capacity,
295+
this->_dequeuer_rank, this->_data_win);
296296
}
297297
flush(this->_dequeuer_rank, this->_data_win);
298298
}

0 commit comments

Comments
 (0)