/
pccc
/
pccc-mlir
Обзор
Документация
Войти
/
pccc
/
pccc-mlir
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
offload/test/mapping/prelock.cpp
65 строк
2 KB
obitotsky
fork mlir
19 июл 2026, 07:05
Верифицирован
19 июл 2026, 07:05
6422b87
Код
Авторство
О чём код?
// RUN: %libomptarget-compilexx-generic // RUN: %libomptarget-run-generic %fcheck-generic // REQUIRES: gpu // UNSUPPORTED: nvidiagpu // UNSUPPORTED: amdgpu #include <cstdio> #include <omp.h> extern "C" { void *llvm_omp_target_lock_mem(void *ptr, size_t size, int device_num); void llvm_omp_target_unlock_mem(void *ptr, int device_num); } int main() { int n = 100; int *unlocked = new int[n]; for (int i = 0; i < n; i++) unlocked[i] = i; int *locked = (int *)llvm_omp_target_lock_mem(unlocked, n * sizeof(int), omp_get_default_device()); if (!locked) return 0; #pragma omp target teams distribute parallel for map(tofrom : unlocked[ : n]) for (int i = 0; i < n; i++) unlocked[i] += 1; #pragma omp target teams distribute parallel for map(tofrom : unlocked[10 : 10]) for (int i = 10; i < 20; i++) unlocked[i] += 1; #pragma omp target teams distribute parallel for map(tofrom : locked[ : n]) for (int i = 0; i < n; i++) locked[i] += 1; #pragma omp target teams distribute parallel for map(tofrom : locked[10 : 10]) for (int i = 10; i < 20; i++) locked[i] += 1; llvm_omp_target_unlock_mem(unlocked, omp_get_default_device()); int err = 0; for (int i = 0; i < n; i++) { if (i < 10 || i > 19) { if (unlocked[i] != i + 2) { printf("Err at %d, got %d, expected %d\n", i, unlocked[i], i + 1); err++; } } else if (unlocked[i] != i + 4) { printf("Err at %d, got %d, expected %d\n", i, unlocked[i], i + 2); err++; } } // CHECK: PASS if (err == 0) printf("PASS\n"); return err; }