llvm-project

Форк
0
/
declare_mapper_target_update.cpp 
56 строк · 1.3 Кб
1
// RUN: %libomptarget-compile-run-and-check-generic
2

3
#include <cstdio>
4
#include <cstdlib>
5

6
#define NUM 1024
7

8
class C {
9
public:
10
  int *a;
11
};
12

13
#pragma omp declare mapper(id : C s) map(s.a[0 : NUM])
14

15
int main() {
16
  C c;
17
  int sum = 0;
18
  c.a = (int *)malloc(sizeof(int) * NUM);
19
  for (int i = 0; i < NUM; i++) {
20
    c.a[i] = 1;
21
  }
22
#pragma omp target enter data map(mapper(id), alloc : c)
23
#pragma omp target teams distribute parallel for
24
  for (int i = 0; i < NUM; i++) {
25
    c.a[i] = 0;
26
  }
27
#pragma omp target update from(mapper(id) : c)
28
  for (int i = 0; i < NUM; i++) {
29
    sum += c.a[i];
30
  }
31
  // CHECK: Sum (after first update from) = 0
32
  printf("Sum (after first update from) = %d\n", sum);
33
  for (int i = 0; i < NUM; i++) {
34
    c.a[i] = 1;
35
  }
36
#pragma omp target update to(mapper(id) : c)
37
#pragma omp target teams distribute parallel for
38
  for (int i = 0; i < NUM; i++) {
39
    ++c.a[i];
40
  }
41
  sum = 0;
42
  for (int i = 0; i < NUM; i++) {
43
    sum += c.a[i];
44
  }
45
  // CHECK: Sum (after update to) = 1024
46
  printf("Sum (after update to) = %d\n", sum);
47
#pragma omp target update from(mapper(id) : c)
48
  sum = 0;
49
  for (int i = 0; i < NUM; i++) {
50
    sum += c.a[i];
51
  }
52
  // CHECK: Sum (after second update from) = 2048
53
  printf("Sum (after second update from) = %d\n", sum);
54
#pragma omp target exit data map(mapper(id), delete : c)
55
  return 0;
56
}
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.