14
14
#include <stdlib.h>
15
15
#include <stdio.h>
16
16
17
+ #include "atomic-defs-c11.h"
17
18
#include "wstream_df.h"
18
19
#include "cbuffer-c11.h"
19
20
@@ -49,7 +50,7 @@ cdeque_alloc (size_t log_size)
49
50
static inline void
50
51
cdeque_free (cdeque_p cdeque )
51
52
{
52
- cbuffer_free (atomic_load_explicit (& cdeque -> cbuffer , memory_order_relaxed ));
53
+ cbuffer_free (atomic_load_explicit (& cdeque -> cbuffer , relaxed ));
53
54
free (cdeque );
54
55
}
55
56
@@ -60,19 +61,18 @@ cdeque_push_bottom (cdeque_p cdeque, wstream_df_type elem)
60
61
{
61
62
_PAPI_P0B ;
62
63
63
- size_t bottom = atomic_load_explicit (& cdeque -> bottom , memory_order_relaxed );
64
- size_t top = atomic_load_explicit (& cdeque -> top , memory_order_acquire );
64
+ size_t bottom = atomic_load_explicit (& cdeque -> bottom , relaxed );
65
+ size_t top = atomic_load_explicit (& cdeque -> top , acquire );
65
66
66
- cbuffer_p buffer = atomic_load_explicit (& cdeque -> cbuffer ,
67
- memory_order_relaxed );
67
+ cbuffer_p buffer = atomic_load_explicit (& cdeque -> cbuffer , relaxed );
68
68
69
69
XLOG ("cdeque_push_bottom with elem: %d\n" , elem );
70
70
if (bottom >= top + buffer -> size )
71
71
buffer = cbuffer_grow (buffer , bottom , top , & cdeque -> cbuffer );
72
72
73
- cbuffer_set (buffer , bottom , elem , memory_order_relaxed );
74
- atomic_thread_fence ( memory_order_release );
75
- atomic_store_explicit (& cdeque -> bottom , bottom + 1 , memory_order_relaxed );
73
+ cbuffer_set (buffer , bottom , elem , relaxed );
74
+ thread_fence ( release );
75
+ atomic_store_explicit (& cdeque -> bottom , bottom + 1 , relaxed );
76
76
77
77
_PAPI_P0E ;
78
78
}
@@ -86,22 +86,22 @@ cdeque_take (cdeque_p cdeque)
86
86
cbuffer_p buffer ;
87
87
wstream_df_type task ;
88
88
89
- bottom = atomic_load_explicit (& cdeque -> bottom , memory_order_relaxed ) - 1 ;
90
- buffer = atomic_load_explicit (& cdeque -> cbuffer , memory_order_relaxed );
89
+ bottom = atomic_load_explicit (& cdeque -> bottom , relaxed ) - 1 ;
90
+ buffer = atomic_load_explicit (& cdeque -> cbuffer , relaxed );
91
91
92
- atomic_store_explicit (& cdeque -> bottom , bottom , memory_order_relaxed );
93
- atomic_thread_fence ( memory_order_seq_cst );
92
+ atomic_store_explicit (& cdeque -> bottom , bottom , relaxed );
93
+ thread_fence ( seq_cst );
94
94
95
- top = atomic_load_explicit (& cdeque -> top , memory_order_relaxed );
95
+ top = atomic_load_explicit (& cdeque -> top , relaxed );
96
96
97
97
if (bottom == (size_t ) -1 || bottom < top )
98
98
{
99
- atomic_store_explicit (& cdeque -> bottom , bottom + 1 , memory_order_relaxed );
99
+ atomic_store_explicit (& cdeque -> bottom , bottom + 1 , relaxed );
100
100
_PAPI_P1E ;
101
101
return NULL ;
102
102
}
103
103
104
- task = cbuffer_get (buffer , bottom , memory_order_relaxed );
104
+ task = cbuffer_get (buffer , bottom , relaxed );
105
105
106
106
if (bottom > top )
107
107
{
@@ -111,10 +111,9 @@ cdeque_take (cdeque_p cdeque)
111
111
112
112
/* One compare and swap when the deque has one single element. */
113
113
if (!atomic_compare_exchange_strong_explicit (& cdeque -> top , & top , top + 1 ,
114
- memory_order_seq_cst ,
115
- memory_order_relaxed ))
114
+ seq_cst , relaxed ))
116
115
task = NULL ;
117
- atomic_store_explicit (& cdeque -> bottom , bottom + 1 , memory_order_relaxed );
116
+ atomic_store_explicit (& cdeque -> bottom , bottom + 1 , relaxed );
118
117
119
118
_PAPI_P1E ;
120
119
return task ;
@@ -129,9 +128,9 @@ cdeque_steal (cdeque_p remote_cdeque)
129
128
wstream_df_type elem ;
130
129
cbuffer_p buffer ;
131
130
132
- top = atomic_load_explicit (& remote_cdeque -> top , memory_order_acquire );
133
- atomic_thread_fence ( memory_order_seq_cst );
134
- bottom = atomic_load_explicit (& remote_cdeque -> bottom , memory_order_acquire );
131
+ top = atomic_load_explicit (& remote_cdeque -> top , acquire );
132
+ thread_fence ( seq_cst );
133
+ bottom = atomic_load_explicit (& remote_cdeque -> bottom , acquire );
135
134
136
135
XLOG ("cdeque_steal with bottom %d, top %d\n" , bottom , top );
137
136
@@ -141,13 +140,11 @@ cdeque_steal (cdeque_p remote_cdeque)
141
140
return NULL ;
142
141
}
143
142
144
- buffer = atomic_load_explicit (& remote_cdeque -> cbuffer , memory_order_relaxed );
145
- elem = cbuffer_get (buffer , top , memory_order_relaxed );
143
+ buffer = atomic_load_explicit (& remote_cdeque -> cbuffer , relaxed );
144
+ elem = cbuffer_get (buffer , top , relaxed );
146
145
147
- if (!atomic_compare_exchange_strong_explicit (& remote_cdeque -> top ,
148
- & top , top + 1 ,
149
- memory_order_seq_cst ,
150
- memory_order_relaxed ))
146
+ if (!atomic_compare_exchange_strong_explicit (& remote_cdeque -> top , & top ,
147
+ top + 1 , seq_cst , relaxed ))
151
148
elem = NULL ;
152
149
153
150
_PAPI_P2E ;
@@ -159,12 +156,11 @@ static inline void
159
156
print_cdeque (cdeque_p cdeque )
160
157
{
161
158
size_t i ;
162
- size_t bottom = atomic_load_explicit (& cdeque -> bottom , memory_order_relaxed );
163
- size_t top = atomic_load_explicit (& cdeque -> top , memory_order_acquire );
164
- cbuffer_p buffer = atomic_load_explicit (& cdeque -> cbuffer ,
165
- memory_order_relaxed );
159
+ size_t bottom = atomic_load_explicit (& cdeque -> bottom , relaxed );
160
+ size_t top = atomic_load_explicit (& cdeque -> top , acquire );
161
+ cbuffer_p buffer = atomic_load_explicit (& cdeque -> cbuffer , relaxed );
166
162
for (i = top ; i < bottom ; i ++ )
167
- printf ("%p," , cbuffer_get (buffer , i , memory_order_relaxed ));
163
+ printf ("%p," , cbuffer_get (buffer , i , relaxed ));
168
164
printf ("\n" );
169
165
}
170
166
0 commit comments