Rui Carlos Gonçalves

Investigador na área de Computação Paralela e Sistemas Distribuídos. Licenciou-se em Matemática e Ciências de Computação na Universidade do Minho em 2008, e obteve o Doutoramento em Informática pelas Universidades do Minho, Aveiro e Porto em 2015.

LinkedIn GitHub

Paralelização de Aplicações com OpenMP

Introdução

O OpenMP é uma norma/API para programação paralela em sistemas de memória partilhada para as linguagens de programação C, C++ e Fortran, desenvolvida e mantida pelo OpenMP Architecture Review Board. Disponibiliza uma alternativa simples e portável a soluções de mais baixo nível como POSIX Threads, e é suportado por vários compiladores como o GCC ou ICC, e deverá chegar em breve ao Clang/LLVM.

O OpenMP distingue-se de outras soluções para suporte a paralelismo em memória partilhada pelo seu nível de abstracção, na medida em que o essencial das suas funcionalidades é obtido através de um conjunto de directivas do compilador que especificam de forma declarativa como é que diferentes partes do código podem ser executadas em paralelo. Adicionalmente, um compilador que não suporte OpenMP pode simplesmente ignorar estas directivas, continuando a aplicação a funcionar correctamente (embora de forma sequencial). Contudo, aplicações mais complexas podem também necessitar de chamadas a funções de mais baixo nível (disponibilizados pela API do OpenMP), e que tornam a compilação da aplicação dependente do OpenMP.

Continuar a ler

Programação Concorrente em Ambientes UNIX

Introdução

Nos últimos tempos os processadores chegaram a um ponto onde se tornou praticamente impossível aumentar a sua frequência, de modo a que a solução foi passar para as arquitecturas multi-core. No entanto, nesta abordagem os ganhos não são tão lineares como podem parecer, i.e., duplicar o número de núcleos não significa duplicar a velocidade das aplicações. Isto porque se a aplicação não for projectada para este tipo de arquitectura, só irá fazer uso de um dos núcleos.

Neste artigo será abordada uma forma de responder a esta situação (não necessariamente a melhor). Assim, serão abordadas algumas system calls disponíveis em ambientes UNIX, para criação e manutenção de processos, bem como para a comunicação entre eles. Será usada a linguagem C.

Continuar a ler