Chapter 15: Utilities > omp_options

omp_options

Sets various OpenMP options.

Synopsis

#include <imsls.h>

void imsls_omp_options
(
IMSLS_SET_FUNCTIONS_THREAD_SAFE, int setting, (Input)
IMSLS_GET_FUNCTIONS_THREAD_SAFE, int *psetting (Output)
0)

Return Value

The return value for this function is void.

Optional Arguments

IMSLS_SET_FUNCTIONS_THREAD_SAFE, int setting   (Input)
If nonzero, user supplied functions are assumed to be thread-safe. This allows user functions to be evaluated in parallel with different arguments.
Default: User supplied functions are not assumed to be thread-safe and will not be evaluated in parallel by  IMSL C Stat Library functions.

IMSLS_GET_FUNCTIONS_THREAD_SAFE, int *psetting   (Output)
Sets the integer pointed to by psetting  to zero if user functions are not assumed to be thread-safe and to one if they are assumed to be thread-safe.

Description

The performance of some IMSL C Stat Library functions can be improved if they evaluate user supplied functions in parallel. Unfortunately, incorrect results can occur if the user supplied functions are not thread-safe. By default, the IMSL C Stat Library assumes user supplied functions are not thread-safe and thus will not evaluate them in parallel. To change this assumption, use the optional argument IMSLS_SET_FUNCTIONS_THREAD_SAFE with its argument equal to one.

This function can be used multiple times in an application to change the thread-safe assumption.

Example

This example performs a chi-squared test on a randomly generated sample. A call to the function imsls_omp_options is used to indicate that function cdf is thread-safe and so can be safely evaluated by multiple, simultaneous threads.

#include <imsls.h>

static float cdf(float x);

 

#define SEED 123457

#define N_CATEGORIES 10

#define N_OBSERVATIONS 1000

 

int main()

{

    float *x, p_value;

 

    imsls_omp_options(IMSLS_SET_FUNCTIONS_THREAD_SAFE, 1, 0);

 

    imsls_random_seed_set(SEED);

    x = imsls_f_random_normal (N_OBSERVATIONS, 0);

    p_value = imsls_f_chi_squared_test (cdf, N_OBSERVATIONS,

        N_CATEGORIES, x, 0);

    printf ("p-value = %7.4f\n", p_value);

}

 

static float cdf(float x)

{

    return imsls_f_normal_cdf(x);

}

Output

p-value =  0.1546


RW_logo.jpg
Contact Support