在计算区域中调用的过程必须有一个例程信息退出



我有这个函数,在代码的各个部分被调用,当我有一个错误,我需要停止程序的运行。但是,我只在nvidia显卡(-ta=nvidia:managed)上编译时得到此错误,在CPU (ta:multicore)上编译时不会发生这种情况

void exit_tool()
{
printf("Simulacao interrompida");
exit(1);
}

在计算区域中调用的过程必须具有acc例程信息- exit

正确,为了在设备上调用一个例程,需要有一个可用的设备可调用版本。'exit'是不支持的设备例程,因为你不能从设备终止主机进程。

可以调用"assert(0)"终止正在运行的设备内核,但这会破坏CUDA上下文,导致未定义的行为。

考虑到这可能是用于错误检查的调试代码,解决这个问题的最简单方法是有条件地编译这个函数,以便在OpenACC中不使用exit:

void exit_tool()
{
printf("Simulacao interrompida");
#ifndef _OPENACC
exit(1);
#endif
}