gsl_integration_qag failed with gsl openmp
gsl_integration_qag works with 1 core (with/without openMP), but fails with multi-threads (i.e. >1).
Some information that may help...
gsl-2.5
#define _OPENMP 201107
Depending on the number of cores, I can get error reports of:
gsl: qag.c:248: ERROR: roundoff error prevents tolerance from being achieved (comment: usually with a small number of cores)
gsl: qag.c:257: ERROR: maximum number of subdivisions reached (comment: usually with a large number of cores)A large max iteration number given to gsl_integration_qag only delays the code to crash.
The integration function is (can be more specific if needed):
double Func(double Param1, ..., double ParamN)
double result, error;
gsl_function F;
gsl_integration_workspace * w
= gsl_integration_workspace_alloc (1000);
struct parameters_gsl_int_ parameters_gsl =
.Param1 = Param1,
...
.ParamN = ParamN,;
F.function = &func_integrand;
F.params = ¶meters_gsl;
gsl_integration_qag (&F, LOWER_LIMIT, UPPER_LIMIT, 0, 0.001,
1000, GSL_INTEG_GAUSS61, w, &result, &error);
gsl_integration_workspace_free (w);
return result;The OpenMP part that calls the integration is:
void call_Func(int Nbin, double array, double Param1, double Param2, ... double ParamN)
int i;
...
#pragma omp parallel shared(Nbin, array, Param1, ..., ParamN) private(i)
#pragma omp for
for (i=0; i<Nbin; i++)
array[i] = Func(Param1[i], Param2, ..., ParamN);
...
I'm new to both GSL and openMP. I hope I am using gsl_integration_qag correctly and the definition of shared or private variables makes sense.
btw, it's the same question as this 2014 one (gsl openmp failed integration), but I couldn't find the solution in this post.
openmp integration gsl
add a comment |
gsl_integration_qag works with 1 core (with/without openMP), but fails with multi-threads (i.e. >1).
Some information that may help...
gsl-2.5
#define _OPENMP 201107
Depending on the number of cores, I can get error reports of:
gsl: qag.c:248: ERROR: roundoff error prevents tolerance from being achieved (comment: usually with a small number of cores)
gsl: qag.c:257: ERROR: maximum number of subdivisions reached (comment: usually with a large number of cores)A large max iteration number given to gsl_integration_qag only delays the code to crash.
The integration function is (can be more specific if needed):
double Func(double Param1, ..., double ParamN)
double result, error;
gsl_function F;
gsl_integration_workspace * w
= gsl_integration_workspace_alloc (1000);
struct parameters_gsl_int_ parameters_gsl =
.Param1 = Param1,
...
.ParamN = ParamN,;
F.function = &func_integrand;
F.params = ¶meters_gsl;
gsl_integration_qag (&F, LOWER_LIMIT, UPPER_LIMIT, 0, 0.001,
1000, GSL_INTEG_GAUSS61, w, &result, &error);
gsl_integration_workspace_free (w);
return result;The OpenMP part that calls the integration is:
void call_Func(int Nbin, double array, double Param1, double Param2, ... double ParamN)
int i;
...
#pragma omp parallel shared(Nbin, array, Param1, ..., ParamN) private(i)
#pragma omp for
for (i=0; i<Nbin; i++)
array[i] = Func(Param1[i], Param2, ..., ParamN);
...
I'm new to both GSL and openMP. I hope I am using gsl_integration_qag correctly and the definition of shared or private variables makes sense.
btw, it's the same question as this 2014 one (gsl openmp failed integration), but I couldn't find the solution in this post.
openmp integration gsl
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52
add a comment |
gsl_integration_qag works with 1 core (with/without openMP), but fails with multi-threads (i.e. >1).
Some information that may help...
gsl-2.5
#define _OPENMP 201107
Depending on the number of cores, I can get error reports of:
gsl: qag.c:248: ERROR: roundoff error prevents tolerance from being achieved (comment: usually with a small number of cores)
gsl: qag.c:257: ERROR: maximum number of subdivisions reached (comment: usually with a large number of cores)A large max iteration number given to gsl_integration_qag only delays the code to crash.
The integration function is (can be more specific if needed):
double Func(double Param1, ..., double ParamN)
double result, error;
gsl_function F;
gsl_integration_workspace * w
= gsl_integration_workspace_alloc (1000);
struct parameters_gsl_int_ parameters_gsl =
.Param1 = Param1,
...
.ParamN = ParamN,;
F.function = &func_integrand;
F.params = ¶meters_gsl;
gsl_integration_qag (&F, LOWER_LIMIT, UPPER_LIMIT, 0, 0.001,
1000, GSL_INTEG_GAUSS61, w, &result, &error);
gsl_integration_workspace_free (w);
return result;The OpenMP part that calls the integration is:
void call_Func(int Nbin, double array, double Param1, double Param2, ... double ParamN)
int i;
...
#pragma omp parallel shared(Nbin, array, Param1, ..., ParamN) private(i)
#pragma omp for
for (i=0; i<Nbin; i++)
array[i] = Func(Param1[i], Param2, ..., ParamN);
...
I'm new to both GSL and openMP. I hope I am using gsl_integration_qag correctly and the definition of shared or private variables makes sense.
btw, it's the same question as this 2014 one (gsl openmp failed integration), but I couldn't find the solution in this post.
openmp integration gsl
gsl_integration_qag works with 1 core (with/without openMP), but fails with multi-threads (i.e. >1).
Some information that may help...
gsl-2.5
#define _OPENMP 201107
Depending on the number of cores, I can get error reports of:
gsl: qag.c:248: ERROR: roundoff error prevents tolerance from being achieved (comment: usually with a small number of cores)
gsl: qag.c:257: ERROR: maximum number of subdivisions reached (comment: usually with a large number of cores)A large max iteration number given to gsl_integration_qag only delays the code to crash.
The integration function is (can be more specific if needed):
double Func(double Param1, ..., double ParamN)
double result, error;
gsl_function F;
gsl_integration_workspace * w
= gsl_integration_workspace_alloc (1000);
struct parameters_gsl_int_ parameters_gsl =
.Param1 = Param1,
...
.ParamN = ParamN,;
F.function = &func_integrand;
F.params = ¶meters_gsl;
gsl_integration_qag (&F, LOWER_LIMIT, UPPER_LIMIT, 0, 0.001,
1000, GSL_INTEG_GAUSS61, w, &result, &error);
gsl_integration_workspace_free (w);
return result;The OpenMP part that calls the integration is:
void call_Func(int Nbin, double array, double Param1, double Param2, ... double ParamN)
int i;
...
#pragma omp parallel shared(Nbin, array, Param1, ..., ParamN) private(i)
#pragma omp for
for (i=0; i<Nbin; i++)
array[i] = Func(Param1[i], Param2, ..., ParamN);
...
I'm new to both GSL and openMP. I hope I am using gsl_integration_qag correctly and the definition of shared or private variables makes sense.
btw, it's the same question as this 2014 one (gsl openmp failed integration), but I couldn't find the solution in this post.
openmp integration gsl
openmp integration gsl
asked Nov 13 '18 at 9:54
Yuxiang QinYuxiang Qin
112
112
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52
add a comment |
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52
add a comment |
1 Answer
1
active
oldest
votes
Problem solved...
It is actually due to func_integrand having also a term which is estimated using gsl_integration_qag. There were some global variables adopted in this calculation, which I didn't capture before.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53278276%2fgsl-integration-qag-failed-with-gsl-openmp%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Problem solved...
It is actually due to func_integrand having also a term which is estimated using gsl_integration_qag. There were some global variables adopted in this calculation, which I didn't capture before.
add a comment |
Problem solved...
It is actually due to func_integrand having also a term which is estimated using gsl_integration_qag. There were some global variables adopted in this calculation, which I didn't capture before.
add a comment |
Problem solved...
It is actually due to func_integrand having also a term which is estimated using gsl_integration_qag. There were some global variables adopted in this calculation, which I didn't capture before.
Problem solved...
It is actually due to func_integrand having also a term which is estimated using gsl_integration_qag. There were some global variables adopted in this calculation, which I didn't capture before.
answered Nov 19 '18 at 20:49
Yuxiang QinYuxiang Qin
112
112
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53278276%2fgsl-integration-qag-failed-with-gsl-openmp%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
When it comes to parallel code, GSL is far from perfect, unfortunately. However, I saw a repository (probably official or semi-official) where they try to add OMP support.
– Vladimir
Nov 13 '18 at 14:51
Not very sure but is it possible that NBin*1000 is larger than the upper limit?
– zmwang
Nov 14 '18 at 13:31
I don't think I understand it, why would Nbin*1000>UPPER_LIMIT be a problem? Or you are not referring to the upper limit as the upper limit of the integral?
– Yuxiang Qin
Nov 14 '18 at 14:52