我必须在这个例程中调用<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
来解决这个问题,但在这种情况下,我处理的是库函数。
从设备调用的所有例程都需要该例程的设备可调用版本。系统例程通常不具有设备可调用的版本;退出";,所以不能使用。
不过,您无法从设备代码中退出主机应用程序,因此您可能需要重新思考代码的这一部分。代替使用";退出";,您需要捕获错误,然后在执行返回到主机后中止。