微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。