SCIP Doxygen Documentation
Loading...
Searching...
No Matches
def_openmp.h
Go to the documentation of this file.
1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2
/* */
3
/* This file is part of the program and library */
4
/* SCIP --- Solving Constraint Integer Programs */
5
/* */
6
/* Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB) */
7
/* */
8
/* Licensed under the Apache License, Version 2.0 (the "License"); */
9
/* you may not use this file except in compliance with the License. */
10
/* You may obtain a copy of the License at */
11
/* */
12
/* http://www.apache.org/licenses/LICENSE-2.0 */
13
/* */
14
/* Unless required by applicable law or agreed to in writing, software */
15
/* distributed under the License is distributed on an "AS IS" BASIS, */
16
/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17
/* See the License for the specific language governing permissions and */
18
/* limitations under the License. */
19
/* */
20
/* You should have received a copy of the Apache-2.0 license */
21
/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22
/* */
23
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25
/**@file def_openmp.h
26
* @ingroup TASKINTERFACE
27
* @brief wrappers for OpenMP defines
28
* @author Stephen J. Maher
29
*/
30
31
/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33
#ifndef __DEF_OPENMP_H__
34
#define __DEF_OPENMP_H__
35
36
#define STR(x) #x
37
#define STRINGIFY(x) STR(x)
38
#define CONCATENATE(x, y) x y
39
#define CONCATPARENTH(x, y) x ( y )
40
41
#define TPI_NULL NULL
42
43
#ifdef TPI_OMP
44
45
#define TPI_PRAGMA_CLAUSE(directive, clause) _Pragma( STRINGIFY( CONCATENATE( directive, clause ) ) )
46
#define TPI_PRAGMA(directive) _Pragma( STRINGIFY( directive ) )
47
#define TPI_PRAGMA_PARENTH(directive, var) _Pragma( STRINGIFY( CONCATPARENTH( directive, var ) ) )
48
49
#else
50
51
#define TPI_PRAGMA_CLAUSE(directive, clause)
52
#define TPI_PRAGMA(directive)
53
#define TPI_PRAGMA_PARENTH(directive, var)
54
55
#endif
56
57
58
#define TPI_FOR_CLAUSE(clause) TPI_PRAGMA_CLAUSE( TPI_DIR_FOR, clause )
59
#define TPI_FOR TPI_PRAGMA( TPI_DIR_FOR )
60
#define TPI_PARA_CLAUSE(clause) TPI_PRAGMA_CLAUSE( TPI_DIR_PARA, clause )
61
62
#define TPI_PARA_CLAUSE_SHARED(priv, clause) TPI_PRAGMA_CLAUSE( TPI_DIR_PARA, \
63
TPI_CLAUSE_DEFAULT( shared ) \
64
TPI_CLAUSE_PRIVATE( (priv) ) clause )
65
66
#define TPI_PARA_SHARED TPI_PRAGMA_CLAUSE( TPI_DIR_PARA, \
67
TPI_CLAUSE_DEFAULT( shared ) )
68
69
#define TPI_PARA_SHARED_PRIVATE(priv) TPI_PRAGMA_CLAUSE( TPI_DIR_PARA, \
70
TPI_CLAUSE_DEFAULT( shared ) \
71
TPI_CLAUSE_PRIVATE( ( priv ) ) )
72
73
#define TPI_PARA_CLAUSE_NONE(share, priv, clause) TPI_PRAGMA_CLAUSE( TPI_DIR_PARA, \
74
TPI_CLAUSE_DEFAULT( (none) ) \
75
TPI_CLAUSE_SHARED( (share) ) \
76
TPI_CLAUSE_PRIVATE( (priv) ) clause )
77
78
#define TPI_PARA TPI_PRAGMA( TPI_DIR_PARA )
79
#define TPI_CRITICAL(var) TPI_PRAGMA_PARENTH( TPI_DIR_CRITICAL, var)
80
#define TPI_MASTER TPI_PRAGMA( TPI_DIR_MASTER )
81
#define TPI_WAIT TPI_PRAGMA( TPI_DIR_WAIT )
82
#define TPI_ORDERED TPI_PRAGMA( TPI_DIR_ORDERED )
83
#define TPI_SINGLE TPI_PRAGMA( TPI_DIR_SINGLE )
84
#define TPI_CLAUSE_SINGLE(clause) TPI_PRAGMA_CLAUSE( TPI_DIR_SINGLE, clause )
85
#define TPI_TASK TPI_PRAGMA( TPI_DIR_TASK )
86
#define TPI_TASK_SHARED TPI_PRAGMA_CLAUSE( TPI_DIR_TASK, \
87
TPI_CLAUSE_DEFAULT(shared) )
88
#define TPI_CLAUSE_TASK(clause) TPI_PRAGMA_CLAUSE( TPI_DIR_TASK, clause )
89
#define TPI_TASKWAIT TPI_PRAGMA( TPI_DIR_TASKWAIT )
90
91
92
/* OpenMP pragma directives */
93
#define TPI_DIR_PARA omp parallel
94
#define TPI_DIR_FOR omp for
95
#define TPI_DIR_CRITICAL omp critical
96
#define TPI_DIR_MASTER omp master
97
#define TPI_DIR_WAIT omp barrier
98
#define TPI_DIR_ORDERED omp ordered
99
#define TPI_DIR_TASK omp task
100
#define TPI_DIR_SINGLE omp single
101
#define TPI_DIR_TASKWAIT omp taskwait
102
103
104
/* OpenMP clauses */
105
#define TPI_CLAUSE_PRIVATE(var) CONCATENATE( private, var )
106
#define TPI_CLAUSE_FSTPRIVATE(var) CONCATENATE( firstprivate, var )
107
#define TPI_CLAUSE_LSTPRIVATE(var) CONCATENATE( lastprivate, var )
108
#define TPI_CLAUSE_CPYPRIVATE(var) CONCATENATE( copyprivate, var )
109
#define TPI_CLAUSE_NOWAIT nowait
110
#define TPI_CLAUSE_SHARED(var) CONCATENATE( shared, var )
111
#define TPI_CLAUSE_DEFAULT(var) CONCATPARENTH( default, var )
112
/* The reduce clause requires op as either an operator or intrinsic procedure.
113
* Operators: +, *, .and., .or., .eqv., .neqv.
114
* intrinsic procedures: max, min, iand, ior, or ieor*/
115
#define TPI_CLAUSE_REDUCE(op, var) CONCATENATE( reduction, CONCATENATE( CONCATENATE( op, : ), var ) )
116
#define TPI_CLAUSE_ORDERED ordered
117
#define TPI_CLAUSE_IF(var) CONCATENATE( if, var )
118
#define TPI_CLAUSE_NUMTHREADS(var) CONCATENATE( num_threads, var )
119
#define TPI_CLAUSE_SCHEDULE(type) CONCATENATE( schedule, type )
120
#define TPI_CLAUSE_SCHEDULE_CHUNK(type, chunk) CONCATENATE( schedule, CONCATPARENTH( type, chunk ) )
121
#define TPI_CLAUSE_COPYIN(var) CONCATENATE( copyin, var )
122
#define TPI_CLAUSE_FINAL(var) CONCATENATE( final, var )
123
#define TPI_CLAUSE_UNTIED untied
124
#define TPI_CLAUSE_MERGEABLE mergeable
125
#define TPI_CLAUSE_DEPEND(type, var) CONCATENATE( depend, CONCATENATE( CONCATENATE( type, : ), var ) )
126
#define TPI_CLAUSE_PRIORITY(var) CONCATENATE( priority, var )
127
128
129
130
#define TPI_SHARED_DATA(name, members) struct TPI_Shared_Data { \
131
members \
132
} name;
133
134
#define TPI_PRIVATE_DATA(name, members) struct TPI_Private_Data { \
135
members \
136
} name;
137
138
#define TPI_FSTPRIVATE_DATA(name, members) struct TPI_FirstPrivate_Data { \
139
members \
140
} name;
141
142
#define TPI_LSTPRIVATE_DATA(name, members) struct TPI_LastPrivate_Data { \
143
members \
144
} name;
145
146
#define TPI_COPYIN_DATA(name, members) struct TPI_CopyIn_Data { \
147
members \
148
} name;
149
150
151
#endif
tpi
def_openmp.h
© 2002-2024 by Zuse Institute Berlin (ZIB),
Imprint
Generated by
1.13.2