2012-07-03 8 views
8

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.

+0

ViennaCL zawiera teraz "eksperymentalną" implementację FFT. Przynajmniej w przypadku transformacji o potędze 2 powinien on działać rozsądnie. – talonmies

Odpowiedz

6

NVIDIA nie podjęła żadnych działań w celu wsparcia bibliotek OpenCL, takich jak FFT. Nie dostarczył również źródła do bibliotek CUDA, więc nie ma sposobu na uruchomienie tych przy użyciu OpenCL.

Biblioteka FFT firmy AMD jest najlepszym rozwiązaniem i będzie działać na każdym innym urządzeniu zgodnym z OpenCL, w tym na procesorach graficznych NVIDIA. ArrayFire OpenCL wykorzystuje bibliotekę FFT firmy AMD i uruchomiłem ją w naszych laboratoriach na urządzeniach Intel, NVIDIA i AMD.

1

Oprócz sugestii AMD Ben, można również zbadać przykładowy kod Apple FFT. Jednak ich kod działa tylko na urządzeniach GPU, ponieważ sprawdza, dla jakich typów urządzeń utworzono kolejkę poleceń.

0

the SHOC benchmark on github zawiera również kod, który przetestowałem na Nvidia GPU 650M, intel gpu, i procesor intel dla FFT. w oknach tworzenie projektu i ustawianie ścieżki włączania i łączenia zajmuje kilka minut, ale było to proste. uruchomienie na intel-gpu wymaga ustawienia opcji wiersza poleceń lub niewielkiej modyfikacji kodu, ponieważ intel gpu to urządzenie 1, a nie urządzenie 0, które jest domyślne w pakiecie benchmarków shoc.

Nie zweryfikowałem poprawności danych wyjściowych, tylko że została skompilowana i przebiegła do końca.