[PATCH] OpenMP support

Jeffrey D. Oldham oldham at codesourcery.com
Mon Jan 5 21:44:34 UTC 2004


Richard Guenther wrote:
> Hi Jeffrey,
> 
> would you please look at "[PATCH] OpenMP loop level parallelism" mail I
> sent Dec23?  Additionally to this patch I propose the following, which
> adds a --openmp switch to configure.

The 23Dec patch is fine.

> Tested with gcc (with and without --openmp, which is the same here) and
> Intel icpc (with and without --openmp, which makes a difference here).
> 
> Ok?

Yes.

> Thanks,
> 
> Richard.
> 
> 
> 2004Jan02  Richard Guenther <richard.guenther at uni-tuebingen.de>
> 
> 	* config/arch/LINUXICC.conf: don't warn about unused #pragmas.
> 	configure: add --openmp switch.
> 	scripts/configure.ac: add test to detect wether -openmp works.

s/wether/whether/

> 	scripts/configure: regenerated.
> 
> diff -Nru a/r2/config/arch/LINUXICC.conf b/r2/config/arch/LINUXICC.conf
> --- a/r2/config/arch/LINUXICC.conf	Fri Jan  2 16:32:14 2004
> +++ b/r2/config/arch/LINUXICC.conf	Fri Jan  2 16:32:14 2004
> @@ -170,8 +170,8 @@
> 
>  ### debug or optimized build settings for C++ applications
> 
> -$cppdbg_app  = "-g";
> -$cppopt_app  = "-DNOPAssert -DNOCTAssert -O2";
> +$cppdbg_app  = "-g -wd161";
> +$cppopt_app  = "-DNOPAssert -DNOCTAssert -O2 -wd161";
> 
> 
>  ### debug or optimized build settings for C++ libraries
> diff -Nru a/r2/configure b/r2/configure
> --- a/r2/configure	Fri Jan  2 16:32:14 2004
> +++ b/r2/configure	Fri Jan  2 16:32:14 2004
> @@ -170,6 +170,7 @@
>  $prefixnm = "--prefix";
>  $serialnm = "--serial";
>  $threadsnm = "--threads";
> +$openmpnm = "--openmp";
>  $profilenm = "--profile";
>  $insurenm = "--insure";
>  $debugnm = "--debug";
> @@ -237,7 +238,8 @@
>    [$finternm,    "",         "include fortran support libraries."],
>    [$nofinternm,  "",         "do not include the fortran libraries."],
>    [$serialnm,    "",         "configure to run serially, no parallelism."],
> -  [$threadsnm,  "",         "include threads capability, if available."],
> +  [$threadsnm,   "",         "include threads capability, if available."],
> +  [$openmpnm,    "",         "enable use of OpenMP, if available."],
>    [$cheetahnm,   "",         "enable use of CHEETAH communications package."],
>    [$schednm,     "<scheduler>", "use <scheduler> for thread scheduling."],
>    [$pawsnm,      "",         "enable PAWS program coupling, if available."],
> @@ -434,6 +436,10 @@
>  $threads_include_makefile = "";
>  $cpp_threads_arg = "";
> 
> +### include OpenMP capability?
> +$openmp = 0;
> +$openmpargs = "";
> +
>  ### if threads is used, what scheduler should be employed?
>  $scheduler = $schedulerdefault;
> 
> @@ -1307,9 +1313,9 @@
>  sub setthreads
>  {
>    # set $threads variable properly
> -  if (scalar @{$arghash{$threadsnm}} > 1 and scalar @{$arghash{$serialnm}}> 1)
> +  if (scalar @{$arghash{$threadsnm}} > 1 and (scalar @{$arghash{$serialnm}} > 1 or scalar @{$arghash{$openmpnm}} > 1))
>      {
> -      printerror "$threadsnm and $serialnm both given.  Use only one.";
> +      printerror "$threadsnm and $serialnm or $openmpnm given.  Use only one.";
>      }
>    elsif (not $threads_able or scalar @{$arghash{$serialnm}} > 1)
>      {
> @@ -1438,6 +1444,13 @@
>    $pooma_reorder_iterates = $threads || ($scheduler eq "serialAsync");
> 
>    add_yesno_define("POOMA_REORDER_ITERATES", $pooma_reorder_iterates);
> +
> +  # OpenMP support
> +  if (scalar @{$arghash{$openmpnm}} > 1)
> +    {
> +      $openmpargs = "\@openmpargs\@";
> +    }
> +
>  }
> 
> 
> @@ -1936,20 +1949,20 @@
>    print FSUITE "LD                  = $link\n";
>    print FSUITE "\n";
>    print FSUITE "### flags for applications\n";
> -  print FSUITE "CXX_OPT_LIB_ARGS    = \@cppargs\@ $cppshare $cppopt_lib\n";
> -  print FSUITE "CXX_DBG_LIB_ARGS    = \@cppargs\@ $cppshare $cppdbg_lib\n";
> -  print FSUITE "CXX_OPT_APP_ARGS    = \@cppargs\@ $cppopt_app\n";
> -  print FSUITE "CXX_DBG_APP_ARGS    = \@cppargs\@ $cppdbg_app\n";
> +  print FSUITE "CXX_OPT_LIB_ARGS    = \@cppargs\@ $openmpargs $cppshare $cppopt_lib\n";
> +  print FSUITE "CXX_DBG_LIB_ARGS    = \@cppargs\@ $openmpargs $cppshare $cppdbg_lib\n";
> +  print FSUITE "CXX_OPT_APP_ARGS    = \@cppargs\@ $openmpargs $cppopt_app\n";
> +  print FSUITE "CXX_DBG_APP_ARGS    = \@cppargs\@ $openmpargs $cppdbg_app\n";
>    print FSUITE "\n";
> -  print FSUITE "C_OPT_LIB_ARGS      = \@cargs\@ $cshare $copt_lib\n";
> -  print FSUITE "C_DBG_LIB_ARGS      = \@cargs\@ $cshare $cdbg_lib\n";
> -  print FSUITE "C_OPT_APP_ARGS      = \@cargs\@ $copt_app\n";
> -  print FSUITE "C_DBG_APP_ARGS      = \@cargs\@ $cdbg_app\n";
> +  print FSUITE "C_OPT_LIB_ARGS      = \@cargs\@ $openmpargs $cshare $copt_lib\n";
> +  print FSUITE "C_DBG_LIB_ARGS      = \@cargs\@ $openmpargs $cshare $cdbg_lib\n";
> +  print FSUITE "C_OPT_APP_ARGS      = \@cargs\@ $openmpargs $copt_app\n";
> +  print FSUITE "C_DBG_APP_ARGS      = \@cargs\@ $openmpargs $cdbg_app\n";
>    print FSUITE "\n";
> -  print FSUITE "F77_OPT_LIB_ARGS    = $f77args $f77share $f77opt_lib\n";
> -  print FSUITE "F77_DBG_LIB_ARGS    = $f77args $f77share $f77dbg_lib\n";
> -  print FSUITE "F77_OPT_APP_ARGS    = $f77args $f77opt_app\n";
> -  print FSUITE "F77_DBG_APP_ARGS    = $f77args $f77dbg_app\n";
> +  print FSUITE "F77_OPT_LIB_ARGS    = $f77args $openmpargs $f77share $f77opt_lib\n";
> +  print FSUITE "F77_DBG_LIB_ARGS    = $f77args $openmpargs $f77share $f77dbg_lib\n";
> +  print FSUITE "F77_OPT_APP_ARGS    = $f77args $openmpargs $f77opt_app\n";
> +  print FSUITE "F77_DBG_APP_ARGS    = $f77args $openmpargs $f77dbg_app\n";
>    print FSUITE "\n";
>    if ($shared) {
>        print FSUITE "AR_OPT_ARGS         = $arshareopt\n";
> diff -Nru a/r2/scripts/configure.ac b/r2/scripts/configure.ac
> --- a/r2/scripts/configure.ac	Fri Jan  2 16:32:14 2004
> +++ b/r2/scripts/configure.ac	Fri Jan  2 16:32:14 2004
> @@ -352,6 +352,31 @@
> 
> 
>  dnl
> +dnl Check for compiler argument for OpenMP support
> +dnl
> +
> +AC_MSG_CHECKING([for way to enable OpenMP support])
> +acx_saved_cxxflags=$CXXFLAGS
> +CXXFLAGS="$CXXFLAGS -openmp"
> +AC_TRY_LINK([
> +#include <omp.h>
> +], [
> +	double d[128];
> +#pragma omp parallel for
> +	for (int i=0; i<128; ++i)
> +		d[i] = 1.0;
> +	omp_get_max_threads();
> +], [
> +AC_MSG_RESULT([-openmp])
> +openmpargs="-openmp"
> +], [
> +AC_MSG_RESULT([none])
> +])
> +CXXFLAGS=$acx_saved_cxxflags
> +AC_SUBST(openmpargs)
> +
> +
> +dnl
>  dnl Check on how to get failure on unrecognized pragmas
>  dnl gcc: -Wunknown-pragmas -Werror
>  dnl icpc: -we161


-- 
Jeffrey D. Oldham
oldham at codesourcery.com




More information about the pooma-dev mailing list