Nome do Projeto
O triplo-e da programação concorrente e paralela: expressividade, eficácia e eficiência
Ênfase
Pesquisa
Data inicial - Data final
01/04/2024 - 31/03/2027
Unidade de Origem
Coordenador Atual
Área CNPq
Ciências Exatas e da Terra
Resumo
Expressividade, eficácia e eficiência são propriedades de linguagens e ferramentas de programação que refletem a forma como os programas são escritos, executados e mantidos. A medida em que novas tecnologias para exploração de concorrência e paralelismo são disponibilizadas por novas arquiteturas, tanto de processadores como de dispositivos aceleradores, recursos de programação são incorporados às linguagens de programação para que estes possam ser explorados. A questão que se coloca é o quão efetivamente estes recursos estão sendo utilizados, considerando um determinada aplicação ao qual o programador se responsabilizou, em relação às três propriedades elencadas. Neste projeto, o objetivo a ser alcançado é categorizar os recursos para programação concorrente e paralela de diferentes ferramentas de programação em termos de suas propriedades no atendimento a diferentes classes de problemas. Estes resultados serão concretizados pela pontuação, segundo os critérios de caracterização a serem definidos e validados, os diferentes recursos para exposição da concorrência da aplicação, exploração do paralelismo do hardware e sincronização e comunicação entre as atividades do programa. A aplicabilidade imediata dos resultados obtidos deverão promover um método seguro para seleção de ferramentas de programação, e mesmo de recursos de programação destas, para implementação de uma determinada aplicação. Também é esperado que o método elaborado para realizar a comparação entre as ferramentas de programação concorrente e paralela desenvolvido possa vir a ser empregado em outros contextos. Outras contribuições são também esperadas, tais como desenvolvimento de recursos humanos, produção de material didático, além de oferecer um portfólio de estudos de caso com as ferramentas consideradas do desenvolvimento das atividades. O ponto de partida deverá ser a identificação das aplicações que efetivamente fazem uso de programação concorrente e dos níveis de paralelismo de hardware que deverão ser considerados. Serão buscadas, na literatura, estudos de caso que documentem implementações de software concorrente e/ou paralelo. Esta busca será expandida com buscas na Web para ampliar o espaço amostral, uma vez que não deve ser ignorada a hipótese de que registros válidos de estudos de caso realizados na indústria não façam parte da literatura científica e acadêmica. Como complemento a este levantamento serão realizadas buscas de implementações disponibilizadas em repositórios públicos de software, como no GitHub, assim como o levantamento de discussões em fóruns de desenvolvedores, como o Stack Overflow. A metodologia de trabalho também envolverá, além dos próprios orientandos do proponente, estudantes de graduação, mestrado e doutorado dos cursos da área de Computação da UFPel. Tendo o objeto de estudo proposto neste projeto plena aderência às disciplinas ministradas pelo proponente, atividades pontuais virão a compor parte dos processos de formação, seja pelo fomento do debate em sala de aula, seja pela execução de trabalhos avaliativos.

Objetivo Geral

O principal objetivo a ser atingido, ao final dos 36 meses de execução do projeto, será materializado em método para categorização da usabilidade de ferramentas para programação concorrente e paralela. Este método consistirá em um mecanismo de pontuação sobre os recursos de programação oferecidos pelas ferramentas de programação caracterizando suas respectivas expressividade, eficácia e eficiência na descrição de determinados problemas. Tendo como estas três propriedades, expressividade, eficácia e eficiência como eixos de um gráfico tri-dimensional e considerando a origem deste gráfico as características de um determinado campo de aplicação, o posicionamento de uma determinada linguagem de programação neste gráfico informará sua potencialidade para descrever a aplicação em questão de acordo com as exigências de projeto elencadas.

Como objetivos secundários, é dado destaque a dois. O primeiro, no contexto científico, diz respeito à produção de um registro da evolução das ferramentas para programação concorrente e paralela e, eventualmente, considerada a proposição de uma nova taxonomia para a identificação dos modelos de paralelismo. No registro da evolução estará refletido como, nas diferentes ferramentas de programação, os diferentes recurso previstos para desenvolvimento de software concorrente ou paralelo foram/são efetivamente implementados e explorados nos estudos de caso. O segundo objetivo secundário alvo deste projeto, este no contexto de formação de recursos humanos, é o de qualificar a formação de novos profissionais habilitados ao uso efetivo das arquiteturas paralelas na produção de software.

Justificativa

A hipótese seminal de pesquisa que motivou a elaboração desta proposta é: A exploração do paralelismo na construção de software não explora todo o potencial das modernas arquiteturas de hardware. Esta hipótese foi formulada em decorrência da observação de artigos científicos e de experiências em sala de aula. Nos artigos científicos, delimitando a observação aos artigos em que são documentados estudos de caso em termos de desempenho, é usual trabalhos onde variações da implementação de um algoritmo (ou estratégia de execução) sejam comparadas entre si. Em muitos casos, a falta de precisão em identificar as funcionalidades efetivamente exploradas nas diferentes versões das implementações e suas consequências sobre o desempenho obtido, resulta em lacunas na validação dos resultados e enfraquece as justificativas apresentadas às conclusões. Por outro lado, em sala de aula, observou-se que a discussão sobre requisitos de implementação dos recursos de programação provoca nos estudantes a compreensão dos aspectos de desempenho envolvidos na utilização das diferentes alternativas de programação apresentadas pelas ferramentas existentes.

A presente proposta ganha relevância ao abordar a lacuna identificada na exploração do potencial das modernas arquiteturas de hardware na construção de software concorrente e paralelo. Ao estabelecer uma categorização baseada em expressividade, eficácia e eficiência, o projeto visa criar um método sistemático para a avaliação de ferramentas de programação. A análise temporal da evolução das ferramentas e a produção de materiais instrucionais não apenas contribuem para a pesquisa científica, mas também têm impacto direto na formação de profissionais capacitados, tornando esta proposta uma iniciativa abrangente e relevante para o avanço na área.

Metodologia

1. Delimitação do escopo

O estudo será realizado considerando apenas ferramentas para programação concorrente e paralela sobre arquiteturas multiprocessadas. Desta forma, recursos de programação que envolvam distribuição não serão avaliados. No escopo selecionado, no entanto, encontra-se a vasta maioria de arquiteturas de sistemas computacionais em uso. Neste tipo de arquitetura diversos níveis de granularidade de paralelismo encontram-se disponíveis aos programadores. O nível mais fino de granularidade é encontrado no paralelismo intra-instrução (exemplo, organização superescalar e registradores vetoriais). O mais grosso, no paralelismo de threads (exemplo, arquiteturas multicore). O escopo do trabalho ainda contempla a programação de arquiteturas manycore, usualmente referida como GPGPUs (General-Purpose computing on Graphics Processing Units).

2. Etapas metodológicas
A metodologia de desenvolvimento deste projeto foi concebida para avaliar a hipótese de que a exploração do paralelismo na construção de software não explora todo o potencial das modernas arquiteturas de hardware. Sendo verdadeira, o projeto visa apontar mecanismos para habilitar programadores da nova geração a fazer uso mais efetivo do paralelismo oferecido pelo hardware moderno. Para tanto, as atividades foram concebidas para elaborar um método no qual os recursos de programação oferecidos pelas ferramentas para programação concorrente e paralela possam ser comparados e contrastados. As etapas metodológicas são em número de quatro: Fundamentação Observacional, Núcleo Estruturante, Organização do Método e Consolidação dos Resultados.

- Etapa Metodológica 1: Fundamentação Observacional
Na primeira etapa de trabalho, serão conduzidas atividades relacionadas à validação das observações dos artigos científicos e à sistematização das práticas de ensino. As ferramentas e métodos a serem utilizados dizem respeito a condução de uma revisão sistemática da literatura (RSL) e à mineração de repositórios de software.

É prevista a realização de duas RSLs (Xiao et al., 2017; Kitchenham, 2004). Em uma destas RSLs será levantada a proposição de ferramentas para programação concorrente e paralela. Como marco temporal, o início desta revisão bibliográfica deverá ser o ano de 1993, para coincidir com lançamento do site Top 500. Como complemento a esta pesquisa, serão buscadas informações sobre a popularidade de diferentes linguagens de programação com suporte à programação concorrente e paralela no período. A segunda RSL será relacionada à identificação de artigos documentando estudos de caso nos quais diferentes ferramentas de programação sejam comparadas em termos de desempenho para implementação de uma determinada aplicação. Esta segunda RSL deverá ser realizada sobre um período mais curto, 5 anos, e estará focada em veículos, periódicos e eventos, em que este tipo de experimento é usualmente registrado, como exemplo, eventos relacionados ao processamento de alto desempenho. Esta RSL também será complementada pela identificação de estudos de caso na indústria documentados em outras fontes, como páginas institucionais de empresas e em outros veículos não científicos de comunicação.

As atividades de mineração de repositórios de software devem permitir a organização de um banco de programas concorrentes e paralelos. A partir das informações deste banco serão tabulados observações sobre como os recursos de paralelismo estão sendo utilizados na prática. Deverão complementar este banco de programas pacotes com implementações de benchmarks populares no contexto do processamento paralelo. Um aspecto interessante no uso destes benchmarks é a possibilidade de obter a implementação da mesma aplicação em diferentes linguagens de programação.

Importante caracterizar que revisão sistemática da literatura e mineração de repositórios de software serão utilizados como ferramental no desenvolvimento deste projeto. Não serão tratados, portanto, como um tema relacionado à pesquisa a ser desenvolvida.

- Etapa Metodológica 2: Núcleo Estruturante
Nesta etapa, cujo início das atividades se sobreporá às atividades da etapa anterior, serão elegidas as ferramentas de programação que serão consideradas no desenvolvimento do projeto e definidos os critérios de avaliação dos recursos de programação das linguagens de programação em função das propriedades de expressividade, eficácia e eficiência. Como ponto de partida para definição destes critérios encontra-se o trabalho desenvolvido como tese de doutorado (Daniel, 2019) e com resultados parciais documentados em Daniel et al. (2023a, 2023b). No trabalho já desenvolvido, foi utilizado o modelo GQM -- Goal, Question, and Metric (Objetivo, Questão e Métrica), bastante popular na engenharia de software para sistematizar a análise, via utilização de métricas, para medir o progresso ou eficácia de um processo.

A literatura apresenta trabalhos em que são propostas abordagens para caracterização de linguagens de programação em termos quantitativos. Em Gorodnyaya et al. (2019) são apresentadas métricas clássicas para comparação de código, Linhas de Código (Lines of Codes -- LOC), Medida de Complexidade de Halstead (Halstead Complexity Metric -- HCM) e Métrica de Complexidade Ciclomática (Cyclomatic Complexity Metric -- CCM). Ainda assim, muitos trabalhos, como Bavota et al. (2016) e Henard et al. (2017) utilizam métricas próprias. Outros trabalhos ainda, relevantes para construção dos saberes associados a pesquisa proposta, como Alrawais et al. (2021) e Zeldovich et al. (2002), não empregam métricas, mas análises qualitativas realizada sobre o código produzido.

As métricas a serem propostas deverão partir de modelos consolidados na literatura, com aplicação sistematizada pelo uso do modelo GQM e focadas nas questões associadas à programação concorrente e paralela, dizendo respeito não apenas ao código dos programas, mas também a questões relacionadas ao desempenho. Espera-se instrumentalizar a obtenção destas métricas de forma a automatizar a coleta de informações a partir do banco de dados formado durante a etapa 1 dos trabalhos.

- Etapa Metodológica 3: Organização do Método
Nesta etapa será aplicada a extração das métricas dos casos de estudo presentes no banco de programas montados durante a etapa 1, gerando as informações organizadas pelo modelo GQM. Em paralelo a esta extração de informações, os próprios programas serão estudados de forma a classificá-los em modelos de concorrência, paralelismo de dados ou de tarefas, explorados e da natureza das aplicações.

- Etapa Metodológica 4: Consolidação dos Resultados
Nesta etapa final será feito o refino do método desenvolvido e definido o formato de sua apresentação, bem como documentados as ferramentas desenvolvidas para apoio à aplicação do método proposto.

3. Estratégia de captação de recursos
A metodologia considera que o projeto vai ser conduzido no contexto do grupo de pesquisa em que o proponente encontra-se vinculado. Assim, embora conduzidas pelo proponente, as atividades elencadas para as diferentes etapas de trabalho deverão envolver orientados em diferentes níveis, graduação, mestrado e doutorado para atendimento às necessidades de recursos humanos.

O proponente também se compromete, à ocasião em que editais forem abertos por órgãos de fomento, à solicitar verbas para apoiar o desenvolvimento das atividades.

4. Possibilidade de cooperações

O proponente participou de diversos editais em rede em nível nacional em temas relacionados a pesquisa apresentada neste projeto. É totalmente viável dar continuidade às cooperações já existentes com o desenvolvimento das atividades propostas. Durante o período de execução do projeto, o proponente avalia realizar período de estágio pós-doutoral em instituição no exterior.

5. Materiais e infraestrutura
O projeto apresentado não possui necessidades particulares de equipamentos. Poder computacional se fará necessário para realizar os processos automatizados para extração de métricas dos programas e, em complemento, são necessários postos de trabalho (computadores do tipo desktop) para os estudantes envolvidos. Estes equipamentos estão disponíveis nos laboratórios ocupados pelo grupo de pesquisa do proponente, captados em projetos anteriores. O proponente também possui acesso aos recursos de Grid 5000, uma infraestrutura em larga escala para processamento paralelo, via sua rede de relacionamentos.

6. Riscos ao desenvolvimento
O maior risco ao desenvolvimento do projeto está relacionado a composição da base de programas que for construída. É desejado que, para efeitos de comparação, seja possível obter implementações da mesma aplicação em diferentes ferramentas de programação. A utilização de pacotes de benchmark reconhecidos pela comunidade visa mitigar este risco.

Indicadores, Metas e Resultados

1. Indicadores

- Artigos científicos publicados em veículos de divulgação científica;
- Formação de alunos de graduação, mestrado e doutorado no contexto do projeto;
- Produção de material didático no domínio do problema.

2. Metas

Para atingir os objetivos traçados, as seguintes metas devem ser alcançadas. Estas metas encontram-se organizadas na sequência esperada de atendimento.

- Meta 1 Banco de estudos de caso. Identificar um conjunto de estudos de caso em ambientes acadêmicos e industriais nos quais o emprego da programação concorrente e paralela fez parte da solução. Elencar os estudos de caso de forma a compor cenários representativos dos estudos de caso identificados.
- Meta 2: Ferramentas de programação. Relacionar ferramentas de programação de interesse no contexto do projeto. Na lista de estudos de caso, emergirá uma compilação de ferramentas de programação efetivamente utilizadas. Entretanto, é possível que essa lista seja expandida para incluir outras ferramentas de programação, a fim de compreender por que não estão sendo exploradas e identificar situações em que o potencial de alguma ferramenta está subexplorado.
- Meta 3: Classificação dos recursos. Definir categorias para classificação de recursos de programação concorrente e paralela e elencar, nesta classificação, os recursos oferecidos pelas ferramentas de programação foco de interesse do projeto.
- Meta 4: Critérios de avaliação. Definir uma lista de critérios mensuráveis para avaliar a expressividade, eficácia e eficiência das ferramentas de programação concorrente e paralela. Criar um sistema de pontuação quantitativa baseado nos critérios definidos, que possa ser aplicado de maneira consistente a todas as ferramentas selecionadas.
- Meta 5: Coleta de dados. Aplicar os critérios de avaliação sobre as ferramentas selecionadas, considerando os estudos de caso selecionados e obter uma classificação das ferramentas em função dos resultados obtidos.
- Meta 6: Marcos temporais. Relacionar em uma linha temporal, a incorporação de avanços tecnológicos nas arquiteturas de computadores e o impacto do crescimento ao suporte ao paralelismo na construção de software concorrente e paralelo.
- Meta 7: Materiais instrucionais. Desenvolvimento de conteúdo específico sobre o tema para complementar o conteúdo programático previsto para disciplinas de linguagens de programação e programação concorrente e paralela em nível de graduação e pós-graduação. Composição de unidades independentes de tais conteúdos para publicização em eventos e escolas de informática para atendimento a amplo público.

3. Resultados esperados

São esperados resultados (i) que avancem o estado da arte no que diz respeito ao desenvolvimento de ferramentas para programação concorrente e paralela, (ii) que aumentem a produtividade do desenvolvimento de software paralelo, e (iii) que aperfeiçoem os métodos de formação de recursos humanos na área de programação concorrente e paralela.

Considerando o estado da arte, serão oferecidos parâmetros concretos para avaliar a usabilidade, em termos de expressividade, eficácia e eficiência, dos recursos para exploração de paralelismo oferecidos pelas ferramentas de programação avaliadas. Com isso, espera-se que os projetistas de novas ferramentas possam identificar os elementos que tornam recursos de programação pouco explorados, aperfeiçoando sua apresentação, ou mesmo propondo novos recursos. Ainda como contribuição ao estado da arte, os critérios apresentados favorecerão a apresentação de casos de estudo em que o desempenho de uma determinada aplicação em diferentes ferramentas de programação. Estes estudos de caso poderão basear, ao menos parte de, sua argumentação sobre os resultados considerando a avaliação dos recursos de programação apresentado.

No que diz respeito à produtividade, o método apresentado permitirá que os programadores possam selecionar a ferramenta de programação mais adequada ao seu projeto em função das características dos recursos por elas oferecidos. Esta seleção prévia se dará considerando o potencial de expressividade, eficácia e eficiência da ferramenta selecionada para implementação de sua aplicação. Em relação à formação de recursos humanos o resultado se dará pelo aperfeiçoamento da abordagem das questões relacionadas à programação concorrente e paralela em diferentes disciplinas dos cursos de graduação e pós-graduação na área da Computação. É imperativo que a formação de profissionais da área passem a considerar que as arquiteturas de hardware oferecem paralelismo em diferentes níveis e que estes diferentes níveis de paralelismo podem, e devem, ser explorados para qualificar o software produzido.

A materialização dos resultados previsto neste projeto se dará nos seguintes elementos: e
- Artigo Científico: RSL sobre trabalhos que relatam a avaliação do uso de ferramentas para programação concorrente e paralela na implementação de estudos de caso.
- Artigo Científico: Um estudo qualitativo e quantitativo dos projetos que exploram ferramentas para programação concorrente e paralela disponibilizados em repositórios de software.
- Artigo Científico: Proposição de uma ontologia representando as associações de conceitos entre ferramentas de programação, os recursos de programação concorrente e paralela por elas oferecidos.
- Artigo Científico: Apresentação do modelo GQM para extração de métricas para representação de programas e estudo de caso com os programas da base de programas.
- Artigo Científico: Apresentação do método desenvolvido para seleção de ferramenta de programação.
- Ferramenta: Programa de computador, tipo script, para automatizar a recuperação de projetos em repositório de software

Equipe do Projeto

NomeCH SemanalData inicialData final
CASSIANO TEIXEIRA PESSOA
EDUARDO SCHWANTZ
ENDERSON AVILA KRUGER
FELIPE DUARTE BARBEDO
GERSON GERALDO HOMRICH CAVALHEIRO57
JEAN PIERRE GROSS DE BRITO
JOANA DANTAS DE CASTRO BISNETA
JOAO PEDRO RODRIGUES LINARES
JOÃO ANTONIO NEVES SOARES
LUCAS BRAATZ ARAUJO
LUCIANI AQUINO QUEIROZ
MARCUS VINICIUS HERNANDES RODRIGUES SCHEBEK
YAGO MARTINS PINTOS

Página gerada em 21/10/2024 23:49:35 (consulta levou 0.159754s)