source: CIVL/examples/omp/dataracebench-1.3.2/micro-benchmarks/polybench/polybench.h

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

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

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