Previously an opt-in flag `-fopenmp-new-driver` was used to enable the new offloading driver. After passing tests for a few months it should be sufficiently mature to flip the switch and make it the default. The new offloading driver is now enabled if there is OpenMP and OpenMP offloading present and the new `-fno-openmp-new-driver` is not present. The new offloading driver has three main benefits over the old method: - Static library support - Device-side LTO - Unified clang driver stages Depends on D122683 Differential Revision: https://reviews.llvm.org/D122831
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
// RUN: %libomptarget-compilexx-and-run-generic
|
|
|
|
// UNSUPPORTED: x86_64-pc-linux-gnu
|
|
// UNSUPPORTED: x86_64-pc-linux-gnu-oldDriver
|
|
|
|
#include <cmath>
|
|
#include <cstdlib>
|
|
#include <iostream>
|
|
|
|
bool almost_equal(float x, float gold, float tol) {
|
|
if (std::signbit(x) != std::signbit(gold))
|
|
x = std::abs(gold) - std::abs(x);
|
|
|
|
return std::abs(gold) * (1 - tol) <= std::abs(x) &&
|
|
std::abs(x) <= std::abs(gold) * (1 + tol);
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
constexpr const int N0{2};
|
|
constexpr const int N1{182};
|
|
constexpr const float expected_value{N0 * N1};
|
|
float counter_N0{};
|
|
|
|
#pragma omp target data map(tofrom : counter_N0)
|
|
{
|
|
#pragma omp taskloop shared(counter_N0)
|
|
for (int i0 = 0; i0 < N0; i0++) {
|
|
#pragma omp target teams distribute parallel for map(tofrom : counter_N0) nowait
|
|
for (int i1 = 0; i1 < N1; i1++) {
|
|
#pragma omp atomic update
|
|
counter_N0 = counter_N0 + 1.;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!almost_equal(counter_N0, expected_value, 0.1)) {
|
|
std::cerr << "Expected: " << expected_value << " Got: " << counter_N0
|
|
<< '\n';
|
|
return -1;
|
|
}
|
|
|
|
return 0;
|
|
}
|