Я пишу кусок кода, который использует библиотеку FFTW3 и хочу перенести его на графический процессор с помощью CUDA. Самый простой способ сделать это — использовать библиотеку совместимости cuFFTW, но, как говорится в документации, предполагается полностью заменить версию FFTW для ЦП на эквивалентную для GPU. После добавления cufftw.h
заголовок он заменяет все функции процессора, а код работает на GPU.
Но есть ли способ иметь и то и другое Версии FFTW для CPU и GPU в моем коде, чтобы я мог переключаться между ними во время выполнения, например через флажок в пользовательском интерфейсе? Или единственный способ добиться этого — использовать нативный cuFFT API?
Даже не глядя на заголовки библиотеки: Да.
Упрощенным решением было бы иметь разные блоки компиляции, каждая из которых включает только одну из библиотек, и выставлять только свои собственные пользовательские функции / классы / и т. Д. в остальной части приложения. Таким образом, заголовки двух библиотек не будут мешать друг другу.
Однако вполне возможно, что есть лучшее решение. Я бы посмотрел на cufftw.h
чтобы увидеть, что именно там делает nVIDIA и как именно он «заменяет» функции процессора.
Других решений пока нет …