OpenCL FFT на оборудовании Nvidia и AMD?

Я работаю над проектом, который должен использовать БПФ на видеокартах Nvidia и AMD. Сначала я искал библиотеку, которая работала бы над обоими (думая, что это будет OpenCL), но мне не повезло.

Кто-то предложил мне использовать FFT-реализацию каждого поставщика и написать оболочку, которая бы выбирала, что делать на основе платформы. Я нашел реализацию AMD довольно легко, но в то же время я работаю с картой Nvidia (и это наиболее важно для моего конкретного приложения).

Единственная реализация Nvidia, которую я могу найти - это CUFFT. Кто-нибудь знает, как я могу на самом деле использовать библиотеку CUFFT из OpenCL? Единственный способ, которым я могу думать, - это иметь некоторый код CUDA вместе с моим кодом OpenCL. Я читал, что не могу просто использовать буферы OpenCL в качестве указателей CUDA ( пытаясь смешивать в OpenCL с CUDA в шаблоне SDK от NVIDIA). Вместо этого я должен был бы скопировать буферы обратно на хост после запуска ядер OpenCL и затем скопировать их обратно в GPU, используя процедуры передачи памяти CUDA? Мне не очень нравится этот подход, так как кажется, что он включает в себя бессмысленную передачу памяти, я бы предпочел его, если бы я мог просто использовать CUFFT из OpenCL.

3 ответа

NVIDIA не занималась поддержкой библиотек OpenCL, таких как FFT. Он также не предоставил исходные тексты для своих библиотек CUDA, поэтому нет способа запустить те, которые используют OpenCL.

Библиотека AMD FFT - ваш лучший выбор и будет работать на любом другом OpenCL-совместимом устройстве, включая графические процессоры NVIDIA. ArrayFire OpenCL использует библиотеку FFT от AMD, и я запускал ее на устройствах Intel, NVIDIA и AMD в нашей лаборатории.

В дополнение к предложению Бена AMD, вы также можете исследовать пример кода Apple FFT. Однако их код выполняется только на устройствах с графическим процессором, поскольку он проверяет, для каких типов устройств была создана предоставленная очередь команд.

тест SHOC на github также включает в себя код, который я тестировал на GPU 650M nvidia, Intel GPU и процессор Intel для FFT. В Windows требуется несколько минут, чтобы создать проект и задать путь включения и ссылки, но это было просто. Для работы на Intel GPU необходимо установить параметры командной строки или небольшую модификацию кода, поскольку Intel GPU - это устройство 1, а не устройство 0, что является значением по умолчанию в наборе тестов shoc.

я не проверял правильность вывода, только то, что он компилировался и работал до завершения.

Другие вопросы по тегам