brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 3399d1d Raw
59 lines · c
1// This test is adapted from test_parallel_for_allocate.c in SOLLVE V&V.2// https://github.com/SOLLVE/sollve_vv/blob/master/tests/5.0/parallel_for/test_parallel_for_allocate.c3// RUN: %libomp-compile-and-run4 5// Support for allocate was added in GCC 116// UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8, gcc-9, gcc-107 8#include <omp.h>9 10#include <assert.h>11#include <stdlib.h>12 13#define N 12814 15int main(int argc, char *argv[]) {16  int errors = 0;17  int *x;18  int result[N][N];19  int successful_alloc = 0;20 21  omp_memspace_handle_t x_memspace = omp_default_mem_space;22  omp_alloctrait_t x_traits[1] = {omp_atk_alignment, 64};23  omp_allocator_handle_t x_alloc = omp_init_allocator(x_memspace, 1, x_traits);24 25  for (int i = 0; i < N; i++) {26    for (int j = 0; j < N; j++) {27      result[i][j] = -1;28    }29  }30 31#pragma omp parallel for allocate(x_alloc: x) private(x) shared(result)32  for (int i = 0; i < N; i++) {33    x = (int *)malloc(N * sizeof(int));34    if (x != NULL) {35#pragma omp simd simdlen(16) aligned(x : 64)36      for (int j = 0; j < N; j++) {37        x[j] = j * i;38      }39      for (int j = 0; j < N; j++) {40        result[i][j] = x[j];41      }42      free(x);43      successful_alloc++;44    }45  }46 47  errors += successful_alloc < 1;48 49  for (int i = 0; i < N; i++) {50    for (int j = 0; j < N; j++) {51      errors += result[i][j] != i * j;52    }53  }54 55  omp_destroy_allocator(x_alloc);56 57  return errors;58}59