¿Es cierto que copiar es la operación que más CPU consume?

Un ingeniero mecánico dijo que copiar pone más carga en el microprocesador que "otras" operaciones (por ejemplo, mover datos o crear la misma cantidad de datos nuevos). ¿Es esto cierto? ¿Puedes elaborar? Entiendo que las instrucciones de montaje son diferentes, pero no ¿cómo la copia es "más intensiva"?

Con copiar lo que se quiere decir es probablemente algo como memcpyen C y con mover lo que se quiere decir es probablemente la instrucción MIPS moventre registros o entre la memoria primaria.

¿Qué distinción tiene en mente cuando distingue entre "copiar" y "mover" datos? Me suenan a lo mismo.
@ThePhoton Traté de actualizar la pregunta para reflejar la respuesta a su comentario. Gracias.

Respuestas (3)

Un microprocesador básico trabaja a una velocidad fija a nivel de ensamblaje. En su mayor parte, puede ejecutar "instrucciones" en un cierto número de ciclos de reloj y eso es todo. El reloj suele tener una velocidad fija (es decir, 8 MHz, por ejemplo) y una instrucción puede tardar 4 ciclos de reloj, por ejemplo. Esto significa que ejecuta una instrucción (en este ejemplo arbitrario) en 500 ns.

Si programa un micro para hacer cosas más complejas, generalmente le pide que ejecute una secuencia de varias "instrucciones" y esto, naturalmente, lleva más tiempo: no pone más carga en nada (como un ingeniero mecánico podría imaginar poner carga en un eje o una viga) - simplemente se necesita más tiempo para hacer cosas más complejas.

"Copiar" podría significar "leer un valor en la memoria y almacenarlo en otra área de la memoria". Para hacer esto por lo general implica 2 instrucciones; una para leer el valor almacenado en la memoria y una segunda instrucción para almacenarlo en otra área de la memoria. Por supuesto, puede ser un poco más complejo que esto: debe configurar la dirección de destino en la memoria y debe configurar la dirección de destino; hacer esto podría implicar un par de instrucciones más, pero ¿cambia la carga en el micro? En realidad, no, porque en un micro simple estaría haciendo algo como hacer un bucle y esperar a que cambie una entrada para poder procesar más datos.

No.

Una CPU es un sistema complejo, construido a partir de subsistemas, y probablemente no haya carga que estrese mucho a todos los subsistemas y, por lo tanto, no haya carga que merezca el nombre de "operación más intensiva de CPU", independientemente de lo que surja, puede probablemente encuentre un subsistema que se pueda usar más con otra carga.

Hacer una copia de la memoria enfatizará un subsistema, la interfaz de la memoria, y eso es todo. No estresará nada más, y quizás ni siquiera sea la carga más significativa para el subsistema de memoria (escribir tantos datos como se leen suele ser solo una operación que se prueba mediante puntos de referencia de ancho de banda de memoria).

La respuesta depende mucho del tipo de sistema que discutiste.

En las PC, se cumplen las siguientes relaciones:

  1. Mover los datos es el procedimiento más simple y corto. Por lo general, implica solo cambios de punteros, sin modificar realmente el contenido de la memoria.
  2. La escritura de nuevos datos y la copia normalmente requiere el mismo orden de magnitud de las operaciones. La CPU debe asignar memoria para los nuevos datos, programar el motor DMA con las direcciones de origen y de destino, programar el motor DMA con parámetros adicionales (cantidad de datos a transferir, varios indicadores, etc.) y después de iniciar DMA, la CPU ya no es necesario.

Mi intuición dice que en cada arquitectura, la copia y la escritura tomarán el mismo tiempo de CPU (en realidad comparable) (con y sin DMA). Esto se debe al hecho de que escribir en la memoria es esencialmente copiar desde otra ubicación.

Sin embargo, la discusión anterior se refería solo al número de operaciones que realiza la CPU. Puede darse el caso de que su amigo se refiera al tiempo de ejecución cuando habló de "cargar en el microprocesador". Bueno, no tiene sentido discutir el tiempo de ejecución en presencia de un DMA: no es la CPU la que realiza la mayor parte del trabajo. Sin DMA, el movimiento sigue siendo el más rápido (suponiendo que no sea el microprocesador más simple el que ejecuta el movimiento como una transferencia de datos), pero la relación entre copiar y escribir dependerá de la fuente de la que se adquieran los datos de escritura: si esta fuente tiene una latencia más baja que la memoria, la operación de escritura será más rápida; si la fuente tiene una latencia más alta que la memoria, la operación de escritura será más lenta.

En cualquier caso, es difícil decir si tu amigo tiene razón sin obtener todo el contexto de la discusión.

Saludos