Propostas Submetidas MEI 2014/2015

DEI - FCTUC
Gerado a 2024-11-21 19:22:54 (Europe/Lisbon).
Voltar

Titulo Estágio

Native Code Generation for PKernel

Áreas de especialidade

Engenharia de Software

Local do Estágio

Coimbra

Enquadramento

Uma das peças centrais do produto Pulse chama-se PKernel ("Pulse Kernel"). Este módulo é um motor de Complex Event Processing (CEP) que permite fazer correlação e agregação de eventos em tempo real, gerando resultados de acordo com as especificações do utilizador. Associado ao motor existe uma linguagem chamada PQL (Pulse Query Language) que permite especificar que tratamento deve ser feito a estes eventos. Por exemplo, a seguinte query:

transactions_sec =
from transactions[10 min]
group by bank
select count()/(10*60)

gera em memória um dicionário em que para cada entrada a chave é um nome de um banco e o valor é o número de transações por segundo feitas por esse banco durante os últimos 10 minutos. Neste caso é utilizada uma janela móvel de 10 minutos para fazer o cálculo.

Atualmente, em termos de arquitetura, o compilador de PQL da Feedzai gera código Java, que é depois executado sobre a JVM em forma de bytecode. É nossa intenção passar a gerar código nativo.

Objetivo

O principal objectivo deste estágio é criar um nosso back-end para o compilador de PQL da Feedzai que permita traduzir as AST geradas pelo após a análise semântica do código diretamente para C++ e, posteriormente, código nativo. Isto permitirá um aumento substancial de desempenho do produto, assim como poupar memória na execução de queries continuas.

Para além disso, é necessário criar uma biblioteca run-time que faça a interligação entre as queries que irão executar nativamente e todo o ambiente de execução do motor Pulse (escrito em Java), incluindo a possibilidade de executar User Defined Functions (UDFs) atualmente já existentes. Ou seja, a plataforma terá de ter um módulo de "Interop" Java/C++ para o ambiente PQL.

Uma parte integrante deste estágio será a optimização do sistema desenvolvido e a avaliação da respectiva performance. É objectivo explícito do estágio tentar publicar um artigo com os resultados da investigaçãoo a realizar.

Em termos tecnológicos, o PKernel está implementado em Scala (front-end/compilador), sendo o backend/runtime implementado em Java. Os candidatos a este estágio deverão ter conhecimentos fortes de:
* Scala
* Java
* C/C++
* Compiladores/Linguagens de Programação

Ao mesmo tempo, todo o design do PKernel é orientado à performance e ao processamento de dados em muito grande escala. Como tal, conhecimentos de computação de alto desempenho e programação concorrente são também desejáveis.

Plano de Trabalhos - Semestre 1

Objectivos:
Durante este semestre existem dois objectivos principais:
- Integrar o estagiário na estrutura do PKernel, código, e a forma como este processa dados
- Prototipar o sistema a desenvolver que permite a tradução de PQL para C/C++

Abordagem:
O PKernel é um módulo de software bastante complexo no qual está implementado: um compilador, um ambiente de execução e um gerador de código nativo. Para garantir o sucesso do projeto é importante garantir que o estagiário percebe a estrutura interna do módulo, como funciona, e como pode ser estendido. Este semestre tem dois objectivos principais. Por um lado, integrar o estagiário no funcionamento deste módulo. Para isso ser-lhe-á pedido que numa primeira fase estude o código existente e, numa segunda fase, a estenda com funcionalidade simples. Assim, pretende-se que no final do primeiro semestre esteja em condições de poder implementar o suporte necessário. Ao mesmo tempo, durante este semestre, será desenvolvido um pequeno protótipo que permitirá traduzir queries PQL simples para código C/C++.

Será adoptada uma abordagem iterativa de desenvolvimento, baseada em Scrum, em que em cada ciclo de desenvolvimento (duas a três semanas) serão definidas experiências ou funcionalidades a implementar, assim como procedimentos de avaliação. Existirão reuniões semanais de acompanhamento do trabalho.

Atividades a desenvolver durante o semestre:
- Integração na empresa e familiarização com o produto Pulse e com o PKernel.
- Estudo detalhado do módulo PKernel e do seu funcionamento
- Extensão do PKernel com novas funcionalidades de complexidade média/reduzida
- Prototipagem do sistema a implementar
- Escrita do relatório intermédio de estágio

Plano de Trabalhos - Semestre 2

Objectivo:
O principal objectivo deste semestre é implementar o backend do sistema que permite tradução de código PQL para C/C++ assim com da biblioteca de runtime que o suportará.

Abordagem:
Será adoptada uma abordagem iterativa de desenvolvimento, baseada em Scrum, em que em cada ciclo de desenvolvimento (duas a três semanas) serão definidas experiências ou funcionalidades a implementar, assim como procedimentos de avaliação. Existirão reuniões semanais de acompanhamento do trabalho.

Atividades a desenvolver durante o semestre:
- Implementação do backend de tradução para código C/C++ e deste para código nativo
- Criação de workbench de testes para a linguagem definida
- Avaliação e optimização de performance do sistema
- Escrita do relatório de estágio

Condições

Estágio remunerado.

Observações

É possível encontrar mais informação sobre o produto e a empresa nos seguintes link: http://www.feedzai.com

Orientador

Eng. Ricardo Ferreira
ricardo.ferreira@feedzai.com 📩