2016-07-15 79 views
0

我有一個基於CUDA的代碼,我想將OpenACC合併到代碼的某些部分。但是,我試圖通過OpenACC代碼進行並行化的功能有時由CUDA調用來管理,有時不會。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的計算運行=>使用的主機。
  • if device is not busy =>通過啓用OpenACC的代碼使用GPU。

有沒有辦法找到設備是否忙?

回答

1

我不知道用編程方式獲取設備利用率的方法。您可以通過cudaMemGetInfo獲得內存使用情況,如果GPU上正在運行某些內容,您可以使用它來推斷。

+0

Thanks Mat。雖然它是CUDA和NVidia特有的,並不是OpenACC承諾的一般方法,但它似乎是唯一可以找到的方法。 – Millad

+1

PGI的確提供了對OpenACC API,「acc_get_memory」和「acc_get_free_memory」的擴展,它基本上和cudaMemGetInfo做同樣的事情。由於您在代碼中的其他地方使用CUDA,因此我只建議使用cudaMemGetInfo。 –

+0

我正在使用OpenACC與CUDA的存在(同時也使用CUDA)。我想爲以前編寫的基於CUDA的代碼添加一個功能。所以,這個擴展有很多幫助,並使我的代碼是獨立的。 – Millad

相關問題