omp_options
Synopsis with Optional Arguments
#include <imsl.h>
void imsl_omp_options (
IMSL_SET_FUNCTIONS_THREAD_SAFE, int setting,
IMSL_GET_FUNCTIONS_THREAD_SAFE, int *psetting,
0)
Return Value
The return value for this function is void.
Optional Arguments
IMSL_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 are not evaluated in parallel by IMSL C Math Library functions.
IMSL_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 Math 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 Math 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 IMSL_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 computes the integral . A call to the function imsl_omp_options is used to indicate that function fcn is thread-safe and so can be safely evaluated by multiple, simultaneous threads.
#include <stdio.h>
#include <math.h>
#include <imsl.h>
float fcn(float x);
int main()
{
float q;
float exact;
imsl_omp_options(IMSL_SET_FUNCTIONS_THREAD_SAFE, 1, 0);
/* Evaluate the integral and print result */
q = imsl_f_int_fcn (fcn, 0.0, 2.0, 0);
exact = exp(2.0) + 1.0;
printf("integral = %10.3f\nexact = %10.3f\n", q, exact);
}
float fcn(float x)
{
return x * (exp(x));
}
Output
integral = 8.389
exact = 8.389