File tree Expand file tree Collapse file tree 2 files changed +17
-10
lines changed Expand file tree Collapse file tree 2 files changed +17
-10
lines changed Original file line number Diff line number Diff line change @@ -667,13 +667,14 @@ static inline uintptr_t _mi_random_shuffle(uintptr_t x) {
667
667
int _mi_os_numa_node_get (mi_os_tld_t * tld );
668
668
size_t _mi_os_numa_node_count_get (void );
669
669
670
- extern size_t _mi_numa_node_count ;
670
+ extern _Atomic ( size_t ) _mi_numa_node_count ;
671
671
static inline int _mi_os_numa_node (mi_os_tld_t * tld ) {
672
- if (mi_likely (_mi_numa_node_count == 1 )) return 0 ;
672
+ if (mi_likely (mi_atomic_load_relaxed ( & _mi_numa_node_count ) == 1 )) return 0 ;
673
673
else return _mi_os_numa_node_get (tld );
674
674
}
675
675
static inline size_t _mi_os_numa_node_count (void ) {
676
- if (mi_likely (_mi_numa_node_count > 0 )) return _mi_numa_node_count ;
676
+ const size_t count = mi_atomic_load_relaxed (& _mi_numa_node_count );
677
+ if (mi_likely (count > 0 )) return count ;
677
678
else return _mi_os_numa_node_count_get ();
678
679
}
679
680
Original file line number Diff line number Diff line change @@ -1202,17 +1202,23 @@ static size_t mi_os_numa_node_countx(void) {
1202
1202
}
1203
1203
#endif
1204
1204
1205
- size_t _mi_numa_node_count = 0 ; // cache the node count
1205
+ _Atomic( size_t ) _mi_numa_node_count ; // = 0 // cache the node count
1206
1206
1207
1207
size_t _mi_os_numa_node_count_get (void ) {
1208
- if (mi_unlikely (_mi_numa_node_count <= 0 )) {
1208
+ size_t count = mi_atomic_load_acquire (& _mi_numa_node_count );
1209
+ if (count <= 0 ) {
1209
1210
long ncount = mi_option_get (mi_option_use_numa_nodes ); // given explicitly?
1210
- if (ncount <= 0 ) ncount = (long )mi_os_numa_node_countx (); // or detect dynamically
1211
- _mi_numa_node_count = (size_t )(ncount <= 0 ? 1 : ncount );
1212
- _mi_verbose_message ("using %zd numa regions\n" , _mi_numa_node_count );
1211
+ if (ncount > 0 ) {
1212
+ count = (size_t )ncount ;
1213
+ }
1214
+ else {
1215
+ count = mi_os_numa_node_countx (); // or detect dynamically
1216
+ if (count == 0 ) count = 1 ;
1217
+ }
1218
+ mi_atomic_store_release (& _mi_numa_node_count , count ); // save it
1219
+ _mi_verbose_message ("using %zd numa regions\n" , count );
1213
1220
}
1214
- mi_assert_internal (_mi_numa_node_count >= 1 );
1215
- return _mi_numa_node_count ;
1221
+ return count ;
1216
1222
}
1217
1223
1218
1224
int _mi_os_numa_node_get (mi_os_tld_t * tld ) {
You can’t perform that action at this time.
0 commit comments