-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcProfile_AVX.py
32 lines (24 loc) · 1.75 KB
/
cProfile_AVX.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import ctypes # Librería para invocar funciones de bibliotecas dinámicas escritas en C
import cProfile # Librería para medir el desempeño y tiempo de ejecución del código
import array # Librería para manejar arreglos de datos eficientemente
import pstats # Librería para generar y procesar estadísticas de tiempo de ejecución
# Cargar la librería dinámica que contiene la función de multiplicación vector-escalar escrita en C
lib = ctypes.CDLL("/home/kvelez/Documentos/Profiling y AVX/libMultEscalarAVX.so")
# Declarar los tipos de los argumentos y el tipo de retorno de la función vectorScalarMultiply en la librería dinámica
lib.vectorScalarMultiply.argtypes = [ctypes.c_void_p, ctypes.c_double, ctypes.c_void_p, ctypes.c_int]
lib.vectorScalarMultiply.restype = None
# Crear un vector con 10 millones de datos utilizando la librería array para una manipulación eficiente
vector_size = 10000000
vector = array.array('d', range(1, vector_size + 1))
# Inicializar el escalar que se utilizará para la multiplicación
scalar = 2.0
# Crear un array para almacenar el resultado de la multiplicación
result = (ctypes.c_double * len(vector))()
# Ejecutar el código dentro del contexto del perfilador cProfile para medir el tiempo de ejecución
pr = cProfile.Profile() # Inicialización del perfilador
pr.enable() # Iniciar la medición de tiempo
lib.vectorScalarMultiply((ctypes.c_double * len(vector))(*vector), scalar, result, vector_size) # Llamada a la función en la librería dinámica
pr.disable() # Finalizar la medición de tiempo
# Obtener estadísticas de tiempo de ejecución y limitar la impresión a las 10 líneas más relevantes
stats = pstats.Stats(pr).strip_dirs().sort_stats("cumtime")
stats.print_stats(10)