Las optimizaciones multicore y multithread en el procesamiento de audio aportan una importante mejora en la capacidad global de potencia de cálculo.
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:
Todo depende del parámetro nb threads. Veamos ejemplos.
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.
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.