我正在使用OPENACC将CPU代码移植到GPU, 例程返回退出代码
int myFunction()
{
// so stuff
// it has a check for division by zero
int returnVal=SUCCESS;
if(fabs(a)<1e-14)
{
returnVal=1;
}
return(returnVal);
}
添加
#pragma acc routine seq
int myFunction()
{
// so stuff
// it has a check for division by zero
int returnVal=SUCCESS;
if(fabs(a)<1e-14)
{
returnVal=1;
}
return(returnVal);
}
会出现以下错误, 调用cuStreamSynchronize返回错误719:启动失败(通常是无效的指针取消引用)
对cuMemFreeHost的调用返回错误719:启动失败(通常是无效的指针取消引用)
主要作业正常终止,但是返回了1个进程 一个非零的退出代码。按用户方向,作业已中止。
如果我通过将返回值更改为void来消除收益,则效果很好, 正确的做法是什么? 考虑到这是在循环内调用的事实,我确实了解竞态条件,是否应该私有化返回值,然后对其进行折减?