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来解决此问题,但在这种情况下,我正在处理库函数。

解决方法

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...