Está en la página 1de 4

Benemérita Universidad Autónoma de Puebla

Complejo Regional Centro, San José Chiapa

Ingeniería En Automatización y Autotrónica


Nombre de la práctica Asignatura Periodo
Encendiendo un Led con DSP Procesamiento y Transmisión de datos 5to Semestre
Docente: Henry Xochipiltecatl Carreto
Fecha: Octubre 05, 2020
Alumnos Matricula
Iván Durán Santos 201805255
Natalia de la Rosa García 201843445
Sara Mónica Estrada García 201860424
Briseida Lisett Flores Murillo 201843588

Abstract: La programación de GPU con Python, con la


facilidad de Python, se puede desbloquear la increíble potencia
de cálculo de la GPU (unidad de procesamiento de gráficos) de
la tarjeta de video. En jesencia se trabaja con la biblioteca
CUDA de NVIDIA.

Key Words: GPU’s, Python, Tarjeta de Video, NVIDIA.

I. Introducción
Para llevar a cabo esta práctica, es necesario contar Fig00: Visual Studio Code
con una máquina física con Linux y una GPU basada
en NVIDIA. Teniendo las dos herramientas, Ubuntu, es un sistema operativo de software libre y
funcionaria de manera adecuada, sin embargo, para código abierto. Es una distribución de Linux basada
hacerlo utilizando una máquina física, se debe tener en Debian. Actualmente corre en computadores de
instalados los controladores patentados de NVIDIA. escritorio y servidores. Está orientado al usuario
Pero en este caso nos centraremos únicamente a lo promedio, con un fuerte enfoque en la facilidad de uso
teórico que abarca la práctica, debido a que no se y en mejorar la experiencia del usuario.
cuenta con todos los dispositivos solicitados, pues
para su ejecución, también se necesita tener instalado
CUDA Toolkit. E implementar el lenguaje de
programación de Python, que es de propósito general
muy poderoso y flexible, a la vez que sencillo y fácil
de aprender.
Además de hacer énfasis de que las GPU son
adecuadas para soportar algoritmos con un alto grado
de paralelismo, sobre estructuras de datos no
excesivamente complejas, como vectores o matrices
de números, y con alta intensidad aritmética. Fig01: Ubuntu

II. Objetivos Python es un lenguaje de programación de propósito


general muy poderoso y flexible, a la vez que sencillo
Programar una tarjeta de video NVIDIA. y fácil de aprender. Es un lenguaje de alto nivel, que
Conocer un poco del entorno de Python. permite procesar fácilmente todo tipo de estructuras
Aprender a usar CUDA. de datos, tanto numéricos como de texto.
Generar código especializado para la
programación de una GPU.
Saber qué es una GPU.
Reconocer la importancia de las GPU’s.

III. Especificaciones del sistema


Fig02: Python
Visual Studio Code es un editor de código fuente
desarrollado por Microsoft para Windows, Linux y CUDA ha sido durante mucho tiempo uno de los datos
macOS. Incluye soporte para la depuración, control más destacados en la hoja de especificaciones de
integrado de Git, resaltado de sintaxis, finalización cualquier tarjeta gráfica GeForce. acelera los
inteligente de código, fragmentos y refactorización de procesos de cálculo de GPU. Con CUDA, los
código. investigadores y los desarrolladores de software
pueden enviar códigos C, C ++ y Fortran directamente
a la GPU sin usar un código de ensamblaje. Esta
simplificación aprovecha la computación paralela en
la que se ejecutan simultáneamente miles de tareas o
subprocesos.
Benemérita Universidad Autónoma de Puebla
Complejo Regional Centro, San José Chiapa

Fig03: NVIDIA Cuda.

IV. Marco teórico


NVIDIA es una empresa multinacional que se
Fig05: GPU a nivel arquitectura.
especializa desarrollando unidades de procesamiento
gráfico y tecnología de circuitos integrados para V. Desarrollo del sistema
diferentes equipos personales, su uso más extremos
son para estaciones de trabajo, donde se requiere de Para esta practica en especial, el equipo se basó en
un procesamiento complejo, pero de igual manera se un articulo recomendado por el Doctor Tomas
encuentra en ordenadores personales más Hernández Bonilla, maestro en inteligencia artificial.
económicos que donde el usuario requiere un Artículo que dejaremos en los apéndices. Nos
procesamiento mejor al estándar. recomendó seguir el articulo a pie de la letra.
Nvidia ha cambiado para ser una compañía enfocada Lo primero que nos solicita es tener el sistema
en cuatro mercados: gaming, visualización operativo Linux Ubuntu en versiones de 18.04 o la
profesional, centros de datos y auto. NVIDIA produce mas actual que es la 20.04. El integrante del equipo
GPUs incluyendo la serie GeForce para videojuegos, Iván Durán anteriormente había hecho una partición
la serie NVIDIA Quadro de diseño asistido por en su disco duro para poder usar el sistema operativo
ordenador y la creación de contenido digital en las antes mencionado, por lo que se tiene Ubuntu 18.04
estaciones de trabajo, y la serie de circuitos LTS instalado, y es aquí donde se genera todo lo
integrados nForce para placas base. demás.
Las Unidades de procesamiento gráfico, mejor Lo primero que sugiere el documento es instalar el
conocidas como GPU’s, es un coprocesador enfocado software de CUDA de NVIDIA, lo cual se consigue
al procesamiento de gráficos u operaciones de coma fácilmente siguiendo las instrucciones de su página
flotante, se utilizan generalmente para aligerar la oficial desde el buscados de internet (anexos). Claro
carga de trabajo del procesador central en está que la instalación y la descarga se tiene que
aplicaciones como los videojuegos o aplicaciones 3D hacer considerando que se tiene el sistema operativo
interactivas. Ubuntu.
A continuación podemos ver una comparación entre
una CPU y una Unidad de procesamiento gráfico:

Fig06: Pasos para instalar CUDA

Fig04: Comparación entre un CPU y una GPU.

A continuación, podemos ver cómo se comporta a


nivel arquitectura una GPU.
Fig07: Código necesario para instalar CUDA
en Ubuntu

Posteriormente solicita instalar ANACONDA para lo


cual, del mismo modo, se recurre a su pagina oficial y
se busca el instalador necesario o las instrucciones
oficiales.
Benemérita Universidad Autónoma de Puebla
Complejo Regional Centro, San José Chiapa

VII. Implementación del experimento


Como se menciona el procedimiento, todo se siguió al
pie de la letra, pero debido a que el programa final solo
funciona con una GPU integrada o dedicada de
NVIDIA, a la hora de correr el programa no daba
resultados visibles.

VIII. Análisis de resultados


Fig08: Página para descargar ANACONDA La primera vez que se corrió el programa final
sugerido por el articulo la computadora empezó a
Posteriormente se realiza un paso muy importante y trabajar de manera extrema por unos cuantos
es aquí donde se hace lo necesario para que el segundos pero finalmente, cuando la terminal donde
sistema operativo reconozca a os comandos de se visualizan los resultados tanto de la terminal propia
CUDA, se tiene que abrir la terminal y escribir el de Ubuntu como en la extensión de terminal del
siguiente código Software Visual Studio Code, terminaba su trabajo y
arrojaba el error de “DEVICE NOT FOUND”, el
conda install numba
proceso de la computadora se detenía y todo seguía
Como ultimo paso, hay dos formas, dentro de la normal.
terminal escribir el código que nos sugiere el artículo
o generar en un IDLE el código y guardarlo con la IX. Conclusiones
extensión de Python. Lo que nosotros hicimos fue la Finalmente, después de realizar e investigar sobre
segunda. En la máquina ya se tenía todo lo necesario esta práctica, pudimos percatarnos de que si hay
para programar en Python dentro del entorno de herramientas que pueden ayudarnos en cuanto a la
Visual Studio Code, posteriormente se escribió el programación de tarjetas gráficas, creemos que es
código de ejemplo y se guardó, y para correr el indispensable adquirir una para seguir trabajando en
programa el articulo sugiere hacerlo desde a terminal, ello, y observar de manera física su comportamiento,
y es así como se hace. ya que por ahora solo lo dejamos en conocimiento
El programa lo veremos en la parte de los anexos. teórico.
Cabe destacar que, un aspecto ha sido el estudio de
VI. Simulaciones
cómo se puede desarrollar en lenguaje Python en la
A continuación, se muestran algunas imágenes de lo tecnología de GPU. Teníamos interés en aprender
que sería la simulación en Visual Studio del código más sobre este lenguaje y, en especial muchas de las
implementado en Python. librerías que incluye para series numéricas.
Por otro lado, en un principio, y en la planificación
inicial, la única herramienta CUDA para Python
prevista era PyCuda pero, tras documentarse al
respecto, descubrimos la existencia de Anaconda, así
que se decidió hacer uso de este.

X. Referencias
Robert Oliver. (2017). GPU Programming with Python.
Septiembre 30, 2020, de LINUXHINT Sitio web:
https://linuxhint.com/gpu-programming-python/

Sevivon Studio. (2020). Instalación de Ubuntu 20.04 LTS


Fig09: Resultados directos de terminal. junto a Windows 10. Octubre 02, 2020, de YouTube Sitio
web: https://www.youtube.com/watch?v=6-rUBlTj0yI

Link para descargar ANACONDA:

https://www.anaconda.com/products/individual

Link para descargar VS Code

https://code.visualstudio.com/download

Link para descargar CUDA de NVIDIA:

https://developer.nvidia.com/cuda-downloads

Fig10: Resultados desde terminal de VS


Code
Benemérita Universidad Autónoma de Puebla
Complejo Regional Centro, San José Chiapa

XI. Apéndices
A continuación, ponemos el código sugerido por el articulo:
import numpy as np
from timeit import default_timer as timer
from numba import vectorize

# This should be a substantially high value. On my test machine, this took


# 33 seconds to run via the CPU and just over 3 seconds on the GPU.
NUM_ELEMENTS = 100000000

# This is the CPU version.


def vector_add_cpu(a, b):
c = np.zeros(NUM_ELEMENTS, dtype=np.float32)
for i in range(NUM_ELEMENTS):
c[i] = a[i] + b[i]
return c

# This is the GPU version. Note the @vectorize decorator. This tells
# numba to turn this into a GPU vectorized function.
@vectorize(["float32(float32, float32)"], target='cuda')
def vector_add_gpu(a, b):
return a + b;

def main():
a_source = np.ones(NUM_ELEMENTS, dtype=np.float32)
b_source = np.ones(NUM_ELEMENTS, dtype=np.float32)

# Time the CPU function


start = timer()
vector_add_cpu(a_source, b_source)
vector_add_cpu_time = timer() - start

# Time the GPU function


start = timer()
vector_add_gpu(a_source, b_source)
vector_add_gpu_time = timer() - start

# Report times
print("CPU function took %f seconds." % vector_add_cpu_time)
print("GPU function took %f seconds." % vector_add_gpu_time)

return 0

if __name__ == "__main__":
main()

A continuación le dejamos el link del video en la plataforma de YouTube que el equipo hizo para la práctica:

https://www.youtube.com/watch?v=7KsEHKJkeJk&feature=youtu.be

También podría gustarte