¿Cómo hacer que Lightroom utilice completamente la CPU al crear vistas previas estándar?

Al agregar fotos a un catálogo, Lightroom 6 pasa por su construcción habitual de vistas previas estándar. Como Adobe diseñó este proceso para que se ejecute en segundo plano, dejándole suficientes recursos para trabajar en sus fotos al mismo tiempo, la construcción de vista previa asigna solo el 50 % del tiempo de la CPU (utiliza todos los núcleos).

Por lo general, agrego fotos en lotes grandes y uso este tiempo para tomar un descanso y hacer un poco de té mientras Lightroom las examina. Naturalmente, me gustaría que las vistas previas se construyeran más rápido en lugar de tener recursos disponibles para otras tareas durante el proceso.

¿Hay alguna manera de hacer que Lightroom utilice el 100 % de la CPU para la creación de vistas previas estándar, de la misma manera que lo hace al exportar imágenes RAW, por ejemplo?

EDITAR : para aclarar las cosas, Lightroom utiliza el 100 % de la CPU y todos los núcleos/subprocesos (mi CPU tiene 2 núcleos/4 subprocesos) para cualquier otra tarea que necesite, incluida la exportación de fotos, el trabajo con pinceles de ajuste en el modo de desarrollo (que tienden a ser ediciones pesadas de CPU) y renderizando vistas previas 1: 1. No hay problema con el sistema/hardware, todo funciona perfectamente bien.

El problema en cuestión solo se refiere a la creación de vistas previas estándar y, hasta donde yo sé, existe por diseño. La pregunta es si es posible superar esta limitación de diseño de Lightroom de alguna manera.

No tengo idea de cómo funciona el programador de Windows, pero ¿está seguro de que este es el caso y no es solo que el proceso está vinculado a IO?
No es. El uso de un SSD en lugar de un disco duro de 7200 rpm da como resultado la misma carga de CPU.
Esto podría ser mejor en superuser.com , ya que se trata realmente del aspecto informático en lugar de la fotografía o el flujo de trabajo fotográfico per se.
@mattdm, el programador de Windows funciona con prioridad, por lo que no es el culpable aquí. El proceso podría ejecutarse esencialmente al 100% incluso con prioridad inactiva si no está haciendo nada más. Tal vez alcance el máximo de núcleos, codificado para ejecutarse en hasta 4, pero el OP tiene 8 o algo así.
@ChrisH tengo 2 núcleos :) (i7-3520M)
@mattdm Dependería de la respuesta. Si hubiera un interruptor accesible para el usuario enterrado en algún lugar de la configuración de LR, entonces es como cualquier otra pregunta sobre cómo hacer que LR haga lo que quiero al manejar mis fotos que respondemos aquí. Si, por otro lado, no hay una opción dentro de Lr, o si el comportamiento es causado por algo externo a Lr, entonces la pregunta pertenecería más apropiadamente a otro lugar.
Entonces tal vez sea una operación de un solo núcleo, o tal vez n-1 donde n es cuántos tienes. Puedo ver por qué quieres que siga adelante y hacerlo mientras haces otra cosa.
@MichaelClark Recuerdo haber leído en alguna parte (probablemente el archivo de ayuda de LR o el blog de Adobe) que Adobe lo diseñó específicamente para ser una tarea en segundo plano, de modo que el usuario pudiera procesar las fotos normalmente mientras se crean las vistas previas. Entonces no, este comportamiento no es causado por nada externo.
@ChrisH no es una operación de un solo núcleo. Mencioné a propósito que LR utiliza todos los núcleos de la CPU, pero limita la carga al 50 %
Nunca mencionó si está usando Windows o MacOS, o qué versión.
@MikeDixon Estoy en Windows 7 64. No estoy seguro de si hace alguna diferencia, ya que lo más probable es que el problema sea independiente del sistema.

Respuestas (3)

He experimentado mucho con Lightroom y el rendimiento, pero no tengo conocimiento de su funcionamiento interno (y necesitaría que Adobe comente allí).

PARECE que Lightroom tiene algunas secciones de código que no se pueden ejecutar en paralelo. Con los años ha mejorado, pero aún no está allí. Recientemente construí un nuevo sistema para fotografía que es todo SSD, tiene controladores separados (uno U.20 para sacarlo de SATA), tiene 64G de memoria. Traté de eliminar todos los cuellos de botella, y todavía tiende a ejecutar entre un 50 y un 75 % de las vistas previas de construcción ocupadas. Al probar esto, no veo ninguna cola en los discos y, ciertamente, no veo presiones de memoria.

Creo que obtiene una utilización ligeramente mejor si inicia varios trabajos en archivos separados, pero no es una solución completa y no parece ayudar a iniciar 3, 4, etc. procesos. Dos parece conseguir todo lo que hay que conseguir, y no es mucho. Mi impresión empírica es que cierta actividad es de un solo subproceso (probablemente por secciones críticas) y no hay nada que el usuario pueda hacer.

Dicho esto, hay muchas cosas que puede hacer en general, por ejemplo: si sus discos están ocupados, separar la vista previa/caché ACR de las imágenes en discos separados (especialmente si están girando) y/o controladores y, a su vez, separarlos del catálogo ( se necesita un enlace simbólico para separar la memoria caché de vista previa del catálogo), tener una memoria adecuada y rápida (he descubierto que es difícil en imágenes individuales (frente a las fusiones panorámicas) hacer que LR use más de 8-12G), elegir la vista previa más pequeña que lo que necesita ("auto" funciona bastante bien) y, finalmente, lo más importante con diferencia: usar una CPU que tenga la velocidad de código único más rápida que pueda obtener.

Si usa Intel que admite Hyperthreading, creo que funciona un poco mejor con Hyperthreading desactivado, no activado (es decir, sin núcleos "falsos").

Un corolario de todo esto es que obtener más núcleos más lentos no es muy útil; obtener pocos (digamos 4) núcleos más rápidos ayuda mucho más. Con un código significativo de subproceso único (aparentemente), como punto de referencia para elegir CPU para LR, el procesamiento de un solo núcleo parece ser el más importante.

Creo que 4 es mejor que 2; Ciertamente veo al menos tres núcleos activos a veces. No creo que 6 sea mejor, mucho menos 8 (esto puede cambiar en versiones posteriores, y como se mencionó, se trata más de la velocidad de un solo núcleo que del número).

También probé una memoria más rápida (reloj de 3000 MHz frente a 2400 MHz) y descubrí que me ayudó un poco (alrededor del 10 %). El rendimiento de GPU más rápido SOLO ayuda a desarrollar controles deslizantes de pantalla, no tendrá impacto (a partir de la versión actual, 2015.10) con compilaciones de vista previa. El overclocking de la CPU proporciona una mejora casi lineal en la velocidad. Obviamente, hacer overclocking de cualquier cosa puede reducir la estabilidad.

Por lo que vale, una característica solicitada a menudo que no está en Lightroom y que ayudaría es la capacidad de usar la vista previa incrustada en lugar de construir una. Para muchos, con altos volúmenes y bajas tasas de mantenimiento (es decir, mucho para seleccionar), es demasiado lento crear vistas previas para usar. Mi solución personal para esto fue dejar de usar Lightroom para la selección; Elimino, recorto y enderezo el exterior con una herramienta más rápida que usa la vista previa incrustada (Photo Mechanic en mi caso, pero hay muchos de ellos), y solo tomo fotos que tienen una alta probabilidad de permanecer en Lightroom.

Es una limitación de diseño de LR. Edité la publicación para que quede más claro. En cuanto al hardware, tengo 16 Gb de RAM y un i7-3520M, que es una CPU de computadora portátil de voltaje completo con una velocidad máxima de reloj de uno o varios núcleos de 3,6/3,4 GHz. Por supuesto, no es un quad-core, pero Lightroom funciona muy bien en él. No uso la aceleración de GPU (los controladores Intel producen artefactos en LR y no acelera mucho el flujo de trabajo). Elimino, califico y hago todo el procesamiento de metadatos en Photo Mechanic también, pero aún agrego todas las fotos restantes a LR después de eliminar todas las malas tomas.

Supongo que probablemente esté vinculado a la memoria o al caché . Su i7-3520 tiene un caché compartido de 4 MiB, lo que significa que ambos núcleos comparten el caché L3 de 4 MiB. Debido a que su CPU está hiperproceso, en la medida en que cada subproceso SMT actúa como una "CPU", su caché L3 se comparte entre 4 "CPU".

El tamaño particular del caché no es importante, ni la utilización del 50% que está observando es particularmente reveladora. Es decir, no asuma que debido a que el 50% es lo mismo que "la mitad", existe alguna ineficiencia de "dividir por 2". La utilización también podría ser del 42 % o del 61,803 %, etc.

Pensemos por un momento en los datos en los que está trabajando Lightroom al intentar crear vistas previas. Estas son versiones de baja resolución de la imagen real, lo que significa que hay algún tipo de reducción de resolución o interpolación N: 1 para crear vistas previas más pequeñas. Por lo tanto, la creación de vista previa funciona rápidamente en un gran conjunto de datos, omitiendo o promediando rápidamente los valores de píxeles cercanos, en lugar de realizar cálculos pesados ​​​​píxel por píxel que pueden ocurrir al editar en el módulo Desarrollar.

Además, no tenemos idea de cómo se representa la imagen en la memoria de Lightroom. Personalmente, asumiría que los datos se almacenan como triples RGB, probablemente 16 bits por píxel (o más) por color. (Tenga en cuenta que esto no tiene nada que ver con cómo se almacena la imagen en el disco , o si se capturó RAW o JPEG. Esos son detalles de almacenamiento de archivos).

Por lo tanto, suponiendo que las imágenes se representen en la memoria como triples sin comprimir de datos de 16 bits, cada "núcleo" de CPU hiperproceso solo puede funcionar como máximo, idealmente, √(1 MiB / (3 colores/píxel) / (2 bytes/color) ) ≈ 418 px regiones cuadradas. Sin embargo, el costo de tiempo de llenar las regiones de caché con datos de imagen de la RAM es mucho más largo de lo que le toma a la CPU operar en una fracción de cada región de ~ 420 × 420 píxeles.

La respuesta de @Linwood es bastante buena para cubrir sus mediciones de rendimiento y observaciones del rendimiento general de subprocesos múltiples de Lightroom. Me gustaría agregar este estudio de rendimiento multinúcleo de Lightroom CC/6 realizado por Matt Bach en Puget Systems , un fabricante de computadoras de rendimiento personalizado. Cabe destacar el aumento de rendimiento observado por núcleo utilizado al generar vistas previas 1:1, hasta aproximadamente 5 o 6 núcleos. Después de 6 núcleos, no se puede obtener más utilización por núcleo.

También es de destacar en la prueba de Puget Systems que las tareas de Lightroom que obtienen el mayor aumento de la cantidad de núcleos (no hiperprocesos) son:

  1. Exportación de imágenes a disco
  2. Conversión de RAW a DNG
  3. Generar vistas previas 1:1

Las otras tareas de biblioteca y edición de imágenes no se benefician tanto del aumento de la cantidad de núcleos.


Volviendo a su sistema particular, si hipotéticamente pudiéramos alterar ciertos parámetros de su computadora, esto es lo que probablemente veríamos:

  • Disminuya la velocidad del reloj de la CPU : suponiendo que la velocidad de la RAM sea la misma (1600 MHz), vería un aumento en la utilización, porque la fracción de tiempo cargando datos a/desde la RAM en comparación con la cantidad de tiempo ejecutando instrucciones disminuiría. Pasaría un poco más de tiempo en la ejecución, en lugar de cargar/almacenar en RAM. Por supuesto, su rendimiento agregado real sería menor, por lo que esto no es deseable.

  • Desactive el hiperprocesamiento : probablemente verá un porcentaje de utilización de la CPU ligeramente superior, pero su rendimiento neto de la cantidad de vistas previas generadas por minuto disminuirá. Sin embargo, no sé si se trata de compensar las ganancias/pérdidas. La experiencia de Linwood sugeriría que habría al menos una ligera ganancia neta.

  • Duplicar la cantidad de núcleos físicos (sin hiperprocesamiento) : el porcentaje de CPU sería similar (suponiendo que los núcleos compartan caché L3).

  • Duplicar el tamaño de la caché L3 : esto probablemente generaría la mayor ganancia observable, tanto en la utilización de la CPU como en el rendimiento neto.


Sin embargo, la conclusión es que no, no puede hacer nada para aumentar la utilización de la CPU en su sistema durante la generación de vista previa de Lightroom, con las entradas que está alimentando.

Si su sistema tiene 2 núcleos y Lightroom tiene un uso de CPU del 50 %, entonces puedo hacer las siguientes observaciones:

  1. Lightroom está usando el 100% de uno de los núcleos. De modo que la importación a Lightroom está sujeta a la velocidad de la CPU. Esta es una limitación de su hardware.

  2. Lightroom no se ha escrito para aprovechar los múltiples núcleos. Esta es una limitación de Lightroom.

Como tal, creo que se ha topado con una limitación combinada de Lightroom y su sistema. ¡Y no puede cambiar el funcionamiento de su copia de Lightroom! 1 Entonces, la única forma de mejorar las cosas es obtener un sistema con una CPU más rápida.


1. Aunque una versión diferente de Lr puede marcar la diferencia. Pero no sé nada sobre qué versión de Lr estás usando y cómo va el proceso de desarrollo de Adobe. De hecho, estoy tratando de alejarme de Adobe de todos modos, ¡así que ni siquiera quiero saberlo!

He editado la publicación para que quede un poco más claro.