7#define MAX_LOCAL_RANKS (512)
9#define MPI_CALL(call, err_handle) do { \
10 int _status = (call); \
11 if (_status == MPI_SUCCESS) \
19 return (*(
unsigned long *)
a - *(
unsigned long *)
b);
26 MPI_Comm shm_comm = MPI_COMM_NULL;
35 MPI_CALL(MPI_Comm_split_type(comm, MPI_COMM_TYPE_SHARED,
36 rank, MPI_INFO_NULL, &shm_comm),
38 MPI_CALL(MPI_Comm_size(shm_comm, &shm_comm_size),
return _status);
39 MPI_CALL(MPI_Comm_rank(shm_comm, &local_rank),
return _status);
43 for (
i = 0;
i < dev_count; ++
i) {
47 MPI_CALL(MPI_Alltoall(&
rank, 1, MPI_INT, ranks, 1, MPI_INT,
50 MPI_CALL(MPI_Alltoall(&uid, 1, MPI_UNSIGNED_LONG, uids, 1,
51 MPI_UNSIGNED_LONG, shm_comm),
56 memcpy(sorted_uids, uids,
sizeof(
unsigned long) * shm_comm_size);
57 qsort(sorted_uids, shm_comm_size,
sizeof(
unsigned long),
cmp_fn);
59 if (local_rank == 0) {
61 unsigned long curr_uid = 0;
62 for (j = 0; j < shm_comm_size; ++j) {
63 if (sorted_uids[j] != curr_uid) {
64 curr_uid = sorted_uids[j];
65 uniq_sorted_uids[uniq_uids++] = curr_uid;
70 for (j = 0, l = 0; j < uniq_uids; ++j) {
71 for (k = 0; k < shm_comm_size; ++k) {
72 if (uids[k] == uniq_sorted_uids[j]) {
77 printf(
"GPU-%i Affinity : Name: %s, UID: %lu, Ranks: [ ",
78 i,
name, uniq_sorted_uids[j] );
79 for (k = 0; k < l; ++k) {
80 printf(
"%d ", list[k] );
87 MPI_CALL(MPI_Comm_free(&shm_comm),
return _status);
91int main(
int argc,
char *argv[])
96 MPI_Init(&argc, &argv);
99 MPI_Comm_rank(MPI_COMM_WORLD, &
rank);
107 printf(
"Testing systedect component with PAPI %d.%d.%d\n",
122 MPI_Barrier(MPI_COMM_WORLD);
static papi_handle_t handle
returns handle of next device type
returns device attributes
returns device type attributes
initialize the PAPI library.
Finish using PAPI and free all related resources.
#define PAPI_DEV_ATTR__CUDA_ULONG_UID
#define PAPI_DEV_TYPE_ENUM__CUDA
#define PAPI_DEV_TYPE_ATTR__INT_COUNT
#define PAPI_DEV_ATTR__CUDA_CHAR_DEVICE_NAME
static double a[MATRIX_SIZE][MATRIX_SIZE]
static double b[MATRIX_SIZE][MATRIX_SIZE]
Return codes and api definitions.
#define PAPI_VERSION_REVISION(x)
#define PAPI_VERSION_MAJOR(x)
#define PAPI_VERSION_MINOR(x)
int tests_quiet(int argc, char **argv)
void PAPI_NORETURN test_fail(const char *file, int line, const char *call, int retval)
void PAPI_NORETURN test_pass(const char *filename)
#define MPI_CALL(call, err_handle)
static int cmp_fn(const void *a, const void *b)
static int print_cuda_affinity(MPI_Comm comm, void *handle)