Предположим, я работаю над некоторым приложением, которое имеет несколько ядер 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.