Смешивание действий CUDA и OpenCL на одной карте - PullRequest
0 голосов
/ 26 апреля 2020

Предположим, я работаю над некоторым приложением, которое имеет несколько ядер CUDA и переходит на OpenCL - или наоборот, с OpenCL на CUDA. В некоторой степени невозможно выполнить переход за один шаг, то есть мы хотим запустить некоторые ядра в OpenCL и другие в CUDA из одного и того же приложения. Теперь, очевидно, чтобы запускать оба вида ядер на одной и той же машине, вам нужно использовать графические процессоры nVIDIA, так что это наша настройка.

Мой вопрос таков: насколько реалистично c смешивать OpenCL и CUDA? звонки на одно и то же устройство с графическим процессором и ожидаете «разумного» поведения? например, предположим, что я создал контекст OpenCL и отдельный контекст CUDA, очередь OpenCL и очередь CUDA в каждой из них, и я планирую работу для каждого из них, используя вызовы API OpenCL и CUDA соответственно. Будет ли GPU планировать свою работу так же, как пара потоков CUDA GPU? И смогу ли я профилировать свой процесс, так как только элементы OpenCL не будут отображаться (что мы знаем, что они делают) в результатах профилирования?

Пройдем немного глубже - если поверхностный уровень смешивания OpenCL и CUDA встречается с успехом, как насчет таких вещей, как:

  • Запуск с использованием API противоположной стороны изнутри обратного вызова;
  • Преобразование между CUDA и OpenCLstream одного вида в поток другого;
  • Одновременно работающие ядра OpenCL и собственного CUDA

et c.

...