问题描述
我必须在此例程内调用<stdlib.h>
函数exit()
:
#pragma acc routine(Check) seq
int Check (double **u,char *str)
{
for (int i = beg; i <= end; i++) {
for (int v = 0; v < vend; v++) {
if (isnan(u[i][v])) {
#pragma acc routine(Here) seq
Here (i,NULL);
#pragma acc routine(exit)
exit(1);
}
}}
return 0;
}
我得到了错误:
nvlink错误:在'tools.o'中未定义对'exit'的引用
通常,我通过在函数主体之前添加例程#pragma acc routine
来解决此问题,但在这种情况下,我正在处理库函数。
解决方法
从设备调用的所有例程都需要该例程的设备可调用版本。系统例程通常没有设备可调用的版本,包括“退出”,因此无法使用。
但是,您无法从设备代码中退出主机应用程序,因此您可能需要重新考虑代码的这一部分。您将要捕获错误,然后在执行返回到主机后中止操作,而不是使用“退出”。