[R-pkg-devel] please help understand an error in openMP statements

Ivan Krylov kry|ov@r00t @end|ng |rom gm@||@com
Fri Sep 13 10:43:54 CEST 2019


On Thu, 12 Sep 2019 16:12:17 -0500
Marcin Jurek <marcinjurek1988 using gmail.com> wrote:

> U_NZentries.cpp:258:19: error: ‘covparms’ not specified in enclosing ‘parallel’
>   258 |  covmat= MaternFun(dist,covparms) + diagmat(nug) ; // summation from arma
>       |          ~~~~~~~~~^~~~~~~~~~~~~~~

This might be a compiler bug: const arma::vec covparms from the
argument list should have been automatically predetermined "shared". If
you try to specify #pragma omp shared(...,covparams) manually, you might
hit another error: "covparams" is predetermined "shared" for "shared".
In a similar case, I couldn't find a good workaround and had to switch
to default(shared).

> U_NZentries.cpp:271:12: error: ‘none’ not specified in enclosing ‘parallel’
>   271 |     M=solve(chol(covmat,"upper"),onevec);
>       |       ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is probably about the temporary returned from
chol(covmat,"upper"). Declare a variable for it inside the loop, and
the compiler will understand that it's private. Again, this shouldn't
be happening, so what I'm offering is a workaround.

What I find really strange is that gcc-4.9.3/mingw_32/bin/g++.exe
doesn't have any problems with this code, while supposedly newer g++-9
does.

-- 
Best regards,
Ivan



More information about the R-package-devel mailing list