8
8
9
9
#pragma omp begin declare variant match(device = {kind(gpu)})
10
10
// Extension provided by the 'libc' project.
11
- void rpc_host_call (void * fn , void * args , size_t size );
11
+ unsigned long long rpc_host_call (void * fn , void * args , size_t size );
12
12
#pragma omp declare target to(rpc_host_call) device_type(nohost)
13
13
#pragma omp end declare variant
14
14
15
15
#pragma omp begin declare variant match(device = {kind(cpu)})
16
16
// Dummy host implementation to make this work for all targets.
17
- void rpc_host_call (void * fn , void * args , size_t size ) {
18
- (( void (* )(void * ))fn )(args );
17
+ unsigned long long rpc_host_call (void * fn , void * args , size_t size ) {
18
+ return (( unsigned long long (* )(void * ))fn )(args );
19
19
}
20
20
#pragma omp end declare variant
21
21
@@ -25,17 +25,26 @@ typedef struct args_s {
25
25
} args_t ;
26
26
27
27
// CHECK-DAG: Thread: 0, Block: 0
28
+ // CHECK-DAG: Result: 42
28
29
// CHECK-DAG: Thread: 1, Block: 0
30
+ // CHECK-DAG: Result: 42
29
31
// CHECK-DAG: Thread: 0, Block: 1
32
+ // CHECK-DAG: Result: 42
30
33
// CHECK-DAG: Thread: 1, Block: 1
34
+ // CHECK-DAG: Result: 42
31
35
// CHECK-DAG: Thread: 0, Block: 2
36
+ // CHECK-DAG: Result: 42
32
37
// CHECK-DAG: Thread: 1, Block: 2
38
+ // CHECK-DAG: Result: 42
33
39
// CHECK-DAG: Thread: 0, Block: 3
40
+ // CHECK-DAG: Result: 42
34
41
// CHECK-DAG: Thread: 1, Block: 3
35
- void foo (void * data ) {
42
+ // CHECK-DAG: Result: 42
43
+ long long foo (void * data ) {
36
44
assert (omp_is_initial_device () && "Not executing on host?" );
37
45
args_t * args = (args_t * )data ;
38
46
printf ("Thread: %d, Block: %d\n" , args -> thread_id , args -> block_id );
47
+ return 42 ;
39
48
}
40
49
41
50
void * fn_ptr = NULL ;
@@ -49,6 +58,7 @@ int main() {
49
58
#pragma omp parallel num_threads(2)
50
59
{
51
60
args_t args = {omp_get_thread_num (), omp_get_team_num ()};
52
- rpc_host_call (fn_ptr , & args , sizeof (args_t ));
61
+ unsigned long long res = rpc_host_call (fn_ptr , & args , sizeof (args_t ));
62
+ printf ("Result: %d\n" , (int )res );
53
63
}
54
64
}
0 commit comments