source: CIVL/examples/omp/DataRaceBench/micro-benchmarks/polybench.h@ af3b8e4

1.23 2.0 main test-branch
Last change on this file since af3b8e4 was 143b174, checked in by Ziqing Luo <ziqing@…>, 9 years ago

add results parsing script and Makefile for data race benchmarks

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

  • Property mode set to 100644
File size: 9.1 KB
Line 
1/**
2 * polybench.h: This file is part of the PolyBench 3.0 test suite.
3 *
4 *
5 * Contact: Louis-Noel Pouchet <pouchet@cse.ohio-state.edu>
6 * Web address: http://polybench.sourceforge.net
7 */
8/*
9 * Polybench header for instrumentation.
10 *
11 * Programs must be compiled with `-I utilities utilities/polybench.c'
12 *
13 * Optionally, one can define:
14 *
15 * -DPOLYBENCH_TIME, to report the execution time,
16 * OR (exclusive):
17 * -DPOLYBENCH_PAPI, to use PAPI H/W counters (defined in polybench.c)
18 *
19 *
20 * See README or utilities/polybench.c for additional options.
21 *
22 */
23#ifndef POLYBENCH_H
24# define POLYBENCH_H
25
26/* Array padding. By default, none is used. */
27# ifndef POLYBENCH_PADDING_FACTOR
28/* default: */
29# define POLYBENCH_PADDING_FACTOR 0
30# endif
31
32
33/* C99 arrays in function prototype. By default, do not use. */
34# ifdef POLYBENCH_USE_C99_PROTO
35# define POLYBENCH_C99_SELECT(x,y) y
36# else
37/* default: */
38# define POLYBENCH_C99_SELECT(x,y) x
39# endif
40
41
42/* Macros to reference an array. Generic for heap and stack arrays
43 (C99). Each array dimensionality has his own macro, to be used at
44 declaration or as a function argument.
45 Example:
46 int b[x] => POLYBENCH_1D_ARRAY(b, x)
47 int A[N][N] => POLYBENCH_2D_ARRAY(A, N, N)
48*/
49# ifndef POLYBENCH_STACK_ARRAYS
50# define POLYBENCH_ARRAY(x) *x
51# define POLYBENCH_FREE_ARRAY(x) free((void*)x);
52# define POLYBENCH_DECL_VAR(x) (*x)
53# else
54# define POLYBENCH_ARRAY(x) x
55# define POLYBENCH_FREE_ARRAY(x)
56# define POLYBENCH_DECL_VAR(x) x
57# endif
58/* Macros for using arrays in the function prototypes. */
59# define POLYBENCH_1D(var, dim1,ddim1) var[POLYBENCH_C99_SELECT(dim1,ddim1) + POLYBENCH_PADDING_FACTOR]
60# define POLYBENCH_2D(var, dim1, dim2, ddim1, ddim2) var[POLYBENCH_C99_SELECT(dim1,ddim1) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim2,ddim2) + POLYBENCH_PADDING_FACTOR]
61# define POLYBENCH_3D(var, dim1, dim2, dim3, ddim1, ddim2, ddim3) var[POLYBENCH_C99_SELECT(dim1,ddim1) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim2,ddim2) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim3,ddim3) + POLYBENCH_PADDING_FACTOR]
62# define POLYBENCH_4D(var, dim1, dim2, dim3, dim4, ddim1, ddim2, ddim3, ddim4) var[POLYBENCH_C99_SELECT(dim1,ddim1) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim2,ddim2) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim3,ddim3) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim4,ddim4) + POLYBENCH_PADDING_FACTOR]
63# define POLYBENCH_5D(var, dim1, dim2, dim3, dim4, dim5, ddim1, ddim2, ddim3, ddim4) var[POLYBENCH_C99_SELECT(dim1,ddim1) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim2,ddim2) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim3,ddim3) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim4,ddim4) + POLYBENCH_PADDING_FACTOR][POLYBENCH_C99_SELECT(dim5,ddim5) + POLYBENCH_PADDING_FACTOR]
64
65
66/* Macros to allocate heap arrays.
67 Example:
68 polybench_alloc_2d_array(N, M, double) => allocates N x M x sizeof(double)
69 and returns a pointer to the 2d array
70 */
71# define POLYBENCH_ALLOC_1D_ARRAY(n1, type) \
72 (type(*)[n1 + POLYBENCH_PADDING_FACTOR])polybench_alloc_data (n1 + POLYBENCH_PADDING_FACTOR, sizeof(type))
73# define POLYBENCH_ALLOC_2D_ARRAY(n1, n2, type) \
74 (type(*)[n1 + POLYBENCH_PADDING_FACTOR][n2 + POLYBENCH_PADDING_FACTOR])polybench_alloc_data ((n1 + POLYBENCH_PADDING_FACTOR) * (n2 + POLYBENCH_PADDING_FACTOR), sizeof(type))
75# define POLYBENCH_ALLOC_3D_ARRAY(n1, n2, n3, type) \
76 (type(*)[n1 + POLYBENCH_PADDING_FACTOR][n2 + POLYBENCH_PADDING_FACTOR][n3 + POLYBENCH_PADDING_FACTOR])polybench_alloc_data ((n1 + POLYBENCH_PADDING_FACTOR) * (n2 + POLYBENCH_PADDING_FACTOR) * (n3 + POLYBENCH_PADDING_FACTOR), sizeof(type))
77# define POLYBENCH_ALLOC_4D_ARRAY(n1, n2, n3, n4, type) \
78 (type(*)[n1 + POLYBENCH_PADDING_FACTOR][n2 + POLYBENCH_PADDING_FACTOR][n3 + POLYBENCH_PADDING_FACTOR][n4 + POLYBENCH_PADDING_FACTOR])polybench_alloc_data ((n1 + POLYBENCH_PADDING_FACTOR) * (n2 + POLYBENCH_PADDING_FACTOR) * (n3 + POLYBENCH_PADDING_FACTOR) * (n4 + POLYBENCH_PADDING_FACTOR), sizeof(type))
79# define POLYBENCH_ALLOC_5D_ARRAY(n1, n2, n3, n4, n5, type) \
80 (type(*)[n1 + POLYBENCH_PADDING_FACTOR][n2 + POLYBENCH_PADDING_FACTOR][n3 + POLYBENCH_PADDING_FACTOR][n4 + POLYBENCH_PADDING_FACTOR][n5 + POLYBENCH_PADDING_FACTOR])polybench_alloc_data ((n1 + POLYBENCH_PADDING_FACTOR) * (n2 + POLYBENCH_PADDING_FACTOR) * (n3 + POLYBENCH_PADDING_FACTOR) * (n4 + POLYBENCH_PADDING_FACTOR) * (n5 + POLYBENCH_PADDING_FACTOR), sizeof(type))
81
82/* Macros for array declaration. */
83# ifndef POLYBENCH_STACK_ARRAYS
84# define POLYBENCH_1D_ARRAY_DECL(var, type, dim1, ddim1) \
85 type POLYBENCH_1D(POLYBENCH_DECL_VAR(var), dim1, ddim1); \
86 var = POLYBENCH_ALLOC_1D_ARRAY(POLYBENCH_C99_SELECT(dim1, ddim1), type);
87# define POLYBENCH_2D_ARRAY_DECL(var, type, dim1, dim2, ddim1, ddim2) \
88 type POLYBENCH_2D(POLYBENCH_DECL_VAR(var), dim1, dim2, ddim1, ddim2); \
89 var = POLYBENCH_ALLOC_2D_ARRAY(POLYBENCH_C99_SELECT(dim1, ddim1), POLYBENCH_C99_SELECT(dim2, ddim2), type);
90# define POLYBENCH_3D_ARRAY_DECL(var, type, dim1, dim2, dim3, ddim1, ddim2, ddim3) \
91 type POLYBENCH_3D(POLYBENCH_DECL_VAR(var), dim1, dim2, dim3, ddim1, ddim2, ddim3); \
92 var = POLYBENCH_ALLOC_3D_ARRAY(POLYBENCH_C99_SELECT(dim1, ddim1), POLYBENCH_C99_SELECT(dim2, ddim2), POLYBENCH_C99_SELECT(dim3, ddim3), type);
93# define POLYBENCH_4D_ARRAY_DECL(var, dim1, dim2, dim3, dim4, ddim1, ddim2, ddim3, ddim4) \
94 type POLYBENCH_4D(POLYBENCH_DECL_VAR(var), dim1, dim2, ,dim3, dim4, ddim1, ddim2, ddim3, ddim4); \
95 var = POLYBENCH_ALLOC_3D_ARRAY(POLYBENCH_C99_SELECT(dim1, ddim1), POLYBENCH_C99_SELECT(dim2, ddim2), POLYBENCH_C99_SELECT(dim3, ddim3), POLYBENCH_C99_SELECT(dim4, ddim4), type);
96# define POLYBENCH_5D_ARRAY_DECL(var, dim1, dim2, dim3, dim4, dim5, ddim1, ddim2, ddim3, ddim4, ddim5) \
97 type POLYBENCH_5D(POLYBENCH_DECL_VAR(var), dim1, dim2, dim3, dim4, dim5, ddim1, ddim2, ddim3, ddim4, ddim5); \
98 var = POLYBENCH_ALLOC_3D_ARRAY(POLYBENCH_C99_SELECT(dim1, ddim1), POLYBENCH_C99_SELECT(dim2, ddim2), POLYBENCH_C99_SELECT(dim3, ddim3), POLYBENCH_C99_SELECT(dim4, ddim4), POLYBENCH_C99_SELECT(dim5, ddim5), type);
99# else
100# define POLYBENCH_1D_ARRAY_DECL(var, type, dim1, ddim1) \
101 type POLYBENCH_1D(POLYBENCH_DECL_VAR(var), dim1, ddim1);
102# define POLYBENCH_2D_ARRAY_DECL(var, type, dim1, dim2, ddim1, ddim2) \
103 type POLYBENCH_2D(POLYBENCH_DECL_VAR(var), dim1, dim2, ddim1, ddim2);
104# define POLYBENCH_3D_ARRAY_DECL(var, type, dim1, dim2, dim3, ddim1, ddim2, ddim3) \
105 type POLYBENCH_3D(POLYBENCH_DECL_VAR(var), dim1, dim2, dim3, ddim1, ddim2, ddim3);
106# define POLYBENCH_4D_ARRAY_DECL(var, dim1, dim2, dim3, dim4, ddim1, ddim2, ddim3, ddim4) \
107 type POLYBENCH_4D(POLYBENCH_DECL_VAR(var), dim1, dim2, dim3, dim4, ddim1, ddim2, ddim3, ddim4);
108# define POLYBENCH_5D_ARRAY_DECL(var, dim1, dim2, dim3, dim4, dim5, ddim1, ddim2, ddim3, ddim4, ddim5) \
109 type POLYBENCH_5D(POLYBENCH_DECL_VAR(var), dim1, dim2, dim3, dim4, dim5, ddim1, ddim2, ddim3, ddim4, ddim5);
110# endif
111
112
113/* Dead-code elimination macros. Use argc/argv for the run-time check. */
114# ifndef POLYBENCH_DUMP_ARRAYS
115# define POLYBENCH_DCE_ONLY_CODE if (argc > 42 && ! strcmp(argv[0], ""))
116# else
117# define POLYBENCH_DCE_ONLY_CODE
118# endif
119
120# define polybench_prevent_dce(func) \
121 POLYBENCH_DCE_ONLY_CODE \
122 func
123
124
125/* Performance-related instrumentation. See polybench.c */
126# define polybench_start_instruments
127# define polybench_stop_instruments
128# define polybench_print_instruments
129
130
131/* PAPI support. */
132# ifdef POLYBENCH_PAPI
133extern const unsigned int polybench_papi_eventlist[];
134# undef polybench_start_instruments
135# undef polybench_stop_instruments
136# undef polybench_print_instruments
137# define polybench_set_papi_thread_report(x) \
138 polybench_papi_counters_threadid = x;
139# define polybench_start_instruments \
140 polybench_prepare_instruments(); \
141 polybench_papi_init(); \
142 int evid; \
143 for (evid = 0; polybench_papi_eventlist[evid] != 0; evid++) \
144 { \
145 if (polybench_papi_start_counter(evid)) \
146 continue; \
147
148# define polybench_stop_instruments \
149 polybench_papi_stop_counter(evid); \
150 } \
151 polybench_papi_close(); \
152
153# define polybench_print_instruments polybench_papi_print();
154# endif
155
156
157/* Timing support. */
158# if defined(POLYBENCH_TIME) || defined(POLYBENCH_GFLOPS)
159# undef polybench_start_instruments
160# undef polybench_stop_instruments
161# undef polybench_print_instruments
162# define polybench_start_instruments polybench_timer_start();
163# define polybench_stop_instruments polybench_timer_stop();
164# define polybench_print_instruments polybench_timer_print();
165extern double polybench_program_total_flops;
166extern void polybench_timer_start();
167extern void polybench_timer_stop();
168extern void polybench_timer_print();
169# endif
170
171/* Function declaration. */
172# ifdef POLYBENCH_TIME
173extern void polybench_timer_start();
174extern void polybench_timer_stop();
175extern void polybench_timer_print();
176# endif
177
178# ifdef POLYBENCH_PAPI
179extern void polybench_prepare_instruments();
180extern int polybench_papi_start_counter(int evid);
181extern void polybench_papi_stop_counter(int evid);
182extern void polybench_papi_init();
183extern void polybench_papi_close();
184extern void polybench_papi_print();
185# endif
186
187/* Function prototypes. */
188extern void* polybench_alloc_data(int n, int elt_size);
189#endif /* !POLYBENCH_H */
Note: See TracBrowser for help on using the repository browser.