OPENACC如何在#pragma-acc例程中处理库函数



我必须在这个例程中调用<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来解决这个问题,但在这种情况下,我处理的是库函数。

从设备调用的所有例程都需要该例程的设备可调用版本。系统例程通常不具有设备可调用的版本;退出";,所以不能使用。

不过,您无法从设备代码中退出主机应用程序,因此您可能需要重新思考代码的这一部分。代替使用";退出";,您需要捕获错误,然后在执行返回到主机后中止。

最新更新