【问题标题】:cuSPARSE library calls inside openACC routineopenACC 例程中的 cuSPARSE 库调用
【发布时间】:2019-07-01 23:06:27
【问题描述】:

是否可以从routine 指令中调用cuSPARSE 库。我在主机上有一个双 for 循环,它调用在 GPU 上运行的 cuSPARSE 函数,我假设将 for 循环放在设备上会有助于提高性能。

    for ( int j = 0; j < nxChunk; j++ )
    {
       for ( int i = 0; i < nyChunk; i++ )
       {            
         #pragma acc parallel 
         setDiag( eig );

        triDiagCusparse( dl, ds, du, tmpMGReal );

         }
      }

感谢您的帮助。

【问题讨论】:

  • 您的代码调用的 cusparse 函数不在 GPU 上运行。它们在主机上运行并在内部启动内核。所以没有。
  • 您显示的代码中没有routine 指令。但无论如何,只要同意@talonmies,cusparse 函数不能从 CUDA 设备代码调用,也不能从 OpenACC 加速器区域调用,或者当加速器区域以 CUDA GPU 为目标时,它们也不能从加速器区域调用的任何 OpenACC 例程调用。目前。
  • 这也是我的理解,但希望得到更多专家的确认

标签: cuda gpu openacc


【解决方案1】:

OpenACC 加速器区域 通常用acc parallelacc kernels 指令来描述。可能从加速器区域调用的 OpenACC routine 指令 is intended to delineate 函数或过程。

加速器区域支持的功能可能会有所不同,具体取决于该区域所针对的加速器类型。

对于以 CUDA GPU 为目标的加速器区域,这些区域将由 OpenACC 编译器翻译成 CUDA 设备代码。 cuSPARSE 函数只能从主机代码调用,不能从 CUDA 设备代码调用。因此,它们不能在以 CUDA 设备为目标的 OpenACC 加速器区域(或从加速器区域调用的 OpenACC 例程)中使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-18
    • 2016-11-19
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2015-10-22
    • 2021-07-21
    相关资源
    最近更新 更多