Detalhes bibliográficos
Ano de defesa: |
2020 |
Autor(a) principal: |
Rockenbach, Dinei André |
Orientador(a): |
Fernandes, Luiz Gustavo Leão |
Banca de defesa: |
Não Informado pela instituição |
Tipo de documento: |
Dissertação
|
Tipo de acesso: |
Acesso aberto |
Idioma: |
eng |
Instituição de defesa: |
Pontifícia Universidade Católica do Rio Grande do Sul
|
Programa de Pós-Graduação: |
Programa de Pós-Graduação em Ciência da Computação
|
Departamento: |
Escola Politécnica
|
País: |
Brasil
|
Palavras-chave em Português: |
|
Palavras-chave em Inglês: |
|
Área do conhecimento CNPq: |
|
Link de acesso: |
http://tede2.pucrs.br/tede2/handle/tede/9592
|
Resumo: |
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. |