cuTile.jl es una nueva herramienta que permite a los desarrolladores de Julia utilizar la programación basada en tiles de NVIDIA CUDA. Este avance facilita el acceso automático a núcleos tensor y otros hardware especializados.
La versión para Python de cuTile fue lanzada a principios de este año, y ahora los desarrolladores de Julia pueden beneficiarse de un modelo de programación similar a través de cuTile.jl.
¿Qué es la programación GPU basada en tiles?
La programación GPU tradicional con CUDA exige a los desarrolladores pensar en hilos, warps y jerarquías de memoria. Aunque este enfoque es potente, requiere que el programador asigne eficientemente los algoritmos al hardware. Con CUDA Tile, los desarrolladores pueden describir operaciones sobre bloques de datos, dejando que el compilador se encargue del mapeo al hardware.
Por ejemplo, en la suma de vectores, el modelo tradicional de programación GPU, usando CUDA.jl, requiere que el programador gestione hilos individuales explícitamente:
using CUDA function vadd(a, b, c, n) i = (blockIdx().x - 1) * blockDim().x + threadIdx().x if i <= n @inbounds c[i] = a[i] + b[i] end return end threads = 512 blocks = cld(vector_size, threads) @cuda threads blocks vadd(a, b, c, vector_size)
Con CUDA Tile a través de cuTile.jl, las mismas operaciones se expresan a nivel de tiles, ocultando detalles como cálculos de índices o comprobaciones de límites:
import cuTile as ct function vadd(a, b, c, tile_size) pid = ct.bid(1) tile_a = ct.load(a, pid, (tile_size,)) tile_b = ct.load(b, pid, (tile_size,)) ct.store(c, pid, tile_a + tile_b) return end tile_size = 1024 grid = cld(vector_size, tile_size) ct.launch(vadd, grid, a, b, c, ct.Constant(tile_size))

