Acerca de las optimizaciones multicore

Las optimizaciones multicore y multithread en el procesamiento de audio aportan una importante mejora en la capacidad global de potencia de cálculo.

Comprendiéndolo todo

Puede ser importante conocer como Usine lidia con los CPUs multicore y de modo más general con el multithreading. Al seleccionar el perfil más eficiente puedes mejorar el performance y reducir la latencia.

En Usine hay 3 tipos de procesos independientes:

  • El proceso principal: Su procesamiento para la principal tarjeta de audio. Este proceso es crucial porque, en la medida que el sonido fluye de forma constante, necesita una carga constante de CPU para ejecutarse adecuadamente sin saltos de audio.
  • El motor gráfico: Es el proceso donde se dibujan todos los controles visuales de Usine. Usine considera éste proceso como de baja prioridad. Pero desafortunadamente dibujar objetos en pantalla puede consumir una gran cantidad de CPU…
  • threads adicionales: Usine crea threads adicionales (nb thread) para asegurarse una repartición de cálculos más balanceada en los distintos núcleos de un CPU.

el proceso principal ejecuta:

  • audio entrante/saliente desde/hacia la tarjeta de audio y el driver.
  • sección maestra incluyendo insertar parches
  • sincronización global
  • señales remotas de entrada/salida midi
  • procesamiento de midilearn y de keylearn
  • dashboard
  • grabación (directa a disco)

El motor gráfico ejecuta:

  • todas las tareas de dibujo
  • acceso a disco y buffering
  • mensajes de baja prioridad entre módulos

Los thread adicionales ejecutan:

  • pistas solamente

Calculo de las pistas

Todo depende del parámetro nb threads. Veamos ejemplos.

  • nb threads = 1: Usine no crea threads adicionales. Quiere decir que solo existe el proceso principal. Entonces el proceso principal ejecuta todas las pistas del espacio de trabajo (workspace).
  • nb threads = 2: Usine crea un thread adicional (nb threads-1). En este caso el thread adicional ejecuta todos las pistas (tracks 1,2,3,4,etc).
  • nb threads = 3: Usine crea 2 threads adicionales (nb threads-1). En este caso el “thread adicional 1” ejecuta las pistas 1,3,5,7,etc, y el thread adicional 2 ejecuta las pistas 2,4,6,8,etc.

unas observaciones breves.

Tener mas threads que pistas es inútil…

Generalmente, trata de escoger nb threads =4 u 8.

Desafortunadamente, a diferencia de lo que se nos publicita, ésta tecnica tiene varias limitaciones que debes conocer.

  • La capacidad de procesamiento resultante puede depender no solo del CPU mismo sino también de la potencia de la tarjeta de video y de la calidad del controlador ASIO.
  • La latencia global de los buses auxiliares y de los buses de las pistas puede aumentar en una proporción apreciable. Generalmente la latencia adicional es igual al tamaño del bloque de Usine (ver Configuración Global).

Por ejemplo, si el tamaño de bloque es 128 y la frecuencia de sampleo es 44100Hz, la latencia adicional será de 124/44.100 * 2.9 milisegundos.

Si la latencia es crucial para tu configuración en vivo y usas buses auxiliares o buses de pistas, ajusta el parámetro nb thread = 1.

es/manual/guide/tips/multi_core_optimization.txt · Última modificación: 2013/04/19 04:34 (editor externo)