Exportar este item: EndNote BibTex

Use este identificador para citar ou linkar para este item: https://tede2.pucrs.br/tede2/handle/tede/9592
Tipo do documento: Dissertação
Título: High-level programming abstractions for stream parallelism on gpus
Autor: Rockenbach, Dinei André
Primeiro orientador: Fernandes, Luiz Gustavo Leão
Primeiro coorientador: Griebler, Dalvan Jair
Resumo: The growth and spread of parallel architectures have driven the pursuit of greater computing power with massively parallel hardware such as the Graphics Processing Units (GPUs). This new heterogeneous computer architecture composed of multi-core Central Processing Units (CPUs) and many-core GPUs became usual, enabling novel software applications such as self-driving cars, real-time ray tracing, deep learning, and Virtual Reality (VR), which are characterized as stream processing applications. However, this heterogeneous environment poses an additional challenge to software development, which is still in the process of adapting to the parallel processing paradigm on multi-core systems, where programmers are supported by several Application Programming Interfaces (APIs) that offer different abstraction levels. The parallelism exploitation in GPU is done using both CUDA and OpenCL for academia and industry, whose developers have to deal with low-level architecture concepts to efficiently exploit GPU parallelism in their applications. There is still a lack of parallel programming abstractions when: 1) parallelizing code on GPUs, and 2) needing higher-level programming abstractions that deal with both CPU and GPU parallelism. Unfortunately, developers still have to be expert programmers on system and architecture to enable efficient hardware parallelism exploitation in this architectural environment. To contribute to the first problem, we created GSPARLIB, a novel structured parallel programming library for exploiting GPU parallelism that provides a unified programming API and driver-agnostic runtime. It offers Map and Reduce parallel patterns on top of CUDA and OpenCL drivers. We evaluate its performance comparing with state-of-the-art APIs, where the experiments revealed a comparable and efficient performance. For contributing to the second problem, we extended the SPar Domain-Specific Language (DSL), which has been proved to be high-level and productive for expressing stream parallelism with C++ annotations in multi-core CPUs. In this work, we propose and implement new annotations that increase expressiveness to combine the current stream parallelism on CPUs and data parallelism on GPUs. We also provide new pattern-based transformation rules that were implemented in the compiler targeting automatic source-to-source code transformations using GSPARLIB for GPU parallelism exploitation. Our experiments demonstrate that SPar compiler is able to generate stream and data parallel patterns without significant performance penalty compared to handwritten code. Thanks to these advances in SPar, our work is the first on providing high-level C++11 annotations as an API that does not require significant code refactoring in sequential programs while enabling multi-core CPU and many-core GPU parallelism exploitation for stream processing applications.
Abstract: O crescimento e disseminação das arquiteturas paralelas têm conduzido a busca por maior poder computacional com hardware massivamente paralelo tais como as unidades de processamento gráfico (GPUs). Essa nova arquitetura de computador heterogênea composta de unidade de processamento central (CPUs) com múltiplos núcleos e GPUs com muitos núcleos se tornou comum, possibilitando novas aplicações de software tais como carros com direção autônoma, ray tracing em tempo real, aprendizado profundo, e realidade virtual (VR), que são caracterizadas como aplicações de processamento de fluxo contínuo de dados. Porém, esse ambiente heterogêneo apresenta um desafio adicional para o desenvolvimento de software, que ainda está no processo de adaptação para o paradigma de processamento paralelo em sistemas com múltiplos núcleos, onde programadores têm a disposição várias interfaces de programação de aplicações (APIs) que oferecem diferentes níveis de abstração. A exploração de paralelismo em GPU é feito usando ambos CUDA e OpenCL pela academia e pela indústria, cujos desenvolvedores precisam lidar com conceitos de arquitetura de baixo nível para explorar o paralelismo de GPU eficientemente em suas aplicações. Existe uma carência de abstrações de programação paralela ao: 1) paralelizar código para GPUs, e 2) necessitar abstrações de programação de alto nível que lidam com o paralelismo de CPU e GPU combinados. Infelizmente, os desenvolvedores precisam ser programadores especialistas em sistemas operacionais e conhecer a arquitetura do hardware para permitir a exploração eficiente de paralelismo. Como contribuição à primeira carência, criou-se a GSPARLIB, uma nova biblioteca de programação paralela estruturada para explorar paralelismo de GPU que provê uma API de programação unificada e um ambiente de execução agnóstico ao driver da plataforma de hardware. Ela oferece os padrões paralelos Map e Reduce sobre os drivers CUDA e OpenCL. O seu desempenho foi avaliado comparando com APIs do estado da arte, onde experimentos revelaram um desempenho comparável a eficiente. Como contribuição à segunda carência, estendeu-se a linguagem específica de domínio (DSL) SPar, que já foi testada e provada como sendo de alto nível e produtiva para expressar paralelismo de fluxo contínuo de dados com anotações C++ em CPUs de múltiplos núcleos. Neste trabalho, foram propostas e implementadas novas anotações que aumentam a expressividade para combinar o paralelismo de fluxo contínuo de dados em CPUs existente com o paralelismo de dados em GPUs. Também foram providenciadas novas regras de transformação baseadas em padrões, que foram implementadas no compilador almejando transformações automáticas de código-fonte para código-fonte usando a GSPARLIB para exploração de paralelismo de GPU. Os experimentos demonstram que o compilador da SPar é capaz de gerar padrões paralelos de paralelismo de fluxo contínuo de dados e de dados sem nenhuma redução de desempenho significativa quando comparada com código escrito pelo programador. Graças a esses avanços na SPar, este trabalho é o primeiro a prover anotações C++11 de alto nível como uma API que não requer refatoração significativa de código em programas sequenciais, para permitir a exploração de paralelismo em CPU de múltiplos núcleos e GPU de muitos núcleos em aplicações de processamento de fluxo contínuo de dados.
Palavras-chave: Parallel Programming
Parallel Code Generation
GPU Programming
Heterogeneous Computin
Stream Parallelism
Stream Processing Applications
Domain Specific Language
Parallel Patterns
Skeleton Library
Algorithmic Skeletons
C++
Map
Reduce
Programação Paralela
Geração de Código Paralelo
Programação Para GPU
Computação Heterogênea
Paralelismo de Fluxo
Aplicações de Processamento de Fluxo
Linguagem Específica de Domínio
Padrões de Programação Paralela
Biblioteca de Esqueletos Algorítmicos
Esqueletos Algorítmicos
Área(s) do CNPq: CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
Idioma: eng
País: Brasil
Instituição: Pontifícia Universidade Católica do Rio Grande do Sul
Sigla da instituição: PUCRS
Departamento: Escola Politécnica
Programa: Programa de Pós-Graduação em Ciência da Computação
Tipo de acesso: Acesso Aberto
Restrição de acesso: Trabalho não apresenta restrição para publicação
URI: http://tede2.pucrs.br/tede2/handle/tede/9592
Data de defesa: 27-Nov-2020
Aparece nas coleções:Programa de Pós-Graduação em Ciência da Computação

Arquivos associados a este item:
Arquivo Descrição TamanhoFormato 
DINEI ANDRÉ RECKENBACH_DIS.pdfDINEI_ANDRÉ_ROCKENBACH_DIS8,65 MBAdobe PDFThumbnail

Baixar/Abrir Pré-Visualizar


Os itens no repositório estão protegidos por copyright, com todos os direitos reservados, salvo quando é indicado o contrário.