2012-07-03 14 views
8

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.

+0

ViennaCL ahora contiene una implementación de FFT "experimental". Al menos para transformaciones de potencia 2, debería funcionar razonablemente. – talonmies

Respuesta

6

NVIDIA no ha hecho ningún trabajo para admitir bibliotecas OpenCL, como FFT. Tampoco ha proporcionado la fuente a sus bibliotecas CUDA, por lo que no hay forma de ejecutar las que usan OpenCL.

La biblioteca FFT de AMD es su mejor opción y se ejecutará en cualquier otro dispositivo compatible con OpenCL, incluidas las GPU de NVIDIA. ArrayFire OpenCL aprovecha la biblioteca de FFT de AMD y lo he ejecutado en los dispositivos Intel, NVIDIA y AMD en nuestro laboratorio.

1

Además de la sugerencia de AMD de Ben, también podría investigar el código de ejemplo Apple FFT. Sin embargo, su código se ejecuta solo en dispositivos GPU, ya que comprueba para qué tipos de dispositivo se creó la cola de comandos proporcionada.

0

el SHOC benchmark on github también incluye el código que he probado en nvidia GPU 650M, intel gpu, y CPU Intel para FFT. en Windows lleva unos minutos crear un proyecto y establecer su ruta de inclusión y enlace, pero fue sencillo. ejecutar en el intel gpu requiere configurar las opciones de la línea de comando o una pequeña modificación del código, ya que el intel gpu es el dispositivo 1, no el dispositivo 0, que es el predeterminado en el conjunto de pruebas shoc benchmark.

No verifiqué la corrección de la salida, solo que compiló y ejecutó hasta su finalización.