openACC 例程中的 cuSPARSE 库调用
cuSPARSE library calls inside openACC 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 );
}
}
感谢您的帮助。
OpenACC 加速器区域 通常用 acc parallel
或 acc kernels
指令描述。可以从加速器区域调用的 OpenACC routine
指令 is intended to delineate 函数或过程。
加速器区域支持的功能可能会有所不同,具体取决于该区域是或将要定位的加速器类型。
关于以 CUDA GPU 为目标的加速器区域,这些区域将由 OpenACC 编译器翻译成 CUDA 设备代码。 cuSPARSE 函数只能从主机代码调用,不能从 CUDA 设备代码调用。因此,它们在面向 CUDA 设备的 OpenACC 加速器区域(或从加速器区域调用的 OpenACC 例程)中不可用。
是否可以从例程指令中调用 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 );
}
}
感谢您的帮助。
OpenACC 加速器区域 通常用 acc parallel
或 acc kernels
指令描述。可以从加速器区域调用的 OpenACC routine
指令 is intended to delineate 函数或过程。
加速器区域支持的功能可能会有所不同,具体取决于该区域是或将要定位的加速器类型。
关于以 CUDA GPU 为目标的加速器区域,这些区域将由 OpenACC 编译器翻译成 CUDA 设备代码。 cuSPARSE 函数只能从主机代码调用,不能从 CUDA 设备代码调用。因此,它们在面向 CUDA 设备的 OpenACC 加速器区域(或从加速器区域调用的 OpenACC 例程)中不可用。