Estoy trabajando en un proyecto que necesita hacer uso de FFT en tarjetas gráficas Nvidia y AMD. Inicialmente busqué una biblioteca que funcionara en ambas (pensando que esta sería la forma OpenCL) pero no estaba teniendo suerte.OpenCL FFT en hardware Nvidia y AMD?
Alguien me sugirió que tendría que usar la implementación de FFT de cada proveedor y escribir un contenedor que eligiera qué hacer en función de la plataforma. Encontré la implementación de AMD con bastante facilidad, pero estoy trabajando con una tarjeta Nvidia mientras tanto (y esta es la más importante para mi aplicación en particular).
La única implementación de Nvidia que puedo encontrar es la de CUFFT. ¿Alguien sabe cómo puedo usar la biblioteca CUFFT de OpenCL? La única forma en que puedo pensar es tener algún código CUDA junto con mi código OpenCL. He leído que no puedo usar los búferes OpenCL como punteros CUDA (Trying to mix in OpenCL with CUDA in NVIDIA's SDK template). En su lugar, ¿tendría que copiar los búferes de nuevo en el host después de ejecutar kernels OpenCL y luego copiarlos de nuevo a la GPU utilizando las rutinas de transferencia de memoria CUDA? Realmente no me gusta este enfoque, ya que parece implicar transferencias de memoria inútiles, preferiría mucho si pudiera usar el CUFFT de OpenCL.
ViennaCL ahora contiene una implementación de FFT "experimental". Al menos para transformaciones de potencia 2, debería funcionar razonablemente. – talonmies