Skip to content

tectijuana/26a-pycasm-Rafa398

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Review Assignment Due Date italic text

📄 README.md (plantilla y puede mejorarla)

Proyecto: Integración Python + C + ARM64 Assembly

Autor

Del Callejo Tapia Rafaell

Descripción

Este proyecto implementa una librería de alto rendimiento en ARM64 Assembly, integrada con Python mediante C y ctypes.

Objetivo

Demostrar la interoperabilidad entre lenguajes de alto y bajo nivel, así como analizar el rendimiento.

Tecnologías

  • Python 3
  • C (clang)
  • ARM64 Assembly (AArch64)
  • Termux / Raspberry Pi OS

Funcionalidades

  • Operaciones básicas
  • Procesamiento de arreglos
  • Funciones optimizadas en ensamblador

Compilación

make

Ejecución

python src/app.py

Resultados esperados

Comparación de rendimiento entre:

  • Python
  • C
  • Assembly

Conclusiones

Este proyecto me ayudo a entender mejor como funcionan mejor ciertas funciones de mi githhub como la configuracion y uso del ssh, uso de personal tokens de guardado para contraseñas y comandos basicos de git hub como git push, git pull, commit y un mejor uso de aws combinandolo con lo antes mencionado.

Autorreflexión

Tarde mucho en configurar el ssh ya que no pasaba al cat eñ archivo .pub esto fue un error por prisas y no terminar leyendolo pero se soluciono.

📊 REPORTE (recomendaciones son bievenidas para readme.md)

1. Introducción

ARM64 es la arquitectura de 64 bits de ARM (Advanced RISC Machines), diseñada bajo la filosofía RISC (Reduced Instruction Set Computer). A diferencia de x86 (Intel/AMD), ARM64 utiliza instrucciones de longitud fija y un modelo de carga/almacenamiento (load/store). ¿Por qué usar Assembly?

Optimización crítica: Permite exprimir el rendimiento en algoritmos matemáticos complejos o drivers de hardware.

Control total: Gestionas directamente el movimiento de datos entre registros y memoria, eliminando las suposiciones que a veces hace el compilador.

Comprensión del silicio: Es la única forma de ver cómo se comporta realmente el procesador ante las ramas (branches) y la predicción de saltos.

👉 El ensamblador ayuda a entender cómo funciona la computadora a nivel de registros y memoria


2. Marco teórico

Registros de Propósito General (x0–x30) En ARM64, tenemos 31 registros de propósito general de 64 bits. Si necesitas operar con 32 bits, se denominan w0–w30.

x0–x7: Se usan para pasar argumentos a funciones y devolver resultados.

x29 (Frame Pointer): Rastrea el inicio del marco de la pila.

x30 (Link Register): Almacena la dirección de retorno tras una llamada a función (bl).

xzr: El registro "zero"; siempre devuelve 0 y descarta cualquier valor escrito en él.

ABI (Application Binary Interface) La Standard ARM Procedure Call Standard (AAPCS) dicta las reglas de etiqueta:

Los primeros 8 argumentos van en x0-x7.

Si una función modifica los registros x19-x28, debe guardar sus valores originales en la pila y restaurarlos antes de terminar (callee-saved).

3. Desarrollo

  • Explicación de cada archivo:

    • Python
    • C
    • Assembly

4. Resultados

Tabla tipo:

Método Tiempo
Python image
X ms
C X ms
ASM X ms

5. Análisis

Al contrastar los tiempos de ejecución, la superioridad de Assembly y C sobre Python es drástica, pero por razones distintas. Python enfrenta un "overhead" masivo debido a que es un lenguaje interpretado; cada iteración del ciclo de suma requiere que la máquina virtual de Python verifique el tipo de dato, gestione el conteo de referencias para la memoria y maneje el Global Interpreter Lock (GIL). Esto convierte una simple operación de suma en cientos de instrucciones de CPU.

Por otro lado, la ventaja de Assembly sobre C —aunque menor— radica en la eliminación del prólogo y epílogo que los compiladores suelen generar por seguridad. En ARM64, al escribir el código manualmente, podemos mantener el acumulador de la suma directamente en un registro de alto rendimiento (como x0) y evitar cualquier acceso innecesario a la memoria RAM (Stack), logrando una ejecución lineal y ultraeficiente que aprovecha al máximo el pipeline del procesador.


6. Conclusiones

La decisión de implementar soluciones en ARM64 Assembly debe reservarse para escenarios donde el rendimiento por ciclo de reloj es el factor crítico del éxito, como en el desarrollo de drivers, kernels de sistemas operativos o algoritmos criptográficos. Si bien ofrece un control absoluto sobre el hardware y una eficiencia energética superior, su uso conlleva una complejidad de mantenimiento elevada y la pérdida de portabilidad entre diferentes arquitecturas.

En la práctica moderna, lo más eficiente es un enfoque híbrido: utilizar lenguajes de alto nivel como Python para la lógica de negocio y "envolver" pequeñas subrutinas críticas escritas en C o Assembly. Esto permite obtener lo mejor de ambos mundos: la velocidad de desarrollo de las herramientas modernas y la potencia bruta de la arquitectura ARM64, garantizando que el software sea escalable pero capaz de realizar tareas intensivas en milisegundos.


7. Evidencias

image image image

🧪 EVIDENCIAS QUE DEBES TOMAR

Guarda capturas de:

  • make image

  • ejecución Python

image * uso de GDB:
gdb ./libops.so
<img width="941" height="620" alt="image" src="https://github.com/user-attachments/assets/07d796fe-1846-44f8-9211-2cb6b990b96a" />


About

26aldi5pm-26a-pycasm-cpp-templete created by GitHub Classroom

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Assembly 46.6%
  • C 18.4%
  • C++ 13.8%
  • Python 11.2%
  • Makefile 10.0%