Skip to content

Commit fa4cc39

Browse files
authored
[openmp] adding affinity support to DragonFlyBSD. (#84672)
1 parent 35b7843 commit fa4cc39

File tree

6 files changed

+22
-16
lines changed

6 files changed

+22
-16
lines changed

openmp/runtime/src/kmp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3912,7 +3912,7 @@ extern void __kmp_balanced_affinity(kmp_info_t *th, int team_size);
39123912
#if KMP_WEIGHTED_ITERATIONS_SUPPORTED
39133913
extern int __kmp_get_first_osid_with_ecore(void);
39143914
#endif
3915-
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
3915+
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
39163916
extern int kmp_set_thread_affinity_mask_initial(void);
39173917
#endif
39183918
static inline void __kmp_assign_root_init_mask() {

openmp/runtime/src/kmp_affinity.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2829,7 +2829,8 @@ static void __kmp_dispatch_set_hierarchy_values() {
28292829
nPackages * nCoresPerPkg * __kmp_nThreadsPerCore;
28302830
__kmp_hier_max_units[kmp_hier_layer_e::LAYER_L1 + 1] = __kmp_ncores;
28312831
#if KMP_ARCH_X86_64 && \
2832-
(KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS) && \
2832+
(KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY || \
2833+
KMP_OS_WINDOWS) && \
28332834
KMP_MIC_SUPPORTED
28342835
if (__kmp_mic_type >= mic3)
28352836
__kmp_hier_max_units[kmp_hier_layer_e::LAYER_L2 + 1] = __kmp_ncores / 2;
@@ -2845,7 +2846,8 @@ static void __kmp_dispatch_set_hierarchy_values() {
28452846
__kmp_hier_threads_per[kmp_hier_layer_e::LAYER_L1 + 1] =
28462847
__kmp_nThreadsPerCore;
28472848
#if KMP_ARCH_X86_64 && \
2848-
(KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_WINDOWS) && \
2849+
(KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY || \
2850+
KMP_OS_WINDOWS) && \
28492851
KMP_MIC_SUPPORTED
28502852
if (__kmp_mic_type >= mic3)
28512853
__kmp_hier_threads_per[kmp_hier_layer_e::LAYER_L2 + 1] =
@@ -5559,7 +5561,7 @@ void __kmp_balanced_affinity(kmp_info_t *th, int nthreads) {
55595561
}
55605562
}
55615563

5562-
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
5564+
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
55635565
// We don't need this entry for Windows because
55645566
// there is GetProcessAffinityMask() api
55655567
//

openmp/runtime/src/kmp_affinity.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ class KMPHwlocAffinity : public KMPAffinity {
191191
};
192192
#endif /* KMP_USE_HWLOC */
193193

194-
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
194+
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
195195
#if KMP_OS_LINUX
196196
/* On some of the older OS's that we build on, these constants aren't present
197197
in <asm/unistd.h> #included from <sys.syscall.h>. They must be the same on
@@ -311,7 +311,7 @@ class KMPHwlocAffinity : public KMPAffinity {
311311
#else
312312
#error Unknown or unsupported architecture
313313
#endif /* KMP_ARCH_* */
314-
#elif KMP_OS_FREEBSD
314+
#elif KMP_OS_FREEBSD || KMP_OS_DRAGONFLY
315315
#include <pthread.h>
316316
#include <pthread_np.h>
317317
#elif KMP_OS_NETBSD
@@ -410,7 +410,7 @@ class KMPNativeAffinity : public KMPAffinity {
410410
#if KMP_OS_LINUX
411411
long retval =
412412
syscall(__NR_sched_getaffinity, 0, __kmp_affin_mask_size, mask);
413-
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD
413+
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
414414
int r = pthread_getaffinity_np(pthread_self(), __kmp_affin_mask_size,
415415
reinterpret_cast<cpuset_t *>(mask));
416416
int retval = (r == 0 ? 0 : -1);
@@ -431,7 +431,7 @@ class KMPNativeAffinity : public KMPAffinity {
431431
#if KMP_OS_LINUX
432432
long retval =
433433
syscall(__NR_sched_setaffinity, 0, __kmp_affin_mask_size, mask);
434-
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD
434+
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
435435
int r = pthread_setaffinity_np(pthread_self(), __kmp_affin_mask_size,
436436
reinterpret_cast<cpuset_t *>(mask));
437437
int retval = (r == 0 ? 0 : -1);
@@ -474,7 +474,8 @@ class KMPNativeAffinity : public KMPAffinity {
474474
}
475475
api_type get_api_type() const override { return NATIVE_OS; }
476476
};
477-
#endif /* KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD */
477+
#endif /* KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY \
478+
*/
478479

479480
#if KMP_OS_WINDOWS
480481
class KMPNativeAffinity : public KMPAffinity {

openmp/runtime/src/kmp_os.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@
7575
#error Unknown compiler
7676
#endif
7777

78-
#if (KMP_OS_LINUX || KMP_OS_WINDOWS || KMP_OS_FREEBSD || KMP_OS_NETBSD) && \
78+
#if (KMP_OS_LINUX || KMP_OS_WINDOWS || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
79+
KMP_OS_DRAGONFLY) && \
7980
!KMP_OS_WASI
8081
#define KMP_AFFINITY_SUPPORTED 1
8182
#if KMP_OS_WINDOWS && KMP_ARCH_X86_64

openmp/runtime/src/kmp_runtime.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5376,7 +5376,8 @@ __kmp_allocate_team(kmp_root_t *root, int new_nproc, int max_nproc,
53765376
__kmp_reinitialize_team(team, new_icvs, NULL);
53775377
}
53785378

5379-
#if (KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD) && KMP_AFFINITY_SUPPORTED
5379+
#if (KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY) && \
5380+
KMP_AFFINITY_SUPPORTED
53805381
/* Temporarily set full mask for primary thread before creation of
53815382
workers. The reason is that workers inherit the affinity from the
53825383
primary thread, so if a lot of workers are created on the single
@@ -5412,7 +5413,8 @@ __kmp_allocate_team(kmp_root_t *root, int new_nproc, int max_nproc,
54125413
}
54135414
}
54145415

5415-
#if (KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD) && KMP_AFFINITY_SUPPORTED
5416+
#if (KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY) && \
5417+
KMP_AFFINITY_SUPPORTED
54165418
/* Restore initial primary thread's affinity mask */
54175419
new_temp_affinity.restore();
54185420
#endif

openmp/runtime/src/z_Linux_util.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ static void __kmp_print_cond(char *buffer, kmp_cond_align_t *cond) {
125125
}
126126
#endif
127127

128-
#if ((KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD) && \
128+
#if ((KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY) && \
129129
KMP_AFFINITY_SUPPORTED)
130130

131131
/* Affinity support */
@@ -151,7 +151,7 @@ void __kmp_affinity_determine_capable(const char *env_var) {
151151
#if KMP_OS_LINUX
152152
#define KMP_CPU_SET_SIZE_LIMIT (1024 * 1024)
153153
#define KMP_CPU_SET_TRY_SIZE CACHE_LINE
154-
#elif KMP_OS_FREEBSD
154+
#elif KMP_OS_FREEBSD || KMP_OS_DRAGONFLY
155155
#define KMP_CPU_SET_SIZE_LIMIT (sizeof(cpuset_t))
156156
#elif KMP_OS_NETBSD
157157
#define KMP_CPU_SET_SIZE_LIMIT (256)
@@ -242,7 +242,7 @@ void __kmp_affinity_determine_capable(const char *env_var) {
242242
KMP_INTERNAL_FREE(buf);
243243
return;
244244
}
245-
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD
245+
#elif KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
246246
long gCode;
247247
unsigned char *buf;
248248
buf = (unsigned char *)KMP_INTERNAL_MALLOC(KMP_CPU_SET_SIZE_LIMIT);
@@ -1268,7 +1268,7 @@ static void __kmp_atfork_child(void) {
12681268
++__kmp_fork_count;
12691269

12701270
#if KMP_AFFINITY_SUPPORTED
1271-
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD
1271+
#if KMP_OS_LINUX || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_DRAGONFLY
12721272
// reset the affinity in the child to the initial thread
12731273
// affinity in the parent
12741274
kmp_set_thread_affinity_mask_initial();

0 commit comments

Comments
 (0)