brintos

brintos / llvm-project-archived public Read only

0
0
Text · 994 B · 04e7256 Raw
38 lines · c
1// RUN: %libomptarget-compile-generic && %libomptarget-run-generic2// RUN: %libomptarget-compileopt-generic && %libomptarget-run-generic3 4#include <stdio.h>5#include <stdlib.h>6 7int main() {8  long unsigned *DP = 0;9  int N = 32;10  int Threads = 64;11  int Teams = 10;12 13  // Allocate ~160 KiB on the device.14#pragma omp target map(from : DP)15  DP = (long unsigned *)malloc(sizeof(long unsigned) * N * Threads * Teams);16 17#pragma omp target teams distribute parallel for num_teams(Teams)              \18    thread_limit(Threads) is_device_ptr(DP)19  for (int i = 0; i < Threads * Teams; ++i) {20    for (int j = 0; j < N; ++j) {21      DP[i * N + j] = i + j;22    }23  }24 25  long unsigned s = 0;26#pragma omp target teams distribute parallel for num_teams(Teams)              \27    thread_limit(Threads) reduction(+ : s)28  for (int i = 0; i < Threads * Teams; ++i) {29    for (int j = 0; j < N; ++j) {30      s += DP[i * N + j];31    }32  }33 34  // CHECK: Sum: 686080035  printf("Sum: %li\n", s);36  return 0;37}38