OpenACC - 如何查找设备是否忙于执行某些 CUDA 操作?
OpenACC - How to find if device is busy doing some CUDA operations?
我有一个基于 CUDA 的代码,我想将 OpenACC 合并到代码的某些部分。但是,我试图通过 OpenACC 代码并行化的函数有时由 CUDA 调用控制,有时则不受控制。
我的问题是如何查询 OpenACC 库以查看设备是否忙。是否有任何 API 呼吁?
注:我对CUDA不是很熟悉,所以直接用伪代码。
有时,当设备忙于计算时,目标函数 seq_function
会在主机上调用,如下所示。但是,有时它会在设备不忙时被调用。
cudaMemAlloc(...);
cudaLaunchAsync(...);
...
//This is the function I am trying to parallelize with OpenACC
seq_function(...);
...
cudaWait(...);
cudaDealloc(...);
所以,我想让我的目标函数灵活:
- 如果设备忙或基于 CUDA 的计算 运行 => 使用主机。
- 如果设备不忙 => 通过支持 OpenACC 的代码使用 GPU。
有没有办法知道设备是否忙?
我不知道以编程方式获取设备利用率的方法。您可以通过 cudaMemGetInfo 获取内存使用情况,您可以使用它来推断 GPU 上是否存在 运行。
我有一个基于 CUDA 的代码,我想将 OpenACC 合并到代码的某些部分。但是,我试图通过 OpenACC 代码并行化的函数有时由 CUDA 调用控制,有时则不受控制。
我的问题是如何查询 OpenACC 库以查看设备是否忙。是否有任何 API 呼吁?
注:我对CUDA不是很熟悉,所以直接用伪代码。
有时,当设备忙于计算时,目标函数 seq_function
会在主机上调用,如下所示。但是,有时它会在设备不忙时被调用。
cudaMemAlloc(...);
cudaLaunchAsync(...);
...
//This is the function I am trying to parallelize with OpenACC
seq_function(...);
...
cudaWait(...);
cudaDealloc(...);
所以,我想让我的目标函数灵活:
- 如果设备忙或基于 CUDA 的计算 运行 => 使用主机。
- 如果设备不忙 => 通过支持 OpenACC 的代码使用 GPU。
有没有办法知道设备是否忙?
我不知道以编程方式获取设备利用率的方法。您可以通过 cudaMemGetInfo 获取内存使用情况,您可以使用它来推断 GPU 上是否存在 运行。