Pregunta

He estado teniendo una configuración de un experimento en el que asignar memoria con CUDA en el dispositivo momento difícil, tomar ese puntero a la memoria en el dispositivo, lo utilizan en OpenCL, y devolver los resultados. Quiero ver si esto es posible. Tuve un período difícil para que un proyecto CUDA para el trabajo por lo que acabo de utilizar proyecto de plantilla de Nvidia en su SDK. En el makefile añadí -lOpenCL a la sección de bibliotecas de la common.mk. Todo está bien cuando lo hago, pero cuando agrego #include <CL/cl.h> a template.cu para que pueda empezar a hacer llamadas OpenCL, me sale más de 100 errores. Todos ellos aspecto similar a este, pero con diferentes nombres de función al final:

  

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h (334): error:   identificador "__builtin_ia32_cmpeqps" es indefinido

Estoy teniendo un tiempo difícil averiguar por qué. Por favor ayuda si puedes. Además, si hay una manera más fácil de configurar un proyecto que va a ser capaz de llamar a la API de CUDA y OpenCL que me haga saber.

¿Fue útil?

Solución

realmente no he trabajado con CUDA, así que no sé cómo mi respuesta es útil.

Por lo que entiendo que está intentando utilizar OpenCL directamente desde su hostcode CUDA, que es si recuerdo correctamente compilado utilizando algún compilador de NVIDIA en lugar del gcc estándar. Así que el problema es probablemente que este compilador no implementa las órdenes internas necesarias para trabajar con las cabeceras mencionadas. Mira aquí por un problema similar y es la solución: http://forums.nvidia.com/lofiversion/index.php?t88573.html

Parece que tiene que poner todo lo que necesita la API OpenCL en una (no CUDA) unidad de compilación diferente por lo que va a ser compilado por el compilador no nvidia.

Sin embargo yo no contar con este trabajo (ya que los tampones OpenCL no son sólo los punteros a la memoria, sino que deben contener algunos metainformations a), simplemente porque no hay ninguna razón real que debería funcionar y si lo hace no hay garantía que continúa haciéndolo.

Lo que usted podría probar si realmente quiere es el uso de OpenGL para la interoperabilidad, ya que ambos OpenCL y CUDA tener extensiones para permitir la creación de memorias intermedias de buffers de OpenGL.

Sin embargo, ¿por qué tiene que hacer esto? ¿Cuál es el uso que le impide a corto plazo la implementación de Apple, ya que IIRC es de código abierto y la mayoría de ellos (las partes OpenCL) debe ser independiente de la plataforma de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top