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。
有沒有辦法找到設備是否忙?
Thanks Mat。雖然它是CUDA和NVidia特有的,並不是OpenACC承諾的一般方法,但它似乎是唯一可以找到的方法。 – Millad
PGI的確提供了對OpenACC API,「acc_get_memory」和「acc_get_free_memory」的擴展,它基本上和cudaMemGetInfo做同樣的事情。由於您在代碼中的其他地方使用CUDA,因此我只建議使用cudaMemGetInfo。 –
我正在使用OpenACC與CUDA的存在(同時也使用CUDA)。我想爲以前編寫的基於CUDA的代碼添加一個功能。所以,這個擴展有很多幫助,並使我的代碼是獨立的。 – Millad