Pracuję nad projektem, który musi korzystać z FFT na kartach graficznych Nvidia i AMD. Początkowo szukałem biblioteki, która działałaby na obu (myśląc, że to będzie sposób OpenCL), ale nie miałem szczęścia.OpenCL FFT na sprzęcie Nvidia i AMD?
Ktoś zasugerował mi, że będę musiał użyć implementacji FFT każdego dostawcy i napisać opakowanie, które wybrałoby to, co należy zrobić na podstawie platformy. Zauważyłem, że wdrożenie AMD jest łatwe, ale w międzyczasie pracuję z kartą Nvidii (i jest to ważniejsze dla mojej konkretnej aplikacji).
Jedyną implementacją Nvidii, którą mogę znaleźć, jest CUFFT. Czy ktoś wie, w jaki sposób mogę faktycznie korzystać z biblioteki CUFFT z OpenCL? Jedyny sposób, jaki mogę wymyślić, to posiadanie kodu CUDA obok mojego kodu OpenCL. Czytałem, że nie mogę po prostu używać buforów OpenCL jako wskaźników CUDA (Trying to mix in OpenCL with CUDA in NVIDIA's SDK template). Zamiast tego, czy będę musiał skopiować bufory z powrotem do hosta po uruchomieniu jądra OpenCL, a następnie skopiować je z powrotem do procesora graficznego za pomocą procedur przesyłania pamięci CUDA? Nie podoba mi się to podejście, ponieważ wydaje się, że dotyczy to bezcelowych transferów pamięci, wolałbym, gdybym mógł po prostu użyć CUFFT z OpenCL.
ViennaCL zawiera teraz "eksperymentalną" implementację FFT. Przynajmniej w przypadku transformacji o potędze 2 powinien on działać rozsądnie. – talonmies