1 /* Global headerfile of the OpenMP Testsuite */
3 #ifndef OMP_TESTSUITE_H
4 #define OMP_TESTSUITE_H
11 /**********************************************************/
12 #define LOOPCOUNT 1000 /* Number of iterations to slit amongst threads */
13 #define REPETITIONS 10 /* Number of times to run each test */
15 /* following times are in seconds */
18 /* Definitions for tasks */
19 /**********************************************************/
21 #define MAX_TASKS_PER_THREAD 5
23 // Functions that call a parallel region that does very minimal work
24 // Some compilers may optimize away an empty parallel region
25 volatile int g_counter__
;
27 // If nthreads == 0, then do not use num_threads() clause
28 static void go_parallel() {
37 static void go_parallel_nthreads(int nthreads
) {
39 #pragma omp parallel num_threads(nthreads)
46 static void go_parallel_spread() {
48 #pragma omp parallel proc_bind(spread)
55 static void go_parallel_close() {
57 #pragma omp parallel proc_bind(close)
64 static void go_parallel_master() {
66 #pragma omp parallel proc_bind(master)
73 static inline int get_exit_value() {
74 return ((g_counter__
== -1) ? EXIT_FAILURE
: EXIT_SUCCESS
);
78 // Windows versions of pthread_create() and pthread_join()
80 typedef HANDLE pthread_t
;
82 // encapsulates the information about a pthread-callable function
83 struct thread_func_info_t
{
84 void* (*start_routine
)(void*);
88 // call the void* start_routine(void*);
89 static DWORD WINAPI
__thread_func_wrapper(LPVOID lpParameter
) {
90 struct thread_func_info_t
* function_information
;
91 function_information
= (struct thread_func_info_t
*)lpParameter
;
92 function_information
->start_routine(function_information
->arg
);
93 free(function_information
);
98 static int pthread_create(pthread_t
*thread
, void *attr
,
99 void *(*start_routine
) (void *), void *arg
) {
101 struct thread_func_info_t
* info
;
102 info
= (struct thread_func_info_t
*)malloc(sizeof(struct thread_func_info_t
));
103 info
->start_routine
= start_routine
;
105 pthread
= CreateThread(NULL
, 0, __thread_func_wrapper
, info
, 0, NULL
);
106 if (pthread
== NULL
) {
107 fprintf(stderr
, "CreateThread() failed: Error #%u.\n",
108 (unsigned) GetLastError());
114 // retval is ignored for now
115 static int pthread_join(pthread_t thread
, void **retval
) {
117 rc
= WaitForSingleObject(thread
, INFINITE
);
118 if (rc
== WAIT_FAILED
) {
119 fprintf(stderr
, "WaitForSingleObject() failed: Error #%u.\n",
120 (unsigned) GetLastError());
123 rc
= CloseHandle(thread
);
125 fprintf(stderr
, "CloseHandle() failed: Error #%u.\n",
126 (unsigned) GetLastError());
132 # include <pthread.h>