Skip to content

Commit 425858c

Browse files
authored
Fix build for darwin x86_64 (#6174)
1 parent 4313e61 commit 425858c

File tree

4 files changed

+42
-42
lines changed

4 files changed

+42
-42
lines changed

ydb/library/actors/queues/mpmc_bitmap_buffer.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ struct TMPMCBitMapBuffer {
1515

1616
const ui64 MaxSize;
1717
const ui64 SizeBits;
18-
NThreading::TPadded<TArrayHolder<std::atomic_uint64_t>> Buffer;
19-
NThreading::TPadded<TArrayHolder<NThreading::TPadded<std::atomic_uint64_t>>> Bitmap;
20-
NThreading::TPadded<std::atomic_uint64_t> TailSize = 0;
18+
NThreading::TPadded<TArrayHolder<std::atomic<ui64>>> Buffer;
19+
NThreading::TPadded<TArrayHolder<NThreading::TPadded<std::atomic<ui64>>>> Bitmap;
20+
NThreading::TPadded<std::atomic<ui64>> TailSize = 0;
2121

2222
struct TTailSize {
2323
ui32 Tail = 0;
@@ -57,8 +57,8 @@ struct TMPMCBitMapBuffer {
5757
TMPMCBitMapBuffer(ui64 sizeBits)
5858
: MaxSize(1ull << sizeBits)
5959
, SizeBits(sizeBits)
60-
, Buffer(new std::atomic_uint64_t[MaxSize])
61-
, Bitmap(new NThreading::TPadded<std::atomic_uint64_t>[MaxSize / 64])
60+
, Buffer(new std::atomic<ui64>[MaxSize])
61+
, Bitmap(new NThreading::TPadded<std::atomic<ui64>>[MaxSize / 64])
6262
{
6363
for (ui32 idx = 0; idx < MaxSize; ++idx) {
6464
if (idx % 64 == 0) {
@@ -138,7 +138,7 @@ struct TMPMCBitMapBuffer {
138138
ui64 generation = pos / MaxSize;
139139
ui64 expected = TSlot::MakeEmpty(generation);
140140
TSlot parsedSlot = TSlot::Recognise(expected);
141-
std::atomic_uint64_t &slot = Buffer[ConvertIdx(pos)];
141+
std::atomic<ui64> &slot = Buffer[ConvertIdx(pos)];
142142
bool success = false;
143143
do {
144144
if (slot.compare_exchange_strong(expected, el, std::memory_order_acq_rel)) {
@@ -244,7 +244,7 @@ struct TMPMCBitMapBuffer {
244244
}
245245
pos = *nextPos;
246246
while (pos < stopPosition) {
247-
std::atomic_uint64_t &slot = Buffer[ConvertIdx(pos)];
247+
std::atomic<ui64> &slot = Buffer[ConvertIdx(pos)];
248248
ui64 expected = slot.load(std::memory_order_acquire);
249249
TSlot parsedSlot = TSlot::Recognise(expected);
250250
if (!parsedSlot.IsEmpty) {
@@ -271,7 +271,7 @@ struct TMPMCBitMapBuffer {
271271
idx %= MaxSize;
272272
ui64 maskIdx = idx / 64;
273273
ui64 bitIdx = idx % 64;
274-
std::atomic_uint64_t &mask = Bitmap[maskIdx];
274+
std::atomic<ui64> &mask = Bitmap[maskIdx];
275275
ui64 currentMask = mask.load(std::memory_order_acquire);
276276
return currentMask & (1ull << bitIdx);
277277
}
@@ -282,7 +282,7 @@ struct TMPMCBitMapBuffer {
282282
ui64 maskIdx = idx / 64;
283283
ui64 bitIdx = idx % 64;
284284
// // Cerr << "Set bit at maskIdx: " << maskIdx << " bitIdx: " << bitIdx << Endl;
285-
std::atomic_uint64_t &mask = Bitmap[maskIdx];
285+
std::atomic<ui64> &mask = Bitmap[maskIdx];
286286
ui64 currentMask = mask.load(std::memory_order_acquire);
287287
for (;;) {
288288
if (currentMask & (1ull << bitIdx)) {
@@ -302,7 +302,7 @@ struct TMPMCBitMapBuffer {
302302
ui64 maskIdx = idx / 64;
303303
ui64 bitIdx = idx % 64;
304304
// // Cerr << "Unset bit at maskIdx: " << maskIdx << " bitIdx: " << bitIdx << Endl;
305-
std::atomic_uint64_t &mask = Bitmap[maskIdx];
305+
std::atomic<ui64> &mask = Bitmap[maskIdx];
306306
ui64 currentMask = mask.load(std::memory_order_acquire);
307307
for (;;) {
308308
if (!(currentMask & (1ull << bitIdx))) {

ydb/library/actors/queues/mpmc_ring_queue_v1.h

+13-13
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ struct TMPMCRingQueueV1 {
6161

6262
static constexpr ui64 PushStopBit = 1ull << 63;
6363
static constexpr ui64 HasOvertakenSlotsBit = 1ull << 63;
64-
NThreading::TPadded<std::atomic_uint64_t> Tail{0};
65-
NThreading::TPadded<std::atomic_uint64_t> Head{0};
66-
NThreading::TPadded<TArrayHolder<std::atomic_uint64_t>> Buffer;
64+
NThreading::TPadded<std::atomic<ui64>> Tail{0};
65+
NThreading::TPadded<std::atomic<ui64>> Head{0};
66+
NThreading::TPadded<TArrayHolder<std::atomic<ui64>>> Buffer;
6767
static constexpr ui64 OvertakenSlotBufferSize = 4'096;
68-
NThreading::TPadded<std::atomic_uint64_t> OvertakenHeadTail{0};
69-
NThreading::TPadded<TArrayHolder<std::atomic_uint64_t>> OvertakenSlotBuffer;
68+
NThreading::TPadded<std::atomic<ui64>> OvertakenHeadTail{0};
69+
NThreading::TPadded<TArrayHolder<std::atomic<ui64>>> OvertakenSlotBuffer;
7070
ui64 LocalGeneration = 0;
7171

7272
static constexpr ui32 ConvertIdx(ui32 idx) {
@@ -94,8 +94,8 @@ struct TMPMCRingQueueV1 {
9494
}
9595

9696
TMPMCRingQueueV1()
97-
: Buffer(new std::atomic_uint64_t[MaxSize])
98-
, OvertakenSlotBuffer(new std::atomic_uint64_t[OvertakenSlotBufferSize])
97+
: Buffer(new std::atomic<ui64>[MaxSize])
98+
, OvertakenSlotBuffer(new std::atomic<ui64>[OvertakenSlotBufferSize])
9999
{
100100
for (ui32 idx = 0; idx < MaxSize; ++idx) {
101101
Buffer[idx] = TSlot::MakeEmpty(0);
@@ -113,7 +113,7 @@ struct TMPMCRingQueueV1 {
113113
ui64 currentTail = Tail.fetch_add(1, std::memory_order_relaxed);
114114
OBSERVE(AfterReserveSlotInFastPush);
115115

116-
std::atomic_uint64_t &currentSlot = Buffer[ConvertIdx(currentTail)];
116+
std::atomic<ui64> &currentSlot = Buffer[ConvertIdx(currentTail)];
117117
TSlot slot;
118118
ui64 expected = TSlot::MakeEmpty(0);
119119
do {
@@ -155,12 +155,12 @@ struct TMPMCRingQueueV1 {
155155
ui64 prevValue = 0;
156156
for (ui32 idx = head; idx < tail; ++idx) {
157157
ui64 slotIdx = ConvertOvertakenIdx(idx);
158-
std::atomic_uint64_t &currentSlot = OvertakenSlotBuffer[slotIdx];
158+
std::atomic<ui64> &currentSlot = OvertakenSlotBuffer[slotIdx];
159159
ui64 value = currentSlot.load(std::memory_order_acquire);
160160
TSlot slot = TSlot::Recognise(value);
161161

162162
if (!slot.IsEmpty) {
163-
std::atomic_uint64_t &realCurrentSlot = Buffer[slot.Value];
163+
std::atomic<ui64> &realCurrentSlot = Buffer[slot.Value];
164164
ui64 realValue = realCurrentSlot.load(std::memory_order_acquire);
165165
TSlot realSlot = TSlot::Recognise(realValue);
166166
if (realSlot.IsOvertaken) {
@@ -213,7 +213,7 @@ struct TMPMCRingQueueV1 {
213213
ui64 currentTail = OvertakenHeadTail.fetch_add(1, std::memory_order_relaxed);
214214
ui32 generation = currentTail / MaxSize;
215215

216-
std::atomic_uint64_t &currentSlot = OvertakenSlotBuffer[ConvertOvertakenIdx(currentTail)];
216+
std::atomic<ui64> &currentSlot = OvertakenSlotBuffer[ConvertOvertakenIdx(currentTail)];
217217
TSlot slot;
218218
ui64 expected = TSlot::MakeEmpty(generation);
219219
do {
@@ -226,7 +226,7 @@ struct TMPMCRingQueueV1 {
226226
SpinLockPause();
227227
}
228228
}
229-
std::optional<ui32> InvalidateSlot(std::atomic_uint64_t &currentSlot, ui64 generation) {
229+
std::optional<ui32> InvalidateSlot(std::atomic<ui64> &currentSlot, ui64 generation) {
230230

231231
ui64 expected = currentSlot.load(std::memory_order_acquire);
232232
TSlot slot = TSlot::Recognise(expected);
@@ -266,7 +266,7 @@ struct TMPMCRingQueueV1 {
266266
ui32 generation = currentHead / MaxSize;
267267

268268
ui64 slotIdx = ConvertIdx(currentHead);
269-
std::atomic_uint64_t &currentSlot = Buffer[slotIdx];
269+
std::atomic<ui64> &currentSlot = Buffer[slotIdx];
270270

271271
ui64 expected = currentSlot.load(std::memory_order_relaxed);
272272
TSlot slot = TSlot::Recognise(expected);

ydb/library/actors/queues/mpmc_ring_queue_v2.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ struct TMPMCRingQueueV2 {
6262

6363
static constexpr ui64 PushStopBit = 1ull << 63;
6464
static constexpr ui64 HasOvertakenSlotsBit = 1ull << 63;
65-
NThreading::TPadded<std::atomic_uint64_t> Tail{0};
66-
NThreading::TPadded<std::atomic_uint64_t> Head{0};
67-
NThreading::TPadded<TArrayHolder<std::atomic_uint64_t>> Buffer;
65+
NThreading::TPadded<std::atomic<ui64>> Tail{0};
66+
NThreading::TPadded<std::atomic<ui64>> Head{0};
67+
NThreading::TPadded<TArrayHolder<std::atomic<ui64>>> Buffer;
6868
static constexpr ui64 OvertakenBufferSizeBits = 6;
6969
NThreading::TPadded<TMPMCBitMapBuffer> OvertakenBuffer;
7070
ui64 LocalGeneration = 0;
@@ -94,7 +94,7 @@ struct TMPMCRingQueueV2 {
9494
}
9595

9696
TMPMCRingQueueV2()
97-
: Buffer(new std::atomic_uint64_t[MaxSize])
97+
: Buffer(new std::atomic<ui64>[MaxSize])
9898
, OvertakenBuffer(OvertakenBufferSizeBits)
9999
{
100100
for (ui32 idx = 0; idx < MaxSize; ++idx) {
@@ -126,7 +126,7 @@ struct TMPMCRingQueueV2 {
126126
ui64 generation = currentTail / MaxSize;
127127
OBSERVE(AfterReserveSlotInFastPush);
128128

129-
std::atomic_uint64_t &currentSlot = Buffer[ConvertIdx(currentTail)];
129+
std::atomic<ui64> &currentSlot = Buffer[ConvertIdx(currentTail)];
130130
TSlot slot;
131131
ui64 expected = TSlot::MakeEmpty(generation);
132132
do {
@@ -157,7 +157,7 @@ struct TMPMCRingQueueV2 {
157157
// Cerr << "realHead: " << realHead << Endl;
158158
// Cerr << "generation: " << generation << Endl;
159159
OvertakenBuffer.Find(realHead, [&](ui64 idx) {
160-
std::atomic_uint64_t &realCurrentSlot = Buffer[idx];
160+
std::atomic<ui64> &realCurrentSlot = Buffer[idx];
161161
ui64 realValue = realCurrentSlot.load(std::memory_order_acquire);
162162
TSlot realSlot = TSlot::Recognise(realValue);
163163
if (!realSlot.IsEmpty) {
@@ -172,7 +172,7 @@ struct TMPMCRingQueueV2 {
172172
return result;
173173
}
174174

175-
std::optional<ui32> InvalidateSlot(std::atomic_uint64_t &currentSlot, ui64 generation) {
175+
std::optional<ui32> InvalidateSlot(std::atomic<ui64> &currentSlot, ui64 generation) {
176176
ui64 expected = currentSlot.load(std::memory_order_acquire);
177177
TSlot slot = TSlot::Recognise(expected);
178178
while (!slot.IsEmpty || slot.Generation <= generation) {
@@ -212,7 +212,7 @@ struct TMPMCRingQueueV2 {
212212
ui32 generation = currentHead / MaxSize;
213213

214214
ui64 slotIdx = ConvertIdx(currentHead);
215-
std::atomic_uint64_t &currentSlot = Buffer[slotIdx];
215+
std::atomic<ui64> &currentSlot = Buffer[slotIdx];
216216

217217
ui64 expected = currentSlot.load(std::memory_order_relaxed);
218218
TSlot slot = TSlot::Recognise(expected);

ydb/library/actors/queues/mpmc_ring_queue_v3.h

+11-11
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ struct TMPMCRingQueueV3 {
7676
}
7777
};
7878

79-
NThreading::TPadded<std::atomic_uint64_t> Tail{0};
80-
NThreading::TPadded<std::atomic_uint64_t> Head{0};
81-
NThreading::TPadded<TArrayHolder<std::atomic_uint64_t>> Buffer;
79+
NThreading::TPadded<std::atomic<ui64>> Tail{0};
80+
NThreading::TPadded<std::atomic<ui64>> Head{0};
81+
NThreading::TPadded<TArrayHolder<std::atomic<ui64>>> Buffer;
8282
NThreading::TPadded<TUnorderedCache<ui32, 512, 4>> OvertakenQueue;
83-
NThreading::TPadded<std::atomic_uint64_t> ReadRevolvingCounter{0};
84-
NThreading::TPadded<std::atomic_uint64_t> WriteRevolvingCounter{0};
85-
NThreading::TPadded<std::atomic_uint64_t> OvertakenSlots{0};
83+
NThreading::TPadded<std::atomic<ui64>> ReadRevolvingCounter{0};
84+
NThreading::TPadded<std::atomic<ui64>> WriteRevolvingCounter{0};
85+
NThreading::TPadded<std::atomic<ui64>> OvertakenSlots{0};
8686

8787
static constexpr ui32 ConvertIdx(ui32 idx) {
8888
idx = idx % MaxSize;
@@ -109,7 +109,7 @@ struct TMPMCRingQueueV3 {
109109
}
110110

111111
TMPMCRingQueueV3()
112-
: Buffer(new std::atomic_uint64_t[MaxSize])
112+
: Buffer(new std::atomic<ui64>[MaxSize])
113113
{
114114
for (ui32 idx = 0; idx < MaxSize; ++idx) {
115115
Buffer[idx] = TSlot::MakeEmpty(0);
@@ -125,7 +125,7 @@ struct TMPMCRingQueueV3 {
125125
OBSERVE(AfterReserveSlotInFastPush);
126126

127127
ui64 slotIdx = ConvertIdx(currentTail);
128-
std::atomic_uint64_t &currentSlot = Buffer[slotIdx];
128+
std::atomic<ui64> &currentSlot = Buffer[slotIdx];
129129
TSlot slot;
130130
ui64 expected = TSlot::MakeEmpty(0);
131131
do {
@@ -157,7 +157,7 @@ struct TMPMCRingQueueV3 {
157157
std::optional<ui32> TryPopFromOvertakenSlots() {
158158
ui32 el = OvertakenQueue.Pop(ReadRevolvingCounter.fetch_add(1, std::memory_order_relaxed));
159159
if (el) {
160-
std::atomic_uint64_t &currentSlot = Buffer[el - 1];
160+
std::atomic<ui64> &currentSlot = Buffer[el - 1];
161161
ui64 expected = currentSlot.load(std::memory_order_acquire);
162162
TSlot slot = TSlot::Recognise(expected);
163163
ui64 generation = Head.load(std::memory_order_acquire) / MaxSize;
@@ -182,7 +182,7 @@ struct TMPMCRingQueueV3 {
182182
return OvertakenQueue.Push(slotIdx + 1, WriteRevolvingCounter.fetch_add(1, std::memory_order_relaxed));
183183
}
184184

185-
std::optional<ui32> InvalidateSlot(std::atomic_uint64_t &currentSlot, ui64 generation) {
185+
std::optional<ui32> InvalidateSlot(std::atomic<ui64> &currentSlot, ui64 generation) {
186186
ui64 expected = currentSlot.load(std::memory_order_acquire);
187187
TSlot slot = TSlot::Recognise(expected);
188188
while (!slot.IsEmpty || slot.Generation <= generation) {
@@ -228,7 +228,7 @@ struct TMPMCRingQueueV3 {
228228
ui32 generation = currentHead / MaxSize;
229229

230230
ui64 slotIdx = ConvertIdx(currentHead);
231-
std::atomic_uint64_t &currentSlot = Buffer[slotIdx];
231+
std::atomic<ui64> &currentSlot = Buffer[slotIdx];
232232

233233
ui64 expected = currentSlot.load(std::memory_order_relaxed);
234234
TSlot slot = TSlot::Recognise(expected);

0 commit comments

Comments
 (0)