Prévia do material em texto
Desenvolvimento de aplicações com OpenMP Exercícios 1. Para o desenvolvimento de programas paralelos, inicialmente, o desenvolvedor determina como será o programa que vai ser desenvolvido, incluindo entradas e saídas. Os algoritmos são projetados, determinando-se a maneira como o trabalho será distribuído ou decomposto nos multiprocessadores, sendo, então, os algoritmos implementados no programa ou código da aplicação. O OpenMP é um modelo de implementação que suporta algoritmos paralelos, sendo que é especialmente projetado para multiprocessadores de memória compartilhada. A respeito do OpenMP e do programa paralelo, analise as afirmativas a seguir: I. Um programa paralelo efetuado em multiprocessador de memória compartilhada tem diversos threads. II. O OpenMP é uma linguagem de programação que tem a função de executar o trabalho sem os threads. III. O thread é um elemento de tempo de execução, que pode executar, de forma independente, diversas instruções. IV. O OpenMP é uma API que organiza os acessos e dados compartilhados, conforme a necessidade. Assinale a alternativa que indica apenas as afirmativas corretas: Você acertou! C. I, III e IV. Um programa paralelo que é executado em multiprocessador de memória compartilhada geralmente tem diversos threads. Um thread é uma entidade de tempo de execução, que pode executar, de forma independente, um fluxo de instruções. A quantidade desses threads pode variar durante a execução do programa, sendo que cada um é executado em um núcleo lógico. O OpenMP não é uma linguagem de programação, mas uma API. Ele atua juntamente com o Fortran padrão ou C/C++ para especificar a maneira que o trabalho deve ser compartilhado entre threads que serão executados nos diferentes processadores ou núcleos, assim como ordenar os acessos e dados que são compartilhados, conforme a necessidade. 2. O OpenMP suporta a classificação de programas executados por meio de um conjunto de threads. Existem três tipos de extensões de linguagem no OpenMP: estruturas de controle paralelo, ambiente de comunicação e dados e sincronização. A respeito dessas três categorias de linguagem no OpenMP, considere as seguintes afirmações e classifique-as em verdadeiras (V) ou falsas (F): ( ) No OpenMP, são usados três categorias de construções, que fazem o controle do paralelismo. ( ) As estruturas de controle paralelo oferecem controle para executar um conjunto de threads. ( ) Os programas OpenMP começam com, no mínimo, três threads de controle de execução. ( ) A sincronização tem a função de organizar a execução dos threads em um programa paralelo. Assinale a alternativa que indica a sequência correta: Você acertou! A. F – V – F – V. No OpenMP, são usados dois tipos de construções que realizam o controle do paralelismo. O primeiro serve para fornecer uma diretiva para a criação de vários threads de execução. No segundo, são fornecidas construções que dividem o trabalho entre os conjuntos de threads paralelos. As estruturas de controle são construções que têm a responsabilidade de modificar o fluxo de controle de um programa. Já as estruturas de controle paralelas são construções que iniciam novos threads ou fornecem controle para a execução de outro conjunto de threads. Os programas OpenMP iniciam com apenas um thread de controle, com um contexto associado de execução ou ambiente de dados. Sincronização é o mecanismo que coordena a execução de diversos threads e um programa paralelo, evitando, assim, conflitos. São dois os tipos de sincronização mais comuns: exclusão mútua e de eventos. 3. O OpenMP usa diretivas de compilador para especificar e controlar a paralelização, juntamente com funções de tempo de execução e variáveis de ambiente. O desenvolvedor deve identificar o paralelismo, para que sejam inseridas as estruturas de controle apropriadas ao programa, sendo elas as diretivas. A respeito das diretivas, analise as seguintes afirmativas: I. A diretiva em C/C++ vai iniciar com !$opm, sendo vista como uma string de comentário normal pelo compilador. II. A diretiva em Fortran sempre começará com #pragma omp, sendo que o pragma diz respeito à linguagem regular. III. A diretiva iniciará em #pragma omp em C/C++, e, quando o compilador não suporta OpenMP, o pragma é ignorado. Assinale a alternativa que indica apenas as afirmativas corretas: Você acertou! E. Apenas a III. A diretiva em C/C++ sempre inicia em #pragma omp, sendo que esse pragma diz respeito à linguagem regular, que, quando não é reconhecida pelo compilador, é ignorada. Isso pode acontecer devido ao compilador não suportar OpenMP, se ocorrer erro de digitação ou quando a fonte não estiver compilada com opção para habilitar reconhecimento das diretivas. A diretiva em Fortran sempre inicia com !$opm, sendo que o compilador a reconhece como uma string de comentário normal, a menos que seja usada uma opção específica para instruir o compilador a reconhecer a palavra-chave especial omp, gerando, assim, o código OpenMP correspondente. 4. Para usar OpenMP, é preciso que sejam adicionadas diretivas ao código, com o objetivo de gerar os threads e especificar onde deverá acontecer a paralelização. É necessário também ser determinada a quantidade de threads que devem ser usadas em tempo de execução. Ao serem utilizadas as diretivas, em C/C++ ou em Fortran, o código não será violado em uma portabilidade, porque a fonte compila com o OpenMP habilitado ou não. A respeito desse processo, considere as seguintes afirmações e classifique-as em verdadeiras (V) ou falsas (F): ( ) Quando a fonte é compilada com o OpenMP habilitado, é assegurada a macro_OPENMP, a fim de ser definida em C/C++. ( ) Para tratar da utilização de funções de tempo de execução em Fortran, é possível ser utilizada a compilação condicional. ( ) Com o uso das diretivas, os compiladores conseguem ter a total visibilidade do código paralelo, favorecendo otimizações. Assinale a alternativa que indica a sequência correta: Você acertou! B. V – V – V Tanto em C/C++ como em Fortran, com o uso das diretivas, o código não será violado em uma portabilidade, já que a fonte compila com o OpenMP habilitado ou não. Quando a fonte é compilada com o OpenMP habilitado, a macro_OPENMP é garantida, a fim de que seja determinada em C/C++, sendo definida para a data de lançamento da versão OpenMP que o compilador suporta. Para lidar com a utilização de funções de tempo de execução em Fortran, poderá ser utilizada a compilação condicional, que resulta na substituição da cadeia de caracter !$ por dois espaços, se a fonte for compilada com OpenMP habilitado. Caso o OpenMP esteja desabilitado, isso será ignorado e considerado um comentário de idioma. Um dos benefícios da utilização de diretivas é a visibilidade do código paralelo por inteiro pelos compiladores, o que facilita as otimizações e as emissões de mensagens de aviso. 5. As aplicações paralelizadas OpenMP começam como uma aplicação serial, para depois serem instruídas por meio de código pelo programador. Então, múltiplos threads são gerados, podendo ser executados em núcleos separados ao mesmo tempo. A respeito das vantagens e desvantagens do uso da API OpenMP, assinale a alternativa correta: Você acertou! E. Uma das vantagens é que os códigos OpenMP e não OpenMP poderão fazer uso do mesmo código para compilação. O uso da API OpenMP tem diversas vantagens, com destaque para as seguintes: • é suportada por uma grande variedade de arquiteturas multicore de memória compartilhada e aceleradores; • os códigos OpenMP e não OpenMP podem fazer uso do mesmo código para compilação; • os programas são muito eficientes, já que múltiplos threads podem compartilhar dados da memória; • necessita de poucas modificações para paralelização de código já existente. O uso da API OpenMP também apresenta algumas desvantagens, que são: • serlimitada aos recursos de um nó único de computação; • ser capaz de gerar erros difíceis de depurar; • escalabilidade limitada pela arquitetura da memória. Desenvolvimento de aplicações com OpenMP Exercícios