1 research outputs found
Towards efficient exploitation of GPUs : a methodology for mapping index-digit algorithms
[Resumen]La computaci贸n de prop贸sito general en GPUs supuso un gran paso, llevando la
computaci贸n de alto rendimiento a los equipos dom茅sticos. Lenguajes de programaci贸n de alto nivel como OpenCL y CUDA redujeron en gran medida la complejidad
de programaci贸n. Sin embargo, para poder explotar totalmente el poder computacional
de las GPUs, se requieren algoritmos paralelos especializados. La complejidad
en la jerarqu铆a de memoria y su arquitectura masivamente paralela hace que la
programaci贸n de GPUs sea una tarea compleja incluso para programadores experimentados.
Debido a la novedad, las librer铆as de prop贸sito general son escasas y las
versiones paralelas de los algoritmos no siempre est谩n disponibles.
En lugar de centrarnos en la paralelizaci贸n de algoritmos concretos, en esta tesis
proponemos una metodolog铆a general aplicable a la mayor铆a de los problemas de tipo
divide y vencer谩s con una estructura de mariposa que puedan formularse a trav茅s de
la representaci贸n Indice-D铆gito. En primer lugar, se analizan los diferentes factores que afectan al rendimiento de la arquitectura de las GPUs. A continuaci贸n, estudiamos
varias t茅cnicas de optimizaci贸n y dise帽amos una serie de bloques constructivos
modulares y reutilizables, que se emplean para crear los diferentes algoritmos. Por 煤ltimo, estudiamos el equilibrio 贸ptimo de los recursos, y usando vectores de mapeo
y operadores algebraicos ajustamos los algoritmos para las configuraciones deseadas.
A pesar del enfoque centrado en la exibilidad y la facilidad de programaci贸n, las
implementaciones resultantes ofrecen un rendimiento muy competitivo, que llega a superar conocidas librer铆as recientes.[Resumo] A computaci贸n de prop贸sito xeral en GPUs supuxo un gran paso, levando a
computaci贸n de alto rendemento aos equipos dom茅sticos. Linguaxes de programaci贸n de alto nivel como OpenCL e CUDA reduciron en boa medida a complexidade
da programaci贸n. Con todo, para poder aproveitar totalmente o poder computacional
das GPUs, requ铆rense algoritmos paralelos especializados. A complexidade na
xerarqu铆a de memoria e a s煤a arquitectura masivamente paralela fai que a programaci贸n de GPUs sexa unha tarefa complexa mesmo para programadores experimentados.
Debido 谩 novidade, as librar铆as de prop贸sito xeral son escasas e as versi贸ns
paralelas dos algoritmos non sempre est谩n dispo帽ibles.
En lugar de centrarnos na paralelizaci贸n de algoritmos concretos, nesta tese propo帽emos unha metodolox铆a xeral aplicable 谩 maior铆a dos problemas de tipo divide e
vencer谩s cunha estrutura de bolboreta que poidan formularse a trav茅s da representaci贸n 脥ndice-D铆xito. En primeiro lugar, anal铆zanse os diferentes factores que afectan
ao rendemento da arquitectura das GPUs. A continuaci贸n, estudamos varias t茅cnicas
de optimizaci贸n e dese帽amos unha serie de bloques construtivos modulares e
reutilizables, que se empregan para crear os diferentes algoritmos. Por 煤ltimo, estudamos
o equilibrio 贸ptimo dos recursos, e usando vectores de mapeo e operadores
alxbricos axustamos os algoritmos para as configuraci贸ns desexadas. A pesar do enfoque
centrado na exibilidade e a facilidade de programaci贸n, as implementaci贸ns
resultantes ofrecen un rendemento moi competitivo, que chega a superar co帽ecidas
librar铆as recentes.[Abstract]GPU computing supposed a major step forward, bringing high performance computing
to commodity hardware. Feature-rich parallel languages like CUDA and
OpenCL reduced the programming complexity. However, to fully take advantage of
their computing power, specialized parallel algorithms are required. Moreover, the
complex GPU memory hierarchy and highly threaded architecture makes programming
a difficult task even for experienced programmers. Due to the novelty of GPU
programming, common general purpose libraries are scarce and parallel versions of
the algorithms are not always readily available.
Instead of focusing in the parallelization of particular algorithms, in this thesis
we propose a general methodology applicable to most divide-and-conquer problems
with a buttery structure which can be formulated through the Index-Digit
representation. First, we analyze the different performance factors of the GPU architecture.
Next, we study several optimization techniques and design a series of
modular and reusable building blocks, which will be used to create the different
algorithms. Finally, we study the optimal resource balance, and through a mapping
vector representation and operator algebra, we tune the algorithms for the desired
configurations. Despite the focus on programmability and exibility, the resulting
implementations offer very competitive performance, being able to surpass other
well-known state of the art libraries