High-level programming abstractions for stream parallelism on gpus

Detalhes bibliográficos
Autor(a) principal: Rockenbach, Dinei André
Data de Publicação: 2020
Tipo de documento: Dissertação
Idioma: eng
Título da fonte: Biblioteca Digital de Teses e Dissertações da PUC_RS
Texto Completo: 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.
id P_RS_d5424b60a85c8db2b4d345a0c70ed19c
oai_identifier_str oai:tede2.pucrs.br:tede/9592
network_acronym_str P_RS
network_name_str Biblioteca Digital de Teses e Dissertações da PUC_RS
repository_id_str
spelling Fernandes, Luiz Gustavo LeãoGriebler, Dalvan JairRockenbach, Dinei André2021-05-06T17:28:54Z2020-11-27http://tede2.pucrs.br/tede2/handle/tede/9592O 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.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.Submitted by PPG Ciência da Computação (ppgcc@pucrs.br) on 2021-04-23T21:36:13Z No. of bitstreams: 1 DINEI ANDRÉ RECKENBACH_DIS.pdf: 8854160 bytes, checksum: 7b3d03bc058f177659d5a8a399031924 (MD5)Approved for entry into archive by Sarajane Pan (sarajane.pan@pucrs.br) on 2021-05-06T17:14:48Z (GMT) No. of bitstreams: 1 DINEI ANDRÉ RECKENBACH_DIS.pdf: 8854160 bytes, checksum: 7b3d03bc058f177659d5a8a399031924 (MD5)Made available in DSpace on 2021-05-06T17:28:54Z (GMT). No. of bitstreams: 1 DINEI ANDRÉ RECKENBACH_DIS.pdf: 8854160 bytes, checksum: 7b3d03bc058f177659d5a8a399031924 (MD5) Previous issue date: 2020-11-27Coordenação de Aperfeiçoamento de Pessoal de Nível Superior - CAPESapplication/pdfhttp://tede2.pucrs.br:80/tede2/retrieve/180615/DINEI%20ANDR%c3%89%20RECKENBACH_DIS.pdf.jpgengPontifícia Universidade Católica do Rio Grande do SulPrograma de Pós-Graduação em Ciência da ComputaçãoPUCRSBrasilEscola PolitécnicaParallel ProgrammingParallel Code GenerationGPU ProgrammingHeterogeneous ComputinStream ParallelismStream Processing ApplicationsDomain Specific LanguageParallel PatternsSkeleton LibraryAlgorithmic SkeletonsC++MapReduceProgramação ParalelaGeração de Código ParaleloProgramação Para GPUComputação HeterogêneaParalelismo de FluxoAplicações de Processamento de FluxoLinguagem Específica de DomínioPadrões de Programação ParalelaBiblioteca de Esqueletos AlgorítmicosEsqueletos AlgorítmicosCIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAOHigh-level programming abstractions for stream parallelism on gpusinfo:eu-repo/semantics/publishedVersioninfo:eu-repo/semantics/masterThesisTrabalho não apresenta restrição para publicação-4570527706994352458500500600-8620782570833253013590462550136975366info:eu-repo/semantics/openAccessreponame:Biblioteca Digital de Teses e Dissertações da PUC_RSinstname:Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)instacron:PUC_RSTHUMBNAILDINEI ANDRÉ RECKENBACH_DIS.pdf.jpgDINEI ANDRÉ RECKENBACH_DIS.pdf.jpgimage/jpeg4990http://tede2.pucrs.br/tede2/bitstream/tede/9592/4/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf.jpg04bd02ab644c06044739d678872acbefMD54TEXTDINEI ANDRÉ RECKENBACH_DIS.pdf.txtDINEI ANDRÉ RECKENBACH_DIS.pdf.txttext/plain380024http://tede2.pucrs.br/tede2/bitstream/tede/9592/3/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf.txtae04018f40d779a7af1eef78cb34a11aMD53ORIGINALDINEI ANDRÉ RECKENBACH_DIS.pdfDINEI ANDRÉ RECKENBACH_DIS.pdfapplication/pdf8854160http://tede2.pucrs.br/tede2/bitstream/tede/9592/2/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf7b3d03bc058f177659d5a8a399031924MD52LICENSElicense.txtlicense.txttext/plain; charset=utf-8590http://tede2.pucrs.br/tede2/bitstream/tede/9592/1/license.txt220e11f2d3ba5354f917c7035aadef24MD51tede/95922021-05-06 20:00:22.54oai:tede2.pucrs.br:tede/9592QXV0b3JpemE/P28gcGFyYSBQdWJsaWNhPz9vIEVsZXRyP25pY2E6IENvbSBiYXNlIG5vIGRpc3Bvc3RvIG5hIExlaSBGZWRlcmFsIG4/OS42MTAsIGRlIDE5IGRlIGZldmVyZWlybyBkZSAxOTk4LCBvIGF1dG9yIEFVVE9SSVpBIGEgcHVibGljYT8/byBlbGV0cj9uaWNhIGRhIHByZXNlbnRlIG9icmEgbm8gYWNlcnZvIGRhIEJpYmxpb3RlY2EgRGlnaXRhbCBkYSBQb250aWY/Y2lhIFVuaXZlcnNpZGFkZSBDYXQ/bGljYSBkbyBSaW8gR3JhbmRlIGRvIFN1bCwgc2VkaWFkYSBhIEF2LiBJcGlyYW5nYSA2NjgxLCBQb3J0byBBbGVncmUsIFJpbyBHcmFuZGUgZG8gU3VsLCBjb20gcmVnaXN0cm8gZGUgQ05QSiA4ODYzMDQxMzAwMDItODEgYmVtIGNvbW8gZW0gb3V0cmFzIGJpYmxpb3RlY2FzIGRpZ2l0YWlzLCBuYWNpb25haXMgZSBpbnRlcm5hY2lvbmFpcywgY29ucz9yY2lvcyBlIHJlZGVzID9zIHF1YWlzIGEgYmlibGlvdGVjYSBkYSBQVUNSUyBwb3NzYSBhIHZpciBwYXJ0aWNpcGFyLCBzZW0gP251cyBhbHVzaXZvIGFvcyBkaXJlaXRvcyBhdXRvcmFpcywgYSB0P3R1bG8gZGUgZGl2dWxnYT8/byBkYSBwcm9kdT8/byBjaWVudD9maWNhLgo=Biblioteca Digital de Teses e Dissertaçõeshttp://tede2.pucrs.br/tede2/PRIhttps://tede2.pucrs.br/oai/requestbiblioteca.central@pucrs.br||opendoar:2021-05-06T23:00:22Biblioteca Digital de Teses e Dissertações da PUC_RS - Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)false
dc.title.por.fl_str_mv High-level programming abstractions for stream parallelism on gpus
title High-level programming abstractions for stream parallelism on gpus
spellingShingle High-level programming abstractions for stream parallelism on gpus
Rockenbach, Dinei André
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
CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
title_short High-level programming abstractions for stream parallelism on gpus
title_full High-level programming abstractions for stream parallelism on gpus
title_fullStr High-level programming abstractions for stream parallelism on gpus
title_full_unstemmed High-level programming abstractions for stream parallelism on gpus
title_sort High-level programming abstractions for stream parallelism on gpus
author Rockenbach, Dinei André
author_facet Rockenbach, Dinei André
author_role author
dc.contributor.advisor1.fl_str_mv Fernandes, Luiz Gustavo Leão
dc.contributor.advisor-co1.fl_str_mv Griebler, Dalvan Jair
dc.contributor.author.fl_str_mv Rockenbach, Dinei André
contributor_str_mv Fernandes, Luiz Gustavo Leão
Griebler, Dalvan Jair
dc.subject.eng.fl_str_mv 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
topic 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
CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
dc.subject.por.fl_str_mv 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
dc.subject.cnpq.fl_str_mv CIENCIA DA COMPUTACAO::TEORIA DA COMPUTACAO
description 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.
publishDate 2020
dc.date.issued.fl_str_mv 2020-11-27
dc.date.accessioned.fl_str_mv 2021-05-06T17:28:54Z
dc.type.status.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.driver.fl_str_mv info:eu-repo/semantics/masterThesis
format masterThesis
status_str publishedVersion
dc.identifier.uri.fl_str_mv http://tede2.pucrs.br/tede2/handle/tede/9592
url http://tede2.pucrs.br/tede2/handle/tede/9592
dc.language.iso.fl_str_mv eng
language eng
dc.relation.program.fl_str_mv -4570527706994352458
dc.relation.confidence.fl_str_mv 500
500
600
dc.relation.cnpq.fl_str_mv -862078257083325301
dc.relation.sponsorship.fl_str_mv 3590462550136975366
dc.rights.driver.fl_str_mv info:eu-repo/semantics/openAccess
eu_rights_str_mv openAccess
dc.format.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Pontifícia Universidade Católica do Rio Grande do Sul
dc.publisher.program.fl_str_mv Programa de Pós-Graduação em Ciência da Computação
dc.publisher.initials.fl_str_mv PUCRS
dc.publisher.country.fl_str_mv Brasil
dc.publisher.department.fl_str_mv Escola Politécnica
publisher.none.fl_str_mv Pontifícia Universidade Católica do Rio Grande do Sul
dc.source.none.fl_str_mv reponame:Biblioteca Digital de Teses e Dissertações da PUC_RS
instname:Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
instacron:PUC_RS
instname_str Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
instacron_str PUC_RS
institution PUC_RS
reponame_str Biblioteca Digital de Teses e Dissertações da PUC_RS
collection Biblioteca Digital de Teses e Dissertações da PUC_RS
bitstream.url.fl_str_mv http://tede2.pucrs.br/tede2/bitstream/tede/9592/4/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf.jpg
http://tede2.pucrs.br/tede2/bitstream/tede/9592/3/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf.txt
http://tede2.pucrs.br/tede2/bitstream/tede/9592/2/DINEI+ANDR%C3%89+RECKENBACH_DIS.pdf
http://tede2.pucrs.br/tede2/bitstream/tede/9592/1/license.txt
bitstream.checksum.fl_str_mv 04bd02ab644c06044739d678872acbef
ae04018f40d779a7af1eef78cb34a11a
7b3d03bc058f177659d5a8a399031924
220e11f2d3ba5354f917c7035aadef24
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Biblioteca Digital de Teses e Dissertações da PUC_RS - Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS)
repository.mail.fl_str_mv biblioteca.central@pucrs.br||
_version_ 1799765348855054336