Memórias Transacionais Izumi Oniki Chiquito Rafael Auler
Motivação Redução do período de clock melhora o desempenho, mas também aumenta a dissipação de energia Surgimento de sistemas multi-core Necessidade de executar trechos de código simultaneamente (paralelismo)
Motivação Modelo multi-thread uso de bloqueios (locks) Difícil composabilidade Programador pode gerar longos trechos seriais que prejudicam desempenho paralelo Instabilidades Deadlocks Convoying Inversão de prioridade
Motivação Memória transacional (transactional memory – TM) como alternativa de programação concorrente Utiliza o conceito de transações Detecta conflitos e verifica necessidade de re-executar trechos de código Composabilidade Responsabilidade de sincronização é completamente do sistema
Conceitos Básicos Transação: uma seqüência de instruções que impõe modificações no sistema baseada no estado atual Isolamento (seriabilidade) Atomicidade Resultados: Commit ou Abort
Interface programador-sistema de memória transacional Bloco atômico bool mutexX, mutexY; exemploLock (x, y) { lock(mutexX); lock(mutexY); x = x + y; y = 0; unlock(mutexX); unlock(mutexY); } exemploAtomic (x, y) { atomic { x = x + y; y = 0; }
Interface programador-sistema de memória transacional Retry orElse atomic { if (tamanhoFila > 0) fila.remover(); else retry; } atomic { { filaPref.atender(); } orElse { filaRegular.atender(); } }
Desafios de Implementação Versionamento de dados Versionamento adiantado undo log Versionamento tardio (atrasado) buffer local Detecção de conflito Detecção adiantada Detecção tardia
Desafios de Implementação Detecção de conflito adiantada Pessimista Problema em potencial: livelock Escreve X Lê X T1 T2 T2 aguarda para verificar se T1 irá efetivar ou abortar Lê X Escreve X T1 T2 reinicia efetivação
Desafios de Implementação Detecção de conflito atrasada Problema em potencial: starvation Escreve X Lê X T1 T2 efetivação reinicia
Desafios de Implementação Aninhamento de transações Flattening Aninhamento fechado (closed nesting) Dados separados para cada transação Aninhamento aberto (open nesting)
Modelos de Memória Transacional Hardware transaction memory (HTM) Software transaction memory (STM) Modelos híbridos
Memória Transacional de Herlihy e Moss (HMTM) 1993 Memória transacional deve ser rápida apoio do hardware Alterar a arquitetura do processador para incluir novas instruções Cache transacional Transações não são explicitamente definidas Resolução de conflitos adiantada e versionamento tardio Limitações de recursos transacionais e tempo de vida das transações (trocas de contexto)
Software Transactional Memory (STM) 1997 – Shavit e Toitou Eliminação dos problemas relacionados à falta de recursos do hardware ou troca de contexto Possibilidade de melhor explorar a semântica de programação Portabilidade Exigência cara: transações estáticas
Unbounded Transactional Memory (UTM) 2005 Desempenho do hardware, eliminando restrições do HMTM Utópico exige muitas modificações na arquitetura Virtualização do tempo e do espaço Detecção de conflitos adiantada, versionamento adiantado e flattening
Large Transaction Memory (LTM) 2005 Modelo menos exigente Não virtualiza o tempo Não permite troca de transações entre processadores Versionamento tardio
Virtual Transaction Memory (VTM) 2005 Abordagem semelhante a UTM Virtualização do espaço e do tempo Versionamento tardio
LogTM 2006 Exemplo de bom desempenho em versionamento adiantado Ponteiro para log das modificações Escritas diretas na memória comum Software responsável pela recuperação Duas versões Flat LogTM Nested LogTM Suporte a aninhamento aberto e fechado
Desempenho igual ou superior a VTM e modelos mais flexíveis Unbounded Page-Based Transactional Memory (PTM) Extended Transactional Memory (XTM) 2006 Alocação de páginas na memória, aproveitando a memória virtual, quando atingida a limitação do hardware Desempenho igual ou superior a VTM e modelos mais flexíveis Virtualização de aninhamento XTM adota versionamento e detecção de conflitos tardios PTM adota o oposto ou uma abordagem híbrida quanto ao versionamento
Memória Transacional Híbrida Combinam HTM e STM Estratégia geral: Executar transações em hardware maior velocidade Reiniciar transações em software combate problema da falta de recursos
Resumo Paralelismo/Programação concorrente Uso de transações Abstração de programação Dificuldades de implementação Modelos de memórias transacionais
Conclusão Uso de transações para resolver problemas de concorrência é eficiente A abstração facilita a programação Memórias transacionais prometem ao software o melhor aproveitamento dos processadores de vários núcleos Importante área de pesquisa