| // RUN: %libomptarget-compilexx-and-run-generic | |
| // Taken from https://github.com/llvm/llvm-project/issues/54216 | |
| // FIXME: https://github.com/llvm/llvm-project/issues/161265 | |
| // UNSUPPORTED: gpu | |
| #include <algorithm> | |
| #include <cstdlib> | |
| #include <iostream> | |
| bool almost_equal(float x, float gold, float rel_tol = 1e-09, | |
| float abs_tol = 0.0) { | |
| return std::abs(x - gold) <= | |
| std::max(rel_tol * std::max(std::abs(x), std::abs(gold)), abs_tol); | |
| } | |
| void test_parallel_for__target() { | |
| const int N0{32768}; | |
| const float expected_value{N0}; | |
| float counter_N0{}; | |
| #pragma omp parallel for | |
| for (int i0 = 0; i0 < N0; i0++) { | |
| #pragma omp target map(tofrom : counter_N0) | |
| { | |
| #pragma omp atomic update | |
| counter_N0 = counter_N0 + 1.; | |
| } | |
| } | |
| if (!almost_equal(counter_N0, expected_value, 0.01)) { | |
| std::cerr << "Expected: " << expected_value << " Got: " << counter_N0 | |
| << std::endl; | |
| std::exit(112); | |
| } | |
| } | |
| int main() { test_parallel_for__target(); } |