Pregunta

En OpenCL, que tiene un núcleo que necesita para operar en los datos complejos y reales. Podría poner una sentencia condicional en el que llama a la línea derecha de código para manejar esto, o podría tener dos núcleos que llamo y empuje la sentencia condicional a mi código de llamada.

Esto, obviamente, es malo para el mantenimiento, pero es importante para el rendimiento?

¿Fue útil?

Solución

Si es sólo una sentencia condicional, en mi experiencia la diferencia de rendimiento es absolutamente insignificante, al menos en el hardware de NVidia.

Básicamente, siempre y cuando todos (o la mayoría) de elementos de trabajo siguen la misma ruta de código, usted está muy bien. Como la ruta de código tomado depende argumento del núcleo en su caso, todos los elementos de trabajo siguen el mismo camino.

Otros consejos

Depende un poco en donde el condicional es. Código para facilitar la lectura en primer lugar, a continuación, el rendimiento después de haber medido y se encontró que se trata de un problema

por ejemplo. kernel_for_RGB_image y kernel_for_ABGR_image parece un uso razonable, diferentes núcleos a desenrollar efectivamente alguna bucle interior profundo puede ser un dolor de cabeza más grande de mantenimiento.

Creo que la mejor manera es tratar de hecho y de referencia dos variantes. En algunos casos tener múltiples bloques condicionales compilados, incluso si se ejecuta sólo una de ellas, puede conducir a un peor rendimiento. La razón es GPRS (registros de propósito general):. Compilador asigna la mayor cantidad de registros, ya que se necesitan para el peor de los casos

Me puede sugerir una solución de este tipo: tener una sola función del núcleo, pero con el tiempo de compilación condicional:

__kernel void work()
{
#if VAR
    // one code
#else
    // another code
#endif
}

Luego hay que recompilar el kernel con el conjunto true / false a VAR al cambiar de estado. Obviamente, para que el compilador no se diferencia a partir de dos núcleos, pero para el mantenimiento puede ser mejor, si una parte del código es el mismo para los granos.

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