brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 5ee492f Raw
72 lines · c
1// RUN: %libomp-compile -D_GNU_SOURCE2// RUN: env KMP_AFFINITY=granularity=thread,compact %libomp-run3// RUN: env KMP_AFFINITY=granularity=core,compact %libomp-run4// RUN: env KMP_AFFINITY=granularity=socket,compact %libomp-run5// REQUIRES: linux6 7#include <stdio.h>8#include <stdlib.h>9#include <string.h>10#include "libomp_test_affinity.h"11#include "libomp_test_topology.h"12 13// Compare place lists. Make sure every place in p1 is in p2.14static int compare_places(const place_list_t *p1, const place_list_t *p2) {15  int i, j;16  for (i = 0; i < p1->num_places; ++i) {17    int found = 0;18    for (j = 0; j < p2->num_places; ++j) {19      if (affinity_mask_equal(p1->masks[i], p2->masks[j])) {20        found = 1;21        break;22      }23    }24    if (!found) {25      printf("Found place in p1 not in p2!\n");26      printf("p1 places:\n");27      topology_print_places(p1);28      printf("\n");29      printf("p2 places:\n");30      topology_print_places(p2);31      return EXIT_FAILURE;32    }33  }34  return EXIT_SUCCESS;35}36 37static int check_places() {38  int status;39  const char *value = getenv("KMP_AFFINITY");40  if (!value) {41    fprintf(stderr, "error: must set OMP_PLACES envirable for this test!\n");42    return EXIT_FAILURE;43  }44  place_list_t *places, *openmp_places;45  if (strstr(value, "socket")) {46    places = topology_alloc_type_places(TOPOLOGY_OBJ_SOCKET);47  } else if (strstr(value, "core")) {48    places = topology_alloc_type_places(TOPOLOGY_OBJ_CORE);49  } else if (strstr(value, "thread")) {50    places = topology_alloc_type_places(TOPOLOGY_OBJ_THREAD);51  } else {52    fprintf(53        stderr,54        "error: KMP_AFFINITY granularity must be one of thread,core,socket!\n");55    return EXIT_FAILURE;56  }57  openmp_places = topology_alloc_openmp_places();58  status = compare_places(openmp_places, places);59  topology_free_places(places);60  topology_free_places(openmp_places);61  return status;62}63 64int main() {65  if (!topology_using_full_mask()) {66    printf("Thread does not have access to all logical processors. Skipping "67           "test.\n");68    return EXIT_SUCCESS;69  }70  return check_places();71}72