En mi programa OpenCL, voy a terminar con más de 60 memorias intermedias globales que cada kernel necesitará para poder acceder. ¿Cuál es la forma recomendada de permitir que cada núcleo conozca la ubicación de cada uno de estos almacenamientos intermedios?¿La forma correcta de informar los kernels OpenCL de muchos objetos de memoria?
Los búferes son estables durante toda la vida útil de la aplicación, es decir, asignaremos los búferes al inicio de la aplicación, llamaremos a múltiples kernels y luego desasignaremos los búferes al final de la aplicación. Sin embargo, su contenido puede cambiar a medida que los núcleos leen/escriben de ellos.
En CUDA, la forma en que lo hice fue crear más de 60 variables globales de ámbito de programa en mi código CUDA. Luego, en el host, escribiría la dirección de los almacenamientos intermedios del dispositivo asignados en estas variables globales. Entonces los kernels simplemente usarían estas variables globales para encontrar el buffer con el que necesitaban trabajar.
¿Cuál sería la mejor manera de hacer esto en OpenCL? Parece que las variables globales de CL son un poco diferentes a las de CUDA, pero no puedo encontrar una respuesta clara sobre si mi método CUDA funcionará, y si es así, cómo transferir los punteros del buffer a las variables globales. Si eso no funciona, ¿cuál es la mejor manera de lo contrario?
Los 60 argumentos se deben a que este código está siendo generado por un sintetizador de código especial para un proyecto de investigación del que formo parte. Desafortunadamente, no puedo controlar esa parte. Terminé usando la metodología de empaquetado del buffer que describiste. Con suerte, es un método mejor que 60 argumentos. ¡Gracias por tu ayuda! – int3h