Grupo de pesquisa

Computação Simultânea

A programação simultânea ganhou popularidade nas últimas décadas. Cada linguagem e plataforma fornece primitivas correspondentes, que se tornam cada vez mais difíceis de usar de forma eficiente com a crescente complexidade do sistema, como ter vários nós NUMA, bem como com relaxamentos de modelos de memória. Na prática, várias questões importantes surgem com isso. Como construir algoritmos concorrentes eficientes hoje em dia? Qual é a melhor compensação entre garantias de progresso, eficiência e justiça? Como verificar se todos esses algoritmos estão corretos? Como compará-los? Embora algumas das perguntas sejam parcialmente respondidas no mundo acadêmico, muitos dos problemas práticos ainda estão em aberto. Nosso foco principal é responder a essas perguntas, fornecendo soluções praticamente razoáveis e teoricamente valiosas, bem como ferramentas de alta qualidade que podem ajudar outros pesquisadores e desenvolvedores no campo da simultaneidade.

Nossos tópicos de interesse incluem:

  • Algoritmos e estruturas de dados simultâneos
  • Memória não volátil (NVM)
  • Teste e verificação
  • Análise de desempenho, depuração e otimização
  • Linguagens e modelos de programação paralela
  • Recuperação de memória

Veja a lista completa de publicações aqui.

Principais projetos:

Primitivas de sincronização e comunicação para Kotlin Coroutines

A programação simultânea tradicional envolve a manipulação de um estado mutável compartilhado. Uma alternativa a esse estilo de programação é o modelo de processos sequenciais de comunicação (CSP), que compartilha dados por meio de comunicação explícita. A Kotlin Coroutines é uma biblioteca que traz esse modelo para a linguagem Kotlin, em que os processos são representados por meio de coroutines (threads leves). Dessa forma, existem várias abstrações necessárias para a comunicação e sincronização entre as coroutines, começando com os bem conhecidos bloqueios e semáforos e terminando com canais — uma estrutura especial produtor-consumidor para transferência de dados entre coroutines. Esse projeto é dedicado a desenvolver primitivos eficientes e adotá-los para Kotlin Coroutines.
https://github.com/Kotlin/kotlinx.coroutines

Lincheck: simultaneidade de testes na JVM

O Lincheck é uma ferramenta prática para testar algoritmos simultâneos em linguagens baseadas em JVM, que oferece suporte a testes de estresse e verificação de modelo limitado. Uma das principais vantagens do Lincheck em relação às ferramentas de teste populares, como o JCStress, é que ele fornece uma maneira declarativa de escrever testes simultâneos, especificando todas as operações a serem examinadas, suas propriedades de correção e o número de invocações a serem usadas para cada cenário. A grosso modo, o Lincheck gera uma série de cenários simultâneos, executa-os no modo de teste de estresse ou de verificação de modelo e verifica se existe alguma execução sequencial que possa explicar os resultados que satisfazem a propriedade de correção especificada. Além dos recursos acima, o Lincheck é a primeira ferramenta de teste a oferecer suporte à semântica de estrutura de dados relaxada, designs de estrutura de dados dual populares em implementações produtor-consumidor e coroutines, bem como estruturas de dados duráveis, projetadas para NVRAM.
https://github.com/Kotlin/kotlinx-lincheck

Algoritmos de gráficos TConcurrent

O processamento paralelo de gráficos é um tópico fundamental e bem estudado no mundo acadêmico, tanto no aspecto teórico quanto prático. No entanto, algumas aplicações, como análise de redes sociais e compiladores, requerem que esses algoritmos estejam online, e portanto, que sejam simultâneos. Esse projeto visa construir algoritmos simultâneos praticamente eficientes para diferentes aspectos do processamento de gráficos, incluindo o uso de múltiplas filas como escalonadores de prioridade para alguns dos algoritmos, ou problemas de conectividade dinâmica online sob inserção e exclusão de arestas. Hoje em dia, a maioria das plataformas de hardware possui vários soquetes NUMA e, por isso, é essencial tornar todos esses algoritmos compatíveis com NUMA.

Estágio de estudantes

Estamos contratando estagiários o ano todo. O candidato ideal deve ter uma sólida formação em CS ou Matemática e algum conhecimento de programação simultânea. Envie um e-mail para Nikita Koval para obter detalhes em nikita.koval@jetbrains.com.

Membros do Grupo

Nikita Koval
Nikita Koval
Chefe de Laboratório/Grupo de Pesquisa
Alexander Fedorov
Alexander Fedorov
Pesquisador
Dmitry Khalanskiy
Dmitry Khalanskiy
Pesquisador
Maria Sokolova
Maria Sokolova
Pesquisador