LLVM OpenMP
22.0.0git
runtime
test
affinity
format
affinity_display.1.c
Go to the documentation of this file.
1
// RUN: %libomp-compile
2
// RUN: env OMP_DISPLAY_AFFINITY=TRUE OMP_NUM_THREADS=4 OMP_PLACES='{0,1},{2,3},{4,5},{6,7}' %libomp-run | %python %S/check.py -c 'CHECK' %s
3
4
// Affinity Display examples
5
#include <stdio.h>
6
#include <stdlib.h>
// also null is in <stddef.h>
7
#include <stddef.h>
8
#include <omp.h>
9
#include <string.h>
10
11
// ENVIRONMENT
12
// OMP_DISPLAY_AFFINITY=TRUE
13
// OMP_NUM_THREADS=4
14
// OMP_PLACES='{0,1},{2,3},{4,5},{6,7}'
15
16
// CHECK: num_threads=1 OMP: pid [0-9]+ tid [0-9]+ thread [0-4] bound to OS proc set \{([0-7])|(0,1)|(undefined)\}
17
// CHECK: num_threads=4 Thread id [0-3] reporting in
18
// CHECK: num_threads=4 OMP: pid [0-9]+ tid [0-9]+ thread [0-4] bound to OS proc set \{([0-7])|([0246],[1357])|(undefined)\}
19
// CHECK: num_threads=1 Default Affinity Format is:
20
// CHECK: num_threads=1 Affinity Format set to: host=%20H tid=%0.4n binds_to=%A
21
// CHECK: num_threads=4 tid=[0-3] affinity:host=[a-zA-Z0-9_.-]+[ ]+tid=000[0-4][ ]+binds_to=(([0-7])|([0246],[1357])|(undefined))
22
23
#define FORMAT_STORE 80
24
#define BUFFER_STORE 80
25
26
int
main
(
int
argc,
char
** argv) {
27
int
i
, n, tid, max_req_store = 0;
28
size_t
nchars;
29
char
default_format[
FORMAT_STORE
];
30
char
my_format[] =
"host=%20H tid=%0.4n binds_to=%A"
;
31
char
**buffer;
32
33
// CODE SEGMENT 1 AFFINITY DISPLAY
34
omp_display_affinity
(NULL);
35
36
// OMP_DISPLAY_AFFINITY=TRUE,
37
// Affinity reported for 1 parallel region
38
#pragma omp parallel
39
{
40
printf(
"Thread id %d reporting in.\n"
, omp_get_thread_num());
41
}
42
43
// Get and Display Default Affinity Format
44
nchars =
omp_get_affinity_format
(default_format, (
size_t
)
FORMAT_STORE
);
45
printf(
"Default Affinity Format is: %s\n"
, default_format);
46
47
if
(nchars >
FORMAT_STORE
) {
48
printf(
"Caution: Reported Format is truncated. Increase\n"
);
49
printf(
" FORMAT_STORE by %d.\n"
, (
int
)nchars -
FORMAT_STORE
);
50
}
51
52
// Set Affinity Format
53
omp_set_affinity_format
(my_format);
54
printf(
"Affinity Format set to: %s\n"
, my_format);
55
56
// CODE SEGMENT 3 CAPTURE AFFINITY
57
// Set up buffer for affinity of n threads
58
n =
omp_get_max_threads
();
59
buffer = (
char
**)malloc(
sizeof
(
char
*) * n);
60
for
(
i
= 0;
i
< n;
i
++) {
61
buffer[
i
] = (
char
*)malloc(
sizeof
(
char
) *
BUFFER_STORE
);
62
}
63
64
// Capture Affinity using Affinity Format set above.
65
// Use critical reduction to check size of buffer areas
66
#pragma omp parallel private(tid, nchars)
67
{
68
tid = omp_get_thread_num();
69
nchars =
omp_capture_affinity
(buffer[tid], (
size_t
)
BUFFER_STORE
, NULL);
70
#pragma omp critical
71
{
72
if
(nchars > max_req_store)
73
max_req_store = nchars;
74
}
75
}
76
77
for
(
i
= 0;
i
< n;
i
++) {
78
printf(
"tid=%d affinity:%s:\n"
,
i
, buffer[
i
]);
79
}
80
// for 4 threads with OMP_PLACES='{0,1},{2,3},{4,5},{6,7}'
81
// host=%20H tid=%0.4n binds_to=%A
82
// host=<hostname> tid=0000 binds_to=0,1
83
// host=<hostname> tid=0001 binds_to=2,3
84
// host=<hostname> tid=0002 binds_to=4,5
85
// host=<hostname> tid=0003 binds_to=6,7
86
87
if
(max_req_store >
BUFFER_STORE
) {
88
printf(
"Caution: Affinity string truncated. Increase\n"
);
89
printf(
" BUFFER_STORE by %d\n"
, max_req_store -
BUFFER_STORE
);
90
}
91
return
0;
92
}
BUFFER_STORE
#define BUFFER_STORE
Definition
affinity_display.1.c:24
FORMAT_STORE
#define FORMAT_STORE
Definition
affinity_display.1.c:23
i
#define i
Definition
kmp_stub.cpp:87
omp_get_affinity_format
#define omp_get_affinity_format
Definition
kmp_stub.cpp:38
omp_set_affinity_format
#define omp_set_affinity_format
Definition
kmp_stub.cpp:37
omp_display_affinity
#define omp_display_affinity
Definition
kmp_stub.cpp:39
omp_capture_affinity
#define omp_capture_affinity
Definition
kmp_stub.cpp:40
omp_get_max_threads
int omp_get_max_threads()
main
int main()
Definition
test-touch.c:21
Generated on
for LLVM OpenMP by
1.14.0