1 research outputs found

    Towards efficient exploitation of GPUs : a methodology for mapping index-digit algorithms

    Get PDF
    [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
    corecore