Nome do Projeto
Memória Transacional Adaptativa para Arquiteturas Heterogêneas
Ênfase
Pesquisa
Data inicial - Data final
10/11/2022 - 10/11/2025
Unidade de Origem
Coordenador Atual
Área CNPq
Ciências Exatas e da Terra
Resumo
Este projeto de pesquisa é uma prorrogação do projeto "Memória Transacional Adaptativa para Arquiteturas Heterogêneas" (código 10198). Este projeto tem como objetivo geral investigar a abstração de Memórias Transacionais, que foi inicialmente desenvolvida para arquiteturas UMA, em outras arquiteturas de hardware. Mais precisamente, nesta etapa do projeto, pretende-se investigar Memórias Transacionais em arquiteturas NUMA e sistemas distribuídos. A primeira frente de pesquisa tem por objetivo encontrar o melhor mapeamento possível de threads e dados em arquiteturas NUMA para programas concorrentes que usam a abstração de Memórias Transacionais. Para esse fim, pretende-se usar algoritmos de Machine Learning que aprendam com o comportamento de programas de benchmark, para que possam prever um melhor mapeamento para novos programas. A segunda frente de pesquisa visa a execução da abstração de Memórias Transacionais em ambientes distribuídos. Para isso, pretende-se investigar abstrações a nível de linguagem e a nível de execução de programas, fornecendo um algoritmo distribuído para a execução de programas baseados em Memórias Transacionais. A nível de linguagem, pretende-se desenvolver primitivas que permitam que o programador possa expressar transações que utilizam áreas de memória remotas, i.e., que estão localizadas em outro espaço de endereçamento (máquina remota). A nível de execução, pretende-se adaptar algoritmos clássicos de Memórias Transacionais para ambientes distribuídos.

Objetivo Geral

Este projeto de pesquisa é uma prorrogação do projeto "Memória Transacional Adaptativa para Arquiteturas Heterogêneas" (código 10198). O objetivo geral do projeto é investigar a abstração chamada Memórias Transacionais em diferentes arquiteturas de hardware, propondo soluções a nível de linguagem e sistema de tempo de execução para a execução eficiente dessa abstração nas diferentes arquiteturas.

Esta prorrogação tem por objetivo continuar o projeto, atacando duas frentes novas de investigação: 1) Melhorar o desempenho de Memórias Transacionais em arquiteturas NUMA através da escolha de políticas apropriadas de thread e data mapping para as aplicações 2) Investigar o uso da abstração de Memórias Transacionais em ambientes distribuídos.

A primeira frente de pesquisa tem por objetivo encontrar o melhor mapeamento possível de threads e dados em arquiteturas NUMA para programas concorrentes que usam a abstração de Memórias Transacionais. Para esse fim, pretende-se usar algoritmos de Machine Learning que aprendam com o comportamento de programas de benchmark, para que possam prever um melhor mapeamento para novos programas. Espera-se para esta etapa do trabalho o desenvolvimento de dois artefatos de software. O primeiro seria uma ferramenta que realize o mapeamento de threads e dados através da coleta off-line de dados da execução das aplicações. Nesse caso, os programas seriam executados uma vez e dados coletados na execução seriam passados para a função gerada pelo processo de Machine Learning para que esta função encontre o melhor mapeamento de threads/dados para a nova aplicação. O segundo artefato de software seria baseado no uso on-line desse recurso. O objetivo é que as aplicações tenham duas fases, uma de aquecimento, na qual dados são coletados e uma segunda de mapeamento, no qual a função desenvolvida com Machine Learning é usada para decidir se um novo mapeamento de threads/dados é necessário.

A segunda frente de pesquisa visa a execução da abstração de Memórias Transacionais em ambientes distribuídos. Para isso, pretende-se investigar abstrações a nível de linguagem e a nível de execução de programas, fornecendo um algoritmo distribuído para a execução de programas baseados em Memórias Transacionais. A nível de linguagem, pretende-se desenvolver primitivas que permitam que o programador possa expressar transações que utilizam áreas de memória remotas, i.e., que estão localizadas em outro espaço de endereçamento (máquina remota). A nível de execução, pretende-se adaptar algoritmos clássicos de Memórias Transacionais para ambientes distribuídos.

Justificativa

Observa-se hoje a tendência de empresas desenvolvedoras de processadores pelo inclusão de vários núcleos de processamento em suas arquiteturas. Dessa forma, processadores multi-core aparecem em diversos sistemas computacionais diferentes como por exemplo, notebooks, celulares, servidores NUMA, clusters, etc. Para que os programas usufruam da capacidade de processamento dos processadores multi-core, é necessário que esses aplicativos sejam programados de modo a utilizar os processadores disponíveis, ou seja, os programas devem possuir várias linhas de execução, ou threads. Programação de sistemas paralelos/concorrentes é complicada e propensa a erros.

Tradicionalmente processadores multicore são programados usando um modelo de memória compartilhada. Nesse modelo temos várias linhas de execução que se comunicam através de uma área de memória em comum. Para evitar que threads interfiram de maneira errada no trabalho de outras threads, as linguagens fornecem mecanismos de sincronização como por exemplo locks, ou mutexes. Esse modelo de programação é difícil e propenso a erros. A revolução
causada pelas máquinas multi-core é na verdade uma revolução na área de software e não de
hardware. Para que se possa desenvolver software confiável para esse tipo de máquina é necessário
que se encontrem maneiras mais fáceis de se programar esses processadores.
Uma alternativa para a programação concorrente que vem chamando a atenção é o mecanismo de
memórias transacionais. Na programação usando memórias transacionais, os acessos à memória
são feitos através de transações parecidas com as transações de banco de dados. Se não existiu
nenhum acesso concorrente a uma área crítica de memória então a transação pode ser efetivada e
as mudanças no estado do programa são gravadas na memória. Caso contrário a transação é
abortada. Memórias transacionais permitem programação concorrente sem os vários problemas
relacionados com o uso de bloqueios. Transações não conseguem ver o resultado intermediário de
outras transações: dessa maneira, o resultado de várias transações concorrentes é o mesmo
resultado da execução dessas threads em alguma ordem seqüencial, o que permite a eliminação do
uso bloqueios. Essas características permitem o desenvolvimento de código mais limpo e fácil de
entender.

Algoritmos para implementar a abstração de memórias transacionais são geralmente desenvolvidos
levando em consideração arquiteturas UMA (Uniform memory access) na qual todos os
processadores tem um tempo de acesso uniforme à memória principal. Porém, hoje em
dia existem várias arquiteturas diferentes baseadas em multi-cores que também necessitam
abstrações de alto nível para o desenvolvimento de programas, e.g., NUMAs, clusters, GPUs etc.
Dessa forma, o objetivo deste trabalho é desenvolver um sistema de memórias transacionais
adaptativo, que dependendo da arquitetura paralela usada, modifique o algoritmo transacional para
melhor explorar os recursos do(s) dispositivo(s).

Metodologia

A metodologias a ser empregada para as duas frentes de trabalho segue as seguintes ações:

1) Thread e data mapping para arquiteturas NUMA
Ações:
1.1 Estudo sobre técnicas de Machine Learning
1.2 Estudo sobre técnicas de Machine Learning aplicadas a Memórias Transacionais
1.3 Estudo sobre os benchmarks disponíveis para Memórias Transacionais
1.4 Estudo sobre artigos de thread e data mapping usando Machine Learning para encontrar
quais métricas são usadas
1.5 Coleta de métricas dos benchmarks disponíveis
1.6 Escolha dos algoritmos de Machine Learning a serem testados
1.7 Treinamento dos algoritmos
1.8 Desenvolvimento da ferramenta off-line que usa a função gerada por machine learning para fazer o mapeamento de threads e dados
1.9 Teste de programas para que se possa verificar a viabilidade de um mapeamento on-line
1.10 Novo treinamento das técnicas de Machine Learning para o mapeamento on-line
1.11 Desenvolvimento da ferramenta de mapeamento de threads e dados on-line


2) Memória Transacional Distribuída
1.1 Estudo dos algoritmos de memória transacional para arquiteturas NUMA e sistemas distribuídos
1.2 Desenvolvimento de uma proposta de interface para transações distribuídas
1.3 Proposta de um algoritmo para transações distribuídas
1.4 Prototipação da ferramenta que incluí a proposta de interface e de algoritmo
1.5 Desenvolvimento de casos de teste
1.6 Teste da ferramenta
1.7 Modificação da ferramenta de acordo com os resultados dos testes
1.8 Desenvolvimento de gerenciadores de contenção para o novo algoritmo distribuído
1.9 Teste dos novos gerenciadores de contenção
1.10 Desenvolvimento de um benchmark maior para teste da ferramenta

Indicadores, Metas e Resultados

Meta 1
Revisão geral da área, incluindo técnicas de Machine Learning aplicadas a mapeamento de threads/dados,
além de técnicas de machine learning aplicadas a memórias transacionais
Resultado/Indicadores: Artigo survey da revisão bibliográfica

Meta 2
Coleta de benchmarks e treinamento de técnicas de machine learning com os dados colhidos na execução das
aplicações
Resultados/Indicadores: github contendo todos os esperimentos

Meta 3
Desenvolvimento de mapeamento de threads e dados de forma off-line
Resultados/indicadores: Ferramenta de código aberto, disponível para a comunidade. Artigo científico sobre o mapeamento off-line

Meta 4
Desenvolvimento do mapeamento on-line
Resultados/indicadores: Ferramenta de código aberto, disponível para a comunidade. Artigo científico sobre o mapeamento on-line

Meta 5
Revisão geral da área de memórias transacionais e sistemas distribuídos
Resultados/indicadores: Artigo survey da revisão bibliográfica

Meta 6
Proposta da interface e sistema de execução de memórias transacionais distribuídas
Resultados/indicadores: artigo científico explicando a proposta

Meta 7
Implementação do protótipo de sistema de transações distribuídas
Resultados/indicadores: Ferramenta com código aberto e artigo científico sobre a ferramenta

Meta 8
Implementação de gerenciadores de contenção
Resultados/Indicadores: Gerenciadores de contenção disponibilizados como software livre e artigo científico com a descrição dos resultados

Meta 9
Implementação de benchmark real usando o sistema transacional distribuído
Resultados/Indicadores: Benchmark disponibilizado como software livre e artigo científico

Equipe do Projeto

NomeCH SemanalData inicialData final
ANDRE RAUBER DU BOIS15
FREDERICO PEIXOTO ANTUNES
GERSON GERALDO HOMRICH CAVALHEIRO4
JERONIMO DA CUNHA RAMOS
RAFAEL RUTZ DOS SANTOS
Tiago Perlin

Página gerada em 29/03/2024 11:14:38 (consulta levou 0.138529s)