¿Por qué el desenfoque de movimiento (radial) toma tanto tiempo, aunque mi Intel Core i7 solo tiene un 15-20% de actividad?

Casi todos los algoritmos tendrán un cuello de botella cuando se escalen cuando se los empuje a diferentes extremos. El objetivo de todos los algoritmos es utilizar los recursos de manera uniforme y eficiente. Sería ideal si su computadora estuviera usando para poder apoyarse más en su capacidad de CPU adicional, pero no es porque el código no se haya escrito con las demandas que le pusimos y / o no tenía el recurso amable que tenemos ahora. En este caso, el desenfoque se utiliza como hilo en su CPU.

Regresemos en el tiempo. Cuando se escribieron estos filtros de desenfoque, una máquina de varios núcleos era bastante rara. También raramente trabajaríamos con imágenes tan grandes como las que usamos ahora. El resultado es que, para los usuarios de mucho tiempo, el tiempo para generar un desenfoque ha disminuido. En su mayor parte, esos otros hilos ayudaron con la multitarea de otros programas. Recientemente, la resolución y las profundidades de bits más altas que han estado presionando han tenido algo negativo en las ganancias de velocidad en la CPU, ya que están viendo muchas de sus ganancias en la forma en que distribuyen los trabajos a sus hilos.

Entonces, ¿por qué no puede dividir la tarea en múltiples hilos? Como experimento mental, imagina que tienes una línea de oponentes de ajedrez y tienes 4 grandes maestros para asignarlos. Puedes darle a cualquier gran maestro cualquier número de oponentes, luego ir a una habitación tranquila donde no puedan ser molestados. Ahora imagina ese desenfoque como un oponente realmente hábil. Le darías a ese oponente un gran maestro. También imagina a este oponente jugando muchos juegos mentales, obligando literalmente al gran maestro a reducir la velocidad para asegurarse de que esos juegos no estén tropezando con su estrategia. Para acelerar el juego, deberías enviar un segundo gran maestro a su habitación sin coordinarse entre sí. ¿Cómo crearían una estrategia que funcionara en conjunto? ¿Cómo sabrían quién estaba haciendo qué? ¿Intentar compartir realmente los haría rápidos?

Los desenfoques suelen ser iterativos, lo que significa que realizan el proceso una vez y luego lo vuelven a hacer con los resultados del último. Esto crea un orden estricto en el que tienen que suceder las cosas, pero no lo hace imposible. Probablemente sea solo cuestión de tiempo antes de que se implementen subprocesos múltiples. Lo he visto en la lista de tareas por algún tiempo.

De todos modos, asegúrese de que su entorno sepa que puede usar múltiples núcleos. De esa manera, usará un núcleo para el filtro y otro para todo lo demás. En Blender, mire bajo preferencia-> entorno -> Número de procesadores.

Parece que el algoritmo utilizado en el filtro de desenfoque de sus aplicaciones es de un solo subproceso. Una aplicación multiproceso puede disminuir el tiempo.

A veces es difícil dividir un trabajo en varios para uso multiproceso, y a menudo muchas implementaciones antiguas se dejan como están.

Su CPU puede manejar 4 trabajos sin ningún problema ya que tiene 4 núcleos, pero un solo subproceso solo se ejecuta en un núcleo. Para una aplicación de un solo subproceso, su CPU puede trabajar lo más duro posible, pero dado que solo 1 de 4 núcleos se maximiza, la utilización general de la CPU es del 25% o menos.

Por lo que entiendo del desenfoque de movimiento, es que toma un píxel y unos pocos al lado, modifica aquellos basados ​​en los valores de esos píxeles y las pocas muestras anteriores, y repite miles, si no millones, de veces.

Los algoritmos detrás de los efectos de desenfoque generalmente son muy fáciles de calcular, no requieren muchas matemáticas, pero requieren mucha memoria y la capacidad de obtener y almacenar (en términos de CS) datos aleatorios rápidamente.

Si bien su potencia de procesamiento no es el cuello de botella, apostaría a que su controlador de memoria funcionaba, sus pequeños transistores desactivaban ese movimiento borroso para usted.

Si desea resultados más rápidos, puede intentar encontrar una combinación de CPU / memoria con un menor retraso en E / S, o simplemente dejar que su tarjeta gráfica haga la operación, las GPU son ideales para cosas como desenfoques.