mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
48 lines
860 B
C
48 lines
860 B
C
/*
|
|
* @@name: target_reverse_offload.1c
|
|
* @@type: C
|
|
* @@compilable: yes
|
|
* @@linkable: yes
|
|
* @@expect: success
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#define N 100
|
|
|
|
#pragma omp requires reverse_offload
|
|
|
|
void error_handler(int wrong_value, int index)
|
|
{
|
|
printf(" Error in offload: A[%d]=%d\n", index,wrong_value);
|
|
printf(" Expecting: A[i ]=i\n");
|
|
exit(1);
|
|
// output: Error in offload: A[99]=-1
|
|
// Expecting: A[i ]=i
|
|
|
|
}
|
|
#pragma omp declare target device_type(host) to(error_handler)
|
|
|
|
int main()
|
|
{
|
|
int A[N];
|
|
|
|
for (int i=0; i<N; i++) A[i] = i;
|
|
|
|
A[N-1]=-1;
|
|
|
|
#pragma omp target map(A)
|
|
{
|
|
for (int i=0; i<N; i++)
|
|
{
|
|
if (A[i] != i)
|
|
{
|
|
#pragma omp target device(ancestor: 1) map(always,to: A[i:1])
|
|
error_handler(A[i], i);
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|