source: CIVL/src/include/civl/omp.cvl@ b7b71e8

1.23 2.0 acw/focus-triggers main test-branch
Last change on this file since b7b71e8 was 3ff27cf, checked in by Manchun Zheng <zmanchun@…>, 11 years ago

updated examples since $assert/$assume has been changed to functions; fixed the model builder for the new side-effect remover.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@2085 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 2.3 KB
Line 
1#include <civlc.cvh>
2#include <omp.h>
3#include <civl-omp.cvh>
4#include <stdbool.h>
5
6// implementations of functions in omp.h go here...
7
8struct omp_lock_t{
9 _Bool lock;
10};
11
12/************************** OMP LIB Implementations *******************************/
13
14void omp_init_lock(omp_lock_t *slock){
15 slock->lock = false;
16}
17
18void omp_destroy_lock(omp_lock_t *slock){
19 omp_lock_t blank;
20 *slock = blank;
21}
22
23/* Waits for the lock to available and grabs it,
24 * AND performs a flush_all on the team, as mandated
25 * by the OpenMP Standard. */
26void $omp_set_lock(omp_lock_t *slock, $omp_team team) {
27 $atomic {
28 $when(!slock->lock) slock->lock = true;
29 $omp_flush_all(team);
30 }
31}
32
33/* Releases the lock
34 * AND performs a flush_all on the team, as mandated
35 * by the OpenMP Standard. */
36void $omp_unset_lock(omp_lock_t *slock, $omp_team team) {
37 $atomic {
38 slock->lock = false;
39 $omp_flush_all(team);
40 }
41}
42
43/* These are replaced by $omp_set_lock and
44 * $omp_unset_lock. Those functionsn do the
45 * flush on the whole team, as required by
46 * the OpenMP Standard...
47
48void omp_set_lock(omp_lock_t *slock){
49 $atomic{
50 $when(!slock->lock){
51 slock->lock = true;
52 }
53 }
54}
55
56void omp_unset_lock(omp_lock_t *slock){
57 $atomic{
58 slock->lock = false;
59 }
60}
61*/
62
63$abstract double OMP_time(int time_count);
64
65double omp_get_wtime() {
66 int OMP_time_count = $next_time_count();
67 double result = OMP_time(OMP_time_count);
68
69 if (OMP_time_count > 0) {
70 $assume(result > OMP_time(OMP_time_count-1));
71 } else {
72 $assume(result > 0);
73 }
74 return result;
75}
76
77
78/*
79void omp_set_num_threads (int);
80int omp_get_num_threads (void);
81int omp_get_max_threads (void);
82int omp_get_thread_num (void);
83int omp_get_num_procs (void);
84int omp_in_parallel (void);
85void omp_set_dynamic (int);
86int omp_get_dynamic (void);
87void omp_set_nested (int);
88int omp_get_nested (void);
89void omp_init_lock (omp_lock_t *);
90void omp_destroy_lock (omp_lock_t *);
91void omp_set_lock (omp_lock_t *);
92void omp_unset_lock (omp_lock_t *);
93int omp_test_lock (omp_lock_t *);
94void omp_init_nest_lock (omp_nest_lock_t *);
95void omp_destroy_nest_lock (omp_nest_lock_t *);
96void omp_set_nest_lock (omp_nest_lock_t *);
97void omp_unset_nest_lock (omp_nest_lock_t *);
98int omp_test_nest_lock (omp_nest_lock_t *);
99double omp_get_wtime (void);
100double omp_get_wtick (void);
101*/
Note: See TracBrowser for help on using the repository browser.