У меня есть код на основе 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.
Есть ли способ узнать, занято устройство или нет?