【问题标题】:OPENACC How to handle a library function in a #pragma acc routineOPENACC 如何在#pragma acc 例程中处理库函数
【发布时间】:2020-12-18 15:55:17
【问题描述】:

我必须在这个例程中调用<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”中“退出”的引用

通常我通过在函数主体之前添加例程#pragma acc routine 来解决这个问题,但在这种情况下,我正在处理一个库函数。

【问题讨论】:

    标签: openacc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2021-09-23
      • 2020-05-14
      • 2021-02-16
      • 2019-07-01
      • 1970-01-01
      • 2021-05-01
      • 2018-05-07
      • 2021-03-18
      相关资源
      最近更新 更多