Skip to content

Commit 304f97a

Browse files
authored
Merge pull request #23 from John-194/arm_compatibility
ARM compatibility
2 parents 2f43c33 + 57e531f commit 304f97a

File tree

5 files changed

+20
-20
lines changed

5 files changed

+20
-20
lines changed

include/dbscan/cell.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,6 @@ struct cellHash {
173173

174174
bool cas(eType* p, eType o, eType n) {
175175
return std::atomic_compare_exchange_strong_explicit(
176-
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_relaxed, std::memory_order_relaxed);
176+
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_acq_rel, std::memory_order_acquire);
177177
}
178178
};

include/dbscan/pbbs/ndHash.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ struct hashSimplePair {
405405
bool replaceQ(eType s, eType s2) {return 0;}//return s.second > s2.second;}
406406
bool cas(eType* p, eType o, eType n) {
407407
return std::atomic_compare_exchange_strong_explicit(
408-
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_relaxed, std::memory_order_relaxed);
408+
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_acq_rel, std::memory_order_acquire);
409409
}
410410
};
411411

include/dbscan/pbbs/scheduler.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -88,23 +88,23 @@ struct Deque {
8888
Deque() : bot(0), age(age_t{0, 0}) {}
8989

9090
void push_bottom(Job* job) {
91-
auto local_bot = bot.load(std::memory_order_relaxed); // atomic load
92-
deq[local_bot].job.store(job, std::memory_order_relaxed); // shared store
91+
auto local_bot = bot.load(std::memory_order_acquire); // atomic load
92+
deq[local_bot].job.store(job, std::memory_order_release); // shared store
9393
local_bot += 1;
9494
if (local_bot == q_size) {
9595
throw std::runtime_error("internal error: scheduler queue overflow");
9696
}
97-
bot.store(local_bot, std::memory_order_relaxed); // shared store
97+
bot.store(local_bot, std::memory_order_release); // shared store
9898
std::atomic_thread_fence(std::memory_order_seq_cst);
9999
}
100100

101101
Job* pop_top() {
102102
Job* result = nullptr;
103-
auto old_age = age.load(std::memory_order_relaxed); // atomic load
104-
auto local_bot = bot.load(std::memory_order_relaxed); // atomic load
103+
auto old_age = age.load(std::memory_order_acquire); // atomic load
104+
auto local_bot = bot.load(std::memory_order_acquire); // atomic load
105105
if (local_bot > old_age.top) {
106106
auto job =
107-
deq[old_age.top].job.load(std::memory_order_relaxed); // atomic load
107+
deq[old_age.top].job.load(std::memory_order_acquire); // atomic load
108108
auto new_age = old_age;
109109
new_age.top = new_age.top + 1;
110110
if (age.compare_exchange_strong(old_age, new_age))
@@ -117,24 +117,24 @@ struct Deque {
117117

118118
Job* pop_bottom() {
119119
Job* result = nullptr;
120-
auto local_bot = bot.load(std::memory_order_relaxed); // atomic load
120+
auto local_bot = bot.load(std::memory_order_acquire); // atomic load
121121
if (local_bot != 0) {
122122
local_bot--;
123-
bot.store(local_bot, std::memory_order_relaxed); // shared store
123+
bot.store(local_bot, std::memory_order_release); // shared store
124124
std::atomic_thread_fence(std::memory_order_seq_cst);
125125
auto job =
126-
deq[local_bot].job.load(std::memory_order_relaxed); // atomic load
127-
auto old_age = age.load(std::memory_order_relaxed); // atomic load
126+
deq[local_bot].job.load(std::memory_order_acquire); // atomic load
127+
auto old_age = age.load(std::memory_order_acquire); // atomic load
128128
if (local_bot > old_age.top)
129129
result = job;
130130
else {
131-
bot.store(0, std::memory_order_relaxed); // shared store
131+
bot.store(0, std::memory_order_release); // shared store
132132
auto new_age = age_t{old_age.tag + 1, 0};
133133
if ((local_bot == old_age.top) &&
134134
age.compare_exchange_strong(old_age, new_age))
135135
result = job;
136136
else {
137-
age.store(new_age, std::memory_order_relaxed); // shared store
137+
age.store(new_age, std::memory_order_release); // shared store
138138
result = nullptr;
139139
}
140140
std::atomic_thread_fence(std::memory_order_seq_cst);
@@ -246,7 +246,7 @@ struct scheduler {
246246
std::vector<Deque<Job>> deques;
247247
std::vector<attempt> attempts;
248248
std::vector<std::thread> spawned_threads;
249-
std::atomic<int> finished_flag;
249+
std::atomic<bool> finished_flag;
250250

251251
// Start an individual scheduler task. Runs until finished().
252252
template <typename F>

include/dbscan/pbbs/utils.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ template <class E1, class E2>
292292
template<typename eType>
293293
bool myCAS(eType* p, eType o, eType n) {
294294
return std::atomic_compare_exchange_strong_explicit(
295-
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_relaxed, std::memory_order_relaxed);
295+
reinterpret_cast<std::atomic<eType>*>(p), &o, n, std::memory_order_acq_rel, std::memory_order_acquire);
296296
}
297297

298298
template <class ET>

include/dbscan/pbbs/work_stealing_job.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,16 @@ namespace parlay {
3232

3333
struct WorkStealingJob {
3434
WorkStealingJob() {
35-
done.store(false, std::memory_order_relaxed);
35+
done.store(false, std::memory_order_release);
3636
}
3737
~WorkStealingJob() = default;
3838
void operator()() {
39-
assert(done.load(std::memory_order_relaxed) == false);
39+
assert(done.load(std::memory_order_acquire) == false);
4040
execute();
41-
done.store(true, std::memory_order_relaxed);
41+
done.store(true, std::memory_order_release);
4242
}
4343
bool finished() {
44-
return done.load(std::memory_order_relaxed);
44+
return done.load(std::memory_order_acquire);
4545
}
4646
virtual void execute() = 0;
4747
std::atomic<bool> done;

0 commit comments

Comments
 (0)