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

OPENACC How to handle a library function in a #pragma acc routine

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

从设备调用的所有例程都需要例程的设备可调用版本。通常系统例程没有设备可调用版本,包括“退出”,因此无法使用。

不过,您无法从设备代码中退出主机应用程序,因此您可能需要重新考虑这部分代码。不要使用“exit”,而是要捕获错误,然后在执行返回到主机后中止。