| | | |

Computação Paralela com C++

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

2.2 Escalabilidade e eficiência

Escalabilidade é a capacidade de um sistema computacional de aumentar sua performance com o aumento do número de threads disponíveis. A escalabilidade pode ser medida em termos da aceleração (speedup) e da eficiência.

Definição 2.2.1.

A aceleração é a razão entre o tempo de execução do código serial e o tempo de execução do código paralelo.

S(p)=T(1)T(p) (2.1)

onde S(p) é a aceleração e T(p) é o tempo de execução do código com p threads disponíveis.

A aceleração é uma medida de desempenho:

  • S(p)=1: o código não é paralelo;

  • S(p)>1: o código é paralelo;

  • S(p)<1: o código é mais lento que o serial.

  • S(p) quando p: o código é escalável.

Exemplo 2.2.1.

A Figura 2.2 mostra a aceleração do Código 2 para vetores de tamanho n=108. O computação do tempo de execução foi feita com o método omp_get_wtime().

Refer to caption
Figura 2.2: Aceleração do Código 2 para vetores de tamanho n=108.

A eficiência é a razão entre a performance do sistema e a performance ideal.

Definição 2.2.2.

A eficiência é a razão entre a aceleração e o número de threads disponíveis.

E(p)=S(p)p (2.2)

onde E(p) é a eficiência, S(p) é a aceleração e p é o número de threads disponíveis.

A eficiência é uma medida de performance:

  • E(p)=1: o código é perfeitamente escalável;

  • E(p)<1: o código não é escalável.

  • E(p)0 quando p: o código não é escalável.

  • E(p)1 quando p: o código é escalável.

Exemplo 2.2.2.

A Figura 2.3 mostra a eficiência do Código 2 para vetores de tamanho n=108. O computação do tempo de execução foi feita com o método omp_get_wtime().

Refer to caption
Figura 2.3: Eficiência do Código 2 para vetores de tamanho n=108.
Observação 2.2.1.(Dependência da máquina)

A eficiência e a aceleração dependem da arquitetura da máquina. O desempenho do código pode ser diferente em máquinas diferentes.

2.2.1 Exercícios

E. 2.2.1.

Faça um gráfico da aceleração do Código 2 para vetores de diferentes tamanhos n. O que ocorre quando n aumenta? Então, faça um estudo semelhante da eficiência de seu código.

E. 2.2.2.

Faça uma nova versão do Código 2 para computar a soma entre dois vetores de n números randômicos em ponto flutuante. Para a distribuição da tarefa, os vetores são divididos em pedaços (chunks) de tamanho 0<m<n. Os pedaços são distribuídos para que cada thread compute as devidas somas parciais. Faça um estudo comparativo da escalabilidade de cada versão do código com:

  1. a)

    m=1.

  2. b)

    m=10.

  3. c)

    m=100.

  4. d)

    m=1000.

  5. e)

    m=10000.

E. 2.2.3.

Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.4. Você consegueria fazer uma nova versão paralela mais eficiente?

E. 2.2.4.

Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.5. Você conseguiria fazer uma nova versão paralela mais eficiente?


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
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.

Computação Paralela com C++

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

2.2 Escalabilidade e eficiência

Escalabilidade é a capacidade de um sistema computacional de aumentar sua performance com o aumento do número de threads disponíveis. A escalabilidade pode ser medida em termos da aceleração (speedup) e da eficiência.

Definição 2.2.1.

A aceleração é a razão entre o tempo de execução do código serial e o tempo de execução do código paralelo.

S(p)=T(1)T(p) (2.1)

onde S(p) é a aceleração e T(p) é o tempo de execução do código com p threads disponíveis.

A aceleração é uma medida de desempenho:

  • S(p)=1: o código não é paralelo;

  • S(p)>1: o código é paralelo;

  • S(p)<1: o código é mais lento que o serial.

  • S(p) quando p: o código é escalável.

Exemplo 2.2.1.

A Figura 2.2 mostra a aceleração do Código 2 para vetores de tamanho n=108. O computação do tempo de execução foi feita com o método omp_get_wtime().

Refer to caption
Figura 2.2: Aceleração do Código 2 para vetores de tamanho n=108.

A eficiência é a razão entre a performance do sistema e a performance ideal.

Definição 2.2.2.

A eficiência é a razão entre a aceleração e o número de threads disponíveis.

E(p)=S(p)p (2.2)

onde E(p) é a eficiência, S(p) é a aceleração e p é o número de threads disponíveis.

A eficiência é uma medida de performance:

  • E(p)=1: o código é perfeitamente escalável;

  • E(p)<1: o código não é escalável.

  • E(p)0 quando p: o código não é escalável.

  • E(p)1 quando p: o código é escalável.

Exemplo 2.2.2.

A Figura 2.3 mostra a eficiência do Código 2 para vetores de tamanho n=108. O computação do tempo de execução foi feita com o método omp_get_wtime().

Refer to caption
Figura 2.3: Eficiência do Código 2 para vetores de tamanho n=108.
Observação 2.2.1.(Dependência da máquina)

A eficiência e a aceleração dependem da arquitetura da máquina. O desempenho do código pode ser diferente em máquinas diferentes.

2.2.1 Exercícios

E. 2.2.1.

Faça um gráfico da aceleração do Código 2 para vetores de diferentes tamanhos n. O que ocorre quando n aumenta? Então, faça um estudo semelhante da eficiência de seu código.

E. 2.2.2.

Faça uma nova versão do Código 2 para computar a soma entre dois vetores de n números randômicos em ponto flutuante. Para a distribuição da tarefa, os vetores são divididos em pedaços (chunks) de tamanho 0<m<n. Os pedaços são distribuídos para que cada thread compute as devidas somas parciais. Faça um estudo comparativo da escalabilidade de cada versão do código com:

  1. a)

    m=1.

  2. b)

    m=10.

  3. c)

    m=100.

  4. d)

    m=1000.

  5. e)

    m=10000.

E. 2.2.3.

Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.4. Você consegueria fazer uma nova versão paralela mais eficiente?

E. 2.2.4.

Faça um estudo da escalabilidade de seu código elaborado no Exercício 2.1.5. Você conseguiria fazer uma nova versão paralela mais eficiente?


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
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.

Pedro H A Konzen
| | | |