El presente proyecto contiene implementaciones del juego de la vida de Conway en CPU, CUDA y OpenCL, con el propósito de evaluar las diferencias y ventajas/desventajas de cada plataforma.
Puede correr y observar las simulaciones desde la terminal indicando 1 en el argumento de debug al ejecutar cada versión.
Hay un Makefile para trabajar más fácil con los siguientes comandos:
- all: Construye los ejecutables para CUDA, OpenCL y CPU.
- init: Inicializa el directorio de
buildutilizando CMake. - cuda: Construye el ejecutable para CUDA.
- cl: Construye el ejecutable para OpenCL.
- cpu: Construye el ejecutable para CPU.
- test: Ejecuta las pruebas utilizando CTest.
- clean: Elimina los artefactos de construcción y los directorios de pruebas.
- watch: Monitorea los archivos fuente en busca de cambios y desencadena una construcción cuando se detecta un cambio.
Desde el mismo directorio CUDA-CL-GameOfLife.
build/src/MyProjectCPU <world width> <world height> <iterations> <output_file> <0|1 (debug)> <0|1 (if)>
build/src/MyProjectCPU 32 16 500 out.txt 1 0
Iteration: 500
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□■■■□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□■■■□□□■■■□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□■■□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□■■□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□■□□□□□□□□□□
RESULTS:
Time to create data: 8 microseconds
Time to execute kernel: 1198305 microseconds
Time to execute the whole program: 1198313 microseconds
Data written to out.txt
build/src/cl/MyProjectCL <world width> <world height> <block size> <iterations> <output file> <0|1 (debug)> <0|1 (if)>
build/src/cl/MyProjectCL 32 16 128 500 out.txt 1 0
Iteration: 500
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
■□□□□□□□■■□□□□□□□□□□□□□□□□□□□□□■
□■□□□□□■□□■□□□□□■■□□□□□□□□□□□□■□
■□□□□□□□■■□□□□□■□□■□□□□□□□□□□□□■
□□□□□□□□□□□□□□□□■■□□□□□□□□□□□□□□
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□■■□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□■■□□
□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□■□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□■□■□□□□□□□□□□□□□□□□□□□□□□□□□□
RESULTS:
Time to create data: 8 microseconds
Time to execute kernel: 1308667 microseconds
Time to execute the whole program: 1308821 microseconds
Data written to out.txt
build/src/cuda/MyProjectCUDA <world width> <world height> <block size> <iterations> <output file> <0|1 (debug)> <0|1 (if)>
build/src/cuda/MyProjectCUDA 32 16 128 500 out.txt 1 0
Iteration: 500
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□■□■□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□■■□□□■■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□■■□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□■■□□□□□□□□□□□□□□□□□□□■■
□□□□■■□□□■■□□□□□□□□□□□□□□□□□□■□■
□□□□■■□□□□□□□□□□□□□□□□□□□□□□□□■□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□■■□□□□□
■■■□□□□□□□□□□□□□□□□□□□□□□■■□□□□□
RESULTS:
Time to create data: 8 microseconds
Time to copy data to device: 18 microseconds
Time to execute kernel: 1371543 microseconds
Time to copy data to host: 44 microseconds
Time to execute the whole program: 1371613 microseconds
Data written to out.txt