Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
Seções paralelas são usadas para distribuir o trabalho de blocos de códigos entre os threads. Cada thread executa uma seção de código diferente. Seções podem ser abertas dentro de regiões paralelas usando a seguinte sintaxe:
Ao final da região omp sections, o master thread espera que todos os outros threads terminem suas seções antes de continuar a execução do código. Esta sincronização implícita pode ser evitada com o uso da clausula nowait. Cada bloco estruturado deve ser precedido pela diretiva omp section, com exceção do primeiro bloco, para o qual a diretiva omp section é opcional. Por exemplo, estudemos o seguinte código.
Neste código, a primeira thread disponível executa o Bloco 1, a segunda thread executa o Bloco 2 e a terceira thread executa o Bloco 3. A quarta thread não executa nada, pois não há mais blocos de código disponíveis. A execução dos blocos de código é feita em paralelo, ou seja, as threads podem executar os blocos de código ao mesmo tempo.
A diretiva omp single é usada para indicar que um bloco de código deve ser executado por apenas um thread. Ela pode ser usada dentro de regiões paralelas empregando a seguinte sintaxe:
A primeira thread que chegar à diretiva omp single executa o bloco de código (não necessariamente a master thread). Ao final da região single ocorre uma sincronização implícita entre todas as threads. A sincronização pode ser evitada com o uso da cláusula nowait.
O seguinte código é uma implementação OpenMP/C++ do método de Jacobi para resolver um sistema linear . Em cada iteração, a distribuição do laço nas linhas é feita com a diretiva omp for. A cada iteração, as threads devem esperar até que todas tenham terminado a iteração anterior. A verificação do critério de parada é feita com a diretiva omp single. Verifique!
A diretiva omp master é usada para indicar que um bloco de código deve ser executado apenas pela master thread. Ela pode ser usada dentro de regiões paralelas empregando a seguinte sintaxe:
Não há sincronização implícita no início ou final dessa região.
O seguinte código é uma implementação OpenMP/C++ do método de Euler explícito para a solução de diferenças finitas da equação do calor
(2.6) |
no domínio , com condição inicial
(2.7) |
e condições de contorno de Dirichlet homogêneas. O domínio é discretizado em passos no tempo e passos no espaço.
Verifique! A solução analítica do problema de calor acima é
(2.8) |
Desenvolva um código OpenMP/C++ para computar a solução de diferenças finitas do seguinte problema da onda
(2.9) | |||
(2.10) | |||
(2.11) | |||
(2.12) |
Use a diretiva omp master para que a master thread controle o armazenamento, em arquivo, de soluções discretas no tempo. Dica: a solução analítica deste problema é
(2.13) |
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.
Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
Seções paralelas são usadas para distribuir o trabalho de blocos de códigos entre os threads. Cada thread executa uma seção de código diferente. Seções podem ser abertas dentro de regiões paralelas usando a seguinte sintaxe:
Ao final da região omp sections, o master thread espera que todos os outros threads terminem suas seções antes de continuar a execução do código. Esta sincronização implícita pode ser evitada com o uso da clausula nowait. Cada bloco estruturado deve ser precedido pela diretiva omp section, com exceção do primeiro bloco, para o qual a diretiva omp section é opcional. Por exemplo, estudemos o seguinte código.
Neste código, a primeira thread disponível executa o Bloco 1, a segunda thread executa o Bloco 2 e a terceira thread executa o Bloco 3. A quarta thread não executa nada, pois não há mais blocos de código disponíveis. A execução dos blocos de código é feita em paralelo, ou seja, as threads podem executar os blocos de código ao mesmo tempo.
A diretiva omp single é usada para indicar que um bloco de código deve ser executado por apenas um thread. Ela pode ser usada dentro de regiões paralelas empregando a seguinte sintaxe:
A primeira thread que chegar à diretiva omp single executa o bloco de código (não necessariamente a master thread). Ao final da região single ocorre uma sincronização implícita entre todas as threads. A sincronização pode ser evitada com o uso da cláusula nowait.
O seguinte código é uma implementação OpenMP/C++ do método de Jacobi para resolver um sistema linear . Em cada iteração, a distribuição do laço nas linhas é feita com a diretiva omp for. A cada iteração, as threads devem esperar até que todas tenham terminado a iteração anterior. A verificação do critério de parada é feita com a diretiva omp single. Verifique!
A diretiva omp master é usada para indicar que um bloco de código deve ser executado apenas pela master thread. Ela pode ser usada dentro de regiões paralelas empregando a seguinte sintaxe:
Não há sincronização implícita no início ou final dessa região.
O seguinte código é uma implementação OpenMP/C++ do método de Euler explícito para a solução de diferenças finitas da equação do calor
(2.6) |
no domínio , com condição inicial
(2.7) |
e condições de contorno de Dirichlet homogêneas. O domínio é discretizado em passos no tempo e passos no espaço.
Verifique! A solução analítica do problema de calor acima é
(2.8) |
Desenvolva um código OpenMP/C++ para computar a solução de diferenças finitas do seguinte problema da onda
(2.9) | |||
(2.10) | |||
(2.11) | |||
(2.12) |
Use a diretiva omp master para que a master thread controle o armazenamento, em arquivo, de soluções discretas no tempo. Dica: a solução analítica deste problema é
(2.13) |
Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.