es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer un nivel de optimización más alto para una plantilla de clase específica.

Estoy trabajando en proyectos de procesamiento de audio en tiempo real que se construyen sobre el marco de trabajo JUCE. Para acelerar algunos algoritmos computacionalmente pesados con instrucciones SIMD, utilizamos el envoltorio SIMDRegister de JUCE, que es compatible con múltiples plataformas. Esto lleva al aumento deseado de rendimiento en comparación con algoritmos no optimizados para SIMD en compilaciones de lanzamiento optimizadas, pero ralentiza el código en exceso en compilaciones de depuración, por lo que ya no cumple con nuestras restricciones de tiempo real, lo que lo hace inútil cuando necesitamos depurar algoritmos.

Esto probablemente se debe a la naturaleza altamente templada de esa clase.

Me pregunto si es posible instruir al compilador para que siempre optimice todas las llamadas a las funciones miembro de esta clase al máximo nivel, sin importar si es en una compilación de depuración o de lanzamiento. Estoy dispuesto a perder la capacidad de depurar correctamente las partes del código que llamen a esas funciones, y está bien para mí si una solución requiere modificar las fuentes de JUCE, ya que de todos modos mantenemos un fork interno del marco de trabajo.

Encontré “#pragma optimize” en la documentación de clang, pero parece que solo disminuye el nivel de optimización para el código envuelto entre ellos.

Necesito una solución para clang y MSVC, sin embargo, una solución solo para clang sería una opción, ya que estamos pensando en cambiar a clang para nuestras compilaciones de Windows de todos modos.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Compilando para una optimización máxima con la clase SIMDRegister de JUCE

    Si estás trabajando en proyectos de procesamiento de audio en tiempo real utilizando el marco de trabajo de JUCE, es posible que hayas encontrado algunas ralentizaciones al intentar depurar SIMDRegister, un envoltorio multiplataforma para instrucciones SIMD. Si bien puede acelerar algoritmos con alto cálculo en compilaciones optimizadas, puede ralentizar significativamente el código en compilaciones de depuración.

    La ralentización probablemente se deba a la naturaleza altamente templatizada de la clase. Sin embargo, puede haber una solución para optimizar todas las llamadas a las funciones miembro de la clase al nivel máximo, independientemente de si está en una compilación de depuración o de lanzamiento.

    Una posible solución es utilizar la directiva #pragma optimize en clang. Sin embargo, esto solo disminuirá el nivel de optimización del código envuelto entre ellos, lo cual no es lo que queremos.

    Si estás dispuesto a sacrificar las capacidades de depuración por rendimiento, puedes modificar las fuentes de JUCE e indicarle al compilador que optimice todas las llamadas a las funciones miembro de la clase al nivel máximo. Esto debería funcionar tanto para los compiladores clang como para MSVC.

    Es importante tener en cuenta que modificar las fuentes de JUCE puede tener consecuencias en la funcionalidad general del marco de trabajo, así que procede con precaución. Además, si estás planeando cambiar a clang para tus compilaciones en Windows de todos modos, una solución exclusiva de clang puede ser suficiente.

    En última instancia, es importante ponderar los beneficios y las desventajas de optimizar para un rendimiento máximo versus la necesidad de capacidades de depuración.

Comments are closed.